*MCP › Referencia › Alquileres › Pedidos*

# Crear un pedido

> Crea un pedido en DRAFT con el material solicitado.

Es el equivalente validado del buzón de peticiones de proyecto: permite que un formulario web, un CRM o un asistente pida material para unas fechas.

NO acepta importes de ningún tipo (ni precios, ni descuentos, ni seguro, ni fianzas): el pedido nace a cero y el equipo lo valora desde la aplicación. Tampoco acepta estado, unidades serializadas concretas, accesorios ni notas.

Cada identificador referenciado (cliente, artículos, proyecto) se resuelve contra la cuenta de la clave ANTES de escribir nada: uno solo que no pertenezca a la cuenta rechaza toda la petición con 400 y no crea nada.

HERRAMIENTA `filmo_orders_create` · `orders:write` · 120/min

## Argumentos

| Nombre | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `contactId` | string | Sí | Identificador del cliente del pedido. Debe pertenecer a la cuenta de la clave de API. |
| `projectId` | string | No | Proyecto al que está asignado el pedido; se omite en un pedido independiente. |
| `startDate` | string<date-time> | Sí | Inicio del alquiler (ISO 8601 con desplazamiento). |
| `endDate` | string<date-time> | Sí | Fin del alquiler (ISO 8601 con desplazamiento); debe ser posterior a startDate. |
| `lines` | object[] | Sí | Material solicitado (entre 1 y 100 líneas). |
| `lines.itemId` | string | Sí | Identificador del artículo del catálogo. Debe pertenecer a la cuenta de la clave de API. |
| `lines.quantity` | integer | Sí | Unidades solicitadas del artículo. |
| `lines.variantId` | string | No | Identificador de la variante concreta; se omite para el artículo base. |
| `idempotencyKey` | string | No | Clave de idempotencia elegida por el cliente (se recomienda un UUID). Repetir la misma clave con los mismos argumentos en 24 h devuelve la respuesta almacenada sin volver a ejecutar; con argumentos distintos responde 422. Es la forma segura de reintentar tras un fallo de red. |
| `ifMatch` | string | No | Bloqueo optimista: el meta.etag que obtuviste de la lectura de detalle de este recurso (o "*"). Si el recurso ha cambiado desde entonces, la llamada falla con 412 precondition_failed antes de escribir nada; léelo de nuevo y reintenta. Omítelo para escribir sin condiciones. |

## Resultado

En un éxito el resultado lleva `structuredContent` con `data` y `meta`. Estos son los atributos de `data`.

