Public API
Connect NEX to your tools
A JSON API to read published job offers and, with a company key, manage your offers, follow your applications and read your organisation chart.
- Base URL
- https://nexjobs.net/api/v1
- Format
- JSON, ISO 8601 dates in universal time
- Version
- v1
- Authentication
- Company key in a Bearer header (except public endpoints)
Getting started
- The owner of the company account opens Management, then API and integrations.
- They create a key, give it a name and tick only the access it needs.
- They copy the key, shown only once, and store it in the tool that will call the API.
Creating keys requires a plan that includes API access. Published offers remain readable without a key.
Authentication
Send the key in the Authorization header of every request, after the word Bearer.
Authorization: Bearer nex_live_…A key opens your company’s data: keep it on your server, never in a web page or an installed app. Private endpoints refuse calls coming from a browser anyway. When in doubt, revoke it and create a new one.
Access (scopes)
Each key can only do what was ticked when it was created.
| Access | What it allows |
|---|---|
| jobs:read | Read the company’s job offers, whatever their status. |
| jobs:write | Create job offers and close them. |
| applications:read | Read the applications received: candidate name, stage, outcome, dates and documents. |
| organization:read | Read the organisation chart: directorates, departments, services and positions. |
Rate limits
Each key may send 120 requests per minute.
Public endpoints, without a key, accept 120 requests per minute per IP address.
Beyond that, the response has status 429 and a Retry-After header telling how many seconds to wait.
Pagination
Lists accept the page (from 1) and pageSize (20 by default, 50 at most) parameters, and return the total and the number of pages.
{
"data": [ … ],
"pagination": { "page": 1, "pageSize": 20, "total": 57, "totalPages": 3 }
}Errors
Every error has the same shape: a stable code, for your program to use, and a help message in English.
{
"error": {
"code": "insufficient_scope",
"message": "This key lacks the \"jobs:write\" scope."
}
}| Code | Meaning |
|---|---|
| unauthorized | No key, or a malformed Authorization header. |
| invalid_api_key | Unknown or revoked key. |
| api_access_not_in_plan | The company’s plan no longer includes API access. |
| insufficient_scope | The key lacks the access this endpoint requires. |
| rate_limited | Too many requests: wait for the delay given by Retry-After. |
| invalid_request | Invalid parameter or request body; the details name the field. |
| unsupported_media_type | The body must be sent as JSON (Content-Type: application/json). |
| payload_too_large | The body exceeds 64 KB. |
| not_found | Resource not found, or not owned by your company. |
| invalid_transition | Impossible status change, such as closing a draft. |
| publication_blocked | Cannot publish: unverified e-mail address or active-offer quota reached. Create the offer as a draft. |
| internal_error | Error on our side: try again later. |
Endpoints
GET/jobs
Lists published offers, newest first. Filters: q (free text), country (ISO country code), sector (sector code), contract (contract type).
Public, no key.
curl "https://nexjobs.net/api/v1/jobs?q=engineer&pageSize=10"GET/jobs/{id}
One published offer in full: description, requested documents and the link to its page, where people apply.
Public, no key.
curl "https://nexjobs.net/api/v1/jobs/<id>"GET/employer/jobs
Lists your company’s offers, whatever their status, with the number of applications. Filter: status.
Access required: jobs:read
curl "https://nexjobs.net/api/v1/employer/jobs?status=PUBLISHED" \ -H "Authorization: Bearer nex_live_…"POST/employer/jobs
Creates an offer: a draft by default; with publish set to true, it is published if the company is verified, otherwise it waits for moderation.
Access required: jobs:write
curl -X POST "https://nexjobs.net/api/v1/employer/jobs" \ -H "Authorization: Bearer nex_live_…" \ -H "Content-Type: application/json" \ -d '{ "title": "Maintenance technician", "description": "Preventive and corrective maintenance of the plant equipment.", "contractType": "PERMANENT", "payPeriod": "MONTHLY", "currency": "USD", "salaryMin": 900, "salaryMax": 1200, "requiredDocuments": [{ "kind": "CV" }], "publish": true }'GET/employer/jobs/{id}
One of your offers in full, with its pipeline stages and the number of applications at each stage.
Access required: jobs:read
curl "https://nexjobs.net/api/v1/employer/jobs/<id>" \ -H "Authorization: Bearer nex_live_…"PATCH/employer/jobs/{id}
Closes a published or pending offer. Only the change to the closed status is accepted.
Access required: jobs:write
curl -X PATCH "https://nexjobs.net/api/v1/employer/jobs/<id>" \ -H "Authorization: Bearer nex_live_…" \ -H "Content-Type: application/json" \ -d '{ "status": "CLOSED" }'GET/employer/applications
Lists the applications received. Filters: jobId, outcome, updatedSince (ISO 8601 date).
Access required: applications:read
curl "https://nexjobs.net/api/v1/employer/applications?outcome=ACTIVE&updatedSince=2026-09-01T00:00:00Z" \ -H "Authorization: Bearer nex_live_…"GET/organization
Returns the organisation chart: directorates, departments, services and work positions.
Access required: organization:read
curl "https://nexjobs.net/api/v1/organization" \ -H "Authorization: Bearer nex_live_…"
Protecting candidates
The API never returns a candidate’s e-mail address, phone number or messages, nor any password or account. NEX organises the contact between employer and candidate.
How the API evolves
Within v1, fields may be added, never renamed or removed. An incompatible change will come as a v2, announced in advance.
