--- title: "API release notes | distribution.tech" description: "Every release of the distribution REST API and MCP server, newest first: what changed, which fields and errors moved, and the date it shipped." canonical: https://distribution.tech/docs/changelog/api generator: md-live-route generated: 2026-10-19T11:02:56.433Z --- # API release notes | distribution.tech - [Getting started](https://distribution.tech/docs) - [API reference](https://distribution.tech/docs/api) - [MCP and agents](https://distribution.tech/docs/agents) - [Changelog](https://distribution.tech/docs/changelog) Docs - Changelog › - [API releases](https://distribution.tech/docs/changelog/api) - [Product changelog](https://distribution.tech/changelog) - [Changelog](https://distribution.tech/docs/changelog) - [Brand terms changes](https://distribution.tech/docs/changelog/terms) 1. [distribution](https://distribution.tech/) 2. / [Docs](https://distribution.tech/docs) 3. / [Changelog](https://distribution.tech/docs/changelog) 4. / API Changelog # API release notes The distribution API is the contract every agent and integration calls, and this page records every change to it and to the MCP server, newest first: the fields, errors, limits and tools that moved in each version, and the day it shipped. The API is at version 1.25.0, released October 19, 2026, and every note below is read from the changelog the [OpenAPI document](https://app.distribution.tech/api/v1/openapi.json) carries, so this page and the contract never disagree. Last updated October 19, 2026 Copy page as markdown [View .md](https://distribution.tech/docs/changelog/api.md) ## 1.25.0, October 19, 2026 Inventory (GET /inventory, inventory) and resolve\_audience (GET /audience, resolve\_audience) carry bookable\_nodes on each channel, the creators bookable now by the one bookable rule, the same count as creators\_search priced and catalog.priced, never above verified\_nodes or the network's; priced\_units now counts only those creators' posts on sale at a current price (before, it counted every purchasable post, stale prices included), and the note names bookable creators before posts (DT-021, DT-292). ## 1.24.0, October 18, 2026 Creator views are one pool of 300 a day per workspace, shared by the app and every API key of the brand: a creator view is one different creator shown in a list or opened since midnight UTC, and a creator already seen today, in the app or through any key, is free. Before, the app and the API each counted their own 300, and each key had its own allowance under the brand's ceiling. Past 300 a list, and an open of a creator not yet seen today, answer 429 rate\_limited with details.reason daily\_seen, details.scope workspace and details.limit 300; Retry-After says when midnight UTC comes. The count is exact: a page served near the end of the pool lists only the creators that fit in it, so total can be larger than the creators returned. The short-window limits are unchanged (20 creator reads a minute and the pause after 40 creators opened in ten minutes), and so are the 60 searches and 60 creators opened a day per key and per brand. ## 1.23.1, October 18, 2026 The guest MCP door names only the channel on sale now: inventory and resolve\_audience list x\_creators only, and no channel is announced as next (the 1.21.0 note that the guest's channels are X creators and Reddit no longer holds). ## 1.23.0, October 18, 2026 An approved creator with nothing on sale is reachable from the API: creator\_ask\_price (POST /creators/{id}/price-request, scope creators:read, optional body campaign\_id) asks our team for its price, the same ask as the app's Ask for a price button, and never contacts the creator. It answers 200 with requested, already (true when an ask was already open, so nothing new was sent), status (requested or priced) and requested\_at; 409 conflict reason already\_priced for a creator with a format on sale; 404 for any id that is not an approved creator; 429 rate\_limited reason daily\_limit past 3 asks for one creator or 20 in all in any 24 hours, with retry\_after (also the Retry-After header) the seconds until that limit reopens and resets\_at the moment it does; 502 when the ask did not reach our team (it is not kept; try again). Opening the creator counts as one creator opened today on the creator meter, free when already opened. Each creator (GET /creators rows and GET /creators/{id}, creators\_search and creator\_get) carries ask\_price: true when nothing is on sale and the action is creator\_ask\_price, false when a format is on sale. price\_estimate.label reads "Est. $200 to $1,000", the range joined by to, never a dash. ## 1.22.0, October 17, 2026 A creator's status value for a creator not yet reviewed is now not\_reviewed (Creator.status, DT-272); a campaign a key starts that has no plan yet reads stage\_id draft (GET /campaigns, campaign\_status) and DELETE /campaigns/{id} deletes it, as for a draft the workspace starts (DT-270); POST /campaigns/{id}/creator-guidelines refuses a body field it does not take with 400 bad\_request naming it, and set\_creator\_guidelines refuses an argument it does not take (DT-269); the RateLimit headers describe the fixed 60-second window (DT-271). ## 1.21.0, October 17, 2026 The guest MCP door (/api/mcp/guest) answers five of its 6 tools with no key. inventory gives the whole network per channel (no audience applied: approved creators, posts on sale at a current price, strong or thin, and catalog), resolve\_audience the fit for a profile you describe (product, audience, geography; intent\_id needs an account and answers needs\_account), brain\_get the empty context a guest has (version 0) with claim, and guest\_status lists them in answers\_now with the guest limits. plan\_quote\_guest answers 3 quotes per client address in any 7 days, says quotes\_left, and refuses the next with rate\_limited (reason guest\_quote\_limit, limit, window\_days, retry\_after, resets\_at, claim); a call that prices nothing (a bad argument, a format with nothing on sale, a failed read) spends none. feedback\_send still needs an account: its guest description says so and a guest call answers 401 with claim. The guest's channels are X creators and Reddit only. ## 1.20.0, October 17, 2026 A creator's X handle and profile link show only once the brand's order for the plan is paid. Before that, plan\_quote (GET /plans/{id}/quote) lines carry creator.name, creator.id and creator\_id with creator.handle and creator.profile\_url null, and campaign\_status (GET /campaigns/{id}) plan lines name no @handle in slot. creator\_get (GET /creators/{id}) carries handle and url null, and its recent\_posts and past\_collabs carry no x.com link (url null); a paid creator's handle is on the paid plan's quote. ## 1.19.0, October 16, 2026 Plan\_move\_dates (POST /plans/{id}/dates, body start and end as YYYY-MM-DD) moves a plan awaiting approval to new dates in one step: the plan's launch window, the campaign's dates and every creator's post date move together, each post keeping its place in the window and pulled inside a shorter one; prices do not change. Refusals are 409 conflict with reason bad\_dates (a start before today, an end before the start, or more than a year apart), same\_day (two posts by one creator would fall on one day; nothing moves) or plan\_signed (a signed plan or one the team wrote). ## 1.18.0, October 16, 2026 A creators list that names nothing (GET /creators, creators\_search) from a brand with an audience on file now returns that audience's creators (200) instead of 400 filter\_required; only a brand with no audience on file is refused with filter\_required. Creator lists and searches are limited to an audience whenever one applies: the segments passed in match, else the brand's own audience segments, and a segment named without match replaces the audience as the filter; q, reach\_band and the filters narrow it, so total counts only creators that reach that audience. A brand with no audience on file that names only q, reach\_band or a filter gets every approved creator those match, with no audience limit. inventory (GET /inventory) counts in x\_creators verified\_nodes only creators the creator lists can show, the same number as a bare list's total. ## 1.17.0, October 16, 2026 The guest MCP door (/api/mcp/guest; POST /api/mcp with no key answers 401 with the OAuth sign-in challenge, so a client that supports OAuth signs in there) lists exactly 6 tools, each with a title and its annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint): inventory, resolve\_audience, brain\_get and feedback\_send, which need an account, and two that answer with no key, guest\_status (what answers now, what needs an account, and claim) and plan\_quote\_guest (format post, quote or thread and posts 1 to 50: the all-in price range per post across every creator on sale now, times the posts, never a creator). A guest call to a tool that needs an account answers 401 with the claim link in the message and in error.data.claim (url, developers\_url, sign\_in, key): sign in at /connect, then create a key in Developers. The workspace's GET /api/keys/usage takes days=7, 30 or 90 (and key\_id) and answers requests per UTC day for the whole range (range\_days, timezone, days with day, ok and errors, total, errors), a day with no request as zeros and the totals the sum of the days; without days it pages the request log as before. ## 1.16.0, October 16, 2026 Plan\_quote (GET /plans/{id}/quote) carries over\_budget: budget\_cents, total\_cents and over\_by\_cents when the plan is over its campaign's budget, at current prices when a creator's price rose past it (the plan keeps its earlier prices, so total\_cents alone read as within the budget, and the quote said nothing); its policy then refuses with reason over\_budget. The figures are the whole plan's overage, never the first creator's alone. Null within the budget. ## 1.15.0, October 16, 2026 Creator reads through API keys are metered apart from the app's: each key has its own allowance (20 creator reads a minute, 60 searches a day, 60 creators opened a day and 300 different creators shown a day) and all of a brand's keys together, revoked ones included, share one brand ceiling of the same totals; before, the app, its chat and every key shared one per workspace, so an agent's reads could close the app with 429. A creator 429 carries details.scope, key (this key's allowance) or api (the brand's ceiling over its keys). The 3 new campaigns in 24 hours count every campaign started in the window, so archiving or deleting one no longer gives its slot back (429 rate\_limited, details.reason daily\_campaign\_limit, with resets\_at as before). ## 1.14.0, October 15, 2026 No creator is added to a plan past its campaign's budget, by any key or person: plan\_add\_creator (POST /plans/{id}/lines, a named plan or current) and plan\_swap\_creator (POST /plans/{id}/lines/{line\_id}/swap) refuse a creator that would take the plan's all-in total over the budget with 409 conflict, reason over\_budget, budget\_cents, remaining\_cents, price\_cents and over\_by\_cents, and the plan is left as it was. A swap for a creator at or under the removed creator's price still goes through on a plan at its budget. A creator's price that rose past the budget is not taken onto the plan: approve\_plan answers the same over\_budget conflict with the figures at current prices. ## 1.13.1, October 15, 2026 Approve\_plan's body (ApproveInput) lists confirm\_over\_budget\_cents again, deprecated and ignored if sent, so a client that still sends it passes the schema; it confirms nothing. ## 1.13.0, October 15, 2026 A plan over its campaign's budget is never approved, by any key or person: approve\_plan (POST /plans/{id}/approve) refuses it with 409 conflict, reason over\_budget and over\_by\_cents, until a creator is removed or the budget is raised. confirm\_over\_budget\_cents is removed from approve\_plan and from plan\_quote's policy, and is ignored if sent; the mandate's may\_exceed\_budget is retired and always false. ## 1.12.0, October 15, 2026 GET /creators and creators\_search carry catalog, the whole network's counts whatever the filter (catalog.approved approved creators, catalog.priced of them bookable now), the same numbers the app and the site show; left out when the network cannot be counted. ## 1.11.0, October 15, 2026 GET /creators and creators\_search carry priced, how many of total have something on sale now. ## 1.10.0, October 15, 2026 Every 422 carries details.problems, each a field and a message, the one error shape; details.field is removed from the 422s that carried it (POST /feedback and feedback\_send, POST /campaigns/{id}/creator-guidelines and set\_creator\_guidelines), so read details.problems\[\].field instead. GET /campaigns answers 400 with details.problems to a parameter it does not take (limit, offset or anything else) or an include\_archived that is not true or false; before, such a parameter was ignored. ## 1.9.0, October 13, 2026 GET /creators and creators\_search refuse a list that names nothing to narrow it (no match, segment, q, reach\_band or filter) with 400 filter\_required; pass at least one. ## 1.8.0, October 12, 2026 A results item carries previous, the reading before the newest one per metric (views, likes, comments, shares and when it was captured), null with fewer than two readings. ## 1.7.0, October 12, 2026 A creator carries match\_reasons, why it matches (topic, reach with its as-of date, launches posted about, engagement above the median of the creators listed); an evidence and a results item carry still\_up, the first reading on or after day 7 that shows the post stayed up. ## 1.6.0, October 12, 2026 Each quote line (plan\_quote, GET /plans/{id}/quote) carries stage\_id and stage, the same post stage model as a campaign's lines\_by\_stage, and creator\_id beside creator.id; brand\_terms carries current\_number and accepted\_number\_for\_this\_key (the version number the app shows, version 3), and the terms resource carries number; creator\_get takes creator\_id again as another name for id (it was renamed id in 1.4.0 with no note here); a 403 that is not about the key's scope (mandate\_refused, for one) no longer carries WWW-Authenticate insufficient\_scope. ## 1.5.1, October 11, 2026 A quote line's creator carries its id (for creator\_get) when known. ## 1.5.0, October 11, 2026 Plan\_swap\_creator (POST /plans/{id}/lines/{line\_id}/swap) replaces one line of a plan with another creator's format in one step, both or neither; the daily campaign limit's resets\_at is when it truly reopens (a rolling 24 hours); creator status words now read Not reviewed, Reviewed and Under review. ## 1.4.1, October 11, 2026 The two view medians have names that say which is which: median\_views\_30d\_network on the creator (all their posts, as the network measures it) and posts\_summary.posts\_sample\_median\_views (the held posts only); the old median\_views\_30d and posts\_summary.median\_views carry the same numbers, deprecated, until 2027-01-11; GET /campaigns and the MCP campaigns list leave archived campaigns out unless include\_archived=true. ## 1.4.0, October 11, 2026 One version for the API and the MCP server; refresh\_failed\_at is documented on the creator. ## 1.3.0, October 10, 2026 A campaign has a stored name, ", , " until it is renamed; PATCH /campaigns/{id} (rename\_campaign) renames it, the campaign lists carry it as display\_name, and create\_campaign answers with the budget it stored. ## 1.2.0, October 10, 2026 A campaign's stage is one of eight fixed values from one stage model (stage\_id draft, sent, plan\_ready, approved, paid, running, complete, cancelled, and stage the matching label: Draft, Sent, Plan ready, Approved, Paid, Running, Complete, Cancelled); before this, stage was free text, so branch on stage\_id, never on the label. Each plan line also carries its post stage (stage\_id planned, offered, creator\_confirmed, scheduled, live, proof\_attached, cancelled, and stage the label), the plan carries lines\_by\_stage, and the campaigns list carries waits\_on\_you (approve or pay). A refunded or cancelled order makes the campaign cancelled. Every response carries an x-request-id header (yours echoed when you send one of 8 to 128 letters, digits or . \_ : -); quote it when you report a slow or failed call. A write still running after 25 seconds answers 503 with Retry-After: retry it with the same Idempotency-Key for its result. A key comes from Developers once your brand is approved. [Connect an agent](https://distribution.tech/distribution#access) to ask for access, then follow [the agent guide](https://distribution.tech/docs/agents). On this page - [1.25.0, 2026-10-19](#v1-25-0) - [1.24.0, 2026-10-18](#v1-24-0) - [1.23.1, 2026-10-18](#v1-23-1) - [1.23.0, 2026-10-18](#v1-23-0) - [1.22.0, 2026-10-17](#v1-22-0) - [1.21.0, 2026-10-17](#v1-21-0) - [1.20.0, 2026-10-17](#v1-20-0) - [1.19.0, 2026-10-16](#v1-19-0) - [1.18.0, 2026-10-16](#v1-18-0) - [1.17.0, 2026-10-16](#v1-17-0) - [1.16.0, 2026-10-16](#v1-16-0) - [1.15.0, 2026-10-16](#v1-15-0) - [1.14.0, 2026-10-15](#v1-14-0) - [1.13.1, 2026-10-15](#v1-13-1) - [1.13.0, 2026-10-15](#v1-13-0) - [1.12.0, 2026-10-15](#v1-12-0) - [1.11.0, 2026-10-15](#v1-11-0) - [1.10.0, 2026-10-15](#v1-10-0) - [1.9.0, 2026-10-13](#v1-9-0) - [1.8.0, 2026-10-12](#v1-8-0) - [1.7.0, 2026-10-12](#v1-7-0) - [1.6.0, 2026-10-12](#v1-6-0) - [1.5.1, 2026-10-11](#v1-5-1) - [1.5.0, 2026-10-11](#v1-5-0) - [1.4.1, 2026-10-11](#v1-4-1) - [1.4.0, 2026-10-11](#v1-4-0) - [1.3.0, 2026-10-10](#v1-3-0) - [1.2.0, 2026-10-10](#v1-2-0) [![distribution.tech](https://distribution.tech/brand/wordmark-light.svg)![distribution.tech](https://distribution.tech/brand/wordmark.svg)](https://distribution.tech/) Your agent buys your distribution. Distribution we run for - ClickUp - Gushwork - Tab Platform - [How it works](https://distribution.tech/how-it-works) - [Network](https://distribution.tech/network) - [Workspace](https://app.distribution.tech/login) - [For your agents](https://distribution.tech/distribution) Solutions - [Product launch](https://distribution.tech/solutions/product-launch) - [Funding announcement](https://distribution.tech/solutions/funding-announcement) - [Feature release](https://distribution.tech/solutions/feature-release) - [For brands](https://distribution.tech/for-brands) - [For creators](https://distribution.tech/for-creators) Resources - [Blog](https://distribution.tech/blog) - [Launch playbook](https://distribution.tech/playbook) - [X creator rates](https://distribution.tech/rates/x-creators) Company - [Customers](https://distribution.tech/customers) - [Pricing](https://distribution.tech/pricing) - [Changelog](https://distribution.tech/changelog) - [Build a distribution plan](https://app.distribution.tech/login) - [Join the creator network](https://distribution.tech/for-creators#apply) - [Log in](https://app.distribution.tech/login) Legal - [Privacy](https://distribution.tech/privacy) - [Terms](https://distribution.tech/terms) © 2026 distribution.tech [Contact: team@distribution.tech](mailto:team@distribution.tech)Cookie settings Light Dark System