Documentação

Correspondências e status

O caminho de uma correspondência, do pedido até a entrega aos Correios, e como acompanhar cada etapa.

Uma correspondência é um documento que a CartaFlow imprime, coloca no envelope e posta nos Correios para um endereço no Brasil. Você cria a correspondência com POST /v1/letters e ela passa por uma sequência fixa de status até ser postada.

O ciclo de uma correspondência

A correspondência só avança. Ela começa em scheduled quando você agenda com send_date, ou direto em received quando envia na hora. Depois segue para in_production, printed e posted. Enquanto estiver em scheduled ou received, ela ainda pode ser cancelada. Se algo der errado na produção, ela vai para failed e o valor volta para o saldo.

  1. Agendadascheduled
    • Canceladacanceled
  2. Recebidareceived
    • Canceladacanceled
    • Falhoufailed
  3. Em produçãoin_production
    • Falhoufailed
  4. Impressaprinted
    • Falhoufailed
  5. Postadaposted
StatusO que significaFinalCancelável
scheduledAgendadaA correspondência foi validada e espera a data de send_date. Ainda não foi cobrada. Na data, às 06:00 de Brasília, a CartaFlow debita o saldo e a correspondência passa para received. Se o saldo não cobrir o preço, ela vai para canceled. Pode ser cancelada sem custo.NãoSim
receivedRecebidaA 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.NãoSim
in_productionEm produçãoA correspondência entrou em um lote de impressão. A partir daqui ela não pode mais ser cancelada.NãoNão
printedImpressaA correspondência foi impressa, dobrada e colocada no envelope. O próximo passo é a postagem.NãoNão
postedPostadaA 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 em tracking_code.SimNão
canceledCanceladaO envio foi cancelado antes da produção e nada foi impresso. cancellation_reason diz 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.SimNão
failedFalhouAlgo deu errado na produção e a correspondência não será postada. failure_reason diz o motivo. O valor voltou para o saldo automaticamente.SimNão

Um status nunca volta atrás. Se uma correspondência precisa ser impressa de novo na produção, por exemplo porque o papel enroscou na impressora, ela entra em outro lote de impressão e continua no mesmo status.

Novos status podem surgir

Trate um status que você não conhece como uma etapa em andamento. A CartaFlow pode criar status novos sem mudar a versão da API, mas nunca muda o significado de um status existente. Veja Versões e compatibilidade.

Quando cada etapa aconteceu

O campo status_transitions guarda o momento em que a correspondência chegou a cada status, em UTC. Os status pelos quais ela ainda não passou valem null.

status_transitions de uma correspondência postada
{
  "received_at": "2026-10-13T14:20:00Z",
  "in_production_at": "2026-10-13T21:00:00Z",
  "printed_at": "2026-10-14T10:42:00Z",
  "posted_at": "2026-10-14T16:05:00Z",
  "canceled_at": null,
  "failed_at": null
}
  • received_at é o momento da cobrança. Numa correspondência enviada na hora, é igual a created_at. Numa correspondência agendada, é a data do envio.
  • posted_at é o momento em que a correspondência foi entregue aos Correios. É o último registro de uma correspondência enviada.
  • canceled_at só é preenchido quando a correspondência foi cancelada, e failed_at quando ela falhou na produção.

Como acompanhar

Use webhooks. A CartaFlow faz um POST para a sua URL a cada mudança de status, e quando a correspondência é alterada no painel antes da produção (letter.updated), com a correspondência inteira no corpo. Você não precisa consultar a API depois.

