Agent workflow surface
Let copilots and internal agents call role-plan, target-map, interview-loop, and calibration tools directly while preserving the same hiring bar.
developer docs
Use MCP to AGI-pill your hiring workflow with tool-calling agents. Use the REST API when you are building apps, dashboards, ATS handoffs, or internal integrations on top of the same hiring intelligence.
Let copilots and internal agents call role-plan, target-map, interview-loop, and calibration tools directly while preserving the same hiring bar.
Use bearer-token JSON endpoints for product UIs, ATS workflows, data syncs, dashboards, and automations that need normal HTTP contracts.
The MCP contract is exposed at https://hireburst.com/api/mcp. Remote clients should treat it as an OAuth-protected MCP 2.1 resource. Server-side MCP clients can mirror the same tool calls at https://hireburst.com/api/mcp/bearer with a bearer token.
{
"jsonrpc": "2.0",
"id": "hb-init-01",
"method": "initialize",
"params": {
"protocolVersion": "2.1",
"clientInfo": {
"name": "your-agent",
"version": "1.0.0"
}
}
}
The MCP surface exposes the same product capabilities as REST, but as callable tools for agent runtimes that need to reason, call, observe, and adapt inside a workflow.
Use MCP when an agent should decide the next hiring move, call hireburst tools, and feed the output into another agent or human review step.
{
"jsonrpc": "2.0",
"id": "hb-call-42",
"method": "tools/call",
"params": {
"name": "hireburst.role_plan.create",
"arguments": {
"company": "BlockHome AI",
"role": "Account Manager",
"team_size": 34,
"growth_goal": "scale customer organization before enterprise expansion",
"must_have_signals": [
"real estate workflow fluency",
"adoption-risk saves",
"expansion judgment",
"product feedback synthesis"
]
}
}
}
The MCP endpoint currently fails closed. Expect 401 Unauthorized, a WWW-Authenticate header, and a JSON-RPC error payload.
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="hireburst-mcp",
error="invalid_token",
resource_metadata="https://hireburst.com/.well-known/oauth-protected-resource/api/mcp"
{
"jsonrpc": "2.0",
"id": "hb-call-42",
"error": {
"code": -32001,
"message": "Authorization failed",
"data": {
"mcp_version": "2.1",
"authorization": "oauth"
}
}
}
Use REST when you are building a product integration: ATS syncs, internal recruiting dashboards, custom approval flows, BI pipelines, or an app that needs normal HTTP resources. REST uses bearer API keys generated at hireburst.com/manage/api-keys.
{
"surface": "rest",
"same_capabilities_as": "mcp",
"resources": [
"role_plan",
"target_map",
"interview_loop",
"calibration_update"
]
}
REST requests use bearer API keys and do not use MCP envelopes, JSON-RPC IDs, or MCP method names. Missing, expired, or incorrect tokens receive 401 as invalid API tokens.
POST /api/role_plan/ HTTP/1.1
Host: hireburst.com
Authorization: Bearer hb_live_...
Content-Type: application/json
The REST API is resource-oriented. Create a plan, retrieve it later, list submitted requests with cursor pagination, and generate the supporting target map, interview loop, and calibration update as separate artifacts.
Role plans are the main hiring artifact. They define the target thesis, must-have signals, interview loop, scorecard anchors, and the learning state that later calibration updates preserve.
/api/role_plan/
Create a role plan from the hiring context your app collected.
companystringyesCompany or business unit hiring the role.rolestringyesRole title, such as Account Manager.team_sizeintegeryesCurrent employee count or target team size context.growth_goalstringyesThe business outcome the hire must unlock.must_have_signalsstring[]yesEvidence signals that should drive targeting and interview scoring.marketstringnoIndustry or buyer context for role-specific calibration.constraintsobjectnoLocation, seniority, domain, compensation, or exclusion constraints.external_idstringnoYour ATS, CRM, or internal requisition identifier.callback_urlstringnoHTTPS webhook to notify when the generated plan is ready.{
"object": "role_plan",
"id": "rp_01jz9d4v8k",
"status": "ready",
"created_at": "2026-07-07T19:20:00Z",
"company": "BlockHome AI",
"role": "Account Manager",
"target_map_id": "tm_01jz9d7a2r",
"interview_loop_id": "il_01jz9d9b4p",
"plan": {
"target_thesis": "string",
"must_have_signals": ["string"],
"scorecard_anchors": [
{
"name": "string",
"evidence": "string",
"weight": 0.25
}
],
"calibration_state": {
"consistency_lock": "string",
"last_updated_at": "2026-07-07T19:20:00Z"
}
}
}
/api/role_plan/:id
Retrieve a generated role plan and optionally expand its related artifacts.
idstringyesRole plan id beginning with rp_.includestring[]noComma-separated expansions: target_map, interview_loop, calibration_updates.{
"object": "role_plan",
"id": "rp_01jz9d4v8k",
"status": "ready",
"company": "BlockHome AI",
"role": "Account Manager",
"target_map": {
"object": "target_map",
"id": "tm_01jz9d7a2r"
},
"interview_loop": {
"object": "interview_loop",
"id": "il_01jz9d9b4p"
},
"latest_calibration_update_id": "cu_01jz9ef8wq"
}
Submission lists use cursors instead of page numbers so integrations can resume safely as new hiring requests arrive.
/api/role_plan/submissions
List submitted role-plan requests for dashboards, intake queues, and sync jobs.
limitintegernoNumber of results, from 1 to 100. Default 25.cursorstringnoOpaque cursor returned in the previous page.statusenumnosubmitted, processing, ready, or archived.created_afterdatetimenoISO 8601 lower bound for submitted requests.created_beforedatetimenoISO 8601 upper bound for submitted requests.GET /api/role_plan/submissions?limit=25&cursor=sub_01jz9a9c3z&status=submitted HTTP/1.1
Host: hireburst.com
Authorization: Bearer hb_live_...
{
"object": "list",
"data": [
{
"id": "rps_01jz9b2d4a",
"role": "Account Manager",
"company": "BlockHome AI",
"status": "submitted",
"created_at": "2026-07-07T18:40:00Z"
}
],
"pagination": {
"next_cursor": "sub_01jz9c8nr4",
"has_more": true,
"limit": 25
}
}
Target maps translate the role plan into candidate archetypes, adjacent markets, source channels, exclusion rules, and outreach priorities.
/api/target_map/
Create or refresh a target map for an existing role plan.
role_plan_idstringyesRole plan id beginning with rp_.regionsstring[]noAllowed talent markets, time zones, or countries.channelsstring[]noPreferred sourcing channels such as referrals, LinkedIn, ATS, or communities.excluded_companiesstring[]noCompanies or categories to avoid.archetype_countintegernoTarget number of archetypes. Default 4.{
"object": "target_map",
"id": "tm_01jz9d7a2r",
"role_plan_id": "rp_01jz9d4v8k",
"archetypes": [
{
"name": "Expansion-minded real estate AM",
"signals": ["string"],
"source_markets": ["string"],
"avoid_signals": ["string"]
}
],
"channels": [
{
"name": "LinkedIn outbound",
"priority": 1,
"message_angle": "string"
}
],
"assumptions": ["string"]
}
/api/target_map/:id
Retrieve a target map and its source assumptions.
idstringyesTarget map id beginning with tm_.includestring[]noComma-separated expansions: role_plan, outreach.{
"object": "target_map",
"id": "tm_01jz9d7a2r",
"role_plan_id": "rp_01jz9d4v8k",
"status": "ready",
"archetypes": [
{
"name": "string",
"signals": ["string"]
}
],
"updated_at": "2026-07-07T19:24:00Z"
}
Interview loops turn the role plan and target map into rounds, evidence prompts, scorecard anchors, interviewer guidance, and debrief structure.
/api/interview_loop/
Create an interview loop tied to a role plan.
role_plan_idstringyesRole plan id beginning with rp_.target_map_idstringnoTarget map id to shape interview evidence prompts.round_countintegernoRequested number of rounds. Default 4.competenciesstring[]noCompetencies to emphasize or preserve.debrief_modeenumnoasync, live, or panel.{
"object": "interview_loop",
"id": "il_01jz9d9b4p",
"role_plan_id": "rp_01jz9d4v8k",
"rounds": [
{
"name": "Customer expansion judgment",
"duration_minutes": 45,
"purpose": "string",
"questions": ["string"],
"scorecard_anchors": ["string"]
}
],
"debrief": {
"mode": "async",
"decision_rules": ["string"]
}
}
/api/interview_loop/:id
Retrieve an interview loop and its round-by-round scorecard.
idstringyesInterview loop id beginning with il_.includestring[]noComma-separated expansions: role_plan, target_map.{
"object": "interview_loop",
"id": "il_01jz9d9b4p",
"role_plan_id": "rp_01jz9d4v8k",
"status": "ready",
"rounds": [
{
"name": "string",
"questions": ["string"]
}
],
"updated_at": "2026-07-07T19:26:00Z"
}
Calibration updates let hireburst adjust targeting and interviewing after each interview while preserving the same bar across candidates and interviewers.
/api/calibration_update/
Submit interview evidence and receive the next hiring-system adjustment.
role_plan_idstringyesRole plan id beginning with rp_.interview_loop_idstringyesInterview loop id beginning with il_.interview_evidenceobject[]yesRound, signal, evidence, score, and interviewer notes from a completed interview.candidate_profileobjectnoCandidate source, archetype, seniority, or anonymized background context.outcomeenumnoadvance, hold, reject, or hire.{
"object": "calibration_update",
"id": "cu_01jz9ef8wq",
"role_plan_id": "rp_01jz9d4v8k",
"interview_loop_id": "il_01jz9d9b4p",
"recommended_changes": {
"targeting": ["string"],
"questions": ["string"],
"scorecard": ["string"],
"consistency_lock": "do_not_lower_bar"
},
"next_actions": [
{
"owner": "recruiting",
"action": "string"
}
]
}
/api/calibration_update/:id
Retrieve a calibration update and the evidence summary it used.
idstringyesCalibration update id beginning with cu_.includestring[]noComma-separated expansions: evidence, role_plan, interview_loop.{
"object": "calibration_update",
"id": "cu_01jz9ef8wq",
"role_plan_id": "rp_01jz9d4v8k",
"interview_loop_id": "il_01jz9d9b4p",
"evidence_summary": "string",
"recommended_changes": {
"targeting": ["string"],
"questions": ["string"],
"scorecard": ["string"]
},
"created_at": "2026-07-07T19:30:00Z"
}
These object shapes repeat across endpoint responses so client libraries can share models across REST and MCP tool results.
id: string, status: enum, company: string, role: string, plan: object, target_map_id?: string, interview_loop_id?: string.
id: string, role_plan_id: string, archetypes: object[], channels: object[], assumptions: string[].
id: string, role_plan_id: string, rounds: object[], debrief: object, created_at: datetime.
id: string, role_plan_id: string, interview_loop_id: string, recommended_changes: object, next_actions: object[].
The REST endpoints also fail closed. They return normal JSON errors instead of JSON-RPC envelopes.
{
"error": {
"type": "authorization_error",
"code": "invalid_token",
"message": "Invalid API token."
}
}