Urbano Express REST API Last updated: 06-03-2026

Welcome to the Urbano Express REST API documentation. This API will allow you to integrate your systems with our logistics services to manage shipments, check rates, track packages, and more.

Onboarding Process at Urbano:

This document details the steps required to integrate a new client into our logistics platform, using the available APIs for communication with Urbano Express Argentina.

1. Start of the Process and Email Chain:
To begin the integration process, credentials CAN ONLY BE REQUESTED BY YOUR ACCOUNT EXECUTIVE (from now on referred to as AE).

If you do not yet have an assigned AE, please write to: Commercial Team (equipocomercial@urbano.com.ar)

Your AE will be the point of contact to initiate this process and provide you with all the documentation needed for the commercial management. Once your AE has started the process, an email chain will be set up where we will guide you through each step.
The email chain must always include your AE and Integrations (integracionsistemas@urbano.com.ar) so the process flows smoothly without setbacks.

2. Testing Environment and Test Orders:
First, we will send you the credentials for our dedicated testing environment. This environment will allow you to configure and test the connection between your store and our platform before going to production. You will be able to generate test orders, print labels, and track your shipments with no real impact on our systems. This step is key to avoiding inconsistencies and ensuring everything works correctly with the integration.

Key steps:

Initial configuration: You will need to configure your integration with our system in the testing environment.

Sending test orders: Once configured, it is essential that you send us a minimum of 5 orders generated in your store under our testing environment. These orders must be representative of the types of orders you will regularly manage (e.g. with different products, shipping addresses, etc.).

Review and validation: Our team will review these test orders to verify that the information is transmitted correctly and that there are no inconsistencies or errors in the received data.

This includes validation of:
- Recipient data (name, full address, phone, email).
- Product details (weight and dimensions are MANDATORY for each product).

3. Obtaining Production Credentials:

Once we have validated the 5 test orders sent from your testing environment and confirmed that the integration works correctly, we will proceed to send you the production credentials.

Process:

Validation confirmation: You will receive a confirmation from our team indicating that the testing orders have been successfully validated.

Credential delivery: Immediately after confirmation, we will provide you with the necessary credentials (Endpoint, Shipper Number and Password) to configure the integration in your production environment.

Production configuration: With these credentials, you will be able to replicate the successful testing environment setup in your production environment, enabling the real integration with Urbano Express Argentina.

Important considerations:
We recommend performing additional tests in production with a low volume of orders at the beginning to ensure optimal performance before operating at full volume.

For any questions or issues during the integration process, do not hesitate to contact us through the Email Chain mentioned above (always including your AE and the Integrations Team).

Important Things Before Integrating with Urbano:

Please note that once an order has been submitted it cannot be modified. The only option is to cancel it and reload it through the Customer Portal using an (.XLS) file manually.

General Description

Developed by Urbano Express, this API provides all the information needed to integrate your e-commerce with our logistics services.

Main benefits:

  • Logistics process automation
  • Real-time shipping rate quotes
  • Detailed shipment tracking
  • Pickup points and branch management
  • Label printing in multiple formats (A4, Z10X10, Z10X6, ZPL)
  • Address normalization for faster logistics
  • Package weight and dimensions lookup
  • Postal code routing
  • Support for multiple service types (delivery, pickup, cash on delivery, branch)
  • Flexible integration with multiple platforms

API Services

With our services you will have access to the following benefits:

TRACKING:

The tracking service allows you to know at any time and instantly the status of a package. You can provide your customers with detailed information about their shipment tracking.

RATE QUOTE:

The rate quote service allows you to show your customers the shipping cost at the time of purchase. This way you can automatically add the shipping cost to the sale price in your eCommerce.

CREATE SHIPMENT ORDER:

With this service you can create a shipment order by specifying the recipient, address, products, and tracking code. As a response, you will receive confirmation and can then print the shipping label.

PICK UP POINTS:

Get available pick up points based on the provided address, including branches and lockers. This information allows you to offer your customers flexible delivery options.

LABEL PRINTING:

Generate shipping labels in different formats (A4, Z10X10, Z10X6, ZPL) according to your logistics operation needs.

