--- title: "GET /creators: Approved creators on sale now, by name, with price per format and format advice | distribution.tech" description: "Scope: creators:read." canonical: https://distribution.tech/docs/api/get-creators generator: md-live-route generated: 2026-10-21T23:52:42.612Z --- # GET /creators: Approved creators on sale now, by name, with price per format and format advice | distribution.tech - [Getting started](https://distribution.tech/docs) - [Guides](https://distribution.tech/docs/help/plan-a-campaign) - [API reference](https://distribution.tech/docs/api) - [MCP and agents](https://distribution.tech/docs/agents) - [Changelog](https://distribution.tech/docs/changelog) Search the docs Docs - Using the API › - [API reference](https://distribution.tech/docs/api) - [Authentication](https://distribution.tech/docs/api/authentication) - [Scopes](https://distribution.tech/docs/api/scopes) - [Errors](https://distribution.tech/docs/api/errors) - Inventory and audience › - [GET /audience](https://distribution.tech/docs/api/get-audience) - [GET /inventory](https://distribution.tech/docs/api/get-inventory) - Creators › - [GET /creators](https://distribution.tech/docs/api/get-creators) - [GET /creators/{id}](https://distribution.tech/docs/api/get-creators-id) - [POST /creators/{id}/price-request](https://distribution.tech/docs/api/post-creators-id-price-request) - Campaigns › - [GET /campaigns](https://distribution.tech/docs/api/get-campaigns) - [POST /campaigns](https://distribution.tech/docs/api/post-campaigns) - [GET /campaigns/{id}](https://distribution.tech/docs/api/get-campaigns-id) - [PATCH /campaigns/{id}](https://distribution.tech/docs/api/patch-campaigns-id) - [DELETE /campaigns/{id}](https://distribution.tech/docs/api/delete-campaigns-id) - [POST /campaigns/{id}/archive](https://distribution.tech/docs/api/post-campaigns-id-archive) - [POST /campaigns/{id}/creator-guidelines](https://distribution.tech/docs/api/post-campaigns-id-creator-guidelines) - Plans › - [POST /plans/{id}/approve](https://distribution.tech/docs/api/post-plans-id-approve) - [POST /plans/{id}/dates](https://distribution.tech/docs/api/post-plans-id-dates) - [POST /plans/{id}/lines](https://distribution.tech/docs/api/post-plans-id-lines) - [GET /plans/{id}/quote](https://distribution.tech/docs/api/get-plans-id-quote) - [DELETE /plans/{id}/lines/{line\_id}](https://distribution.tech/docs/api/delete-plans-id-lines-line-id) - [POST /plans/{id}/lines/{line\_id}/swap](https://distribution.tech/docs/api/post-plans-id-lines-line-id-swap) - Proof and results › - [GET /evidence](https://distribution.tech/docs/api/get-evidence) - [GET /results](https://distribution.tech/docs/api/get-results) - Company context › - [GET /brain](https://distribution.tech/docs/api/get-brain) - Feedback › - [GET /feedback](https://distribution.tech/docs/api/get-feedback) - [POST /feedback](https://distribution.tech/docs/api/post-feedback) 1. [distribution](https://distribution.tech/) 2. / [Docs](https://distribution.tech/docs) 3. / [API reference](https://distribution.tech/docs#api) 4. / Creators API reference, Creators # Approved creators on sale now, by name, with price per format and format advice GET /creators Scope: creators:read. Copy page as markdown [View .md](https://distribution.tech/docs/api/get-creators.md) ## Overview Scope: creators:read. Takes only the parameters listed here: any other (handle, for one) is refused with 400 bad\_request, details.problems naming it and details.accepted listing these, never ignored (DT-324). Endpoint `GET https://app.distribution.tech/api/v1/creators` Scope `creators:read` Changes data No, a read MCP tool [creators\_search](https://distribution.tech/docs/mcp/tools/creators-search) ## Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `q` | query | string | No | Part of a name, handle or bio. | | `segment` | query | string | No | An audience segment id, e.g. ai or saas\_b2b. | | `reach_band` | query | one of "nano", "micro", "mid", "macro", "mega" | No | The creator's size by followers. | | `goal` | query | one of "launch", "funding", "feature", "program" | No | The campaign's goal: launch, funding or feature (an announcement with a post of yours to quote) or program (steady reach). Shapes the format advice. | | `match` | query | string | No | Your audience segments, comma separated (from /audience): adds match\_score (over 70 strong, over 50 good) and ranks by it. | | `limit` | query | integer | No | Page size: default 24, at most 50. | | `offset` | query | integer | No | Where the page starts; page through every approved creator with total. | | `fit` | query | boolean | No | true: only creators reaching at least one of the match segments (the 'fit your audience' set); total then counts only those. | | `country` | query | string | No | The creator's country as X reports it, exact and case-insensitive, e.g. United States. | | `language` | query | string | No | The language the creator posts in, exact and case-insensitive, e.g. English. | | `followers_min` | query | integer | No | At least this many X followers. | | `followers_max` | query | integer | No | At most this many X followers. | | `er_min` | query | number | No | At least this engagement rate over the last 30 days, in percent (0 to 100, two decimals). | | `match_min` | query | integer | No | At least this match score (0 to 100; over 70 strong, over 50 good). Needs match. | | `format` | query | one of "post", "quote", "thread" | No | Only creators selling this format; price and price filters then read that format's price. | | `price_min` | query | integer | No | The cheapest all-in price (of the format, when one is given) is at least this many US dollars. | | `price_max` | query | integer | No | The cheapest all-in price (of the format, when one is given) is at most this many US dollars. | | `sort` | query | one of "match", "followers", "engagement", "views", "price" | No | Order: match (default, best fit first), followers, engagement, views (median views a post) or price (cheapest all-in price). | | `dir` | query | one of "desc", "asc" | No | desc (default) or asc. | | `budget` | query | integer | No | The campaign budget in US dollars. It sizes the shortlist (three times the posts it buys at the good fits' median price, 10 to 50); without it the list is 25. It never filters. | ## 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 "https://app.distribution.tech/api/v1/creators" \ -H "Authorization: Bearer $DISTRIBUTION_API_KEY" ``` ## Response `200` OK. The body has these fields: | Name | Type | Required | Description | | --- | --- | --- | --- | | `total` | integer | No | How many creators this answer lists: the shortlist, never a count of the network. | | `priced` | integer | No | How many of total are bookable now by the one rule in the API description (What bookable means); the rest carry price\_estimate, never a price. | | `catalog` | object | No | The whole network, whatever this call filtered: the same counts as the app and the site (GET /api/network/facts on the app host), refreshed at most every five minutes. Left out when the network cannot be counted right now, never guessed. | | `cap` | integer | No | How many creators the selection holds (the same as total). | | `limit` | integer | No | This page's size: default 24, at most 50. | | `offset` | integer | No | Where this page starts, at most total (an offset past the end is answered as total); the next page starts at offset + limit while it is below total. | | `creators` | array of object | No | Summary rows, best fits first by score and in the order asked for: no handle, link or posts. GET /creators/{id} (creator\_get) opens one in full. | 200 response body, every field with its type ``` { "total": 0, "priced": 0, "catalog": { "approved": 0, "priced": 0 }, "cap": 0, "limit": 0, "offset": 0, "creators": [ { "provenance": { "followers": { "source": "", "method": "", "measured_at": "", "expires_at": "", "label": "Verified", "stale": false, "as_of": "" }, "median_views_30d": { "source": "", "method": "", "measured_at": "", "expires_at": "", "label": "Verified", "stale": false, "as_of": "" }, "engagement_rate_30d": { "source": "", "method": "", "measured_at": "", "expires_at": "", "label": "Verified", "stale": false, "as_of": "" } }, "id": "", "name": "", "status": "approved", "status_label": "", "status_reason": "", "in_automatic_plans": false, "match_score": 0, "match_label": "", "on_sale": false, "reach_band": "nano", "median_views_30d": 0, "median_views_30d_network": 0, "followers": 0, "verified_badge": false, "country": "", "language": "", "segments": [ "" ], "bio": "", "positioning": "", "avatar_url": "", "ask_price": false, "price_estimate": { "min_usd": 0, "max_usd": 0, "label": "", "provenance": { "source": "", "method": "", "measured_at": "", "expires_at": "", "label": "Verified", "stale": false, "as_of": "" }, "calc": { "calc_version": "", "inputs": {} } }, "engagement_rate_30d": 0, "posts_per_week": 0, "match_reasons": [ { "kind": "topic", "text": "" } ], "past_collabs": [ { "project": "", "title": "", "date": "", "role": "Launch post", "brand": { "avatar_url": "", "site": "", "initials": "" } } ], "offerings": [ { "unit_id": "", "format": "post", "label": "", "deliverable": "", "price_cents": 0, "buyable": false, "price_as_of": "", "expected_views": 0, "cost_per_1k_views_cents": 0, "provenance": { "source": "", "method": "", "measured_at": "", "expires_at": "", "label": "Verified", "stale": false, "as_of": "" }, "calc": { "calc_version": "", "inputs": {} } } ], "synced_at": "", "refresh_failed_at": "", "advice": { "recommended": "post", "reason": "" }, "views_series": [ 0 ] } ] } ``` ## 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 does not have this endpoint's scope. | | `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. Try again. | | `503` | unavailable: the service or this part of it is not reachable right now. Try again shortly. | ## Related endpoints - [`GET /creators/{id}`](https://distribution.tech/docs/api/get-creators-id): One creator's full profile - [`POST /creators/{id}/price-request`](https://distribution.tech/docs/api/post-creators-id-price-request): Ask for a price ## Get access Keys are created in Developers once your brand is approved. [Connect an agent](https://distribution.tech/distribution#access) to ask for access, then read [the agent guide](https://distribution.tech/docs/agents) for the full flow. On this page - [Overview](#overview) - [Parameters](#parameters) - [Request with curl](#curl) - [Response](#response) - [Errors](#errors) - [Related endpoints](#related) - [Get access](#access) [![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