Calcular o preço
Simula uma correspondência sem criá-la.
apiKeyAuthorizationBearer <chave de API>Chave de API no cabeçalho Authorization: Bearer cf_live_.... Crie e revogue chaves no painel, em Desenvolvedores > Chaves de API.
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.
- 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?booleantrue 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).
falsedouble_sided?booleantrue 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.
falseaddress_placement?stringOnde 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.
"first_page""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 emtracking_codequando 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. Exigeregistered.restricted_delivery: Mão própria (MP): os Correios entregam só para a pessoa cujo nome está no envelope. Exigeregistered.
[]send_date?stringAgenda 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.
datereference?stringSeu 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.
length <= 100metadata?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.
properties <= 20O preço e o endereço completo.
application/json- 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*stringTipo do objeto. Sempre quote.
plan*stringO 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.
"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*integerPáginas do documento.
sheets*integerFolhas 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 } ] }}