Portfolio Supported AIs Solutions Tasks Email Archive Bring Your Own Code Integrations Pricing

Get Started

ChatGPT

ChatGPT

Start directly →

Ready
Claude

Claude

Directory Connector →

Ready
Mistral

Mistral

Directory Connector →

Ready

Dashboard Always available
Documents

Documents

⚡ Built-in — Platform Built-in

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.

⚡ Built-in — No Setup Required This integration is built into the WebsitePublisher platform. All endpoints are available immediately — no API key needed.

Endpoints (13)

POST ingest

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.
POST status

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).
POST my-candidates

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.
POST decide

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.
POST retract

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.
POST search-skills

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).
POST add-skill

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.
POST my-skills

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).
POST configure

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).
POST extraction

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.
POST tools-status

Which extraction programs are installed on the serving node, with versions and OCR languages. Diagnostics after an install or deploy.

No input parameters required.

POST candidates

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.
POST regenerate

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:

EndpointMCP 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
← Back to all integrations