Una vez obtenida la cotización, podés crear un envío en Moova realizando un HTTP POST al siguiente endpoint:
https://api-dev.moova.io/b2b/shippings?appId=TU_APP_ID
Headers requeridos
Authorization: TU_APP_KEY
⚠️ appId
se pasa por query string y appKey
como header Authorization
.
Tipos de envío (type
)
Tipo | Descripción |
| Envío estándar. Se realiza el mismo día si pasa a READY antes de la hora corte; si no, se entrega al día siguiente. |
| Envío urgente a realizarse dentro de las 2-3 horas. Requiere |
| El paquete se recoge y se lleva al warehouse de Moova, donde pasa la noche. Se entrega al cliente final al día siguiente. |
| Usado por Moova para retirar paquetes y llevarlos al depósito. No usar sin coordinación previa. |
| Envíos de comida o bebida. Requiere |
| Envío para integraciones con Mercado Libre Flex. Incluye escaneo obligatorio por parte del Moover. |
| Consolidación de múltiples envíos de tipo reversa en el depósito de Moova para luego enviarlos al warehouse del seller (similar a un |
| Envío singular desde el cliente final al depósito de Moova (warehouse), generalmente por devolución. |
| Envío con destino a una sucursal del seller para que el cliente final lo retire allí. |
Flujos (flow
)
Flujo | Descripción |
| El envío no se retira hasta que lo pases manualmente a estado |
| El envío se crea directamente en estado |
| Solo para |
| Aplica para pedidos consolidados en el depósito de Moova. Se crean automaticamente en el estado |
Campos principales del payload
Campo | Tipo | Descripción | Obligatorio |
| String | Tipo de envío: | ✔️ |
| String | Flujo: | ✔️ |
| String | Referencia interna del envío | ✔️ |
| Object | Datos del remitente (ver más abajo) | ✔️ |
| Object | Datos del destinatario (ver más abajo) | ✔️ |
| Array | Bultos incluidos en el envío (no confundir con | ✔️ |
| String | Fecha/hora en la que el envío pasa automáticamente a estado READY (UTC) | Opcional |
| String | Rango horario preferido: | Opcional |
| Integer | Cantidad de paquetes (para etiquetas, no es igual a items) | Opcional |
| String | Moneda ISO 4217 (ej. | Opcional |
| String | Descripción visible para el repartidor | Opcional |
| String | Código interno del envío. Si el cliente tiene etiquetas propias, este valor se usará para identificarlas. Se detalla más en la sección "Obtener etiquetas". | Opcional |
| String | Comentario general sobre el envío | Opcional |
| Object | Objeto con información adicional personalizada | Opcional |
| Array | Lista de IDs de configuraciones especiales (ver /shipping-setting-options) | Opcional |
| Object | Info adicional del objeto enviado (item, assurance) | Opcional |
from
y to
: estructuras flexibles
Se prioriza en este orden:
googlePlaceId
> coordenadas (lat
ylng
) >address
>street
+number
.No enviar todos los formatos juntos.
En
contact
siempre incluir nombre, teléfono y email si están disponibles.En
to.message
podés dejar un mensaje especial para ese destino.
Ejemplos de uso de to
1. Con address
"to": { "address": "Av. Callao 1234, CABA,Buenos Aires, Argentina" }
2. Con street y number:
"to": { "street": "Av. Callao", "number": "1234", "floor": "3", "apartment": "B", "city": "CABA", "state": "Buenos Aires", "postalCode": "1023", "country": "AR" }
3. Con coordenadas:
"to": { "coords":{"lat": -34.603722, "lng": -58.381592}, "addressDescription":"Av. Callao 1234, CABA,Buenos Aires, Argentina" }
4. Con Google Place ID:
"to": { "placeId": "ChIJJ3SpfQsLlVQRkYXR9ua5Nhw" }
Ejemplo básico
{
"type":"regular",
"flow":"manual",
"internalOrderId":"pedido-1234",
"from":{
"address":"Av. Santa Fe 1234, 1425 CABA, Buenos Aires, Argentina",
"postalCode":"1425",
"contact":{
"name":"Juan",
"phone":"+541112345678",
"email":"[email protected]"
}
},
"to":{
"street":"Av. Corrientes",
"number":300,
"city":"CABA",
"state":"Buenos Aires",
"postalCode":"1199",
"country":"AR",
"contact":{
"firstName":"Maria",
"lastName":"Gonzalez",
"phone":"+541199876543",
"email":"[email protected]"
},
"instructions":"Entregar en conserjería"
},
"items":[
{
"type":"box",
"quantity":1,
"weight":1500,
"length":30,
"width":20,
"height":15
}
],
"description":"Kit promocional",
"packagesCount":1,
"scheduledDate":"2025-06-01 15:00:00",
"currency":"ars",
"internalCode":"LABEL-XYZ-987"
}
Response
{
"id": "6c7f76d0-7f67-11f0-b5d0-e1aa5ea0996c",
"shortId": "6c7f76d0",
"companyId": 1,
"courierCompanyId": null,
"packagesCount": 1,
"scheduledDate": null,
"deliveryTimeRange": null,
"type": "regular",
"size": "M",
"priceFormatted": "$ 220.000,02",
"price": 220000.02,
"currency": "ARS",
"from": {
"placeId": 97425,
"googlePlaceId": "ChIJfzoxtbnKvJUR2O-zSUSNVlY",
"address": "Av. Sta. Fe 1234, C1059ABT Cdad. Autónoma de Buenos Aires, Argentina",
"addressExtra": null,
"contact": "Marcos Detry",
"email": "[email protected]",
"phone": "+541112345678",
"instructions": null,
"coords": {
"lat": -34.5959117,
"lng": -58.3846907
}
},
"to": {
"placeId": 98971,
"googlePlaceId": "ChIJY8jbyTI1o5URmVJmCu1e1TQ",
"address": "Av. Corrientes 300, C1043AAR Cdad. Autónoma de Buenos Aires, Argentina",
"addressExtra": null,
"contact": "Maria Gonzalez",
"email": "[email protected]",
"phone": "+541199876543",
"instructions": "Entregar en conserjería",
"coords": {
"lat": -34.6031762,
"lng": -58.3712136
}
},
"status": "DRAFT",
"secretCode": "5033",
"internalCode": "LABEL-XYZ-987",
"internalOrderId": "pedido-1234",
"internalExtraId": null,
"description": "Kit promocional",
"hash": "cc94742d949a6c2f04a9d05b1befee39bef7bcfed0bebb38e8eaa4f38d4818a5",
"message": null,
"extra": null,
"conf": null,
"deliveryInfo": {
"courier": null,
"lat": null,
"lng": null,
"receiver": {
"firstName": null,
"lastName": null,
"scannedInfo": null
}
},
"statusHistory": [
{
"status": "DRAFT",
"details": null,
"createdAt": "2025-08-22 14:51:02"
}
],
"activeSettings": [
{
"id": 3,
"name": "SignaturePhoto",
"apply_to_all": 1,
"description": "Instead of ask for a signature, take a picture of the package.",
"message": "Debido al coronavirus, en vez de solicitar la firma, por favor sacale una foto a la puerta del domicilio donde estás haciendo la entrega.",
"created_at": "2021-01-05 19:01:27",
"updated_at": "2021-01-05 19:01:27",
"deleted_at": null,
"laravel_through_key": "6c7f76d0-7f67-11f0-b5d0-e1aa5ea0996c"
},
{
"id": 4,
"name": "DeliveryUserIdentification",
"apply_to_all": 1,
"description": "Request user identification when shipping is delivered",
"message": "Documento de identidad",
"created_at": "2021-01-05 19:01:27",
"updated_at": "2021-01-05 19:01:27",
"deleted_at": null,
"laravel_through_key": "6c7f76d0-7f67-11f0-b5d0-e1aa5ea0996c"
}
],
"services": [],
"relatedShippings": {
"previous": null,
"next": null
},
"items": [
{
"description": "",
"referenceCode": null,
"serialNumber": null,
"weight": 1500,
"length": 30,
"width": 20,
"height": 15,
"quantity": 1,
"meta": null
}
],
"createdAt": "2025-08-22 14:51:02",
"addressErrors": null
}
Información importante del response:
"id": Es el valor único de identificación del envío dentro de Moova.
Luego tenemos los campos "placeId" dentro del "from" y del "to" lo que indica este valor numérico es que se encontró la dirección. En el caso de que el campo devuelva un "null" indica que se creó el envío pero con error de dirección y para corregirlo deben ingresar al dashboard como indica la siguiente documentación.
Errores comunes
404 - Not found
: No se encontró un presupuesto
Causas Posibles
Falta de Tarifas Configuradas: No existen tarifas cargadas en el sistema para la ruta especificada (origen y destino). El sistema no puede calcular un costo si no tiene una tarifa base para ese trayecto.
Datos de Dirección Inválidos: Las direcciones de origen y/o destino son imprecisas, ambiguas o contienen errores. Esto provoca que el sistema no pueda geolocalizar los puntos de manera correcta y, por lo tanto, no encuentra una ruta válida para cotizar.
Pasos para la Solución
Verificar la Configuración de Tarifas: Contacte al equipo Comercial para confirmar que las tarifas para la ruta solicitada (Punto A → Punto B) están activas y correctamente configuradas en el sistema.
Validar las Direcciones de Entrada: Implemente una validación para asegurar que los datos de dirección proporcionados por el usuario final sean precisos antes de enviarlos a la API.
Recomendación: Utilice una herramienta externa como Google Maps para verificar y normalizar las direcciones. Esto reduce la probabilidad de enviar datos que el sistema no pueda interpretar.
404 - Budget not found
El área de origen o destino no está dentro de la tarifa configurada.
El tamaño o peso de los items supera lo permitido.
En testing: enviar email a [email protected]
con origen, destino y tipo de envío.
En producción: contactar a tu comercial.
addressErrors
en la respuesta
Si hay problemas con las direcciones, el campo addressErrors
se devuelve en el response. Ejemplo:
"addressErrors": { "from": { "suggestions": null } }
Si aparece
from
oto
, indica cuál de las direcciones tiene error.Si
suggestions
esnull
, no se pudo obtener una sugerencia válida.Si
addressErrors
esnull
, la dirección fue interpretada correctamente.
💡 Consejo: Usar Place ID o validar previamente con la API de cotización puede ayudar a evitar errores.
Próximo paso:
Para ver configuraciones especiales como logística inversa, validaciones, flex o food, consultá la sección:
"13. Envíos especiales: settings, ida y vuelta, cobros y más"