# Resume Parsing API: Resume Parser, CV Parser, and Resume to JSON

The UseResume Resume Parsing API converts resumes and CVs into structured JSON or clean Markdown. “Resume parser API,” “CV parser API,” “resume parsing API,” and “resume to JSON API” all refer to the same UseResume endpoint and response schema.

Use it to prefill candidate profiles, normalize documents from different layouts and countries, create searchable talent records, or pass clean resume data into an ATS, CRM, workflow, or AI model.

## Endpoint

`POST https://useresume.ai/api/v3/resume/parse`

Authentication:

```http
Authorization: Bearer USERESUME_API_KEY
Content-Type: application/json
```

## Inputs, outputs, and limits

Send exactly one document source:

- `file_url`: a publicly accessible file URL, up to 20 MB; or
- `file`: a Base64-encoded file, up to 4 MB.

| Requirement          | Value                              |
| -------------------- | ---------------------------------- |
| Supported files      | PDF, DOCX, PNG, JPG, JPEG, WEBP    |
| `parse_to: json`     | Normalized candidate fields        |
| `parse_to: markdown` | Clean Markdown document text       |
| Cost                 | 4 API credits per successful parse |
| Account limit        | 10 requests per second             |

Use JSON when fields need to be indexed, searched, or mapped into another schema. Use Markdown when the complete document will be displayed, summarized, embedded, or passed to a language model.

## Request example

```javascript
const response = await fetch("https://useresume.ai/api/v3/resume/parse", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.USERESUME_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    file_url: "https://example.com/candidate-resume.pdf",
    parse_to: "json",
  }),
});

const { data, meta } = await response.json();
```

## Resume JSON overview

JSON output can contain:

- name, role, email, phone, address, summary, and professional links;
- employment history, companies, locations, dates, and responsibilities;
- education, achievements, skills, and proficiency;
- certifications, languages, projects, activities, and references; and
- optional personal fields found in the source document.

```json
{
  "name": "Alex Thompson",
  "role": "Senior Software Engineer",
  "email": "alex@example.com",
  "links": [{ "name": "LinkedIn", "url": "https://..." }],
  "employment": [
    {
      "title": "Software Engineer",
      "company": "Example Company",
      "location": "Riga, Latvia",
      "start_date": "2022-01-01",
      "end_date": null,
      "present": true,
      "responsibilities": [{ "text": "Built customer-facing applications." }]
    }
  ],
  "education": [],
  "skills": [{ "name": "TypeScript", "proficiency": "Advanced" }],
  "certifications": [],
  "languages": [],
  "projects": []
}
```

Missing fields may be returned as `null`. Complete dates in structured sections use `YYYY-MM-DD`.

## Response envelope

```json
{
  "success": true,
  "data": {},
  "meta": {
    "run_id": "run_123",
    "credits_used": 4,
    "credits_remaining": 996
  }
}
```

## Error handling

Common responses include:

- `400 REQUEST_VALIDATION_FAILED`: required data is missing or invalid;
- `401 INVALID_API_KEY`: the Bearer key is invalid;
- `402 INSUFFICIENT_CREDITS`: the account has fewer than 4 credits;
- `429 RATE_LIMIT_EXCEEDED`: the account rate limit was exceeded; and
- `500 PROCESSING_ERROR`: parsing failed during processing.

Failed validation requests do not consume credits.

## Related resources

- [Full parsing documentation](https://useresume.ai/resume-generation-api/docs#parse-resume)
- [Resume Data API overview](https://useresume.ai/resume-data-api)
- [Resume Generation API guide](https://useresume.ai/resume-generation-api/resume-generation-api.md)
- [API pricing](https://useresume.ai/resume-generation-api/pricing.md)
- [API Platform dashboard](https://useresume.ai/account/api-platform)
