Saltar al contenido principal

Ordenes

Los endpoints de ordenes te permiten crear envios, consultarlos, cancelarlos y descargar guias en PDF.

Crear Orden

POST /api/v1/orders

Scope requerido: orders:write

Crea un nuevo envio y genera la guia con el proveedor logistico.

curl

curl -X POST https://app.fletea.mx/api/v1/orders \
-H "Authorization: Bearer flt_tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"pickupAddress": {
"contactName": "Juan Lopez",
"contactPhone": "5551234567",
"email": "juan@empresa.com",
"street": "Av. Reforma",
"exteriorNumber": "222",
"interiorNumber": "4B",
"neighborhood": "Juarez",
"city": "Ciudad de Mexico",
"state": "Ciudad de Mexico",
"postalCode": "06600"
},
"deliveryAddress": {
"contactName": "Maria Garcia",
"contactPhone": "8181234567",
"email": "maria@cliente.com",
"street": "Av. Gonzalitos",
"exteriorNumber": "500",
"neighborhood": "Mitras Centro",
"city": "Monterrey",
"state": "Nuevo Leon",
"postalCode": "64460",
"deliveryInstructions": "Tocar el timbre 2 veces"
},
"receiverName": "Maria Garcia",
"receiverPhone": "8181234567",
"package": {
"weight": 2.5,
"dimensions": {
"length": 30,
"width": 20,
"height": 15
},
"contentDescription": "Ropa y accesorios",
"declaredValue": 1500
},
"internalReference": "PEDIDO-001",
"shipmentType": "standard",
"isCod": false
}'

TypeScript

const response = await fetch('https://app.fletea.mx/api/v1/orders', {
method: 'POST',
headers: {
'Authorization': 'Bearer flt_tu_api_key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
pickupAddress: {
contactName: 'Juan Lopez',
contactPhone: '5551234567',
email: 'juan@empresa.com',
street: 'Av. Reforma',
exteriorNumber: '222',
neighborhood: 'Juarez',
city: 'Ciudad de Mexico',
state: 'Ciudad de Mexico',
postalCode: '06600',
},
deliveryAddress: {
contactName: 'Maria Garcia',
contactPhone: '8181234567',
street: 'Av. Gonzalitos',
exteriorNumber: '500',
neighborhood: 'Mitras Centro',
city: 'Monterrey',
state: 'Nuevo Leon',
postalCode: '64460',
},
receiverName: 'Maria Garcia',
receiverPhone: '8181234567',
package: {
weight: 2.5,
dimensions: { length: 30, width: 20, height: 15 },
contentDescription: 'Ropa y accesorios',
declaredValue: 1500,
},
internalReference: 'PEDIDO-001',
shipmentType: 'standard',
}),
});

const order = await response.json();
// { orderId: "uuid", guideNumber: "HEX-123456", trackingNumber: "HEX-123456" }

Respuesta exitosa (201)

{
"orderId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"guideNumber": "HEX-123456789",
"trackingNumber": "HEX-123456789"
}

Campos del request

pickupAddress (requerido)

CampoTipoRequeridoDescripcion
contactNamestringSiNombre de quien entrega
contactPhonestringSiTelefono de contacto
emailstringNoCorreo electronico
streetstringSiCalle
exteriorNumberstringSiNumero exterior
interiorNumberstringNoNumero interior
neighborhoodstringSiColonia
citystringSiCiudad
statestringSiEstado (nombre completo)
postalCodestringSiCodigo postal

deliveryAddress (requerido)

Mismos campos que pickupAddress, mas:

CampoTipoRequeridoDescripcion
deliveryInstructionsstringNoInstrucciones de entrega

package (requerido)

CampoTipoRequeridoDescripcion
weightnumberSiPeso en kg (0.1 - 70)
dimensions.lengthnumberNoLargo en cm (1 - 300, default: 10)
dimensions.widthnumberNoAncho en cm (1 - 300, default: 10)
dimensions.heightnumberNoAlto en cm (1 - 300, default: 10)
contentDescriptionstringNoDescripcion del contenido
declaredValuenumberNoValor declarado en MXN

Campos adicionales

CampoTipoRequeridoDescripcion
receiverNamestringNoNombre del destinatario
receiverPhonestringNoTelefono del destinatario
internalReferencestringNoReferencia interna de tu sistema
shipmentTypestringNostandard (default), express, same_day
isCodbooleanNoCobro contra entrega
codAmountnumberCondicionalMonto COD (requerido si isCod es true)
💡
Peso volumetrico

El peso volumetrico se calcula automaticamente como (largo x ancho x alto) / 5000. Se cobra el mayor entre el peso real y el volumetrico.


Listar Ordenes

GET /api/v1/orders

Scope requerido: orders:read

Parametros de query

ParametroTipoDescripcion
statusstringFiltrar por estado (ej: delivered, in_transit)
dateFromstringFecha inicio ISO 8601
dateTostringFecha fin ISO 8601
limitnumberResultados por pagina (default: 50, max: 100)
cursorstringCursor para paginacion