EventoQuando é enviado
letter.scheduledUma correspondência foi agendada com send_date. Ainda não foi cobrada.
letter.receivedUma correspondência foi cobrada e entrou na fila de produção: logo depois de criada ou, se foi agendada, na data do envio. Vale para correspondências criadas pela API e pelo painel.
letter.in_productionA correspondência entrou em um lote de impressão e não pode mais ser cancelada.
letter.printedA correspondência foi impressa e envelopada.
letter.postedA correspondência foi entregue aos Correios. É o último evento de uma correspondência enviada.
letter.canceledA correspondência foi cancelada. Veja cancellation_reason: requested quando você cancelou, insufficient_balance quando uma correspondência agendada não pôde ser cobrada na data.
letter.failedA correspondência falhou na produção e não será postada. O valor voltou para o saldo automaticamente. Veja failure_reason.
letter.updatedA correspondência foi alterada no painel antes da produção, sem mudar de status: data de envio, endereço, arquivo, variáveis, impressão, serviços dos Correios ou referência. data traz a correspondência como ficou. Se a mudança alterou o preço de uma correspondência agendada, price traz o novo valor.

Se você não puder receber webhooks, consulte a correspondência com GET /v1/letters/{letter_id}. As etapas de produção e postagem levam horas, então consultar mais de uma vez por hora não traz informação nova. Para muitas correspondências, use GET /v1/letters com o filtro status em vez de consultar uma a uma.

curl "https://api.cartaflow.com.br/v1/letters/ltr_8Kq2wX4mN7pR" \
  -H "Authorization: Bearer $CARTAFLOW_API_KEY"

Cancelar

Você pode cancelar uma correspondência com POST /v1/letters/{letter_id}/cancel enquanto ela estiver em scheduled ou received. Nada é impresso.

  • Em received, a correspondência já foi cobrada. O valor volta para o saldo na hora, como uma movimentação do tipo refund.
  • Em scheduled, nada foi cobrado ainda, então não há valor a devolver.
  • A partir de in_production, a correspondência já está em um lote de impressão. A API responde 409 com o código letter_not_cancelable, como também para uma correspondência em posted ou failed.
  • Cancelar uma correspondência que já está cancelada devolve a mesma correspondência, sem erro. Você pode repetir a chamada com segurança.
curl -X POST "https://api.cartaflow.com.br/v1/letters/ltr_8Kq2wX4mN7pR/cancel" \
  -H "Authorization: Bearer $CARTAFLOW_API_KEY"

Por que uma correspondência foi cancelada

Toda correspondência cancelada traz o motivo em cancellation_reason. Nas outras, o campo vale null.

ValorO que aconteceu
requestedVocê cancelou, pela API ou pelo painel.
insufficient_balanceEra uma correspondência agendada e, na data do envio, o saldo não cobria o preço. Nada foi cobrado. Veja Agendar envios.

Alterar antes da produção

Pela API, uma correspondência não muda depois de criada: para mudar algo, cancele e crie outra. No painel, em Envios, quem pode enviar correspondências altera uma correspondência antes da produção:

StatusO que pode mudar
scheduledTudo: data de envio (ou enviar na hora, quando ela é cobrada e vai para received), endereço, arquivo, variáveis, impressão, serviços dos Correios e referência. Sem custo; o preço é calculado de novo.
receivedSó o endereço e a referência, que não mudam o preço. Para mudar o resto, cancele (o valor volta para o saldo) e crie outra.
in_production em dianteNada.

Cada alteração gera o evento letter.updated, com a correspondência como ficou e o mesmo status. Enviar na hora uma correspondência agendada gera letter.received.

Quando a produção falha

Se uma correspondência não pode sair, porque o arquivo não imprime, porque ela foi danificada e não pode ser refeita ou porque os Correios recusaram a postagem, ela vai para failed, um status final, e o valor volta para o saldo automaticamente, como uma movimentação do tipo refund. Você recebe o evento letter.failed.

O motivo vem em failure_reason. Nas outras correspondências, o campo vale null.

ValorO que aconteceu
unprintable_documentO arquivo passou pela validação, mas não pôde ser impresso como está.
damaged_in_productionA correspondência foi danificada na impressão, na dobra ou no envelopamento e não pôde ser refeita.
refused_by_carrierOs Correios recusaram a correspondência na postagem.
otherOutro motivo. Fale com o suporte pelo painel para saber os detalhes.

Para enviar de novo, crie uma nova correspondência. Erros que aparecem antes da cobrança, como um PDF fora do padrão ou um CEP que não existe, nunca chegam a failed: a API responde 422 na criação e nada é cobrado.

