Referência da API Kainow
Versão 1.0.0
API principal da Kainow para revisar dados financeiros e executar conectores. Organizada em torno de REST com URLs previsíveis, JSON e verbos HTTP padrão.
Toda requisição leva um cabeçalho X-API-KEY. São duas credenciais: uma chave API, válida por 2 horas (servidor), e um Connect Token, válido por 30 minutos (frontend).
Recursos
Quickstart
Ao final desta página, seu usuário conectou uma instituição financeira e você está lendo contas e transações. Cinco etapas.
Crie sua conta e aplicativo
Acesse o Dashboard Kainow, crie um aplicativo e obtenha seu CLIENT_ID e CLIENT_SECRET. Novos aplicativos começam com acesso aos conectores Sandbox para testes.
Obtenha uma API Key
Autentique com suas credenciais para obter uma API Key válida por 2 horas. Faça isso apenas no servidor — nunca exponha o CLIENT_SECRET no frontend.
curl -X POST https://api.kainow.app/v2/auth \
-H "Content-Type: application/json" \
-d '{
"clientId": "SEU_CLIENT_ID",
"clientSecret": "SEU_CLIENT_SECRET"
}'
// Resposta
{
"apiKey": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Crie um Connect Token
Com a API Key, gere um Connect Token de curta duração (30 min) para usar no widget ou no frontend.
curl -X POST https://api.kainow.app/v2/connect_token \
-H "Content-Type: application/json" \
-H "X-API-KEY: SUA_API_KEY" \
-d '{}'
// Resposta
{
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Abra o Connect Widget
Use o accessToken para inicializar o widget no frontend. O widget gerencia todo o fluxo de autenticação com o banco.
<script src="https://cdn.kainow.app/connect/v3/kainow-connect.js"></script>
<script>
const connect = new KainowConnect({
connectToken: 'SEU_ACCESS_TOKEN',
onSuccess: ({ item }) => {
console.log('Conectado! itemId:', item.id)
// Salve o item.id no seu backend
},
onError: ({ message }) => console.error(message),
onClose: () => console.log('Widget fechado')
})
connect.init()
</script>
Busque os dados
Com o itemId retornado pelo widget, acesse as contas e transações via API server-side.
# Listar contas da conexão
curl "https://api.kainow.app/v2/accounts?itemId=SEU_ITEM_ID" \
-H "X-API-KEY: SUA_API_KEY"
# Listar transações de uma conta
curl "https://api.kainow.app/v2/transactions?accountId=SEU_ACCOUNT_ID" \
-H "X-API-KEY: SUA_API_KEY"
Glossário
Termos e conceitos fundamentais da plataforma Kainow.
Conceitos Principais
Produto
Um Produto representa dados padronizados de uma instituição financeira com um conjunto específico de atributos. Exemplos: Contas Transações Investimentos Identidade Cartões de Crédito
Conector
Um Conector representa uma integração com uma instituição financeira específica. Cada conector tem um id único e um type:
| Tipo | Descrição |
|---|---|
PERSONAL_BANK | Conta bancária de pessoa física |
BUSINESS_BANK | Conta bancária de pessoa jurídica |
INVESTMENT | Corretora ou plataforma de investimentos |
Item
Um Item é a representação de uma conexão ativa entre um usuário e uma instituição financeira via um Conector específico. É o ponto de entrada para acessar todos os dados coletados daquele usuário naquela instituição.
API Key
Credencial de servidor com acesso total à API. Expira em 2 horas. Obtida via POST /auth com CLIENT_ID e CLIENT_SECRET. Nunca expor no frontend.
Connect Token
Credencial de cliente com escopo limitado. Expira em 30 minutos. Usada exclusivamente no Connect Widget. Criada pelo servidor via POST /connect_token usando a API Key.
| API Key | Connect Token | |
|---|---|---|
| Onde usar | Servidor (backend) | Cliente (frontend/widget) |
| Validade | 2 horas | 30 minutos |
| Acesso | Completo | Apenas Item criado + Contas básicas |
| Obtida via | POST /auth | POST /connect_token |
Autenticação
A Kainow usa dois tipos de credenciais dependendo de onde a requisição é feita: API Key para servidor e Connect Token para cliente.
Fluxo de Autenticação
+ CLIENT_SECRET
servidor
TTL: 2h
servidor
TTL: 30min
Criar API Key
Autentique com CLIENT_ID e CLIENT_SECRET para obter uma API Key. Esta etapa deve ser feita exclusivamente no servidor.
curl -X POST https://api.kainow.app/v2/auth \
-H "Content-Type: application/json" \
-d '{
"clientId": "SEU_CLIENT_ID",
"clientSecret": "SEU_CLIENT_SECRET"
}'
// Resposta 200 OK
{
"apiKey": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJj..."
}
CLIENT_SECRET e a API Key devem permanecer exclusivamente no servidor. Expô-los no código do cliente compromete toda a segurança da integração.Usar a API Key
Passe a API Key no cabeçalho X-API-KEY em todas as requisições server-side:
X-API-KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Criar Connect Token
O Connect Token tem escopo limitado e é seguro para usar no frontend. Validade de 30 minutos. Recomendado: 1 token por conexão.
curl -X POST https://api.kainow.app/v2/connect_token \
-H "Content-Type: application/json" \
-H "X-API-KEY: SUA_API_KEY" \
-d '{
"options": {
"webhookUrl": "https://meuapp.com/webhook",
"clientUserId": "user_id_do_seu_sistema",
"avoidDuplicates": true
}
}'
Opções do Connect Token
| Campo | Tipo | Descrição |
|---|---|---|
options.webhookUrl | string | URL para receber eventos do Item criado com este token |
options.clientUserId | string | Seu identificador de usuário — vincula o Item ao seu sistema |
options.avoidDuplicates | boolean | Impede criar Item duplicado para mesmas credenciais |
options.oauthRedirectUri | string | URL de redirect após fluxo OAuth |
itemId | string | Informar para atualizar um Item existente |
clientUserId devem ser enviados dentro de options, não na raiz do body. Enviar na raiz retorna 200 OK mas o valor é silenciosamente descartado.Gerador de Chaves
Gere API Keys e Connect Tokens diretamente nesta página para testar sua integração.
🔑 Gerar API Key
Autentique com seu CLIENT_ID e CLIENT_SECRET para obter uma API Key válida por 2 horas.
🎟️ Gerar Connect Token
Com a API Key gerada acima, crie um Connect Token de 30 minutos para usar no widget ou testes de frontend.
Conectores
Conectores representam integrações com instituições financeiras. Cada banco, corretora ou fintech tem seu próprio conector.
Listar Conectores
Filtros disponíveis
| Parâmetro | Tipo | Descrição |
|---|---|---|
sandbox | boolean | Se true, retorna apenas conectores Sandbox de teste |
type | string | PERSONAL_BANK, BUSINESS_BANK ou INVESTMENT |
countries | string[] | Filtrar por país (ex: BR) |
name | string | Busca por nome da instituição |
# Listar conectores sandbox
curl "https://api.kainow.app/v2/connectors?sandbox=true" \
-H "X-API-KEY: SUA_API_KEY"
Conectores Sandbox
Para testes, use os conectores sandbox abaixo. Eles simulam todos os fluxos possíveis — MFA, erros, QR code, Open Finance.
Items (Conexões)
Um Item é a conexão ativa entre um usuário e uma instituição financeira. É o ponto de entrada para todos os dados coletados.
Endpoints
Campos do Item
| Campo | Tipo | Descrição |
|---|---|---|
id | string (UUID) | Identificador único do Item |
status | string | Status atual: UPDATING, UPDATED, LOGIN_ERROR, OUTDATED, WAITING_USER_INPUT |
executionStatus | string | Status detalhado da execução atual |
connector.id | number | ID do conector (instituição) |
clientUserId | string | Seu identificador de usuário vinculado ao Item |
updatedAt | datetime | Última sincronização bem-sucedida |
nextAutoSyncAt | datetime | Próxima sincronização automática |
products | string[] | Produtos coletados para este Item |
Como manter referência do Item
- Callback
onSuccessdo Widget: retornaitem.idimediatamente após conexão - Webhooks
item/created: entrega oitemIdeclientUserIdde forma confiável - Campo
clientUserId: vincule o Item ao seu usuário passando esse campo no Connect Token
Auto-sincronização
Uma vez criado, o Item é sincronizado automaticamente pela plataforma no intervalo configurado (6h, 8h, 12h ou 24h). Você não precisa disparar updates manuais — apenas ouça os webhooks item/updated.
GET /v2/items está desativado por padrão. Retorna 403 LIST_ITEMS_FEATURE_NOT_ENABLED até ser habilitado via solicitação. Para uso cotidiano, mantenha seus próprios itemIds.Ciclo de Vida do Item
Entenda os estados possíveis de um Item e como interpretar cada um no seu sistema.
Status do Item
| Status | Significado | Ação necessária |
|---|---|---|
| UPDATING | Sincronização em andamento | Aguardar — verifique novamente em alguns segundos |
| UPDATED | Sincronização concluída com sucesso | Leia os dados disponíveis |
| LOGIN_ERROR | Credenciais inválidas | Usuário deve reconectar com novas credenciais |
| OUTDATED | Erro não relacionado a credenciais | Pode ser re-tentado (verifique executionStatus) |
| WAITING_USER_INPUT | Aguardando MFA ou ação do usuário | Solicitar input via widget |
States de Execução (executionStatus)
Estados Transitórios
| Valor | Descrição |
|---|---|
CREATED | Conexão iniciada |
LOGIN_IN_PROGRESS | Etapa de autenticação em andamento (pode levar até 5 min) |
LOGIN_MFA_IN_PROGRESS | Aguardando segunda etapa de MFA |
ACCOUNTS_IN_PROGRESS | Coletando dados de Contas |
TRANSACTIONS_IN_PROGRESS | Coletando Transações |
INVESTMENTS_IN_PROGRESS | Coletando Investimentos |
MERGING | Processando e armazenando dados coletados |
Estados Finais de Sucesso
| Valor | Descrição |
|---|---|
SUCCESS | Todos os dados coletados com sucesso |
PARTIAL_SUCCESS | Alguns produtos falharam — verifique statusDetail |
Estados Finais de Erro
| Valor | Auto-sync continua? |
|---|---|
INVALID_CREDENTIALS | ❌ Para — requer reconexão |
SITE_NOT_AVAILABLE | ✅ Retry 5x em 1h |
ACCOUNT_LOCKED | ❌ Para — usuário deve desbloquear |
USER_AUTHORIZATION_REVOKED | ❌ Para — requer re-autorização |
CONNECTION_ERROR | ✅ Retry 5x em 1h |
ALREADY_LOGGED_IN | ❌ Sessão ativa — fazer logout |
ACCOUNT_NEEDS_ACTION | ❌ Ação manual no banco |
Retenção de Dados
| Cenário | Quando | O que acontece |
|---|---|---|
| Excluído pelo cliente | Imediatamente no DELETE | Item e dados permanentemente removidos, consentimento revogado |
| Item Sandbox sem uso | Após 30 dias sem atualização | Removido automaticamente — recrie para continuar testando |
| Conector descontinuado | 30 dias após descontinuação | Item excluído automaticamente, webhook item/deleted emitido |
Contas
Acesse contas correntes, poupanças, contas salário e cartões de crédito vinculados ao Item.
Endpoints
curl "https://api.kainow.app/v2/accounts?itemId=SEU_ITEM_ID" \
-H "X-API-KEY: SUA_API_KEY"
Tipos de Conta
| Tipo | Subtipo | Descrição |
|---|---|---|
BANK | CHECKING_ACCOUNT | Conta corrente |
BANK | SAVINGS_ACCOUNT | Conta poupança |
BANK | SALARY_ACCOUNT | Conta salário |
CREDIT | CREDIT_CARD | Cartão de crédito |
Campos Principais
| Campo | Descrição |
|---|---|
balance | Saldo disponível atual |
itemId | Item ao qual pertence |
name | Nome da conta (ex: "Conta Corrente") |
number | Número mascarado da conta |
currencyCode | Moeda (ex: BRL) |
creditData.availableCreditLimit | Limite disponível (apenas CREDIT) |
creditData.totalAmount | Fatura atual do cartão |
Transações
Histórico transacional de até 365 dias, com categorização automática e suporte a paginação por cursor.
Endpoints
Paginação por Cursor
Use o campo next da resposta para paginar. Não use número de página.
let next = ''
const transactions = []
do {
const res = await fetch(
`https://api.kainow.app/v2/transactions${next}?accountId=ACCOUNT_ID`,
{ headers: { 'X-API-KEY': apiKey } }
)
const page = await res.json()
transactions.push(...page.results)
next = page.next // null na última página
} while (next !== null)
Campos Principais
| Campo | Descrição |
|---|---|
amount | Valor da transação (negativo = débito) |
date | Data da transação |
description | Descrição original do extrato |
category | Categoria automática (ex: "Food", "Transport") |
type | DEBIT ou CREDIT |
currencyCode | Moeda da transação |
Delta Sync (Transações Novas)
Para buscar apenas transações novas após uma sincronização, use o webhook transactions/created que fornece o link direto via createdTransactionsLink.
Investimentos
Posição de carteira, rentabilidade e detalhes de produtos de renda fixa e variável.
Endpoints
Tipos de Investimento
| Tipo | Exemplos |
|---|---|
MUTUAL_FUND | Fundos de investimento |
SECURITY | Ações, BDRs, FIIs |
FIXED_INCOME | CDB, LCI, LCA, Tesouro Direto |
ETF | Exchange Traded Funds |
COE | Certificado de Operações Estruturadas |
Campos Principais
| Campo | Descrição |
|---|---|
balance | Valor atual da posição |
quantity | Quantidade de cotas/ações |
lastMonthRate | Rentabilidade no último mês (%) |
lastTwelveMonthsRate | Rentabilidade nos últimos 12 meses (%) |
annualRate | Taxa anual contratada (renda fixa) |
dueDate | Data de vencimento (renda fixa) |
Empréstimos e Financiamentos
Dados de crédito: modalidades, parcelas, CET, saldo devedor e histórico de pagamentos.
Endpoints
Campos Principais
| Campo | Descrição |
|---|---|
contractAmount | Valor total contratado |
CET | Custo Efetivo Total — % anual incluindo todos os encargos |
dueDate | Data final de pagamento |
installments.totalNumberOfInstallments | Total de parcelas |
installments.paidInstallments | Parcelas já pagas |
installments.pastDueInstallments | Parcelas em atraso |
payments.contractOutstandingBalance | Saldo devedor para quitação antecipada |
Identidade
Dados cadastrais do titular da conta: nome, CPF, endereço, e-mail e telefone diretamente da instituição financeira.
Endpoints
Campos Retornados
| Campo | Descrição |
|---|---|
fullName | Nome completo como cadastrado na instituição |
document | CPF ou CNPJ |
birthDate | Data de nascimento |
emails[].value | E-mails cadastrados |
phoneNumbers[].value | Telefones cadastrados |
addresses[] | Endereços de correspondência |
Pix Automático (VREC)
O Pix Automático permite ao usuário autorizar uma série de débitos futuros recorrentes sem precisar aprovar cada cobrança individualmente.
Fluxo do Pix Automático
PaymentRequest
Connect Token
usuário autoriza
biometria
confirmed
Endpoints
Webhooks do Pix Automático
Exemplo de Payload
{
"paymentRequestId": "624cb41e-2b76-42ac-8021-ce6b6b4ace6b",
"automaticPixPaymentId": "8429f45a-f541-4fc3-8439-cbc8d9dc9952",
"endToEndId": "E37943755202506111319U0da92d1b7e",
"eventId": "71e0b4db-4e8c-401d-8ad8-5ab3ecd1f3d0",
"event": "automatic_pix_payment/completed"
}
Smart Transfer
Pré-autorização para transferências inteligentes futuras. O usuário autoriza uma vez e você executa transferências programaticamente.
Fluxo
via widget
preauth/completed
transferência
payment/completed
Webhooks
Connect Widget
Widget plug & play para conectar contas bancárias. Gerencia credenciais, MFA, OAuth e erros automaticamente. Zero código de UI necessário.
Integração Básica
<!-- Incluir o script do widget -->
<script src="https://cdn.kainow.app/connect/v3/kainow-connect.js"></script>
<script>
const connect = new KainowConnect({
connectToken: 'SEU_CONNECT_TOKEN',
// Callbacks
onSuccess: ({ item }) => {
console.log('Conectado! itemId:', item.id)
salvarItemId(item.id) // persista no seu backend
},
onError: ({ message, data }) => {
console.error('Erro:', message, data?.item?.executionStatus)
},
onClose: () => console.log('Widget fechado'),
onOpen: () => console.log('Widget aberto')
})
connect.init() // abre o modal
</script>
Configurações Disponíveis
| Propriedade | Tipo | Descrição |
|---|---|---|
connectToken * | string | Token de conexão (obrigatório) |
includeSandbox | boolean | Exibir conectores Sandbox (testes apenas) |
updateItem | string | ID de Item a ser atualizado — pula seleção de banco |
selectedConnectorId | number | Pula seleção e vai direto para um banco específico |
connectorTypes | string[] | Filtrar por tipo: PERSONAL_BANK, BUSINESS_BANK |
connectorIds | number[] | Exibir apenas conectores específicos |
products | string[] | Limitar produtos coletados: ACCOUNTS, TRANSACTIONS… |
theme | string | 'light' (padrão) ou 'dark' |
language | string | Idioma do widget: 'pt' (padrão), 'en', 'es' |
allowConnectInBackground | boolean | Permitir minimizar o widget |
forceAskForCredentials | boolean | Sempre solicitar credenciais ao atualizar |
Eventos (onEvent)
| Evento | Quando é disparado |
|---|---|
SUBMITTED_CONSENT | Usuário aceitou os termos iniciais |
SELECTED_INSTITUTION | Usuário selecionou um banco |
SUBMITTED_LOGIN | Usuário enviou credenciais |
LOGIN_SUCCESS | Login realizado com sucesso |
ITEM_RESPONSE | Toda vez que o Item é consultado/atualizado |
onError com status USER_AUTHORIZATION_PENDING. O evento de sucesso será entregue via webhook item/updated quando o banco concluir.Webhooks
Receba notificações HTTP POST em tempo real quando eventos acontecerem em Items, transações ou pagamentos.
Como Configurar
Forneça um webhookUrl HTTPS em um desses momentos:
- Ao criar um Connect Token:
options.webhookUrl - Ao criar um Item: campo
webhookUrl - Ao criar uma Solicitação de Pagamento: campo
webhookUrl - Via endpoint
POST /webhookspara registrar globalmente
Eventos de Item
Eventos de Transação
Eventos de Pagamento
Payload Padrão
{
"event": "item/updated",
"eventId": "d876fd7c-e9bd-4c4c-bd46-cc96c62aac29",
"itemId": "a5c763cb-0952-457b-9936-630f79c5b016",
"triggeredBy": "SYNC",
"clientUserId": "seu-user-id"
}
Retentativas
| Tentativa | Quando |
|---|---|
| 1ª | Imediatamente |
| 2ª | ~15 min após falha da 1ª |
| 3ª | ~2h após falha da 2ª |
400, 401, 403, 404, 405 interrompem as retentativas imediatamente. Retorne 5XX para erros temporários — assim o webhook será re-tentado.IPs para Whitelist
52.67.145.81
Ambiente Sandbox
Teste sua integração com instituições simuladas sem afetar dados reais. Todas as respostas têm a mesma estrutura de produção.
includeSandbox: true no widget ou ?sandbox=true na API de conectores. Não há URL separada de sandbox.Credenciais de Teste
user-ok
password-ok
123456
761.092.776-73
ralph.bragg@gmail.com
P@ssword01
Cenários de Teste
| executionStatus | Nome de usuário | Descrição |
|---|---|---|
SUCCESS | user-ok | Conexão bem-sucedida |
ALREADY_LOGGED_IN | user-logged | Sessão ativa — fazer logout manual |
ACCOUNT_LOCKED | user-locked | Conta bloqueada |
SITE_NOT_AVAILABLE | user-unavailable | Site do provedor indisponível |
UNEXPECTED_ERROR | user-error | Erro aleatório no conector |
INVALID_CREDENTIALS | qualquer outro | Credenciais inválidas |
PARTIAL_SUCCESS | user-ok-account-error | Erro em produto específico |
ACCOUNT_NEEDS_ACTION | user-account-need-actions | Ação necessária (aceitar termos, etc.) |
MFA — Cenários
| Cenário | Usuário | MFA |
|---|---|---|
| Sucesso | user-ok | 123456 |
| MFA inválido | user-ok | qualquer outro |
| MFA com QR image | user-ok-img | 123456 |
| MFA com seleção de opção | user-ok-select | qualquer |
Referência de Endpoints
Todos os endpoints da Kainow API organizados por recurso. Base URL: https://api.kainow.app/v2
Autenticação
Conectores
Items
Dados Financeiros
Pagamentos
Webhooks
Tratamento de Erros
Referência de códigos HTTP, codeDescriptions e executionStatus para tratar erros corretamente.
Erros de Autenticação
| HTTP | codeDescription | Causa |
|---|---|---|
| 401 | CLIENT_KEYS_UNAUTHORIZED | clientId ou clientSecret inválidos |
| 401 | CLIENT_DISABLED | Aplicação desativada |
| 403 | — | Connect Token tentando acessar recurso fora de escopo (use API Key) |
Erros de Item
| HTTP | codeDescription | Causa |
|---|---|---|
| 400 | ITEM_USER_ALREADY_EXISTS | avoidDuplicates: true e item já existe |
| 403 | LIST_ITEMS_FEATURE_NOT_ENABLED | GET /v2/items não habilitado para a conta |
| 400 | INVALID_CURSOR | Parâmetro after com cursor inválido |
executionStatus — Referência Completa
| Valor | Item Status | Auto-sync? |
|---|---|---|
SUCCESS | UPDATED | ✅ Sim |
PARTIAL_SUCCESS | UPDATED | ✅ Sim |
INVALID_CREDENTIALS | LOGIN_ERROR | ❌ Parado |
SITE_NOT_AVAILABLE | OUTDATED | ✅ Retry 5x/1h |
ACCOUNT_LOCKED | LOGIN_ERROR | ❌ Parado |
ALREADY_LOGGED_IN | LOGIN_ERROR | ❌ Parado |
CONNECTION_ERROR | OUTDATED | ✅ Retry 5x/1h |
USER_AUTHORIZATION_REVOKED | LOGIN_ERROR | ❌ Parado |
ACCOUNT_NEEDS_ACTION | LOGIN_ERROR | ❌ Parado |
WAITING_USER_INPUT | WAITING_USER_INPUT | ⏸️ Aguardando MFA |
executionStatus junto com o status do Item. Use item/error webhook para ser notificado de falhas. Faça GET /items/{id} ao receber qualquer webhook antes de processar os dados.