ADDRESS NORMALIZER:

Validate and normalize entered addresses to ensure correct delivery logistics. The system will return the correct address data from our database.

POSTAL CODE ROUTER:

Check available logistics based on the destination postal code. The system will return the delivery options available for that area.

WEIGHT AND DIMENSIONS:

Get the weight and dimensions of the detected package when processed in our distribution centers.

ORDER RESCUE:

Request the rescue of one or multiple pieces in transit. Supports two modes: return to the sender or redirection to a new delivery address.

Authentication

Each request using GET or POST methods will require authentication for the shipper, which will include a password.

Contact Urbano Express for the credentials corresponding to your shipper.

Note:
Authentication fields are required in all cases except for the GET method of label printing.

The postal code is 4 digits from 1000 to 9999

Environments

The API is available in two environments:

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

Used for client testing and development. The URLs in this documentation point to this environment.

Test credentials:

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

Used for actual shipment processing.
Production credentials must be requested through your Commercial Team (equipocomercial@urbano.com.ar).

Main Endpoints

Rate Quote

It will return the corresponding rate according to your postal code, as well as return the "RealWeight". It will inform you if there is an error with your number and its description.

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

JSON request:

JSON response:

Parameters:

Required Parameter Type Length Description
codigoPostal
postal code
integer 4 Destination postal code. Must be between 1000 and 9999
pesoEspecifico
actual weight
decimal 4,2 Actual package weight in kg. Must be numeric
pesoVolumetrico
volumetric weight
decimal 4,2 Volumetric weight in kg (optional). If alto, largo and ancho are provided, the system calculates the volumetric weight automatically using the shipper's aforo factor and takes the higher value between the calculated and the one sent. The final pesoReal returned is the higher value between pesoEspecifico and pesoVolumetrico
alto
height
decimal 4,2 Package height in cm. Used to calculate volumetric weight
largo
length
decimal 4,2 Package length in cm. Used to calculate volumetric weight
ancho
width
decimal 4,2 Package width in cm. Used to calculate volumetric weight
shipper integer - Shipper number
password string - Shipper password

Code examples:

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);
Response codes
codErrorHTTPdescErrorresultado
0200SuccessOK
2200 / 401Invalid credentials (shipper or password empty/incorrect)ERROR
5200Invalid postal code (between 1000 and 9999), or pesoEspecifico missing or non-numericERROR
-1200Internal error while processing the serviceERROR

Create Shipment Order

Creates a shipment order by specifying the recipient and their address (with an optional alternative address), a tracking code, delivery note, and observations. In Products, enter the description, dimensions, weight, value, SKU, and quantity.

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

JSON request:

JSON response:

Parameters:

Required Parameter Type Length Description
productos (array)
largo
length
decimal 4,2 Refers to the total length of the shipment (cm)
alto
height
decimal 4,2 Refers to the total height of the shipment (cm)
ancho
width
decimal 4,2 Refers to the total width of the shipment (cm)
peso
weight
decimal 4,2 Refers to the specific weight of the shipment (kg)
valor
value
integer 8 Product value to insure the shipment. Optional; if omitted, assumed 0.
This service must be managed with your Account Executive.
valorContrareembolso
cash on delivery value
integer 8 Cash on delivery payment value. Required only for service type "B"; in that case it cannot be 0.
cantidad
quantity
integer 4 Refers to the number of labels to be printed for the order
sku string 30 SKU identifier of the product. Required only for WARE clients.
descripcionProducto
product description
string 40 Refers to the product description
autentificacion
shipper integer - Shipper number
password string - Shipper password
destinatario
tipoDocumento
document type
string 10 Refers to the type of identification of the person (DNI, LE or LC)
numeroDocumento
document number
integer 10 Refers to the document number of the person
nombre
name
string 40 Refers to the name of the person
email array/string 45 Refers to the email address
telefono
phone
string 40 Refers to the personal phone
celular
mobile phone
string 15 Refers to the mobile phone
autorizado (array) - See recipient fields
domicilio
direccion
street address
string 45 Recipient address
altura
street number
string 6 Address number
piso
floor
string 6 Floor of the address
departamento
apartment
string 6 Apartment of the address
codigoPostal
postal code
integer 4 Postal Code
localidad
locality / city
string - Location of the address
provincia
province
string - Province of the address
latitud
latitude
string 10 Latitude location
longitud
longitude
string 10 Longitude location
telefono
phone
array - Address phone (array)
domicilioAlternativo - See address fields (all optional)
datoNumerico
invoice / delivery note number
string 10 Additional numeric data
codigoSeguimiento string 4-16 Unique identifier code of the shipment (minimum 4, maximum 16 characters)
codigoAlternativo
alternative code
integer 15 Alternative code
servicio
service type
string 1 Service type
observaciones
observations
array 6 Additional observations (up to 6 elements, 95 characters each)

