Skip to navigation

Migrate from Stripe

Move only the operations in Fluveo's curated contract.

Fluveo’s /v1 API matches only the operations and fields in the generated 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.

Read this before changing the base URL

Stripe assumptionFluveo behaviorAction
Test and live secret keysPublic /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_* keysOnboarding 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 bodiesContracted Stripe-shaped writes use form encoding.Send application/x-www-form-urlencoded.
Unknown list filters may be ignoredUnknown or unsupported list filters return named 400 errors.Send only filters shown in the API Reference.
A saved pm_* can be attached to a PaymentIntentA 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 rotationWebhookEndpoint management is contracted-test. Public /v1 has no rotation operation, as on Stripe.Rotate an endpoint secret in the dashboard.
Subscriptions can be canceledWave 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 readyAll 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 existsFluveo 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. 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.

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. Keep Stripe webhooks in place and poll Fluveo’s contracted single-object and list GET operations until Events and WebhookEndpoints become merchant-public.

Next