Documentação
Início rápido: seu primeiro pagamento com a API
Com uma chave de agente de prática você confere a conexão com GET /v1/me, pede um pagamento com POST /v1/spends e lê o resultado: uma recusa por regra chega como resposta normal, não como erro.
Antes de começar
- Uma chave de agente de prática (
np_test_agent_…). É criada no console, em Chaves de API, quando seu acesso é aberto. Aparece uma única vez. - Um agente com regras: o valor máximo por pagamento e os destinos permitidos.
- Um cliente HTTP. Os exemplos usam curl e o endereço base que o
openapi.jsonpublica.
Passo 1: confira a conexão
GET /v1/me diz quem você é para a API: a chave, o agente e o ambiente. Se responder 200, a chave funciona.
curl https://api.nouronpass.com/v1/me \
-H "Authorization: Bearer $NOURON_API_KEY"Um 401 com invalid_api_key ou missing_api_key significa que a chave está mal escrita ou não chega; veja a página de erros.
Passo 2: peça um pagamento
POST /v1/spends pede um pagamento. amount é o valor MÁXIMO que o agente aceita pagar; o vendedor fixa o valor final. O cabeçalho Idempotency-Key é obrigatório: se você repetir a chamada com a mesma chave, não se paga duas vezes.
curl -X POST https://api.nouronpass.com/v1/spends \
-H "Authorization: Bearer $NOURON_API_KEY" \
-H "Idempotency-Key: 7c1f0a52-3e9d-4c1b-9b3e-a41d0b6f2c11" \
-H "Content-Type: application/json" \
-d '{
"amount": "5.00",
"destination": "registry.npmjs.org",
"resource": {
"url": "https://registry.npmjs.org/-/pro/private-packages/month",
"method": "GET"
}
}'Cada tentativa nova usa uma chave de idempotência nova; uma repetição da mesma chamada usa a mesma.
Passo 3: leia o resultado
A resposta é um pagamento com um status. Decida por status, decline_reason e next_action, nunca pelo texto de message.
{ "id": "spd_9a2f1a7c0d4e5b3a8c6d7e0f1a2b3c4d", "status": "settled", "amount": "5.00", "amount_settled": "4.80", "destination": "registry.npmjs.org", "decline_reason": null, "next_action": { "code": "none" }}| Estado | O que significa |
|---|---|
| `pending_approval` | Supera o limite do dono e espera a aprovação dele. Não repita: consulte com GET /v1/spends/{id}. |
| `approved` | Passou pelas regras e tem limite reservado; ainda não foi enviado. |
| `processing` | Foi enviado e ainda não há resultado. Consulte mais tarde. |
| `settled` | Pago. Traz o resultado da compra e o recibo assinado. |
| `declined` | Uma regra o impediu. É uma decisão, não um erro: leia decline_reason. |
| `failed` | Foi aprovado, mas o pagamento falhou; nenhum dinheiro foi movido. Uma nova tentativa exige uma chave de idempotência nova. |
| `expired` | Ninguém aprovou a tempo e o pagamento venceu. |
| `cancelled` | O agente cancelou antes de enviar. |
Uma recusa por regra não é um erro
Quando uma regra do dono impede um pagamento, a API responde com HTTP 201 e um pagamento com status: declined e um motivo estável em decline_reason. Assim curl -f não quebra e um modelo não confunde isso com uma falha.
Se algo falhar
Um erro de verdade (JSON mal escrito, chave inválida, recurso inexistente) chega com um status HTTP 4xx ou 5xx e o mesmo envelope em todos os casos. Leia estes campos:
error.code: o código estável. Decida por ele.error.retry:nonão repita,as_isrepita a mesma requisição com a mesma chave de idempotência,after_fixingcorrija primeiro o que dizemmessageeparam.error.outcome_unknown: se for true, o pagamento pode ter sido feito; não repita com outra chave, consulte o pagamento.request_id: informe ao suporte se precisar de ajuda.
{ "ok": false, "status": 400, "request_id": "req_3z6y1wUd", "error": { "type": "invalid_request_error", "code": "invalid_amount_format", "message": "«abc» no es un monto válido. Usa un número positivo como texto con hasta 6 decimales, por ejemplo \"4.80\".", "param": "amount", "retry": "after_fixing", "retry_after_ms": null, "outcome_unknown": false }}Próximos passos
- Erros: cada código e o que fazer.
- Eventos e webhooks: saber das mudanças sem consultar.
- Versionamento: o que pode mudar sem aviso e o que não.
- Limites: quantas requisições e de que tamanho.