curl --request POST \
--url https://api.fanvue.com/v1/checkout-links \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>' \
--data '
{
"source": {
"kind": "existing_price",
"productPriceUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}
'import requests
url = "https://api.fanvue.com/v1/checkout-links"
payload = { "source": {
"kind": "existing_price",
"productPriceUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
} }
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
source: {
kind: 'existing_price',
productPriceUuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
})
};
fetch('https://api.fanvue.com/v1/checkout-links', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"uuid": "b3c4d5e6-7f8a-4b9c-8d0e-1f2a3b4c5d6e",
"name": "Coaching call",
"description": "Instagram bio link",
"url": "https://www.fanvue.com/checkout/fvcl_4WqZz1kXo9DdPp2sT7yRfM",
"price": 1999,
"currency": "USD",
"isRecurring": false,
"cycleLength": null,
"cycleUnit": null,
"productUuid": "c4d5e6f7-8a9b-4c0d-9e1f-2a3b4c5d6e7f",
"productPriceUuid": "d5e6f7a8-9b0c-4d1e-af2a-3b4c5d6e7f8a",
"status": "active",
"createdAt": "2024-01-15T00:00:00.000Z"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}Create a checkout link
Create a shareable checkout link selling either an existing product price (existing_price), a new price on an existing product (existing_product), or a brand-new product (new_product).
All amounts are integer minor units of the currency (e.g. cents: 1999 = $19.99); the Fanvue dashboard displays the same prices in major units. Requires checkout links to be enabled for the creator.
curl --request POST \
--url https://api.fanvue.com/v1/checkout-links \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Fanvue-API-Version: <x-fanvue-api-version>' \
--data '
{
"source": {
"kind": "existing_price",
"productPriceUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}
'import requests
url = "https://api.fanvue.com/v1/checkout-links"
payload = { "source": {
"kind": "existing_price",
"productPriceUuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
} }
headers = {
"X-Fanvue-API-Version": "<x-fanvue-api-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Fanvue-API-Version': '<x-fanvue-api-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
source: {
kind: 'existing_price',
productPriceUuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
})
};
fetch('https://api.fanvue.com/v1/checkout-links', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"uuid": "b3c4d5e6-7f8a-4b9c-8d0e-1f2a3b4c5d6e",
"name": "Coaching call",
"description": "Instagram bio link",
"url": "https://www.fanvue.com/checkout/fvcl_4WqZz1kXo9DdPp2sT7yRfM",
"price": 1999,
"currency": "USD",
"isRecurring": false,
"cycleLength": null,
"cycleUnit": null,
"productUuid": "c4d5e6f7-8a9b-4c0d-9e1f-2a3b4c5d6e7f",
"productPriceUuid": "d5e6f7a8-9b0c-4d1e-af2a-3b4c5d6e7f8a",
"status": "active",
"createdAt": "2024-01-15T00:00:00.000Z"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"message": "<string>"
}{
"error": "<string>",
"message": "<string>",
"nextVersion": "<string>"
}{
"error": "<string>"
}write:creator— Modify creator profiles, settings, and creator-specific data.
Authorizations
OAuth 2.0 access token, presented as a JWT bearer token in the Authorization header. Obtain a token via the authorization-code flow; the scopes granted to the token determine which operations it may call.
Headers
API version to use for the request
"2025-06-26"
Body
What the link sells: an existing price (existing_price), a new price on an existing product (existing_product), or a brand-new product (new_product).
- Option 1
- Option 2
- Option 3
Show child attributes
Show child attributes
Internal note shown only in the creator dashboard. Fans never see it.
500URL fans are redirected to after a successful purchase.
Response
Checkout link created successfully
Checkout link UUID
Creator-internal label for the link (derived from the product name)
Creator-internal note (null when unset). Fans never see it.
Shareable checkout URL fans use to purchase
Price in integer minor units of the currency (e.g. cents). 0 for free links.
ISO-4217 currency code of the price
Whether purchases create a recurring subscription
Billing cycle length (null for one-off prices)
Billing cycle unit (null for one-off prices)
day, week, month, year UUID of the product the link sells
UUID of the product price the link sells
active links can be purchased; disabled links reject checkout until re-enabled
active, disabled When the link was created
Was this page helpful?