Important Notes

  • Service types:
    • E: Delivery
    • R: Pickup
    • B: Cash on delivery
    • F: Pick Up Point
    • G: Pick Up Point with cash on delivery
    • C: Exchange (Simultaneous Pickup and Delivery of products)

  • If the service is Cash on Delivery, the refund amount in the field "valorContrareembolso"cannot be 0
  • If the client has insurance, the "valor" field of the product cannot be 0. This service must be managed with your Account Executive.
  • Recipient fields are required except phone and email which can be null.
  • Authorized recipient fields can be null
  • Address fields: height, floor, apartment, longitude, latitude can be null. Address, location, province, and postal code are required.
  • Alternative address fields can be null.
  • The tracking code is required and has a maximum of 16 characters (minimum 4).
  • Alternative tracking code can be null.
  • Observations can be null. The character limit is 95 characters, maximum 2 observations.
  • If the order is for pick up point (service F or G), the localidad
    locality / city field must contain the branch code (e.g. G23), obtained from the prov_codigo field of the Branch Pick Up Points endpoint.

WAREHOUSING:
  • The SKU code cannot be null
  • The product weight can be 0

CROSS:
  • The product weight (package) cannot be 0

Using a Pick Up Point as destination

When the shipment must be delivered to an Urbano pick up point (service F — Pick Up Point, or G — Pick Up Point with cash on delivery), the destination address is the branch itself. Follow these steps:

  1. Call the Branch Pick Up Points endpoint to retrieve the list of available branches and their codes.
  2. From the response, take the prov_codigo value of the desired branch (e.g. "G23").
  3. In the cargaCliente request:
    • Set servicioservice type to "F" or "G".
    • Set domicilio.localidadaddress · locality to the prov_codigo value obtained (e.g. "G23").
    • Set domicilio.provinciaaddress · province, domicilio.codigoPostaladdress · postal code and domicilio.direccionaddress · street with the branch address data from the same response.

Code examples:

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);
Response codes
codErrorHTTPdescErrorresultado
0200SuccessOK
2200 / 401Invalid credentials (shipper or password empty/incorrect)ERROR
3200Missing tracking code or invalid quantity (must be greater than 0)ERROR
5200Invalid postal codeERROR
6200Invalid branchERROR
7200Special characters not allowed in tracking code (alphanumeric and "-" only)ERROR
8200Tracking code already exists in the systemERROR
9200Weight 0 is not allowedERROR
10200Incorrect service type or no products providedERROR
11200The value or cash-on-delivery amount cannot be negativeERROR
400200Invalid SKU (does not exist in WMS), missing required document number, or empty requestERROR
-1200Internal error while processing the serviceERROR

Tracking

Check the tracking according to the "codigoSeguimiento" parameter. It will return the tracking URL, as well as the movements with the check parameters, description, and date/time.

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

JSON request:

JSON response:

Parameters:

Required Parameter Type Length Description
autentificacion
shipper integer - Shipper number
password string - Shipper password
datos (array) — one or more items per request
codigoSeguimiento
tracking code
string 4-15 Shipment tracking code. Automatically converted to uppercase
codigoAlternativo
alternative code
string - Alternative tracking code. Automatically converted to uppercase
fechaDesde
start date
string 10 Search start date (format: dd-mm-yyyy). If not sent, defaults to 3 months ago
fechaHasta
end date
string 10 Search end date (format: dd-mm-yyyy). If not sent, defaults to 3 days from now

