Criar uma correspondência
Envia um documento para impressão e postagem.
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.
Idempotency-Key?stringUm valor único por operação, como o id da fatura no seu sistema ou um UUID. Se você repetir a requisição com a mesma chave em até 24 horas, a API devolve a resposta da primeira vez em vez de criar outro objeto. Recomendado em todo POST. Até 255 caracteres.
length <= 255Dois 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 <= 20A correspondência foi criada. Status received (já cobrada) ou scheduled (agendada, cobrada na data do envio).
application/json- response
Uma correspondência física: um documento impresso, envelopado e postado pela CartaFlow para um endereço no Brasil.
id*stringIdentificador único da correspondência. Sempre começa com ltr_.
^ltr_[A-Za-z0-9]+$object*stringTipo do objeto. Sempre letter.
status*stringEm que etapa a correspondência está. Ela só avança, nunca volta: scheduled (só quando agendada), received, in_production, printed, posted. De scheduled ou received ela pode ir para canceled; de received, in_production ou printed, para failed. Uma reimpressão na produção não muda o status.
Valores possíveis
scheduled: A correspondência foi validada e espera a data desend_date. Ainda não foi cobrada. Na data, às 06:00 de Brasília, a CartaFlow debita o saldo e a correspondência passa parareceived. Se o saldo não cobrir o preço, ela vai paracanceled. Pode ser cancelada sem custo.received: A CartaFlow validou o documento e o endereço, cobrou o envio do seu saldo e colocou a correspondência na fila de produção. Ainda pode ser cancelada, e o valor volta para o saldo.in_production: A correspondência entrou em um lote de impressão. A partir daqui ela não pode mais ser cancelada.printed: A correspondência foi impressa, dobrada e colocada no envelope. O próximo passo é a postagem.posted: A correspondência foi entregue aos Correios. A partir daqui a entrega segue o serviço postal, e a CartaFlow não recebe novas informações sobre ela. Uma correspondência registrada traz o código de rastreio dos Correios emtracking_code.canceled: O envio foi cancelado antes da produção e nada foi impresso.cancellation_reasondiz o motivo: você cancelou, ou o saldo não cobria uma correspondência agendada na data do envio. Se havia cobrança, o valor voltou para o saldo.failed: Algo deu errado na produção e a correspondência não será postada.failure_reasondiz o motivo. O valor voltou para o saldo automaticamente.
"scheduled""received""in_production""printed""posted""canceled""failed"to*Destinatário.
from*Remetente impresso acima do destinatário: o que você enviou ou o remetente padrão da conta.
document*||De onde veio o conteúdo da correspondência. O PDF final está em preview_url.
color*booleantrue quando a impressão é colorida.
double_sided*booleantrue quando a impressão é frente e verso.
address_placement*stringOnde o endereço é impresso.
Valores possíveis
first_page: Na área do endereço da primeira página do documento.extra_page: Num lado só dele, o primeiro, sem custo.
"first_page""extra_page"postal_services*array<>Os serviços adicionais dos Correios escolhidos na criação. Sempre uma lista: [] numa carta simples.
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.
pages*integerNúmero de páginas do seu documento, sem contar o lado do endereço com extra_page.
1 <= valuesheets*integerFolhas de papel no envelope. Só frente, é pages. Em frente e verso, é metade de pages arredondada para cima com first_page, e metade de pages arredondada para baixo, mais 1, com extra_page. Máximo de 6, contando a folha que o endereço acrescenta, que não é cobrada.
1 <= value <= 6price*O preço da correspondência. É cobrado do saldo na criação ou, se ela foi agendada, na data do envio (com o plano da conta nesse dia). Volta para o saldo se a correspondência for cancelada depois da cobrança ou falhar na produção.
send_date*|A data agendada para o envio, AAAA-MM-DD. null quando a correspondência foi enviada na hora.
datecancellation_reason*|Por que a correspondência foi cancelada. null quando ela não está cancelada.
Valores possíveis
requested: Você cancelou, pela API ou pelo painel.insufficient_balance: Era uma correspondência agendada e, na data do envio, o saldo não cobria o preço. Nada foi cobrado.
"requested""insufficient_balance"nullfailure_reason*|Por que a correspondência falhou na produção. null quando ela não está em failed. Quando ela falha, o valor volta para o saldo automaticamente.
Valores possíveis
unprintable_document: O arquivo passou pela validação, mas não pôde ser impresso como está.damaged_in_production: A correspondência foi danificada na impressão, na dobra ou no envelopamento e não pôde ser refeita.refused_by_carrier: Os Correios recusaram a correspondência na postagem.other: Outro motivo. Fale com o suporte da CartaFlow pelo painel para saber os detalhes.
"unprintable_document""damaged_in_production""refused_by_carrier""other"nulltracking_code*|O código de rastreio dos Correios de uma correspondência registrada (postal_services com registered), como RA123456785BR. Preenchido quando ela é postada. null numa carta simples, que não tem rastreio, e antes da postagem.
preview_url*|Link para o PDF final, exatamente como será impresso, já com o endereço. O link vale por 60 minutos: consulte a correspondência de novo para receber um link novo. O arquivo fica disponível por pelo menos 90 dias depois da criação (ou depois da data do envio, numa correspondência agendada); null só depois desse prazo, se o arquivo deixar de estar disponível. Numa correspondência em preto e branco, o PDF mantém as cores do original: a conversão para tons de cinza acontece na impressão.
urireference*|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. null quando você não enviou.
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. Objeto vazio {} quando você não enviou.
properties <= 20status_transitions*Quando a correspondência chegou a cada status. null para os status pelos quais ela ainda não passou. Uma correspondência agendada nasce em scheduled, no momento de created_at.
created_at*stringQuando a correspondência foi criada e recebida, em UTC.
date-timecurl -X POST "https://api.cartaflow.com.br/v1/letters" \ -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, "reference": "fatura-2026-10-0042", "metadata": { "customer_id": "1842" }}'{ "id": "ltr_8Kq2wX4mN7pR", "object": "letter", "status": "received", "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" }, "from": { "name": "Exemplo Serviços Ltda.", "street": "Avenida Exemplo", "number": "1000", "complement": "Sala 301", "neighborhood": "Bela Vista", "city": "São Paulo", "state": "SP", "postal_code": "01310-100" }, "document": { "type": "url", "url": "https://arquivos.exemplo.com.br/faturas/2026-10-0042.pdf", "variables": null }, "color": true, "double_sided": false, "address_placement": "first_page", "postal_services": [], "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 } ] }, "send_date": null, "cancellation_reason": null, "failure_reason": null, "tracking_code": null, "preview_url": "https://files.cartaflow.com.br/previews/ltr_8Kq2wX4mN7pR.pdf?expires=1760369400&signature=9c1f2a7d", "reference": "fatura-2026-10-0042", "metadata": { "customer_id": "1842" }, "status_transitions": { "received_at": "2026-10-13T14:20:00Z", "in_production_at": null, "printed_at": null, "posted_at": null, "canceled_at": null, "failed_at": null }, "created_at": "2026-10-13T14:20:00Z"}