# Resurface: resume scoring API with quoted evidence > Resurface is a resume scoring API. Send a job description and a resume file (PDF, DOCX, HTML or TXT) and get back a 0–100 score, a verdict for every screening question, and the exact resume line that proves each answer. An LLM writes 6–8 screening questions once per job; a classification model (TypeSafe Jev) answers them for every resume and selects the evidence line, so every quote is copied from the resume. The first 50 scores are free; after that, prepaid packs start at $10 for 100 scores. ## Key facts - Resurface scores a resume against a job description and returns a 0–100 score with a verdict (SUPPORTED, CONTRADICTED or INSUFFICIENT_EVIDENCE) and an evidence line for every screening question. - Evidence is selected, not generated: the classifier picks a resume line id (L000, L001, …) and the API returns that line verbatim. - Screening questions are drafted once per job description by an LLM (6–8 atomic questions) and cached as a reusable rubric. - Model-agnostic: TypeSafe Jev answers by default and Cloudflare Clef-flash takes over automatically if Jev is unavailable. Every decision model must pass the resume eval (verdict agreement with Claude Sonnet 5.5, evidence-line agreement, consistency) before it serves scores, and each response includes the model that answered. - Years-of-experience requirements are computed from the dated roles that count toward the named field, with overlapping periods merged. - In a benchmark of 20 resumes × 5 questions against Claude Sonnet 5.5, the classifier was about 8× faster (0.29 s vs 2.5 s per resume) and gave the same verdict on 99% of questions. - Supported resume formats: PDF (including two-column and mixed-direction layouts), DOCX, HTML and TXT, up to 5 MB. Legacy .doc and scanned images without a text layer are not supported. - Pricing: 50 free scores per account, then prepaid score packs: 100 scores for $10, 500 for $40, 2,500 for $150. Drafting questions from a job description is not charged. - Privacy: resume files are read in memory and not stored; Resurface keeps a hash of the resume and the scoring result, including the quoted evidence lines. - AI agents can use Resurface through its MCP server at https://getresurface.dev/api/mcp (Streamable HTTP), with the tools score_resume, draft_screening_questions and get_usage. Clients sign in with a Resurface account through OAuth (Clerk), or send an API key as a bearer token. The Resurface plugin in Claude's plugin directory installs the MCP server with two skills. ## FAQ ### What is Resurface? Resurface is a resume scoring API. Send a job description and a resume file (PDF, DOCX, HTML or TXT) and get back a 0–100 score, a verdict for every screening question, and the exact resume line that proves each answer. An LLM writes 6–8 screening questions once per job; a classification model (TypeSafe Jev) answers them for every resume and selects the evidence line, so every quote is copied from the resume. The first 50 scores are free; after that, prepaid packs start at $10 for 100 scores. ### Is Resurface a resume builder? No. Resurface is a B2B screening API for employers, staffing agencies and recruiting software (ATS vendors). It reads resumes that candidates have already sent to an employer and scores them against a job; it does not create, write or edit resumes, and it is not sold to job seekers. ### What is a resume scoring API? A resume scoring API takes a job description and a resume and returns a structured judgment of fit that your software can store and display. Resurface returns a 0–100 score plus a verdict for every screening question (SUPPORTED, INSUFFICIENT_EVIDENCE or CONTRADICTED), each with a calibrated probability and the resume line that backs it. ### What is the difference between a resume parser and a resume scoring API? A resume parser extracts fields such as names, titles, dates and skills, and leaves the decision about fit to your code. A resume scoring API makes that decision: Resurface checks the resume against screening questions drafted from the job description and returns a score, a verdict per question and the line that proves each answer. ### How is a classification model different from an LLM for resume screening? A classification model answers each screening question by choosing from fixed options (supported, contradicted, insufficient evidence) and by selecting a resume line as evidence, with a calibrated probability. An LLM writes free text, which is slower, more expensive per resume and can invent quotes. Resurface uses an LLM only to write the questions once per job, and the classifier for every resume. ### Which AI models does Resurface use? Resurface is model-agnostic. An LLM (Claude) drafts the screening questions once per job. TypeSafe Jev answers them for every resume, and Cloudflare Clef-flash takes over automatically if Jev is unavailable. A decision model serves scores only after it passes our resume eval: on 3 Oct 2026, Clef-flash and Clef matched Claude Sonnet 5.5 on 100% and 99% of verdicts. Every response names the model that answered. ### How do I add resume screening to an ATS or HR product? Create an API key, then send each resume with the job description to POST /api/v1/score from your backend. The first call drafts the screening questions and returns a rubric.id; send it as rubric_id for the other resumes of that job, so scores stay comparable and each call takes about 0.25 s. Show the score next to the quoted evidence lines so recruiters can check them. ### Should a resume score be the only reason to reject a candidate? No. Use the score to rank and route resumes, and keep a person in the decision. INSUFFICIENT_EVIDENCE means the resume does not say, which is different from failing a requirement, and every response lists must-have gaps separately. Each verdict has a calibrated probability, so low-confidence answers can go to human review automatically. ### How much does it cost? Each account gets 50 free scores. After that you buy prepaid packs: 100 scores for $10, 500 for $40 or 2,500 for $150, with no subscription. Drafting screening questions from a job description is free. ### Which ATS systems does Resurface integrate with? Today Resurface is an HTTP API that any ATS or recruiting tool can call. Native integrations with Greenhouse, Ashby and JobAdder are planned. ### Can I use Resurface from Claude or another AI agent? Yes. Resurface is in Claude's plugin directory: in Claude, open Customize, then Plugins, and search for Resurface. In Claude Code you can also install it with /plugin marketplace add dolevhayut/resurface and /plugin install resurface@resurface. You sign in with your Resurface account once, and it adds the MCP tools score_resume, draft_screening_questions and get_usage, plus skills for screening candidates and for building the API into your product. Other MCP clients connect to https://getresurface.dev/api/mcp with the same sign-in, or with an API key as a bearer token. # Trust, data and responsible use ## Data handling (https://getresurface.dev/trust) - Resume files and their full text are processed in memory and never stored. Resurface keeps the score, a verdict per question, the quoted evidence lines and a one-way SHA-256 hash of the resume. - The application runs on Vercel in US East and the database on Neon in AWS us-east-1, encrypted at rest (AES-256). - Resume text goes to one scoring model (TypeSafe Jev, under zero data retention: deleted as soon as it answers) with one fallback (Cloudflare Workers AI, Clef-flash). Anthropic's Claude drafts screening questions from job descriptions and never receives resumes. No provider trains models on the data. - API keys are stored only as SHA-256 hashes. MCP clients sign in with OAuth and PKCE through Clerk. - Resurface is not SOC 2 or ISO 27001 certified yet. - Data Processing Addendum: https://getresurface.dev/dpa. Subprocessors: https://getresurface.dev/subprocessors. ## Using Resurface in hiring (https://getresurface.dev/responsible-ai) - Resurface answers screening questions about a resume and quotes the line behind each answer. A person makes every decision; it never rejects, shortlists or ranks candidates. - It does not look at photos or infer age, gender, ethnicity or other protected traits. INSUFFICIENT_EVIDENCE means the resume doesn't say, not that the candidate fails. - Employers remain responsible for hiring and AI laws where they and their candidates are, such as candidate notices and bias audits (for example New York City Local Law 144). - Organisations that can't use the cloud can run the open-source version on their own infrastructure: https://github.com/dolevhayut/resurface. ## Benchmarks (https://getresurface.dev/benchmarks) - Resurface is powered by TypeSafe Jev. Measured against general LLMs on 20 fictional resumes × 5 screening questions: Claude Sonnet 5.5 takes a median 2.5 s per resume and Claude Haiku 4.5 1.7 s (model only); the Resurface API takes a median 628 ms end to end in production, including file parsing, sign-in, billing and storage. - Resurface gives the same verdict as Claude Sonnet 5.5 on 99% of answers (Claude Haiku 4.5: 93%), with 100% run-to-run consistency. # Resurface API reference Base URL: https://getresurface.dev/api/v1 · OpenAPI: https://getresurface.dev/api/v1/openapi.json · Human docs: https://getresurface.dev/docs ## Authentication Send your API key as `Authorization: Bearer rs_live_…`. Create keys in the dashboard (https://getresurface.dev/dashboard) after signing up (https://getresurface.dev/sign-up). Keys are shown once and stored only as a hash. ## POST /v1/score Score one resume against a job. Accepts `multipart/form-data` (for files) or JSON. | Field | Type | Description | |---|---|---| | resume | file | PDF, DOCX, HTML or TXT, up to 5 MB (multipart). Or send resume_text. | | resume_text | string | Plain-text resume, instead of a file. | | job_description | string | Full job description (at least 40 characters). Questions are drafted and cached. | | job_title | string | Optional; improves question drafting. | | rubric_id | string | Reuse the questions of a previous score or of POST /v1/rubrics. | | questions | array | Bring your own questions: strings, or objects { question, requirement: "must" or "nice", weight, min_years }. Max 12. | Optional header `Idempotency-Key`: a unique value per resume. Repeating a request with the same key within 24 hours returns the original result (with `Idempotent-Replayed: true`) instead of scoring and charging again. Example: ```bash curl https://getresurface.dev/api/v1/score \ -H "Authorization: Bearer " \ -F job_title="Senior Full Stack Engineer" \ -F "job_description=