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.
- Agendada
scheduled- Cancelada
canceled
- Cancelada
- Recebida
received- Cancelada
canceled - Falhou
failed
- Cancelada
- Em produção
in_production- Falhou
failed
- Falhou
- Impressa
printed- Falhou
failed
- Falhou
- Postada
posted
| Status | O que significa | Final | Cancelável |
|---|---|---|---|
scheduledAgendada | A 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ão | Sim |
receivedRecebida | 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. | Não | Sim |
in_productionEm produção | A correspondência entrou em um lote de impressão. A partir daqui ela não pode mais ser cancelada. | Não | Não |
printedImpressa | A correspondência foi impressa, dobrada e colocada no envelope. O próximo passo é a postagem. | Não | Não |
postedPostada | 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 em tracking_code. | Sim | Não |
canceledCancelada | O 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. | Sim | Não |
failedFalhou | Algo 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. | Sim | Nã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.
{
"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 acreated_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_atsó é preenchido quando a correspondência foi cancelada, efailed_atquando 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.
| Evento | Quando é enviado |
|---|---|
letter.scheduled | Uma correspondência foi agendada com send_date. Ainda não foi cobrada. |
letter.received | Uma 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_production | A correspondência entrou em um lote de impressão e não pode mais ser cancelada. |
letter.printed | A correspondência foi impressa e envelopada. |
letter.posted | A correspondência foi entregue aos Correios. É o último evento de uma correspondência enviada. |
letter.canceled | A 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.failed | A correspondência falhou na produção e não será postada. O valor voltou para o saldo automaticamente. Veja failure_reason. |
letter.updated | A 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 tiporefund. - 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ódigoletter_not_cancelable, como também para uma correspondência empostedoufailed. - 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.
| Valor | O que aconteceu |
|---|---|
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. 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:
| Status | O que pode mudar |
|---|---|
scheduled | Tudo: 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. |
received | Só 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 diante | Nada. |
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.
| Valor | O que aconteceu |
|---|---|
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 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.
| Valor | Serviço | O que muda |
|---|---|---|
registered | Carta registrada | A correspondência é postada com registro e recebe um código de rastreio dos Correios, 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. |
{
"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_receipterestricted_deliverysó funcionam junto comregistered. Sem ele, a API responde 422 comrequires_registerede nada é criado.- O aviso de recebimento volta para o remetente: o endereço que você enviou em
fromou, 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[]=registeredepostal_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_codetraz o código de rastreio dos Correios, comoRA123456785BR, 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_codevalenull.
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.
| Campo | O que traz |
|---|---|
id | Identificador único, começa com ltr_. |
status | A etapa atual. Veja a tabela de status acima. |
to e from | Destinatário e remetente, completos, como são impressos. |
document | De onde veio o conteúdo: url, upload (multipart ou POST /v1/uploads) ou base64. |
color, double_sided, address_placement | Como a correspondência é impressa. Veja Documento e área do endereço. |
postal_services | Os serviços dos Correios escolhidos, ou [] numa carta simples. |
pages e sheets | Páginas do seu documento e folhas de papel impressas. |
price | O preço, linha por linha. Veja Preços e saldo. |
send_date | A data agendada, ou null quando a correspondência foi enviada na hora. |
cancellation_reason | O motivo do cancelamento, ou null. |
failure_reason | O motivo da falha na produção, ou null. |
tracking_code | O código de rastreio dos Correios de uma carta registrada já postada, ou null. |
preview_url | Link para o PDF final, exatamente como será impresso. |
reference e metadata | Seus identificadores e dados. Veja Metadados e referência. |
status_transitions | Quando a correspondência chegou a cada status. |
created_at | Quando a correspondência foi criada. |