Response fields:

Field Type Description
codGestionstringTracking code of the shipment
shipperstringShipper code and name
nombreClientestringRecipient's name
productostringProduct code and description
fechastringOrder entry date
estadostringLatest shipment status
domicilio.direccion
address · street
stringDelivery address
domicilio.localidad
address · locality
stringDelivery locality
domicilio.provincia
address · province
stringDelivery province
url_trackingstringPublic tracking URL
movimientos[].checkstringMovement status code
movimientos[].codigo_motivostringReason code for the movement
movimientos[].descripcionstringMovement description
movimientos[].checkFechastringDate and time of the movement
movimientos[].horastringTime of the movement
movimientos[].agenciastringBranch that recorded the movement
movimientos[].latitudstringGeographic latitude (if available)
movimientos[].longitudstringGeographic longitude (if available)
The response is always a JSON array, even for a single tracking query. Each item in datos[] generates one entry in the response array.

Returned movement statuses:

  • PI - ORDER RECEIVED
  • AS - BRANCH DISPATCH
  • LD - DEPARTURE
  • DL - DELIVERY

Code examples:

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);
Response codes
codErrorHTTPdescErrorresultado
0200SuccessOK
2200 / 401Invalid credentials (shipper or password empty/incorrect)ERROR
4200Internal database error while processing the tracking queryERROR
5200Postal piece not found for the provided tracking codeERROR
-1200Internal error while processing the serviceERROR

Pick Up Points

Entering according to our address, it will return all available pick up points including according to your city and the corresponding parameters of "latitude", "longitude", "name", "address", "phone", "code", "cross streets", "postal code", "municipality", "location", "province", "elockers", "distance".

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

JSON request:

JSON response:

Parameters:

Required Parameter Type Length Description
direccion
street address
string 45 Address to search
altura
street number
string 6 Address number
codigoPostal
postal code
integer 4 Postal code of the address
longitud
longitude
string 10 Geographic longitude of the address
latitud
latitude
string 10 Geographic latitude of the address
elockers integer 1 Filter by e-lockers (0 or 1)
shipper integer - Shipper number
password string - Shipper password

Code examples:

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);
Response codes
codErrorHTTPdescErrorresultado
0200SuccessOK
2200 / 401Invalid credentials (shipper or password empty/incorrect)ERROR
-1200Internal error while processing the serviceERROR

Branch Pick Up Points

Returns the list of Urbano branches available as pickup destinations. Each branch includes its code (prov_codigo), address, coordinates, and locker availability. Use the prov_codigo value as the localidad field when creating a shipment order with service type F or G.

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

JSON request:

JSON response:

Parameters:

Required Parameter Type Length Description
autentificacion
shipper integer - Shipper number
password string - Shipper password
ubicacion
va_prov_codigo string 1 Fixed value: must always be sent as "%". Any other value will result in a 400 error
va_con_llc integer 1 With locker (1) or without locker (0)
pieza
peso
weight
decimal 4,2 Weight of the piece in kg
alto
height
decimal 4,2 Height of the piece in cm
largo
length
decimal 4,2 Length of the piece in cm
ancho
width
decimal 4,2 Width of the piece in cm
Root
elockers integer 1 Fixed value: always send as 1

Important Notes

  • The prov_codigo field returned by each branch in the response is the value that must be sent in the localidad field of the cargaCliente endpoint when the shipment is destined for a pick up point (branch).

Code examples:

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);
Response codes
codErrorHTTPdescErrorresultado
0200SuccessOK
2200 / 401Invalid credentials (shipper or password empty/incorrect)ERROR
400400Cannot interpret the request (ubicacion.va_prov_codigo must be "%")ERROR
-1200Internal error while processing the serviceERROR

Postal Code Router

Entering our postal code, it will return the logistics according to your code, it will inform if the query has been completed, as well as inform us about any error in the database with the error code.

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

JSON request:

JSON response:

Parameters:

