distribution.techdistribution.tech

API reference, Creators

Ask for a price

POST /creators/{id}/price-request

Ask our team for the price of an approved creator with nothing on sale (ask_price true and price_estimate on its row; the estimate is never a price).

Overview

Ask our team for the price of an approved creator with nothing on sale (ask_price true and price_estimate on its row; the estimate is never a price). The team prices it, the price then shows on the creator (creator_get offerings) and as a priced answer on your plan, held for you for 48 hours; nothing is booked or charged until you add the creator to a plan and approve it. It reaches our team, never the creator. One open ask per creator: asking again answers already true and sends nothing. Opening the creator counts as one creator opened today (free when already opened). 3 asks for one creator and 20 in all in any 24 hours (rate_limited, reason daily_limit, with retry_after and resets_at saying when that limit reopens). A creator with a format on sale answers conflict, reason already_priced: add it with plan_add_creator. Optionally campaign_id: one of your campaigns the ask is for. Scope: creators:read. No Idempotency-Key: an ask is one open request per creator, so a retry while it is open answers already true; once it is answered or its 48 hours run out, asking again opens a new one. MCP tool: creator_ask_price.

Endpoint
POST https://app.distribution.tech/api/v1/creators/{id}/price-request
Scope
creators:read
Changes data
Yes, send an Idempotency-Key header

Parameters

Parameters of POST /creators/{id}/price-request
NameInTypeRequiredDescription
idpathstring (uuid)YesThe creator's id from a GET /creators row (a UUID).

Request body

Request body of POST /creators/{id}/price-request
NameTypeRequiredDescription
campaign_idstring (uuid)NoOne of your campaigns this ask is for; the priced answer then shows on that campaign's plan. Another brand's or an unknown id is dropped.
JSON body, every field
{
  "campaign_id": "<uuid>"
}

Request with curl

Set DISTRIBUTION_API_KEY to a key from Developers with the creators:read scope, and each path variable to an id from an earlier answer. The body carries the required fields.

curl
curl -X POST "https://app.distribution.tech/api/v1/creators/$CREATOR_ID/price-request" \
  -H "Authorization: Bearer $DISTRIBUTION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "campaign_id": "<uuid>"
}'

Response

200 Asked, or already asked (already true).. The body has these fields:

Response fields of POST /creators/{id}/price-request
NameTypeRequiredDescription
creator_idstring (uuid)Yes
requestedtrueYes
alreadybooleanYestrue: an ask for this creator is still open (an earlier call, or a teammate's click in the app); nothing new was sent. An ask is held for 48 hours: once it is answered or expires, the next call opens a new ask and answers already false.
statusone of "requested", "priced"Yesrequested: our team is pricing it. priced: a price is on the creator now (creator_get offerings) and held for you for 48 hours.
requested_atstring (date-time)Yes
nextstringYesWhat happens next, in one sentence.
200 response body, every field with its type
{
  "creator_id": "<uuid>",
  "requested": true,
  "already": false,
  "status": "requested",
  "requested_at": "<date-time>",
  "next": "<string>"
}

Errors

Error statuses of POST /creators/{id}/price-request
StatusWhen
400A parameter is not valid: details.problems names each field and what it accepts.
401No API key, an unknown one, or a revoked one.
403The key lacks creators:read, or the demo workspace (forbidden).
404No approved creator has that id.
409conflict, reason already_priced: a format is on sale; add it with plan_add_creator instead.
422unprocessable: not answered today; listed so every POST declares the same statuses.
429Too many creator reads (the creator meter: opening this creator counts as one creator opened today, free when already opened), or the daily ask limit: 3 for one creator and 20 in all in 24 hours (rate_limited, details.reason daily_limit). Retry-After says when.
500internal: the request failed on our side. Try again.
502unavailable: the ask did not reach our team, so it was not kept. Try again in a minute.
503unavailable: the service or this part of it is not reachable right now. Try again shortly.

Get access

Keys are created in Developers once your brand is approved. Connect an agent to ask for access, then read the agent guide for the full flow.