C Cashbanx API de loja direta
PTEN

Documentação de integração

API de loja direta

Integração direta entre a loja parceira e a Cashbanx — o pedido nasce na loja, a pontuação é apurada aqui.

Documento NR-000/01 Programa Ganhe Pontos v4 Versão 1.0 — agosto de 2026 Público lojas parceiras integradas

01Arquitetura

O fluxo tem duas comunicações obrigatórias da loja para a Cashbanx, sempre nesta ordem: a notificação do pedido e, depois, a atualização do status para concluído ou cancelado.

  1. Dentro de uma página da Cashbanx específica do parceiro é disponibilizado um link para o site da loja. Esse link carrega o identificador do clique — um valor no formato hub_<número>, entregue num parâmetro de URL cujo nome é combinado com cada loja no momento do cadastro.
  2. Ao clicar, uma nova aba abre o site da loja. Ex.: https://www.paginadolojaxpto.com.br/?token=hub_1234567
  3. No site da loja o cliente seleciona os produtos e fecha o pedido. A loja deve guardar o identificador do clique recebido na URL e associá-lo ao pedido.
  4. Após a confirmação do pedido, a loja notifica a Cashbanx (purchase-made), devolvendo o identificador do clique no campo click_id. Nesse momento a Cashbanx comunica a Esfera, que informa o cliente por e-mail sobre a compra. O pedido nasce pendente: nenhuma pontuação é liberada ainda.
  5. Após o prazo legal de cancelamento e a negociação com o time comercial da Cashbanx, a loja atualiza o status do pedido (confirm-purchase) — concluído ou cancelado.
Status do pedidoEfeito para o cliente
PEDIDO CONCLUÍDO A pontuação é liberada conforme a regra de liberação acordada para a loja, refletindo no extrato do cliente.
PEDIDO CANCELADO Nenhuma pontuação é liberada para o cliente.
As duas chamadas são obrigatórias

Os fluxos dentro do ambiente da loja podem mudar. Porém, é obrigatório manter as duas chamadas para a Cashbanx: a de notificação da compra e a de atualização para concluído ou cancelado. Um pedido que nunca receba a segunda chamada permanece pendente indefinidamente, e nenhuma pontuação é creditada.

Quem calcula a pontuação

A loja informa o valor do pedido; quem apura a pontuação é a Cashbanx, a partir da comissão registrada no cadastro da loja e da regra do programa. O campo points da notificação é informativo: ele é armazenado junto ao pedido, mas não determina o que o cliente recebe.

02Ambientes

Todos os endpoints deste documento são publicados sob o prefixo /api. Substitua {cashbanx_url} pelo host do ambiente:

Ambiente{cashbanx_url}
Homologação (Stage)https://dev-api.cashbanx.site
Produçãohttps://api.cashbanx.site

A homologação é o ambiente de desenvolvimento da Cashbanx: os dados são independentes dos de produção, mas o ambiente recebe atualizações com frequência e não tem compromisso de disponibilidade. As credenciais são distintas por ambiente e não são intercambiáveis.

03Credenciais e identificação

A Cashbanx entrega à loja, por ambiente:

  • client_id e client_secret — usados apenas para obter o token de acesso. O client_secret é exibido uma única vez no momento da criação; perdido, ele é substituído por um novo, não recuperado.
  • partner_id — o identificador da loja no cadastro da Cashbanx, enviado no corpo das duas chamadas.

A credencial é o que determina a loja e o programa em que o pedido será lançado. O partner_id enviado no corpo precisa ser exatamente o da credencial usada; qualquer outro valor é recusado com partner not found. Nenhum campo do corpo altera o destino do lançamento.

04Autenticação

OAuth 2.0, fluxo client_credentials. O token tem validade de 30 minutos (expires_in: 1800) e deve ser reutilizado enquanto for válido — obtenha um novo apenas quando o anterior expirar.

POST{cashbanx_url}/api/auth/oauth2/v1/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=<client_id>&client_secret=<client_secret>

Retorno 200 · sucesso

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "expires_in": 1800,
  "token_type": "bearer"
}

O fluxo client_credentials não emite refresh_token nem refresh_expires_in (RFC 6749, §4.4.3): a loja já possui as credenciais e solicita um novo token quando precisar. O parâmetro encrypted não é aceito.

