# Register a job

> POST /jobs/ stores a job description once and returns a job_id, so a backlog of CVs can be evaluated without re-sending the same text. Optional and free.

**Source:** /docs/api/jobs/ (Curriculo Docs)  
**Updated:** 15 October 2026  
**Contact:** hello@curriculo.me

```http
POST https://api.curriculo.me/public/jobs/
```

**Optional and free.** Stores a job description and returns a `job_id` scoped to your account, so a backlog of CVs stops re-sending the same text.

> [!NOTE]
> This is an evaluation helper, not a job board. There is no listing, no pagination, no organisation and no pipeline. Only what you send is stored, never a candidate, a CV or a result.

## Request

`application/json`

| Field | Type | Notes |
|---|---|---|
| `job_details` (required) | string | Plain text pasted from your careers page, or a JSON object of structured requirements, sent as a string. |
| `language` | string | Default ISO 639-1 code for candidate-facing prose. |
| `label` | string | Your own name for the job. Echoed back. |

## Example

```bash
curl -X POST https://api.curriculo.me/public/jobs/ \
  -H 'Authorization: Bearer key_abc123_yoursecret' \
  -H 'Content-Type: application/json' \
  -d '{"job_details": "Senior backend engineer, Python and FastAPI, Seoul", "label": "BE-Seoul"}'
```

## Response

```json
{"job_id": "job_abc123", "label": "BE-Seoul"}
```

Send that `job_id` on [`POST /evaluate/`](/docs/api/evaluate/) or [`POST /evaluate/async`](/docs/background-processing/) in place of `job_details`.

## Errors

| Status | Typical cause |
|---|---|
| `400` | Blank `job_details`. |
| `422` | `job_details` is missing. |

`/evaluate/` returns `404` for an unknown `job_id`, or one registered by a different account. Ids are scoped to the account that created them.

## Common questions

**Do I have to register a job before evaluating?**
No. `POST /evaluate/` also accepts the job as `job_details` text or a `job_file` document on every call. Registering pays off when many CVs are scored against the same job, because the description is sent once.

**Can I update or delete a registered job?**
There is no update call. Register the job again to get a new `job_id` and use that from then on.

**Who can use a `job_id`?**
Only the account that registered it. Another account gets `404` for the same id.

**Does registering cost anything?**
No. `POST /jobs/` is free; you pay for each evaluation that uses the job.

## Next steps

- [Evaluate a candidate](/docs/api/evaluate/): score CVs against the registered `job_id`.
- [Batching](/docs/batching/): evaluate up to 10 CVs per request.
- [Background processing and callbacks](/docs/background-processing/): evaluate a large backlog without holding a connection open.
