{"info":{"name":"IdealBox Pay API · 2026-08-19","description":"The REST surface a merchant server integrates against. The dashboard uses\nGraphQL; both are presentations of one service layer, and neither holds\nbusiness logic of its own.\n\nFour conventions run through every endpoint:\n\n- **Amounts are decimal strings of minor units.** `\"1050\"` in USD is $10.50;\n  `\"500000\"` in XAF is 500,000 francs, because XAF has no minor unit. A JSON\n  number silently loses precision above 2^53, which a settlement batch in a\n  zero-decimal currency reaches sooner than it looks.\n- **Dates are epoch milliseconds**, matching the GraphQL surface exactly.\n- **The environment is in the key**, never in a header or a request field. A\n  `ib_sk_test_…` key can neither read nor write live data.\n- **Errors carry a stable `code`.** Branch on `error.code`, never on\n  `error.message` — the message is translated to the caller’s language.\n\nMoney-moving calls take an `Idempotency-Key`. A replay returns the original\nresult rather than taking the money twice.","schema":"https://schema.getpostman.com/json/collection/v2.1.0/collection.json"},"auth":{"type":"bearer","bearer":[{"key":"token","value":"{{secretKey}}","type":"string"}]},"variable":[{"key":"baseUrl","value":"http://localhost:4004"},{"key":"secretKey","value":"ib_sk_test_replace_me"}],"item":[{"name":"Create a payment","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Idempotency-Key","value":"{{$guid}}"}],"url":{"raw":"{{baseUrl}}/v1/payment_intents","host":["{{baseUrl}}"],"path":["v1","payment_intents"]},"body":{"mode":"raw","raw":"{\n  \"amount\": \"500000\",\n  \"currency\": \"XAF\",\n  \"country\": \"CM\",\n  \"methodType\": \"CARD\",\n  \"walletBrand\": \"APPLE_PAY\",\n  \"reference\": \"\",\n  \"description\": \"\",\n  \"customer\": \"\",\n  \"wallet\": \"\",\n  \"receiptEmail\": \"\",\n  \"returnUrl\": \"\",\n  \"statementDescriptor\": \"\",\n  \"providerParams\": {},\n  \"metadata\": {}\n}","options":{"raw":{"language":"json"}}},"description":"Returns a client secret and, once confirmed, whatever the customer must do next. Send an `Idempotency-Key` header — a replay returns the same payment rather than creating a second."}},{"name":"List payments","request":{"method":"GET","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/payment_intents","host":["{{baseUrl}}"],"path":["v1","payment_intents"],"query":[{"key":"limit","value":"","description":"Capped at 100. Larger reads belong in an export.","disabled":true},{"key":"page","value":"","description":"One-based.","disabled":true},{"key":"search","value":"","description":"Prefix on ids; case-insensitive contains on reference, receipt email, description and the customer’s name or email.","disabled":true}]},"description":"Scoped to the environment of the key you authenticate with. A TEST key never sees LIVE payments."}},{"name":"Confirm a payment","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/payment_intents/:id/confirm","host":["{{baseUrl}}"],"path":["v1","payment_intents",":id","confirm"]},"description":"Routes the payment to a provider and starts it. The response says what the customer must do next."}},{"name":"Retrieve a payment","request":{"method":"GET","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/payment_intents/:id","host":["{{baseUrl}}"],"path":["v1","payment_intents",":id"]},"description":"Includes every charge attempted against it. Somebody else’s id answers 404 rather than 403, so this cannot be used to test whether an id exists."}},{"name":"Create a customer","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/customers","host":["{{baseUrl}}"],"path":["v1","customers"]},"body":{"mode":"raw","raw":"{\n  \"email\": \"\",\n  \"phone\": \"\",\n  \"name\": \"\",\n  \"externalRef\": \"\",\n  \"country\": \"\",\n  \"metadata\": {}\n}","options":{"raw":{"language":"json"}}},"description":"Optional. A payment can name a customer or stand alone; creating one is worth it when you want the same payer across several payments."}},{"name":"Payment methods available for a corridor","request":{"method":"GET","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/v1/providers","host":["{{baseUrl}}"],"path":["v1","providers"],"query":[{"key":"country","value":"","disabled":true},{"key":"currency","value":"","disabled":true},{"key":"amount","value":"","description":"Minor units, as a decimal string.","disabled":true}]},"description":"Returns flow kinds, not provider names. A checkout UI renders from this, which is why enabling a new provider requires no client release. Pass `amount` to exclude methods whose limits exclude this payment."}}]}