---
title: "Make an opportunity a pursuit."
method: POST
path: "/strategy/opportunities/{opportunityId}/promote"
tags: ["Strategy"]
---

# Make an opportunity a pursuit.

`POST /strategy/opportunities/{opportunityId}/promote`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/strategy/opportunities/{opportunityId}/promote`
- Auth: HTTP bearer

As the opportunity's Promote on the Strategy page: a pursuit with its summary, deadline and suggested next move, linked to the same contact or company, optionally for one of your screenplay versions. One already promoted answers its pursuit with `alreadyPromoted: true`, so a retry never makes two. Free. Scope: `story:write`.

## Request body

- PromoteOpportunityRequest
  - `scriptUploadId` string: The screenplay version the pursuit is for.

## Response `200`

The pursuit.

- PromoteOpportunityResult
  - `pursuitId` string, required
  - `title` string, required
  - `alreadyPromoted` boolean, required: True when it was a pursuit already: that pursuit, unchanged.

## Other responses

- `400`: `validation_failed`: the message names the field.
- `401`: Missing, malformed, revoked, or expired API key.
- `403`: API key is valid but lacks the scope, is blocked by IP allowlist, or the account is disabled.
- `404`: `strategy_item_not_found`: no such row in your Strategy, or it is another writer's.
- `429`: Rate limit for this API key + IP + route family was exceeded.
- `500`: The API failed unexpectedly. Safe to retry with the same Idempotency-Key.
- `503`: `strategy_unavailable`: Strategy, or its watches, is switched off right now.

---

[API](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api.md) · [All operations](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/revisions/4534f5d25540?raw)
