| Ambiente | URL base | Observações |
|---|---|---|
| Sandbox | https://api.sandbox.tokenone.com.br/v1 | Testes de integração. Cessões são mintadas em testnets (Polygon Amoy etc.). |
| Produção | https://api.tokenone.com.br/v1 | Operação real. Requer credenciais aprovadas pelo time comercial. |
client_id / client_secret no onboarding.{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "cessoes:write cessoes:read"
}Authorization de toda requisição:| Escopo | Permissão |
|---|---|
cessoes:read | Consultar cessões e listagens |
cessoes:write | Criar cessões e atualizar status |
webhooks:manage | Gerenciar inscrições em webhooks |
Tokens têm validade de 1 hora. Recomendamos cachear o token e renovar somente quando próximo da expiração — não solicite um token novo a cada requisição.
application/json; charset=utf-8YYYY-MM-DD (datas) ou YYYY-MM-DDTHH:mm:ssZ (timestamps, sempre em UTC)45678901000123, e não 45.678.901/0001-23)BRL, USD)POST aceita o header Idempotency-Key com um UUID gerado pelo cliente. Em caso de reenvio (timeout, falha de rede), a API retornará exatamente a mesma resposta da primeira chamada sem criar registro duplicado.| Parâmetro | Tipo | Default | Máximo | Descrição |
|---|---|---|---|---|
limit | integer | 50 | 200 | Quantidade de registros por página |
cursor | string | — | — | Cursor opaco devolvido pela página anterior |
meta:{
"data": [...],
"meta": {
"tem_proxima_pagina": true,
"proximo_cursor": "eyJpZCI6IjEyM2U0NTY3In0",
"total_estimado": 1247
}
}{
"type": "https://docs.tokenone.com.br/errors/cnpj-invalido",
"title": "CNPJ inválido",
"status": 422,
"detail": "O dígito verificador do CNPJ do sacado não confere",
"instance": "/v1/cessoes",
"campo": "cnpj_sacado",
"request_id": "req_8a2f1b3c9d4e5f6a"
}request_id em comunicações com o suporte da TokenOne — ele permite localizar a chamada exata nos logs.{
"id_cessao": "f7d3a91e-2b8c-4e5f-9a01-3c8d7e6f2a14",
"numero_documento": "NF000148",
"tipo_documento": "NOTA_FISCAL",
"cnpj_cedente": "45678901000123",
"cnpj_sacado": "11111111000101",
"valor_futuro": 57286.48,
"valor_presente": 54822.10,
"taxa_desconto_aa": 0.2680,
"prazo_dias": 61,
"data_cessao": "2025-11-15",
"data_vencimento": "2026-01-15",
"data_pagamento": null,
"rating": "A",
"moeda": "BRL",
"status": "TOKENIZADA",
"lastro": {
"url": "https://docs.tokenone.com.br/nf/abc123.pdf",
"hash_sha256": "9af15b3e7c4d2a..."
},
"tokenizacao": {
"rede": "polygon",
"contrato": "0xAb12cD34eF56...",
"token_id": "1247",
"tx_hash": "0x8f7e6d5c4b3a...",
"status_onchain": "MINTADA",
"mintada_em": "2025-11-15T14:23:08Z"
},
"metadados": {
"fundo_destino": "TIDC-PRIVATE-CREDIT-I",
"tranche": "SENIOR"
},
"criado_em": "2025-11-15T14:22:31Z",
"atualizado_em": "2025-11-15T14:23:08Z"
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_cessao | UUID | gerado | Identificador único da cessão (gerado pela TokenOne) |
numero_documento | string | sim | Número do documento de origem (NF, duplicata etc.) |
tipo_documento | enum | sim | NOTA_FISCAL, DUPLICATA, CCB, CRA, CRI, DEBENTURE |
cnpj_cedente | string(14) | sim | CNPJ do cedente (originador do crédito), apenas dígitos |
cnpj_sacado | string(14) | sim | CNPJ do sacado (devedor) |
valor_futuro | decimal | sim | Valor de face — montante que o sacado pagará no vencimento |
valor_presente | decimal | sim | Valor pago pelo cessionário na data da cessão (≤ valor_futuro) |
taxa_desconto_aa | decimal | calculado | Taxa de desconto anual implícita (calculada pela API) |
prazo_dias | integer | calculado | Dias corridos entre data_cessao e data_vencimento |
data_cessao | date | sim | Data em que o direito creditório foi transferido |
data_vencimento | date | sim | Data em que o sacado deve liquidar o título |
data_pagamento | date | não | Data efetiva da liquidação (preenchida via PATCH) |
rating | enum | sim | A, B, C, D, E |
moeda | string(3) | não | ISO 4217. Default BRL |
status | enum | gerado | Ver Estados da cessão |
lastro.url | string | sim | URL pública (signed URL) do documento que lastreia o crédito |
lastro.hash_sha256 | string(64) | sim | Hash SHA-256 hexadecimal do arquivo de lastro (garante integridade) |
tokenizacao | object | gerado | Estado da operação on-chain (preenchido após o mint) |
metadados | object | não | Campos customizados livres (até 16 chaves, 256 chars por valor) |
201 Created — Cessão registrada. O mint on-chain ocorre de forma assíncrona; acompanhe pelo webhook cessao.tokenizada ou pelo endpoint de consulta.{
"id_cessao": "f7d3a91e-2b8c-4e5f-9a01-3c8d7e6f2a14",
"numero_documento": "NF000148",
"status": "REGISTRADA",
"taxa_desconto_aa": 0.2680,
"prazo_dias": 61,
"tokenizacao": {
"rede": "polygon",
"contrato": "0xAb12cD34eF56...",
"token_id": null,
"tx_hash": null,
"status_onchain": "PENDENTE_MINT"
},
"criado_em": "2025-11-15T14:22:31Z",
"_links": {
"self": "/v1/cessoes/f7d3a91e-2b8c-4e5f-9a01-3c8d7e6f2a14"
}
}409 Conflict — Já existe cessão para a tupla (numero_documento, cnpj_cedente, data_cessao).422 Unprocessable Entity — Validação falhou (CNPJ inválido, valor_presente > valor_futuro, datas inconsistentes etc.).{
"lote_id": "lote-banrisul-2025-11-15-001",
"cessoes": [
{ "numero_documento": "NF000148", "...": "..." },
{ "numero_documento": "NF000149", "...": "..." }
]
}207 Multi-Status{
"lote_id": "lote-banrisul-2025-11-15-001",
"total": 2,
"sucesso": 1,
"falha": 1,
"resultados": [
{
"indice": 0,
"numero_documento": "NF000148",
"status_http": 201,
"id_cessao": "f7d3a91e-2b8c-4e5f-9a01-3c8d7e6f2a14"
},
{
"indice": 1,
"numero_documento": "NF000149",
"status_http": 422,
"erro": {
"type": "https://docs.tokenone.com.br/errors/cnpj-invalido",
"title": "CNPJ inválido",
"campo": "cnpj_sacado"
}
}
]
}200 OK| Parâmetro | Tipo | Descrição |
|---|---|---|
cnpj_cedente | string | Filtra por CNPJ do cedente |
cnpj_sacado | string | Filtra por CNPJ do sacado |
status | enum | Filtra por status. Aceita múltiplos: ?status=REGISTRADA,TOKENIZADA |
data_cessao_inicio | date | Data mínima de cessão (inclusiva) |
data_cessao_fim | date | Data máxima de cessão (inclusiva) |
vence_em_dias | integer | Cessões a vencer nos próximos N dias |
rating | enum | Filtra por rating |
limit | integer | Tamanho da página (default 50, máximo 200) |
cursor | string | Cursor de paginação |
422.{
"novo_status": "LIQUIDADA",
"data_pagamento": "2026-01-14",
"valor_recebido": 57286.48,
"observacao": "Liquidação antecipada em 1 dia"
}200 OKREGISTRADA ──► TOKENIZADA ──► LIQUIDADA
└─► VENCIDA ──► RECUPERADA
└─► CANCELADA| Status | Descrição |
|---|---|
REGISTRADA | Cessão validada e gravada. Mint on-chain pendente. |
TOKENIZADA | NFT mintado com sucesso. Token está no wallet do fundo destino. |
LIQUIDADA | Sacado pagou o título integralmente. Token queimado on-chain. |
VENCIDA | Data de vencimento ultrapassada sem pagamento. |
RECUPERADA | Cessão vencida que foi posteriormente recuperada (parcial ou totalmente). |
CANCELADA | Cessão cancelada antes da liquidação (recompra, erro de registro etc.). |
Importante: a vencernão é um status. Trata-se de um filtro de consulta (vence_em_dias=N) sobre cessõesTOKENIZADAcujadata_vencimentoainda não passou.
| Evento | Disparado quando… |
|---|---|
cessao.registrada | Cessão validada e persistida |
cessao.tokenizada | NFT mintado com sucesso na blockchain |
cessao.tokenizacao_falhou | Mint falhou após 3 tentativas |
cessao.liquidada | Status alterado para LIQUIDADA |
cessao.vencida | Cessão atingiu data_vencimento sem pagamento |
cessao.cancelada | Cessão cancelada |
{
"evento": "cessao.tokenizada",
"id_evento": "evt_8a2f1b3c9d4e5f6a",
"ocorrido_em": "2025-11-15T14:23:08Z",
"dados": {
"id_cessao": "f7d3a91e-2b8c-4e5f-9a01-3c8d7e6f2a14",
"numero_documento": "NF000148",
"tokenizacao": {
"rede": "polygon",
"contrato": "0xAb12cD34eF56...",
"token_id": "1247",
"tx_hash": "0x8f7e6d5c4b3a..."
}
}
}X-TokenOne-Signature com HMAC-SHA256 do corpo da requisição usando a secret configurada:2xx são reenviados com backoff exponencial: 1min, 5min, 30min, 2h, 6h, 24h. Após 6 tentativas, o evento é marcado como falho e disponibilizado no dashboard para reenvio manual.| HTTP | type (slug) | Significado |
|---|---|---|
| 400 | requisicao-malformada | JSON inválido ou campos ausentes |
| 401 | nao-autenticado | Token ausente, expirado ou inválido |
| 403 | escopo-insuficiente | Token não tem o escopo necessário |
| 404 | recurso-nao-encontrado | id_cessao não existe |
| 409 | cessao-duplicada | Cessão já registrada para a tupla informada |
| 422 | cnpj-invalido | CNPJ não passou na validação do dígito verificador |
| 422 | valor-presente-maior-que-futuro | valor_presente > valor_futuro |
| 422 | datas-inconsistentes | data_cessao > data_vencimento etc. |
| 422 | transicao-status-invalida | Tentativa de transição não permitida na máquina de estados |
| 422 | hash-lastro-divergente | Hash informado não bate com o do arquivo em lastro.url |
| 429 | rate-limit-excedido | Veja Limites de uso |
| 500 | erro-interno | Falha inesperada. Reporte ao suporte com o request_id |
| 503 | servico-indisponivel | Manutenção ou indisponibilidade temporária |
| Plano | Requisições/min | Cessões/mês |
|---|---|---|
| Sandbox | 60 | ilimitado |
| Standard | 300 | 10.000 |
| Institucional | 1.500 | sob contrato |
429, respeite o header Retry-After (em segundos).developers@tokenone.com.brcomercial@tokenone.com.br