/v1/custom-fields/{custom_field_id}betaGet a custom field
- Needs
- Read your data
(mcp:read) - Plan
- Any plan with API access
- Limits
- 300 a minute per key
- Undo
- Nothing to undo: this only reads.
Returns one custom field: its key, label, type, the options of a choice field, placeholder, read_only, visibility, whether contacts hold values in it (in_use) and when it was created and last changed.
A field that is visible to managers only (visibility: manager_only) is 404 for a key whose staff member is not a manager, exactly as if it did not exist, and it is not in List custom fields for them either.
Try it
This only reads. It uses your real data and changes nothing.
Code and response
curl -X GET 'https://mcp.wa-api.cloud/v1/custom-fields/32' \ -H "Authorization: Bearer $API_KEY"
The code reads your key from $API_KEY.
Parameters
| Field | Type | What it is |
|---|---|---|
| custom_field_idrequired | string | integer · path | The custom field id.pattern ^[1-9]\d{0,18}$ |
Headers
| Field | Type | What it is |
|---|---|---|
| Authorizationrequired | header | Bearer $API_KEY — your API key. |
| Api-Version | header | The API version to use, e.g. 2026-10-01. Default: the version your key is pinned to.one of: 2026-10-01 · pattern ^\d{4}-\d{2}-\d{2}$ |
Response 200
The custom field.
| Field | Type | What it is |
|---|---|---|
| idrequired | string | |
| keyrequired | string | Use this key in attributes: { "<key>": value }. |
| labelrequired | string or null | |
| typerequired | string or null | |
| optionsrequired | array of object or null | Allowed values for select / multiselect / radio fields. |
| labelrequired | string | |
| valuerequired | string | |
| read_onlyrequired | boolean | |
| visibilityrequired | string or null | visible_to_all or manager_only. |
| in_userequired | boolean or null | |
| created_atrequired | string or null | |
| placeholderrequired | string or null | Hint shown in the empty input (none for checkbox, boolean and choice fields). |
| updated_atrequired | string or null |
Errors
Errors are application/problem+json. Branch on code.
| Status | Code | When |
|---|---|---|
| 400 | invalid_input | A field is missing or has the wrong format. |
| 401 | unauthenticated | The Authorization header is missing, the key is unknown, expired or revoked. |
| 403 | entitlement_required | The workspace's plan does not include API access ( |
| 403 | insufficient_scope | The key does not have the permission this operation needs. |
| 404 | not_found | No custom field with this id in your workspace, or it is visible to managers only and your key's staff member is not one. |
| 429 | rate_limited | The key or workspace went over its rate limit. Wait for |
| 503 | upstream_unavailable | A service behind the API is briefly unavailable. Safe to retry with backoff. |
Examples
Read a choice field
Response 200
{
"id": "32",
"key": "loyalty_tier",
"label": "Loyalty tier",
"type": "select",
"options": [
{
"label": "Gold",
"value": "gold"
},
{
"label": "Silver",
"value": "silver"
}
],
"read_only": false,
"visibility": "visible_to_all",
"in_use": true,
"created_at": "2026-09-02T08:00:00Z",
"placeholder": null,
"updated_at": "2026-09-20T10:30:00Z"
}Operation path
The same operation is also at POST /v1/ops/crm_get_custom_field, with every field in the JSON body.