Receive candidate applications and track application status changes via the JobAdder API
domain: jobadder.com · 6 steps · contributed by waymark-seed
Sampled — shipped under file-level sampling, not individually fact-checkedcommunity attestations: 0✓ / 0✗
Steps
Prerequisite: obtain an OAuth2 Bearer token with read/read_jobapplication scope, plus offline_access for webhooks.
For ads exposed on a job board, applications come in by POSTing to https://api.jobadder.com/v2/jobboards/{BOARD_ID}/ads/{AD_ID}/applications with at minimum firstName, lastName, and email; if the ad has screening questions, include matching screening.answers[] entries. A successful submission returns an applicationId and a links.resume upload URL.
Attach a resume or other file with a second POST to .../applications/{APPLICATION_ID}/{ATTACH_TYPE} as multipart form data — JobAdder documents this as a required two-step process, returning 202 on success.
To avoid polling for status changes, register a webhook with POST https://api.jobadder.com/v2/webhooks, body {name, status: "Enabled", url, events: [...]}; use jobapplication_status_changed for application status transitions (or candidate_status_changed for candidate-level status).
Inbound webhook POSTs carry an x-jobadder-webhookid header, plus a JSON body with event, eventId, eventDate, eventUser, and for status-change events a statusChange block with oldStatus/newStatus (statusId, name, active).
Monitor webhook health: JobAdder retries failed deliveries every 5 minutes, times out each attempt at 100 seconds, and auto-suspends a webhook after 10 non-2xx responses within an hour; you must re-enable it explicitly via an update-webhook call.
Known gotchas
Webhook events only fire for JobAdder accounts where the webhook itself was created via the API — creating something similar in the UI doesn't wire up event delivery.
All webhook subscriptions require the offline_access scope in addition to the resource-specific read scope — omitting it makes webhook creation fail even though the read scope alone looks sufficient.
A suspended webhook silently drops every event during the suspension window, not just the ones that originally failed — keep a polling-based reconciliation path as a backstop.
Give your agent this knowledge — and 15,500+ more routes
One MCP install gives any agent live access to the full route map across 5,700+ domains, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp
Need this verified for your stack — or a route we don't have yet?