API Quickstart
Get up and running in minutes
This quickstart walks through the main flow of a HiringCenter integration:
- Set your API key
- Verify the key
- Look up the IDs you need: stages and users
- Create a prospect
- Add a note or a task for that prospect
- Schedule a meeting and move the prospect to a new stage
- Record a hire
Base URL:
https://api.hiringcenterpro.com/v2
The examples use curl. The optional jq lines show where each ID comes from.
1) Set your API key
Create an API key in HiringCenter: Settings -> API / Webhooks -> Add API Key
Then set these environment variables:
Code
Every request made with this key acts on the key's account. You never send an accountId; a request that names a different account returns 403.
2) Verify the key
GET /auth confirms the key is valid and shows which account it belongs to. Use it during setup or troubleshooting; it is not required before other requests.
Code
A successful response includes the key's accountId, accountName, and active status.
3) Look up stages and users
Prospects are placed in stages by stageId. Task assignees, meeting owners, and prospect owners are user IDs, and any write can take an optional userId to credit a user instead of your API key. Look these up once and reuse the IDs.
Code
Save the IDs you will use:
Code
GET /account with no include returns the whole account configuration (stages, pipelines, users, offices, sources, and identities) in one call. GET /account/pipelines, GET /account/offices, and GET /account/sources list the other IDs prospects use.
4) Create a prospect
Use POST /prospects (Create or Update Prospect). firstName and lastName are required. Send whatever contact details you have, such as email, phone, officeId, sourceId, and labels.
If a prospect with the same email (or, failing that, the same phone) already exists, the API matches it instead of creating a duplicate. Sending "update": false returns the existing prospect unchanged, so the response is always { "success": true, "item": ... }.
Code
A new prospect returns 201; a match returns 200 with item.message set to Success: prospect already exists. Save item.id:
Code
The phone is returned normalized as 15552345678. With the default "update": true, a matched prospect is updated with the fields you send, and the 200 response body is the updated prospect object itself (read id from the top level).
5) Add a note or a task
Add a note with POST /notes. If the prospect does not exist, the request returns 404 and nothing is saved. userId is optional: it makes that user the note's author. Without it, the note is credited to your API key by name.
Code
Or create a task with POST /tasks. assignedTo (required) is the user who should do the task; dueAt (Unix milliseconds) defaults to now.
Code
Meetings (POST /meetings, with a required ownerId) and hires (POST /hires) work the same way with the prospectId.
6) Schedule a meeting and move the prospect forward
Book a meeting with POST /meetings. meetingDate (Unix milliseconds or an ISO 8601 string), timeZone, meetingType, and ownerId (the user who runs the meeting) are required.
Code
Then move the prospect to the next stage with POST /prospects/<prospectId>. Only the fields inside updates change, and the response lists what changed in changes.
Code
Mark the task from step 5 done with POST /tasks/<taskId> and {"complete": true}. Update or cancel the meeting later with POST /meetings/<meetingId> or DELETE /meetings/<meetingId>.
7) Record a hire
When the prospect joins, record it with POST /hires. hireDate accepts Unix milliseconds or an ISO 8601 date.
Code
List a prospect's records any time with GET /notes, GET /tasks, GET /meetings, or GET /hires and ?prospectId=<prospectId>.
The whole flow
GET /authto verify the key (optional)GET /account/stagesandGET /account/usersfor IDsPOST /prospectsto create or match the prospect, then saveitem.idPOST /notesorPOST /tasksto record activityPOST /meetingsto book a meeting, andPOST /prospects/<prospectId>to move the stagePOST /hiresto record the hire
Send an X-Idempotency-Key on every write so a retry after a network error does not create a second record.

