{"openapi":"3.1.0","info":{"title":"Moonvex Merchant API","version":"1.0.0","description":"Crypto payments: create payments, receive signed webhooks, read balances.\n\nAuthentication: `Authorization: Bearer sk_live_...`.\nIdempotency: every POST that creates money-moving objects requires an `Idempotency-Key` header (8-128 chars). Repeating the request with the same key returns the stored response with header `Idempotent-Replayed: true`; reusing a key with a different body returns 409.\nPagination: cursor based (`nextCursor`)."},"servers":[{"url":"https://api.moonvex.org"}],"security":[{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"sk_live_/sk_test_ secret key"}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string","examples":["PAYMENT_NOT_FOUND"]},"message":{"type":"string"},"requestId":{"type":"string"},"details":{"type":"object"}}}}},"CreatePayment":{"type":"object","required":["orderId","amount","currency","network"],"additionalProperties":false,"properties":{"orderId":{"type":"string","maxLength":128},"customerId":{"type":"string","description":"Your customer id"},"customerEmail":{"type":"string","format":"email"},"amount":{"type":"string","pattern":"^\\d+(\\.\\d+)?$","examples":["100.00"]},"currency":{"type":"string","description":"Pricing currency: a crypto asset (USDT) or USD","examples":["USDT","USD"]},"asset":{"type":"string","description":"Required when currency is USD","enum":["BTC","ETH","BNB","TRX","SOL","TON","USDT","USDC"]},"network":{"type":"string","enum":["BITCOIN","ETHEREUM","BSC","TRON","SOLANA","TON"]},"expiresInMinutes":{"type":"integer","minimum":5,"maximum":1440,"default":30},"description":{"type":"string"},"metadata":{"type":"object","additionalProperties":{"type":["string","number","boolean","null"]}}}},"Payment":{"type":"object","properties":{"id":{"type":"string","examples":["pay_3xT9..."]},"object":{"const":"payment"},"status":{"type":"string","enum":["CREATED","PENDING","DETECTED","PARTIALLY_PAID","CONFIRMING","CONFIRMED","OVERPAID","UNDERPAID","EXPIRED","FAILED","CANCELLED","REFUNDED"]},"orderId":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+(\\.\\d+)?$","examples":["100.00"],"description":"Total the customer sends: your amount plus your project fee (USDT/USDC in whole cents)"},"merchantAmount":{"type":"string","pattern":"^\\d+(\\.\\d+)?$","examples":["100.00"],"description":"What you receive when paid in full"},"asset":{"type":"string"},"network":{"type":"string"},"contract":{"type":"string","nullable":true,"description":"Official token contract (mint / jetton master). Only this token is credited; null for native coins"},"tokenStandard":{"type":"string","nullable":true,"enum":["ERC-20","BEP-20","TRC-20","SPL","Jetton"]},"address":{"type":"string"},"paymentUrl":{"type":"string","format":"uri"},"receivedAmount":{"type":"string","pattern":"^\\d+(\\.\\d+)?$","examples":["100.00"]},"fee":{"type":"object","description":"Your project fee, paid by the customer on top","properties":{"percent":{"type":"string"},"expectedAmount":{"type":"string","description":"Fee on a full payment"},"amount":{"type":["string","null"],"description":"Actual fee once settled"}}},"netAmount":{"type":["string","null"]},"confirmations":{"type":"integer"},"requiredConfirmations":{"type":"integer"},"txHashes":{"type":"array","items":{"type":"string"}},"expiresAt":{"type":["string","null"],"format":"date-time"},"settledAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"WebhookEvent":{"type":"object","description":"POSTed to your endpoint. Headers: Moonvex-Signature: t=<unix>,v1=<hex HMAC-SHA256 of \"t.rawBody\">; Moonvex-Event-Id. Reject timestamps older than 5 minutes and deduplicate by event id.","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","examples":["payment.confirmed"]},"apiVersion":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"data":{"$ref":"#/components/schemas/Payment"}}}}},"paths":{"/v1/payments":{"post":{"summary":"Create a payment","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePayment"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Payment"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"summary":"List payments","parameters":[{"name":"status","in":"query","schema":{"type":"string"}},{"name":"orderId","in":"query","schema":{"type":"string"}},{"name":"customerId","in":"query","schema":{"type":"string"}},{"name":"mode","in":"query","schema":{"type":"string","enum":["INVOICE","DEPOSIT"]}},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","maximum":100}}],"responses":{"200":{"description":"Page","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Payment"}},"hasMore":{"type":"boolean"},"nextCursor":{"type":["string","null"]}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/payments/quote":{"get":{"summary":"Price a payment: your amount, the project fee on top and the total the customer sends","parameters":[{"name":"amount","in":"query","required":true,"schema":{"type":"string"}},{"name":"currency","in":"query","required":true,"schema":{"type":"string"}},{"name":"asset","in":"query","schema":{"type":"string"}},{"name":"network","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Quote: { merchantAmount, fee: { percent, amount }, total, pricing }"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/payments/{id}":{"get":{"summary":"Get a payment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Payment"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/payments/{id}/cancel":{"post":{"summary":"Cancel an unpaid payment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cancelled"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/deposit-addresses":{"post":{"summary":"Permanent deposit address of a customer (same address on repeat calls; one EVM address serves ETHEREUM and BSC). Every confirmed incoming transfer becomes a DEPOSIT payment (deposit.detected / deposit.confirmed). Scope wallets:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["customerId","network"],"properties":{"customerId":{"type":"string","maxLength":128},"network":{"type":"string","enum":["TRON","ETHEREUM","BSC","SOLANA","TON","BITCOIN"]},"customerEmail":{"type":"string","format":"email"}}}}}},"responses":{"200":{"description":"Existing address"},"201":{"description":"Created"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"summary":"List permanent deposit addresses (scope payments:read)","parameters":[{"name":"customerId","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Addresses"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/payouts":{"post":{"summary":"Create a payout (async, 202). Supported networks: BITCOIN, ETHEREUM, BSC, TRON, SOLANA, TON","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["asset","network","address","amount","externalId"],"properties":{"asset":{"type":"string"},"network":{"type":"string"},"address":{"type":"string"},"amount":{"type":"string","pattern":"^\\d+(\\.\\d+)?$","examples":["100.00"],"description":"feeMode add: what the recipient gets; deduct: exactly what leaves your balance"},"feeMode":{"type":"string","enum":["add","deduct"],"default":"add","description":"add: fee on top of amount; deduct: fee taken out of amount"},"externalId":{"type":"string","description":"Your unique withdrawal id; duplicates are rejected"}}}}}},"responses":{"202":{"description":"Accepted"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/payouts/quote":{"get":{"summary":"Price a payout: recipient amount, fee (rounded down), total debited, available balance","parameters":[{"name":"asset","in":"query","required":true,"schema":{"type":"string"}},{"name":"network","in":"query","required":true,"schema":{"type":"string"}},{"name":"amount","in":"query","required":true,"schema":{"type":"string"}},{"name":"feeMode","in":"query","schema":{"type":"string","enum":["add","deduct"]}}],"responses":{"200":{"description":"Quote: { feeMode, amount, fee: { percent, amount }, total, available, sufficient }"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/payouts/{id}":{"get":{"summary":"Get a payout","responses":{"200":{"description":"Payout"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/payouts/{id}/cancel":{"post":{"summary":"Cancel before signing","responses":{"200":{"description":"Cancelled"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/plans":{"put":{"summary":"Create or update a subscription plan","responses":{"200":{"description":"Plan"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/subscriptions":{"post":{"summary":"Subscribe a customer (returns the first payment link)","responses":{"200":{"description":"Subscription"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/subscriptions/{id}":{"get":{"summary":"Get a subscription","responses":{"200":{"description":"Subscription"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/subscriptions/{id}/cancel":{"post":{"summary":"Cancel a subscription","responses":{"200":{"description":"Cancelled"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/wallets/balances":{"get":{"summary":"Merchant balances from the ledger","responses":{"200":{"description":"Balances"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhooks/endpoints":{"get":{"summary":"List webhook endpoints","responses":{"200":{"description":"Endpoints"}}},"post":{"summary":"Create a webhook endpoint (secret returned once)","responses":{"201":{"description":"Created"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhooks/endpoints/{id}/rotate-secret":{"post":{"summary":"Rotate the signing secret (old one valid 24 h)","responses":{"200":{"description":"New secret"}}}},"/v1/webhooks/deliveries":{"get":{"summary":"Delivery history with attempts","responses":{"200":{"description":"Deliveries"}}}},"/v1/webhooks/deliveries/{id}/replay":{"post":{"summary":"Re-send a delivery","responses":{"202":{"description":"Queued"}}}},"/v1/rates":{"get":{"summary":"Aggregated USD rates (any valid API key)","parameters":[{"name":"assets","in":"query","schema":{"type":"string","example":"BTC,ETH"}}],"responses":{"200":{"description":"Rates"},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, IP or project not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict (duplicate order, idempotency key reuse)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/checkout/{id}":{"get":{"summary":"Public checkout view","security":[],"responses":{"200":{"description":"Checkout"}}}},"/v1/public/checkout/{id}/events":{"get":{"summary":"Server-sent events with payment updates","security":[],"responses":{"200":{"description":"text/event-stream"}}}}},"webhooks":{"paymentEvent":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"}}}},"responses":{"2XX":{"description":"Acknowledge within 10 s"}}}}}}