Tools

Resume to JSON API

Submit a resume or CV as a PDF. Get back name, contact details, experience, education, and skills as structured JSON. No templates, no training.

Try it below:

FILEDrop a file or click to upload

Production-ready

Private by design

Security-first

Scalable

Production-ready

Private by design

Security-first

Scalable

Production-ready

Private by design

Security-first

Scalable

Turn resumes into structured JSON

Upload a resume PDF or submit a URL, get structured JSON back.

{
  "kind": "document",
  "name": "Sarah Chen — CV",
  "state": "completed",
  "extraction": {
    "common": {
      "mimeType": "application/pdf",
      "size": 156672,
      "thumbnail": "https://cdn.exabase.io/...",
      "chunkCount": 14
    },
    "document": {
      "pages": 2,
      "author": "Sarah Chen",
      "title": "Sarah Chen — CV",
      "creationDate": "2025-04-12T00:00:00.000Z",
      "pdfRender": { "url": "https://cdn.exabase.io/..." },
      "documentType": "resume",
      "structured": {
        "name": "Sarah Chen",
        "email": "sarah.chen@example.com",
        "phone": "+1 (415) 555-0182",
        "summary": "Full-stack engineer with 6 years of experience building data pipelines and developer tools. Previously at Stripe and Vercel.",
        "experience": [
          {
            "company": "Vercel",
            "title": "Senior Software Engineer",
            "startDate": "2022-03",
            "endDate": "2025-04",
            "description": "Led development of the edge middleware runtime. Reduced cold start latency by 40%."
          },
          {
            "company": "Stripe",
            "title": "Software Engineer",
            "startDate": "2019-06",
            "endDate": "2022-02",
            "description": "Built internal tools for payment reconciliation. Processed $2B+ in daily transaction volume."
          }
        ],
        "education": [
          {
            "institution": "UC Berkeley",
            "degree": "B.S. Computer Science",
            "graduationDate": "2019"
          }
        ],
        "skills": ["TypeScript", "Python", "PostgreSQL", "AWS", "Kubernetes", "React", "Node.js"]
      }
    }
  }
}

What is Exabase's resume to JSON API?

Submit a resume or CV as a PDF to the Exabase Extract API and get structured JSON back. The API detects the document type automatically and extracts resume-specific fields: candidate name, email, phone number, professional summary, work experience (with company, title, dates, and description for each role), education, and skills. You also get the full text content split into searchable chunks, page count, and a CDN-hosted thumbnail and rendered PDF.

This is the same POST /v2/extract endpoint used for all document types. When the API recognises a resume, it sets extraction.document.documentType to resume and populates extraction.document.structured with the extracted fields. No template configuration, no field mapping, no training step. Submit the PDF and read the output.

What you get back

The response includes the standard document metadata (page count, author, title, creation date, MIME type, file size) alongside the resume-specific structured data. The structured object contains name, email, phone, summary, experience (an array of roles with company, title, start date, end date, and description), education (institution, degree, graduation date), and skills (an array of skill names). Full text content is split into searchable chunks with page numbers. You also get a CDN-hosted thumbnail and a rendered version of the PDF. The API reference has the complete response schema.

One multi-modal API

The same POST /v2/extract endpoint handles every content type Exabase supports. For PDFs, it returns page count, author, title, and structured field extraction when it recognises the document type. Resumes, invoices, and contracts each get their own set of extracted fields. For images, it runs OCR. For audio and video, it generates full transcripts with timestamps. For web pages, it renders JavaScript and extracts the content.

The submission flow is identical across all types: one endpoint, one SDK method, one webhook configuration. You learn the pattern once and use it for everything. The Extract docs cover each content type in detail.

What you can build with it

The structured resume data maps directly to the fields your ATS or recruitment pipeline needs. Extract candidate details from uploaded resumes without manual data entry. Search across a pool of candidates by skill, company, or role title. Build a talent database where every resume is parsed on upload and immediately searchable.

The text chunks work in RAG pipelines too. Store processed resumes as Resources in a Base and search across all of them through Deep Search at the paragraph level. Workers can process new resumes as they arrive, keeping your candidate database indexed without manual work.

Beyond resume parsing

The Extract API returns more than structured fields. You get the full text as chunks, a CDN-hosted thumbnail, a rendered PDF, and standard document metadata. Store the output as a Resource and it's searchable through Deep Search immediately. Extract key candidate details into Memory so your agent retains context about applicants between sessions. The Submitting Jobs guide at https://exabase.io/docs/developer-guide/extraction/submitting-jobs walks through the full flow.

How do I use it?

  1. Get your API key

Free, no credit card:

Sign up at exabase.io and copy your API key from the dashboard.

  1. Submit a resume PDF

Using the SDK (Node.js):

import { Exabase } from "@exabase/sdk";
import { createReadStream } from "fs";

const api = new Exabase({
  apiKey: process.env.EXABASE_API_KEY,
});

const job = await api.extract.createFromFile({
  file: createReadStream("./sarah-chen-cv.pdf"),
  name: "Sarah Chen — CV",
});

console.log(job.id);    // extraction job id
console.log(job.state); // "pending"
  1. Get the result

Poll the job until state reaches completed, or skip polling entirely with webhooks.

const result = await api.extract.get({ jobId: job.id });

