Skip to content

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​

GET
/creators/{user_id}/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​

BearerAuth

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.

Type
HTTP (bearer)
or

Parameters​

Path Parameters

user_id*

The creator's profile UUID (slugs are not accepted).

Type
string
Required
Format
"uuid"

Responses​

Active tiers

application/json
JSON
{
"data": [
]
}

Playground​

Server
Authorization
Variables
Key
Value

Samples​


List my tiers​

GET
/me/tiers

The caller's tiers, archived ones included (active first). Empty for someone who has never created one.

Authorizations​

BearerAuth

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.

Type
HTTP (bearer)

Responses​

The caller's tiers

application/json
JSON
{
"data": [
]
}

Playground​

Server
Authorization

Samples​


Create a tier​

POST
/me/tiers

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​

BearerAuth

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.

Type
HTTP (bearer)

Request Body​

application/json
JSON
"string"

Responses​

Tier created

application/json
JSON
{
"data": "string"
}

Playground​

Server
Authorization
Body

Samples​


Archive a tier​

DELETE
/me/tiers/{tier_id}

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​

BearerAuth

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.

Type
HTTP (bearer)

Parameters​

Path Parameters

tier_id*
Type
string
Required
Format
"uuid"

Responses​

Archived

Playground​

Server
Authorization
Variables
Key
Value

Samples​


Update a tier​

PATCH
/me/tiers/{tier_id}

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​

BearerAuth

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.

Type
HTTP (bearer)

Parameters​

Path Parameters

tier_id*
Type
string
Required
Format
"uuid"

Request Body​

application/json
JSON
{
"name": "string",
"description": "string",
"amount_cents": 0,
"annual_amount_cents": 0,
"benefits": [
"string"
],
"cover_image": "string",
"sort_order": 0,
"subscriber_limit": 0
}

Responses​

Updated tier

application/json
JSON
{
"data": "string"
}

Playground​

Server
Authorization
Variables
Key
Value
Body

Samples​


Delete a tier permanently​

DELETE
/me/tiers/{tier_id}/permanent

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​

BearerAuth

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.

Type
HTTP (bearer)

Parameters​

Path Parameters

tier_id*
Type
string
Required
Format
"uuid"

Responses​

Deleted

Playground​

Server
Authorization
Variables
Key
Value

Samples​


List my creator subscriptions​

GET
/me/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​

BearerAuth

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.

Type
HTTP (bearer)

Responses​

The caller's subscriptions

application/json
JSON
{
"data": [
]
}

Playground​

Server
Authorization

Samples​


Subscribe to a creator tier​

POST
/me/subscriptions

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​

BearerAuth

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.

Type
HTTP (bearer)

Request Body​

application/json
JSON
{
"tier_id": "string",
"interval": "string"
}

Responses​

Subscription created or resumed

application/json
JSON
{
"data": {
"subscription_id": "string",
"stripe_subscription_id": "string",
"client_secret": "string",
"status": "string"
}
}

Playground​

Server
Authorization
Body

Samples​


Cancel a creator subscription​

POST
/me/subscriptions/{id}/cancel

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​

BearerAuth

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.

Type
HTTP (bearer)

Parameters​

Path Parameters

id*

The local subscription id (subscription_id), not the Stripe id.

Type
string
Required
Format
"uuid"

Responses​

Cancelled or scheduled

Playground​

Server
Authorization
Variables
Key
Value

Samples​


Resume a creator subscription​

POST
/me/subscriptions/{id}/resume

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​

BearerAuth

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.

Type
HTTP (bearer)

Parameters​

Path Parameters

id*
Type
string
Required
Format
"uuid"

Responses​

Resumed (or nothing to undo)

Playground​

Server
Authorization
Variables
Key
Value

Samples​


Powered by VitePress OpenAPI

Built with VitePress