Caso de uso · API

Cobrança variável por uso

Registre vendas aprovadas, armazenamento, tráfego, atendimentos ou qualquer consumo mensurável. O sistema externo informa a quantidade; o RecoPay aplica franquia, preço contratado e faturamento no ciclo correto.

Plano e recursos necessários

Você precisa de API habilitada, Cobrança variável por uso ativo e uma chave de Integrações Externas com os escopos de uso. A ativação do consumo também ativa sua dependência de integrações. O Starter oferece 100 requisições por mês para testes; escolha o volume de API conforme os eventos enviados e as consultas de reconciliação.

Confira os requisitos por tipo de integração e compare os planos disponíveis.

O problema resolvido

Fature consumo sem transferir sua regra comercial para outro sistema

Considere um plano com mensalidade fixa de R$ 250,00 e um componente de R$ 0,79 por venda aprovada. A cada venda, o sistema de origem registra apenas uma unidade consumida. Quando a cobrança da assinatura for gerada, o RecoPay soma os eventos ainda não faturados, desconta a franquia incluída no contrato e calcula o valor usando o preço preservado na assinatura.

Guardrail comercial

A API não aceita preço, desconto, imposto, total da cobrança nem identificação da empresa. A chave determina a empresa, e toda regra financeira vem do componente contratado no RecoPay.

Sistema de origem

  • Detecta o evento de consumo.
  • Define um identificador externo imutável.
  • Envia quantidade, data e descrição auditável.
  • Cancela ou estorna o evento quando necessário.

RecoPay

  • Valida empresa, assinatura e componente.
  • Controla idempotência e ciclo de vida do uso.
  • Aplica franquia e preço da contratação.
  • Vincula uso, item e cobrança para auditoria.
Antes do primeiro POST

Pré-requisitos

  1. Ative o utilitário Cobrança variável por uso no RecoPay.
  2. Tenha uma assinatura ativa com componente do tipo Uso / excedente.
  3. Confirme a franquia incluída e o valor unitário no contrato da assinatura.
  4. Abra Utilitários → Integrações Externas, crie uma chave com a finalidade Cobrança variável por uso e identifique a origem do consumo. Confira os escopos de uso e copie o segredo exibido uma única vez.
  5. Obtenha a referência pública da assinatura e o código exato do componente que receberá o consumo.
Uma chave por origem

Crie fontes distintas para produção, homologação e para cada sistema integrador. A chave completa é exibida uma única vez e deve permanecer em um cofre de segredos.

Roadmap literal

Fluxo de implementação

Mapeie a assinatura e o componente

Salve no sistema de origem a assinaturaReferencia e o componenteCodigo. Não use nome do cliente ou descrição do plano como chave de integração.

Crie um identificador imutável para cada evento

Exemplo: venda-987654. O mesmo evento deve conservar o mesmo idExterno em toda tentativa de envio.

Registre o consumo

Envie a quantidade positiva, com até quatro casas decimais, e a data ISO 8601 com fuso horário explícito.

Persista o resultado

Considere o envio confirmado somente após receber HTTP 201 ou 200. Registre o ID interno retornado e o requestId dos erros para suporte.

Consulte antes de tomar decisões ambíguas

Se houver timeout sem resposta, consulte o evento pelo idExterno. Se não existir, repita exatamente o mesmo payload.

Corrija pelo ciclo de vida correto

Solicite o cancelamento pelo mesmo endpoint em qualquer momento. O RecoPay cancelará eventos pendentes ou criará automaticamente um lançamento compensatório quando o consumo já tiver sido faturado.

Concilie periodicamente

Consulte eventos relevantes e compare o status local. O painel do utilitário mostra fonte, assinatura, apuração, item e cobrança vinculada.

Segurança

Autenticação e escopos

Todas as rotas usam a chave gerada para uma fonte de integração. Envie-a no cabeçalho HTTP:

Cabeçalho HTTP
Authorization: Bearer SUA_CHAVE

A fonte padrão recebe os escopos usos:escrever, usos:ler e usos:cancelar. O tenant é derivado da chave: não envie empresaId no corpo ou na URL.

  • Nunca exponha a chave em JavaScript, aplicativo móvel ou repositório.
  • Nunca registre a chave Bearer em logs.
  • Rotacione imediatamente uma chave suspeita; a anterior deixa de funcionar.