| Nombre | Tipo | Descripción |
| --- | --- | --- |
| `id` | string | Identificador único del pedido. |
| `orderNumber` | string | Número de pedido legible. |
| `externalReference` | string | Referencia externa del pedido (por ejemplo, del sistema del cliente); null si no consta. |
| `status` | string | Estado bruto del pedido tal como se almacena en la base de datos (12 valores): draft, reserved, prepared_partially, prepared, picked_up_partially, picked_up, returned_partially, returned, checked_in_partially, checked_in, archived o cancelled. `archived` forma parte del conjunto almacenado, pero un pedido archivado no es visible para la API, así que no lo observarás. `draft`, `reserved`, `prepared_partially`, `prepared`, `picked_up_partially`, `picked_up`, `returned_partially`, `returned`, `checked_in_partially`, `checked_in`, `archived`, `cancelled` |
| `startDate` | string<date-time> | Inicio del periodo de alquiler en ISO 8601 con desplazamiento. |
| `endDate` | string<date-time> | Fin del periodo de alquiler en ISO 8601 con desplazamiento. |
| `rentalDays` | number | Número de días de alquiler facturables; null si no se ha calculado. |
| `projectId` | string | Identificador del proyecto al que pertenece el pedido; null si no está vinculado. |
| `projectName` | string | Nombre del proyecto al que pertenece el pedido; null si no está vinculado. |
| `contact` | object | Referencia compacta al contacto del pedido; null si no hay. |
| `contact.id` | string | Identificador único del contacto. |
| `contact.name` | string | Nombre del contacto. |
| `itemsCount` | integer | Número de artículos del pedido. |
| `subTotalPrice` | string | Subtotal antes de descuentos e impuestos, como cadena decimal "1234.50" (ROUND_HALF_UP). |
| `discountTotal` | string | Total de descuentos como cadena decimal "1234.50" (ROUND_HALF_UP); null si no hay descuento. |
| `insuranceTotal` | string | Total del seguro como cadena decimal "1234.50" (ROUND_HALF_UP). |
| `depositTotal` | string | Total de fianzas como cadena decimal "1234.50" (ROUND_HALF_UP). |
| `taxesPrice` | string | Total de impuestos como cadena decimal "1234.50" (ROUND_HALF_UP). |
| `netPrice` | string | Base imponible (neto antes de impuestos) como cadena decimal "1234.50" (ROUND_HALF_UP). |
| `grossPrice` | string | Total con impuestos, como cadena decimal "1234.50" (ROUND_HALF_UP). |
| `tags` | object[] | Etiquetas adjuntas al pedido, con su identificador y nombre. |
| `tags.id` | string | Identificador único de la etiqueta. |
| `tags.name` | string | Nombre de la etiqueta. |
| `customFields` | object<string, any> | Valores de los campos personalizados por identificador de campo personalizado; las definiciones están en `/api/v1/custom-fields`. |
| `source` | string | Origen desde el que se creó el pedido (por ejemplo web, mobile, admin); null si no consta. |
| `createdAt` | string<date-time> | Fecha de creación en ISO 8601 con desplazamiento. |
| `updatedAt` | string<date-time> | Fecha de la última actualización en ISO 8601 con desplazamiento. |
| `billingAddress` | object | Dirección de facturación del pedido; null si no hay. |
| `billingAddress.label` | string | Etiqueta descriptiva de la dirección; null si no consta. |
| `billingAddress.addressLine1` | string | Primera línea de la dirección; null si no consta. |
| `billingAddress.addressLine2` | string | Segunda línea de la dirección; null si no consta. |
| `billingAddress.city` | string | Ciudad; null si no consta. |
| `billingAddress.province` | string | Provincia o región; null si no se ha registrado. |
| `billingAddress.postcode` | string | Código postal; null si no se ha registrado. |
| `billingAddress.country` | string | País; null si no consta. |
| `shippingAddress` | object | Dirección de envío del pedido; null si no hay. |
| `shippingAddress.label` | string | Etiqueta descriptiva de la dirección; null si no consta. |
| `shippingAddress.addressLine1` | string | Primera línea de la dirección; null si no consta. |
| `shippingAddress.addressLine2` | string | Segunda línea de la dirección; null si no consta. |
| `shippingAddress.city` | string | Ciudad; null si no consta. |
| `shippingAddress.province` | string | Provincia o región; null si no se ha registrado. |
| `shippingAddress.postcode` | string | Código postal; null si no se ha registrado. |
| `shippingAddress.country` | string | País; null si no consta. |
| `contactPerson` | object | Persona de contacto vinculada al pedido; null si no hay ninguna. |
| `contactPerson.id` | string | Identificador único del contacto. |
| `contactPerson.name` | string | Nombre del contacto. |
| `quotes` | object[] | Referencias informativas a los presupuestos generados a partir del pedido. |
| `quotes.id` | string | Identificador único del documento referenciado. |
| `quotes.number` | string | Número del documento; null hasta que se numera. |
| `quotes.status` | string | Estado del documento en el momento en que se escribió la referencia; null si no consta. Informativo: puede estar desactualizado. |
| `invoices` | object[] | Referencias informativas a las facturas generadas a partir del pedido. |
| `invoices.id` | string | Identificador único del documento referenciado. |
| `invoices.number` | string | Número del documento; null hasta que se numera. |
| `invoices.status` | string | Estado del documento en el momento en que se escribió la referencia; null si no consta. Informativo: puede estar desactualizado. |
| `proformas` | object[] | Referencias informativas a las proformas generadas a partir del pedido. |
| `proformas.id` | string | Identificador único del documento referenciado. |
| `proformas.number` | string | Número del documento; null hasta que se numera. |
| `proformas.status` | string | Estado del documento en el momento en que se escribió la referencia; null si no consta. Informativo: puede estar desactualizado. |

