Documentação da API v1 · Conheça a Naut
v1

Criar uma cobrança

Cria a cobrança de um produto e devolve o que o comprador precisa para pagar. O valor sai do produto, nunca do corpo.

POSThttps://api.navenaut.com/checkout/

Autenticação

Rota pública: não exige credencial. A ausência é declarada, não omissão.

Esta rota não exige autenticação. Ela é chamada pelo comprador, que não tem sessão: a identidade do vendedor vem da referência do produto, nunca do chamador.

Parâmetros

Cabeçalho

NomeTipoDescrição
idempotency-keyobrigatóriotextoOBRIGATÓRIA. Sem ela a chamada é recusada com 400 antes de qualquer escrita. Aceita no máximo 64 caracteres; a maior também é recusada com 400 antes de qualquer escrita. Numa página pública, um duplo clique sem chave viraria duas compras. O MESMO valor com o MESMO corpo devolve a MESMA cobrança; com corpo diferente, recusa.

Corpo da requisição

application/json.

CampoTipoDescrição
adSignalsobjetoOs sinais do navegador para o envio da compra ao provedor de anúncio (cookies _fbp, _fbc, _ttp, ids de clique e a visita). Opcional; valor fora do formato é descartado sem recusar a compra.
affiliateClicktexto—
bumpsarranjo de texto (uuid)—
buyerobrigatórioobjetoQuem está comprando. O documento é guardado para conciliação e nunca volta inteiro em nenhuma resposta.
cardobjetoOs dados do cartão, só quando o método é cartão. Eles atravessam para o meio de pagamento e não são persistidos aqui.
currencyum de: `BRL`, `USD`, `EUR`A moeda da cobrança. Precisa ser a mesma do produto.
installmentsinteiroQuantidade de parcelas, só para cartão. Os juros do parcelamento são sempre do comprador e entram no total cobrado.
methodobrigatórioum de: `pix`, `card`, `boleto`, `wallet`Como o comprador vai pagar. O produto declara os métodos que aceita, e um método fora dessa lista recusa.
originobjetoA origem e o dispositivo do comprador: todos os parâmetros da URL de entrada, o referenciador, os cookies de anúncio, o aparelho e a visita. O vendedor os vê no detalhe da venda. Opcional; valor fora do formato é descartado sem recusar a compra, e nada com cara de cartão é guardado.
popupDiscountAcceptedbooleano—
productRefobrigatóriotextoA referência pública do produto a cobrar.
trackingobjetoOs parâmetros de origem da visita, se você os tiver. Servem à atribuição e não afetam o valor.
{
  "adSignals": {
    "fbc": "exemplo",
    "fbclid": "0f2a4e6c-91c4-4e1b-9a3d-5b7c2e8f4a06",
    "fbp": "exemplo",
    "gclid": "0f2a4e6c-91c4-4e1b-9a3d-5b7c2e8f4a06",
    "optedOut": true,
    "ttclid": "0f2a4e6c-91c4-4e1b-9a3d-5b7c2e8f4a06",
    "ttp": "exemplo",
    "visitorId": "0f2a4e6c-91c4-4e1b-9a3d-5b7c2e8f4a06"
  },
  "affiliateClick": "exemplo",
  "bumps": [
    "0f2a4e6c-91c4-4e1b-9a3d-5b7c2e8f4a06"
  ],
  "buyer": {
    "document": "000.000.000-00",
    "email": "comprador@exemplo.com.br",
    "name": "Loja Exemplo",
    "phone": "+55 11 90000-0000"
  },
  "card": {
    "authenticationId": "0f2a4e6c-91c4-4e1b-9a3d-5b7c2e8f4a06",
    "brand": "exemplo",
    "encrypted": "exemplo"
  },
  "currency": "BRL",
  "installments": 1,
  "method": "pix",
  "origin": {
    "cookies": {},
    "device": {
      "canvasHash": "exemplo",
      "clientHints": {
        "architecture": "exemplo",
        "bitness": "exemplo",
        "brands": [
          "exemplo"
        ],
        "fullVersionList": [
          "exemplo"
        ],
        "mobile": true,
        "model": "exemplo",
        "platform": "exemplo",
        "platformVersion": "exemplo"
      },
      "colorDepth": 1,
      "connectionType": "exemplo",
      "cookieEnabled": true,
      "deviceMemoryMegabytes": 1,
      "doNotTrack": true,
      "globalPrivacyControl": true,
      "hardwareConcurrency": 1,
      "languages": [
        "exemplo"
      ],
      "maxTouchPoints": 1,
      "pixelRatioHundredths": 1,
      "platform": "exemplo",
      "screenHeight": 1,
      "screenWidth": 1,
      "timeZone": "exemplo",
      "userAgent": "exemplo",
      "utcOffsetMinutes": 1,
      "vendor": "exemplo",
      "viewportHeight": 1,
      "viewportWidth": 1,
      "webglRenderer": "exemplo",
      "webglVendor": "exemplo"
    },
    "fingerprint": "exemplo",
    "landingUrl": "https://loja.exemplo.com.br/webhooks",
    "referrer": "exemplo",
    "storage": {},
    "urlParams": {},
    "visit": {
      "firstSeenAt": "exemplo",
      "returning": true,
      "visitCount": 1
    }
  },
  "popupDiscountAccepted": true,
  "productRef": "referencia-de-exemplo",
  "tracking": {
    "s1": "exemplo",
    "s2": "exemplo",
    "s3": "exemplo",
    "sck": "exemplo",
    "src": "exemplo",
    "utm_campaign": "exemplo",
    "utm_content": "exemplo",
    "utm_medium": "exemplo",
    "utm_source": "exemplo",
    "utm_term": "exemplo"
  }
}

