Download OpenAPI specification:
Resume Match data schemas — a supplementary specification for goal_mode_openapi.yaml.
Resume Match is a Goal Mode workflow that takes a resume document and produces a scored, verified list of matching job openings. It reuses the same Goal Mode endpoints (POST /jobs/goal, PATCH /slots, POST /confirm, GET /status, GET /download, SSE events) defined in the base Goal Mode contract.
This spec documents only the Resume Match-specific data shapes:
resume_to_job_list): Parse → Extract Profile → Search → Normalize → Dedupe → flat job listresume_to_job_suggestions): SKU 1 + Batch URL Verify + LLM Fit Scoring → ranked, verified job listmulti_source_aggregation): Jooble + ATS providers (Greenhouse, Lever, Workable) with source-priority dedupThe goal_lane.resume_to_job_ready workflow combines all 4 SKUs into a single
3-phase interactive experience with mid-execution checkpoints:
profile_review checkpoint (user confirms titles/skills)job_selection checkpoint (user selects target jobs)POST /jobs/goal with workflowId: "goal_lane.resume_to_job_suggestions" + fileIdsPATCH /jobs/goal/{jobSpecId}/slots — fill optional preferencesPOST /jobs/goal/{jobSpecId}/confirm — triggers 7-step DAGGET /jobs/goal/{jobSpecId}/status or SSE — poll progressGET /jobs/goal/{jobSpecId}/download — download result JSONResume Match workflow schemas and examples.
All endpoints are defined in the base Goal Mode contract (goal_mode_openapi.yaml).
Create a Resume Match job using the base Goal Mode endpoint.
Provide workflowId: "goal_lane.resume_to_job_suggestions" to bypass NLP and
route directly to the Resume Match pipeline.
Input requirements:
| goalText | string [ 3 .. 2000 ] characters Natural language goal description. Required when workflowId is not provided. |
| workflowId | string or null Explicit workflow ID from the catalog.
When provided, bypasses NLP resolution and routes directly to the workflow.
Mutually exclusive with |
| userWorkflowId | string or null^uw_[a-zA-Z0-9_-]+$ User-authored workflow ID (from the User Workflows Builder). When provided, the server loads the UserWorkflow, compiles it to a DestinationSpec, and runs it through the same Goal Lane agent. Contract guarantees (enforced by the compiler, not this endpoint):
Mutually exclusive with |
| fileIds | Array of strings Default: [] List of uploaded file IDs to process. Required (minItems: 1) when workflowId is not provided. May be empty for workflow-based jobs that collect files via checkpoints. |
{- "workflowId": "goal_lane.resume_to_job_suggestions",
- "fileIds": [
- "file_resume_abc123"
]
}{- "jobSpecId": "goal_rm_abc123",
- "itemVersion": 1,
- "goalText": "Find matching jobs for my resume",
- "fileIds": [
- "file_resume_abc123"
], - "status": "slots_pending",
- "progress": 0,
- "resolvedDestinations": [
- {
- "destinationId": "goal_lane.resume_to_job_suggestions",
- "confidence": 1,
- "matchReason": "Matched workflowId: goal_lane.resume_to_job_suggestions"
}
], - "pendingSlots": [
- {
- "slotId": "targetCountry",
- "slotType": "choice",
- "question": "Which job market?",
- "options": [
- "US",
- "Taiwan",
- "Japan",
- "South Korea",
- "All"
], - "default": "All",
- "required": false
}, - {
- "slotId": "locationPreference",
- "slotType": "text",
- "question": "Preferred work location? (city or region)",
- "required": false
}, - {
- "slotId": "remotePreference",
- "slotType": "choice",
- "question": "Remote preference?",
- "options": [
- "Remote only",
- "Hybrid",
- "On-site",
- "Any"
], - "default": "Any",
- "required": false
}, - {
- "slotId": "seniorityLevel",
- "slotType": "choice",
- "question": "Seniority level?",
- "options": [
- "Junior",
- "Mid-level",
- "Senior",
- "Lead/Staff",
- "Any"
], - "default": "Any",
- "required": false
}
], - "filledSlots": { },
- "preflightResult": {
- "passed": true,
- "errors": [ ],
- "warnings": [ ]
}, - "tasks": [ ],
- "createdAt": "2026-02-09T10:00:00Z",
- "updatedAt": "2026-02-09T10:00:00Z"
}Fill optional preference slots for the Resume Match job.
All 4 slots are optional. Skipping them uses defaults (country=All, remote=Any, seniority=Any, no location filter). Users can fill any subset.
| jobSpecId required | string Example: goal_abc123 Goal job specification ID |
required | Array of objects (SlotAnswer) non-empty List of slot answers |
| expectedVersion | integer or null Expected item version for optimistic locking |
{- "answers": [
- {
- "slotId": "targetCountry",
- "value": "US"
}, - {
- "slotId": "remotePreference",
- "value": "Remote only"
}
], - "expectedVersion": 1
}{- "jobSpecId": "goal_rm_abc123",
- "itemVersion": 2,
- "goalText": "Find matching jobs for my resume",
- "fileIds": [
- "file_resume_abc123"
], - "status": "ready",
- "progress": 0,
- "pendingSlots": [ ],
- "filledSlots": {
- "targetCountry": "US",
- "remotePreference": "Remote only"
}, - "createdAt": "2026-02-09T10:00:00Z",
- "updatedAt": "2026-02-09T10:00:05Z"
}Confirm the Resume Match job and start the 7-step DAG pipeline.
Returns 202 Accepted. The pipeline runs asynchronously through:
Use polling or SSE to track progress across the 7 steps.
| jobSpecId required | string Example: goal_abc123 Goal job specification ID |
| expectedVersion | integer or null Expected item version for optimistic locking |
{- "expectedVersion": 5
}{- "jobSpecId": "goal_rm_abc123",
- "status": "queued",
- "messageId": "msg_rm_5f6e7d8c",
- "submittedAt": "2026-02-09T10:00:10Z",
- "pollingUrl": "/api/v1/jobs/goal/goal_rm_abc123/status",
- "tasks": [
- {
- "taskId": "task_rm_001",
- "destinationId": "goal_lane.resume_to_job_suggestions",
- "status": "pending",
- "progress": 0,
- "specVersion": "1.0.0",
- "dag": [
- {
- "stepId": "mcp_resume_parse_document",
- "stepOrder": 1,
- "stepType": "mcp_resume_parse_document",
- "status": "pending",
- "progress": 0
}, - {
- "stepId": "mcp_resume_extract_profile",
- "stepOrder": 2,
- "stepType": "mcp_resume_extract_profile",
- "status": "pending",
- "progress": 0
}, - {
- "stepId": "mcp_jobs_search",
- "stepOrder": 3,
- "stepType": "mcp_jobs_search",
- "status": "pending",
- "progress": 0
}, - {
- "stepId": "mcp_jobs_normalize_posting",
- "stepOrder": 4,
- "stepType": "mcp_jobs_normalize_posting",
- "status": "pending",
- "progress": 0
}, - {
- "stepId": "mcp_jobs_dedupe",
- "stepOrder": 5,
- "stepType": "mcp_jobs_dedupe",
- "status": "pending",
- "progress": 0
}, - {
- "stepId": "mcp_jobs_batch_verify",
- "stepOrder": 6,
- "stepType": "mcp_jobs_batch_verify",
- "status": "pending",
- "progress": 0
}, - {
- "stepId": "mcp_resume_score_fit",
- "stepOrder": 7,
- "stepType": "mcp_resume_score_fit",
- "status": "pending",
- "progress": 0
}
]
}
]
}Download the completed Resume Match results.
The result artifact is a JSON file containing a JobListResult object
with scored, verified, and deduplicated job matches.
The artifact mimeType is application/json.
| jobSpecId required | string Example: goal_abc123 Goal job specification ID |
{- "fileName": "resume_match_result.json",
- "sizeBytes": 45230,
- "mimeType": "application/json",
- "expiresAt": "2026-02-09T11:00:00Z"
}