API REST Urbano Express Última actualización: 06-03-2026

Bienvenido a la documentación de la API REST de Urbano Express. Esta API le permitirá integrar sus sistemas con nuestros servicios de logística para gestionar envíos, consultar tarifas, realizar seguimientos y mucho más.

Proceso de Alta en Urbano:

Este documento detalla los pasos necesarios para integrar un nuevo Cliente a nuestra plataforma logística, utilizando estas APIs disponibles para la comunicación con Urbano Express Argentina.

1. Inicio del Proceso y Cadena de Mails:
Para comenzar el proceso de integración, las credenciales SOLO PUEDEN SER SOLICITADAS POR EL EJECUTIVO DE CUENTAS (que a partir de ahora lo llamaremos EC).

Si aún no tiene un EC asignado escribir a: Equipo Comercial (equipocomercial@urbano.com.ar)

Su EC será el punto de contacto para iniciar este proceso y proporcionarle toda la documentación necesaria para la gestión comercial. Una vez que su EC haya iniciado dicho proceso se dispondrá de una cadena de mails donde le estaremos indicando el paso a paso correspondiente. Siempre se deberá mantener en la cadena de mails a su EC y a Integraciones (integracionsistemas@urbano.com.ar) para que el proceso fluya de forma natural sin contratiempos.

2. Ambiente de Testing y Órdenes de Prueba:
En primera instancia le enviaremos las credenciales de nuestro ambiente de testing dedicado. Este ambiente le permitirá configurar y probar la conexión entre su tienda y nuestra plataforma antes de pasar a producción. Se podrán generar órdenes de prueba, imprimir etiquetas y ver el seguimiento de sus pedidos sin impacto real en nuestros sistemas. Éste paso es clave para evitar inconsistencias y asegurarnos que todo funcione correctamente con la integración.

Pasos clave:

Configuración inicial: Deberá configurar su integración con nuestro sistema en el ambiente de testing.

Envío de órdenes de prueba: Una vez configurado, es imprescindible que nos envíe un mínimo de 5 órdenes generadas en su Tienda bajo nuestro ambiente de testing. Estas órdenes deben ser representativas de los tipos de pedidos que gestionará habitualmente (por ejemplo, con diferentes productos, direcciones de envío, etc.).

Revisión y validación: Nuestro equipo revisará estas órdenes de prueba para verificar que la información se transmita correctamente y que no existan inconsistencias o errores en los datos recibidos.

Esto incluye la validación de:
- Datos del destinatario (nombre, dirección completa, teléfono, email).
- Detalles de los productos (peso y dimensiones son OBLIGATORIAS en cada producto).

3. Obtención de Credenciales de Producción:

Una vez que hayamos validado las 5 órdenes de prueba enviadas desde su ambiente de testing y confirmado que la integración funciona correctamente, procederemos a enviarle las credenciales de producción.

Proceso:

Confirmación de validación: Recibirá una confirmación por parte de nuestro equipo indicando que las órdenes de testing han sido validadas exitosamente.

Envío de credenciales: Inmediatamente después de la confirmación, le proporcionaremos las credenciales necesarias (End-Point, Numero de Shipper y Contraseña) para configurar la integración en su ambiente de producción.

Configuración en producción: Con estas credenciales, podrá replicar la configuración exitosa del ambiente de testing en su entorno de producción, habilitando la integración real con Urbano Express Argentina.

Consideraciones importantes:
Le recomendamos que realice pruebas adicionales en producción con un volumen bajo de órdenes al inicio para asegurar un funcionamiento óptimo antes de operar con el volumen completo.

Ante cualquier duda o inconveniente durante el proceso de integración, no dude en escribirnos por medio de la Cadena de Mails anteriormente mencionada (siempre incluyendo a su EC y al Equipo de Integraciones).

Cosas Importantes antes de Integrarse con Urbano:

Recuerde que una vez impactada una Orden no se podrá modificar, quedando como unica opcion darla de baja y volverla a cargar por medio del Portal Clientes mediante un archivo (.XLS) de forma Manual.

Descripción General

Desarrollada por Urbano Express, estas APIs proporcionan toda la información necesaria para integrar su E-Commerce con nuestros servicios logísticos.

Beneficios principales:

  • Automatización de procesos logísticos
  • Consulta en tiempo real de tarifas de envío
  • Seguimiento detallado de envíos (tracking)
  • Gestión de puntos de retiro y sucursales
  • Impresión de etiquetas en múltiples formatos (A4, Z10X10, Z10X6, ZPL)
  • Normalización de direcciones para mayor agilidad en logística
  • Consulta de peso y medidas del paquete
  • Canalización por código postal
  • Soporte para múltiples tipos de servicio (entrega, retiro, contra reembolso, sucursal)
  • Integración flexible con múltiples plataformas

Consumo de la API

Con nuestros servicios usted podrá disponer de los siguientes beneficios:

TRACKING:

El servicio de rastreo le permitirá saber en todo momento y de manera instantánea el estado de una pieza. Podrá brindarle a sus clientes la información detallada del seguimiento de sus envíos.

CONSULTA DE TARIFA:

El servicio de consulta de tarifa le permitirá mostrar a sus clientes el costo del envío al momento de efectuAR LA COMPRA. De este modo usted podrá adicionar el costo del envío automáticamente al costo de venta en el eCommerce.

PEDIDO DE ENVÍO (CARGA CLIENTE):

Con el servicio de carga de pedidos usted seleccionará qué pedidos desea enviar. Como respuesta recibirá una etiqueta con el detalle del envío que puede imprimir y adosar al paquete.

PUNTOS DE RETIRO:

Obtenga los puntos de retiro disponibles según la dirección proporcionada, incluyendo sucursales y lockers. Esta información permite ofrecer a sus clientes opciones flexibles de entrega.

IMPRESIÓN DE ETIQUETAS:

Genere etiquetas de envío en diferentes formatos (A4, Z10X10, Z10X6, ZPL) según las necesidades de su operación logística.

NORMALIZADOR DE DIRECCIONES:

Valide y normalice las direcciones ingresadas para garantizar una correcta logística de entrega. El sistema retornará los datos del domicilio correctos según nuestra base de datos.

CANALIZADOR POR CÓDIGO POSTAL:

Consulte la logística disponible según el código postal de destino. El sistema retornará las opciones de entrega disponibles para esa zona.

CONSULTA PESO Y MEDIDAS:

Obtenga el peso y las dimensiones del paquete detectado al ser procesado en nuestros centros de distribución.

RESCATE DE ÓRDENES:

Solicite el rescate de una o múltiples piezas en tránsito. Permite dos modalidades: devolución al remitente o redireccionamiento a una nueva dirección de entrega.

Autenticación

En cada request con sus métodos GET, POST, se va a requerir la autenticación correspondiente al shipper, en el mismo se especificará un password otorgada por Urbano.

Consultar con Urbano Express por las credenciales correspondientes a su shipper.

Aclaración:
Los campos de autenticación son requeridos en todos los casos salvo en el método GET de impresión de etiquetas.

El código postal es de 4 dígitos desde 1000 a 9999

Ambientes

La API está disponible en dos ambientes:

Desarrollo/Testing:
https://testing-apis.urbano.com.ar/

Utilizado para pruebas y desarrollo del cliente. Las URLs en esta documentación apuntan a este ambiente.

Credenciales de prueba:

Shipper 671
Password MPzQG6%jfN%-#tsb=CUj
Producción:
https://apis.urbano.com.ar/

Utilizado para el procesamiento real de envíos.
Requiere credenciales de producción las cuales deberán gestionarse con el Equipo Comercial (equipocomercial@urbano.com.ar).

Endpoints Principales

Consulta de Tarifa

Nos retornará la tarifa correspondiente según su código postal, además de devolvernos el "PesoReal". nos informara si existiera un error con su numero y con su descripción.

POST https://testing-apis.urbano.com.ar/consulta_tarifa_rest/

JSON request:

JSON response:

Parámetros:

Requerido Parametro Tipo Longitud Descripción
codigoPostal integer 4 Código postal de destino. Debe estar entre 1000 y 9999
pesoEspecifico decimal 4,2 Peso real del paquete en kg. Debe ser numérico
pesoVolumetrico decimal 4,2 Peso volumétrico en kg (opcional). Si se envían alto, largo y ancho, el sistema calcula el peso volumétrico automáticamente usando el factor de aforo del shipper y toma el mayor entre el calculado y el informado. El pesoReal devuelto en la respuesta es el mayor entre pesoEspecifico y pesoVolumetrico
alto decimal 4,2 Alto del paquete en cm. Se usa para calcular el peso volumétrico
largo decimal 4,2 Largo del paquete en cm. Se usa para calcular el peso volumétrico
ancho decimal 4,2 Ancho del paquete en cm. Se usa para calcular el peso volumétrico
shipper integer - Número de shipper
password string - Contraseña del shipper

Ejemplos de código:

cURL
curl -X POST "https://testing-apis.urbano.com.ar/consulta_tarifa_rest/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"codigoPostal":2400,"pesoEspecifico":1.5,"pesoVolumetrico":1.5,"alto":1,"largo":1,"ancho":1,"autentificacion":{"shipper":671,"password":"MPzQG6%jfN%-#tsb=CUj"}}'
JavaScript
const response = await fetch('https://testing-apis.urbano.com.ar/consulta_tarifa_rest/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  },
  body: JSON.stringify(jsonReqTarifa)
});

const data = await response.json();
console.log(data);
PHP
<?php
$payload = [
    'codigoPostal'     => 2400,
    'pesoEspecifico'   => 1.5,
    'pesoVolumetrico'  => 1.5,
    'alto'             => 1,
    'largo'            => 1,
    'ancho'            => 1,
    'autentificacion'  => [
        'shipper'  => 671,
        'password' => 'MPzQG6%jfN%-#tsb=CUj',
    ],
];

$ch = curl_init('https://testing-apis.urbano.com.ar/consulta_tarifa_rest/');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json', 'Accept: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
Códigos de respuesta
codErrorHTTPdescErrorresultado
0200ÉxitoOK
2200 / 401Credenciales inválidas (shipper o password vacíos/incorrectos)ERROR
5200Código postal inválido (entre 1000 y 9999), o pesoEspecifico ausente o no numéricoERROR
-1200Error interno al procesar el servicioERROR

Carga Cliente (Creacion de una Orden de envío):

Ingresamos un cliente como destinatario especificando su domicilio, adicionando como opcional un segundo domicilio, se deberá ingresar un numero de seguimiento, remito y observaciones. En Producto se ingresara la descripción, sus medidas, longitud, peso, valor, sku y la cantidad.

POST https://testing-apis.urbano.com.ar/cargaCliente/

JSON request:

JSON response:

Parámetros:

