# POST /work-order-fields

**Resource:** [Work Order Settings](./work-order-config.md)  
**MCP tool:** `create_work_order_field`  
**Scopes:** `work-orders:write`  
**Write operation:** yes

Add a work-order custom field. The generated slug is what automation configs address the field by (see the create_work_orders action's `data` object), so read it back off the response.

## Parameters

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `label` | body | string | yes | Display label, e.g. "Offer Amount (AUD)". |
| `slug` | body | string | no | Machine key that automations address this field by (the create_work_orders action's `data` object). Auto-generated from the label when omitted, and immutable afterwards. |
| `product_id` | body | string | no | Scope the field to one catalogue product instead of the whole workspace. |
| `type` | body | string | no | Field type. Drives both the input rendered on the work order and the coercion applied to values an automation prefills into it. Defaults to text. |
| `options` | body | array | no | Choices for a select field. Required for type "select". Without them the field renders an empty dropdown. |
| `required` | body | boolean | no | Marks the field as expected: it renders with an asterisk and counts toward the work order's "scoped" progress indicator. It does NOT block anything on its own — a work order can still change status with it empty. To actually gate a status change, use requiredFieldsByStatus on a portal's work_orders sharing rule (set_portal_data_sharing). |
| `is_title` | body | boolean | no | Make this the field rendered as the work order title. Only one field per workspace should carry it. |
| `position` | body | number | no | Display order among the workspace fields. |
| `require_approval` | body | boolean | no | Optional. Set true to route this write into the approval queue for human review instead of executing it immediately (returns 202 + an approval_id). Works even when your key/token has permission to execute directly. |

## Request example

```bash
curl -X POST   "https://api.trustpager.com/functions/v1/api/v1/work-order-fields"   -H "Authorization: Bearer YOUR_API_KEY"   -H "Content-Type: application/json"   -d '{"label":"...","type":"..."}'
```

---
Base URL: `https://api.trustpager.com/functions/v1/api/v1` — Auth: `Authorization: Bearer YOUR_API_KEY`