Obtain the job id from GET https://boards-api.greenhouse.io/v1/boards/{board_token}/jobs
Retrieve the job's required question fields with GET https://boards-api.greenhouse.io/v1/boards/{board_token}/jobs/{id} — the response includes a 'questions' array
Build a multipart/form-data POST body with at minimum first_name, last_name, email, and any required custom question fields returned in the previous step
Attach a resume file under the 'resume' field or supply a resume_text field if a file is not available
POST to https://boards-api.greenhouse.io/v1/boards/{board_token}/jobs/{id} with Authorization: Basic {base64(<API_KEY>:)} — the password is empty
Confirm a 200 response; the body contains the new application id
Known gotchas
The API key used must be the Job Board API key (found under Configure > Dev Center > Job Board API Key), not the Harvest API key
Required custom questions will cause a 422 if omitted; always fetch the job's question definitions before submitting
Duplicate application detection is handled by Greenhouse internally; submitting the same email twice may create a duplicate candidate rather than rejecting the request
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