Creator Subscriptions
Creator monetisation tiers (each mirrored to a Stripe Product and Prices) and the fan-side recurring subscriptions to them.
List a creator's tiers
A creator's active tiers, by sort_order then price. Empty for a private profile, except to its owner.
Authentication is optional; it only matters for the owner.
Authorizations
In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.
Parameters
Path Parameters
The creator's profile UUID (slugs are not accepted).
"uuid"Responses
Active tiers
List my tiers
The caller's tiers, archived ones included (active first). Empty for someone who has never created one.
Authorizations
In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.
Responses
The caller's tiers
Create a tier
Creates a tier and its Stripe Product with a monthly Price (and an annual one when annual_amount_cents is given). Creating a first tier grants the caller the creator role; there is no separate "become a creator" step. Receiving payouts still needs Stripe Connect onboarding — fans can subscribe before then, and the money is held.
Authorizations
In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.
Request Body
Responses
Tier created
Archive a tier
Archives one of the caller's tiers (is_active: false), hiding it from the public list. Reversible, and safe for tiers with subscribers. To remove a tier for good, use DELETE /me/tiers/{tier_id}/permanent.
Authorizations
In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.
Parameters
Path Parameters
"uuid"Responses
Archived
Update a tier
Partial update of one of the caller's tiers. Changing a price mints a new Stripe Price and deactivates the old one; existing subscribers keep their original price until renewal. Setting annual_amount_cents to null withdraws annual billing. Currency cannot be changed. A tier that is not the caller's is a 404.
Authorizations
In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.
Parameters
Path Parameters
"uuid"Request Body
Responses
Updated tier
Delete a tier permanently
Deletes one of the caller's tiers outright. Only possible for a tier nobody has ever subscribed to — a cancelled subscription is still a billing record — otherwise 409 with code: TIER_HAS_SUBSCRIBERS; archive it instead.
Authorizations
In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.
Parameters
Path Parameters
"uuid"Responses
Deleted
List my creator subscriptions
Every subscription the caller holds, ended ones included, with tier and creator display fields. Active and trialing first, then past due, paused, and the rest; newest first within each.
Authorizations
In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.
Responses
The caller's subscriptions
Subscribe to a creator tier
Creates a Stripe Subscription to an active tier, recorded locally as incomplete. Confirm the first payment in the browser with Stripe Elements using client_secret; the webhook then moves it to active.
Calling again while a previous attempt for the same tier is still incomplete or past_due resumes it — the same subscription and client_secret — rather than creating a second one. An active or trialing subscription to the tier is a 409. Subscribing to a different tier of the same creator is allowed.
Authorizations
In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.
Request Body
Responses
Subscription created or resumed
Cancel a creator subscription
An active or trialing subscription is set to cancel at the end of the paid period. One that is incomplete, past_due, unpaid or paused is cancelled immediately. Already cancelled or already scheduled is a no-op. A subscription that is not the caller's is a 404.
Authorizations
In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.
Parameters
Path Parameters
The local subscription id (subscription_id), not the Stripe id.
"uuid"Responses
Cancelled or scheduled
Resume a creator subscription
Undoes a scheduled cancellation while the subscription is still running. A no-op when nothing is scheduled. A subscription that has already ended cannot be resumed — subscribe again.
Authorizations
In the browser, authentication rides on the httpOnly session cookies set by /cognito/signin or the Google / Apple sign-in at /cognito/oauth/{provider}. For scripts and for Swagger UI testing, paste an API key (fh_live_…, created with POST /api-keys); a Cognito JWT is accepted too. Sign-in does not return a token in its body.
Parameters
Path Parameters
"uuid"Responses
Resumed (or nothing to undo)