kokiwa

Referência da API

Chame todos os endpoints do seu servidor. Requisições e respostas são JSON. URLs de webhook e chaves de API são gerenciadas no painel do comerciante.

EndpointUso
POST /v1/payment_intentsCriar um pagamento
GET /v1/payment_intents/{id}Consultar um pagamento
POST /v1/deposit_addressesObter o endereço de depósito de um usuário
GET /v1/depositsListar depósitos
GET /v1/deposits/{id}Consultar um depósito
GET /v1/chainsVer as redes e tokens do projeto
PUT /v1/customers/{external_id}Adicionar tags e notas a um usuário (opcional)
GET /v1/customers/{external_id}Consultar um usuário (opcional)

Convenções

URL basehttps://api.kokiwa.com, tanto para mainnet quanto para testnet.
AutenticaçãoCabeçalho Authorization: Bearer sk_…. Chaves que começam com sk_live_ acessam a mainnet e as que começam com sk_test_ acessam a testnet; os dados são totalmente separados. Uma chave só acessa o próprio projeto.
ValoresStrings em unidades do token, como "25.00". Requisições aceitam até 6 casas decimais; respostas mantêm a precisão da blockchain, então o número de casas varia. Só transaction.raw_amount é o valor bruto on-chain.
HoráriosISO 8601 UTC, como 2026-11-02T08:30:00Z.
EndereçosEndereços EVM são retornados no formato de checksum EIP-55. Mostre-os sem alteração e ignore maiúsculas ao comparar.
IdempotênciaRequisições POST podem enviar Idempotency-Key (até 255 caracteres). Uma nova tentativa com a mesma chave retorna o primeiro resultado com o cabeçalho Idempotent-Replayed: true.

Erros

Falhas retornam 4xx ou 5xx. Decida por code; message serve só para depuração.

{
  "error": {
    "code": "amount_below_minimum",
    "message": "options[0].amount is below the minimum",
    "details": { "min_amount": "5.00" }
  }
}
HTTPcodeSignificado
400invalid_*Parâmetro inválido; message indica o campo.
400chain_not_enabledO projeto não tem endereço de recebimento ativo nesta rede ou desligou o recebimento.
400chain_not_availableEsta rede não recebe pagamentos no momento.
400chain_not_supportedEsta rede não tem endereços de depósito.
400token_not_enabledO projeto não selecionou este token.
400currency_not_availableO projeto não pode aceitar esta moeda em nenhuma rede.
400deposits_disabledO projeto desligou os endereços de depósito.
400amount_below_minimumAbaixo do valor mínimo, informado em details.min_amount.
401unauthorizedA chave de API está ausente, é inválida ou foi revogada.
403project_disabledO projeto está desativado.
404not_foundO recurso não existe ou pertence a outro projeto.
409request_in_progressUma requisição com a mesma Idempotency-Key ainda está em andamento. Tente de novo em instantes.
422idempotency_key_reusedA mesma Idempotency-Key foi usada em outra requisição.
500internal_errorErro do servidor. Tente mais tarde com a mesma Idempotency-Key.

Pagamentos

Um pagamento é um pedido a ser pago pelo usuário. O usuário paga no checkout e você recebe o resultado por webhook.

Criar um pagamento

POST/v1/payment_intents
ParâmetroDescrição
currency obrigatórioMoeda, como USDT. Veja currencies em GET /v1/chains.
amount obrigatórioValor em unidades do token, com até 6 casas decimais, como "25.00".
chainsAceita pagamento só nestas redes, como ["bsc", "base"]. Por padrão, todas as redes em que o projeto aceita esta moeda.
customerO ID do usuário no seu sistema: de 1 a 128 letras, dígitos ou _ - . : @.
expires_inValidade em segundos, de 60 a 604800 (7 dias). Padrão 1800 (30 minutos).
metadataQualquer objeto JSON, até 50 chaves e 8KB, retornado sem alteração pela API e pelos webhooks. Bom lugar para o número do pedido.
success_urlURL https para onde o checkout volta após o pagamento.
cancel_urlURL https para onde o checkout volta quando o usuário clica em Cancelar.

Redes em que o valor fica abaixo do mínimo são excluídas; se não sobrar nenhuma, a requisição falha. O mínimo padrão é 5 USD; suas taxas estão na seção Taxas do projeto no painel.

Definir token e valor por rede

Para aceitar várias moedas, ou um valor diferente por rede, envie options em vez de currency, amount e chains. Até 16 itens; token é um símbolo ou endereço de contrato.

"options": [
  { "chain": "bsc", "token": "USDT", "amount": "25.00" },
  { "chain": "bsc", "token": "USDC", "amount": "25.00" }
]

Resposta

Retorna 201 e o pagamento. Abra checkout_url para o usuário.