Requerido Parametro Tipo Longitud Descripción
productos (array)
largo decimal 4,2 Largo total del envío (cm)
alto decimal 4,2 Alto total del envío (cm)
ancho decimal 4,2 Ancho total del envío (cm)
peso decimal 4,2 Peso específico del envío (kg)
valor integer 8 Valor del producto para asegurar el envío. Opcional; si se omite, se asume 0.
Éste servicio deberá gestionarlo con su Ejecutivo de Cuentas.
valorContrareembolso integer 8 Valor de pago contra entrega.
Requerido solo para servicio tipo "B" (contrareembolso); en ese caso no puede ser 0.
cantidad integer 4 Refiere a la cantidad de etiquetas que se imprimiran en el pedido
sku string 30 Identificador SKU del producto. Requerido solo para clientes WARE.
descripcionProducto string 40 Refiere a la descripcion del producto
autentificacion
shipper integer - Número de shipper
password string - Contraseña del shipper
destinatario
tipoDocumento string 10 Refiere al tipo de identificación de la persona (DNI, LE o LC)
numeroDocumento integer 10 Refiere al nro de documento de la persona
nombre string 40 Refiere al nombre de la persona
email array/string 45 Refiere al correo electrónico
telefono string 40 Refiere al teléfono particular
celular string 15 Refiere al celular
autorizado (array) - Ver campos de destinatario
domicilio
direccion string 45 Dirección del destinatario
altura string 6 Numeración del domicilio
piso string 6 Piso del domicilio
departamento string 6 Departamento del domicilio
codigoPostal integer 4 Código Postal
localidad string - Localidad del domicilio
provincia string - Provincia del domicilio
latitud string 10 Localización en latitud
longitud string 10 Localización en longitud
telefono array - Teléfono del domicilio (array)
domicilioAlternativo - Ver campos de domicilio (todos opcionales)
datoNumerico string 10 Dato numérico adicional
codigoSeguimiento string 4-16 Código único identificador del envío (mínimo 4, máximo 16 caracteres)
codigoAlternativo integer 15 Código alternativo
servicio string 1 Tipo de servicio
observaciones array 6 Observaciones adicionales (hasta 6 elementos de 95 caracteres cada uno)

Notas Importantes

  • Tipos de servicio:
    • E: Entrega
    • R: Retiro
    • B: Contra reembolso
    • F: Retiro en sucursal
    • G: Retiro en sucursal contra reembolso
    • C: Canje (Retiro y Entrega simultánea de productos)

  • Si el servicio es de Contrareembolso el importe del campo "valorContrareembolso" no puede estar en 0
  • Si el cliente tiene seguro el campo "valor" del producto no puede estar en 0. Éste servicio deberá ser gestionado con su Ejecutivo de Cuenta.
  • Campos del destinatario son obligatorios salvo teléfono y mail que pueden ser nulos.
  • Campos receptor autorizado pueden ser nulos
  • Campos del apartado domicilio: altura, piso, departamento, longitud, latitud pueden ser nulos. La dirección, localidad, provincia y el código postal son obligatorios.
  • Campos del domicilio alternativo pueden ser nulos.
  • El código de seguimiento es obligatorio y tiene un máximo de 16 caracteres (mínimo 4).
  • Código de seguimiento alternativo puede ser nulo.
  • Observaciones pueden ser nulos. El límite de caracteres es de 95 caracteres, máximo 2 observaciones.
  • Si el Pedido es con Punto de Retiro en Sucursal (Servicios F o G) debemos especificar el código de sucursal en el campo "localidad".
    Por ejemplo: G23 Obtenido desde el campo "prov_codigo" del end-point Puntos de Retiro y Sucursales

WAREHOUSING:
  • El código SKU no puede ser nulo
  • El peso del producto puede estar en 0

CROSS:
  • El peso del producto (bulto) no puede estar en 0

Usar un Punto de Retiro Sucursal como destino

Cuando el envío debe entregarse en una sucursal de Urbano (servicio F — Retiro en sucursal, o G — Retiro en sucursal contra reembolso), la dirección de destino es la propia sucursal. Seguir estos pasos:

  1. Consultar el endpoint Puntos de Retiro Sucursales para obtener el listado de sucursales disponibles y sus códigos.
  2. Del resultado, tomar el valor prov_codigo de la sucursal deseada (ej. "G23").
  3. En el request de cargaCliente:
    • Enviar servicio con valor "F" o "G".
    • Enviar domicilio.localidad con el valor de prov_codigo obtenido (ej. "G23").
    • Completar domicilio.provincia, domicilio.codigoPostal y domicilio.direccion con los datos de dirección de esa sucursal obtenidos en la misma respuesta.

Ejemplos de código:

cURL
curl -X POST "https://testing-apis.urbano.com.ar/cargaCliente/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"productos":[{"largo":10,"alto":5,"ancho":2,"peso":50,"valor":5200,"valorContrareembolso":0,"cantidad":5,"sku":"Test3","descripcionProducto":"1072-1"}],"autentificacion":{"shipper":671,"password":"MPzQG6%jfN%-#tsb=CUj"},"destinatario":{"tipoDocumento":"DNI","numeroDocumento":32222222,"nombre":"Urbano Dev Test","email":["dev-test@urbano.com.ar"],"telefono":"5492994230940","celular":"5492994230940"},"domicilio":{"direccion":"Santa Rita","altura":"9999","codigoPostal":"1657","localidad":"San Martin","provincia":"Buenos Aires"},"codigoSeguimiento":"TEST15004","servicio":"E"}'
JavaScript
const response = await fetch('https://testing-apis.urbano.com.ar/cargaCliente/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  },
  body: JSON.stringify(jsonReqCargaCliente)
});

