Rastreo público
Comparte un enlace opaco para que tu comprador consulte el paquete sin cuenta y sin exponer datos personales.
El rastreo público es para tu comprador, no para tus sistemas. No requiere autenticación y devuelve una vista con datos personales reducidos.
Toma el enlace del envío
El token se emite al comprar la guía. Un envío en DRAFT trae publicTrackingToken en null. Lee el token o la URL desde cualquiera de estas fuentes:
| Fuente | Campos |
|---|---|
GET /v1/shipments/:id |
publicTrackingToken y trackingUrl |
POST /v1/bulk/shipments/fetch |
trackingUrl |
Webhook shipment.label.created |
trackingUrl |
https://app.sendit.mx/track/2f68c611-30af-4a86-9cde-793413af5f65
GET /v1/shipments omite los dos a propósito: una credencial de portador no va en una colección que se puede recorrer. Para armar un botón de “compartir rastreo” desde una fila del listado, consulta el envío por su id.
No construyas la URL a partir del número de rastreo, y no existe una búsqueda pública por número y nombre. Si el destinatario pierde el enlace, vuelve a compartirlo desde tu sistema.
El token es una credencial de portador. Quien tenga el enlace puede consultar el estado.
Consulta el estado con el token
curl https://api.sendit.mx/v1/tracking/public/2f68c611-30af-4a86-9cde-793413af5f65
{
"success": true,
"data": {
"object": "public_tracking",
"trackingNumber": "DHL123456789MX",
"carrierCode": "DHL",
"status": "IN_TRANSIT",
"estimatedDeliveryDate": "2026-08-04T00:00:00.000Z",
"actualDeliveryDate": null,
"destination": {
"city": "Monterrey",
"state": "Nuevo León"
},
"events": [
{
"eventCode": "IN_TRANSIT",
"description": "En tránsito",
"occurredAt": "2026-08-01T15:30:00.000Z",
"isException": false,
"location": {
"city": "San Luis Potosí",
"state": "San Luis Potosí",
"country": "MX"
}
}
],
"branding": null
}
}
La respuesta no incluye nombre, calle, colonia, código postal, configuración de la organización ni precios. Las respuestas se pueden cachear 60 segundos.
El location de cada evento trae city, state y country. Cada uno puede ser null. No lleva postalCode: se retira a propósito, así que no lo modeles.
Lee el estado con el vocabulario del envío
El campo status usa los estados del envío, no los del rastreador. Los valores posibles son DRAFT, PENDING, LABEL_PURCHASED, READY_FOR_PICKUP, PICKED_UP, IN_TRANSIT, OUT_FOR_DELIVERY, DELIVERED, RETURNED, FAILED y CANCELLED.
Un enlace compartido casi siempre arranca en LABEL_PURCHASED, porque el token nace al comprar la guía. Trata ese estado de forma explícita en lugar de dejarlo caer en tu rama por defecto. UNKNOWN y PRE_TRANSIT son de rastreadores y nunca aparecen aquí.
Muestra tu marca cuando la habilites
Activa publicTrackingPage en la marca de tus notificaciones. Viene apagada por defecto. Cuando está activa, la respuesta puede agregar solo estos campos:
{
"branding": {
"displayName": "Tienda Ejemplo",
"logoUrl": "https://cdn.example.com/logo.png",
"accentColor": "#1D4ED8",
"footer": "Gracias por tu compra"
}
}
Si no habilitas la página con marca, branding es null completo. El footerText que guardaste llega aquí como footer. El logoUrl y el accentColor se vuelven a validar en esta respuesta y llegan en null si el valor guardado no pasa. El replyTo nunca es público.
Invalida un enlace filtrado
Si el enlace llegó a la persona equivocada, emite uno nuevo:
curl -X POST https://api.sendit.mx/v1/shipments/clxq1w2e3r4t5y6u7i8o9p0a/tracking-token/rotate \
-H "X-API-Key: sk_live_..."
{
"success": true,
"data": {
"object": "public_tracking_token",
"shipmentId": "clxq1w2e3r4t5y6u7i8o9p0a",
"publicTrackingToken": "6f1c2b90-1f0a-4f2e-9a3f-6b7c8d9e0f11",
"trackingUrl": "/v1/tracking/public/6f1c2b90-1f0a-4f2e-9a3f-6b7c8d9e0f11",
"rotatedAt": "2026-08-04T18:04:11.000Z"
}
}
Necesitas rol OPERATOR o superior. Las llaves de API requieren el alcance shipments:write.
Cancelar una guía borra el token. Solo una compra nueva emite otro.
Protege el token
- Comparte el enlace solo con el destinatario.
- No envíes el token a herramientas de analítica.
- No lo incluyas en datos de referencia hacia sitios de terceros.
- Genera enlaces solo desde los recursos que devuelve la API.
Maneja los errores
| Código | Cuándo ocurre | Cómo resolverlo |
|---|---|---|
404 RESOURCE_NOT_FOUND |
El token no existe o ya no es válido | Solicita al comercio que vuelva a compartir el enlace |
429 RATE_LIMIT_EXCEEDED |
Excediste el límite del tráfico público | Respeta Retry-After antes de reintentar |
Usa solo envíos de producción
El rastreo público funciona únicamente con envíos de producción. Consulta los envíos de modo de prueba con endpoints autenticados.