*MCP › Reference › Finance › Proformas*

# Change the commercial status of a proforma

> Moves the OPERATIVE status of the proforma —`pending`, `confirmed` or `cancelled`—, which is the answer of the customer, and leaves an optional note in the history of the document.

Any transition among the three is allowed, and it is undone by calling again. It does NOT touch the tax status (draft / validated): validate and void are for that. Unlike the quote, confirming a proforma does not drag any other along, because proformas have no versions. It requires sales documents in the plan of the account (402 without it). Returns the full proforma, the same projection as its GET.

TOOL `filmo_proformas_update_status` · `invoices:write` · 120/min · May need an add-on · Server annotation: Idempotent

## Arguments

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `proformaId` | string | Yes | Proforma identifier. |
| `status` | string | Yes | New commercial status: pending (awaiting an answer), confirmed (accepted by the customer) or cancelled (rejected or cancelled). `pending`, `confirmed`, `cancelled` |
| `notes` | string | No | Note stored in the document history alongside the status change. |
| `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 | Proforma identifier. |
| `proformaNumber` | string | Proforma number; null while it is a draft. |
| `status` | string | Document lifecycle status. |
| `operativeStatus` | string | Commercial status: pending (awaiting an answer), confirmed (accepted by the customer) or cancelled; null if not recorded. |
| `issueDate` | string<date-time> | Issue date in ISO 8601 UTC; null while it has none. |
| `currency` | string | Currency of the amounts, as an ISO 4217 code. |
| `contact` | object | Contact the proforma is issued to; null if not recorded. |
| `contact.id` | string | Contact identifier. |
| `contact.name` | string | Contact name. |
| `orderId` | string | Source order of the proforma; null if it does not come from one. |
| `orderNumber` | string | Number of that order; null if it does not come from one. |
| `projectId` | string | Project linked to the proforma; null if none. |
| `subTotal` | string | Subtotal before discounts and taxes, as a decimal string. |
| `discountTotal` | string | Total discounts, as a decimal string. |
| `taxesPrice` | string | Tax total, as a decimal string. |
| `netPrice` | string | Taxable base, as a decimal string. |
| `grossPrice` | string | Total including taxes, as a decimal string. |
| `totalPaid` | string | Advance payments received against the proforma, as a decimal string; null if none recorded. |
| `createdAt` | string<date-time> | Creation date in ISO 8601 UTC. |
| `updatedAt` | string<date-time> | Last modification date in ISO 8601 UTC. |

*Call · filmo_proformas_update_status*

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "filmo_proformas_update_status",
    "arguments": {
      "proformaId": "prof_8f2a1c",
      "status": "pending"
    }
  }
}
```

*Result (generated from the schema)*

```json
{
  "structuredContent": {
    "data": {
      "id": "id_8f2a1c",
      "proformaNumber": "<proformaNumber>",
      "status": "<status>",
      "operativeStatus": "<operativeStatus>",
      "issueDate": "2026-09-01T08:00:00Z",
      "currency": "EUR",
      "contact": {
        "id": "id_8f2a1c",
        "name": "Example"
      },
      "orderId": "orde_8f2a1c",
      "orderNumber": "<orderNumber>",
      "projectId": "proj_8f2a1c",
      "subTotal": "1234.50",
      "discountTotal": "1234.50",
      "taxesPrice": "1234.50",
      "netPrice": "1234.50",
      "grossPrice": "1234.50",
      "totalPaid": "1234.50",
      "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/proformas/{proformaId}/status`](https://docs.filmo.io/rest-api/endpoint-reference/proformas/change-the-commercial-status-of-a-proforma).

---

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