GET https://harvest.greenhouse.io/v1/custom_fields?field_type=job to retrieve all custom field definitions for jobs, noting the field_key and value_type for each.
GET https://harvest.greenhouse.io/v1/jobs/:job_id to retrieve the job record; the custom_fields array in the response contains current field values keyed by field_key.
To update a custom field value, PATCH https://harvest.greenhouse.io/v1/jobs/:job_id with a body where custom_fields is an object mapping field_key to the new value.
For single-select custom fields, the value must be a valid option string; retrieve valid options from GET /v1/custom_field_options?custom_field_id=:id.
For date custom fields, send the value as an ISO 8601 date string (YYYY-MM-DD).
Confirm the update by re-fetching GET /v1/jobs/:job_id and inspecting the custom_fields array.
Known gotchas
Custom field updates use field_key (a snake_case string) not the display name; sending the human-readable label will silently fail or return a 422.
The PATCH body for custom fields must nest values under the 'custom_fields' key; sending them at the top level of the payload does not update them.
Multi-select custom fields expect an array of option strings; sending a single string instead of an array results in a validation error.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp