Saltar al contenido
Documentación para desarrolladoresReferencia de la APIProyectos

Actualizar un proyecto

Cambia el nombre de un proyecto, modifica sus opciones o sustituye sus vehículos o sus artículos (con los grupos).

PATCHhttps://runner.cargoduo.com/v1/projects/{id}

Sustituir los vehículos o los artículos borra el plan guardado; las sesiones abiertas de la aplicación se recargan. Gratis: no se cobran créditos.

Autenticación

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

Parámetros de ruta

NombreTipoObligatorioDescripción
idstringobligatorio
string
Sí

ID del proyecto (prj_…).

Parámetros del cuerpo

application/json
NombreTipoObligatorioDescripción
namestring
string
No
≤ 255 chars
vehiclesProjectVehicle[]
ProjectVehicle[]
No

Vehículos del proyecto.

itemsItem[]
Item[]
No

Artículos de carga (como máximo 500 definiciones).

groupsGroup[]
Group[]
No

Grupos, con su orden de carga.

optionsProjectOptions
ProjectOptions
No

Las opciones de carga que guarda un proyecto.

Ejemplo de solicitud

curl -X PATCH "https://runner.cargoduo.com/v1/projects/prj_3051" \
  -H "Authorization: Bearer $CARGODUO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "vehicles": [
      {
        "vehicle_id": "veh_118",
        "quantity": 2
      }
    ]
  }'

Ejemplo de respuesta

200 OK · Project
{
  "id": "prj_3051",
  "object": "project",
  "name": "Order 1042",
  "status": "draft",
  "item_count": 58,
  "vehicle_count": 2,
  "app_url": "https://app.cargoduo.com/projects/3051",
  "created_by": {
    "id": "usr_7",
    "name": "Elif Kaya"
  },
  "updated_by": {
    "id": "usr_7",
    "name": "Elif Kaya"
  },
  "created_at": "2026-10-19T09:10:03Z",
  "updated_at": "2026-10-19T09:22:03Z",
  "options": {
    "packing_mode": "auto",
    "group_routing": "none",
    "allow_overweight": false
  },
  "vehicles": [
    {
      "id": "pv_5121",
      "vehicle_id": "veh_118",
      "name": "Mega trailer 13.6 m",
      "type": "trailer",
      "quantity": 2,
      "length": 1360,
      "width": 248,
      "height": 300,
      "max_weight": 24000
    }
  ],
  "items": [
    {
      "id": "item_88410",
      "label": "Euro pallet",
      "shape": "box",
      "length": 120,
      "width": 80,
      "height": 140,
      "weight": 450,
      "quantity": 18,
      "stackable": false,
      "rotation": "all",
      "color": "#3b82f6"
    },
    {
      "id": "item_88411",
      "label": "Carton A",
      "shape": "box",
      "length": 60,
      "width": 40,
      "height": 40,
      "weight": 12,
      "quantity": 40,
      "stackable": true,
      "rotation": "upright",
      "color": "#f59e0b"
    }
  ],
  "groups": [],
  "plan": null
}

Respuestas

  • 200OKEl proyecto tras el cambio.
    NombreTipoObligatorioDescripción
    idstring
    string
    No

    ID del proyecto (prj_…).

    objectstring
    string
    No
    project
    namestring
    string
    No
    statusstring
    string
    No

    draft = nunca calculado o con los datos sustituidos; calculated = tiene un plan actual; stale = algún ajuste ha cambiado desde que se creó el plan.

    draftcalculatedstaleerror
    item_countinteger
    integer
    No

    Unidades de artículos (suma de cantidades).

    vehicle_countinteger
    integer
    No

    Vehículos (suma de cantidades).

    app_urlstring
    string
    No

    Abre el proyecto en el editor 3D de la aplicación.

    created_byUserRef | null
    UserRef | null
    No

    El miembro que lo creó (en las llamadas a la API: el miembro que creó la clave). null si se desconoce.

    updated_byUserRef | null
    UserRef | null
    No

    El último miembro que lo modificó.

    created_atstring
    string
    No

    RFC 3339.

    updated_atstring
    string
    No

    RFC 3339.

    optionsProjectOptions
    ProjectOptions
    No

    Las opciones de carga que guarda un proyecto.

    vehiclesProjectVehicle[]
    ProjectVehicle[]
    No
    itemsItem[]
    Item[]
    No

    Carga con la estructura Item de /v1/pack; los ID son item_….

    groupsGroup[]
    Group[]
    No
    planProjectPlan | null
    ProjectPlan | null
    No

    El plan actual; null si el proyecto no tiene ninguno.

  • 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
  • 403Forbiddenplan_limit_reachedip_not_allowedsubscription_inactiveaccount_inactivescope_missing
    • plan_limit_reachedEl plan de la organización no permite más proyectos ni artículos de carga.
    • 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
  • 404Not foundproject_not_found
    • project_not_foundNo hay ningún proyecto con este ID en tu organización.
    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
  • 422Unprocessable entityvalidation_failed
    • validation_failedLa solicitud es JSON bien formado, pero describe un trabajo no válido. details[] enumera todos los problemas.
    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