> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getjusto.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Cotizar un envío

> Cotiza un paquete desde uno de tus locales hasta una dirección y guarda la cotización con un `id`. La cotización garantiza el precio y la hora de retiro (`pickupAt`) hasta `expiresAt` (20 minutos por defecto). Justo ubica la dirección (si no envías coordenadas), elige el local candidato más cercano que esté abierto y mide la distancia por calle. `pickupAt` es la hora de retiro que Justo asegura. El precio sale de la tarifa acordada con tu cuenta. Errores: `addressNotFound`, `storeNotFound`, `storeClosed` (ningún local está abierto para el retiro; el mensaje dice cuándo abre), `distanceTooLong` (más de 20 km), `packageTooLarge`, `vehicleNotAvailable`, `noTariff`.

Cotiza un paquete desde uno de tus locales hasta una dirección y guarda la cotización con un `id`. La cotización garantiza el precio (`priceWithTax`) y la hora de retiro (`pickupAt`) hasta `expiresAt`, que por defecto es 20 minutos después de cotizar. Para usarla, envía su `id` a [Crear un envío](https://docs.getjusto.com/docs/admin/last-mile/create-delivery.md) antes de que venza.

Indica el local de origen con `storeId` o con varios candidatos en `storeIds` (hasta 20); Justo cotiza desde el más cercano al destino que esté abierto para el retiro. Sin ninguno de los dos, considera todos los locales de tu cuenta que piden despachos. Según el peso y las medidas del paquete, Justo envía un repartidor en un vehículo que pueda transportarlo; si no cabe en una moto, va en auto con un recargo fijo incluido en el precio, y el local debe tener `acceptsCar: true`. Envía `pickupAt` si el paquete estará listo más tarde. El `pickupAt` de la respuesta es la hora de retiro que Justo te asegura.

Revisa los códigos de error y los formatos de dirección en la [introducción](https://docs.getjusto.com/docs/admin/last-mile/introduction.md#errores).


## OpenAPI

````yaml post /admin/last-mile/quotes
openapi: 3.1.0
info:
  title: Justo API
  version: 3.0.0
servers:
  - url: https://api.service.getjusto.com/v3
    description: Servidor de producción
security: []
paths:
  /admin/last-mile/quotes:
    post:
      summary: Cotizar un envío de última milla
      description: >-
        Cotiza un paquete desde uno de tus locales hasta una dirección y guarda
        la cotización con un `id`. La cotización garantiza el precio y la hora
        de retiro (`pickupAt`) hasta `expiresAt` (20 minutos por defecto). Justo
        ubica la dirección (si no envías coordenadas), elige el local candidato
        más cercano que esté abierto y mide la distancia por calle. `pickupAt`
        es la hora de retiro que Justo asegura. El precio sale de la tarifa
        acordada con tu cuenta. Errores: `addressNotFound`, `storeNotFound`,
        `storeClosed` (ningún local está abierto para el retiro; el mensaje dice
        cuándo abre), `distanceTooLong` (más de 20 km), `packageTooLarge`,
        `vehicleNotAvailable`, `noTariff`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/apiLastMileQuoteInput'
      responses:
        '200':
          description: Respuesta exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    $ref: '#/components/schemas/apiLastMileQuote'
        '400':
          description: Error
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: 'false'
                  error:
                    type: object
                    properties:
                      error:
                        type: string
                        example: error
                      message:
                        type: string
                        example: The request has an error
components:
  schemas:
    apiLastMileQuoteInput:
      type: object
      required:
        - toAddress
        - package
      additionalProperties: false
      properties:
        storeId:
          type: string
          description: >-
            Local desde donde sale el paquete (ID Justo o tu externalId). Ver
            GET /stores y POST /stores.
        storeIds:
          type: array
          maxItems: 20
          items:
            type: string
          description: >-
            Varios locales candidatos (por ejemplo, los que tienen stock). Justo
            cotiza desde el más cercano al destino que esté abierto para el
            retiro, según el horario del local (PATCH
            /ecommerce/stores/{storeId}/schedule). Sin storeId ni storeIds,
            considera todos los locales de la cuenta que piden despachos.
        toAddress:
          $ref: '#/components/schemas/apiLastMileAddressInput'
        package:
          $ref: '#/components/schemas/apiLastMilePackage'
        pickupAt:
          type: string
          example: '2020-01-01T00:00:00.000Z'
          format: date-time
          description: >-
            Desde cuándo el paquete está listo para retirarse. Si no lo envías,
            desde ahora.
        externalId:
          type: string
          description: >-
            Tu identificador del envío. Se copia a la entrega y evita duplicados
            si reintentas la creación.
      example:
        storeIds:
          - bodega-providencia
          - bodega-las-condes
        toAddress:
          line: Av. Apoquindo 4500, depto 1203, Las Condes
          countryCode: CL
        package:
          weightKg: 1.2
          lengthCm: 30
          widthCm: 20
          heightCm: 10
          valueAmount: 25990
        pickupAt: '2026-11-03T13:00:00.000Z'
        externalId: FL-000123
    apiLastMileQuote:
      type: object
      description: >-
        Cotización guardada. Garantiza el precio y la hora de retiro hasta
        `expiresAt`. Para crear la entrega envía su `id` a POST
        /last-mile/deliveries antes de que venza.
      properties:
        id:
          type: string
          description: ID de la cotización.
          example: lmq-0193...
        status:
          type: string
          enum:
            - open
            - accepting
            - accepted
            - expired
          description: >-
            `open`: se puede aceptar. `accepting`: se está creando la entrega.
            `accepted`: ya tiene entrega (`deliveryId`). `expired`: venció sin
            aceptarse.
        expiresAt:
          type: string
          example: '2020-01-01T00:00:00.000Z'
          format: date-time
          description: Hasta cuándo se puede aceptar.
        pickupAt:
          type: string
          example: '2020-01-01T00:00:00.000Z'
          format: date-time
          description: >-
            Hora de retiro que Justo asegura, en el local y dentro de su
            horario. Si cotizaste sin `pickupAt` y aceptas varios minutos
            después, se corre en la misma medida: la hora definitiva viene al
            crear la entrega.
        estimatedDeliveryAt:
          type: string
          example: '2020-01-01T00:00:00.000Z'
          format: date-time
          description: Hora estimada de entrega en el destino.
        store:
          type: object
          description: >-
            Local elegido: el más cercano al destino entre los candidatos
            abiertos.
          properties:
            storeId:
              type: string
              description: ID Justo del local.
            name:
              type: string
              description: Nombre del local.
        fromAddress:
          $ref: '#/components/schemas/apiLastMileAddress'
        toAddress:
          $ref: '#/components/schemas/apiLastMileAddress'
        package:
          $ref: '#/components/schemas/apiLastMilePackage'
        vehicleType:
          type: string
          enum:
            - moto
            - car
          description: Tipo de vehículo que puede transportar el paquete.
        distanceMeters:
          type: integer
          description: Distancia por calle del local al destino.
        price:
          type: number
          description: >-
            Precio sin impuestos. Si el paquete necesita auto, incluye el
            recargo fijo por auto.
        priceWithTax:
          type: number
          description: 'Precio con impuestos: lo que se factura.'
        currency:
          type: string
          description: Moneda (CLP, COP, MXN, PEN…).
        externalId:
          type: string
          description: Tu identificador del envío.
        deliveryId:
          type: string
          description: Entrega creada desde esta cotización.
        createdAt:
          type: string
          example: '2020-01-01T00:00:00.000Z'
          format: date-time
          description: Fecha de la cotización.
    apiLastMileAddressInput:
      type: object
      description: >-
        Dirección. Puedes mandarla en una sola línea (`line`, por ejemplo "Av.
        Providencia 1234, depto 501, Providencia") o por campos. Las coordenadas
        son opcionales: si no vienen, Justo ubica la dirección. Si no la puede
        ubicar con certeza, la cotización responde `addressNotFound`.
      required:
        - countryCode
      additionalProperties: false
      properties:
        line:
          type: string
          description: 'Dirección completa en una línea: calle, número, unidad y comuna.'
        streetAddress:
          type: string
          description: Calle y número. Obligatorio si no envías `line`.
        extendedAddress:
          type: string
          description: Departamento, oficina, piso o block.
        locality:
          type: string
          description: Comuna, localidad o municipio.
        region:
          type: string
          description: Región, estado o departamento.
        postalCode:
          type: string
          description: Código postal.
        countryCode:
          type: string
          description: País en ISO 3166-1 alfa-2 (CL, CO, MX, PE…).
        location:
          type: object
          required:
            - lat
            - lng
          additionalProperties: false
          properties:
            lat:
              type: number
              description: Latitud.
              example: -33.4290115
            lng:
              type: number
              description: Longitud.
              example: -70.6211027
          description: Coordenadas, si ya las tienes. Se usan tal cual, sin geocodificar.
      example:
        line: Av. Apoquindo 4500, Las Condes
        countryCode: CL
    apiLastMilePackage:
      type: object
      description: >-
        Paquete a despachar. Según su peso y sus medidas, Justo envía un
        repartidor en un vehículo que pueda transportarlo. Si el paquete
        necesita un auto, el local debe tener `acceptsCar: true` y el precio
        incluye un recargo fijo por auto.
      required:
        - weightKg
        - lengthCm
        - widthCm
        - heightCm
        - valueAmount
      additionalProperties: false
      properties:
        weightKg:
          type: number
          exclusiveMinimum: 0
          description: Peso en kilos.
        lengthCm:
          type: number
          exclusiveMinimum: 0
          description: Largo en centímetros.
        widthCm:
          type: number
          exclusiveMinimum: 0
          description: Ancho en centímetros.
        heightCm:
          type: number
          exclusiveMinimum: 0
          description: Alto en centímetros.
        valueAmount:
          type: number
          minimum: 0
          description: Valor declarado del contenido, en la moneda del país del local.
        description:
          type: string
          description: Qué contiene, por ejemplo "Caja de chocolates".
      example:
        weightKg: 1.2
        lengthCm: 30
        widthCm: 20
        heightCm: 10
        valueAmount: 25990
    apiLastMileAddress:
      type: object
      properties:
        streetAddress:
          type: string
          description: Calle y número.
        extendedAddress:
          type: string
          description: Departamento, oficina, piso o block.
        locality:
          type: string
          description: Comuna o localidad.
        region:
          type: string
          description: Región o estado.
        countryCode:
          type: string
          description: País en ISO 3166-1 alfa-2.
        location:
          type: object
          required:
            - lat
            - lng
          additionalProperties: false
          properties:
            lat:
              type: number
              description: Latitud.
              example: -33.4290115
            lng:
              type: number
              description: Longitud.
              example: -70.6211027
          description: Coordenadas usadas para la distancia y el precio.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.