Required Parameter Type Length Description
autentificacion
shipper integer - Shipper number
password string - Shipper password
Root
codigoPostal
postal code
integer 4 Postal code to query. Must be numeric. Same-day routing is determined by shipper configuration in the system, not by a request parameter

Code examples:

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);
Response codes
codErrorHTTPdescErrorresultado
0200SuccessOK
2200 / 401Invalid credentials (shipper or password empty/incorrect)ERROR
5200Invalid or empty fields (codigoPostal non-numeric)ERROR
-1200Internal error while processing the serviceERROR

Label Printing

By sending the tracking code and the format type to print, it returns the corresponding PDF.

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

Parameters:

Required Parameter Type Length Description
tipo string 10 Label format to print: A4 | Z10X10 | Z10X6 | ZPL
shipper integer - Shipper number
codSeguimiento string 4-15 Package tracking code

Note: This endpoint does not require authentication

Code examples:

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);
This endpoint returns a PDF (not JSON). Errors are returned as plain text: tipo missing → "Es necesario ingresar el formato de guia a imprimir (A4, Z10X10, Z10X6)." | shipper or codSeguimiento missing → "Es necesario ingresar los datos generar la etiqueta."

Address Normalizer

Entering our address, it will return the correct address data according to our databases, this way we will get greater agility in the logistics of the shipments.

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

JSON request:

JSON response:

Parameters:

Required Parameter Type Length Description
autentificacion
  shipper integer - Shipper number
  key string - Authentication key (differs from the password field used in other endpoints)
calle
street name
string 45 Street to query
altura
street number
string 6 Street number to query
cp
postal code
integer 4 Postal code to query
localidad
locality / city
string - Locality name (optional, improves match accuracy)
provincia
province
string - Province name (optional, improves match accuracy)

Response fields (inside datos, returned as a JSON-encoded string):

Field Type Description
calle
street name
stringNormalized street name
cp
postal code
stringNormalized postal code
deptostringDepartment / apartment unit
entreCalle1stringFirst cross street
entreCalle2stringSecond cross street
provincia
province
stringNormalized province name
partidostringMunicipality / partido
localidad
locality / city
stringNormalized locality name
barriostringNeighborhood / barrio
numerostringNormalized street number
piso
floor
stringFloor number
latitud
latitude
stringLatitude coordinate
longitud
longitude
stringLongitude coordinate
estadostringMatch status returned by the normalizer
motivostringReason / detail for the match status
zonaPeligrosabooleanIndicates whether the address is in a restricted zone
suguerenciasPorDudaarrayAddress suggestions returned when the match is ambiguous

Code examples:

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);
Response codes
codErrorHTTPdescErrorresultado
0200Success (resultado: Exitoso)OK
1200Address not found in the normalizer databaseERROR
3200Missing required fields (shipper, key, calle, altura or cp)ERROR
500200Connection error with the external service, please try again laterERROR

Weight and Dimensions

Entering the tracking code, it will return the weight and dimensions of the detected package when processed.

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

JSON request:

JSON response:

Parameters:

Required Parameter Type Length Description
codigoSeguimiento
tracking code
string 4-15 Tracking code for the search
shipper integer - Shipper number
password string - Shipper password

Code examples:

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);
Response codes

This endpoint uses status.success and status.message instead of codError.

HTTPstatus.successstatus.message
200trueok
200falseNo data found for the requested tracking code
400falseEmpty request or codigoSeguimiento required
401falseInvalid credentials

Order Rescue

Allows requesting the rescue of pieces in transit through two modes:

  • Returnbulk rescue: the shipment is returned to the seller/sender. Multiple pieces can be sent in a single request.
  • Redirectionindividual rescue: the piece is redirected to a new delivery address. Only one piece per request is allowed and the new recipient and address data are required.

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

Mode: Return (bulk)

Returns one or more pieces to the sender. The tipoRescate field must be "devolucion".

JSON request:

JSON response:

Code examples (Return):

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/

Mode: Redirection (individual)

Redirects a piece to a new delivery address. The tipoRescate field must be "redireccionamiento". Only one piece is accepted in the pieces array.