const data = await response.json();
console.log(data);
PHP
<?php
$payload = [
    'productos' => [[
        'largo'               => 10,
        'alto'                => 5,
        'ancho'               => 2,
        'peso'                => 50,
        'valor'               => 5200,
        'valorContrareembolso'=> 0,
        'cantidad'            => 1,
        'sku'                 => 'Test3',
        'descripcionProducto' => '1072-1',
    ]],
    'autentificacion' => [
        'shipper'  => 671,
        'password' => 'MPzQG6%jfN%-#tsb=CUj',
    ],
    'destinatario' => [
        'tipoDocumento'   => 'DNI',
        'numeroDocumento' => 32222222,
        'nombre'          => 'Urbano Dev Test',
        'email'           => ['dev-test@urbano.com.ar'],
        'telefono'        => '5492994230940',
        'celular'         => '5492994230940',
    ],
    'domicilio' => [
        'direccion'    => 'Santa Rita',
        'altura'       => '9999',
        'codigoPostal' => '1657',
        'localidad'    => 'San Martin',
        'provincia'    => 'Buenos Aires',
    ],
    'codigoSeguimiento' => 'TEST15004',
    'servicio'          => 'E',
];

$ch = curl_init('https://testing-apis.urbano.com.ar/cargaCliente/');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json', 'Accept: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
Códigos de respuesta
codErrorHTTPdescErrorresultado
0200ÉxitoOK
2200 / 401Credenciales inválidas (shipper o password vacíos/incorrectos)ERROR
3200Código de seguimiento vacío o cantidad debe ser mayor a 0ERROR
5200Código postal inválidoERROR
6200Sucursal inválidaERROR
7200Caracteres especiales no permitidos en el código de seguimientoERROR
8200Código de seguimiento ya existente en el sistemaERROR
9200No se permite peso 0ERROR
10200Tipo de servicio incorrecto o no se proporcionaron productosERROR
11200Proceso de carga vigente para ese código, o valor / contrareembolso negativoERROR
400200Request vacío, SKU inválido o número de documento requerido faltanteERROR
-1200Error interno al procesar el servicioERROR

Tracking

Consulta el seguimiento según el parámetro de "codigoSeguimiento", Nos retornara la URL del seguimiento, además de los movimientos con los parámetros check, descripción y fecha / hora.

POST https://testing-apis.urbano.com.ar/tracking/consultaTrackingMasivo/

JSON request:

JSON response:

Parámetros:

Requerido Parametro Tipo Longitud Descripción
autentificacion
shipper integer 4 (MAX) Número de shipper
password string - Contraseña del shipper
datos (array) — uno o más ítems por request
codigoSeguimiento string 4-15 Código de seguimiento del envío. Se convierte automáticamente a mayúsculas
codigoAlternativo string - Código alternativo de seguimiento. Se convierte automáticamente a mayúsculas
fechaDesde string 10 Fecha de inicio de búsqueda (formato: dd-mm-yyyy). Si no se envía, toma por defecto 3 meses atrás
fechaHasta string 10 Fecha de fin de búsqueda (formato: dd-mm-yyyy). Si no se envía, toma por defecto 3 días hacia adelante

Campos de respuesta:

Campo Tipo Descripción
codGestionstringCódigo de seguimiento del envío
shipperstringCódigo y nombre del shipper
nombreClientestringNombre del destinatario
productostringCódigo y descripción del producto
fechastringFecha de ingreso de la orden
estadostringÚltimo estado del envío
domicilio.direccionstringDirección de entrega
domicilio.localidadstringLocalidad de entrega
domicilio.provinciastringProvincia de entrega
url_trackingstringURL pública de seguimiento
movimientos[].checkstringCódigo de estado del movimiento
movimientos[].codigo_motivostringCódigo de motivo del movimiento
movimientos[].descripcionstringDescripción del movimiento
movimientos[].checkFechastringFecha y hora del movimiento
movimientos[].horastringHora del movimiento
movimientos[].agenciastringAgencia que registró el movimiento
movimientos[].latitudstringLatitud geográfica (si está disponible)
movimientos[].longitudstringLongitud geográfica (si está disponible)
La respuesta es siempre un array JSON, incluso para una sola consulta. Cada ítem del array datos[] genera una entrada en el array de respuesta.

Estados devueltos de movimiento:

  • PI - PEDIDO INGRESADO
  • AS - DESPACHO SUCURSAL
  • LD - SALIDA A RUTA
  • DL - ENTREGA EFECTIVA

Ejemplos de código:

cURL
curl -X POST "https://testing-apis.urbano.com.ar/tracking/consultaTrackingMasivo/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"datos":[{"codigoSeguimiento":"00000000001","codigoAlternativo":""},{"codigoSeguimiento":"00000000002","codigoAlternativo":""}],"autentificacion":{"shipper":"671","password":"MPzQG6%jfN%-#tsb=CUj"}}'
JavaScript
const response = await fetch('https://testing-apis.urbano.com.ar/tracking/consultaTrackingMasivo/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  },
  body: JSON.stringify(jsonReqTracking)
});

const data = await response.json();
console.log(data);
PHP
<?php
$payload = [
    'datos' => [
        ['codigoSeguimiento' => '00000000001', 'codigoAlternativo' => ''],
        ['codigoSeguimiento' => '00000000002', 'codigoAlternativo' => ''],
    ],
    'autentificacion' => [
        'shipper'  => '671',
        'password' => 'MPzQG6%jfN%-#tsb=CUj',
    ],
];

