Saltar al contenido
Documentación para desarrolladoresReferencia de la APICarga

Estimar un trabajo de carga

Aplica la misma validación que POST /v1/pack y devuelve el rango de precios, sin crear ningún trabajo ni reservar créditos.

POSThttps://runner.cargoduo.com/v1/estimate

Gratis. Una solicitud no válida responde 200 con valid: false y todos los problemas en errors[].

Autenticación

Clave de API Bearer con el permisopack:writeMás información

Parámetros del cuerpo

application/json
NombreTipoObligatorioDescripción
referencestring
string
No

Tu propia referencia (número de pedido, ID de envío…). Se devuelve en el trabajo.

≤ 128 chars
vehiclesVehicle[]obligatorio
Vehicle[]
Sí

Definiciones de vehículos. Cada una puede tener quantity > 1. Al menos una.

itemsItem[]obligatorio
Item[]
Sí

Definiciones de artículos. Cada una puede tener quantity > 1. Al menos una.

groupsGroup[]
Group[]
No

Grupos opcionales (clientes, paradas, pedidos). Obligatorios para cada grupo que indique un artículo cuando options.group_routing no es "none"; si no, los grupos se crean a partir de los nombres de grupo de los artículos, por orden de aparición.

optionsOptions
Options
No

Opciones de carga. Todos los campos son opcionales.

Ejemplo de solicitud

curl -X POST "https://runner.cargoduo.com/v1/estimate" \
  -H "Authorization: Bearer $CARGODUO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "order-1042",
    "vehicles": [
      {
        "id": "trailer",
        "type": "trailer",
        "name": "13.6 m trailer",
        "length": 1360,
        "width": 245,
        "height": 270,
        "max_weight": 24000
      }
    ],
    "items": [
      {
        "id": "pallet-eu",
        "label": "Euro pallet",
        "length": 120,
        "width": 80,
        "height": 140,
        "weight": 450,
        "quantity": 18,
        "stackable": false
      },
      {
        "id": "carton-a",
        "label": "Carton A",
        "length": 60,
        "width": 40,
        "height": 40,
        "weight": 12,
        "quantity": 40,
        "rotation": "upright"
      }
    ],
    "options": {
      "packing_mode": "auto"
    }
  }'

Ejemplo de respuesta

200 OK · Estimate
{
  "valid": true,
  "errors": [],
  "warnings": [],
  "items": 58,
  "max_vehicles": 3,
  "estimated_cost": {
    "min_credits": 0.26,
    "max_credits": 1.11
  },
  "estimated_seconds": 90,
  "balance": {
    "available_credits": 147.75
  }
}

Respuestas

  • 200OKResultado de la validación y rango de precios.
    NombreTipoObligatorioDescripción
    validboolean
    boolean
    No

    La solicitud se aceptaría en POST /v1/pack.

    errorsErrorDetail[]
    ErrorDetail[]
    No

    Errores de validación (vacío si la solicitud es válida).

    warningsWarning[]
    Warning[]
    No

    Observaciones no bloqueantes.

    itemsinteger
    integer
    No

    Total de unidades de artículos.

    max_vehiclesinteger
    integer
    No

    Número máximo de vehículos que puede cargar el trabajo.

    estimated_costCostRange
    CostRange
    No

    Rango de precios en créditos.

    estimated_secondsnumber · s
    number · s
    No

    Presupuesto de cómputo que tendría el trabajo (un límite superior; la mayoría terminan antes).

    balanceEstimateBalance
    EstimateBalance
    No

    Tus créditos disponibles.

  • 400Bad requestinvalid_json
    • invalid_jsonEl cuerpo no es JSON válido o un campo tiene un tipo incorrecto.
    NombreTipoObligatorioDescripción
    errorErrorBodyobligatorio
    ErrorBody
    Sí
    Todos los códigos de error
  • 401Unauthorizedunauthorizedkey_revokedkey_expired
    • unauthorizedClave de API ausente, mal formada o desconocida.
    • key_revokedLa clave se ha revocado.
    • key_expiredLa clave ha superado su fecha de caducidad.
    NombreTipoObligatorioDescripción
    errorErrorBodyobligatorio
    ErrorBody
    Sí
    Todos los códigos de error
  • 403Forbiddenip_not_allowedsubscription_inactiveaccount_inactivescope_missing
    • ip_not_allowedLa IP de origen no está en la lista de IP permitidas de la clave.
    • subscription_inactiveLa organización no tiene ninguna suscripción activa que incluya la API.
    • account_inactiveLa organización está suspendida o no tiene ningún propietario con la cuenta activa.
    • scope_missingA la clave le falta un permiso que requiere este endpoint.
    NombreTipoObligatorioDescripción
    errorErrorBodyobligatorio
    ErrorBody
    Sí
    Todos los códigos de error
  • 413Payload too largepayload_too_large
    • payload_too_largeEl cuerpo de la solicitud supera los 10 MB.
    NombreTipoObligatorioDescripción
    errorErrorBodyobligatorio
    ErrorBody
    Sí
    Todos los códigos de error
  • 429Too many requestsrate_limited
    • rate_limitedDemasiadas solicitudes en el minuto, la hora o el día en curso (por clave o por organización), o más de 60 autenticaciones fallidas por minuto desde tu dirección IP.
    NombreTipoObligatorioDescripción
    errorErrorBodyobligatorio
    ErrorBody
    Sí
    Todos los códigos de error
  • 500Internal server errorinternal_error
    • internal_errorAlgo ha fallado por nuestra parte.
    NombreTipoObligatorioDescripción
    errorErrorBodyobligatorio
    ErrorBody
    Sí
    Todos los códigos de error
  • 503Service unavailableapi_disabled
    • api_disabledLa API está desactivada temporalmente (mantenimiento) o deshabilitada para la organización.
    NombreTipoObligatorioDescripción
    errorErrorBodyobligatorio
    ErrorBody
    Sí
    Todos los códigos de error