Payment Links

Shareable hosted links that collect a payment.

Status: contracted_test. /v1/payment_links create / retrieve / update / expire / list return the Stripe payment_link envelope under the active merchant, and the hosted page renders on pay.fluveo.com/p/{id} with signed explicit continuation. The suite is managed with a Fluveo sk_test_* merchant secret key. Processor keys are not public API credentials. See API coverage.

A Payment Link is a hosted URL you share with a customer — in an email, an invoice, a chat — and they pay on a Fluveo-hosted page without any checkout UI on your side. Each Fluveo link is a reusable merchant-owned template; every explicit customer continuation creates a fresh Checkout Session or PaymentIntent correlated to that template. It is the no-code sibling of Checkout Sessions: a session is created per purchase by your server, whereas a link is created once and reused.

What works today

  • The full CRUD API is live in test mode. POST /v1/payment_links (create), GET /v1/payment_links/:id (retrieve), POST /v1/payment_links/:id (update metadata), POST /v1/payment_links/:id/expire (expire), and GET /v1/payment_links (list, with cursor pagination) all return the Stripe payment_link envelope.
  • Line items are readable. GET /v1/payment_links/:id/line_items returns the immutable inline items for links created with itemized pricing.
  • The hosted page is live in test mode. A link renders the same Fluveo-hosted payment experience as Checkout — see the hosted page.
  • Create and manage links in the dashboard.

A deliberate divergence from Stripe

Fluveo links are merchant-owned templates with exactly one authoritative money shape per template:

  • Flat amount: pass amount (smallest currency unit) and currency for a single-amount link.
  • Inline line items: pass 1–20 line_items with inline price_data (amount, currency, product data/description as documented by the API Reference). Fluveo collapses those items into one authoritative total for payment creation and keeps the immutable itemized view readable at GET /v1/payment_links/{id}/line_items.

Catalog price IDs are not supported on Payment Links. Use inline price_data on the link, or create a Checkout Session when you need a server-created cart per purchase.

expires_at is a Fluveo extension (not a Stripe payment_links parameter): a Unix timestamp that must land 30 minutes to 30 days out, defaulting to 24 hours.

The create body is application/x-www-form-urlencoded and the mutating create honors the Idempotency-Key header. An identical replay returns the original link; reusing the key with different parameters is a 409 idempotency_error.

See /v1/payment_links in the API Reference for the full request and object shape.