Skip to Content
GuíasCRUD de Guías

Guías

Una guía es el documento central del flujo logístico de TPC. Representa un envío desde que se crea hasta que es entregado o devuelto.


Estados de una guía

SIN_RECOLLECTAR → RECOLECTADO → EN_BODEGA → EN_RUTA → ENTREGADO ↘ DEVOLUCION → DEVOLUCION_ENTREGADO ↘ SINIESTRO (robo/extravío) ↘ DANADA (dañada en tránsito) ANULADA ← (solo desde SIN_RECOLLECTAR) ENTREGADO_LIQUIDADO (post-liquidación)
EstadoDescripción
SIN_RECOLLECTARGuía creada, pendiente de recolección
RECOLECTADORecolectada en bodega del cliente
EN_BODEGAEn bodega TPC, clasificando para despacho
EN_RUTAAsignada a mensajero, en camino al destinatario
ENTREGADOEntregada exitosamente al destinatario
DEVOLUCIONEn proceso de devolución al remitente
DEVOLUCION_ENTREGADODevuelta y entregada al remitente
ANULADACancelada (solo posible en SIN_RECOLLECTAR)
ENTREGADO_LIQUIDADOEntregada y liquidada contablemente
SINIESTRORobada o extraviada — reclamo de seguro abierto (ver módulo Reclamos)
DANADADañada en tránsito, nunca llegó a destino — reclamo de seguro abierto

Una guía que se dañó después de ser entregada conserva su estado ENTREGADO/ENTREGADO_LIQUIDADODANADA solo aplica cuando el paquete nunca llegó a su destino. El flete se sigue facturando normalmente en ambos casos; el reclamo de seguro cubre el valor de la mercadería, por separado.


GET/api/v1/guiasListar guías

Lista todas las guías de tu empresa con soporte de filtros y paginación.

Query params

ParámetroTipoDefaultDescripción
estadostringFiltrar por estado (ver tabla de estados)
fechaDesdeYYYY-MM-DDGuías creadas desde esta fecha (inclusive)
fechaHastaYYYY-MM-DDGuías creadas hasta esta fecha (inclusive, hasta las 23:59:59 hora Guatemala)
pageinteger1Número de página
limitinteger20Resultados por página (máximo 100)

Ejemplos

curl "https://api.tpcxpress.com/api/v1/guias" \ -H "Authorization: Bearer TOKEN"

Respuesta 200

{ "success": true, "data": { "guias": [ { "id": "cluuid123", "numeroGuia": "TPCP123456789", "estado": "EN_RUTA", "esCOD": false, "montoTotal": null, "direccionEntrega": "8va Avenida 12-34 zona 11", "municipioDestino": "Mixco", "destinatario": { "nombre": "Juan Pérez", "telefono": "55551234", "ciudad": "Mixco" }, "tipoServicio": "ESTANDAR", "costoServicio": 30.00, "createdAt": "2026-07-06T14:00:00.000Z", "fechaEntrega": null } ], "meta": { "total": 150, "page": 1, "limit": 20, "totalPages": 8 } } }

POST/api/v1/guiasCrear guía

Crea una nueva guía de envío. Consume 1 crédito si tu empresa no tiene plan APROBADA.

Body

Campos requeridos

CampoTipoDescripción
tipoServicio"ESTANDAR" | "COD"Tipo de servicio de envío
ciudadDestinostring (2–100 chars)Municipio de destino
nombreDestinatariostring (2–150 chars)Nombre completo de quien recibe
telefonoDestinatariostring (7–30 chars)Teléfono de contacto del destinatario
direccionDestinatariostring (5–300 chars)Dirección completa de entrega

Campos opcionales

CampoTipoDescripción
costoProductonumber (positivo)Requerido si tipoServicio = "COD". Valor del producto a cobrar al destinatario
correoDestinatariostring (email)Correo electrónico del destinatario
obsDestinatariostring (máx 500)Instrucciones especiales de entrega
telefonoAlternoDestinatariostring (máx 30)Teléfono alternativo del destinatario
fechaRecoleccionYYYY-MM-DDFecha preferida de recolección. Se interpreta como medianoche en hora de Guatemala (UTC-6).

Datos del remitente — se toman automáticamente de la configuración de tu empresa (nombre, teléfono, ciudad de origen).

Ejemplos

curl -X POST https://api.tpcxpress.com/api/v1/guias \ -H "Authorization: Bearer TOKEN" \ -H "Content-Type: application/json" \ -d '{ "tipoServicio": "ESTANDAR", "ciudadDestino": "Mixco", "nombreDestinatario": "Ana García", "telefonoDestinatario": "55554321", "direccionDestinatario": "8va Avenida 12-34 zona 11", "obsDestinatario": "Llamar 30 min antes de llegar" }'

Respuesta 201

{ "success": true, "data": { "numeroGuia": "TPCE123456789", "estado": "SIN_RECOLLECTAR", "pdfUrl": "https://api.tpcxpress.com/api/v1/guias/TPCE123456789/pdf", "createdAt": "2026-07-06T14:30:00.000Z" } }

