The merchant ID is your third credential
EveryPOST /payment_intents requires a flynet_merchant_id, a UUID identifying the merchant receiving funds. You receive it in your onboarding email if you applied for payments access. It’s scoped to your client_id and your environment; staging and production merchant IDs differ.
If flynet_merchant_id is missing, wrong, or scoped to a different partner, create returns:
client_id and API_KEY in your env config; don’t hard-code it.
The primitive
A PaymentIntent moves FLY from a member’s wallet to a merchant’s wallet. Each intent has:- A
flynet_merchant_id- the merchant receiving the payment - A
customer_user_id- the Blackbird member paying - An
amountin FLY - A
statusthat derives from event timestamps
Status lifecycle
Tasting note -
status is computed at read time from the
timestamps on the intent. You do not transition states directly;
you call cancel, confirm, or refund and the status follows.v1 capabilities
Idempotency
Network calls fail. Retries are normal. Without idempotency, retries onPOST /payment_intents could create duplicate charges. Flynet uses idempotency keys to make retries safe.
Every Payment Intent create requires an idempotency_key in the request body. The key is unique per (flynet_merchant_id, idempotency_key).
confirm, cancel, and refund is state-based: re-confirming a paid intent or re-canceling a canceled intent returns the same intent without side effects. No separate key needed.
Money
All amounts use the Money wire shape:{ value, currency } with value as a stringified integer in FLY wei.
Receipts
On successfulconfirm, the customer receives a receipt email from
flynet@blackbird.xyz.
Auth
All Payment Intent routes require an OAuth access token. API keys are not accepted on payment routes.Endpoints at a glance
See the API Reference and the
first payment recipe.