---
title: "Extend a greenlit scene to your platform"
method: POST
path: "/api/v1/collab-scenes/{sceneId}/extend"
tags: ["Collab Scenes"]
---

# Extend a greenlit scene to your platform

`POST /api/v1/collab-scenes/{sceneId}/extend`

## Request

- Base URL: `https://easy2257.com`
- URL: `https://easy2257.com/api/v1/collab-scenes/{sceneId}/extend`
- Auth: HTTP bearer

Sign once, publish everywhere. Once a scene is greenlit on one platform, the uploader can syndicate it to any other Easy2257 partner platform without putting the performers through a second signing round, because the model releases already cover multi-platform distribution. There is no request body. Authorization is possession of the `sceneId` of a greenlit scene: an unguessable id that only the scene's creating partner holds, handed to you when the uploader arranges the syndication. The scene owner is notified of every publication you register. Charges your partner account a $2 extension fee (200 cents, USD), off-session against the saved payment method of your partner owner user, at most once per partner per scene: a re-POST retries an unpaid fee instead of charging again. The extension is recorded even if the charge fails; read the `fee` object in the response rather than assuming payment succeeded. Then call `POST /publications` with your URL and hash. Each platform's publications stay separate for acquirer reports and for the removal portal.

## Path parameters

- `sceneId` string, required

## Response `200`

Extension recorded, with the fee outcome in `fee`. Proceed to POST /publications.

- ExtendSceneResponse
  - `sceneId` string, required
  - `status` 'greenlit', required
  - `extendedTo` string, required: Your partner id, confirming the extension was recorded against your account.
  - `performerCount` integer, required: Number of performers on the scene.
  - `consentedCount` integer, required: How many of those performers have signed consent.
  - `releaseSignedCount` integer, required: How many of those performers have a signed release on file.
  - `fee` object, required: Outcome of the $2 extension charge against your partner owner user's saved payment method.
    - `extensionFeeCents` integer, required
    - `charged` boolean, required: true once the extension fee has a Stripe charge on record. The extension itself is recorded either way.
    - `stripeChargeId` string, nullable, required: The Stripe PaymentIntent id of the extension charge, or null while the fee is unpaid.
    - `chargeError` string, nullable, required: null when the charge succeeded. Otherwise a free-form failure code, not a fixed enum: for example `no_payment_method` or `card_declined`. The fee stays unpaid and visible, and a re-POST of this endpoint retries it without stacking a second fee.
  - `nextStep` string, required

## Other responses

- `400`: Invalid request: a required field is missing or malformed.
- `401`: No `Authorization: Bearer` header, or a key that is unknown, revoked, or expired. The body carries only `error`, never a `code`.
- `403`: Rejected before the handler: a test-mode key (`TEST_MODE_UNAVAILABLE`) or a partner account that is not ACTIVE. Never used for cross-partner access, which returns 404.
- `404`: No such scene.
- `422`: The scene is not greenlit (`not_greenlit`), or it is already yours and needs no extension (`already_owner`).
- `429`: Rate limit exceeded: 300 requests per 60 seconds per API key, shared across all `/api/v1` endpoints (requests without a `Bearer` key fall back to 60 per 60 seconds per client IP, and a per-address flood ceiling of 1200 per 60 seconds also applies). Honor `Retry-After`.
- `500`: Server error. Retry with exponential backoff.

---

[API](https://skmtc.dev/easy2257/apis/easy2257-partner-api.md) · [All operations](https://skmtc.dev/easy2257/apis/easy2257-partner-api/llms.txt) · [OpenAPI document](https://skmtc.dev/easy2257/apis/easy2257-partner-api/revisions/f880026c1f04?raw)
