Overview
Set what every booked creator of one campaign reads: pitch (what the post should get across, up to 800 characters), key_messages, references (https links), voice (up to 300 characters), dos and donts (each list up to 8 items of up to 200 characters). Replaces the campaign's guidelines as a whole; a field left out is cleared. An archived campaign is refused (conflict, archived). Creators read the pitch, dos and donts with their proposal and everything once they accept; they never see a price, a budget or an email. campaign_status returns them. Needs an idempotency_key. Scope: campaigns:write. MCP tool: set_creator_guidelines.
- Endpoint
POST https://app.distribution.tech/api/v1/campaigns/{id}/creator-guidelines- Scope
campaigns:write- Changes data
- Yes, send an Idempotency-Key header
- MCP tool
- set_creator_guidelines
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string (uuid) | Yes | |
Idempotency-Key | header | string | Yes | 8 to 128 letters, digits or . _ : -. Retry with the same key and the same request to get the same answer; it never runs twice. |
Request body
| Name | Type | Required | Description |
|---|---|---|---|
pitch | string | No | |
key_messages | array of string | No | |
references | array of string | No | |
voice | string | No | |
dos | array of string | No | |
donts | array of string | No |
{
"pitch": "<string>",
"key_messages": [
"<string>"
],
"references": [
"<string>"
],
"voice": "<string>",
"dos": [
"<string>"
],
"donts": [
"<string>"
]
}Request with curl
Set DISTRIBUTION_API_KEY to a key from Developers with the campaigns:write scope, and each path variable to an id from an earlier answer. The body carries the required fields.
curl -X POST "https://app.distribution.tech/api/v1/campaigns/$CAMPAIGN_ID/creator-guidelines" \
-H "Authorization: Bearer $DISTRIBUTION_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"pitch": "<string>",
"key_messages": [
"<string>"
],
"references": [
"<string>"
],
"voice": "<string>",
"dos": [
"<string>"
],
"donts": [
"<string>"
]
}'Response
200 OK. The body has these fields:
| Name | Type | Required | Description |
|---|---|---|---|
campaign_id | string (uuid) | Yes | |
creator_guidelines | object | Yes |
{
"campaign_id": "<uuid>",
"creator_guidelines": {
"pitch": "<string>",
"key_messages": [
"<string>"
],
"references": [
"<uri>"
],
"voice": "<string>",
"dos": [
"<string>"
],
"donts": [
"<string>"
]
}
}Errors
| Status | When |
|---|---|
400 | A parameter is not valid: details.problems names each field and what it accepts. |
401 | No API key, an unknown one, or a revoked one. |
403 | The key lacks the scope, or the mandate refuses (mandate_refused, with the limit and how much over). |
404 | No plan, line or creator of yours has that id. |
409 | conflict (with a reason), idempotency_conflict, or in_progress (Retry-After). |
422 | unprocessable: the body is readable but a value cannot be used (a blank or too long name, a campaign that cannot be planned yet); details.problems names each field when there are several. |
429 | Too many requests for this key in the current minute (60); Retry-After and RateLimit-Reset say when to try again. On POST /campaigns and on POST /plans/current/lines when it starts a plan: the brand's 3 new campaigns in 24 hours are used (details.reason daily_campaign_limit); details.resets_at and Retry-After say when the limit reopens, a rolling 24 hours from the first of them, not a calendar day; archiving or deleting a campaign does not give its slot back. On GET /creators and GET /creators/{id}: a creator read limit is used (details.reason per_minute, daily_lists, daily_reveals, daily_seen or locked). daily_seen is your workspace's one pool of 300 creator views a day (300 different creators shown or opened since midnight UTC), shared by the app and every API key of the brand: details.scope workspace and details.limit 300; a creator already seen today, in the app or through any key, still opens and costs nothing. daily_lists is the day's list calls (each GET /creators page or creators_search is one; details.limit, 60): it is counted apart from creator views, resets at midnight UTC, and Retry-After says when. daily_reveals is the day's creator profiles opened (details.limit, 60). The other reasons are this key's own limit (details.scope key) or the brand's ceiling over all its keys (details.scope api). |
500 | internal: the request failed on our side. Retry it with the same Idempotency-Key. |
503 | unavailable: writes are not available right now (for an approval: payments are not open yet). |
Related endpoints
GET /campaigns: Your campaigns and where each standsPOST /campaigns: Start a campaignGET /campaigns/{id}: Where one campaign standsPATCH /campaigns/{id}: Rename a campaignDELETE /campaigns/{id}: Delete a draft campaignPOST /campaigns/{id}/archive: Archive a campaign
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.