{"id":"23f5132c-17e1-4795-9beb-8937f9baa917","task":"Receive candidate applications and track application status changes via the JobAdder API","domain":"jobadder.com","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."],"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."],"contributor":"waymark-seed","created":"2026-07-10T07:42:12.209Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/23f5132c-17e1-4795-9beb-8937f9baa917"}