{
  "id": "pi_7Gm4Rk2Wp9Ls1Qv8Bd3Zt6",
  "object": "payment_intent",
  "status": "pending",
  "livemode": true,
  "customer": "user_42",
  "checkout_url": "https://pay.kokiwa.com/p/pi_7Gm4Rk2Wp9Ls1Qv8Bd3Zt6",
  "metadata": { "order_id": "10086" },
  "success_url": "https://your-shop.com/orders/10086",
  "cancel_url": null,
  "created_at": "2026-11-02T08:30:00Z",
  "expires_at": "2026-11-02T09:00:00Z",
  "paid_at": null,
  "paid_option": null,
  "options": [
    {
      "id": "pio_5Hq2Tz8rLw0aVb3Kc9XyN1",
      "chain": "bsc",
      "token": { "symbol": "USDT", "address": "0x55d3…7955", "decimals": 18 },
      "amount": "25.00",
      "received": "0.00",
      "deposit_address": "0x8b1F…c04E"
    },
    {
      "id": "pio_2Mn7Xc4bQe6uJs1Ga8RvK3",
      "chain": "base",
      "token": { "symbol": "USDT", "address": "0xfde4…9bb2", "decimals": 6 },
      "amount": "25.00",
      "received": "0.00",
      "deposit_address": null
    }
  ],
  "deposits": []
}
CampoDescrição
optionsO que o usuário pode escolher: um token em uma rede por item.
options[].receivedValor recebido até agora neste item.
options[].deposit_addressO endereço de transferência exclusivo deste pagamento, que você também pode mostrar na sua página. null quando esse método não está disponível (redes que não sejam a BNB Chain ou valor muito baixo).
paid_optionO options[].id que o usuário realmente pagou.
depositsCada depósito creditado a este pagamento, do mais antigo ao mais novo. Veja o objeto de depósito.
livemodetrue na mainnet, false na testnet.

Consultar um pagamento

GET/v1/payment_intents/{id}

Retorna o pagamento. Use para conciliação ou para verificar o status quando um webhook não chegar.

Status do pagamento

statusDescrição
pendingAguardando pagamento.
partially_paidAs transferências ao endereço exclusivo não atingiram o total: faltam amount − received. Não envie; passa para paid quando o usuário pagar o restante.
paidPago por completo, pronto para enviar. Qualquer excedente também conta em received; o kokiwa não o devolve.
expiredExpirou sem pagamento.
paid_lateChegaram fundos ao endereço exclusivo após a expiração. O dinheiro é seu: decida se envia ou reembolsa.

Endereços de depósito

Obter o endereço de depósito de um cliente

POST/v1/deposit_addresses
ParâmetroDescrição
customer obrigatórioO ID do usuário no seu sistema, com as mesmas regras dos pagamentos. É criado no primeiro uso.
chainPor enquanto só bsc, que também é o padrão.
{
  "object": "deposit_address",
  "customer": "user_42",
  "chain": "bsc",
  "address": "0x3c9A…71d2",
  "tokens": [
    { "symbol": "USDT", "address": "0x55d3…7955", "decimals": 18, "min_settle_amount": "5.00" }
  ]
}

O mesmo usuário sempre recebe o mesmo endereço, então você pode mostrá-lo a longo prazo. Só os tokens em tokens são creditados.

Cada transferência envia deposit.confirmed. Transferências abaixo de min_settle_amount também são creditadas, com status held; quando o endereço acumula o mínimo, são varridas juntas para seu endereço de recebimento com uma única taxa fixa.

Depósitos

Um depósito é um pagamento on-chain creditado, vindo de um pagamento ou de um endereço de depósito. Um pagamento pode ter vários.