Contrato HTTP

Endpoints e respostas

Registrar um consumo

POST/integracoes/usos

Use esta rota no momento em que o consumo for confirmado no sistema de origem.

Contrato estrito: envie somente os campos documentados

A lista abaixo é exaustiva. Qualquer outra propriedade, mesmo que pareça apenas informativa, retorna HTTP 400 com uso.campos_nao_permitidos. Use exatamente os nomes em camelCase; por exemplo, assinatura_referencia não é aceito. Não serialize diretamente uma entidade completa do seu sistema.

Campo permitidoObrigatórioTipo e regra
assinaturaReferenciaSimTexto, até 64 caracteres. Use a referência pública exibida pelo RecoPay.
componenteCodigoSimTexto, até 50 caracteres. Use o código exato do componente de uso.
idExternoSimTexto, até 150 caracteres, único e imutável dentro da fonte.
quantidadeSimNúmero positivo, com no máximo quatro casas decimais.
ocorridoEmSimData e hora ISO 8601 com fuso explícito, até 90 dias atrás e no máximo 5 minutos no futuro.
descricaoNãoTexto auditável, até 255 caracteres.
metadadosNãoObjeto JSON com contexto não comercial, limitado a 8 KB.
cURL · requisição
curl --request POST \
  --url https://api.recopay.com.br/integracoes/usos \
  --header "Authorization: Bearer SUA_CHAVE" \
  --header "Content-Type: application/json" \
  --data '{
    "assinaturaReferencia": "REFERENCIA_PUBLICA_DA_ASSINATURA",
    "componenteCodigo": "hub-ml-tpa",
    "idExterno": "venda-987654",
    "quantidade": 1,
    "ocorridoEm": "2026-08-06T12:00:00-03:00",
    "descricao": "Venda 987654 aprovada",
    "metadados": {
      "origem": "hub-full-ecommerce",
      "pedido": "987654"
    }
  }'
HTTP 201 · evento criado
{
  "id": 1482,
  "idExterno": "venda-987654",
  "assinaturaReferencia": "REFERENCIA_PUBLICA_DA_ASSINATURA",
  "componenteCodigo": "hub-ml-tpa",
  "quantidade": 1,
  "status": "pendente",
  "ocorridoEm": "2026-08-06T15:00:00Z",
  "recebidoEm": "2026-08-06T15:00:01Z",
  "cobrancaId": null,
  "cobrancaItemId": null,
  "repetido": false
}

O primeiro registro retorna HTTP 201. A repetição idempotente do mesmo evento retorna HTTP 200 com repetido: true.

Registrar um lote

POST/integracoes/usos/lote

Envie de 1 a 500 eventos. O corpo externo aceita somente usos, e cada item segue exatamente a mesma lista de campos permitidos no registro individual. Cada item é processado de forma independente; por isso, avalie o resultado item a item mesmo quando a resposta geral for HTTP 200.

JSON · lote
{
  "usos": [
    {
      "assinaturaReferencia": "ASSINATURA_A",
      "componenteCodigo": "armazenamento-gb",
      "idExterno": "medicao-2026-08-06-a",
      "quantidade": 12.75,
      "ocorridoEm": "2026-08-06T23:50:00-03:00",
      "descricao": "Armazenamento apurado"
    },
    {
      "assinaturaReferencia": "ASSINATURA_B",
      "componenteCodigo": "atendimento-extra",
      "idExterno": "ticket-456",
      "quantidade": 1,
      "ocorridoEm": "2026-08-06T18:30:00-03:00",
      "descricao": "Atendimento excedente 456"
    }
  ]
}

Consultar um consumo

GET/integracoes/usos/{idExterno}
cURL · consulta
curl --request GET \
  --url https://api.recopay.com.br/integracoes/usos/venda-987654 \
  --header "Authorization: Bearer SUA_CHAVE"

Depois do faturamento, a resposta passa a informar status: "faturado", cobrancaId e cobrancaItemId. Essa é a ligação auditável entre o evento e a cobrança.

Cancelar um consumo

POST/integracoes/usos/{idExterno}/cancelamento

O corpo desta rota aceita exclusivamente o campo motivo, obrigatório e limitado a 255 caracteres.