Serviços dos Correios

Sem nenhuma escolha, a correspondência vai como carta simples. Com o campo postal_services, você escolhe serviços adicionais dos Correios. Cada um tem acréscimo no preço, com uma linha própria em price. Veja Preços e saldo.

ValorServiçoO que muda
registeredCarta registradaA correspondência é postada com registro e recebe um código de rastreio dos Correios, que aparece em tracking_code quando ela é postada.
return_receiptAviso de recebimento (AR)Os Correios devolvem um comprovante assinado por quem recebeu a correspondência ao remetente impresso no envelope. Exige registered.
restricted_deliveryMão própria (MP)Os Correios entregam só para a pessoa cujo nome está no envelope. Exige registered.
Carta registrada com aviso de recebimento
{
  "to": { "name": "Destinatário Exemplo", "postal_code": "01001-000", "number": "128" },
  "document": { "type": "url", "url": "https://arquivos.exemplo.com.br/notificacoes/contrato-5531.pdf" },
  "postal_services": ["registered", "return_receipt"],
  "reference": "contrato-5531"
}
  • return_receipt e restricted_delivery só funcionam junto com registered. Sem ele, a API responde 422 com requires_registered e nada é criado.
  • O aviso de recebimento volta para o remetente: o endereço que você enviou em from ou, se não enviou, o remetente padrão da conta. Confira esse endereço antes de usar o AR. A CartaFlow não recebe nem digitaliza o aviso.
  • Em multipart/form-data, repita o campo para cada serviço: postal_services[]=registered e postal_services[]=return_receipt.
  • A correspondência devolve a escolha em postal_services, sempre como lista: [] numa carta simples.

Depois da postagem

Em posted, a correspondência está com os Correios, e a entrega segue o serviço postal. A CartaFlow não recebe novas informações sobre ela, então posted é o último status de uma correspondência enviada. O prazo de entrega depende da modalidade postal e da distância até o destino, e não é garantido pela CartaFlow.

  • Carta registrada: tracking_code traz o código de rastreio dos Correios, como RA123456785BR, a partir da postagem. Use esse código para acompanhar a entrega nos Correios.
  • Carta simples: não tem rastreio depois da postagem, e tracking_code vale null.

Quando os Correios não conseguem entregar, a correspondência volta para o endereço do remetente, impresso acima do destinatário. É o endereço que você enviou em from ou, se não enviou, o remetente padrão da conta. Veja Endereços no Brasil.

A CartaFlow não é ligada aos Correios

A CartaFlow imprime, envelopa e posta as correspondências nos Correios, como qualquer cliente dos Correios. Ela não faz parte dos Correios.

O objeto Correspondência

Os campos principais de uma correspondência. A lista completa, com o tipo e a descrição de cada campo, está em Consultar uma correspondência.

CampoO que traz
idIdentificador único, começa com ltr_.
statusA etapa atual. Veja a tabela de status acima.
to e fromDestinatário e remetente, completos, como são impressos.
documentDe onde veio o conteúdo: url, upload (multipart ou POST /v1/uploads) ou base64.
color, double_sided, address_placementComo a correspondência é impressa. Veja Documento e área do endereço.
postal_servicesOs serviços dos Correios escolhidos, ou [] numa carta simples.
pages e sheetsPáginas do seu documento e folhas de papel impressas.
priceO preço, linha por linha. Veja Preços e saldo.
send_dateA data agendada, ou null quando a correspondência foi enviada na hora.
cancellation_reasonO motivo do cancelamento, ou null.
failure_reasonO motivo da falha na produção, ou null.
tracking_codeO código de rastreio dos Correios de uma carta registrada já postada, ou null.
preview_urlLink para o PDF final, exatamente como será impresso.
reference e metadataSeus identificadores e dados. Veja Metadados e referência.
status_transitionsQuando a correspondência chegou a cada status.
created_atQuando a correspondência foi criada.

Nesta página