Skip to main content
When your sales agent or inventory source finishes an async task, such as create_media_buy, update_media_buy, sync_creatives or sync_accounts, it sends the result back to Apostra as a callback. We refuse a callback that fails a check, and the response we send is deliberately generic (for example 401 with no cause), so a sender cannot use it to probe the verifier. You do not have to guess the cause. The owner of the agent can read what we recorded, including the specific reason.

Read the results

Call get with kind: "agent", the agent’s id, and include: ["webhookDeliveries"]. The object carries webhookDeliveries:
Only an administrator of the account that owns the agent can read this: it admits the same accounts and people as reading the agent itself. An agent’s results never appear in another organization’s reads. The read covers the Inventory Sources that belong to your own organization’s accounts; an agent that serves publishers in other organizations shows only the callbacks for your own sources.

What the read does not show

  • At most 500 sources. A read searches an agent’s first 500 Inventory Sources by id. When the agent has more, sourcesTruncated is true and the results do not include the rest, whatever hasMore says.
  • One entry per minute for a repeated refusal. We store at most one refusal a minute for the same source, operation and reason, and repeats counts the ones that followed. A sender that retries a refused callback in a tight loop reads as one entry with a count.
  • Not every callback route. Results cover the callbacks your agent sends to Apostra for your Inventory Sources: refusals, accepted media-buy callbacks, and creative-sync callbacks. A callback your agent sends to the callback URL we gave it as a sales agent, and an accepted sync_accounts callback, are counted but not recorded here.
  • Callbacks we could not tie to a source. A callback for a source we cannot identify has nothing to attach to, so it does not appear.

Refusal reasons

Each refusal carries one of these codes. The first column is the reasonCode. A callback that fails with task_id_missing or task_not_pending is acknowledged with a success status, because there is nothing for the sender to retry. It still reads as refused here, because we did not apply it.

Accepted callbacks

An accepted entry means we applied the callback. It says nothing about the status the callback reported: a seller’s task can fail and its callback still be accepted.