{
  "id": "dep_9Kx2Pa6Wn3Ty8Lq5Rb1Ms4",
  "object": "deposit",
  "status": "settled",
  "method": "wallet",
  "chain": "bsc",
  "customer": "user_42",
  "payment_intent": "pi_7Gm4Rk2Wp9Ls1Qv8Bd3Zt6",
  "token": { "symbol": "USDT", "address": "0x55d3…7955", "decimals": 18 },
  "amount": "25.00",
  "fee": "0.0875",
  "net": "24.9125",
  "usd_value": "25.00",
  "confirmed_at": "2026-11-02T08:41:07Z",
  "transaction": {
    "hash": "0x4e7a…91c3",
    "log_index": 212,
    "block_number": 44718235,
    "block_time": "2026-11-02T08:40:58Z",
    "from": "0x1f9C…a2B0",
    "to": "0x7d3E…09f1",
    "raw_amount": "25000000000000000000"
  },
  "settlement": {
    "tx_hash": "0x4e7a…91c3",
    "by": "payment",
    "settled_at": "2026-11-02T08:40:58Z"
  }
}
CampoDescrição
methodwallet: pago com carteira. deposit_address: transferido para um endereço.
customerO ID de usuário enviado, ou null.
payment_intentO pagamento a que pertence; null para endereços de depósito.
amount、fee、netO que o usuário pagou, a taxa e o que você recebe. Enquanto held, fee é 0 e é definido na varredura.
usd_valueamount em dólares ao preço do token definido pelo kokiwa.
transactionO pagamento do usuário na blockchain, que você pode conferir em um explorador de blocos. Quando uma transação tem várias transferências, hash + log_index identificam uma. from nem sempre é a carteira do usuário: após um saque de corretora, é o endereço da corretora. raw_amount é o valor bruto da transferência na menor unidade do token, só para conferir em um explorador de blocos.
settlementA transação que chegou ao seu endereço de recebimento, ou null até a liquidação. by é payment (liquidado pelo próprio pagamento), kokiwa (varrido pelo kokiwa) ou owner (recuperado com sua carteira, sem taxa). Depósitos varridos juntos compartilham o tx_hash.
statusDescrição
confirmedConfirmado na blockchain, aguardando varredura para seu endereço de recebimento. Você pode creditar o usuário.
heldConfirmado na blockchain, ainda pequeno demais para varrer. Você pode creditar o usuário.
settledChegou ao seu endereço de recebimento.

Consultar um depósito

GET/v1/deposits/{id}

Listar depósitos

GET/v1/deposits

Do mais novo ao mais antigo.

Parâmetro de consultaDescrição
customerApenas este usuário.
tx_hashBusca pelo hash da transação de pagamento ou de liquidação.
limitTamanho da página, de 1 a 100. Padrão 20.
starting_afterO id do último item da página anterior.
curl "https://api.kokiwa.com/v1/deposits?tx_hash=0x4e7a…91c3" \
  -H "Authorization: Bearer $KOKIWA_KEY"

{ "object": "list", "data": [ { "id": "dep_9Kx2…", "object": "deposit", ... } ], "has_more": false }

Redes e tokens

A kokiwa aceita as redes e moedas abaixo. Use a coluna chain em chains e options[].chain, e a coluna de moedas em currency.

chainBlockchainMoedasMétodos de pagamento
bscBNB ChainUSDT, USDCwallet, deposit_address
ethereumEthereumUSDT, USDCwallet
arbitrumArbitrumUSDT, USDCwallet
baseBaseUSDT, USDCwallet
polygonPolygonUSDT, USDCwallet
optimismOptimismUSDT, USDCwallet
tonTONUSDTwallet
solanaSolanaUSDT, USDCwallet

A testnet aceita apenas USDT. O token é tUSDT, mas currency continua sendo USDT.

Esta é a faixa completa de valores, não o que cada projeto pode aceitar. A configuração varia por lojista, então consulte o que está disponível no endpoint abaixo.

Consultar as redes e tokens do projeto

GET/v1/chains

Retorna o que o projeto da chave pode aceitar na rede atual.

{
  "object": "list",
  "livemode": true,
  "currencies": ["USDT"],
  "data": [
    {
      "object": "chain", "chain": "bsc", "name": "BNB Smart Chain", "chain_id": 56, "testnet": false, "native": "BNB",
      "payout_registered": true, "active": true,
      "methods": { "wallet": true, "deposit_address": true },
      "tokens": [
        { "symbol": "USDT", "asset": "USDT", "address": "0x55d398326f99059fF775485246999027B3197955", "decimals": 18, "accepted": true },
        { "symbol": "USDC", "asset": "USDC", "address": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", "decimals": 18, "accepted": false }
      ]
    }
  ]
}
CampoDescrição
currenciesMoedas que você pode enviar agora como currency.
data[].chainO valor para chain e options[].chain: bsc, ethereum, arbitrum, base, polygon, optimism, ton, solana.
data[].activeSe a rede pode receber agora: endereço registrado, uma forma de recebimento ligada e um token selecionado.
data[].tokens[].assetA moeda do token. Tokens com o mesmo asset são equivalentes entre redes.
data[].tokens[].acceptedSe o projeto selecionou este token.

Clientes

Opcional. Um cliente é criado na primeira vez que um valor de customer aparece; você só precisa destes endpoints para filtrar por tag no painel.

Definir etiqueta e nota

PUT/v1/customers/{external_id}
ParâmetroDescrição
tagsAté 20 tags de 1 a 64 letras, dígitos ou _ - . :.
metadataQualquer objeto JSON, até 50 chaves e 8KB.

Consultar um cliente

GET/v1/customers/{external_id}

Retorna as tags, as notas e deposit_addresses (endereços de depósito por rede).

Connect a wallet with WalletConnect