Documentação

Calcular o preço

Simula uma correspondência sem criá-la.

POST
/letters/quote

Autenticação

apiKey
headerAuthorizationBearer <chave de API>

Chave de API no cabeçalho Authorization: Bearer cf_live_.... Crie e revogue chaves no painel, em Desenvolvedores > Chaves de API.

Corpo da requisição

Dois formatos, com os mesmos campos: application/json, com o PDF em document (URL, upload em duas etapas ou base64), ou multipart/form-data, com o arquivo do PDF no campo file (até 4 MB). Troque o formato no seletor do quadro abaixo.

  1. body
to*

Destinatário. A CartaFlow imprime estes dados na área do endereço, que aparece pela janela do envelope.

from?

Remetente, impresso em uma linha acima do destinatário. É para onde os Correios devolvem a correspondência quando não conseguem entregar, e para onde vai o aviso de recebimento (return_receipt). Se você não enviar, usamos o remetente padrão da conta, definido no painel em Configurações > Empresa.

document*||

O conteúdo a imprimir, em JSON. Escolha a forma pelo campo type: url (até 10 MB), upload (um arquivo enviado antes com POST /v1/uploads, até 10 MB) ou base64 (até 3 MB). Para enviar o arquivo do PDF junto com a requisição, use multipart/form-data em vez de JSON (campo file, até 4 MB). O PDF precisa ser A4 em retrato e caber em 6 folhas. Veja o guia Documento e área do endereço.

color?boolean

true imprime em cores. false imprime em preto e branco: um PDF colorido sai em tons de cinza. A impressão colorida tem acréscimo por página impressa (cada lado impresso conta como uma página).

Padrãofalse
double_sided?boolean

true imprime frente e verso: cada folha leva duas páginas do documento, então a correspondência usa menos folhas e custa menos. false imprime só a frente de cada folha.

Padrãofalse
address_placement?string

Onde a CartaFlow imprime o endereço do destinatário.

Valores possíveis

  • first_page: Na área do endereço da primeira página do seu documento (90 x 45 mm, a 20 mm da esquerda e 45 mm do topo). Essa área precisa estar em branco no seu PDF. Padrão.
  • extra_page: Num lado só dele, o primeiro, que aparece pela janela do envelope. Use quando o seu layout ocupa a área do endereço. Ele ocupa um lado que ficaria em branco, quando há um: o verso da primeira página, só frente, ou o lado que sobra, em frente e verso com número ímpar de páginas. Em frente e verso com número par de páginas, entra uma folha a mais no início. O endereço nunca é cobrado.
Padrão"first_page"
Valores"first_page""extra_page"
postal_services?array<>

Serviços adicionais dos Correios, cada um com o próprio acréscimo no preço (uma linha em price). Sem este campo, ou com [], a correspondência vai como carta simples, sem rastreio depois da postagem. return_receipt e restricted_delivery só funcionam junto com registered; sem ele, a API responde 422 com requires_registered. Em multipart/form-data, repita o campo postal_services[] uma vez para cada serviço.

Valores possíveis

  • registered: Carta registrada: a correspondência é postada com registro nos Correios e recebe um código de rastreio, que aparece em tracking_code quando ela é postada.
  • return_receipt: Aviso de recebimento (AR): os Correios devolvem um comprovante assinado por quem recebeu a correspondência ao remetente impresso no envelope. Exige registered.
  • restricted_delivery: Mão própria (MP): os Correios entregam só para a pessoa cujo nome está no envelope. Exige registered.
Padrão[]
send_date?string

Agenda o envio para uma data, no formato AAAA-MM-DD, de amanhã até 180 dias à frente (horário de Brasília). A correspondência é validada agora, mas só é cobrada na data, às 06:00: nesse momento o saldo precisa cobrir o preço, senão ela é cancelada com cancellation_reason: insufficient_balance. Até lá ela fica em scheduled e pode ser cancelada sem custo. Para enviar agora, não envie este campo.

Formatodate
reference?string

Seu identificador para esta correspondência, como o número da fatura ou o id do cliente no seu sistema. Aparece no painel e pode ser usado como filtro nas listagens. Não precisa ser único. Até 100 caracteres.

Tamanholength <= 100
metadata?

Pares chave-valor para guardar dados seus junto do objeto, como o id do cliente ou do contrato. Voltam em todas as respostas e webhooks e nunca são impressos. Até 20 chaves; chaves com até 40 caracteres e valores em texto com até 500 caracteres. Não guarde dados sensíveis, como senhas ou números de cartão.

Camposproperties <= 20

Corpo da resposta

O preço e o endereço completo.

application/json
  1. response

O resultado de uma simulação: o preço da correspondência, no plano atual da conta, e o endereço completo como seria impresso. Nada é criado, cobrado ou guardado. O valor cobrado de verdade é o do momento da cobrança.

object*string

Tipo do objeto. Sempre quote.

plan*string

O plano usado no cálculo.

Valores possíveis

  • pay_as_you_go: Avulso. Sem mensalidade, preço por envio mais alto.
  • essential: Essencial.
  • professional: Profissional.
  • scale: Escala.
  • enterprise: Enterprise. Contrato de 12 meses com volume mensal combinado.
Valores"pay_as_you_go""essential""professional""scale""enterprise"
to*

O destinatário completo, já com os campos preenchidos a partir do CEP. Confira antes de enviar.

pages*integer

Páginas do documento.

sheets*integer

Folhas que a correspondência usaria.

price*

O preço de um envio, linha por linha. Não depende do destino: o preço é o mesmo para qualquer CEP do Brasil. Os valores dos exemplos são ilustrativos; o preço real depende do plano da conta.

curl -X POST "https://api.cartaflow.com.br/v1/letters/quote" \  -H "Authorization: Bearer $CARTAFLOW_API_KEY" \  -H "Content-Type: application/json" \  -d '{  "to": {    "name": "Destinatário Exemplo",    "postal_code": "01001-000",    "number": "128",    "complement": "Ap. 52"  },  "document": {    "type": "url",    "url": "https://arquivos.exemplo.com.br/faturas/2026-10-0042.pdf"  },  "color": true}'
{  "object": "quote",  "plan": "essential",  "to": {    "name": "Destinatário Exemplo",    "street": "Praça da Sé",    "number": "128",    "complement": "Ap. 52",    "neighborhood": "Sé",    "city": "São Paulo",    "state": "SP",    "postal_code": "01001-000"  },  "pages": 2,  "sheets": 2,  "price": {    "currency": "BRL",    "total": 1135,    "items": [      {        "type": "base",        "quantity": 1,        "unit_amount": 990,        "amount": 990      },      {        "type": "additional_sheets",        "quantity": 1,        "unit_amount": 75,        "amount": 75      },      {        "type": "color",        "quantity": 2,        "unit_amount": 35,        "amount": 70      }    ]  }}