$ch = curl_init('https://testing-apis.urbano.com.ar/tracking/consultaTrackingMasivo/');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json', 'Accept: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
Códigos de respuesta
codErrorHTTPdescErrorresultado
0200ÉxitoOK
2200 / 401Credenciales inválidas (shipper o password vacíos/incorrectos)ERROR
4200Error interno al procesar la consulta de trackingERROR
5200Pieza postal inexistente para el código de seguimiento informadoERROR
-1200Error interno al procesar el servicioERROR

Puntos de Retiro

Ingresando según nuestra dirección, nos retornara todos los puntos de retiro disponibles incluyendo según su ciudad y los parámetros correspondientes de "latitud", "longitud", "nombre", "dirección", "teléfono", "código", "entrecalles", "codigoPostal", "municipalidad", "localidad", "provincia", "elockers", "distancia".

POST https://testing-apis.urbano.com.ar/puntosDeRetiroRest/

JSON request:

JSON response:

Parámetros:

Requerido Parametro Tipo Longitud Descripción
direccion string 45 Dirección a buscar
altura string 6 Altura de la dirección
codigoPostal integer 4 Código postal de la dirección
longitud string 10 Longitud geográfica de la dirección
latitud string 10 Latitud geográfica de la dirección
elockers integer 1 Filtrar por e-lockers (0 o 1)
shipper integer - Número de shipper
password string - Contraseña del shipper

Ejemplos de código:

cURL
curl -X POST "https://testing-apis.urbano.com.ar/puntosDeRetiroRest/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"direccion":"Ferre","altura":"6660","codigoPostal":"31321fds","longitud":"34.6095616","latitud":"-58.388765","localidad":"Villa Riachuelo","elockers":1,"autentificacion":{"shipper":"671","password":"MPzQG6%jfN%-#tsb=CUj"}}'
JavaScript
const response = await fetch('https://testing-apis.urbano.com.ar/puntosDeRetiroRest/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  },
  body: JSON.stringify(jsonReqPR)
});

const data = await response.json();
console.log(data);
PHP
<?php
$payload = [
    'direccion'      => 'Ferre',
    'altura'         => '6660',
    'codigoPostal'   => '3132',
    'longitud'       => '34.6095616',
    'latitud'        => '-58.388765',
    'localidad'      => 'Villa Riachuelo',
    'elockers'       => 1,
    'autentificacion'=> [
        'shipper'  => '671',
        'password' => 'MPzQG6%jfN%-#tsb=CUj',
    ],
];

$ch = curl_init('https://testing-apis.urbano.com.ar/puntosDeRetiroRest/');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json', 'Accept: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
Códigos de respuesta
codErrorHTTPdescErrorresultado
0200ÉxitoOK
2200 / 401Credenciales inválidas (shipper o password vacíos/incorrectos)ERROR
-1200Error interno al procesar el servicioERROR

Puntos de Retiro Sucursales

Ingresando ubicacion, pieza y autentificacion.

POST https://testing-apis.urbano.com.ar/puntosDeRetiroSucursales/

JSON request:

JSON response:

Parámetros:

Requerido Parametro Tipo Longitud Descripción
autentificacion
shipper integer - Número de shipper
password string - Contraseña del shipper
ubicacion
va_prov_codigo string 1 Valor fijo: siempre debe enviarse como "%". Cualquier otro valor devuelve error 400
va_con_llc integer 1 Con locker (1) o sin locker (0)
pieza
peso decimal 4,2 Peso de la pieza en kg
alto decimal 4,2 Altura de la pieza en cm
largo decimal 4,2 Largo de la pieza en cm
ancho decimal 4,2 Ancho de la pieza en cm
Raíz
elockers integer 1 Valor fijo: siempre enviar como 1

Notas Importantes

  • El campo prov_codigo que devuelve cada sucursal en la respuesta es el valor que debe enviarse en el campo localidad del endpoint cargaCliente cuando el envío tiene como destino un punto de retiro (sucursal).

Ejemplos de código:

cURL
curl -X POST "https://testing-apis.urbano.com.ar/puntosDeRetiroSucursales/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"ubicacion":{"va_prov_codigo":"%","va_con_llc":1},"pieza":{"peso":10,"alto":1,"largo":1,"ancho":1},"autentificacion":{"shipper":"671","password":"MPzQG6%jfN%-#tsb=CUj"},"elockers":1}'
JavaScript
const response = await fetch('https://testing-apis.urbano.com.ar/puntosDeRetiroSucursales/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  },
  body: JSON.stringify(jsonReqPRSuc)
});

const data = await response.json();
console.log(data);
PHP
<?php
$payload = [
    'ubicacion' => [
        'va_prov_codigo' => '%',
        'va_con_llc'     => 1,
    ],
    'pieza' => [
        'peso'  => 10,
        'alto'  => 1,
        'largo' => 1,
        'ancho' => 1,
    ],
    'autentificacion' => [
        'shipper'  => '671',
        'password' => 'MPzQG6%jfN%-#tsb=CUj',
    ],
    'elockers' => 1,
];

$ch = curl_init('https://testing-apis.urbano.com.ar/puntosDeRetiroSucursales/');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json', 'Accept: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
Códigos de respuesta
codErrorHTTPdescErrorresultado
0200ÉxitoOK
2200 / 401Credenciales inválidas (shipper o password vacíos/incorrectos)ERROR
400400No se puede interpretar la solicitud dada (ubicacion.va_prov_codigo debe ser "%")ERROR
-1200Error interno al procesar el servicioERROR

Canalizador por Código Postal

Ingresando según nuestro código postal, nos retornara la logística según su código, nos informara si la consulta a sido completada, además de informarnos sobre algún error en la base de datos con el código de error.

POST https://testing-apis.urbano.com.ar/canalizadorPorCodigoPostalRest/