El campo pdfUrl apunta al endpoint público de descarga. Requiere tu token en el header Authorization. Ver PDF de guía.


GET/api/v1/guias/{numeroGuia}Detalle

Retorna el detalle completo de una guía, incluyendo datos del destinatario, servicio y todos los timestamps relevantes.

curl https://api.tpcxpress.com/api/v1/guias/TPCP123456789 \ -H "Authorization: Bearer TOKEN"

Respuesta 200

{ "success": true, "data": { "id": "cluuid123", "numeroGuia": "TPCP123456789", "estado": "EN_RUTA", "pdfUrl": "https://api.tpcxpress.com/api/v1/guias/TPCP123456789/pdf", "esCOD": false, "montoTotal": null, "municipioDestino": "Mixco", "destinatario": { "nombre": "Ana García", "correo": "ana@example.com", "telefono": "55554321", "direccion": "8va Avenida 12-34 zona 11", "ciudad": "Mixco", "observaciones": "Llamar 30 min antes de llegar" }, "servicio": { "tipo": "ESTANDAR", "costoEnvio": 30.00, "costoProducto": null, "cantidadPaquetes": "1" }, "timestamps": { "createdAt": "2026-07-06T14:00:00.000Z", "recolectadoEn": "2026-07-06T09:00:00.000Z", "asignadoEn": "2026-07-06T10:30:00.000Z", "fechaProgramada": null, "fechaEntrega": null } } }
CampoDescripción
pdfUrlURL del PDF de la guía — requiere token en Authorization
esCODtrue si es servicio Cobro Contra Entrega
montoTotalMonto a cobrar al destinatario (solo COD)
servicio.costoEnvioCosto del servicio de mensajería (lo que paga la empresa)
timestamps.recolectadoEnCuando TPC recolectó el paquete
timestamps.asignadoEnCuando se asignó a un mensajero
timestamps.fechaEntregaCuando se completó la entrega (null si no entregada)

PATCH/api/v1/guias/{numeroGuia}Editar guía

Edita los datos del destinatario o dirección de una guía. Solo es posible mientras la guía está en estado SIN_RECOLLECTAR.

Una vez que TPC recolecta la guía (estado RECOLECTADO o posterior), los datos del destinatario no pueden modificarse via API. Contacta a soporte para correcciones urgentes.

Body

Al menos un campo es requerido. Solo se actualizan los campos enviados.

CampoTipoDescripción
nombreDestinatariostring (2–150)Nombre del destinatario
telefonoDestinatariostring (7–30)Teléfono principal
telefonoAlternoDestinatariostring (máx 30) | nullTeléfono alternativo
correoDestinatariostring (email) | ""Correo del destinatario
direccionDestinatariostring (5–300)Dirección de entrega
ciudadDestinostring (2–100)Municipio de destino
obsDestinatariostring (máx 500) | nullInstrucciones de entrega

Ejemplo

# Corregir dirección y agregar teléfono alterno curl -X PATCH https://api.tpcxpress.com/api/v1/guias/TPCE123456789 \ -H "Authorization: Bearer TOKEN" \ -H "Content-Type: application/json" \ -d '{ "direccionDestinatario": "8va Avenida 15-20 zona 11, apto 3B", "telefonoAlternoDestinatario": "44448888", "obsDestinatario": "Portón azul, timbre 3B" }'

Respuesta 200

Retorna el objeto guía completo con los datos actualizados (mismo formato que GET /guias/{numeroGuia}).

Errores específicos

{ "success": false, "error": { "message": "No se puede editar una guía con estado \"RECOLECTADO\". Solo es posible editar guías en estado SIN_RECOLLECTAR.", "code": "INVALID_STATE" } }

DELETE/api/v1/guias/{numeroGuia}Anular

Anula una guía. Solo es posible en estado SIN_RECOLLECTAR.

La anulación es irreversible — la guía pasa a estado ANULADA permanentemente y no puede reactivarse.

curl -X DELETE https://api.tpcxpress.com/api/v1/guias/TPCE123456789 \ -H "Authorization: Bearer TOKEN"

Respuesta 200

{ "success": true, "data": { "numeroGuia": "TPCE123456789", "estado": "ANULADA" } }

Error 409 Estado inválido

{ "success": false, "error": { "message": "No se puede anular una guía con estado \"EN_RUTA\". Solo es posible anular guías en estado SIN_RECOLLECTAR.", "code": "INVALID_STATE" } }

Preguntas frecuentes

¿Qué pasa con los créditos si anulo una guía? Los créditos no se reembolsan automáticamente al anular. Contacta a soporte para casos específicos.

¿Puedo cambiar el tipoServicio de ESTANDAR a COD? No. El tipo de servicio es inmutable una vez creada la guía. Anula y crea una nueva si necesitas cambiarlo.

¿Cómo sé si el municipio de destino tiene cobertura? Consulta GET /api/v1/municipios para ver la lista de municipios activos. Si el municipio no tiene cobertura, la API rechazará la creación con 400 MUNICIPIO_NO_CUBIERTO.

Last updated on