> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.fluveo.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.fluveo.com/_mcp/server.

# Migrate from Stripe

Fluveo's `/v1` API matches only the operations and fields in the generated
[API Reference](/api-reference). A method or field in a Stripe SDK does not mean
Fluveo supports it. Official Stripe SDKs are not supported: integrate with plain
HTTP.

The long-form source list is
[`docs/api/stripe-divergences.md`](https://github.com/fluveohq/openapi).

## Read this before changing the base URL

| Stripe assumption                                 | Fluveo behavior                                                                                                                                                             | Action                                                                                                                                               |
| ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Test and live secret keys                         | Public `/v1` currently admits `sk_test_*`; controlled BR setup may issue a live key only behind an active live binding.                                                     | Use `sk_test_*` until public live admission is promoted.                                                                                             |
| `pk_*` and `rk_*` keys                            | Onboarding issues browser-side `pk_test_*`; publishable keys do not authenticate server `/v1`, and restricted keys are not issued.                                          | Keep `sk_*` on your server, use `pk_test_*` only in the approved browser flow, and never send `pk_*` to server `/v1`.                                |
| JSON request bodies                               | Contracted Stripe-shaped writes use form encoding.                                                                                                                          | Send `application/x-www-form-urlencoded`.                                                                                                            |
| Unknown list filters may be ignored               | Unknown or unsupported list filters return named 400 errors.                                                                                                                | Send only filters shown in the API Reference.                                                                                                        |
| A saved `pm_*` can be attached to a PaymentIntent | A saved `pm_*` needs its `customer`; other stores than US Stripe Connect also need `confirm=true&off_session=true`. Inline card data is hidden from public `/v1`.           | Send `customer` with a saved `pm_*`; in test mode, name one of Stripe's documented test PaymentMethods (such as `pm_card_visa`) in `payment_method`. |
| Stripe webhook endpoint secret rotation           | WebhookEndpoint management is contracted-test. Public `/v1` has no rotation operation, as on Stripe.                                                                        | Rotate an endpoint secret in the dashboard.                                                                                                          |
| Subscriptions can be canceled                     | Wave 1 contracts create, list, and retrieve only. There is no cancel or automatic renewal.                                                                                  | Keep cancellation outside the Fluveo API until cancel is added.                                                                                      |
| SetupIntents are ready                            | All six SetupIntent operations are contracted in test mode. List is a tenant-scoped Stripe list envelope from `merchant_setup_intents`; it never lists processor-wide rows. | Use point operations for immediately-consistent reads; list can lag create (F6). Invalid cursors return 400.                                         |
| Every Stripe response field exists                | Fluveo returns only fields declared for the contracted operation.                                                                                                           | Check that a field exists before reading it.                                                                                                         |

## Use plain HTTP

Fluveo does not support SDKs for now: not the official Stripe SDKs and not
Fluveo's own client libraries. Customers integrate with AI coding agents using
the Fluveo integration skill. The supported path is the `/v1` HTTP API, the
Fluveo integration skill, and the published [API Reference](/api-reference).
Send form-encoded requests to `https://api.devfluveo.com/v1`, send only the
`Authorization`, `Idempotency-Key`, and `Stripe-Version` headers, and check that
a response field exists before you read it.

```bash
curl https://api.devfluveo.com/v1/payment_intents \
  -u sk_test_example: \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d amount=4242 \
  -d currency=usd
```

Basic authentication (key as username, empty password) and Bearer
authentication are supported for contracted operations. Do not send a
processor `api-key`, processor merchant/profile id, `Stripe-Account`,
publishable key, or restricted key.

## Webhook differences from Stripe

Verify each delivery yourself: compute HMAC-SHA256 over `<t>.<raw body>` with
your endpoint secret and compare it, in constant time, with the `v1=` value of
the `Stripe-Signature` header. See
[Verify a webhook signature](/cookbooks/verify-a-webhook). Keep Stripe webhooks in place and
poll Fluveo's contracted single-object and list `GET` operations until Events
and WebhookEndpoints become merchant-public.

## Next

* [Stripe differences](/api-coverage) — start with the public lifecycle rules.
* [API Reference](/api-reference) — choose exact operations, filters, and fields.
* [Go-live checklist](/guides/go-live-checklist) — production prerequisites;
  Fluveo does not yet issue `sk_live_*` keys.