---
title: "Obtener cotizaciones de envío"
method: POST
path: "/shipments/quotes"
tags: ["Shipments"]
---

# Obtener cotizaciones de envío

`POST /shipments/quotes`

## Request

- Base URL: `https://mi-organizacion.routes.zipnova.app/api/v1`
- URL: `https://mi-organizacion.routes.zipnova.app/api/v1/shipments/quotes`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/zipnova/apis/zipnova-rutas-api-organizacional/docs/shipments/quotes/post.ts> (a function with typed inputs; its response is checked against the schema)

Calcula las cotizaciones disponibles para un envío según origen, destino y paquetes.

## Request body

- object
  - `origin` union, required: Dirección de origen o destino. Se puede enviar de **tres formas mutuamente excluyentes**: | Modo | Qué enviar | Comportamiento | |------|-----------|----------------| | **1. Dirección existente** | solo `id` | Reutiliza una dirección ya creada, tal cual está. | | **2. Lugar guardado** | solo `place_id` | Copia automáticamente todos los datos desde el lugar. | | **3. Dirección nueva** | objeto completo | Crea una dirección nueva. | **Reglas de exclusión:** - `id` y `place_id` son excluyentes entre sí. - En el modo 3, la ubicación se indica por IDs internos (`city_id`) **o** por nombres (`city` + `state` + `country`).
    - AddressByIdInput: Reutiliza una dirección ya creada. Se usa exactamente como está; no se modifica ningún campo.
      - `id` string, required: ID de una dirección existente.
    - AddressByPlaceInput: Reutiliza un lugar guardado. Todos los datos se copian automáticamente desde el lugar.
      - `place_id` string, required: ID del lugar guardado (con prefijo `ple_`). Debe existir en la lista de lugares de la organización.
    - AddressNewInput: Crea una dirección nueva. La ubicación se puede indicar de dos formas: - **Por IDs internos:** envía `city_id` (y opcionalmente `state_id` / `country_id`). - **Por nombres:** envía `city`, `state` y `country` (código ISO).
      - `name` string, required: Nombre del destinatario/remitente.
      - `street` string, required: Nombre de la calle.
      - `street_number` string, required: Altura/número.
      - `floor` string, nullable: Piso (opcional).
      - `apartment` string, nullable: Departamento (opcional).
      - `reference` string, nullable: Referencia adicional (opcional).
      - `city_id` integer: ID interno de la ciudad. Obligatorio si no se envía `city`, `state` y `country`.
      - `city` string: Nombre de la ciudad. Obligatorio si no se envía `city_id`.
      - `state_id` integer: ID interno de la provincia/estado (opcional).
      - `state` string: Nombre de la provincia/estado.
      - `country_id` integer: ID interno del país (opcional).
      - `country` string: Código ISO del país (ej: AR, MX, CL).
      - `zipcode` string, nullable: Código postal (opcional).
      - `phone` string, nullable: Teléfono en formato E.164 (opcional).
      - `email` string, email, nullable: Email de contacto (opcional).
      - `document_type` string, nullable: Código del tipo de documento (opcional).
      - `document_number` string, nullable: Número de documento (obligatorio si se envía `document_type`).
      - `geo_latitude` number, float, nullable: Latitud (opcional). Si se omite, se geocodifica desde la dirección.
      - `geo_longitude` number, float, nullable: Longitud (opcional). Si se omite, se geocodifica desde la dirección.
  - `destination` union, required: Dirección de origen o destino. Se puede enviar de **tres formas mutuamente excluyentes**: | Modo | Qué enviar | Comportamiento | |------|-----------|----------------| | **1. Dirección existente** | solo `id` | Reutiliza una dirección ya creada, tal cual está. | | **2. Lugar guardado** | solo `place_id` | Copia automáticamente todos los datos desde el lugar. | | **3. Dirección nueva** | objeto completo | Crea una dirección nueva. | **Reglas de exclusión:** - `id` y `place_id` son excluyentes entre sí. - En el modo 3, la ubicación se indica por IDs internos (`city_id`) **o** por nombres (`city` + `state` + `country`).
    - AddressByIdInput: Reutiliza una dirección ya creada. Se usa exactamente como está; no se modifica ningún campo.
      - `id` string, required: ID de una dirección existente.
    - AddressByPlaceInput: Reutiliza un lugar guardado. Todos los datos se copian automáticamente desde el lugar.
      - `place_id` string, required: ID del lugar guardado (con prefijo `ple_`). Debe existir en la lista de lugares de la organización.
    - AddressNewInput: Crea una dirección nueva. La ubicación se puede indicar de dos formas: - **Por IDs internos:** envía `city_id` (y opcionalmente `state_id` / `country_id`). - **Por nombres:** envía `city`, `state` y `country` (código ISO).
      - `name` string, required: Nombre del destinatario/remitente.
      - `street` string, required: Nombre de la calle.
      - `street_number` string, required: Altura/número.
      - `floor` string, nullable: Piso (opcional).
      - `apartment` string, nullable: Departamento (opcional).
      - `reference` string, nullable: Referencia adicional (opcional).
      - `city_id` integer: ID interno de la ciudad. Obligatorio si no se envía `city`, `state` y `country`.
      - `city` string: Nombre de la ciudad. Obligatorio si no se envía `city_id`.
      - `state_id` integer: ID interno de la provincia/estado (opcional).
      - `state` string: Nombre de la provincia/estado.
      - `country_id` integer: ID interno del país (opcional).
      - `country` string: Código ISO del país (ej: AR, MX, CL).
      - `zipcode` string, nullable: Código postal (opcional).
      - `phone` string, nullable: Teléfono en formato E.164 (opcional).
      - `email` string, email, nullable: Email de contacto (opcional).
      - `document_type` string, nullable: Código del tipo de documento (opcional).
      - `document_number` string, nullable: Número de documento (obligatorio si se envía `document_type`).
      - `geo_latitude` number, float, nullable: Latitud (opcional). Si se omite, se geocodifica desde la dirección.
      - `geo_longitude` number, float, nullable: Longitud (opcional). Si se omite, se geocodifica desde la dirección.
  - `packages` PackageInput[], required: Paquetes a cotizar.
    - `id` integer: ID del paquete existente. Si se envía, los demás campos no son necesarios.
    - `external_reference` string, nullable: Referencia externa (opcional).
    - `description` string, nullable: Descripción del paquete (opcional).
    - `label_code` string: Código de etiqueta del paquete.
    - `length` integer: Largo en centímetros (normalizado).
    - `width` integer: Ancho en centímetros (normalizado).
    - `height` integer: Alto en centímetros (normalizado).
    - `original_length` number: Largo en la unidad original.
    - `length_unit` 'cm' | 'm' | 'in' | 'ft': Unidad del largo original.
    - `original_width` number: Ancho en la unidad original.
    - `width_unit` 'cm' | 'm' | 'in' | 'ft': Unidad del ancho original.
    - `original_height` number: Alto en la unidad original.
    - `height_unit` 'cm' | 'm' | 'in' | 'ft': Unidad del alto original.
    - `grams` integer: Peso en gramos (normalizado). Opcional si se envía original_weight + weight_unit.
    - `original_weight` number: Peso en la unidad original. Opcional si se envía grams.
    - `weight_unit` 'g' | 'kg' | 'lbs' | 'oz': Unidad del peso original. Requerido si se envía original_weight.
    - `un_code` string: Código UN de mercancía peligrosa.
    - `classification` string: Clasificación del paquete.
    - `is_flammable` boolean: Si el paquete es inflamable.
    - `is_corrosive` boolean: Si el paquete es corrosivo.
    - `is_fragile` boolean: Si el paquete es frágil.
    - `temperature_min` number: Temperatura mínima de transporte en °C (normalizado).
    - `temperature_max` number: Temperatura máxima de transporte en °C (normalizado).
    - `original_temperature_min` number: Temperatura mínima en la unidad original.
    - `temperature_min_unit` '°C' | '°F': Unidad de temperatura mínima original.
    - `original_temperature_max` number: Temperatura máxima en la unidad original.
    - `temperature_max_unit` '°C' | '°F': Unidad de temperatura máxima original.
  - `declared_value` number, nullable: Valor declarado (opcional).
  - `shipper_id` string, nullable: ID del shipper. Requerido si la org es carrier.
  - `carrier_id` string, nullable: ID del carrier. Requerido si la org es shipper.

## Response `200`

Cotizaciones obtenidas

- object
  - `quotes` Quote[]
    - `service_type_id` integer
    - `service_type_name` string
    - `price` number
    - `currency` string
    - `estimated_delivery_days` integer, nullable

## Other responses

- `401`: No autenticado
- `403`: Sin permisos
- `422`: Error de validación

---

[API](https://skmtc.dev/zipnova/apis/zipnova-rutas-api-organizacional.md) - [All operations](https://skmtc.dev/zipnova/apis/zipnova-rutas-api-organizacional/llms.txt) - [OpenAPI document](https://skmtc.dev/zipnova/apis/zipnova-rutas-api-organizacional/revisions/d57b2ae4ce92?raw)
