# API overview

> The Curriculo API at a glance: operations, background tasks, authentication, base URL, content types, size limits, rate limits, errors and pricing.

**Source:** /docs/api-overview/ (Curriculo Docs)  
**Updated:** 12 October 2026  
**Contact:** hello@curriculo.me

The Curriculo API is a RESTful API at `https://api.curriculo.me/public` that gives programmatic access to the same résumé, evaluation, language and interview engines that run inside the Curriculo product. Requests are JSON or `multipart/form-data`; responses are JSON.

> [!TIP]
> New to Curriculo? Start with the [Quickstart](/docs/quickstart/): create an account, issue a key and make one call.

## Prerequisites

- A [Developer Console](/docs/console/) account
- An API key created in **Console → API keys**

## Available APIs

| API | Operation | What it does | Price |
|---|---|---|---|
| [Parse](/docs/api/parse/) | `POST /parse/` | Read CVs (PDF or DOCX) into structured JSON. | $0.01 per request |
| [Evaluate](/docs/api/evaluate/) | `POST /evaluate/` | Score CVs against a job: suitability, fit analysis, gaps. | $0.01 per request |
| [Jobs](/docs/api/jobs/) | `POST /jobs/` | Optional. Register a job description once and reuse its `job_id`. | Free |
| [Translate](/docs/api/translate/) | `POST /translate/` | Translate strings or PDF and DOCX documents. | $0.01 per request (see [pricing](/docs/pricing/)) |
| [Detect language](/docs/api/detect-language/) | `POST /detect-language/` | ISO 639-1 code for one text or up to 200. | $0.001 per request |
| [Interview summary](/docs/api/summary/) | `POST /summary/` | Highlights, red flags, skills and a hire recommendation from a transcript or recording. | $0.01, plus $0.002 per minute for recordings |
| [Transcribe](/docs/api/transcribe/) | `POST /transcribe/` | Transcript of a recording, no summary. | $0.002 per minute |
| [Prompt](/docs/api/prompt/) | `POST /prompt/` | Generate, edit, translate or question the résumé pinned to your credential. Stateful. | $0.01 per request |
| [Screening interview](/docs/api/screening-interview/) | `POST /screening-interview` | Hosted, recorded screening interviews with signed callbacks. | $0.02 per invite sent |

### Background tasks

Parse, evaluate, summary, transcribe and translate also run in the background: `POST /{op}/async` answers `202` with a `task_id` at once, and you collect the result with `GET /{op}/tasks/{task_id}` or receive it by signed callback. See [Background processing and callbacks](/docs/background-processing/).

### Paths

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.

For the complete specification, see the [OpenAPI document](https://api.curriculo.me/public/openapi.json), or browse it in [Swagger UI](https://api.curriculo.me/public/docs) or [ReDoc](https://api.curriculo.me/public/redoc).

## Authentication

| 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 |

One Console key authorises every operation, immediately. There are no per-endpoint credentials, no scopes and nothing to enable. See [Authentication](/docs/authentication/).

There is no API version header. The surface is versioned by path, and additive changes (new optional fields, new operations) ship without breaking existing calls.

## Base URL

```text
https://api.curriculo.me/public
```

Point your client at that base and append the operation path, for example `https://api.curriculo.me/public/parse/`.

- **One credential everywhere.** A single Console key authenticates every operation.
- **Limits enforced per key,** so one noisy integration cannot spend another's budget.
- **Failed requests are never charged.** A `4xx` or `5xx` costs you nothing.

Production is the only published environment.

## Request and response format

See [Requests and responses](/docs/requests-and-responses/). The short version:

- `/parse/`, `/evaluate/`, `/prompt/` and `/transcribe/` take `multipart/form-data`.
- `/detect-language/` and `/jobs/` take `application/json`.
- `/translate/` and `/summary/` take `application/json`, or `multipart/form-data` to send documents or recordings.
- One document can be up to 10 MB. A request body can be up to 12 MB, except `/summary/`, which accepts recordings up to 100 MB.
- Send one item, get that item's object. Send several, get the results in input order.

## 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. See [Batching](/docs/batching/).

## Rate limits

| Limit | Value |
|---|---|
| Per API key | 600 requests per minute |
| Per IP address | 2,000 requests per minute |
| Heavy work (parse, evaluate, summary) | 3 operations at a time, shared across the service; extra requests queue |
| Request timeout | 300 seconds |

See [Rate limits](/docs/rate-limits/).

## Errors

Errors are JSON and carry the HTTP status that matters. Every response carries an `X-Curriculo-Request-Id` header to quote to support. See [Errors](/docs/errors/).

## Managing your account

Keys, usage and billing are managed in the [Developer Console](/docs/console/). Your API key does hiring work. It deliberately cannot mint keys or change billing, so a leaked key can never escalate into account control.

## Next steps

- [Quickstart](/docs/quickstart/): account, key, first call in three steps.
- [Background processing and callbacks](/docs/background-processing/): long work without holding a connection open.
- [Client SDKs](/docs/client-sdks/): generate a typed client from the OpenAPI spec.
- [API reference](/docs/api/): every field for every operation.