JSON request:

JSON response:

Parámetros:

Requerido Parametro Tipo Longitud Descripción
autentificacion
shipper integer - Número de shipper
password string - Contraseña del shipper
Raíz
codigoPostal integer 4 Código postal a consultar. Debe ser numérico. El ruteo sameday es determinado por la configuración del shipper en el sistema, no por un parámetro del request

Ejemplos de código:

cURL
curl -X POST "https://testing-apis.urbano.com.ar/canalizadorPorCodigoPostalRest/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"codigoPostal":1657,"autentificacion":{"shipper":"671","password":"MPzQG6%jfN%-#tsb=CUj"}}'
JavaScript
const response = await fetch('https://testing-apis.urbano.com.ar/canalizadorPorCodigoPostalRest/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  },
  body: JSON.stringify(jsonReqCanalizador)
});

const data = await response.json();
console.log(data);
PHP
<?php
$payload = [
    'codigoPostal'    => 1657,
    'autentificacion' => [
        'shipper'  => '671',
        'password' => 'MPzQG6%jfN%-#tsb=CUj',
    ],
];

$ch = curl_init('https://testing-apis.urbano.com.ar/canalizadorPorCodigoPostalRest/');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json', 'Accept: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
Códigos de respuesta
codErrorHTTPdescErrorresultado
0200ÉxitoOK
2200 / 401Credenciales inválidas (shipper o password vacíos/incorrectos)ERROR
5200Campos inválidos y/o vacíos (codigoPostal no numérico)ERROR
-1200Error interno al procesar el servicioERROR

Impresión de Etiquetas

Enviando el código de seguimiento y el tipo de formato a imprimir nos devuelve el PDF correspondiente.

GET https://testing-apis.urbano.com.ar/impresionEtiqueta/?tipo={tipo}&shipper={shipper}&codSeguimiento={codigoSeguimiento}

Parámetros:

Requerido Parametro Tipo Longitud Descripción
tipo string 10 Formato de guía para imprimir: A4 | Z10X10 | Z10X6 | ZPL
shipper integer - Número de shipper
codSeguimiento string 4-15 Código de seguimiento del paquete

Nota: Este endpoint no requiere autenticación

Ejemplos de código:

cURL
curl -X GET "https://testing-apis.urbano.com.ar/impresionEtiqueta/?tipo=A4&shipper=671&codSeguimiento=TEST15004" \
  -H "Accept: application/pdf" \
  --output etiqueta.pdf
JavaScript
const params = new URLSearchParams({
  tipo: 'A4',
  shipper: '671',
  codSeguimiento: 'TEST15004'
});

const response = await fetch('https://testing-apis.urbano.com.ar/impresionEtiqueta/?' + params);
const blob = await response.blob();

const url = URL.createObjectURL(blob);
window.open(url);
PHP
<?php
$url = 'https://testing-apis.urbano.com.ar/impresionEtiqueta/?' . http_build_query([
    'tipo'           => 'A4',
    'shipper'        => 671,
    'codSeguimiento' => 'TEST15004',
]);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Accept: application/pdf'],
]);

$pdfContent = curl_exec($ch);
curl_close($ch);

file_put_contents('etiqueta.pdf', $pdfContent);
Este endpoint devuelve un PDF (no JSON). Los errores se retornan como texto plano: tipo ausente → "Es necesario ingresar el formato de guia a imprimir (A4, Z10X10, Z10X6)." | shipper o codSeguimiento ausentes → "Es necesario ingresar los datos generar la etiqueta."

Normalizador de Direcciones

Ingresando según nuestra dirección, nos retornara los datos del domicilio correctos de acuerdo a nuestras bases, de esta manera obtendremos mayor agilidad en la logística de los envíos.

POST https://testing-apis.urbano.com.ar/normalizadorDireccionRest/

JSON request:

JSON response:

Parámetros:

Requerido Parametro Tipo Longitud Descripción
autentificacion
  shipper integer - Número de shipper
  key string - Clave de autenticación (distinta del campo password utilizado en los demás endpoints)
calle string 45 Calle a consultar
altura string 6 Número de calle a consultar
cp integer 4 Código postal a consultar
localidad string - Localidad (opcional, mejora la precisión del resultado)
provincia string - Provincia (opcional, mejora la precisión del resultado)

Campos de respuesta (dentro de datos, devuelto como string JSON codificado):

Campo Tipo Descripción
callestringNombre de calle normalizado
cpstringCódigo postal normalizado
deptostringDepartamento / unidad de apartamento
entreCalle1stringPrimera calle de intersección
entreCalle2stringSegunda calle de intersección
provinciastringNombre de provincia normalizado
partidostringMunicipio / partido
localidadstringNombre de localidad normalizado
barriostringBarrio
numerostringNúmero de calle normalizado
pisostringNúmero de piso
latitudstringCoordenada de latitud
longitudstringCoordenada de longitud
estadostringEstado del resultado devuelto por el normalizador
motivostringMotivo / detalle del estado del resultado
zonaPeligrosabooleanIndica si la dirección está en una zona restringida
suguerenciasPorDudaarraySugerencias de direcciones cuando el resultado es ambiguo

Ejemplos de código:

cURL
curl -X POST "https://testing-apis.urbano.com.ar/normalizadorDireccionRest/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"calle":"Esteban Echeverria","altura":"1764","cp":"1604","localidad":"Florida","provincia":"Buenos Aires","autentificacion":{"shipper":"671","key":"MPzQG6%jfN%-#tsb=CUj"}}'
JavaScript
const response = await fetch('https://testing-apis.urbano.com.ar/normalizadorDireccionRest/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  },
  body: JSON.stringify(jsonReqNormalizador)
});