*Llamada · filmo_orders_create*

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "filmo_orders_create",
    "arguments": {
      "contactId": "cont_8f2a1c",
      "startDate": "2026-09-01T08:00:00Z",
      "endDate": "2026-09-01T08:00:00Z",
      "lines": [
        {
          "itemId": "item_8f2a1c",
          "quantity": 1,
          "variantId": "vari_8f2a1c"
        }
      ]
    }
  }
}
```

*Resultado (generado desde el esquema)*

```json
{
  "structuredContent": {
    "data": {
      "id": "id_8f2a1c",
      "orderNumber": "<orderNumber>",
      "externalReference": "<externalReference>",
      "status": "draft",
      "startDate": "2026-09-01T08:00:00Z",
      "endDate": "2026-09-01T08:00:00Z",
      "rentalDays": 1,
      "projectId": "proj_8f2a1c",
      "projectName": "Example",
      "contact": {
        "id": "id_8f2a1c",
        "name": "Example"
      },
      "itemsCount": 1,
      "subTotalPrice": "1234.50",
      "discountTotal": "1234.50",
      "insuranceTotal": "1234.50",
      "depositTotal": "1234.50",
      "taxesPrice": "1234.50",
      "netPrice": "1234.50",
      "grossPrice": "1234.50",
      "tags": [
        {
          "id": "id_8f2a1c",
          "name": "Example"
        }
      ],
      "customFields": {
        "key": "<key>"
      },
      "source": "<source>",
      "createdAt": "2026-09-01T08:00:00Z",
      "updatedAt": "2026-09-01T08:00:00Z",
      "billingAddress": {
        "label": "Example",
        "addressLine1": "<addressLine1>",
        "addressLine2": "<addressLine2>",
        "city": "<city>",
        "province": "<province>",
        "postcode": "<postcode>",
        "country": "ES"
      },
      "shippingAddress": {
        "label": "Example",
        "addressLine1": "<addressLine1>",
        "addressLine2": "<addressLine2>",
        "city": "<city>",
        "province": "<province>",
        "postcode": "<postcode>",
        "country": "ES"
      },
      "contactPerson": {
        "id": "id_8f2a1c",
        "name": "Example"
      },
      "quotes": [
        {
          "id": "id_8f2a1c",
          "number": "<number>",
          "status": "<status>"
        }
      ],
      "invoices": [
        {
          "id": "id_8f2a1c",
          "number": "<number>",
          "status": "<status>"
        }
      ],
      "proformas": [
        {
          "id": "id_8f2a1c",
          "number": "<number>",
          "status": "<status>"
        }
      ]
    },
    "meta": {
      "idempotencyKey": "<the key you sent, or the one the server generated>",
      "rateLimit": {
        "limit": 120,
        "remaining": 119,
        "reset": 42
      }
    }
  }
}
```

## Prompts de ejemplo

*Prompt*

```text
Crea un pedido en borrador para este cliente del 15 al 17 de enero con dos unidades de este cuerpo de cámara.
```

## La misma operación por REST

Esta herramienta ejecuta [`POST /api/v1/orders`](https://docs.filmo.io/es/rest-api/endpoint-reference/orders/create-an-order).

---

URL canónica: https://docs.filmo.io/es/mcp/tools/orders/filmo-orders-create  
Última actualización: 2026-10-25