curl

curl "https://app.fletea.mx/api/v1/orders?status=in_transit&limit=20" \
-H "Authorization: Bearer flt_tu_api_key"

Respuesta

{
"data": [
{
"id": "a1b2c3d4-...",
"internal_reference": "PEDIDO-001",
"receiver_name": "Maria Garcia",
"status": "in_transit",
"provider_tracking_number": "HEX-123456789",
"created_at": "2026-03-01T10:00:00Z",
"status_updated_at": "2026-03-02T14:30:00Z",
"is_cod": false,
"total_cost": 185
}
],
"nextCursor": "eyJjcmVhdGVkX2F0Ijo..."
}

Detalle de Orden

GET /api/v1/orders/:id

Scope requerido: orders:read

curl

curl "https://app.fletea.mx/api/v1/orders/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
-H "Authorization: Bearer flt_tu_api_key"

Respuesta

{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"organization_id": "org-uuid",
"internal_reference": "PEDIDO-001",
"provider": "fletea",
"provider_tracking_number": "HEX-123456789",
"status": "in_transit",
"shipment_type": "standard",
"receiver_name": "Maria Garcia",
"receiver_phone": "8181234567",
"pickup_address": { "..." },
"delivery_address": { "..." },
"package_weight": 2.5,
"package_dimensions": { "length": 30, "width": 20, "height": 15 },
"total_cost": 185,
"estimated_delivery_at": "2026-03-05T18:00:00Z",
"tracking_events": [
{
"status": "created",
"description": "Guia generada",
"occurred_at": "2026-03-01T10:00:00Z",
"location": "CDMX"
},
{
"status": "picked_up",
"description": "Paquete recolectado",
"occurred_at": "2026-03-02T09:15:00Z",
"location": "CDMX"
},
{
"status": "in_transit",
"description": "En transito a destino",
"occurred_at": "2026-03-02T14:30:00Z",
"location": "Queretaro"
}
],
"created_at": "2026-03-01T10:00:00Z",
"status_updated_at": "2026-03-02T14:30:00Z"
}

Cancelar Orden

POST /api/v1/orders/:id/cancel

Scope requerido: orders:write

Solo se pueden cancelar ordenes que aun no han sido recolectadas (pending o created).

curl

curl -X POST "https://app.fletea.mx/api/v1/orders/a1b2c3d4-.../cancel" \
-H "Authorization: Bearer flt_tu_api_key" \
-H "Content-Type: application/json" \
-d '{ "reason": "Cliente cancelo el pedido" }'

TypeScript

const response = await fetch(
`https://app.fletea.mx/api/v1/orders/${orderId}/cancel`,
{
method: 'POST',
headers: {
'Authorization': 'Bearer flt_tu_api_key',
'Content-Type': 'application/json',
},
body: JSON.stringify({ reason: 'Cliente cancelo el pedido' }),
}
);

Respuesta exitosa (200)

{
"message": "Orden cancelada exitosamente"
}
⚠️
Ordenes ya recolectadas

Las ordenes que ya fueron recolectadas (picked_up, in_transit, etc.) no pueden cancelarse por API. Contacta a soporte para estos casos.


Descargar Guia (PDF)

GET /api/v1/orders/:id/label

Scope requerido: orders:read

Devuelve la guia de envio en formato PDF.

curl

curl "https://app.fletea.mx/api/v1/orders/a1b2c3d4-.../label" \
-H "Authorization: Bearer flt_tu_api_key" \
-o guia.pdf

TypeScript

const response = await fetch(
`https://app.fletea.mx/api/v1/orders/${orderId}/label`,
{
headers: { 'Authorization': 'Bearer flt_tu_api_key' },
}
);

const pdfBlob = await response.blob();
// Guardar o mostrar el PDF

La respuesta tiene Content-Type: application/pdf.

🚀
Whitelabel en guias

Si tu organizacion tiene whitelabel habilitado, la guia incluira el logotipo y nombre de tu marca automaticamente.


Estados de Orden

EstadoEtiquetaDescripcion
pendingPendienteOrden creada, pendiente de procesamiento
createdCreadaGuia generada con el proveedor
picked_upRecolectadaPaquete recolectado por el mensajero
in_transitEn TransitoPaquete en camino al destino
out_for_deliveryEn RepartoPaquete asignado para entrega final
deliveredEntregadaEntrega exitosa
failedFallidaNo se pudo entregar
cancelledCanceladaOrden cancelada
return_requestedDevolucion SolicitadaEl destinatario solicito devolucion
return_approvedDevolucion AprobadaDevolucion autorizada, guia de retorno generada
returnedRetorno CompletadoEl paquete de retorno fue entregado al origen

Flujo de estados

🆕pending
📋created
🚚picked_up
📦in_transit
🏍️out_for_delivery
delivered

Tambien puede ocurrir:

  • Desde out_for_delivery se puede pasar a failed si la entrega falla
  • Desde delivered se puede solicitar devolucion: return_requested -> return_approved -> returned
  • Desde pending o created se puede pasar a cancelled