> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apostra.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Creative sync outcomes

> Read where a creative stands on each seller, who must act, and why.

Apostra sends a creative to each seller on a media buy separately. When a
creative has not reached a seller, or the seller turned it down, the creative's
`platformLinks` tell you which of those happened, who must act, and why. Read
them before you tell anyone that a seller rejected a creative: a seller rejection
is one reason among several, and in most cases the seller never saw the creative.

`get` with `kind: "creative"` returns one entry in `platformLinks` per seller.
The same read in v2 returns `platform_links`, with the names in the last column
of the tables below.

## Where the creative stands

Each seller link is in exactly one stage, or in none when there is nothing to
report (the creative is synced and approved).

| Stage | Meaning | v2 field |
| - | - | - |
| `not_sent` | Apostra could not send the creative to this seller, for a reason on our side. The seller never saw it. | `sync_stage` |
| `pending` | The creative is on its way and a party is expected to take a step, such as a seller's review. It is not an error. | `sync_stage` |
| `failed` | The creative cannot get there without a correction. | `sync_stage` |

## Who must act

The party who must act follows the cause, not the step where it showed up.

| Party | Meaning | v2 field |
| - | - | - |
| `seller` | The seller is reviewing or processing the creative. Nothing for you to do. | `must_act` |
| `buyer` | The creative itself must change: a missing click-through URL, a creative the seller rejected, or changes the seller asked for. | `must_act` |
| `apostra` | Apostra must fix it. The creative is not at fault, and you cannot fix it by editing the creative. | `must_act` |

A `not_sent` creative always names Apostra.

## Why

In v2, `sync_reason` carries the reason. In v3, `failureReason` carries it for
links that are `not_sent` or `failed`, and is absent for a link that is `pending`
or live. For a pending link, read `status` and `approvalStatus`: a seller
reviewing the creative reads as `approvalStatus: "pending"`, and a seller that
asked for changes reads as `approvalStatus: "changes_requested"`. Every reason
fixes its stage and the party who must act.

| Reason | Stage | Who must act | What happened |
| - | - | - | - |
| `account_not_linked` | `not_sent` | `apostra` | The account for this seller is not linked or not ready, so we did not send the creative. |
| `client_setup_failed` | `not_sent` | `apostra` | We could not set up the connection to this seller. |
| `format_unresolved` | `not_sent` | `apostra` | We could not work out which of the seller's formats the creative belongs to. |
| `request_invalid` | `not_sent` | `apostra` | The request we built for this seller failed our own checks before it was sent. |
| `destination_profile_refused` | `not_sent` | `apostra` | The destination rules for the seller's ad server refused to forward the creative, for example a video kind or VAST version that destination cannot carry. The seller was never called. |
| `click_through_unverified` | `not_sent` | `apostra` | We could not verify the creative's click-through destination and did not send it. Syncing again retries the check. |
| `send_failed` | `not_sent` | `apostra` | Our attempt to send the creative did not complete. |
| `awaiting_seller_review` | `pending` | `seller` | The seller has the creative and has not yet decided. |
| `seller_requested_changes` | `pending` | `buyer` | The seller asked for changes before it will approve the creative. |
| `click_through_required` | `failed` | `buyer` | The creative has no click-through URL, or no destination in its VAST document, and we do not send a creative without one. |
| `landing_page_invalid` | `failed` | `buyer` | The landing-page URL is not an HTTP or HTTPS address. |
| `creative_refused` | `failed` | `buyer` | We refused the creative before sending it because it cannot be delivered as submitted. |
| `seller_rejected_content` | `failed` | `buyer` | The seller reviewed the creative and rejected it. This is the only reason that means the seller rejected the creative's content. |
| `seller_rejected_request` | `failed` | `apostra` | The seller refused how we sent the creative, for example an invalid request or an account it does not know. It gave no verdict on the creative. |
| `seller_error` | `failed` | `apostra` | The seller returned an error or did not process the creative. It gave no verdict on the creative. |

The set is closed. A link with no reason has nothing to report, or was last
written before reasons were recorded; it fills in the next time the creative is
sent to that seller.

## What to say to a buyer

* Say a seller rejected a creative only for `seller_rejected_content`, or when
  `approvalStatus` is `rejected`.
* For `not_sent`, say the creative was not sent and Apostra must fix it. The
  buyer does not need to change the creative.
* For `buyer`, say what must change, using the reason above.
* `rejectionReason` (v2: `rejection_reason`) is only the seller's own note. A
  creative that was not sent has none.

See [Creative approval](/v2/buyer/creatives/approval) for the two review gates
a creative passes through after a media buy is forwarded.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.