Documents
Extract text from uploaded documents (CVs, certificates): PDF with per-page OCR fallback, DOCX, plain text and images. Text extraction runs on our own servers. If the project owner turns on the AI review (off by default), the resume text, with name and contact details removed, is sent with the skill candidates to the project's own model provider account, and the candidates come back marked keep or drop; with the review off, no document is sent to a third party. Members ingest their own gated-files upload, read back only their own result, confirm or reject the skill candidates found in it, retract skills they confirmed earlier, add skills from O*NET that their resume did not show, and read back their own effective skill profile.
Endpoints (13)
Queue text extraction for your own member upload. Requires a verified tenant_auth session (wst_ Bearer). The file must be a gated-files member upload by you, in your tenant. Idempotent: offering the same file again returns the same extraction. Returns { extraction_id, status, record_id, existing }.
| Field | Type | Required | Description |
|---|---|---|---|
file_id |
integer | ✓ Yes | file_id from gated-files/put-upload. |
Status and result of one of your own extractions. Requires a verified tenant_auth session. Returns status (queued | extracting | ok | partial | failed), method, quality, errors, notes and per-page metadata; the text only with include_text=true.
| Field | Type | Required | Description |
|---|---|---|---|
extraction_id |
integer | ✓ Yes | extraction_id from ingest. |
include_text |
boolean | No | Include the extracted text (default false). |
Skill candidates from one of your own extractions, for review. Requires a verified tenant_auth session. Returns candidates_status (queued | running | ok | failed; null before the first run) and the candidates: occupations, software and skills, each grounded in O*NET with the CV lines as evidence. Default filter: pending. After a new candidate run, undecided candidates get new candidate_ids — fetch the list again before deciding. If the project has the AI review on, the list also carries ai_status (queued | running | ok | skipped | failed; null when off) and a candidate can carry extra.ai { v, verdict: keep | drop, reason, quote }: a marking with a quote from your own resume, not a decision — you decide.
| Field | Type | Required | Description |
|---|---|---|---|
extraction_id |
integer | ✓ Yes | extraction_id from ingest. |
status |
string | No | Filter: pending (default) | confirmed | rejected | retracted | all. |
Confirm or reject skill candidates from one of your own extractions. Requires a verified tenant_auth session and skill confirmation enabled for the project. A confirmed candidate becomes a record in the configured skill entity under your identity, with its computation trace; a rejected candidate stays out of your profile. A decision is final: deciding again returns skipped, an unknown or outdated candidate_id returns not_found. Returns { extraction_id, results, counts }.
| Field | Type | Required | Description |
|---|---|---|---|
extraction_id |
integer | ✓ Yes | extraction_id from ingest. |
decisions |
array | ✓ Yes | List of { candidate_id, decision: confirm | reject }; at most 200, each candidate_id once. |
Retract skills you confirmed earlier. Requires a verified tenant_auth session and skill review enabled for the project. The skill record itself is kept with its computation trace; a retract event is added under your identity and the skill no longer counts in your profile. A skill that is not yours or does not exist returns not_found; a skill you already retracted returns skipped. Returns { results, counts }.
| Field | Type | Required | Description |
|---|---|---|---|
retractions |
array | ✓ Yes | List of { resume_skill_id, reason? }; at most 200, each resume_skill_id once. reason is optional free text, at most 255 bytes. |
Search O*NET for skills, software or occupations to add to your own profile. Requires a verified tenant_auth session and skill review enabled for the project. Returns up to 10 options per kind, each { kind, ref_id, label, category, match_type, match_score }, plus the O*NET release and the attribution that must be shown with the results. A search that finds nothing is counted anonymously, without any link to you, as a signal for improving the matching.
| Field | Type | Required | Description |
|---|---|---|---|
query |
string | ✓ Yes | Search term, 2 to 100 characters. |
kind |
string | No | skill | software | occupation | all (default all). |
Add skills, software or occupations your resume did not show, chosen from search-skills. Requires a verified tenant_auth session and skill review enabled for the project. Only O*NET references are accepted: the server looks each one up again and stores the O*NET label, never text from the request. Stored under your identity, marked as added by you (match_type member_added). A reference you already have in your profile returns skipped; an unknown reference returns invalid_ref. Returns { results, counts }.
| Field | Type | Required | Description |
|---|---|---|---|
items |
array | ✓ Yes | List of { kind: skill | software | occupation, ref_id } as returned by search-skills; at most 50, each combination once. |
Your own effective skill profile: the skills you confirmed from your resume and the ones you added yourself, without the skills you retracted. Requires a verified tenant_auth session and skill confirmation enabled for the project. Each skill comes with { resume_skill_id, kind, label, category, ref_id, source: resume | added, evidence, stored_at }; evidence holds the resume lines it came from. With include_trace=true each skill also carries its computation trace (match type and score, method version, O*NET release, candidate, extraction and resume record). Returns { skills, total, counts, retracted_count, truncated, include_trace, release, attribution }; the attribution must be shown with the results.
| Field | Type | Required | Description |
|---|---|---|---|
include_trace |
boolean | No | Include the computation trace per skill (default false). |
Project settings. ingest_enabled switches member ingest on (default off). record_entity names the MAPI entity for the per-upload anchor record; it must have the fields gated_file_id, extraction_id and original_filename, an owner_field and create: { verified: self }. skill_entity names the MAPI entity for confirmed candidates; it must have the trace fields item_kind, onet_ref, onet_category, match_type, match_score, evidence, candidate_id, extraction_id, method_version and onet_release, an owner_field and create: { verified: self }. skill_field_map maps anchor_record_id, label and rank to field names of that entity. skill_event_entity names the MAPI entity for append-only skill events (retract); it must have the fields resume_skill_id, action, reason, candidate_id and extraction_id, an owner_field, create: { verified: self }, list: { verified: own } and no member update. All checked on save. Send an empty record_entity to switch the anchor record off, an empty skill_entity to switch confirmation off, an empty skill_event_entity to switch retract off. ai_enabled switches the AI review of skill candidates on (default off): after each candidate run the resume text, with name and contact details removed, goes with the candidates to the project's own openai integration (vault key), and each pending candidate gets a keep or drop marking in extra.ai. ai_model picks the model (default gpt-5.4-mini); ai_daily_cap limits model calls per project per day (default 100). Needs the AI database columns; without them these keys return 409. The response carries ai { available, enabled, model, daily_cap, effective }.
| Field | Type | Required | Description |
|---|---|---|---|
ingest_enabled |
boolean | No | Allow members to ingest uploads (default false). |
record_entity |
string | No | MAPI entity for the anchor record, or empty for none. |
skill_entity |
string | No | MAPI entity for confirmed candidates, or empty to switch confirmation off. |
skill_field_map |
object | No | Field names in skill_entity: { anchor_record_id, label, rank }. |
skill_event_entity |
string | No | MAPI entity for append-only skill events (retract), or empty to switch retract off. |
ai_enabled |
boolean | No | AI review of skill candidates on the project's own model account (default false). |
ai_model |
string | No | Model for the AI review, or empty for the default (gpt-5.4-mini). |
ai_daily_cap |
integer | No | Model calls per project per day, 0 to 10000, or null for the default (100). |
Full extraction for the owner: status, text, per-page text and methods, quality, engines, errors and notes. For review and for the skill-extraction step. Also the candidate run (candidates_*) and the AI review: ai_status, ai_method, ai_at and ai_trace (model, versions, tokens, duration, counts; no resume text).
| Field | Type | Required | Description |
|---|---|---|---|
extraction_id |
integer | ✓ Yes | Extraction ID. |
Which extraction programs are installed on the serving node, with versions and OCR languages. Diagnostics after an install or deploy.
No input parameters required.
Skill candidates found in one extraction: occupations (from job titles), software and skills, each grounded in the occupations reference, with the CV lines as evidence, the method version and the O*NET release. Candidates are not profile data until the member confirms them. With the AI review on: ai_status per extraction and extra.ai per candidate, as in my-candidates.
| Field | Type | Required | Description |
|---|---|---|---|
extraction_id |
integer | ✓ Yes | Extraction ID. |
status |
string | No | Filter: pending | confirmed | rejected | retracted. Default all. |
Queue a new candidate run for an extraction, for example after the method improved. Candidates the member already confirmed or rejected stay as they are. With the AI review on, the new candidates are reviewed again (one model call).
| Field | Type | Required | Description |
|---|---|---|---|
extraction_id |
integer | ✓ Yes | Extraction ID. |
MCP Tool Names
When using this integration through an AI assistant (Claude, ChatGPT, Cursor, etc.), the endpoints are available as MCP tools:
| Endpoint | MCP Tool Name |
|---|---|
| ingest | documents_ingest |
| status | documents_status |
| my-candidates | documents_my_candidates |
| decide | documents_decide |
| retract | documents_retract |
| search-skills | documents_search_skills |
| add-skill | documents_add_skill |
| my-skills | documents_my_skills |
| configure | documents_configure |
| extraction | documents_extraction |
| tools-status | documents_tools_status |
| candidates | documents_candidates |
| regenerate | documents_regenerate |
Website