FurlPay Docs
Open App
  • Services & Availability
  • Quickstart
  • For AI Agents
  • Monorepo
  • API Routes
  • Authenticationupdated
  • Webhook Eventsupdated
  • Error Codesupdated
  • Rate Limitsnew
  • Configuration & Setupnew
  • Merchant Paymentsnew
  • Payroll & Payoutsnew
  • Agentic Payments (x402)updated
  • Agent Trust & Mandates (TAP)updated
  • CCTP Cross-Chainupdated
  • LI.FI Swapsupdated
  • FurlPay Travels (Travel MCP)updated
  • Solana Actions & Blinks
  • Settlement Workspacenew
  • FURL Tokennew
  • Claude Connectorupdated
  • AI Assistants
  • Circlenew
  • Ramp Providersnew
  • Telegram Mini Appnew
  • Stripe Crypto
  • Persona KYC
  • Regulatory status
  • Screening & Casesnew
  • Security Postureupdated
  • Signing & WebAuthnupdated
  • Help Center
  • Getting Started
  • KYC Verification
  • Passkeys & Biometrics
  • Privacy & Data Protection
  • Transaction Statuses
  • Gasless Transfers
  • Deposits & Withdrawals
  • Managing Virtual Cards
  • Freezing & Unfreezing Cards
  • Declined Transactions
  • SDK & API Support
  • x402 Monetization Basics
  • Booking Travel
  • Travel Refunds & Cancellations

Resources

  • Changelog
  • System Status
  • OpenAPI Spec
  • Community
  • GitHub
Docs/Architecture/API Routes

Architecture

API routes

FurlPay exposes REST routes for payment preparation, agent integrations, authentication and read-only data. The route contract describes what a handler accepts; the rail registry describes whether a money-moving path is currently available.

Check rail status before execution

Read GET /api/rails before sending or relaying a payment. A route can return a quote, challenge or intent while settlement remains unavailable. If the status endpoint errors or reports an unknown status, do not infer that a rail is operational.

Discovery and fee estimates

MethodPathDescription
GET/api/railsPublic registry of rails, networks, assets, limits and current operational status
GET/api/payments/fees/estimate?amount=…&sourceChain=…Public fee estimate; amount is in USD
GET/openapi.jsonMachine-readable API description

The rail registry is the source for current payment availability. It may return 503 controls_unavailable when its operational status cannot be read. Treat that response as unknown, not as permission to proceed.

USDC payment intents

MethodPathDescription
POST/api/payments/createAuthenticated payment intent and EIP-712 signing data; can return 503 when production configuration is missing
POST/api/payments/executeSubmit the user's signature to the configured payment flow
GET/api/payments/[id]Read the payment's current status
POST/api/payments/refundRequest a refund where the payment and rail support it
POST/api/payments/batchCreate up to 100 payment intents for the signed-in user; each returns its own signing data

The current merchant product supports fee quotes and non-custodial payment preparation. FurlPay-operated production settlement is listed separately and remains gated. The create route requires an authenticated user session and may require a step-up proof; an API key alone does not satisfy that requirement.

POST /api/payments/batch constructs up to 100 payment intents in one call. It is not a live mass-payout service: every line still has to be signed by the payer's wallet and settled through a configured router, and production settlement is gated like any other payment intent.

  • A created payment ID is not a transaction hash.
  • 202 Accepted may mean the payment is waiting for review or confirmation.
  • Only a confirmed terminal status with a transaction reference proves settlement.
  • Use Idempotency-Key only on routes that document support for it.

x402 and Machine Payments Protocol

MethodPathDescription
GET/api/x402/fxExample paid resource; currently returns 503 while x402 operational controls are unavailable
POST/api/x402/facilitator/verifyValidate an x402 payment payload
POST/api/x402/facilitator/settleAttempt x402 settlement when the production facilitator is configured
GET/api/x402/settlement/[tx]Check a pending x402 settlement
GET/api/mpp/fxExample paid resource using the MPP challenge and receipt headers

The x402 endpoint returned 503 controls_unavailable with reason plan_limit on 11 October 2026. If it becomes available, challenge creation still does not mean x402 or MPP can settle a payment. Check each protocol's status in /api/rails and wait for a verified settlement result before releasing a paid resource.

Client-signed cross-chain routes

MethodPathDescription
POST/api/intents/cctpBuild a Circle CCTP burn or mint transaction
GET/api/intents/cctp/attestationRetrieve or poll a Circle Iris attestation
POST/api/swaps/executeQuote a LI.FI route and build transactions for client signing
GET/api/transfers/gaslessRequest the gasless USDC fee quote
POST/api/transfers/gaslessSubmit an EIP-3009 transfer for relaying when enabled

CCTP and LI.FI transactions are non-custodial: the client reviews, signs and submits the transaction. A route quote can expire or become unavailable. Gasless transfers require a separate production fee-payer configuration. Confirm the relevant rail is available before showing an executable action.

Agent access and authentication

MethodPathDescription
POST/api/agents/keysRegister an agent public key; authenticated registrations can carry an owned spend policy
GET/api/agents/keysList the caller's agent keys when authenticated
DELETE/api/agents/keysRevoke an owned agent key
POST/api/auth/webauthnRegister or authenticate a passkey
POST/api/mcpMCP transport; tools depend on the user's granted scopes

The MCP transport and scoped agent controls do not bypass rail status or user authorization. Money-moving tools can prepare an action for approval; the available settlement path still depends on the selected rail.

Business, compliance and integration routes

These route groups have their own guides. Each guide states what the deployment must configure before the group does anything.

MethodPathDescription
—/api/merchant/payments, /api/checkout/merchant/[slug]Payment links, invoices and hosted checkout — see Merchant Payments
—/api/merchant/webhookMerchant webhook endpoint — see Webhook Events
—/api/merchant/refunds, /api/merchant/operationsRefund requests and the operator console — see Merchant Payments
—/api/payouts/payroll/*Contractor roster, self-service and pay runs — see Payroll & Payouts
—/api/settlement/*Workspace drafts and business onboarding — see Settlement Workspace
—/api/compliance/*Screening, cases, monitoring and reports — see Screening & Cases
—/api/wallets/circle/*Circle user-controlled wallets — see Circle
—/api/onramp/*, /api/offramp/*, /api/ramp/ordersThird-party ramp providers — see Ramp Providers
—/api/auth/telegram, /api/miniapp/*Telegram sign-in and account view — see Telegram Mini App
  • Merchant Payments and Payroll & Payouts
  • Settlement Workspace and Screening & Cases
  • Circle, Ramp Providers and Telegram Mini App
  • Configuration & Setup for credentials, flags, migrations and scheduled jobs

Routes that are not live products

Routes may exist for card issuing, local banking, off-ramp, travel booking and stock orders while the corresponding production product is unavailable. Do not integrate those paths based on a route name or generated example. See the service availability overview.

Request and response handling

  • Use the authentication method documented for the specific route; there is no universal API-key shortcut.
  • Validate all amounts, recipients, networks and transaction data on your side as well.
  • Handle 400 validation errors, 401/403 authorization failures, 409 conflicts, 429 rate limits, and 503 unavailable rails distinctly.
  • Verify signed webhook events using the integration-specific signing scheme before processing them; see Webhook Events.
Did this page help?
Edit this page on GitHub

← Previous

Monorepo

Next →

Authentication