Configure job approval and offer approval flows in Greenhouse Recruiting under Configure > Approval; define the approver chain and map it to your HRIS roles if using an external approval system
Subscribe to the offer Greenhouse webhook events (offer_created, offer_updated, offer_approved, offer_rejected) in Configure > Dev Center > Web Hooks to receive real-time notifications when offer state changes
When an offer_created webhook fires, retrieve full offer details via GET /v1/applications/{applicationId}/offers/current_offer on the Harvest API using your API key in Basic Auth
If your HRIS or external approval system must sign off, push the offer details to the external system and wait for approval; when approved externally, update the offer in Greenhouse via PATCH /v1/applications/{applicationId}/offers/{offerId} with the approved fields
To trigger or advance the approvals process programmatically (e.g., after uploading a signed offer letter), use the offer update endpoint; uploading an offer_letter attachment to an existing offer will retrigger the Greenhouse approval chain
Assign approval permissions to approvers via PUT /v1/jobs/{jobId}/job_permissions with the appropriate approver user IDs and permission levels before the approval flow is triggered
Known gotchas
The Greenhouse approvals API is designed for integration with an external HRIS approval system, not for bypassing approvals; you cannot mark an offer as approved purely via API without the configured approvers acting — the API reflects state, not overrides it
Uploading an offer letter attachment via the API retriggers the full approval chain; doing this unintentionally (e.g., during a data migration) will spam approvers with re-approval requests
Offer approval flows are per-job configurations; changes to the approver chain in Greenhouse settings do not retroactively affect in-progress offer approvals — test approval flow changes in a staging job first
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