const data = await response.json();
console.log(data);
PHP
<?php
$payload = [
    'calle'           => 'Esteban Echeverria',
    'altura'          => '1764',
    'cp'              => '1604',
    'localidad'       => 'Florida',
    'provincia'       => 'Buenos Aires',
    'autentificacion' => [
        'shipper' => '671',
        'key'     => 'MPzQG6%jfN%-#tsb=CUj',
    ],
];

$ch = curl_init('https://testing-apis.urbano.com.ar/normalizadorDireccionRest/');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json', 'Accept: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
Códigos de respuesta
codErrorHTTPdescErrorresultado
0200Éxito (resultado: Exitoso)OK
1200Dirección inexistenteERROR
3200Faltan campos obligatorios (shipper, key, calle, altura o cp)ERROR
500200Error en la consulta con el servicio externo, intente más tardeERROR

Consulta peso y medidas

Ingresando el código de seguimiento, nos retornará el peso y medidas del paquete detectado al ser procesados.

POST https://testing-apis.urbano.com.ar/consultaPesoMedidas/

JSON request:

JSON response:

Parámetros:

Requerido Parametro Tipo Longitud Descripción
codigoSeguimiento string 4-15 Código de seguimiento para la búsqueda
shipper integer - Número de shipper
password string - Contraseña del shipper

Ejemplos de código:

cURL
curl -X POST "https://testing-apis.urbano.com.ar/consultaPesoMedidas/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"codigoSeguimiento":"0000001","autentificacion":{"shipper":671,"password":"MPzQG6%jfN%-#tsb=CUj"}}'
JavaScript
const response = await fetch('https://testing-apis.urbano.com.ar/consultaPesoMedidas/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  },
  body: JSON.stringify(jsonReqPeso)
});

const data = await response.json();
console.log(data);
PHP
<?php
$payload = [
    'codigoSeguimiento' => '0000001',
    'autentificacion'   => [
        'shipper'  => 671,
        'password' => 'MPzQG6%jfN%-#tsb=CUj',
    ],
];

$ch = curl_init('https://testing-apis.urbano.com.ar/consultaPesoMedidas/');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json', 'Accept: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
Códigos de respuesta

Este endpoint usa status.success y status.message en lugar de codError.

HTTPstatus.successstatus.message
200trueok
200falseNo se encuentran datos para el código de seguimiento solicitado
400falseRequest vacío o codigoSeguimiento requerido
401falseCredenciales inválidas

Rescate de Órdenes

Permite solicitar el rescate de piezas en tránsito a través de dos modalidades:

  • Devolución — rescate masivo: el pedido es devuelto al vendedor/remitente. Se pueden enviar múltiples piezas en una misma solicitud.
  • Redireccionamiento — rescate individual: la pieza es derivada a una nueva dirección de entrega. Solo se permite una pieza por solicitud y es obligatorio informar los datos del nuevo destinatario y domicilio.

POST https://testing-apis.urbano.com.ar/wbs/rescate/

Modalidad: Devolución (masivo)

Devuelve una o más piezas al remitente. El campo tipoRescate debe ser "devolucion".

JSON request:

JSON response:

Ejemplos de código (Devolución):

cURL
curl -X POST "https://testing-apis.urbano.com.ar/wbs/rescate/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "auth": {
      "shipper": 671,
      "password": "MPzQG6%jfN%-#tsb=CUj"
    },
    "pieces": ["MO1775068894579", "MO1775068894580"],
    "tipoRescate": "devolucion"
  }'
JavaScript
const response = await fetch('https://testing-apis.urbano.com.ar/wbs/rescate/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  },
  body: JSON.stringify(jsonReqRescate)
});

const data = await response.json();
console.log(data);
PHP
<?php
$payload = [
    'auth' => [
        'shipper'  => 671,
        'password' => 'MPzQG6%jfN%-#tsb=CUj',
    ],
    'pieces'      => ['MO1775068894579', 'MO1775068894580'],
    'tipoRescate' => 'devolucion',
];

$ch = curl_init('https://testing-apis.urbano.com.ar/wbs/rescate/');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json', 'Accept: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);


POST https://testing-apis.urbano.com.ar/wbs/rescate/

Modalidad: Redireccionamiento (individual)

Redirige una pieza a una nueva dirección de entrega. El campo tipoRescate debe ser "redireccionamiento". Solo se acepta una pieza en el array pieces.

JSON request:

JSON response:

Ejemplos de código (Redireccionamiento):

cURL
curl -X POST "https://testing-apis.urbano.com.ar/wbs/rescate/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "auth": {
      "shipper": 671,
      "password": "MPzQG6%jfN%-#tsb=CUj"
    },
    "pieces": ["MO1775068894579"],
    "tipoRescate": "redireccionamiento",
    "destinatario": { "nombre": "Juan Pérez" },
    "domicilio": {
      "direccion": "Av. Corrientes",
      "altura": "1234",
      "codigoPostal": "1043",
      "localidad": "Ciudad Autónoma de Buenos Aires",
      "provincia": "Buenos Aires"
    }
  }'
JavaScript
const response = await fetch('https://testing-apis.urbano.com.ar/wbs/rescate/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  },
  body: JSON.stringify(jsonReqRescateRedir)
});