Respostas

200 · sucesso

{
  "acquirer": "exemplo",
  "chargeRef": "referencia-de-exemplo",
  "currency": "BRL",
  "method": "pix",
  "payable": {
    "emv": "exemplo",
    "kind": "pix",
    "qrImageUrl": "https://loja.exemplo.com.br/webhooks"
  },
  "paymentId": "0f2a4e6c-91c4-4e1b-9a3d-5b7c2e8f4a06",
  "priceCents": 129900,
  "saleTransactionId": "0f2a4e6c-91c4-4e1b-9a3d-5b7c2e8f4a06",
  "watchToken": "valor-de-exemplo-nao-use"
}

Cobrança criada.

400 · requisição inválida

Algo que o comprador consegue corrigir e reenviar: falta o header idempotency-key ou ele passa de 64 caracteres, o documento ou os dados dele não passaram, o método não é aceito, faltou o dado do cartão, ou a quantidade de parcelas pedida não está disponível.

404 · não encontrado

A referência não resolve a um produto vendável: inexistente, arquivada ou fora de publicação.

409 · conflito

A compra não pode seguir agora: a mesma chave de idempotência já foi usada com um corpo diferente, a mesma chave ainda está em andamento, ou o meio de pagamento escolhido não está disponível para este produto.

503 · indisponível

Falta configuração do nosso lado para esta venda. Não é o comprador; reporte a ocorrência em vez de reenviar.

Erros desta rota