JSON request:

JSON response:

Code examples (Redirection):

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 Perez" },
    "domicilio": {
      "direccion": "Av. Corrientes",
      "altura": "1234",
      "codigoPostal": "1043",
      "localidad": "Ciudad Autonoma 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 Perez'],
    'domicilio'   => [
        'direccion'    => 'Av. Corrientes',
        'altura'       => '1234',
        'codigoPostal' => '1043',
        'localidad'    => 'Ciudad Autonoma 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);

Parameters:

Required Parameter Type Description
auth.shipper integer Shipper number (maximum 4 digits)
auth.password string Shipper password
pieces array Tracking codes to rescue. Return: accepts multiple. Redirection: only 1 element.
tipoRescate
rescue type
string "devolucion" or "redireccionamiento"
destinatario.nombre
recipient · name
string Name of the new recipient. Required for redirection.
domicilio.direccion
address · street
string Street of the new address. Required for redirection.
domicilio.altura
address · street number
string Street number. Required for redirection.
domicilio.codigoPostal
address · postal code
string 4-digit numeric postal code. Required for redirection.
domicilio.localidad
address · locality
string Locality of the new address. Required for redirection.
domicilio.provincia
address · province
string Province of the new address. Required for redirection.
domicilio.piso
address · floor
string Floor (optional, redirection only).
domicilio.departamento
address · apartment
string Apartment (optional, redirection only).
domicilio.observaciones
address · observations
string Additional observations (optional, redirection only).

Possible response messages:

Field Mode Message Result
succeeded Both La pieza ha sido rescatada correctamente
The piece has been successfully rescued
OK
succeeded Return Solicitud de rescate de Devolucion generada correctamente
Return rescue request generated successfully
OK
succeeded Redirection Solicitud de rescate de Redireccion generada correctamente
Redirection rescue request generated successfully
OK
rejected Both La pieza ya tiene un Rescate existente
The piece already has an existing rescue request
REJECTED
rejected Both La pieza no es apta para ser rescatada
The piece is not eligible to be rescued
REJECTED
rejected Redirection La pieza no se pudo rescatar porque no tiene DESPACHO
The piece could not be rescued because it has no dispatch
REJECTED
failed Both El proceso de rescate ha fallado, comuniquese con su Ejecutivo de Cuentas
The rescue process has failed, please contact your Account Executive
ERROR

Order Cancellation

IMPORTANT: This End-Point will be deprecated by July 2026.

Allows requesting the cancellation of an order by its tracking code. The system checks whether Urbano holds the product and whether the piece is eligible for cancellation, automatically generating a rescue request in that case. Authentication is performed via HTTP headers instead of the JSON body.

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

JSON response:

Important Notes

  • Credentials are not sent in the body but in the HTTP headers: x-client-id (shipper) and x-client-secret (password).
  • The tracking code is passed directly in the URL, not in the body.
  • avalibleForCancel: true indicates the piece was eligible and the cancellation/rescue request was generated.
  • weHaveTheProduct: true indicates Urbano physically holds the product.

Parameters:

Type Parameter Description
URL codigoSeguimiento
tracking code
Tracking code of the order to cancel (part of the URL)
Header x-client-id Shipper number
Header x-client-secret Shipper password

Response fields:

FieldTypeDescription
successbooleanIndicates whether the request was processed successfully
messagestringDescriptive message of the result
codeintegerHTTP response code
data.avalibleForCancelbooleantrue if the piece was eligible and the cancellation request was generated
data.weHaveTheProductbooleantrue if Urbano physically holds the product

Code examples:

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);
Response codes
HTTPsuccessDescription
200trueRequest processed successfully
400falsePiece not found in Urbano
422falseThe piece has already been processed for cancellation
500falseEmpty or missing credentials, or internal server error

Best Practices

Recommendations:

- Validate data: Always validate data before sending it to the API.

- Error handling: Implement proper error handling and retries.

- Caching: For frequent rate queries, consider implementing caching.

- Logging: Keep a record of requests and responses to facilitate diagnosis.

- Rate limiting: Respect the API rate limits to avoid blocking.