Skip to main content
Goal: Accept your first payment in FLY end-to-end.
Prep time: ~15 minutes

Prerequisites

If you don’t have a MERCHANT_ID, your partner record isn’t payments-enabled. Ask via Support. See Payments for the credential model.
Tasting note - customer_user_id is the paying member’s UUID. For a member acting on their own behalf, that’s the sub claim on their access token: the same value /users/me returns as id. You don’t read it from a /users/{id} path; resolve it from the token.
The customer must hold enough FLY in their SPENDING wallet for confirm to succeed.

What you will use

  • POST /flynet/v1/payment_intents
  • POST /flynet/v1/payment_intents/{id}/confirm
  • GET /flynet/v1/payment_intents/{id}
  • Optionally: POST /flynet/v1/payment_intents/{id}/refund

Step 1: Create the intent

Response:
Save the id. You need it in the next step.
Tasting note - Use your own order ID as the idempotency key in production so network retries land on the same intent. Here we use a timestamp so re-running the recipe creates fresh intents. See Idempotency.
Chef’s warning - If create returns 404 resource_not_found "Flynet merchant not found", your MERCHANT_ID isn’t scoped to your client_id or your environment. Double-check the value in your onboarding email; if it matches and still 404s, route via Support.

Step 2: Confirm

Response:
The customer’s SPENDING wallet decreases by 1 FLY. The merchant’s wallet increases by 1 FLY. The customer gets a receipt email from flynet@blackbird.xyz.
Chef’s warning - If the customer does not hold enough FLY, this call returns 400 payment0030. Pre-check the customer’s SPENDING wallet balance for a smoother UX.

Step 3: Verify

You should see status: "paid" and a populated paid_at.

Step 4: Refund

The 1 FLY returns to the customer. Status becomes refunded. Refunds are full-only in v1.

What’s next

  • Read Payments for the idempotency contract.
  • Handle insufficient FLY in your UI before calling confirm; see payment0030.
  • List merchant intents with GET /flynet/v1/payment_intents?payee_account_balance_id={uuid}.