# Update an invoice

> Updates an invoice that is `in_review` or `action_required`. Approved invoices can't be changed.

```
PATCH https://api.sandbox.stridehq.ai/v1/invoices/{id}
```


Scope: `invoices:write`

## Path parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `id` | string | Yes | The invoice's id. |

## Headers

| Name | Type | Required | Description |
|---|---|---|---|
| `Idempotency-Key` | string | No | A unique value, such as a UUID. The same key and body within 24 hours returns the original response. |

## Body

| Name | Type | Required | Description |
|---|---|---|---|
| `invoice_number` | string | No |  |
| `invoice_date` | string (date) | No |  |
| `due_date` | string (date) | No |  |
| `po_number` | string | No |  |
| `description` | string | No |  |
| `total_amount` | integer | No | Minor units. VAT stays the same; the net amount changes. |
| `metadata` | object | No | Up to 20 string keys (up to 40 characters) and values (up to 500 characters), for your use. StrideHQ never reads them. Send null to clear it. |

## Responses

- **200**: The updated invoice.
- **400**: `unknown_field` (including `currency` and `creator_id`, which can't be changed), `invalid_parameter`, `invalid_json` or `invalid_content_type`.
- **401**: `missing_api_key`, `invalid_api_key`, `revoked_api_key` or `wrong_environment`.
- **404**: `resource_not_found`: no such object in your organisation.
- **409**: `invoice_not_editable`, `duplicate_invoice`, `idempotency_key_reused` or `idempotency_key_in_use`.

```json
{
  "id": "inv_4b1e7d2a9c3f4e5d8a6b0c1d2e3f4a5b",
  "object": "invoice",
  "creator_id": "cre_8f3a2c1d9b7e4f60a1b2c3d4e5f60718",
  "invoice_number": "MC-0042",
  "invoice_date": "2026-10-10",
  "due_date": "2026-11-09",
  "purchase_order_id": "po_2d4f6a8b0c1e3a5b7d9f1a2b3c4d5e6f",
  "po_match": "matches",
  "description": "Autumn campaign, 3 videos",
  "net_amount": 250000,
  "vat_amount": 0,
  "total_amount": 250000,
  "currency": "GBP",
  "status": "approved",
  "action_required_reason": null,
  "rejection_reason": null,
  "payment_run_id": null,
  "payment_id": null,
  "has_file": true,
  "external_id": null,
  "metadata": {},
  "created_at": "2026-10-10T11:20:00Z",
  "updated_at": "2026-10-12T08:45:00Z"
}
```