const data = await response.json();
console.log(data);
PHP
<?php
$payload = [
    'auth' => [
        'shipper'  => 671,
        'password' => 'MPzQG6%jfN%-#tsb=CUj',
    ],
    'pieces'      => ['MO1775068894579'],
    'tipoRescate' => 'redireccionamiento',
    'destinatario'=> ['nombre' => 'Juan Pérez'],
    'domicilio'   => [
        'direccion'    => 'Av. Corrientes',
        'altura'       => '1234',
        'codigoPostal' => '1043',
        'localidad'    => 'Ciudad Autónoma de Buenos Aires',
        'provincia'    => 'Buenos Aires',
    ],
];

$ch = curl_init('https://testing-apis.urbano.com.ar/wbs/rescate/');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json', 'Accept: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);

Parámetros:

Requerido Parámetro Tipo Descripción
auth.shipper integer Número de shipper (máximo 4 dígitos)
auth.password string Contraseña del shipper
pieces array Códigos de seguimiento a rescatar. Devolución: acepta múltiples. Redireccionamiento: solo 1 elemento.
tipoRescate string "devolucion" o "redireccionamiento"
destinatario.nombre string Nombre del nuevo destinatario. Requerido para redireccionamiento.
domicilio.direccion string Calle del nuevo domicilio. Requerido para redireccionamiento.
domicilio.altura string Número/altura del domicilio. Requerido para redireccionamiento.
domicilio.codigoPostal string Código postal de 4 dígitos numéricos. Requerido para redireccionamiento.
domicilio.localidad string Localidad del nuevo domicilio. Requerido para redireccionamiento.
domicilio.provincia string Provincia del nuevo domicilio. Requerido para redireccionamiento.
domicilio.piso string Piso (opcional, solo redireccionamiento).
domicilio.departamento string Departamento (opcional, solo redireccionamiento).
domicilio.observaciones string Observaciones adicionales (opcional, solo redireccionamiento).

Posibles mensajes en la respuesta:

Campo Modalidad Mensaje Resultado
succeeded Ambas La pieza ha sido rescatada correctamente OK
succeeded Devolución Solicitud de rescate de Devolucion generada correctamente OK
succeeded Redireccionamiento Solicitud de rescate de Redireccion generada correctamente OK
rejected Ambas La pieza ya tiene un Rescate existente RECHAZADO
rejected Ambas La pieza no es apta para ser rescatada RECHAZADO
rejected Redireccionamiento La pieza no se pudo rescatar porque no tiene DESPACHO RECHAZADO
failed Ambas El proceso de rescate ha fallado, comuníquese con su Ejecutivo de Cuentas ERROR

Cancelación de Orden

IMPORTANTE: Este End-Point se deprecará para Julio de 2026.

Permite solicitar la cancelación de una orden a partir de su código de seguimiento. El sistema verifica si Urbano tiene el producto en su poder y si la pieza es apta para cancelar, generando en ese caso una solicitud de rescate automática. La autenticación se realiza mediante headers HTTP en lugar del body JSON.

GET https://testing-apis.urbano.com.ar/servicio-cancelacion-rescate/index.php/{codigoSeguimiento}

JSON response:

Notas Importantes

  • Las credenciales no van en el body sino en los headers HTTP: x-client-id (shipper) y x-client-secret (password).
  • El código de seguimiento se pasa directamente en la URL, no en el body.
  • avalibleForCancel: true indica que la pieza era apta y se generó la solicitud de cancelación/rescate.
  • weHaveTheProduct: true indica que Urbano tiene el producto físicamente en su poder.

Parámetros:

Tipo Parámetro Descripción
URL codigoSeguimiento Código de seguimiento de la orden a cancelar (parte de la URL)
Header x-client-id Número de shipper
Header x-client-secret Contraseña del shipper

Campos de la respuesta:

CampoTipoDescripción
successbooleanIndica si la solicitud fue procesada correctamente
messagestringMensaje descriptivo del resultado
codeintegerCódigo HTTP de la respuesta
data.avalibleForCancelbooleantrue si la pieza era apta y se generó la solicitud de cancelación
data.weHaveTheProductbooleantrue si Urbano tiene el producto físicamente en su poder

Ejemplos de código:

cURL
curl -X GET "https://testing-apis.urbano.com.ar/servicio-cancelacion-rescate/index.php/00000000003" \
  -H "x-client-id: 671" \
  -H "x-client-secret: MPzQG6%jfN%-#tsb=CUj"
JavaScript
const response = await fetch('https://testing-apis.urbano.com.ar/servicio-cancelacion-rescate/index.php/00000000003', {
  method: 'GET',
  headers: {
    'x-client-id': '671',
    'x-client-secret': 'MPzQG6%jfN%-#tsb=CUj'
  }
});

const data = await response.json();
console.log(data);
PHP
<?php
$ch = curl_init('https://testing-apis.urbano.com.ar/servicio-cancelacion-rescate/index.php/00000000003');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'x-client-id: 671',
        'x-client-secret: MPzQG6%jfN%-#tsb=CUj',
    ],
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
Códigos de respuesta
HTTPsuccessDescripción
200trueSolicitud procesada correctamente
400falsePieza no encontrada en Urbano
422falseLa pieza ya fue procesada para cancelación previamente
500falseCredenciales vacías, no encontradas, o error interno del servidor

Buenas Practicas

Recomendaciones:

- Validar datos: Siempre valide los datos antes de enviarlos a la API.

- Manejo de errores: Implemente un adecuado manejo de errores y reintentos.

- Caching: Para consultas de tarifas frecuentes, considere implementar caching.

- Logging: Mantenga un registro de las solicitudes y respuestas para facilitar el diagnóstico.

- Rate limiting: Respete los límites de tasa de la API para evitar bloqueos.