Resume Parsing API · Healthcare-grade
The resume parser that knows what an RN licence is.
One call turns any PDF, DOCX, or scan into schema-validated JSON — licence numbers, post-nominal credentials, canonical specialties, and travel work histories where the agency never swallows the facility. Confidence-scored, so your team only reviews what needs eyes.
curl -F "file=@resume.pdf" — that's the integration.
{ "full_name": "Maria Delgado", "credentials": ["RN", "BSN", "CCRN"], "licenses": [{ "type": "RN", "state": "TX", "number": "885201", "is_compact": true }], "experience": [{ "company": "St. David’s Medical Center", "agency_name": "Aya Healthcare", "profession": "RN", "specialties": ["Intensive Care Unit"] }], "certifications": [{ "name": "ACLS" }, { "name": "BLS", "expiry_date": "12/2026" }], "professional_associations": ["AACN Member"], "confidence": { "overall": 0.93 }}- input formats, scans included
- 6input formats, scans included
- structured output fields
- 40+structured output fields
- OCR with Textract fallback
- 2-stageOCR with Textract fallback
- per resume, scans included
- ≤ 2 minper resume, scans included
- documents retained after parsing
- 0documents retained after parsing
01Built for healthcare staffing
Generic parsers see text. This one sees a clinician.
Nurses and allied health professionals carry structure most parsers destroy — licences with numbers, credential strings after names, travel assignments nested under agencies. Blue-IQ extracts each into its own field.
Real practice licences
Number verbatim with letter prefix, state as written, compact/multistate flag, status — never mislabelled as a certification.
licenses[]Post-nominals, preserved
“Jane Smith, RN, BSN, CCRN” → name cleanly split from every credential, in order, exactly as written.
personal_info.credentials[]Travel histories, untangled
One entry per facility under an agency umbrella. The staffing agency lands in agency_name — it never overwrites the hospital.
experience[].agency_nameCanonical specialties
“Med Surg/Tele”, “CVICU”, “L&D” resolved against a 360+ entry clinical taxonomy — consistent values you can filter on.
experience[].specialties[]Memberships & committees
Sigma Theta Tau, AACN, unit committees, process-owner roles — captured, not silently dropped.
professional_associations[]Certs with honest dates
BLS, ACLS, CCRN with issued vs. expiry kept apart — an unlabelled date is never guessed into an expiry.
certifications[]Not nurse-only: radiologic and CT/MRI technologists, respiratory therapists, OT/PT/SLP, surgical and lab techs, and social workers parse with the same depth. And it remains a fully general resume parser — send it an accountant and you get clean JSON back.
02How a parse runs
Four stages between upload and JSON.
- 01
Read anything
Digital text comes straight out. Scans and photos run tiered OCR — Tesseract first, AWS Textract when quality demands it.
pdf · docx · png · jpg · tiff · scan - 02
Map the document
A multi-pass engine locates every role before extracting it, so a 15-job travel history keeps all 15 employers.
structure → per-role extraction - 03
Validate, never invent
Output is forced through a strict schema. A missing date stays null — it is never padded into a fake one.
08/2018, not 08/01/2018 - 04
Score and flag
Per-section confidence plus plain-language warnings: a summary that looks copied, a name the email contradicts.
"confidence": { "overall": 0.93 }
03Human-in-the-loop
Your team reviews four resumes, not four hundred.
Every section carries a 0–1 confidence score. Set a threshold: clean records flow straight into your system, and only the uncertain ones queue for a person. Degraded parses come back flagged partial with plain-language warnings — never a silent failure.
- Per-section and overall scores on every response
- partial: true on degraded documents — nothing fails silently
- Warnings a recruiter can read, not error codes
- Feedback endpoint: corrected JSON flows back to improve the model
→ auto-accepted
→ auto-accepted
→ auto-accepted
→ queued for human review
04Developer-first
A request and a response. That’s the integration.
No SDK required, no callback gymnastics for the simple case. Async OCR jobs return a job_id to poll — or register a signed webhook and skip polling entirely.
# one call
curl -X POST \
https://dqzxwwacosqcxipouyzxnrh7ky0sdnqw.lambda-url.us-east-2.on.aws/api/v1/resume/parse \
-H "X-API-Key: rp_live_…" \
-F "file=@resume.pdf"
# difficult scan? force high-accuracy OCR
-F "force_textract=true"// 200 OK
{
"status": "completed",
"data": { "licenses", "experience", "credentials"… },
"confidence": { "overall": 0.91 },
"partial": false,
"warnings": []
}Uniform errors
Every failure shares one envelope with a machine error_code and a hint written for end users.
"error_code": "FILE_TOO_LARGE"Signed webhooks
Async results carry an HMAC-SHA256 signature and timestamp. Verify, then trust the payload.
X-Signature: sha256=…Batch up to 200
Submit a folder of resumes in one request; per-file jobs report back individually.
POST /api/v1/resume/batch05Security & privacy
Candidate documents are radioactive. Handle accordingly.
A resume is PII end-to-end. The safest place to keep it is nowhere — so that’s the design.
- Zero document retention
- Resumes are parsed in memory and deleted on completion. There is no stored copy to breach.
- Encrypted in transit
- Every request runs over TLS, authenticated by a per-account key you can rotate at any time.
- Signed webhooks
- Async deliveries carry an HMAC-SHA256 signature and timestamp; replay-window guidance is in the docs.
- Content-free audit trail
- We log that a parse happened — duration, file type, token spend — never what the document said.
Start free · no credit card
Your first parsed resume is five minutes away.
Create an account, generate a key, send a file. The dashboard tracks every job from day one.