*MCP › Reference › Operations › Services*

# Update a service

> Updates a service (send only the fields to change).

It includes the rate, the travel times and the expenses passed on by default —of which only the PRICE goes in, not the cost—. Lists replace the existing one. Returns the updated service.

TOOL `filmo_services_update` · `services:write` · 120/min · Server annotation: Idempotent

## Arguments

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `serviceId` | string | Yes | Service identifier. |
| `name` | string | No | Customer-facing service name. |
| `description` | string | No | Service description; null clears it. |
| `serviceType` | string | No | Service type. `crew`, `fleet`, `general` |
| `showInPlanner` | boolean | No | Whether it appears as a plannable service. |
| `defaultQty` | integer | No | Default quantity. |
| `breakMinutes` | integer | No | Break deducted from the work day, in minutes. |
| `orderInfo` | string | No | Information printed on the order and on the delivery note. |
| `priceConfig` | object | No | Service rate. |
| `priceConfig.hourlyRate` | number | No | Price per hour. |
| `priceConfig.fixedPrice` | number | No | Fixed price per service. |
| `priceConfig.perKmRate` | number | No | Price per kilometre. |
| `includeInPrice` | boolean | No | Whether its amount counts towards the document total. |
| `distancePolicy` | string | No | How the billable distance is calculated. |
| `travelTimeBefore` | integer | No | Travel time before, in minutes. |
| `travelTimeAfter` | integer | No | Travel time after, in minutes. |
| `usagePeriodPolicy` | object | No | Window in which it is used. |
| `usagePeriodPolicy.inherit` | string | Yes | "order" inherits the dates of the order; "custom" uses the offsets below. `order`, `custom` |
| `usagePeriodPolicy.offsetBeforeMinutes` | integer | No | Minutes before the order start. |
| `usagePeriodPolicy.offsetAfterMinutes` | integer | No | Minutes after the order end. |
| `planningPeriodPolicy` | object | No | Window in which it is planned. |
| `planningPeriodPolicy.inherit` | string | Yes | "order" inherits the dates of the order; "custom" uses the offsets below. `order`, `custom` |
| `planningPeriodPolicy.offsetBeforeMinutes` | integer | No | Minutes before the order start. |
| `planningPeriodPolicy.offsetAfterMinutes` | integer | No | Minutes after the order end. |
| `defaultExpenses` | object | No | Expenses passed on by default. Only the price, not the cost. Merged with the stored ones: categories you omit are left unchanged, and each category keeps its stored cost. |
| `defaultExpenses.catering` | object | No | Meal allowances. |
| `defaultExpenses.catering.price` | number | Yes | What the customer is charged for this concept. |
| `defaultExpenses.travel` | object | No | Travel. |
| `defaultExpenses.travel.price` | number | Yes | What the customer is charged for this concept. |
| `defaultExpenses.accommodation` | object | No | Accommodation. |
| `defaultExpenses.accommodation.price` | number | Yes | What the customer is charged for this concept. |
| `defaultExpenses.other` | object | No | Other expenses. |
| `defaultExpenses.other.price` | number | Yes | What the customer is charged for this concept. |
| `requirements` | object[] | No | Required resources. Replaces the whole list. |
| `requirements.requiredResourceType` | string | Yes | What is needed to provide it: personnel or vehicle. `personnel`, `vehicle` |
| `requirements.qty` | integer | Yes | How many are needed. |
| `requirements.requiredTags` | string[] | No | Tags the assigned resource must have. E.g.: "Carné C". |
| `collectionId` | string | No | Collection it belongs to. |
| `tags` | string[] | No | Tags. Replaces the whole list. |
| `images` | string[] | No | Service image URLs. |
| `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 service identifier. |
| `name` | string | Service name as the customer sees it. |
| `serviceType` | string | Type: crew (personnel), fleet (vehicles) or general. |
| `description` | string | Description; null if it has none. |
| `defaultQty` | integer | Quantity added to an order by default. |
| `showInPlanner` | boolean | Whether it appears as a plannable service. |
| `includeInPrice` | boolean | Whether its amount counts towards the document total. |
| `collectionName` | string | Path of the collection it belongs to; null if it is in none. |
| `tags` | object[] | Service tags, with their identifier and name. |
| `tags.id` | string | Unique identifier of the tag. |
| `tags.name` | string | Tag name. |
| `requirements` | object[] | Resources needed to provide it. |
| `requirements.requiredResourceType` | string | What is needed to provide it: personnel or vehicle. `personnel`, `vehicle` |
| `requirements.qty` | integer | How many are needed. |
| `requirements.requiredTags` | string[] | Tags the assigned resource must have. E.g.: "Carné C". |
| `createdAt` | string<date-time> | Creation date in ISO 8601 UTC; null if not recorded. |
| `updatedAt` | string<date-time> | Last modification date in ISO 8601 UTC; null if not recorded. |

*Call · filmo_services_update*

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "filmo_services_update",
    "arguments": {
      "serviceId": "serv_8f2a1c"
    }
  }
}
```

*Result (generated from the schema)*

```json
{
  "structuredContent": {
    "data": {
      "id": "id_8f2a1c",
      "name": "Example",
      "serviceType": "<serviceType>",
      "description": "<description>",
      "defaultQty": 1,
      "showInPlanner": true,
      "includeInPrice": true,
      "collectionName": "Example",
      "tags": [
        {
          "id": "id_8f2a1c",
          "name": "Example"
        }
      ],
      "requirements": [
        {
          "requiredResourceType": "personnel",
          "qty": 1,
          "requiredTags": [
            "<requiredTags>"
          ]
        }
      ],
      "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 [`PATCH /api/v1/services/{serviceId}`](https://docs.filmo.io/rest-api/endpoint-reference/services/update-a-service).

---

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