Skip to content

Pro REST API reference

WP Career Board overviewFree + ProGet WP Career Board →

WP Career Board Pro adds routes to the wcb/v1 namespace, on top of the routes in the Free plugin (see the Free REST API reference). This page lists the Pro routes only. Base URL: https://your-site.com/wp-json/wcb/v1.

  • Logged-in browser calls send the X-WP-Nonce header (wp_create_nonce( 'wp_rest' )). External clients use Application Passwords over HTTPS.
  • Pro routes are not gated by the license. The license only controls automatic updates, so a route works on an unlicensed site.
  • Permission failures return 401 (not logged in) or 403 (logged in, not allowed) with a WP_Error body.
  • Abilities named below (for example wcb/manage-boards) are the Free plugin’s abilities. Administrators have all of them.
Route Method Who may call Params Notes
/jobs/{id}/kanban GET Needs wcb/view-applications, and be an admin, a moderator (wcb/moderate-jobs), or the job’s author stage_id (int, 0 = all columns), page (int, default 1) Returns one array item per stage with applications, total, has_more, page. With stage_id it returns that one column’s page. 25 cards per page by default (filter wcbp_kanban_stage_limit, capped at 100).
/applications/{id}/stage PUT, PATCH, POST Needs wcb/view-applications, and be a moderator or the author of the application’s job stage_id (int, required) 400 wcb_invalid_stage if the stage is not on the job’s board. 409 wcb_application_closed if the application is withdrawn, position closed or job removed. Fires wcbp_application_stage_changed.
Route Method Who may call Params Notes
/boards/{id} GET Anyone none Returns id, title, currency. 404 wcb_board_not_found for a missing board, and for an unpublished board unless the caller has wcb/manage-boards.
/boards/{id} DELETE wcb/manage-boards none Deletes the board, its stages, and unlinks its jobs.
/boards/{id}/stages GET Logged in, and wcb/manage-boards or the board’s author none Ordered stage list.
/boards/{id}/stages POST wcb/manage-boards label, color (hex, default #6366f1), sort_order, is_terminal, terminal_outcome Creates a stage.
/boards/{id}/stages/{stage_id} PUT, PATCH, POST wcb/manage-boards label, color, sort_order Send only the fields to change.
/boards/{id}/stages/{stage_id} DELETE wcb/manage-boards none Its cards move to the board’s first remaining stage; the response reports moved_to_stage and applications_moved.

All Field Builder routes need wcb/manage-boards.

Route Method Params Notes
/fields/groups GET board_id, entity_type (default job) Lists groups.
/fields/groups POST board_id (required, 0 = global), label (required), entity_type (default job), sort_order, excluded_boards (int array) excluded_boards hides a job group on those boards.
/fields/groups/{id} PUT, PATCH, POST same as create, none required
/fields/groups/{id} DELETE none
/fields/groups/{group_id}/fields GET none Fields in a group.
/fields/groups/{group_id}/fields POST field_type (required), label (required), field_key, options (array), rules (object), visibility (public, employer_only, admin_only; default public), required (bool), sort_order Keys are stored with a wcbf_ prefix. 400 wcb_invalid_field_type, 404 wcb_group_not_found, 409 when the key already exists.
/fields/{id} PUT, PATCH, POST same as create, none required
/fields/{id} DELETE none
/fields/reorder POST items (array of objects, required) Saves drag-and-drop order.

The 17 accepted field_type values: text, textarea, number, url, email, date, date_range, select, multi_select, checkbox, radio, file, video_url, location, salary_range, repeater, conditional.

Route Method Who may call Params Notes
/resumes GET Anyone the candidate directory access level allows (setting resume_directory_access: public, members or approved; filter wcb_can_browse_candidates). Others get 401 (logged out) or 403 page, per_page (1-50, default 12), search, skill, open_to_work, experience, location, order (ASC, DESC), author Public candidate directory. Filtering runs on the server. Returns resumes, total, pages and has_more.
/resumes POST Logged in none Creates a resume for the current user.
/candidates/{id}/resumes GET The candidate, or a user with wcb/view-resumes none Blocked candidates return 404.
/candidates/{id}/resumes POST The candidate only title (required)
/resumes/{id} GET Owner, anyone who may read that resume, or wcb/manage-settings none
/resumes/{id} PUT, PATCH, POST Owner or wcb/manage-settings title, is_public, custom_fields, sections
/resumes/{id} DELETE Owner or wcb/manage-settings none
/resumes/photo-upload POST Needs wcb/manage-resume multipart file field photo
/resumes/{id}/pdf GET Same as GET /resumes/{id} none Streams the generated PDF as a download.
/resumes/{id}/pdf POST Owner or wcb/manage-settings multipart file field resume_file (PDF only) Replaces the attached CV. 400 wcb_invalid_file_type for non-PDF.
/resumes/{id}/bookmark POST Logged in none Toggles the bookmark for the current user.
Route Method Who may call Params Notes
/alerts GET Logged in none The current user’s alerts, up to 1000.
/alerts POST Logged in, or a guest with a valid email when guest alerts are on board_id (0 = all), search_query, filters (object: category, type), frequency (instant, daily, weekly; default daily), email (guests) Returns id and needsConfirm (true for guests, who must confirm by email). Guests: 5 requests per IP per hour (429 wcb_rate_limited). Everyone: capped per person by the alerts limit (400 wcb_alert_limit).
/alerts/{id} PUT, PATCH, POST Alert owner or wcb/manage-settings frequency, search_query, filters, board_id Returns updated.
/alerts/{id} DELETE Alert owner or wcb/manage-settings none Returns deleted.
/alerts/{id}/unsubscribe/{token} GET, POST Anyone with the 32-character token none One-click unsubscribe used by the email header. Always answers 200 {"unsubscribed":true}, whatever the id or token, so alert IDs cannot be probed; only the correct token deletes the alert.

All routes need a logged-in user and only touch that user’s rows.

Route Method Params Notes
/notifications GET page (default 1), per_page (1-50, default 20) Returns notifications and unread_count.
/notifications DELETE none Clears all.
/notifications/{id} DELETE none
/notifications/{id}/read PUT, PATCH, POST none
/notifications/read-all POST none
Route Method Who may call Params Notes
/push/register-device POST Logged in expo_push_token (required), platform (ios, android), device_name 400 wcb_invalid_push_token unless the token looks like ExponentPushToken[...] or ExpoPushToken[...]. Returns 201 {"registered":true}.
/push/register-device DELETE Logged in expo_push_token (required) Returns 200 {"unregistered":true}.
Route Method Who may call Notes
/employers/{id}/credits GET That employer, or wcb/manage-credits Returns balance and the 50 newest ledger rows.
/jobs/{id}/feature POST The job’s author, or wcb/manage-credits Charges the Featured price and features the job. Only publish or pending jobs (409 wcb_not_featurable). Returns id, featured, balance.
/analytics/credits.csv GET wcb/view-analytics or wcb/manage-credits Streams the credit ledger as CSV, newest first.

The credit checkout, claim and webhook routes belong to the bundled Credits SDK and live under wbcom-credits/v1. See Credits SDK.

Each allowed call counts against a limit of 30 AI requests per user per hour (429 wcb_rate_limited); permission is checked first, so refused or signed-out calls count for nobody. See AI providers.

Route Method Who may call Params
/ai/match POST Logged in query (optional; empty uses the candidate’s resume)
/candidates/{id}/matches GET That candidate, or wcb/manage-ai none
/ai/ranked-applications/{job_id} GET wcb/view-applications, and an admin, moderator or the job’s author none
/jobs/ai-description POST wcb/post-jobs title, company_type, location
/jobs/{job_id}/ai-cover-letter POST wcb/apply-jobs none

Responses:

  • /ai/match and /candidates/{id}/matches return an array of match cards: job_id, score, score_pct, title, company, url, location. Filter wcbp_ai_candidate_matches can change the list.
  • /ai/ranked-applications/{job_id} returns an array of applicants, best fit first, with score (0 to 100, or null when not scored yet), reason and summary. It returns an empty array when no analysis provider is set. Filter wcbp_ai_ranked_applications can change the list.
  • /jobs/ai-description returns { "description": "..." }. title defaults to developer, location to remote. 503 wcb_ai_disabled when no analysis provider is set.
  • /jobs/{job_id}/ai-cover-letter returns { "cover_letter": "..." }. 503 wcb_ai_disabled when no analysis provider is set, and 404 unless the job is published.
Route Method Who may call Params Notes
/geocode GET Anyone address (required, 2-200 characters) Returns { lat, lng } from the active map driver. Results are cached (one day for a hit, one hour for a miss). 30 requests per IP per hour by default (filter wcbp_geocode_rate_limit, 429 wcb_rate_limited). 422 wcbp_geocode_failed when no place is found.

These three routes run the Pro steps of the setup wizard and need wcb/manage-settings.

Route Method Params
/wizard/activate-license POST license_key (required)
/wizard/setup-credits POST threshold (int, default 5)
/wizard/create-pro-pages POST none

The job feed is an XML file at /wcb-jobs.xml, not a wcb/v1 route. It answers 404 until Settings > Job Feed > Enable Feed is on. It lists published jobs, newest first, 200 per page (?start=0, ?start=200, and so on). It leaves out jobs whose deadline has passed. Each job carries city, country and, for remote jobs, remotetype. The email element appears only when a Contact Email is set. See Job feed.