> ## Documentation Index
> Fetch the complete documentation index at: https://developer.qminder.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Editing an Input Field

> Update an existing input field's properties.

To update an input field, send a PATCH request to `/input-fields/{inputFieldId}`. Only include fields you want to change — omitted fields remain unchanged.

<CodeGroup>
  ```bash curl theme={null}
  curl -X PATCH https://api.qminder.com/input-fields/550e8400-e29b-41d4-a716-446655440000 \
    -H "X-Qminder-REST-API-Key: YOUR_API_KEY" \
    -H "X-Qminder-API-Version: 2020-09-01" \
    -H "Content-Type: application/json" \
    -d '{
      "title": "Visit reason",
      "isVisibleInWaitingDrawer": false,
      "isMandatoryBeforeServed": true
    }'
  ```
</CodeGroup>

**Response:** `200 OK` with an empty body.

### Editable Fields

All fields are optional — only include the fields you want to change.

| Field | Type | Description |
| - | - | - |
| `title` | string | Display title (max 50 characters). Only for TEXT, SELECT, URL, DATE, NUMERIC. |
| `visitorFacingTitle` | string \| null | Title shown to visitors (max 200 characters). Set to `null` to clear. Only for TEXT, SELECT, DATE, NUMERIC. |
| `isVisibleInWaitingDrawer` | boolean | Shown in the waiting drawer |
| `isVisibleInServingDrawer` | boolean | Shown in the serving drawer |
| `isMandatoryBeforeAdded` | boolean | Must be filled before ticket is added |
| `isMandatoryBeforeServed` | boolean | Must be filled before ticket is served |
| `isMandatoryInRemoteSignIn` | boolean | Must be filled in remote sign-in |
| `showInRemoteSignIn` | boolean | Show in remote sign-in |
| `visibleForLines` | array | Lines this field applies to: `[{"id": number}]`. Empty array means all lines. |
| `multiSelect` | boolean | Allow multiple selections. Only for SELECT. |
| `options` | array | Select options. Only for SELECT. |
| `constraints` | object | Numeric constraints (`min`, `max`, `scale`). Only for NUMERIC. |
| `translations` | array | Translations (see below). Only for TEXT, SELECT, URL, DATE, NUMERIC. |

### Type-Specific Restrictions

Not all fields can be set on all input field types. Setting a restricted field returns a `400` error:

* **`title`** — cannot be set on FIRST\_NAME, LAST\_NAME, EMAIL, PHONE\_NUMBER
* **`visitorFacingTitle`** — cannot be set on FIRST\_NAME, LAST\_NAME, EMAIL, PHONE\_NUMBER, URL
* **`multiSelect`** and **`options`** — can only be set on SELECT
* **`constraints`** — only applies to NUMERIC

### Translations

When `translations` is provided, **all existing translations are replaced** with the new set. There is no way to update a single translation — you must send the complete list.

```json theme={null}
{
  "translations": [
    { "languageCode": "fr", "title": "Raison de la visite", "visitorFacingTitle": "Votre raison" },
    { "languageCode": "es", "title": "Motivo de la visita" }
  ]
}
```

### SELECT Options

When `options` is provided for a SELECT field, options are matched by `id`:

* Options with a matching `id` are **updated**
* Options with a new `id` are **added**
* Existing options not included in the request are **removed**

```json theme={null}
{
  "options": [
    { "id": "770e8400-e29b-41d4-a716-446655440001", "title": "Updated title" },
    { "id": "990e8400-e29b-41d4-a716-446655440001", "title": "New option" }
  ]
}
```

### Error Responses

| Status | Code | Description |
| - | - | - |
| 400 | `invalid_arguments` | Type-specific field set on wrong type (e.g., `title` on EMAIL) |
| 400 | `duplicate_items_in_request` | SELECT options have duplicate titles |
| 400 | `parameter_invalid_blank` | Title, visitor-facing title, or translation title is blank |
| 400 | Validation error | Title too long (>50 chars) or visitor-facing title too long (>200 chars) |
| 404 | `resource_missing` | Input field not found |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.