if (result.state === "completed") {
  console.log(result.extraction?.document?.documentType); // "resume"
  console.log(result.extraction?.document?.structured?.name);
  console.log(result.extraction?.document?.structured?.email);
  console.log(result.extraction?.document?.structured?.experience);
  console.log(result.extraction?.document?.structured?.education);
  console.log(result.extraction?.document?.structured?.skills);
  console.log(result.extraction?.document?.pages);
  console.log(result.extraction?.common?.thumbnail);
}

One API call. No templates, no field mapping, no training.

What you get back

Field

Type

Description

state

string

completed or failed

kind

string

document

[...].mimeType

string

application/pdf

[...].size

number

File size in bytes

[...].thumbnail

string

CDN-hosted thumbnail URL

[...].chunkCount

number

Number of text chunks

[...].pages

number

Page count

[...].author

string

Document author

[...].title

string

Document title

[...].creationDate

string

Document creation date

[...].pdfRender.url

string

CDN-hosted rendered PDF URL

[...].documentType

string

resume

[...].structured.name

string

Candidate name

[...].structured.email

string

Email address

[...].structured.phone

string

Phone number

[...].structured.summary

string

Professional summary

[...].structured.experience

array

Roles w/ company, title, dates, desc

[...].structured.education

array

Institution, degree, graduation date

[...].structured.skills

array

Skill names

Text chunks are retrieved separately via GET /v2/extract/{jobId}/chunks.

Each chunk includes a sequence number, the extracted text, and a page number.

API quick reference

Endpoint

Method

Description

/v2/extract

POST

Submit extraction job

/v2/extract

GET

List extraction jobs

/v2/extract/{jobId}

GET

Poll for result

/v2/extract/{jobId}/chunks

GET

Fetch text chunks

/v2/extract-settings

PUT

Configure webhook

Auth: X-Api-Key header on all requests.

File retention: Stored files are retained for 1 day from job creation. Download or copy anything you need before they expire.

Need file extraction or full page content?

Exabase offers a full set of tools to extract content from any media, document or website.

All your data extraction needs in one place.

Why Exabase

Use cases

FAQs

What is Exabase?

Exabase is infrastructure for AI agents. It gives your agents memory, versioned file storage, AI deep search, and context automation through a set of APIs. Store what your agent learns, search inside any content type, and keep knowledge bases current automatically. Built for production use. Give your agent precise context and cut your token spend by up to 81%.

Who uses Exabase?

Developers and teams building AI agents, copilots, and RAG applications. If your agent needs to remember things between sessions, store and retrieve files, search across documents and media, or stay up to date without manual maintenance, Exabase handles that infrastructure so you can focus on your product.

Do I need to configure templates for different resume formats?

No. The API detects resumes and extracts structured fields automatically. No template setup, no per-format configuration. It handles single-column, multi-column, and creative layouts.

What fields does it extract?

Name, email, phone, professional summary, experience (company, title, start date, end date, description for each role), education (institution, degree, graduation date), and skills (as an array). The exact fields depend on the document content. Treat the structured object as a free-form object and access only the keys you need.

Does it handle scanned resumes?

Yes. OCR is built in. Submit a scanned resume the same way you'd submit a digital PDF. The API detects the content type and processes accordingly.

How accurate is the extraction?

Accuracy depends on the resume's formatting and structure. Standard layouts with clear section headings produce the most reliable output. Creative or heavily designed resumes may yield partial results. Validate critical fields in your application logic.

What if the API doesn't recognise the PDF as a resume?

The documentType field will be set to other and the structured object may be absent or empty. You still get the full text as chunks, page count, author, creation date, thumbnail, and rendered PDF.

Does it handle CVs in languages other than English?

The API processes the document text regardless of language. Structured field extraction works best with English-language resumes. Other languages may produce partial results for the structured object, but the full text chunks are still returned.

Can I submit a URL instead of uploading a file?

Yes. Pass a url field in the request body pointing to a publicly accessible PDF. Exabase fetches and processes it.

Do I have to poll for results?

No. You can configure a webhook URL and Exabase will POST the full result to your server when processing completes. The webhooks guide covers setup.

What happens if extraction fails?

The job state moves to failed. You can call the reprocess endpoint to retry without re-uploading the original file.

How long are files retained?

Stored files are retained for 1 day from job creation, then permanently deleted. Download or copy anything you need before the retention window expires.

How should I handle candidate data privacy?

Exabase encrypts data in transit (SSL) and at rest (AES-256), and stored files are automatically deleted after 1 day. Your data handling obligations (GDPR, CCPA, or local requirements) are determined by your own deployment and use case. Route compliance decisions to your own review.

Can I use the extracted data with other Exabase features?

Yes. Store parsed resumes as a Resource in a Base and the content becomes searchable through Deep Search. Extract key candidate details into Memory so your agent retains context. Workers can process new resumes automatically as they arrive.

Is there an SDK?

Yes. The @exabase/sdk package for Node.js/TypeScript handles file streaming, job polling, and chunk retrieval. Install with npm install @exabase/sdk. Or call the REST API directly from any language.

What other document types does Extract recognise?

Invoices and contracts also get structured field extraction. See the Invoice to JSON and Contract to JSON tool pages. General PDFs return text chunks and metadata without the structured object. The same endpoint also handles images, audio, video, and web pages.

Deciding?

Ask your favourite AI about Exabase:

Cut your token spend and give your agent precise context.

Get started in minutes.

Cut your token spend and give your agent precise context.

Get started in minutes.