Retorno 4xx · erro — o corpo de erro é sempre o mesmo formato:

{ "errorCode": "invalid_client", "errorMessage": "client_id or client_secret is incorrect" }
Código errorCode errorMessage Situação
400 unsupported_grant_type grant_type is incorrect grant_type diferente de client_credentials.
400 invalid_request client_id or client_secret is incorrect client_id ou client_secret não enviado.
400 invalid_client client_id or client_secret is incorrect Credencial inválida, inexistente ou revogada — os três casos respondem igual, por segurança.
429 invalid_request Too many requests Mais de 20 solicitações de token por minuto para o mesmo client_id.
500 internal_error Internal Server Error Falha interna de processamento na Cashbanx.

05API · Notificação de Pedido

Informa que um pedido foi realizado. O pedido é registrado como pendente e aguarda a atualização de status descrita na seção 6.

POST{cashbanx_url}/api/b2b/v1/partner-notify/campaign/purchase-made
Authorization: Bearer {access_token}
Content-Type: application/json
Campo Descrição Tipo Obrig.
customer_idIdentificação do clienteTextoSim
customer_id_typeTipo da identificação: Token, CPF ou CNPJ (grafia exata)TextoSim
customer_nameNome do clienteTextoNão
customer_mailE-mail do clienteTextoNão
customer_phoneTelefone do cliente (DDD + número)TextoNão
click_idIdentificador do clique recebido na URL de entrada, no formato hub_<número>TextoNão *
partner_idIdentificação do parceiroTextoSim
campaign_idIdentificação de campanhaTextoSim
order_idNúmero do pedidoTextoSim
order_dateData do pedido (yyyy-mm-dd)DataSim
pointsQuantidade de pontos — informativo, não determina o créditoInteiroNão
order_totalValor do pedido em Reais, sem frete. Maior que zero e no máximo 1000000.00, com até duas casas decimaisNuméricoSim
order_item_quantityQuantidade de itens do pedidoNuméricoNão
order_item_skuNúmero da SKU no parceiroTextoNão
address_streetEndereço da entrega do pedidoTextoNão
address_numberNúmeroTextoNão
address_complementComplementoTextoNão
address_cityCidadeTextoNão
address_ufEstadoTextoNão
address_countryPaísTextoNão
* click_id não é obrigatório, mas é o que garante a pontuação

O click_id identifica a visita originada na Cashbanx e é o que liga o pedido à taxa acordada. Ele só é aproveitado quando pertence à mesma loja e à mesma pessoa que o pedido identifica em customer_id — por isso os dois campos são separados, e por isso o identificador do clique deve ser guardado por pedido, nunca por cliente.

Sem click_id, ou quando ele não corresponde ao cliente informado, o pedido não é recusado: ele é registrado sem vínculo, com pontuação zero, e passa a ser tratado comercialmente entre a loja e a Cashbanx.

Exemplo de requisição

{
  "customer_id": "01245678901",
  "customer_id_type": "CPF",
  "customer_name": "João da Silva",
  "customer_mail": "joaodasilva@hotmail.com",
  "customer_phone": "11999999999",
  "click_id": "hub_1234567",
  "partner_id": "ABC",
  "campaign_id": "DEFG1234",
  "order_id": "1234567891",
  "order_date": "2026-01-01",
  "points": 100,
  "order_total": 100.50,
  "order_item_quantity": 1,
  "order_item_sku": "0987654321",
  "address_street": "Rua XPTO",
  "address_number": "200",
  "address_complement": "AP 100",
  "address_city": "São Paulo",
  "address_uf": "SP",
  "address_country": "Brasil"
}

Retorno 200 · sucesso

{ "message": "Purchase received." }
Código errorCode errorMessage Situação
400 order_id_duplicated order_id duplicated Já existe pedido recebido com o mesmo order_id para essa loja.
400 partner_not_found partner not found O partner_id não é o da credencial usada, ou a loja está inativa na Cashbanx.
400 missing_field <campo> cannot be null Campo obrigatório não informado, nulo ou vazio: customer_id, customer_id_type, partner_id, campaign_id, order_id, order_date ou order_total.
400 bad_request Bad Request Algo preenchido incorretamente: tipo inválido, campo não previsto neste documento, data inexistente (2026-02-31) ou order_total fora da faixa publicada.
401 invalid_client access_token is incorrect Token ausente, expirado ou revogado.
500 internal_error Internal Server Error Falha interna de processamento na Cashbanx.

