# Build hiring workflows on Curriculo

> Parse resumes, score candidates against a job, translate and summarise interviews with one API key. $5 free credit, no ATS login. Quickstart and API reference.

**Source:** /docs/ (Curriculo Docs)  
**Updated:** 4 November 2026  
**Contact:** hello@curriculo.me

The Curriculo API turns raw hiring material (resumes, job requirements, interview recordings) into structured, decision-ready data. One REST API, one bearer key from the Developer Console, no ATS login required.

**$5 free credit, one key, no ATS login**

[Get API key](https://console.curriculo.me) · [Quickstart](/docs/quickstart/)

Base URL: `https://api.curriculo.me/public`

```bash
curl -X POST https://api.curriculo.me/public/detect-language/ \
  -H 'Authorization: Bearer key_abc123_yoursecret' \
  -H 'Content-Type: application/json' \
  -d '{"text": "Ingeniera de software con diez años de experiencia"}'
```

```python
import requests

resp = requests.post(
    "https://api.curriculo.me/public/detect-language/",
    headers={"Authorization": "Bearer key_abc123_yoursecret"},
    json={"text": "Ingeniera de software con diez años de experiencia"},
)
print(resp.json())
```

```javascript
const resp = await fetch("https://api.curriculo.me/public/detect-language/", {
  method: "POST",
  headers: {
    Authorization: "Bearer key_abc123_yoursecret",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ text: "Ingeniera de software con diez años de experiencia" }),
});
console.log(await resp.json());
```

Response:

```json
{ "language": "es", "confidence": 1.0, "flores": "spa_Latn" }
```

Use Curriculo as the AI layer for your own ATS, job board or recruiting workflow. Your product keeps candidates, jobs, status and the recruiter UI. The Curriculo API does the language, evaluation, interview and media work behind it. It is a RESTful API that gives programmatic access to the same resume, evaluation, language and interview engines that run inside the Curriculo product.

## What do you want to do?

- [Build into my product](/docs/quickstart/): Parse resumes, score candidates against a job, translate and summarise interviews from your own code. One bearer key from the Developer Console.
- [Use it in Claude, ChatGPT or Cursor](/docs/mcp/): Work your hiring pipeline from Claude, ChatGPT, Cursor and other clients. Part of Curriculo ATS, with its own sign-in.
- [Automate my hiring inbox](/docs/email-agent/): Connect your hiring inbox and resume emails sent to a job's apply address become scored applicants, with sends and calendars automated.

## Make your first call

1. **Create an account.** Sign in at [console.curriculo.me](https://console.curriculo.me). Your account is provisioned on first sign-in, and a one-time $5.00 free credit is added.
2. **Create an API key.** In the Console, open **API keys** and choose **Create API key**. The key looks like `key_<id>_<secret>` and is shown once. It cannot be recovered later, so store it somewhere safe.
3. **Call an endpoint.** Run the request at the top of this page with your key. Language detection costs $0.001 per request and answers in under a second.

The [Quickstart](/docs/quickstart/) walks through the same steps, then parses a resume.

> [!WARNING]
> Resume parsing can take up to 90 seconds per document. Set your HTTP client timeout above five minutes, because a 30-second timeout will abandon calls that would have succeeded.

> [!NOTE]
> Try before you write code. The synchronous operations are runnable from the Console's documentation page: paste your key, attach a real resume and read the response.

## Capabilities

| Capability | Operation | What it does |
|---|---|---|
| [Parse a resume](/docs/api/parse/) | `POST /parse/` | PDF or DOCX in, structured JSON out: contact details, roles, dates, skills. Up to 10 documents per request. |
| [Evaluate a candidate](/docs/api/evaluate/) | `POST /evaluate/` | Score resumes against a job: fit analysis, gaps, suitability. Send the job as pasted text, a JD document, or a registered `job_id`. |
| [Register a job](/docs/api/jobs/) | `POST /jobs/` | Optional and free. Store a job description once and reuse the returned `job_id` across a backlog of resumes. |
| [Translate](/docs/api/translate/) | `POST /translate/` | Translate one string, up to 200 strings, or whole PDF and DOCX documents, into any of 202 languages. |
| [Detect language](/docs/api/detect-language/) | `POST /detect-language/` | A language code (ISO 639-1, or FLORES-200 when there is none) for one text or up to 200 in a batch. |
| [Summarise an interview](/docs/api/summary/) | `POST /summary/` | A transcript, transcript document or recording in; highlights, red flags, skills and a hire recommendation out. |
| [Transcribe](/docs/api/transcribe/) | `POST /transcribe/` | A recording in, a transcript out, with no summary. |
| [Prompt a resume](/docs/api/prompt/) | `POST /prompt/` | Generate, edit, translate or ask questions about the resume pinned to your credential, in plain language. Stateful. |
| [Screening interview](/docs/api/screening-interview/) | `POST /screening-interview` | Invite candidates to a hosted, recorded screening and receive each signed answer, with transcript and recording link, on your server. |

Long work (a resume backlog, an hour-long recording) runs in the background: see [Background processing and callbacks](/docs/background-processing/). Every request field for every operation is in the [API reference](/docs/api/).

## Core concepts

- [Authentication](/docs/authentication/): Send your Console key as a bearer token. One key authorises every operation, immediately. There are no per-endpoint credentials, no scopes and nothing to enable.
- [Async and callbacks](/docs/background-processing/): Parse, evaluate, summary, transcribe and translate also run in the background: POST /{op}/async answers 202 with a task_id at once. Poll the task or receive a signed callback.
- [Batching](/docs/batching/): There is no separate batch endpoint: the list is the batch. Up to 10 documents per request for parsing and evaluation, up to 200 texts for translation and language detection.
- [Limits and errors](/docs/rate-limits/): 600 requests per minute per key, 2,000 per IP address, a 300-second request timeout. Heavy work runs on capacity shared across the service. Errors are JSON with the HTTP status that matters.

Error formats, status codes, request IDs and retry guidance are on [Errors](/docs/errors/). Content types and size limits are on [Requests and responses](/docs/requests-and-responses/).

## Pricing

Prepaid, per request, from a single balance. **$0.001** to detect a language, **$0.01** per resume parsed or evaluated, and a one-time **$5.00** free credit to start. Failed requests are never charged. [See every price](/docs/pricing/).

## Integrations for recruiting teams

Curriculo ATS, the hiring product your team signs in to, also connects to the tools your team already uses. These are separate products from the public API, with their own sign-in.

- **[Curriculo ATS MCP server](/docs/mcp/)**: work your hiring pipeline from Claude, ChatGPT, Cursor and other clients.
- **[Email Agent](/docs/email-agent/)**: connect your hiring inbox and the agent ingests resume emails sent to a job's apply address into scored applicants, automates sends and manages calendars.
- **[Slack through MCP](/docs/slack/)**: use Curriculo ATS from Slack with an MCP-capable assistant.

## Account and base URL

| Environment | Base URL | Credential |
|---|---|---|
| Production | `https://api.curriculo.me/public` | Console key `key_<id>_<secret>` |

Every operation lives under that one base URL. Point your client at that base and append the operation path, for example `https://api.curriculo.me/public/parse/`. Production is the only published environment, and new accounts start with a $5.00 free credit, so you can test on production with your own documents.

| Header | Value | Required |
|---|---|---|
| `Authorization` | `Bearer key_<id>_<secret>`, your Console API key | Yes |
| `Content-Type` | `application/json` or `multipart/form-data`, depending on the operation | Yes, on requests with a body |

[console.curriculo.me](https://console.curriculo.me) is where an account starts and where it is managed: sign-in, API keys, usage and billing. Your API key does hiring work. It deliberately cannot mint keys or change billing, so a leaked key can never escalate into account control. See [Developer Console](/docs/console/).

Requests are JSON or `multipart/form-data`; responses are JSON, except the edge's own `413` (oversized request) and `404` (path outside `/public/`) pages. Synchronous operations end in a trailing slash (`/parse/`). Background task paths (`/parse/async`, `/parse/tasks/{task_id}`) and screening paths (`/screening-interview`) are documented without one. There is no API version header and no version in the path, and additive changes (new optional fields, new operations) ship without breaking existing calls.

## What next?

- **Parse your first resume:** [Quickstart](/docs/quickstart/), account, key and first call in three steps.
- **Score resumes against a job:** [Evaluate a candidate](/docs/api/evaluate/).
- **Send many documents at once:** [Batching](/docs/batching/), how lists work, each endpoint's ceiling, and per-item errors.
- **Process a backlog or a long recording:** [Background processing and callbacks](/docs/background-processing/), long work without holding a connection open.
- **Plan for volume:** [Rate limits](/docs/rate-limits/), per-key and per-IP ceilings, shared capacity, and the request timeout.
- **Generate a typed client:** [Client SDKs](/docs/client-sdks/).
- **Budget the work:** [Pricing and billing](/docs/pricing/), the price of each operation, free credit and top-up.
- **Add AI to your own ATS:** [For ATS builders](/docs/ai-api-for-ats-builders/), which Curriculo API fits which step of your ATS, with an example integration.

## FAQ

### What is the base URL of the Curriculo API?

https://api.curriculo.me/public. Every operation lives under it, and production is the only published environment.

### How do I authenticate?

Send a Developer Console key as a bearer token: Authorization: Bearer key_<id>_<secret>.

### Is there a batch endpoint?

No. The list is the batch: send several documents or strings in one request and every result comes back in order.

### What happens with long work?

Use the async lane, /{op}/async, and poll the task or receive a signed callback.
