Selfx API
Endpoints
Para Mejores Pruebas

API Selfx para genereación de guías

Entorno de prueba completo para la API de creación de guías.

Flujo Completo de Prueba

1
Ir a sección "Token API"
Pega el token que el administrador te proporcionó
2
El token se guarda automáticamente
Se mostrará en el sidebar bajo "JWT Token"
3
Navega a otros endpoints
Ya tienes JWT, prueba "Crear", "COD" o "Masivo"
4
¡Listo! El JWT se adjunta automáticamente
Todos los requests llevan el header Authorization

Información Importante

Edita el JSON: Puedes modificar cualquier campo del Request Body en el editor
Console de debugging: Todos los requests y responses aparecen en la consola derecha
JWT automático: Después de login, el token se adjunta a todos los requests
Respuestas completas: Ver estructura exacta de response de cada endpoint

Token API

Proporciona tu JWT token para autenticar todas las solicitudes a la API. El administrador te generará tu token único y válido por 365 días.

🔑 Ingresa tu Token API

Solicita tu Token al Administrador
  • Contacta con el Administrador de la plataforma
  • Solicita que genere un Token API para tu usuario
  • Copia el token y pégalo en el campo anterior
Información del Token:
  • El token es válido por 365 días
  • Se envía automáticamente en el header Authorization: Bearer {token}
  • Se usa en TODOS los endpoints (Crear, COD, Masivo)
  • Si expira, contacta al administrador para generar uno nuevo

Crear Guía Unitaria

Crea una nueva guía individual de envío y la registra automáticamente en PINIT.

📌 POST /api/guias/crear

Headers Requeridos
Content-Type: application/json
Authorization: Bearer {JWT_TOKEN}
Campos Obligatorios
CampoTipoRango/FormatoDescripción
remitente_nombrestring1-100Nombre de empresa/persona que envía
remitente_telefonostring7-15 dígitosTeléfono del remitente
remitente_direccionstring5-200Dirección completa del remitente
remitente_ciudadstring1-50Ciudad del remitente
remitente_departamentostring1-50Departamento del remitente
destinatario_nombrestring1-100Nombre completo del destinatario
destinatario_telefonostring7-15 dígitosTeléfono del destinatario
destinatario_direccionstring5-200Dirección completa del destinatario
destinatario_ciudadstring1-50Ciudad de destino
destinatario_departamentostring1-50Departamento de destino
pesonumber0.1 - 50 kgPeso del paquete en kilos
valor_declaradonumber1+ COPValor declarado en COP
dimensionesstringAxAxP (cm)Alto x Ancho x Profundidad en cm
tipo_contenidostringVer opciones →Documentos, Electrónicos, Ropa, Frágil, Otros
📝 Campos Opcionales
CampoTipoDescripciónNotas
es_contraentregabooleanIndica si es COD (contraentrega)true = COD, false = pagada
documentostringCédula/documento destinatario⚠️ OBLIGATORIO si es_contraentrega=true
🔄 Campos Calculados Automáticamente (NO ENVIAR)
CampoDescripciónCálculo
fecha_estimada_entregaFecha estimada de entregaBasada en origen→destino (2-5 días hábiles)
valor_cobradoDinero a cobrar en destino (COD)= costo_total si es_contraentrega=true
id_ordenID único del pedido/ordenGenerado por servidor: ORD-{timestamp}
numero_trackingNúmero de tracking en XCargoGenerado por XCargo/PINIT (único)
Response (200 OK)
{
  "success": true,
  "data": {
    "id": 207,
    "tracking_number": "4040789508014807",
    "id_orden": "ORD-1763647196280",
    "index_numero_paquete": 1,
    "estado": "Registrada",
    "remitente": {
      "nombre": "Mi Empresa S.A.",
      "ciudad": "Bogotá"
    },
    "destinatario": {
      "nombre": "Juan Pérez López",
      "ciudad": "Medellín"
    },
    "peso": 2.5,
    "valor_declarado": 150000,
    "fecha_estimada_entrega": "2025-11-22",
    "valor_cobrado": 0,
    "es_contraentrega": false,
    "costos": {
      "costoBase": 15000,
      "costoSeguro": 3000,
      "costoTotal": 18000,
      "tiempoEstimado": "2-5 días hábiles",
      "diasMinimos": 2,
      "diasMaximos": 5
    }
  }
}
Características:
  • Cálculo automático de costos de envío
  • Cálculo automático de fecha estimada de entrega
  • Integración automática con PINIT para tracking
  • Validación robusta de datos
  • Soporte para contraentrega (COD)

Guía con Contraentrega (COD)

Crea una guía donde el cliente paga el envío en destino. El dinero se cobra automáticamente al momento de la entrega.

✅ Características de Contraentrega (COD)

