https://caas-api.tokenone.com.brPOST /v1/wallets → https://caas-api.tokenone.com.br/v1/wallets).tk_test_ já é gerada automaticamente (sandbox).tk_live_) é provisionada mediante solicitação ao suporte.x-api-key: SUA_API_KEYcaas-api.tokenone.com.br).| Prefixo | Ambiente | Redes permitidas | Dados |
|---|---|---|---|
tk_test_… | Testnet (Sandbox) | polygon-amoy, xdc-testnet | Isolados (dados de teste) |
tk_live_… | Mainnet (Produção) | polygon-mainnet, xdc-mainnet | Reais (on-chain) |
Uma chave tk_test_só opera em redes de teste e umatk_live_só em mainnets. Usar uma rede incompatível com o ambiente da chave retorna erro de validação.
| Ambiente | API Key | Redes | Uso |
|---|---|---|---|
| Sandbox | tk_test_… | Polygon Amoy, XDC Apothem | Desenvolvimento e testes, sem custo/valor real |
| Produção | tk_live_… | Polygon Mainnet, XDC Network | Operações reais on-chain |
https://caas-api.tokenone.com.br atende os dois; o que muda é a chave.| Recurso | Descrição | Endpoints |
|---|---|---|
| Wallets | Carteiras digitais (smart accounts ERC-4337) | 3 |
| Tokens | Tokens ERC-20 personalizados | 9 |
| Transfers | Transferências de tokens ERC-20 | 3 |
| Transactions | Execução de chamadas de contrato arbitrárias | 1 |
| Audit | Logs de auditoria | 1 |
x-api-key).O dashboard usa endpoints de console adicionais (login, gestão de API keys, webhook secret) autenticados por JWT ( Authorization: Bearer). Eles não fazem parte desta referência de integração.
| Rede | Identificador | Chain ID | Tipo | Explorer |
|---|---|---|---|---|
| Polygon Mainnet | polygon-mainnet | 137 | Produção (tk_live_) | polygonscan.com |
| Polygon Amoy | polygon-amoy | 80002 | Testnet (tk_test_) | amoy.polygonscan.com |
| XDC Network | xdc-mainnet | 50 | Produção (tk_live_) | xdcscan.io |
| XDC Apothem | xdc-testnet | 51 | Testnet (tk_test_) | apothem.xdcscan.io |
POST /v1/wallets{
"network": "xdc-testnet",
"extRef": "customer-12345"
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
network | string | Sim | Rede blockchain (deve ser compatível com o ambiente da chave) |
extRef | string | Não | Referência externa para seu sistema |
201 Created{
"id": "wallet-uuid",
"address": "0x1234...5678",
"network": "xdc-testnet",
"status": "active",
"extRef": "customer-12345",
"createdAt": "2026-06-03T10:00:00Z"
}GET /v1/wallets| Parâmetro | Tipo | Descrição | Exemplo |
|---|---|---|---|
page | integer | Número da página (padrão: 1) | 1 |
pageSize | integer | Itens por página (padrão: 20, máx: 100) | 50 |
network | string | Filtrar por rede | polygon-mainnet |
status | string | Filtrar por status | active |
address | string | Filtrar por endereço | 0x123... |
extRef | string | Filtrar por referência externa | customer-123 |
200 OK{
"data": [
{
"id": "wallet-uuid",
"address": "0x1234...5678",
"network": "xdc-testnet",
"status": "active",
"extRef": "customer-12345",
"createdAt": "2026-06-03T10:00:00Z"
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"totalItems": 150,
"totalPages": 8
}
}GET /v1/wallets/{address}| Parâmetro | Tipo | Descrição |
|---|---|---|
address | string | Endereço da wallet (0x...) |
200 OK{
"id": "wallet-uuid",
"address": "0x1234...5678",
"network": "xdc-testnet",
"status": "active",
"balance": {
"native": "1.5",
"tokens": [
{
"contractAddress": "0xtoken...",
"symbol": "DEBXYZ25",
"balance": "1000.0",
"decimals": 6
}
]
},
"createdAt": "2026-06-03T10:00:00Z"
}POST /v1/tokens{
"walletAddress": "0x1234...5678",
"name": "Debenture Empresa XYZ 2025",
"symbol": "DEBXYZ25",
"decimals": 6,
"network": "xdc-testnet",
"initialSupplyTokens": "10000000",
"maxSupplyTokens": "100000000",
"metadata": {
"description": "Debenture emitida pela Empresa XYZ com vencimento em 2025",
"website": "https://empresaxyz.com.br",
"cnpj": "12.345.678/0001-90"
}
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
walletAddress | string | Sim | Endereço da wallet que será owner do token |
name | string | Sim | Nome do token (máx: 64 caracteres) |
symbol | string | Sim | Símbolo do token (máx: 10 caracteres) |
decimals | integer | Sim | Casas decimais: deve ser 6 (fixado no contrato) |
network | string | Sim | Rede blockchain (compatível com o ambiente da chave) |
initialSupplyTokens | string | Não | Supply inicial em unidades legíveis (ex: "1000000") |
maxSupplyTokens | string | Não | Supply máximo em unidades legíveis |
metadata | object | Não | Metadados adicionais |
201 Created{
"token": {
"id": "token-uuid",
"contractAddress": "0xtoken...abc",
"name": "Debenture Empresa XYZ 2025",
"symbol": "DEBXYZ25",
"decimals": 6,
"network": "xdc-testnet",
"deployed": true
},
"transactionHash": "0xtxhash...",
"explorerUrls": {
"transaction": "https://apothem.xdcscan.io/tx/0x...",
"token": "https://apothem.xdcscan.io/token/0x..."
}
}Os explorerUrlsvariam conforme a rede (polygonscan.com / amoy.polygonscan.com / xdcscan.io / apothem.xdcscan.io).
GET /v1/tokens| Parâmetro | Tipo | Descrição |
|---|---|---|
page | integer | Número da página |
pageSize | integer | Itens por página |
network | string | Filtrar por rede |
symbol | string | Filtrar por símbolo |
contractAddress | string | Filtrar por endereço |
200 OK{
"data": [
{
"id": "token-uuid",
"contractAddress": "0xtoken...abc",
"name": "Debenture Empresa XYZ 2025",
"symbol": "DEBXYZ25",
"decimals": 6,
"network": "xdc-testnet",
"totalSupply": "10000000",
"deployed": true
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"totalItems": 45,
"totalPages": 3
}
}POST /v1/tokens/{contractAddress}/mint| Parâmetro | Tipo | Descrição |
|---|---|---|
contractAddress | string | Endereço do contrato do token |
{
"amountTokens": "1000",
"to": "0xrecipient...address",
"reason": "Recompensa por compra - Pedido #12345",
"metadata": {
"orderId": "12345",
"category": "purchase-reward"
}
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amountTokens | string | Sim | Quantidade em tokens (ex: "100" ou "1.5") |
to | string | Sim | Endereço do destinatário |
reason | string | Não* | Motivo da operação (*recomendado para auditoria) |
metadata | object | Não | Dados adicionais estruturados |
200 OK{
"transactionHash": "0xtx...hash",
"amount": "1000",
"to": "0xrecipient...address",
"supplyInfo": {
"totalSupplyBefore": "1000000",
"totalSupplyAfter": "1001000"
}
}POST /v1/tokens/{contractAddress}/burn{
"amountTokens": "500",
"reason": "Programa de buyback - Junho 2026"
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amountTokens | string | Sim | Quantidade a queimar |
reason | string | Não* | Motivo (*recomendado) |
metadata | object | Não | Dados adicionais |
200 OK{
"transactionHash": "0xtx...hash",
"amountBurned": "500",
"supplyInfo": {
"totalSupplyBefore": "1001000",
"totalSupplyAfter": "1000500",
"percentageBurned": "0.05%"
}
}POST /v1/tokens/{contractAddress}/burn-from{
"from": "0xuser...address",
"amountTokens": "250",
"reason": "Compliance - Ordem judicial #123/2025",
"metadata": {
"courtOrder": "123/2025",
"court": "Tribunal Federal"
}
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
from | string | Sim | Endereço da carteira |
amountTokens | string | Sim | Quantidade a queimar |
reason | string | Não* | Motivo (*altamente recomendado) |
metadata | object | Não | Dados de compliance |
POST /v1/tokens/{contractAddress}/pause{
"reason": "Pausa emergencial - Vulnerabilidade detectada",
"metadata": {
"incidentId": "SEC-2026-001",
"severity": "CRITICAL"
}
}POST /v1/tokens/{contractAddress}/unpause{
"reason": "Retomar operações - Vulnerabilidade corrigida",
"metadata": {
"incidentId": "SEC-2026-001",
"patchVersion": "v2.1.0"
}
}POST /v1/tokens/{contractAddress}/blocklist{
"userAddress": "0xuser...block",
"reason": "Bloqueio por ordem judicial - Processo 456/2025",
"metadata": {
"processNumber": "456/2025",
"court": "Tribunal de Justiça",
"orderDate": "2025-12-20"
}
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
userAddress | string | Sim | Endereço a bloquear |
reason | string | Não* | Motivo (*altamente recomendado) |
metadata | object | Não | Dados legais/compliance |
POST /v1/tokens/{contractAddress}/blocklist/{userAddress}/unblock| Parâmetro | Tipo | Descrição |
|---|---|---|
contractAddress | string | Endereço do token |
userAddress | string | Endereço a desbloquear |
{
"reason": "Desbloqueio - Processo encerrado",
"metadata": {
"processNumber": "456/2025",
"closureDate": "2025-12-30"
}
}POST /v1/transfers{
"from": "0xsender...address",
"to": "0xrecipient...address",
"tokenAddress": "0xtoken...address",
"amountTokens": "100",
"reason": "Pagamento por serviços - Nota Fiscal #789",
"metadata": {
"invoiceId": "789",
"service": "Consultoria"
}
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
from | string | Sim | Endereço da wallet de origem |
to | string | Sim | Endereço do destinatário |
tokenAddress | string | Sim | Endereço do token ERC-20 |
amountTokens | string | Sim | Quantidade (ex: "100" ou "1.5") |
reason | string | Não* | Motivo (*recomendado) |
metadata | object | Não | Dados adicionais |
200 OK{
"id": "transfer-uuid",
"from": "0xsender...address",
"to": "0xrecipient...address",
"tokenAddress": "0xtoken...address",
"amount": "100",
"status": "pending",
"hash": "0xtx...hash",
"createdAt": "2026-06-03T15:30:00Z"
}GET /v1/transfers| Parâmetro | Tipo | Descrição |
|---|---|---|
page | integer | Número da página |
pageSize | integer | Itens por página |
walletId | string | Filtrar por wallet |
status | string | Filtrar por status: pending, confirmed, failed |
network | string | Filtrar por rede |
from | string | Filtrar por remetente |
to | string | Filtrar por destinatário |
tokenAddress | string | Filtrar por token |
GET /v1/transfers/{id}| Parâmetro | Tipo | Descrição |
|---|---|---|
id | string | ID da transferência |
POST /v1/transactions/execute{
"from": "0xsender...address",
"to": "0xcontract...address",
"data": "0xa9059cbb000000000000000000000000...",
"value": "0",
"network": "xdc-testnet",
"reason": "Aprovação de gasto em contrato de staking",
"metadata": {
"integration": "staking-v2"
}
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
from | string | Sim | Smart account de origem |
to | string | Sim | Endereço do contrato/destino |
data | string | Sim | Calldata codificada (hex 0x...) |
value | string | Não | Valor nativo a enviar (padrão "0") |
network | string | Não | Rede (compatível com o ambiente da chave) |
reason | string | Não | Motivo (auditoria) |
metadata | object | Não | Dados adicionais |
200 OK{
"transactionId": "tx-uuid",
"hash": "0xtx...hash",
"userOpHash": "0xuserop...hash",
"status": "pending",
"gasFee": "0.0012"
}GET /v1/audit| Parâmetro | Tipo | Descrição | Exemplo |
|---|---|---|---|
page | integer | Número da página | 1 |
pageSize | integer | Itens por página | 50 |
route | string | Filtrar por rota | /v1/tokens |
method | string | Método HTTP | POST |
action | string | Ação realizada | mint, burn, block |
resourceType | string | Tipo de recurso | tokens, wallets |
statusCode | integer | Código HTTP | 200, 400, 500 |
contractAddress | string | Endereço do contrato | 0xtoken... |
reason | string | Filtrar por motivo | Court order |
startDate | string | Data inicial (ISO 8601) | 2026-06-01T00:00:00Z |
endDate | string | Data final (ISO 8601) | 2026-06-30T23:59:59Z |
200 OK{
"data": [
{
"id": "audit-uuid",
"timestamp": "2026-06-03T10:00:00Z",
"route": "/v1/tokens/:address/mint",
"method": "POST",
"action": "mint",
"resourceType": "tokens",
"resourceId": "token-uuid",
"statusCode": 200,
"contractAddress": "0xtoken...abc",
"reason": "Loyalty reward",
"metadata": {
"amount": "1000",
"to": "0xuser..."
}
}
],
"pagination": {
"page": 1,
"pageSize": 50,
"totalItems": 234,
"totalPages": 5
}
}amountTokens com valores legíveis:{ "amountTokens": "100" } // 100 tokens{ "amountTokens": "1.5" } // 1.5 tokens{ "amountTokens": "0.001" } // 0.001 tokens"amountTokens": "100"100000000 (raw = 100 × 10^6)| Código | Descrição |
|---|---|
200 | Sucesso (GET, operações) |
201 | Criado com sucesso (POST de criação) |
400 | Requisição inválida |
401 | Não autenticado (API key ausente/inválida) |
403 | Não autorizado |
404 | Recurso não encontrado |
409 | Conflito (recurso já existe) |
429 | Muitas requisições (rate limit) |
500 | Erro interno do servidor |
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Validation failed",
"details": {
"amountTokens": "must be greater than 0"
}
}
}| Código | Descrição |
|---|---|
VALIDATION_ERROR | Dados de entrada inválidos |
NOT_FOUND | Recurso não encontrado |
UNAUTHORIZED | API key ausente ou inválida |
INSUFFICIENT_BALANCE | Saldo insuficiente |
TOKEN_PAUSED | Token está pausado |
USER_BLOCKED | Usuário bloqueado |
INTERNAL_ERROR | Erro interno |
tk_test_) antes de ir para produção (tk_live_).reason em operações críticas (mint, burn, pause/unpause, block/unblock).metadata para rastreabilidade (ordens judiciais, IDs internos, compliance).429.Em produção, troque a base/rede por tk_live_…+polygon-mainnet(ouxdc-mainnet).
429 Too Many Requests.