{"info":{"_postman_id":"a88b9e11-f3f3-a314-c97f-77fb6b80eedb","name":"Throne API","description":"API REST do gateway Throne, PIX in\/out + cripto out.","version":"1.0.0","schema":"https:\/\/schema.getpostman.com\/json\/collection\/v2.1.0\/collection.json"},"auth":{"type":"bearer","bearer":[{"key":"token","value":"{{public_key}}:{{secret_key}}","type":"string"}]},"variable":[{"key":"base_url","value":"https:\/\/app.thronecorporate.com\/api\/v1","type":"string"},{"key":"public_key","value":"pk_live_xxx","type":"string"},{"key":"secret_key","value":"sk_live_xxx","type":"string"}],"item":[{"name":"Sa\u00fade","item":[{"name":"Health check (sem auth)","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}\/health","host":["{{base_url}}"],"path":["health"]},"body":null,"description":null},"response":[]}]},{"name":"Saldo","item":[{"name":"Saldo atual da wallet","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}\/balance","host":["{{base_url}}"],"path":["balance"]},"body":null,"description":"Retorna saldo dispon\u00edvel, reservado (em saques) e pendente."},"response":[]}]},{"name":"Transa\u00e7\u00f5es","item":[{"name":"Criar cobran\u00e7a, PIX ou cart\u00e3o de cr\u00e9dito","request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"a3b6e3f8-2f1d-4f6b-9e7c-9b4f5d1c3a2e","type":"text"},{"key":"Content-Type","value":"application\/json","type":"text"}],"url":{"raw":"{{base_url}}\/transactions","host":["{{base_url}}"],"path":["transactions"]},"body":{"mode":"raw","raw":"{\n    \"amount_cents\": 10000,\n    \"payment_method\": \"pix\"\n}","options":{"raw":{"language":"json"}}},"description":"Cria uma cobran\u00e7a. Aceita **PIX** (`payment_method: pix`) e **cart\u00e3o de cr\u00e9dito** (`payment_method: credit_card`, credit card).\n\n- **PIX**: gera QR Code copia-e-cola, status inicial `pending`. Quando a adquirente confirma, disparamos o webhook `transaction.paid` e creditamos o saldo na hora.\n- **Cart\u00e3o**: a venda entra como `settling` (a liberar) e s\u00f3 vira saldo dispon\u00edvel depois de uma antecipa\u00e7\u00e3o aprovada. Envie o objeto `card` e veja o exemplo \"cart\u00e3o\" no corpo da requisi\u00e7\u00e3o."},"response":[]},{"name":"Consultar transa\u00e7\u00e3o","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}\/transactions\/:id","host":["{{base_url}}"],"path":["transactions","{id}"]},"body":null,"description":null},"response":[]},{"name":"Listar transa\u00e7\u00f5es (paginado)","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}\/transactions\/list","host":["{{base_url}}"],"path":["transactions","list"]},"body":null,"description":"Lista as transa\u00e7\u00f5es do seller. Aceita filtros por status, per\u00edodo e payment_method. Pagina\u00e7\u00e3o cursor-based."},"response":[]},{"name":"Estornar transa\u00e7\u00e3o paga","request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"a3b6e3f8-2f1d-4f6b-9e7c-9b4f5d1c3a2e","type":"text"},{"key":"Content-Type","value":"application\/json","type":"text"}],"url":{"raw":"{{base_url}}\/transactions\/:id\/refund","host":["{{base_url}}"],"path":["transactions","{id}","refund"]},"body":{"mode":"raw","raw":"{\n    \"_comment\": \"preencher conforme schema\"\n}","options":{"raw":{"language":"json"}}},"description":"Cria entry tipo `reverse` no ledger. Estorno parcial OK (passe `amount_cents`). Se omitir, estorna o l\u00edquido total."},"response":[]}]},{"name":"Saques","item":[{"name":"Solicitar saque PIX ou cripto","request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"a3b6e3f8-2f1d-4f6b-9e7c-9b4f5d1c3a2e","type":"text"},{"key":"Content-Type","value":"application\/json","type":"text"}],"url":{"raw":"{{base_url}}\/withdrawals","host":["{{base_url}}"],"path":["withdrawals"]},"body":{"mode":"raw","raw":"{\n    \"amount_cents\": 50000,\n    \"totp_code\": \"123456\",\n    \"idempotency_key\": \"wdr-2026-05-06-001\",\n    \"destination\": {\n        \"key\": \"a@b.com\",\n        \"key_type\": \"email\"\n    }\n}","options":{"raw":{"language":"json"}}},"description":"Exige **2FA TOTP** (`totp_code`) e **2FA habilitado** no seller. Lock pessimista impede over-draft mesmo em chamadas concorrentes. Ap\u00f3s criar, status = `requested`. Webhook `withdrawal.completed` ou `withdrawal.failed` chega quando o banco confirma."},"response":[]},{"name":"Consultar saque","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}\/withdrawals\/:id","host":["{{base_url}}"],"path":["withdrawals","{id}"]},"body":null,"description":null},"response":[]},{"name":"Listar saques (paginado)","request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}\/withdrawals\/list","host":["{{base_url}}"],"path":["withdrawals","list"]},"body":null,"description":null},"response":[]}]},{"name":"Cart\u00e3o internacional","item":[{"name":"Criar checkout de cart\u00e3o (Throne Elements, embutido na sua p\u00e1gina)","request":{"method":"POST","header":[{"key":"Content-Type","value":"application\/json","type":"text"}],"url":{"raw":"{{base_url}}\/elements\/checkout","host":["{{base_url}}"],"path":["elements","checkout"]},"body":{"mode":"raw","raw":"{\n    \"amount_cents\": 2000,\n    \"currency\": \"usd\",\n    \"customer\": {\n        \"name\": \"Maria Souza\",\n        \"email\": \"maria@exemplo.com\"\n    }\n}","options":{"raw":{"language":"json"}}},"description":"Crie um **checkout de cart\u00e3o internacional** e embuta ele **dentro da sua p\u00e1gina** com o **Throne Elements**. O comprador paga sem sair do seu site, no mesmo dom\u00ednio, sem redirecionamento e sem pop-up.\n\n> **Recomendado: embutido na sua p\u00e1gina (indexado).** Use o `transaction_id` para montar o **Throne Elements** com o `throne-elements.js`, e o checkout aparece dentro do seu site, sem redirecionamento. O endpoint tamb\u00e9m devolve um `checkout_url` (p\u00e1gina de checkout hospedada no Throne) por compatibilidade, mas o embed \u00e9 o caminho recomendado.\n\n### Como funciona\n1. Seu **backend** chama este endpoint com o valor (na moeda do comprador) e os dados do cliente. Guarde o `transaction_id` que volta.\n2. No **HTML da sua p\u00e1gina**, coloque o container do Throne Elements com esse `transaction_id` e inclua o script do Throne. O checkout aparece embutido, como parte da sua p\u00e1gina.\n3. O comprador digita o cart\u00e3o ali mesmo, dentro do elemento do Throne. Os dados do cart\u00e3o v\u00e3o direto pro processador, ent\u00e3o **o seu site nunca toca no n\u00famero do cart\u00e3o** (o PCI fica fora do seu escopo).\n4. Confirmado o pagamento, a transa\u00e7\u00e3o vira `paid` e entra em libera\u00e7\u00e3o (`settling`). O l\u00edquido cai no dispon\u00edvel via antecipa\u00e7\u00e3o aprovada.\n\n### Embutir na p\u00e1gina com o Throne Elements\n```html\n<!-- onde o checkout deve aparecer na sua p\u00e1gina -->\n<div data-throne-elements\n     data-id=\"TRANSACTION_ID\"\n     data-color=\"#7c3aed\"\n     data-theme=\"light\"\n     data-radius=\"10\"><\/div>\n\n<script src=\"https:\/\/app.thronecorporate.com\/throne-elements.js\" async><\/script>\n```\nAtributos do container:\n- `data-id`: o `transaction_id` devolvido por este endpoint.\n- `data-color`: cor principal (bot\u00e3o e realces) pra casar com a paleta do seu site.\n- `data-theme`: `light` ou `dark`.\n- `data-radius`: arredondamento dos cantos, em px.\n\nO elemento se ajusta sozinho \u00e0 altura e n\u00e3o tem borda, ent\u00e3o fica com cara de nativo da sua p\u00e1gina. Para reagir ao pagamento aprovado:\n```js\nwindow.addEventListener('throne-elements:paid', (e) => {\n  \/\/ e.detail.transaction_id: pagamento aprovado. Mostre o \"obrigado\", libere o produto.\n});\n```\n\n### Quem fala com quem (PCI)\nO seu site s\u00f3 conversa com o **Throne**: carrega o script e o elemento do Throne, e nada mais. **Em nenhum momento o seu site fala com o processador de cart\u00e3o.** Quem faz isso \u00e9 o Throne, por dentro do elemento. O elemento \u00e9 definido pelo Throne; voc\u00ea s\u00f3 ajusta cor, tema e cantos pra casar com o site. O checkout se adapta ao idioma do comprador.\n\n### Multi-moeda\n`amount_cents` \u00e9 na **moeda do comprador** (menor unidade, como centavos ou pence). O valor \u00e9 **liquidado e creditado em BRL**. A transa\u00e7\u00e3o guarda `currency`, `native_amount_cents` e `fx_rate` (c\u00e2mbio no momento da venda). Consulte tudo no `GET \/transactions\/{id}`.\n\n### Exemplo: o backend cria a transa\u00e7\u00e3o\n```php\n\/\/ backend do lojista, rota POST \/criar-checkout\n$res = Http::withToken('pk_live_xxx:sk_live_xxx')\n    ->acceptJson()\n    ->post('https:\/\/app.thronecorporate.com\/api\/v1\/elements\/checkout', [\n        'amount_cents' => 2000,   \/\/ US$ 20,00 (na moeda do comprador)\n        'currency'     => 'usd',\n        'customer'     => ['name' => 'Maria Souza', 'email' => 'maria@exemplo.com'],\n    ]);\n\n\/\/ devolve s\u00f3 o transaction_id pro front embutir o Throne Elements\nreturn response()->json(['transaction_id' => $res->json('transaction_id')]);\n```\nA `secret key` fica s\u00f3 no seu backend, nunca no navegador."},"response":[]}]}]}