Documentation
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

MethodPathAuthWhat it does
GET/v1/plansNonePlans, fees, brand top-up sizes and bounty defaults.
GET/v1/boardNonePublic 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/statsNoneWhole-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/activityNoneNewest-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/feedNoneAlias of /v1/activity.
GET/v1/bountiesNoneOpen 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}NoneOne brand's public page: its counts and its open bounties, newest first.

GET /v1/activity query parameters

ParameterTypeNotes
brandstringA brand's workspace slug.
kind"bounty_live", "slot_taken" or "post_confirmed"Only this kind of event.
limitinteger, 1 to 100Page size. Default 20.
cursorstringThe 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

ParameterTypeNotes
brandstringA brand's workspace slug.
kind"bounty_live", "slot_taken" or "post_confirmed"Only this kind of event.
limitinteger, 1 to 100Page size. Default 20.
cursorstringThe 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

ParameterTypeNotes
brandstringA brand's workspace slug.
searchstring, 1 to 100Matches the title, the brief or the brand name, ignoring case.
min_rate_centsintegerLowest rate per 1,000 views, in cents.
max_floor_viewsintegerHighest view floor.
link_placement"none", "body" or "reply"Where the tracked link goes: no link, in the post or in the first reply.
rewarded_onlytrue or falseOnly bounties with at least one settled post that credited its creator.
follower_fitintegerThe viewer's follower count; keeps bounties whose follower minimum it meets.
slots_leftintegerOnly bounties with at least this many slots left.
claimable_nowtrue or falseOnly 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.
limitinteger, 1 to 100Page size. Default 20.
cursorstringThe next_cursor of the previous page, sent back unchanged with the same filters and sort. null on the last page.

Account and workspaces

MethodPathAuthWhat it does
GET/v1/accountAPI keyYour balance in cents, your workspaces and your connected X accounts.
GET/v1/account/exportAPI keyEvery 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/workspacesAPI keyCreate a brand workspace.
GET/v1/workspacesNone, or an API keyWith 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

FieldTypeNotes
namestring, 1 to 80Display name.
slugstringLowercase letters, digits and hyphens, 1 to 40 characters.
x_handlestringThe brand's X handle, with or without the @.
websiteURLThe brand's website.
disclosure_requiredbooleanDefault true.

GET /v1/workspaces query parameters

ParameterTypeNotes
qstring, 1 to 100Matches the brand name, slug or X handle, ignoring case. No-key directory only.
has_open_bountiestrue or falseOnly brands with an open bounty. No-key directory only.
limitinteger, 1 to 100Page size. Default 20.
cursorstringThe next_cursor of the previous page, sent back unchanged with the same filters and sort. null on the last page.

Bounties

MethodPathAuthWhat it does
POST/v1/workspaces/{id}/bountiesAPI keyOpen a bounty. Returns the maximum exposure: slots times cap, plus the fee.
PATCH/v1/bounties/{id}API keyEdit a bounty. Rate, cap, view floor and hold lock after the first submission.
GET/v1/bounties/{id}None, or an API keyRead 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}/submissionsAPI keyThe 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}/rejectAPI keyBrand rejects a post. Releases the held money and returns the slot.

POST /v1/workspaces/{id}/bounties

FieldTypeNotes
titlestring, 1 to 120Required.
briefstring, 1 to 4000Required.
rulesstringUp to 4000 characters.
rate_per_1k_centsinteger, 1 to 100000Cents per 1,000 views. Default 100.
cap_centsinteger, 1000 to 10000000Most one post can earn before the fee. Default 5000.
view_floorinteger, 0 to 10000000Views a post needs before it earns. Default 1000.
hold_daysinteger, 1 to 60Default 14.
max_slotsinteger, 1 to 10000Required.
posts_per_creatorinteger, 1 to 20Default 1.
claim_window_hoursinteger, 1 to 2160How long the bounty can be claimed. Default 336.
min_followersinteger, 0 or moreDefault 500.
min_account_age_monthsinteger, 0 or moreDefault 6.
verified_onlybooleanDefault false.
link_mode"none", "in_post" or "in_first_reply"Default "none". Anything else needs destination_url.
destination_urlURL or nullWhere the tracked link goes.
disclosure_requiredbooleanDefault true.
submit_window_minutesinteger, 5 to 1440Default 60.
approved_claimsstring[]Up to 50 claims creators may make.
hard_rulesstring[]Up to 50 rules creators must not break.

PATCH /v1/bounties/{id}

FieldTypeNotes
title, brief, rulesstringOptional.
rate_per_1k_cents, cap_cents, view_floor, hold_daysintegerOptional. Locked after the first submission.
status"open" or "closed"Optional.

POST /v1/submissions/{id}/reject

FieldTypeNotes
reasonstring, 1 to 500Required.

Creators

MethodPathAuthWhat it does
POST/v1/creatorsAPI keyConnect an X account through OAuth. Answers 503 provider_unavailable until X credentials are configured.
POST/v1/creators/{id}/payout-onboardingAPI keyStart payout onboarding (identity, bank, tax forms) for a connected X account.
GET/v1/creators/{id}/balanceAPI keyAvailable, pending (in hold), requested and paid cents for a connected X account.
POST/v1/creators/{id}/cashoutAPI keyRequest a cashout of the full available balance. The minimum applies and an operator approves it.

POST /v1/creators

FieldTypeNotes
codestringThe OAuth authorization code.
code_verifierstringThe PKCE verifier.
redirect_uriURLThe redirect URI used for the code.
confirmed_adultbooleanThe person confirmed they are 18 or older.

POST /v1/creators/{id}/payout-onboarding

FieldTypeNotes
countrytwo-letter codeUppercase, such as US.
return_urlURLWhere the person returns after onboarding.
refresh_urlURLWhere the person returns if the link expires.

Claims and posts

MethodPathAuthWhat it does
POST/v1/bounties/{id}/claimsAPI keyClaim a bounty. Free, non-exclusive, freezes the terms and returns your tracked link.
POST/v1/claims/{id}/draft-checkAPI keyCheck a draft before posting. Advice only, limited per bounty per day.
POST/v1/claims/{id}/submissionsAPI keySubmit the published post. It must be fresh, unedited, yours and inside the window.
GET/v1/submissions/{id}API keyRead a submission you own or that is on your bounty.

POST /v1/bounties/{id}/claims

FieldTypeNotes
x_account_idstringThe connected X account that claims.

POST /v1/claims/{id}/draft-check

FieldTypeNotes
textstring, 1 to 2000The draft text.

POST /v1/claims/{id}/submissions

FieldTypeNotes
post_iddigitsThe X post id. Send this or post_url.
post_urlURLhttps://x.com/<handle>/status/<id>. Send this or post_id.

Billing

MethodPathAuthWhat it does
POST/v1/me/billing/checkoutSigned-in sessionStart a Stripe Checkout for a brand balance top-up. Signed in.
POST/v1/me/billing/portalSigned-in sessionOpen the Stripe billing portal. Signed in.
GET/v1/me/billingSigned-in sessionTop-up packs and invoices. Signed in.
POST/v1/billing/webhookStripe signatureStripe only. A verified paid top-up adds its pack to the brand balance. Nothing else grants money.

POST /v1/me/billing/checkout

FieldTypeNotes
offerstringA funding pack id from /v1/plans.
success_url, cancel_urlURLOptional return addresses.