El cliente paga en el momento de la entrega
valor_cobrado se calcula automáticamente = costo_total
Campo documento es OBLIGATORIO
El dinero se remite al remitente después de la entrega
Se puede mezclar con guías normales en masivo
📋 Campos Adicionales para COD
CampoTipoDescripciónRequerido
es_contraentregabooleanIndica que es CODtrue
documentostringCédula/documento del destinatario✓ OBLIGATORIO
Ejemplo de Request (COD)
{
  "remitente_nombre": "Mi Empresa",
  "remitente_telefono": "6018001111",
  "remitente_direccion": "Calle 50 #10-20",
  "remitente_ciudad": "Bogotá",
  "remitente_departamento": "Cundinamarca",

  "destinatario_nombre": "Cliente COD",
  "destinatario_telefono": "3105551111",
  "destinatario_direccion": "Carrera 10 #5-15",
  "destinatario_ciudad": "Cali",
  "destinatario_departamento": "Valle del Cauca",
  "documento": "1234567890",

  "peso": 1.5,
  "valor_declarado": 200000,
  "dimensiones": "25x15x10",
  "tipo_contenido": "Electrónicos",
  "es_contraentrega": true
}
Response (200 OK)
{
  "success": true,
  "data": {
    "id": 208,
    "tracking_number": "5847291034912654",
    "id_orden": "ORD-1763647225242",
    "index_numero_paquete": 1,
    "estado": "Registrada",
    "valor_declarado": 150000,
    "valor_cobrado": 18000,
    "documento": "1234567890",
    "es_contraentrega": true,
    "fecha_estimada_entrega": "2025-11-22",
    "costos": {
      "costoBase": 15000,
      "costoSeguro": 3000,
      "costoTotal": 18000,
      "tiempoEstimado": "2-5 días hábiles"
    }
  }
}
Importante: El campo documento es obligatorio cuando es_contraentrega=true. Sin este campo, la request fallará con error de validación.

Crear Guías Masivas

Crea múltiples guías en una sola request. Perfecto para procesar lotes grandes de envíos de forma eficiente.

📌 POST /api/guias/crear-masivo

Headers Requeridos
Content-Type: application/json
Authorization: Bearer {JWT_TOKEN}
✅ Características del Endpoint Masivo
CaracterísticaDescripción
Mezclar tipos de guíasEnviar guías pagadas y COD en el mismo request
Cálculos independientesCada guía se valida y calcula de forma individual
Respuesta detalladaInformación de éxito/error para cada guía
Orden comúnTodas las guías comparten el mismo ID de orden
Totales automáticosSuma total de costos, base y seguro
Manejo de erroresSi una guía falla, las demás se procesan normalmente
Estructura del Request (Body)
{
  "guias": [
    {
      // Primera guía - Guía PAGADA (normal)
      "remitente_nombre": "Tienda A",
      "remitente_telefono": "6018001111",
      "remitente_direccion": "Calle 50 #10-20",
      "remitente_ciudad": "Bogotá",
      "remitente_departamento": "Cundinamarca",
      "destinatario_nombre": "Cliente 1",
      "destinatario_telefono": "3105551111",
      "destinatario_direccion": "Carrera 10 #5-15",
      "destinatario_ciudad": "Medellín",
      "destinatario_departamento": "Antioquia",
      "peso": 2.5,
      "valor_declarado": 150000,
      "dimensiones": "30x20x15",
      "tipo_contenido": "Ropa y Accesorios"
    },
    {
      // Segunda guía - Guía COD (Contraentrega)
      "remitente_nombre": "Tienda A",
      "remitente_telefono": "6018001111",
      "remitente_direccion": "Calle 50 #10-20",
      "remitente_ciudad": "Bogotá",
      "remitente_departamento": "Cundinamarca",
      "destinatario_nombre": "Cliente 2 (COD)",
      "destinatario_telefono": "3105552222",
      "destinatario_direccion": "Calle 100 #20-30",
      "destinatario_ciudad": "Cali",
      "destinatario_departamento": "Valle del Cauca",
      "documento": "9876543210",
      "peso": 1.5,
      "valor_declarado": 80000,
      "dimensiones": "25x15x10",
      "tipo_contenido": "Electrónicos",
      "es_contraentrega": true
    }
  ]
}
Response (200 OK)
{
  "success": true,
  "id_orden": "ORD-1763647300000",
  "total_guias": 2,
  "guias_exitosas": 2,
  "guias_fallidas": 0,
  "resultados": [
    {
      "index": 1,
      "numero_tracking": "1234567890123456",
      "success": true,
      "costo_total": 18600,
      "valor_cobrado": 0,
      "es_contraentrega": false,
      "fecha_estimada_entrega": "2025-11-22"
    },
    {
      "index": 2,
      "numero_tracking": "6543210987654321",
      "success": true,
      "costo_total": 18600,
      "valor_cobrado": 18600,
      "es_contraentrega": true,
      "fecha_estimada_entrega": "2025-11-24"
    }
  ],
  "costosTotales": {
    "total": "$37200.00",
    "base": "$30000.00",
    "seguro": "$7200.00"
  }
}
Ventajas:
  • Una sola request para múltiples envíos
  • Respuesta detallada con éxito/error por guía
  • Cálculos totales automáticos
  • Eficiente para procesamiento por lotes
