*MCP › Reference › Operations › Internal services*

# Create an internal service

> Schedules a working day that does not hang off an order: maintenance, transfer between warehouses, training.

The MINIMUM duration is fifteen minutes. Returns the created internal service.

TOOL `filmo_internal_services_create` · `internal-services:write` · 120/min

## Arguments

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `title` | string | Yes | Assignment title. |
| `description` | string | No | Description of what needs to be done. |
| `serviceId` | string | No | Catalogue service it comes from, if it comes from one. |
| `serviceType` | string | No | Assignment type. Defaults to "crew". `crew`, `fleet`, `general` |
| `startDate` | string<date-time> | Yes | Start in ISO 8601 with offset. |
| `endDate` | string<date-time> | Yes | End in ISO 8601 with offset. At least fifteen minutes after the start. |
| `projectId` | string | No | Project it is charged to. |
| `assignedStaffIds` | string[] | No | Assigned staff. |
| `assignedVehicleIds` | string[] | No | Assigned vehicles. |
| `qty` | integer | No | How many units of the service. |
| `requirements` | object[] | No | Resources needed to provide it. |
| `requirements.requiredResourceType` | string | Yes | What is needed: personnel or vehicle. `personnel`, `vehicle` |
| `requirements.qty` | integer | Yes | How many are needed. |
| `idempotencyKey` | string | No | Idempotency key chosen by the client (a UUID is recommended). Repeating the same key with the same arguments within 24 h returns the stored response without executing again; with different arguments it responds 422. It is the safe way to retry after a network failure. |
| `ifMatch` | string | No | Optimistic locking: the meta.etag you got from the detail read of this resource (or "*"). If the resource changed since, the call fails with 412 precondition_failed before writing anything; read it again and retry. Omit it to write unconditionally. |

## Result

On success the result carries `structuredContent` with `data` and `meta`. These are the attributes of `data`.

| Name | Type | Description |
| --- | --- | --- |
| `id` | string | Unique assignment identifier. |
| `title` | string | Assignment title. |
| `status` | string | Status: active, completed or cancelled. |
| `startDate` | string<date-time> | Start in ISO 8601 UTC. |
| `endDate` | string<date-time> | End in ISO 8601 UTC. |
| `projectId` | string | Associated project; null if not applicable. |
| `createdAt` | string<date-time> | Creation date in ISO 8601 UTC. |
| `updatedAt` | string<date-time> | Last modification date in ISO 8601 UTC. |

*Call · filmo_internal_services_create*

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "filmo_internal_services_create",
    "arguments": {
      "title": "Example",
      "startDate": "2026-09-01T08:00:00Z",
      "endDate": "2026-09-01T08:00:00Z"
    }
  }
}
```

*Result (generated from the schema)*

```json
{
  "structuredContent": {
    "data": {
      "id": "id_8f2a1c",
      "title": "Example",
      "status": "<status>",
      "startDate": "2026-09-01T08:00:00Z",
      "endDate": "2026-09-01T08:00:00Z",
      "projectId": "proj_8f2a1c",
      "createdAt": "2026-09-01T08:00:00Z",
      "updatedAt": "2026-09-01T08:00:00Z"
    },
    "meta": {
      "idempotencyKey": "<the key you sent, or the one the server generated>",
      "rateLimit": {
        "limit": 120,
        "remaining": 119,
        "reset": 42
      }
    }
  }
}
```

## The same operation by REST

This tool runs [`POST /api/v1/internal-services`](https://docs.filmo.io/rest-api/endpoint-reference/internal-services/create-an-internal-service).

---

Canonical URL: https://docs.filmo.io/mcp/tools/internal-services/filmo-internal-services-create  
Last updated: 2026-10-25