CoinGate published a guide to their Payout Links API, and the product idea is a good one: a merchant creates a payout knowing only an email address, and the recipient supplies their own wallet address and identity details on a CoinGate-hosted page. Four endpoints carry it — POST /api/v2/payout_links to create, a list with status filtering, a fetch by id, and POST /api/v2/payout_links/{id}/cancel. The create call wants a ledger account, an amount, a currency by numeric id rather than ISO code, a purpose between 4 and 191 characters, an expiry between 1 and 7 days, and the recipient’s email. There is an external_id up to 50 characters for reconciliation, a callback_url, seven link states from draft through completed, and six callback events tracking the transitions. And one sentence that changes how you have to write the client: “the balance debit happens the moment that call returns.”
Two admissions in this post are worth more than the feature list. The first is flat: “it is not idempotent. Cancelling an already cancelled link returns an error rather than quietly succeeding.” Vendors do not usually write that down, and stating it is the right call — a caller who knows can build for it. Put it next to the debit timing, though, and the shape of the hazard is clear: a create request that times out in transit is a request you cannot safely retry, because the money has already moved and the API will not recognise the replay. The second admission is an edge case most changelogs would bury — “if multi-approval is turned off while links are still sitting in draft, those links are cancelled automatically and refunded” — which is a configuration change that silently mutates outstanding payouts.
The catalog reads five registered APIs for CoinGate: the Orders API, Refunds API, Conversions API, Currencies API and the Send Requests API, which is the payout surface nearest to this one. Payout Links is not among them. The agentic access profile counts 10 operations with 4 acting — a small surface where nearly half the operations move money.
CoinGate scores 47.0, developing on the Kin Score, with access clarity and contract quality both at 56.6 and governance at 0.0. Agent Readiness is 27.3, agent-aware, and three dimensions are lit that matter here: error_semantics, reversibility_documented and auth_clarity. The two that are dark are the two this post is about. idempotency is unlit, and the blog now says in plain English what the contract does not. event_surface_described is unlit, and the reason is precise rather than incidental — the registered specs carry a callback_url field but no OpenAPI callbacks block, so the API accepts a webhook destination without ever declaring the six events it will send there. Both facts exist. Both live in a blog post. On a payments API where the debit lands the instant the call returns, that is the gap that costs somebody money.