06API · Atualização de Pedido

Conclui ou cancela um pedido notificado anteriormente. É esta chamada que libera ou cancela a pontuação do cliente.

PUT{cashbanx_url}/api/b2b/v1/partner-notify/campaign/confirm-purchase
Authorization: Bearer {access_token}
Content-Type: application/json
Campo Descrição Tipo Obrig.
partner_idIdentificação do parceiroTextoSim
order_idNúmero do pedido, o mesmo enviado na notificaçãoTextoSim
order_update_dateData da atualização do status (yyyy-mm-dd)DataSim
order_dateData do pedido (yyyy-mm-dd) — informativaDataNão
order_statusStatus final: COMPLETED ou CANCELEDTextoSim
status_descriptionDescrição do motivo do statusTextoSe CANCELED

Pedido concluído · libera a pontuação

{
  "partner_id": "ABC",
  "order_id": "1234567891",
  "order_status": "COMPLETED",
  "order_date": "2026-01-01",
  "order_update_date": "2026-02-15",
  "status_description": "Pedido entregue"
}
{ "message": "Confirmed order." }

Pedido cancelado · não libera a pontuação

{
  "partner_id": "ABC",
  "order_id": "1234567891",
  "order_status": "CANCELED",
  "order_update_date": "2026-02-15",
  "status_description": "Cancelado por motivo específico"
}
{ "message": "Order canceled." }
A atualização é definitiva

Um pedido aceita uma única atualização de status. Depois de concluído ou cancelado, qualquer nova chamada — inclusive um CANCELED após um COMPLETED — é recusada com Order already processed, e não há caminho de volta pela API.

Por isso a atualização deve ser enviada somente após o prazo de troca e devolução. Devoluções posteriores à confirmação são tratadas comercialmente entre a loja e a Cashbanx.

Código errorCode errorMessage Situação
400 order_not_found Order not found O order_id não foi encontrado para essa loja.
400 order_already_processed Order already processed O pedido já foi concluído ou cancelado.
400 partner_not_found partner not found O partner_id não é o da credencial usada, ou a loja está inativa na Cashbanx.
400 missing_field <campo> cannot be null Campo obrigatório não informado ou nulo: partner_id, order_id, order_update_date, order_status — e status_description quando o status for CANCELED.
400 bad_request Bad Request Algo preenchido incorretamente: order_status fora dos valores publicados, data inexistente ou campo não previsto neste documento.
401 invalid_client access_token is incorrect Token ausente, expirado ou revogado.
500 internal_error Internal Server Error Falha interna de processamento na Cashbanx.

07E-mails transacionais

Quando a loja notifica que o pedido foi realizado, a Cashbanx informa a Esfera para que ela faça a comunicação ao cliente por e-mail. Quem dispara o e-mail é a Esfera, não a Cashbanx.

Assunto: "Você vai ganhar pontos na Esfera!"

Olá, [Nome do cliente],

A loja parceira XPTO avisou sobre a sua compra com a Esfera. O prazo para crédito dos pontos começa a partir da entrega do seu pedido. Para consultar mais informações, acesse a página relacionada em Lojas Parceiras no site.

Resumo do pedido: nome da loja parceira, data da compra, valor em reais (sem frete) e número do pedido.

08Notas de integração

  • Reenvio após timeout é seguro. O order_id é a chave de idempotência: um reenvio da notificação responde order_id duplicated e uma segunda atualização responde Order already processed. Em nenhum dos casos há crédito em duplicidade.
  • Não existe valor negativo. Estorno e devolução não são representados por order_total negativo — o caminho publicado é o CANCELED, e apenas enquanto o pedido não tiver sido atualizado.
  • Guarde o click_id por pedido. Reaproveitar o identificador de um clique antigo em um pedido novo faz a pontuação ser apurada pela taxa errada, sem que nada acuse o problema.
  • Reutilize o token durante os 30 minutos de validade. Solicitações de token são limitadas a 20 por minuto por client_id.
  • Campo não previsto neste documento é recusado com Bad Request. Envie apenas os campos publicados.