Rastreamento por transportadora
API de rastreamento dos Correios
Consulte objetos PAC e SEDEX por código e receba status, eventos e datas em JSON padronizado — sem captcha, sem scraping e sem manter um robô apontado para a página dos Correios.
Formato do código
Objetos registrados dos Correios usam duas letras, nove dígitos e o sufixo BR. PAC e SEDEX compartilham o mesmo formato, então a API distingue o serviço pelo próprio objeto — você não precisa informar nada além do código.
- AA123456789BR
- EX000000000BR (exemplo fictício)
Como a consulta acontece
Você chama GET /v1/track/{codigo} e a API identifica os Correios pelo formato do código. A resposta traz o status atual, o histórico de eventos em ordem cronológica e os campos service e delivered_at quando a transportadora os informa.
Se o seu fluxo já sabe que a encomenda é dos Correios, use a rota explícita GET /v1/track/correios/{codigo}. Ela evita a etapa de detecção e deixa a intenção registrada no log da sua aplicação.
O que você deixa de manter
Raspar a página dos Correios significa lidar com captcha, bloqueio por IP, mudança de layout e indisponibilidade intermitente. Cada um desses problemas vira um alerta de madrugada e uma correção de emergência.
A PacoteVício concentra esse trabalho: o parâmetro retry_level define quanto tempo a consulta insiste antes de desistir (low 10s, medium 20s, high 45s), e falhas temporárias da transportadora não são cobradas da sua cota.
Status normalizados e eventos
O campo status assume um de dez valores — pending, collected, in_transit, out_for_delivery, available_for_pickup, tax, delivered, exception, returned e unknown — independentemente do texto que os Correios devolvem. O status do topo é o do evento mais recente, e delivered_at tem precedência quando está preenchido.
Cada evento também guarda courier_status_code e courier_status_label com o valor bruto dos Correios. Use esses campos para exibir ou depurar, nunca para regra de negócio: eles mudam sem aviso.
Primeira consulta
Envie o código com a transportadora explícita na rota. A alternativa é GET /v1/track/{codigo}, que detecta a transportadora pelo formato.
curl "https://api.pacotevicio.dev/v1/track/correios/EX000000000BR" \
--header "X-API-Key: SUA_CHAVE_DE_API" {
"tracking_code": "EX000000000BR",
"courier": "correios",
"status": "out_for_delivery",
"status_updated_at": "2026-10-20T11:42:00Z",
"service": "SEDEX",
"package_description": null,
"origin": null,
"destination": null,
"estimated_delivery_date": null,
"estimated_delivery": null,
"delivered_at": null,
"recipient": null,
"events": [
{
"timestamp": "2026-10-18T14:05:00Z",
"status": "collected",
"description": "Objeto postado",
"location": {
"country": "BR",
"state": "SP",
"city": "Franca",
"facility": "Agência dos Correios"
},
"destination": null,
"courier_status_code": "PO",
"courier_status_label": "Objeto postado",
"detail": null,
"comment": null
},
{
"timestamp": "2026-10-19T22:10:00Z",
"status": "in_transit",
"description": "Objeto em trânsito",
"location": {
"country": "BR",
"state": "SP",
"city": "Ribeirão Preto",
"facility": "Centro de Tratamento"
},
"destination": null,
"courier_status_code": "RO",
"courier_status_label": "Objeto em trânsito",
"detail": null,
"comment": null
},
{
"timestamp": "2026-10-20T11:42:00Z",
"status": "out_for_delivery",
"description": "Saiu para entrega ao destinatário",
"location": {
"country": "BR",
"state": "SP",
"city": "Campinas",
"facility": "Unidade de Distribuição"
},
"destination": null,
"courier_status_code": "BDE",
"courier_status_label": "Saiu para entrega",
"detail": null,
"comment": null
}
]
} O exemplo usa dados fictícios. Os campos seguem o contrato de GET /v1/track/{codigo}.
Perguntas frequentes
Preciso de alguma credencial dos Correios?
Não. A PacoteVício consulta os Correios pela sua própria integração. Você só precisa da chave da API, enviada no cabeçalho X-API-Key.
A API funciona para PAC e SEDEX?
Sim. PAC, SEDEX e demais objetos registrados usam o mesmo formato de código (duas letras, nove dígitos e BR). O campo service indica o serviço quando os Correios o informam.
O código pode ser enviado em minúsculas?
O parâmetro aceita letras, números e hífen, de 1 a 40 caracteres, sem espaços. Normalize para maiúsculas antes de enviar para manter o mesmo código em cache e em log.
Como saber se o objeto saiu para entrega?
O status normalizado out_for_delivery corresponde ao momento em que o objeto está com o entregador. O evento equivalente também traz courier_status_code e courier_status_label com o texto original dos Correios.