Notas:
Si una guía falla, las demás se procesan normalmente
Revisa guias_fallidas para identificar problemas
Cada guía debe cumplir validaciones individuales

Códigos de Error

Referencia completa de errores que puede retornar la API y cómo resolverlos.

🔐 Errores de Autenticación (4xx)

CódigoHTTPDescripciónSolución
AUTH_001401JWT inválido o malformadoVerifica que el token sea válido y completo
AUTH_002401JWT expiradoHaz login nuevamente para obtener nuevo token
AUTH_003403Permiso denegadoVerifica permisos del usuario en BD
AUTH_004401No authorization headerIncluye header Authorization: Bearer {token}

⚠️ Errores de Validación (400)

CódigoDescripciónSolución
VALIDATION_ERRORDatos inválidos en la requestRevisa el detalle y valida todos los campos
INVALID_FIELDUn campo específico es inválidoVerifica el tipo y formato del campo
REQUIRED_FIELDFalta un campo obligatorioVerifica tabla de campos obligatorios
INVALID_JSONJSON malformadoValida el JSON en jsonlint.com

🔗 Errores de Integración (400/5xx)

CódigoHTTPDescripciónSolución
XCARGO_ERROR400Error en XCargo/PINITVerifica que ciudad/departamento sean válidos
XCARGO_TIMEOUT504XCargo no respondió a tiempoReintentar después de unos segundos
INVALID_CITY400Ciudad no soportadaVerifica que la ciudad esté en lista soportadas
DB_ERROR500Error en base de datosContacta a soporte técnico
DB_TIMEOUT504Base de datos lentaReintentar después

Solución de Problemas

Guía de troubleshooting para los errores más comunes.

❌ JWT inválido o expirado (AUTH_001/AUTH_002)

Causas comunes:

  • Token no incluido en header
  • Token incompleto o malformado
  • Token expirado (aunque duran 365 días)

Solución:

# ✅ CORRECTO
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

# ❌ INCORRECTO
curl -H "Authorization: token123456"
curl -H "Authorization: Bearer token123"

Pasos:

  1. Haz login nuevamente: POST /auth/login
  2. Copia el token completo de la respuesta
  3. Incluye en header: Authorization: Bearer {token_completo}
  4. Reintenta la request

❌ Error validando los datos (VALIDATION_ERROR)

Causas comunes:

  • Faltan campos obligatorios
  • Tipos de dato incorrectos (string vs number)
  • Valores fuera de rango

Ejemplo:

// ✅ CORRECTO
{
  "peso": 2.5,              // número
  "valor_declarado": 150000, // número
  "remitente_telefono": "6018001111", // string
  "dimensiones": "30x20x15" // formato AxAxP
}

// ❌ INCORRECTO
{
  "peso": "2.5",              // string en lugar de número
  "valor_declarado": "150000", // string en lugar de número
  "remitente_telefono": 6018001111, // número en lugar de string
  "dimensiones": "30, 20, 15" // formato incorrecto
}

❌ Dimensiones no está nulo

Causa: El campo dimensiones es obligatorio pero no fue incluido.

Solución:

// ✅ CORRECTO - Formato: AnchoxAltoxProfundidad en cm
{
  "dimensiones": "30x20x15"  // Paquete mediano
}

// ✅ OTROS EJEMPLOS
{
  "dimensiones": "25x15x10", // Paquete pequeño
  "dimensiones": "50x40x30", // Paquete grande
  "dimensiones": "100x80x60" // Paquete muy grande
}

❌ Documento requerido para COD

Causa: Cuando es_contraentrega: true, el campo documento es obligatorio.

Solución:

// ✅ CORRECTO para COD
{
  "es_contraentrega": true,
  "documento": "1234567890" // cédula o documento del destinatario
}

// ❌ INCORRECTO para COD
{
  "es_contraentrega": true
  // falta documento
}

❌ No se pudo registrar en XCargo

Causas comunes:

  • Ciudad no existe en Colombia
  • Teléfono formato incorrecto
  • Datos incompletos o mal escritos

Solución:

// ✅ VÁLIDO
{
  "destinatario_ciudad": "Medellín",
  "destinatario_departamento": "Antioquia",
  "destinatario_telefono": "3125556666"
}

// ❌ INVÁLIDO
{
  "destinatario_ciudad": "Ciudad Falsa",
  "destinatario_telefono": "123"
}

Request Body

Console

Consola vacía
Los requests aparecerán aquí