Pagamentos, assinaturas e subtenants
com a API Calebe Pay.
Cobre por Pix, boleto, cartão, link de pagamento ou assinatura recorrente, e cadastre empresas filhas, a partir do backend do seu sistema, ERP, e-commerce ou SaaS. Uma API REST com chave por empresa, idempotência em toda criação e eventos assinados por webhook.
Sua primeira requisição
Defina as duas variáveis abaixo no seu servidor, escolha o que criar e a linguagem, copie o exemplo e envie.
- Endereço da API ·
CALEBE_API_URL https://api.calebepay.com.br- Autenticação ·
CALEBE_API_KEY X-API-Key: <sua chave de API>- Rota
- POST/v1/pix
- Permissão da chave
pix:write
# A chave precisa da permissão pix:write.
curl -X POST "$CALEBE_API_URL/v1/pix" \
-H "X-API-Key: $CALEBE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: pedido-2026-00042-pix-1" \
-d '{
"amount": 1250,
"reference": "pedido-2026-00042",
"description": "Pedido de demonstração",
"customer": {
"name": "Cliente de demonstração",
"document": "00000000000",
"email": "cliente@example.com",
"phone": "11999999999",
"address": {
"zip_code": "01001000",
"street": "Rua Exemplo",
"number": "100",
"district": "Centro",
"city": "São Paulo",
"state": "SP"
}
},
"expires_in": 3600
}'
Resposta 201 esperadaJSON
{
"data": {
"id": "txn_exemplo",
"status": "pending",
"method": "pix",
"amount": 1250,
"currency": "BRL",
"livemode": true,
"pix_copy_paste": "00020126…6304ABCD",
"expires_at": "…"
}
}
Guarde data.id junto do pedido. Um resultado incerto volta como 202 com status: unknown; repetir com a mesma Idempotency-Key devolve a mesma cobrança, nunca uma nova.
Para consultar resultados, a chave também precisa de transactions:read.
Do zero ao primeiro pagamento
- 1
Gere uma chave de API
Com a permissão do meio (
Abrir Chaves de API ↗pix:write,boleto:writeoucredit_card:write). Comece por uma de teste, que não cobra ninguém. - 2
Crie a primeira cobrança
Copie o exemplo na sua linguagem, com a chave em
CALEBE_API_KEY. - 3
Receba o resultado
Cadastre um webhook para saber quando a cobrança for paga ou expirar, ou consulte
Abrir Webhooks ↗GET /v1/transactions/{id}.
Teste antes de cobrar
Uma chave de teste (cp_test_) usa a mesma URL, os mesmos endpoints e os mesmos formatos da produção, com a mesma validação. A diferença: tudo o que ela cria é simulado. Nada é cobrado e nada chega ao provedor de pagamento.
- 1
Gere uma chave de teste
No portal, em Chaves de API, escolha Teste (sandbox). Ela começa com
cp_test_. - 2
Integre
Use o exemplo acima com a chave de teste em
CALEBE_API_KEY. Tudo volta comlivemode: false. - 3
Simule o pagamento ou a expiração
POST /v1/transactions/{id}/simulatecom{"status":"paid"}ou{"status":"expired"}. Só a chave de teste pode simular. - 4
Valide os webhooks
Cadastre um endpoint de teste no portal: os eventos das cobranças de teste vão só para ele, com
livemode: false. - 5
Troque pela chave de produção
Crie uma chave de produção (
cp_live_) e troque só a chave. Mesma URL, mesmo código.
curl -X POST "$CALEBE_API_URL/v1/transactions/$TRANSACTION_ID/simulate" \
-H "X-API-Key: $CALEBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"paid"}'Na assinatura de teste, o primeiro ciclo sai em até um minuto quando o vencimento já está dentro da antecedência; no Pix Automático, simule a aprovação do pagador com POST /v1/pix-automatic/authorizations/{id}/simulate.
O aviso de que a cobrança mudou
Cada mudança de status chega ao seu endpoint como transaction.updated, assinada com o segredo da sua conta (Calebe-Signature). A criação chega como transaction.created. O mesmo vale para o callback_url informado numa cobrança, num checkout ou numa assinatura.
Expiração automática. Um Pix não pago sai de pending sozinho poucos minutos depois de expires_at, e você recebe transaction.updated com expired. Raramente um pagamento tardio muda expired para paid: trate paid como definitivo.
- pendingaguardando pagamento
-
paiddefinitivo: entregue o pedidoexpiredautomático, após
expires_atraro: pode virar paid
Acompanhe até a confirmação
GET /v1/transactions/{id} retorna o estado guardado. POST /v1/transactions/{id}/refresh consulta o provedor de pagamento e atualiza o registro. Use os webhooks como aviso e mantenha um polling limitado no seu backend, retomando pedidos pendentes depois de reinícios.
| Estado | Comportamento da integração |
|---|---|
processing / pending | Continue consultando de forma limitada. |
paid | Pagamento confirmado. Valide pelo backend antes de entregar. |
expired / failed | Não libere o pedido. Mostre uma orientação clara. Raramente, expired é seguido de paid: trate paid como definitivo — entregue o pedido ou devolva o valor. |
unknown | Resultado incerto. Reconcilie; não crie cobrança duplicada. |
refunded | Devolução informada pelo provedor; atualize seu pedido. |
Veja todos os códigos HTTP e as regras de retentativa em Respostas, validação e estados.
Assinaturas e Pix Automático
Cadastre a recorrência uma vez e a Calebe Pay emite a cobrança de cada ciclo: um boleto, um link de Pix ou um débito por Pix Automático, na antecedência que você escolher. O calendário é em meses (12 = anual), no horário de Brasília, e cada cobrança emitida segue as mesmas tarifas, o mesmo split e os mesmos webhooks de uma cobrança avulsa.
/v1/subscriptionsCriar assinatura · boleto, pix, pix_automatic ou credit_card/v1/subscriptions/{id}/cyclesCiclos, cobrança de cada um e link do pagador/v1/subscriptions/{id}Pausar, retomar ou cancelar/v1/subscriptions/{id}/credit-cardTrocar o cartão salvo/v1/subscriptions/{id}/cycles/{cycle}/retryCobrar de novo um ciclo recusado no cartão/v1/pix-automatic/authorizationsPedir a autorização do pagador · aprovação em até 24 horas/v1/pix-automatic/chargesAgendar um débito avulso de 2 a 10 dias antesNo Pix Automático, o pagador aprova uma vez no aplicativo do banco e os débitos seguintes acontecem sem nova ação dele. O primeiro vencimento precisa estar ao menos 2 dias à frente, porque cada débito é agendado de 2 a 10 dias antes.
Guia de assinaturas e Pix AutomáticoEmita seu primeiro boleto
Com o boleto habilitado para a sua conta, emita uma chave com boleto:write e transactions:read. Endereço do pagador e vencimento YYYY-MM-DD são obrigatórios.
/v1/boletoEndereço + boleto.due_date · mesma idempotência do PixO guia inclui preparação do payload com vencimento válido, exemplos cURL/Node/Python/Go, limites e diagnósticos. No modo de teste, URL e linha digitável são nulas. O boleto real sai, sempre que possível, com um Pix do mesmo valor, válido até o fim do dia do vencimento, e boleto_url é o PDF gerado pela Calebe Pay, com o QR desse Pix. processing de boleto ainda não confirma pagamento.
Cadastre um subtenant e tente a conversão automática
Use uma chave de produção com subtenants:write. O tenant autenticado será sempre o pai do novo cadastro. O exemplo omite provider_id, então a API seleciona o primeiro provider marketplace ativo no roteamento e aplica suas taxas padrão aos meios de pagamento que não vierem em MerchantSplit. Os valores abaixo são fictícios: substitua todo o cadastro por dados reais e revisados antes de enviar.
/v1/subtenantsCadastro + tentativa imediata de criação da subconta · exige Idempotency-Keycurl --fail-with-body -X POST "$CALEBE_API_URL/v1/subtenants" \
-H "X-API-Key: $CALEBE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: cadastro-loja-exemplo-1" \
--data '{
"tenant": { "name": "Loja Exemplo", "slug": "loja-exemplo" },
"registration": {
"Name": "Loja Exemplo LTDA",
"CommercialName": "Loja Exemplo",
"Identity": "11222333000181",
"Email": "financeiro@loja-exemplo.com.br",
"ResponsibleName": "Maria da Silva",
"ResponsibleIdentity": "52998224725",
"ResponsibleBirthDate": "1990-01-01",
"ResponsiblePhone": "11999999999",
"Address": {
"ZipCode": "01310100", "Street": "Avenida Paulista",
"Number": "1000", "District": "Bela Vista",
"CityName": "São Paulo", "StateInitials": "SP", "CountryName": "Brasil"
}
}
}'A resposta inclui tenant_id, subaccount_id e conversion_status. Somente converted confirma a subconta; creating ou unknown exigem acompanhamento sem começar outro cadastro, e failed contém um diagnóstico seguro. HTTP 202 significa processamento ou resultado externo incerto. Em timeout, repita o mesmo corpo com a mesma chave.
parent_id. provider_id é opcional, mas, quando informado, precisa estar ativo e roteado para a árvore. O cadastro não aceita chave de teste e não cria uma chave de API para o filho.Liste subtenants e emita suas chaves
/v1/subtenantsPermissão subtenants:readLista filhos diretos do tenant autenticado. Use include_descendants=true para todos os níveis, status=active ou suspended para filtrar e limit/offset para paginar. O padrão é 50 itens, com máximo de 100. Retorna data e meta; meta.count é a quantidade da página. Teste e produção consultam o mesmo cadastro, sem acesso ao próprio tenant, pais, irmãos ou outras árvores.
curl --fail-with-body \
"$CALEBE_API_URL/v1/subtenants?include_descendants=true&status=active&limit=50&offset=0" \
-H "X-API-Key: $CALEBE_API_KEY"/v1/subtenants/{id}/api-keysPermissão subtenants:keys:write · exige Idempotency-KeyA chave do pai precisa conter subtenants:keys:write e cada permissão que será delegada. Selecione esses scopes em Chaves de API; chaves existentes não os recebem automaticamente. O destino deve ser um descendente ativo, com ancestrais ativos. Nome e scopes são obrigatórios. O modo omitido herda o da chave autenticada: teste só emite teste; produção pode emitir teste ou produção.
curl --fail-with-body -X POST \
"$CALEBE_API_URL/v1/subtenants/$SUBTENANT_ID/api-keys" \
-H "X-API-Key: $CALEBE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: chave-erp-loja-1" \
--data '{"name":"ERP da loja","mode":"test","scopes":["pix:write","transactions:read"]}'O HTTP 201 retorna data.key, secret_available: true e os metadados em api_key. Guarde o segredo no backend: ele aparece uma única vez. A mesma tentativa retorna 200, Idempotency-Replayed: true, key: null e secret_available: false, sem emitir outra credencial. Dados diferentes geram 409 idempotency_conflict. Se perder o segredo, identifique a chave pelo replay, revogue no portal e faça outra emissão deliberada com nova idempotência.
Scopes não presentes no pai geram 403 scope_not_delegable; elevar teste para produção gera 403 key_mode_not_allowed. Destino fora da árvore ou o próprio tenant recebe 404. Emitir uma chave não habilita pagamentos nem altera roteamento. Revogar a chave do pai não revoga automaticamente as chaves dos filhos.
Autenticação e hierarquia
Use X-API-Key nos endpoints públicos. A chave define o tenant e o modo (teste ou produção) de tudo o que ela cria; no cadastro de subtenant, ela define o pai. A sessão Bearer do painel é independente.
| O que você precisa | Como fazer |
|---|---|
| Criar Pix ou Pix Automático | Chave com permissão pix:write |
| Criar boleto | Chave com permissão explícita boleto:write |
| Cobrar cartão de crédito | Chave com permissão credit_card:write |
| Criar checkout | pix:write, boleto:write e/ou credit_card:write, conforme as formas oferecidas |
| Criar assinatura | pix:write (Pix e Pix Automático), boleto:write (boleto) ou credit_card:write (cartão) |
| Gerenciar centros de custo | cost_centers:write para criar, renomear e desativar; transactions:read para consultar |
| Cadastrar subtenant | Chave de produção padrão com subtenants:write; o tenant da chave será o pai |
| Listar subtenants | subtenants:read |
| Emitir chaves para subtenants | subtenants:keys:write e todos os scopes delegados |
| Ler transações, checkouts e assinaturas | Chave com permissão transactions:read |
| Atualizar pelo provedor | transactions:read + pix:write, boleto:write ou credit_card:write, conforme o método |
| Ver registros dos filhos | include_descendants=true na listagem |
| Selecionar um filho na leitura | tenant_id dentro do escopo permitido |
tenant_id em cobranças nem parent_id em POST /v1/subtenants. Cobranças continuam restritas ao tenant da chave. A gestão explícita de subtenants permite cadastrar filhos e emitir suas credenciais com os scopes correspondentes. Nunca coloque chaves de API no React, Expo ou Electron renderer: clientes públicos chamam o seu backend.Todos os escopos, as 30 operações da API e o que só existe no painel estão em Tudo o que dá para fazer pela API.
Um contrato pequeno e explícito
/v1/pixCriar cobrança Pix · exige Idempotency-Key/v1/boletoCriar boleto · exige Idempotency-Key/v1/credit-cardCobrar cartão de crédito · exige Idempotency-Key/v1/checkoutsLink em que quem paga escolhe Pix, boleto ou cartão/v1/subscriptionsAssinatura com calendário da Calebe Pay/v1/subtenantsCadastrar tenant filho e tentar conversão · exige chave de produção/v1/transactionsListar · limit, offset, status, method, reference, tenant_id/v1/transactions/{id}Ler estado persistido/v1/transactions/{id}/refreshConsultar estado no provedorUm objeto retorna {data: objeto}. Uma lista retorna {data: [], meta: {limit, offset, count}}. Um erro da aplicação retorna {error: {code, message, request_id}}. O limite padrão é 50 itens, com máximo de 100 por página.
Veja a lista completa, com assinaturas, Pix Automático, centros de custo e subtenants, em Tudo o que dá para fazer pela API, e todos os schemas e códigos de erro no OpenAPI. Pix, boleto e cartão usam a divisão automática das tarifas configuradas pela Calebe Pay; não envie recebedores no corpo. Não há endpoints de saque, cancelamento ou estorno de cobranças.
Repita com segurança
Uma chave idempotente identifica uma tentativa comercial: pagamento, checkout, assinatura, autorização ou cadastro de subtenant. A mesma chave e o mesmo payload reutilizam o recurso. A mesma chave com dados diferentes resulta em conflito.
- Persista a chave e o payload antes da chamada.
- Faça a chamada e salve os IDs retornados.
- Se houver timeout, reutilize a chave original. Não gere outra automaticamente.
- Se o resultado for
unknown, reconcilie antes de iniciar uma nova tentativa.
O SDK TypeScript não realiza retries automáticos. Veja a tabela de erros e retentativas.
Construa com seu agente de IA
Forneça os dois arquivos abaixo ao seu assistente de programação. O guia contém a sequência correta, os limites da primeira versão e critérios objetivos de teste.
Prompt de integração
Leia llms.txt, api.md, integration.md e openapi.json da Calebe Pay.
Implemente Pix e boleto no backend do meu sistema. Leia também boleto.md.
Solicite uma chave com boleto:write explicitamente.
Use variáveis de ambiente para a chave e a origem da API.
Persista pedido, payload e chave idempotente antes da rede.
Consulte pelo backend e libere apenas quando paid em produção.
Persista o vencimento do boleto; não recalcule a data em retries.
Trate timeout como resposta incerta, sem gerar nova chave.
Teste com uma chave de teste (cp_test_) e simule o pagamento em /v1/transactions/{id}/simulate.
Receba transaction.updated pelo webhook assinado e trate paid como definitivo.
Para cobranças recorrentes, leia subscriptions.md e use /v1/subscriptions; no Pix Automático, peça a autorização antes.
Para cadastrar empresas filhas, use POST /v1/subtenants com chave de produção e subtenants:write.
Não envie parent_id; leia conversion_status e preserve a mesma Idempotency-Key em resultado incerto.
Não invente endpoints ou meios de pagamento não implementados.Contrato OpenAPI 3.1
Todos os endpoints, schemas, códigos de erro e exemplos de resposta, legíveis por máquina.
Assinaturas e Pix Automático
Calendário, ciclos, autorização do pagador, débitos agendados e testes.
Respostas e estados
Códigos HTTP, validações, estados das cobranças e quando repetir uma chamada.
Exemplos executáveis
Node.js, Python e Go, sem bibliotecas externas e sem retries ocultos.
Escolha como integrar os pagamentos da sua operação
Antes de implementar, conheça os fluxos e recursos disponíveis: integração Pix com QR Code e copia e cola, integração de boleto com vencimento e dados do pagador e link de pagamento com Pix e boleto. A visão geral do gateway de pagamento Calebe Pay ajuda a escolher entre o portal e a API para o seu negócio.