StatusCódigoQuandoO que fazer
400CHECKOUT_IDEMPOTENCY_KEY_REQUIREDA chamada chegou sem o cabeçalho idempotency-key, ou com ele em branco. A recusa vem antes de qualquer escrita: nada foi reservado e nenhuma cobrança existe.Gere um valor novo por tentativa de compra, envie no cabeçalho e reenvie. Repetir sem a chave devolve o mesmo 400.
400CHECKOUT_IDEMPOTENCY_KEY_TOO_LONGO cabeçalho idempotency-key passa de 64 caracteres, o máximo que cabe na referência do pedido no adquirente. A recusa vem antes de qualquer escrita.Reenvie com uma chave de até 64 caracteres. Um UUID cabe.
400CHECKOUT_IDEMPOTENCY_KEY_RESERVEDO cabeçalho idempotency-key começa por um início que a Naut reserva. Nada foi gravado.Reenvie com outra chave. Um UUID por tentativa serve.
400CHECKOUT_BUYER_DOCUMENT_INVALIDO documento do comprador não é um CPF nem um CNPJ válido. A recusa acontece antes da reserva de propósito: o documento não entra no corpo canônico, então um dígito errado não deixa a chave presa.Corrija o documento e reenvie com a MESMA idempotency-key. Cunhar uma chave nova aqui abriria uma segunda compra.
400CHECKOUT_BUYER_DETAILS_INVALIDNome, telefone ou e-mail do comprador não cabem no que a venda armazena: campo em branco, texto longo demais, ou telefone sem dígitos suficientes.Corrija o campo e reenvie com a MESMA idempotency-key. Nada foi reservado.
400CHECKOUT_METHOD_NOT_SERVEDO método de pagamento enviado não pertence ao conjunto que esta superfície cobra.Escolha um dos métodos que a página do produto publica e reenvie. Repetir o mesmo método devolve sempre 400.
400CHECKOUT_CARD_PAYMENT_DATA_MISSINGO método escolhido é cartão e o dado de pagamento não veio no corpo. A recusa não vem do validador de esquema: é código estável, como toda outra recusa desta superfície.Reenvie o MESMO pedido, com a mesma idempotency-key, agora com o dado que o SDK do navegador produz. A reserva já foi liberada, então essa segunda tentativa é atendida como a compra que ela é.
400CHECKOUT_INSTALLMENTS_NOT_AVAILABLEA quantidade de parcelas pedida não está disponível para esta venda. É distinta de CHECKOUT_INSTALLMENT_MARKUP_BELOW_COST: aqui a escolha do comprador ainda resolve.Ofereça as quantidades que a página do produto publica e reenvie com uma delas.
404CHECKOUT_PRODUCT_NOT_FOUNDA productRef não resolve a um produto vendável: inexistente, arquivado, fora de publicação, ou nunca foi um produto. Referência malformada cai aqui também.Confira a referência com quem gerou o link. Repetir não muda o resultado enquanto o produto não voltar a ser vendável.
409CHECKOUT_IDEMPOTENCY_CONFLICTA mesma idempotency-key já foi apresentada nesta conta com um pedido DIFERENTE. Nem o corpo anterior nem a assinatura dele voltam na resposta.Se o pedido mudou, use uma chave nova. Se o pedido é o mesmo, reenvie byte a byte igual; repetir com o corpo alterado devolve sempre 409.
409CHECKOUT_IN_PROGRESSA mesma chave já foi reivindicada e a compra ainda não concluiu. É a janela entre as duas fases da reserva, e devolver um corpo pela metade seria pior do que recusar.Espere alguns instantes e repita a MESMA requisição com a MESMA chave. Nunca cunhe outra: a chave nova abriria uma segunda compra.
409CHECKOUT_METHOD_NOT_AVAILABLEO método existe, mas a conta que vende ainda não está habilitada a recebê-lo na origem. É pendência de cadastro dela, não configuração daqui.Não é o comprador, e reenviar não resolve. Ofereça outro método enquanto o vendedor conclui o cadastro.
409CHECKOUT_ACQUIRER_MAPPING_MISSINGFalta configuração do nosso lado para cobrar esse método por essa conta. Nada quebrou: o caminho simplesmente não está montado.Reporte a ocorrência com a productRef e o método. Reenviar o mesmo pedido devolve o mesmo código.
409CHECKOUT_PLATFORM_SHARE_BELOW_FLOORA divisão fecha, mas a fatia da plataforma não alcança o piso daquele par de método e valor. A recusa chega antes de qualquer ida à rede: nenhuma cobrança foi criada.Nenhuma escolha do comprador resolve. O preço do produto ou a taxa daquele vendedor precisa mudar; até lá, esse método não vende esse produto.
409CHECKOUT_INSTALLMENT_MARKUP_BELOW_COSTOs juros mínimos da plataforma não cobrem o custo desta venda parcelada, medido contra as tarifas do dia.Nenhuma quantidade de parcelas que o comprador escolha resolve, e o vendedor também não: a plataforma precisa recalibrar a taxa. Até lá, esta venda parcelada não passa.
409CHECKOUT_POPUP_DISCOUNT_NOT_AVAILABLEO pedido marcou popupDiscountAccepted, mas o produto não tem desconto de pop ligado agora. O vendedor o desligou depois de a página abrir. Nada foi gravado.Leia o produto de novo e mostre o preço atual. Reenvie sem popupDiscountAccepted.
409CHECKOUT_ORDER_BUMP_UNAVAILABLEO pedido marcou em bumps uma oferta adicional que não está mais à venda, ou o meio escolhido não serve a um dos produtos marcados. Nada foi gravado.Leia o produto de novo, mostre só os orderBumps que ele devolve e reenvie com eles.
503CHECKOUT_PRIMARY_SELLER_POLICY_MISSINGA política do vendedor principal, que é a parte que sustenta disputa e estorno, não está configurada. É deployment nosso, e o comprador não podia ter causado isso.Reporte a ocorrência. Reenviar não resolve, e nenhuma correção no corpo muda o resultado.

Os códigos são estáveis e fazem parte do contrato. A lista completa, com todos os vocabulários, está na tabela de erros.

Próximo passo