> ## Documentation Index
> Fetch the complete documentation index at: https://api.fanvue.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Accept Payments

> Take one-time and recurring payments on Fanvue with checkout links: create a link in the dashboard, share it with fans, and act on the checkout webhooks.

A **checkout link** is a shareable URL that sells a product to anyone: a coaching call, a content bundle, a subscription. Fanvue handles the checkout page, cards, wallets, BNPL, fraud, and recurring billing. You create the link, share it, and act on the webhooks.

Buyers don't need a Fanvue account: **guest checkout** is supported, so links work in an Instagram bio, an email, a DM, or your own site.

## Choose your integration

|              | **Checkout links** (this page)         | **App Payments**                             |
| ------------ | -------------------------------------- | -------------------------------------------- |
| **Sell**     | Anything, to anyone                    | Your app, to creators                        |
| **Effort**   | Low; dashboard or one API call         | Low; Builder **Pricing** tab                 |
| **Best for** | Bio links, funnels, off-platform sales | Charging for a Fanvue app                    |
| **Guide**    | Read on                                | [App Payments](/docs/app-store/payments/overview) |

<Note>
  Native Fanvue sales (tips, PPV posts, paid messages, profile subscriptions) need no integration; observe them with the [`creator.*` webhooks](/docs/creator/overview). A third flow, **fan experiences** (a fan paying inside a fan-facing app), runs on its own rails via the Experiences token endpoints.
</Note>

## Option 1: Create a checkout link in the dashboard

In the Fanvue dashboard, open the **Checkout links** page, create a product with a price (one-off or subscription), and copy the link:

```text theme={null}
https://www.fanvue.com/checkout/fvcl_4WqZz1kXo9DdPp2sT7yRfM
```

See the [Checkout Links Page](/docs/checkout/dashboard) guide for managing links and reading the payments ledger.

## Option 2: Create checkout links via the API

Requires the `write:creator` scope.

```bash theme={null}
curl -X POST "https://api.fanvue.com/checkout-links" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "X-Fanvue-API-Version: 2025-06-26" \
  -H "Content-Type: application/json" \
  -d '{
    "source": {
      "kind": "new_product",
      "product": { "name": "Coaching call" },
      "price": { "amount": 1999, "currency": "USD", "isRecurring": false }
    }
  }'
```

The response includes the shareable `url`:

```json theme={null}
{
  "uuid": "b3c4d5e6-7f8a-4b9c-8d0e-1f2a3b4c5d6e",
  "url": "https://www.fanvue.com/checkout/fvcl_4WqZz1kXo9DdPp2sT7yRfM",
  "price": 1999,
  "currency": "USD",
  "isRecurring": false,
  "status": "active"
}
```

* `source.kind`: `new_product`, `existing_product`, or `existing_price`
* Amounts are minor units: free is `0`, paid is `300` to `250000` (\$3 to \$2,500)
* Subscriptions: `isRecurring: true` plus `cycleLength` and `cycleUnit` (`day`, `week`, `month`, `year`)
* `redirectUrl`: your own post-purchase page
* Agencies: [`POST /creators/{creatorUserUuid}/checkout-links`](/docs/api-reference/create-a-checkout-link-for-a-creator)

Manage links with [`GET`](/docs/api-reference/list-checkout-links), [`PATCH`](/docs/api-reference/enable-or-disable-a-checkout-link) (enable/disable), and [`DELETE`](/docs/api-reference/delete-a-checkout-link).

## Attach your own references

Append attribution to the link you share; it's echoed on every related webhook, including refunds and disputes:

```text theme={null}
https://www.fanvue.com/checkout/fvcl_...?client_reference_id=order-123&metadata[campaign]=spring
```

See [Checkout Attribution](/docs/checkout/attribution) for limits.

## Handle webhooks

Every sale, refund, and payout is delivered to your endpoint. Subscribe via the Developer Area **Events** tab or [Configure webhooks](/docs/checkout/configuring) in the dashboard (includes a no-code Zapier path), then branch on `type`:

| You want to                       | Act on                                                                                  |
| --------------------------------- | --------------------------------------------------------------------------------------- |
| Fulfil a sale                     | [`checkout_link.payment.succeeded`](/docs/checkout/payments)                                 |
| Grant / revoke recurring access   | [`checkout_link.subscription.activated` / `.deactivated`](/docs/checkout/subscriptions)      |
| Claw back refunds and chargebacks | [`checkout_link.refund.created`, `checkout_link.dispute.*`](/docs/checkout/refunds-disputes) |
| Track BNPL repayments             | [`checkout_link.installment.*`](/docs/checkout/installments)                                 |
| Record payouts                    | [`payout.paid`, `payout.failed`](/docs/checkout/payouts)                                     |

[Verify the signature](/docs/webhooks/signature-verification) on every delivery, and don't count [BNPL installments](/docs/checkout/overview#bnpl-financing) as new revenue: the sale arrives paid in full upfront.

## See it work end to end

<Steps>
  <Step title="Create a test link">
    Small amount (minimum \$3), on your [test creator account](/docs/introduction/testing-your-app).
  </Step>

  <Step title="Buy it">
    Open the link in a private window and pay. There's no sandbox; this is a real charge.
  </Step>

  <Step title="Watch the events arrive">
    `checkout_link.payment.pending` then `.succeeded`, with your `client_reference_id` echoed.
  </Step>

  <Step title="Check the ledger">
    The payment appears in the **Payments** tab of the Checkout links page.
  </Step>
</Steps>

## Next steps

<CardGroup cols={2}>
  <Card title="Checkout event reference" icon="bolt" href="/docs/checkout/overview">
    Every event, with full field tables and payloads.
  </Card>

  <Card title="Checkout Attribution" icon="tag" href="/docs/checkout/attribution">
    `client_reference_id` and `metadata` in depth.
  </Card>

  <Card title="Configuring webhooks" icon="gear" href="/docs/checkout/configuring">
    Receive events via API, app, or Zapier.
  </Card>

  <Card title="App Payments" icon="puzzle-piece" href="/docs/app-store/payments/overview">
    Charge creators for your Fanvue app.
  </Card>
</CardGroup>