cURL · cancelamento
curl --request POST \
  --url https://api.recopay.com.br/integracoes/usos/venda-987654/cancelamento \
  --header "Authorization: Bearer SUA_CHAVE" \
  --header "Content-Type: application/json" \
  --data '{ "motivo": "Venda cancelada no sistema de origem" }'

O integrador não precisa consultar o estado para escolher uma operação. Se o consumo estiver pendente, ele será cancelado. Se já estiver faturado, o RecoPay preservará a cobrança consolidada e criará um lançamento compensatório para o próximo ciclo.

HTTP 200 · cancelamento antes do faturamento
{
  "operacaoExecutada": "cancelamento",
  "repetido": false,
  "usoOriginal": {
    "idExterno": "venda-987654",
    "status": "cancelado"
  },
  "usoCompensatorio": null
}
HTTP 200 · compensação após o faturamento
{
  "operacaoExecutada": "estorno",
  "repetido": false,
  "usoOriginal": {
    "idExterno": "venda-987654",
    "status": "estornado",
    "cobrancaId": 781
  },
  "usoCompensatorio": {
    "idExterno": "estorno:1482",
    "quantidade": -1,
    "status": "pendente"
  }
}

operacaoExecutada informa a decisão tomada pelo RecoPay. Repetir o mesmo cancelamento é seguro e retorna repetido: true. Um uso reservado pelo faturamento retorna HTTP 409; consulte novamente antes de repetir.

Entrega confiável

Idempotência, timeout e retry

O idExterno é a chave de idempotência funcional. Ele é único dentro da fonte e deve representar um único fato de negócio.

CenárioComportamento esperadoAção do integrador
Mesmo ID e mesmo payloadHTTP 200, repetido: trueTratar como sucesso.
Mesmo ID e payload diferenteHTTP 409, uso.idempotencia_conflitanteNão repetir. Corrigir o mapeamento.
Timeout sem respostaResultado desconhecidoConsultar pelo ID; se ausente, repetir o mesmo payload.
HTTP 408, 429 ou 5xxFalha transitóriaRetry com backoff exponencial e jitter.
HTTP 400, 401, 403, 404 ou 409Erro determinísticoNão repetir automaticamente.
Regra do RecoPay

Como o consumo vira cobrança

A integração não precisa aguardar o fechamento do mês. Na geração da cobrança, o RecoPay fixa um corte, reserva os usos pendentes e calcula o componente com os valores preservados na assinatura.

quantidade_apurada = soma dos eventos elegíveis quantidade_faturável = máximo(0, quantidade_apurada − franquia_inclusa) valor_do_uso = quantidade_faturável × valor_unitário_contratado

Exemplo: foram registradas 108 unidades, a assinatura inclui 100 e o valor unitário é R$ 0,79. A cobrança terá 8 unidades faturáveis, totalizando R$ 6,32 nesse componente.

  • Eventos recebidos depois do corte permanecem pendentes para o próximo ciclo.
  • Se a quantidade faturável for zero, o ciclo é encerrado sem criar valor e sem permitir dupla cobrança.
  • Cupons de desconto não reduzem componentes variáveis por uso.
  • Cancelar uma cobrança libera os usos vinculados para nova apuração.
Ciclo de vida

Estados e rastreabilidade

StatusSignificadoOperação permitida
pendenteRegistrado e disponível para uma próxima apuração.Consultar ou cancelar.
reservadoSeparado por uma cobrança em processamento.Aguardar consolidação ou liberação automática.
faturadoVinculado a um item e a uma cobrança.Consultar ou estornar.
canceladoInvalidado antes do faturamento.Somente consultar.
estornadoFaturado e posteriormente compensado.Somente consultar.

O painel do utilitário preserva a cadeia fonte → evento → apuração → item → cobrança. Use o idExterno como referência comum entre logs do sistema de origem e do RecoPay.

Diagnóstico

Respostas de erro

