DocsAPI reference
API reference
Every route of the ViewPayout REST API with its auth and request fields.
The API is a JSON REST API. Its routes are listed below, grouped by what they do. Money is whole US cents everywhere.
A route that needs X or Stripe answers
503 provider_unavailable while that service cannot be reached. Nothing is charged when it does.Public
| Method | Path | Auth | What it does |
|---|---|---|---|
| GET | /v1/plans | None | Plans, fees, brand top-up sizes and bounty defaults. |
| GET | /v1/board | None | Public board of open bounties, newest first, 20 a page. Send limit (1 to 100) and next_cursor as cursor for more. No key needed. |
| GET | /v1/stats | None | Whole-market counters from our own database: open bounties and slots, verified posts and views, paid-out and payable cents, and the week's paid-out figure (null when a paid transfer has no date). |
| GET | /v1/activity | None | Newest-first feed of what happened: bounty_live, slot_taken, post_confirmed. Filter by brand (workspace slug) and kind, page with next_cursor. Creators are not named. |
| GET | /v1/feed | None | Alias of /v1/activity. |
| GET | /v1/bounties | None | Open bounties, filtered, sorted and paged. Filters: brand, search, min_rate_cents, max_floor_views, link_placement, rewarded_only, follower_fit, slots_left, claimable_now. Sorts: newest, oldest, rate_desc, rate_asc, floor_asc, slots_left_desc, ending_soonest. Page with next_cursor. |
| GET | /v1/workspaces/{slug} | None | One brand's public page: its counts and its open bounties, newest first. |
GET /v1/activity query parameters
| Parameter | Type | Notes |
|---|---|---|
brand | string | A brand's workspace slug. |
kind | "bounty_live", "slot_taken" or "post_confirmed" | Only this kind of event. |
limit | integer, 1 to 100 | Page size. Default 20. |
cursor | string | The next_cursor of the previous page, sent back unchanged with the same filters and sort. null on the last page. |
GET /v1/feed query parameters
| Parameter | Type | Notes |
|---|---|---|
brand | string | A brand's workspace slug. |
kind | "bounty_live", "slot_taken" or "post_confirmed" | Only this kind of event. |
limit | integer, 1 to 100 | Page size. Default 20. |
cursor | string | The next_cursor of the previous page, sent back unchanged with the same filters and sort. null on the last page. |
GET /v1/bounties query parameters
| Parameter | Type | Notes |
|---|---|---|
brand | string | A brand's workspace slug. |
search | string, 1 to 100 | Matches the title, the brief or the brand name, ignoring case. |
min_rate_cents | integer | Lowest rate per 1,000 views, in cents. |
max_floor_views | integer | Highest view floor. |
link_placement | "none", "body" or "reply" | Where the tracked link goes: no link, in the post or in the first reply. |
rewarded_only | true or false | Only bounties with at least one settled post that credited its creator. |
follower_fit | integer | The viewer's follower count; keeps bounties whose follower minimum it meets. |
slots_left | integer | Only bounties with at least this many slots left. |
claimable_now | true or false | Only bounties whose claim window is still running. |
sort | "newest", "oldest", "rate_desc", "rate_asc", "floor_asc", "slots_left_desc" or "ending_soonest" | Default "newest". Ties are newest first. |
limit | integer, 1 to 100 | Page size. Default 20. |
cursor | string | The next_cursor of the previous page, sent back unchanged with the same filters and sort. null on the last page. |
Account and workspaces
| Method | Path | Auth | What it does |
|---|---|---|---|
| GET | /v1/account | API key | Your balance in cents, your workspaces and your connected X accounts. |
| GET | /v1/account/export | API key | Every row the account has as one JSON document: keys (by prefix), balance ledger, invoices, workspaces, bounties, claims, submissions, X accounts and payouts. Secrets are left out. Three requests per account every ten minutes. |
| POST | /v1/workspaces | API key | Create a brand workspace. |
| GET | /v1/workspaces | None, or an API key | With no key: the public brand directory (name, slug, X handle, website and counts, newest first; filters q and has_open_bounties; paged with next_cursor). With a valid key: your own brand workspaces, oldest first, paged the same way. A key that is wrong answers 401. |
POST /v1/workspaces
| Field | Type | Notes |
|---|---|---|
name | string, 1 to 80 | Display name. |
slug | string | Lowercase letters, digits and hyphens, 1 to 40 characters. |
x_handle | string | The brand's X handle, with or without the @. |
website | URL | The brand's website. |
disclosure_required | boolean | Default true. |
GET /v1/workspaces query parameters
| Parameter | Type | Notes |
|---|---|---|
q | string, 1 to 100 | Matches the brand name, slug or X handle, ignoring case. No-key directory only. |
has_open_bounties | true or false | Only brands with an open bounty. No-key directory only. |
limit | integer, 1 to 100 | Page size. Default 20. |
cursor | string | The next_cursor of the previous page, sent back unchanged with the same filters and sort. null on the last page. |
Bounties
| Method | Path | Auth | What it does |
|---|---|---|---|
| POST | /v1/workspaces/{id}/bounties | API key | Open a bounty. Returns the maximum exposure: slots times cap, plus the fee. |
| PATCH | /v1/bounties/{id} | API key | Edit a bounty. Rate, cap, view floor and hold lock after the first submission. |
| GET | /v1/bounties/{id} | None, or an API key | Read one bounty with its terms and live slot use, open or closed. With no key: the public view. With a valid key: the keyed view, where owners also see slot use and maximum exposure. A key that is wrong answers 401. |
| GET | /v1/bounties/{id}/submissions | API key | The brand queue: the submissions on your bounty, oldest first, 20 a page. Send limit (1 to 100) and next_cursor as cursor for more. |
| POST | /v1/submissions/{id}/reject | API key | Brand rejects a post. Releases the held money and returns the slot. |
POST /v1/workspaces/{id}/bounties
| Field | Type | Notes |
|---|---|---|
title | string, 1 to 120 | Required. |
brief | string, 1 to 4000 | Required. |
rules | string | Up to 4000 characters. |
rate_per_1k_cents | integer, 1 to 100000 | Cents per 1,000 views. Default 100. |
cap_cents | integer, 1000 to 10000000 | Most one post can earn before the fee. Default 5000. |
view_floor | integer, 0 to 10000000 | Views a post needs before it earns. Default 1000. |
hold_days | integer, 1 to 60 | Default 14. |
max_slots | integer, 1 to 10000 | Required. |
posts_per_creator | integer, 1 to 20 | Default 1. |
claim_window_hours | integer, 1 to 2160 | How long the bounty can be claimed. Default 336. |
min_followers | integer, 0 or more | Default 500. |
min_account_age_months | integer, 0 or more | Default 6. |
verified_only | boolean | Default false. |
link_mode | "none", "in_post" or "in_first_reply" | Default "none". Anything else needs destination_url. |
destination_url | URL or null | Where the tracked link goes. |
disclosure_required | boolean | Default true. |
submit_window_minutes | integer, 5 to 1440 | Default 60. |
approved_claims | string[] | Up to 50 claims creators may make. |
hard_rules | string[] | Up to 50 rules creators must not break. |
PATCH /v1/bounties/{id}
| Field | Type | Notes |
|---|---|---|
title, brief, rules | string | Optional. |
rate_per_1k_cents, cap_cents, view_floor, hold_days | integer | Optional. Locked after the first submission. |
status | "open" or "closed" | Optional. |
POST /v1/submissions/{id}/reject
| Field | Type | Notes |
|---|---|---|
reason | string, 1 to 500 | Required. |
Creators
| Method | Path | Auth | What it does |
|---|---|---|---|
| POST | /v1/creators | API key | Connect an X account through OAuth. Answers 503 provider_unavailable until X credentials are configured. |
| POST | /v1/creators/{id}/payout-onboarding | API key | Start payout onboarding (identity, bank, tax forms) for a connected X account. |
| GET | /v1/creators/{id}/balance | API key | Available, pending (in hold), requested and paid cents for a connected X account. |
| POST | /v1/creators/{id}/cashout | API key | Request a cashout of the full available balance. The minimum applies and an operator approves it. |
POST /v1/creators
| Field | Type | Notes |
|---|---|---|
code | string | The OAuth authorization code. |
code_verifier | string | The PKCE verifier. |
redirect_uri | URL | The redirect URI used for the code. |
confirmed_adult | boolean | The person confirmed they are 18 or older. |
POST /v1/creators/{id}/payout-onboarding
| Field | Type | Notes |
|---|---|---|
country | two-letter code | Uppercase, such as US. |
return_url | URL | Where the person returns after onboarding. |
refresh_url | URL | Where the person returns if the link expires. |
Claims and posts
| Method | Path | Auth | What it does |
|---|---|---|---|
| POST | /v1/bounties/{id}/claims | API key | Claim a bounty. Free, non-exclusive, freezes the terms and returns your tracked link. |
| POST | /v1/claims/{id}/draft-check | API key | Check a draft before posting. Advice only, limited per bounty per day. |
| POST | /v1/claims/{id}/submissions | API key | Submit the published post. It must be fresh, unedited, yours and inside the window. |
| GET | /v1/submissions/{id} | API key | Read a submission you own or that is on your bounty. |
POST /v1/bounties/{id}/claims
| Field | Type | Notes |
|---|---|---|
x_account_id | string | The connected X account that claims. |
POST /v1/claims/{id}/draft-check
| Field | Type | Notes |
|---|---|---|
text | string, 1 to 2000 | The draft text. |
POST /v1/claims/{id}/submissions
| Field | Type | Notes |
|---|---|---|
post_id | digits | The X post id. Send this or post_url. |
post_url | URL | https://x.com/<handle>/status/<id>. Send this or post_id. |
Billing
| Method | Path | Auth | What it does |
|---|---|---|---|
| POST | /v1/me/billing/checkout | Signed-in session | Start a Stripe Checkout for a brand balance top-up. Signed in. |
| POST | /v1/me/billing/portal | Signed-in session | Open the Stripe billing portal. Signed in. |
| GET | /v1/me/billing | Signed-in session | Top-up packs and invoices. Signed in. |
| POST | /v1/billing/webhook | Stripe signature | Stripe only. A verified paid top-up adds its pack to the brand balance. Nothing else grants money. |
POST /v1/me/billing/checkout
| Field | Type | Notes |
|---|---|---|
offer | string | A funding pack id from /v1/plans. |
success_url, cancel_url | URL | Optional return addresses. |