Formato padrão
{
  "sucesso": false,
  "codigo": "uso.componente_nao_encontrado",
  "mensagem": "Assinatura ativa ou componente de uso nao encontrado.",
  "requestId": "0HN9ABC123:00000001",
  "detalhes": null
}
HTTPCódigos comunsInterpretação
400uso.quantidade_invalida
uso.data_invalida
uso.campos_nao_permitidos
Payload inválido. Em campos_nao_permitidos, compare o JSON efetivamente transmitido com a lista exaustiva do contrato e remova propriedades extras ou nomes em snake_case.
401uso.chave_invalidaChave ausente, revogada ou incorreta.
403uso.escopo_insuficienteA fonte não possui permissão para a operação.
404uso.componente_nao_encontrado
uso.nao_encontrado
Confira referência da assinatura, código do componente ou ID externo.
409uso.idempotencia_conflitante
uso.operacao_invalida
O evento já existe com outro conteúdo ou a transição de estado não é permitida.
429Limite de requisiçõesAplique backoff e reduza a concorrência.
Go-live

Checklist de produção

  • Uma fonte e uma chave exclusivas por ambiente.
  • Segredo armazenado fora do código-fonte.
  • ID externo estável, único e pesquisável.
  • Fila local de saída para não perder eventos.
  • Retry apenas para erros transitórios.
  • Consulta após timeout de resultado incerto.
  • Logs sem token e sem dados sensíveis.
  • Alertas para 401, 403, 409 e falhas repetidas.
  • Rotina de reconciliação por ID externo.
  • Teste de cancelamento antes do faturamento.
  • Teste de estorno depois do faturamento.
  • Validação da franquia e do primeiro ciclo real.
Implementação assistida

Contrato resumido para uma LLM

Forneça o bloco abaixo junto com o contexto do seu projeto. Ele reduz ambiguidades e impede que um agente externo invente campos comerciais ou rotas alternativas.

Prompt de integração
Implemente a integração de consumo variável com a API RecoPay.

BASE URL
https://api.recopay.com.br

AUTENTICAÇÃO
Authorization: Bearer SUA_CHAVE
Nunca exponha ou registre a chave em logs.

ROTAS CANÔNICAS
POST /integracoes/usos
POST /integracoes/usos/lote
GET /integracoes/usos/{idExterno}
POST /integracoes/usos/{idExterno}/cancelamento

PAYLOAD DE REGISTRO
{
  "assinaturaReferencia": "REFERENCIA_PUBLICA_DA_ASSINATURA",
  "componenteCodigo": "CODIGO_DO_COMPONENTE_DE_USO",
  "idExterno": "IDENTIFICADOR_UNICO_NO_SISTEMA_DE_ORIGEM",
  "quantidade": 1,
  "ocorridoEm": "2026-08-06T12:00:00-03:00",
  "descricao": "DESCRICAO_AUDITAVEL",
  "metadados": { "origem": "MEU_SISTEMA" }
}

CAMPOS PERMITIDOS NO REGISTRO
Obrigatórios: assinaturaReferencia, componenteCodigo, idExterno, quantidade, ocorridoEm.
Opcionais: descricao, metadados.
Esta lista é exaustiva. Use exatamente camelCase e não serialize uma entidade completa.
O lote aceita somente { "usos": [...] } no nível externo.
O cancelamento aceita somente { "motivo": "..." } no corpo.

REGRAS OBRIGATÓRIAS
1. Não envie campos além da lista permitida, nem mesmo IDs internos, status ou dados informativos.
2. Não envie empresaId, preço, valor, desconto, imposto, moeda ou total.
3. O idExterno é imutável e idempotente por evento.
4. Quantidade deve ser positiva e ter no máximo 4 casas decimais.
5. ocorridoEm deve ser ISO 8601 com fuso explícito.
6. HTTP 201 cria; HTTP 200 com repetido=true também é sucesso.
7. Mesmo idExterno com payload diferente retorna HTTP 409.
8. Após timeout, consulte pelo idExterno antes de repetir.
9. Faça retry somente em 408, 429 e 5xx, com backoff e jitter.
10. Para desfazer qualquer evento, use apenas a rota de cancelamento e informe o motivo.
11. O RecoPay decide entre cancelamento e estorno compensatório conforme o estado do uso.
12. Em lote, avalie sucesso e erro de cada item.
13. Armazene idExterno, status, id interno e requestId para reconciliação.

Implemente DTOs estritos, cliente HTTP resiliente, testes de idempotência,
cancelamento unificado, timeout e reconciliação. Não crie aliases de rota.

Continue sua integração

Próximo passo

Transforme consumo real em receita rastreável

Configure seu componente por uso no RecoPay, gere uma chave para o sistema de origem e valide o primeiro evento no Swagger antes de automatizar o fluxo.