Authorization: Bearer oc_live_… with the scope shown. Candidate fields follow OC-Reveal: name, headline and city are null until the candidate shares them. Documents and salary history are never returned.Account
/api/v1/meNew · 2026-10-31any scopeWho am I
The key making the request: its name, environment, scopes and expiry, its organisation, its rate limit and 30 days of usage by day and operation. Works with any scope, so it is the quickest way to check a key.
curl https://one-career.com/api/v1/me \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.me();Response: Me
- key
- object
- organisation
- object
- rate_limit
- object
- usage_30d
- object
- scopes_available
- array
- webhook_events
- array
Organisation
/api/v1/orgorg:readGet your organisation
The organisation that owns the API key, with its verification status and One-Career employer grade.
curl https://one-career.com/api/v1/org \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.org.get();Response: Organisation
- id
- string
- name
- string
- slug
- string
- type
- string
- website
- string | null
- country
- string | null · ISO 3166-1 alpha-2
- verified
- boolean
- verified_tier
- string | null
- verified_until
- string | null
- env
- string · live or test (the key's environment)
- grade
- object · Employer grade, see Company.grade
Postings
/api/v1/postingspostings:readList postings
All job and internship postings of your organisation, newest first.
| Parameter | In | Type | Description |
|---|---|---|---|
limit | query | integer | Items per page, 1–100 (default 20) |
cursor | query | string | next_cursor from the previous page |
status | query | draft | pending_review | changes_requested | open | paused | closed | rejected | Filter by status |
curl https://one-career.com/api/v1/postings?limit=20 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.postings.list({ status: "open", limit: 20 });Response: list of Posting
- id
- string
- title
- string
- description
- string
- kind
- string · job | campus_drive
- status
- string
- location
- string | null
- country
- string | null
- work_mode
- string · onsite | remote | hybrid
- employment_type
- string · full_time | part_time | contract | internship | freelance
- experience_min
- integer | null · years
- experience_max
- integer | null · years
- salary
- Salary
- skills
- array
- requirements
- array
- openings
- integer | null
- closes_on
- string | null · YYYY-MM-DD
- published_at
- string | null
- created_at
- string | null
- updated_at
- string | null
- apply_url
- string · Where candidates apply on One-Career
/api/v1/postingsIdempotency-Keypostings:writeCreate a posting
Creates a draft posting. Submit it for review with POST /postings/{id}/submit; it opens once it passes the quality check (at least 3 specific must-have skills with levels).
| Body field | Type | Description |
|---|---|---|
posting * | object | Posting fields: title, description, kind (job | campus_drive), location, country_code, work_mode (onsite | remote | hybrid), employment_type (full_time | part_time | contract | fixed_term | temporary | internship | apprenticeship | freelance), pay_period (year | month | hour; set in the console), region, experience_min/max, salary_min/max, salary_currency, skills[], requirements[{skill, level 1-5, must}], openings, closes_on |
curl -X POST https://one-career.com/api/v1/postings \
-H "Authorization: Bearer $ONE_CAREER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"posting":{"title":"Backend Engineer","description":"Build and run our hiring APIs.","work_mode":"hybrid","employment_type":"full_time","location":"Bengaluru","country_code":"IN","requirements":[{"skill":"PostgreSQL 16","level":3,"must":true},{"skill":"TypeScript 5","level":3,"must":true},{"skill":"Node.js 20","level":3,"must":true}]}}'import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.postings.create({
"title": "Backend Engineer",
"description": "Build and run our hiring APIs.",
"work_mode": "hybrid",
"employment_type": "full_time",
"location": "Bengaluru",
"country_code": "IN",
"requirements": [
{
"skill": "PostgreSQL 16",
"level": 3,
"must": true
},
{
"skill": "TypeScript 5",
"level": 3,
"must": true
},
{
"skill": "Node.js 20",
"level": 3,
"must": true
}
]
});Response: Posting
- id
- string
- title
- string
- description
- string
- kind
- string · job | campus_drive
- status
- string
- location
- string | null
- country
- string | null
- work_mode
- string · onsite | remote | hybrid
- employment_type
- string · full_time | part_time | contract | internship | freelance
- experience_min
- integer | null · years
- experience_max
- integer | null · years
- salary
- Salary
- skills
- array
- requirements
- array
- openings
- integer | null
- closes_on
- string | null · YYYY-MM-DD
- published_at
- string | null
- created_at
- string | null
- updated_at
- string | null
- apply_url
- string · Where candidates apply on One-Career
/api/v1/postings/{id}postings:readGet a posting
One posting of your organisation.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Posting ID |
curl https://one-career.com/api/v1/postings/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.postings.get("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91");Response: Posting
- id
- string
- title
- string
- description
- string
- kind
- string · job | campus_drive
- status
- string
- location
- string | null
- country
- string | null
- work_mode
- string · onsite | remote | hybrid
- employment_type
- string · full_time | part_time | contract | internship | freelance
- experience_min
- integer | null · years
- experience_max
- integer | null · years
- salary
- Salary
- skills
- array
- requirements
- array
- openings
- integer | null
- closes_on
- string | null · YYYY-MM-DD
- published_at
- string | null
- created_at
- string | null
- updated_at
- string | null
- apply_url
- string · Where candidates apply on One-Career
/api/v1/postings/{id}Idempotency-Keypostings:writeUpdate a posting
Updates the fields you send. Material changes to an open posting go back to review.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Posting ID |
| Body field | Type | Description |
|---|---|---|
posting * | object | Fields to change (same shape as create) |
curl -X PATCH https://one-career.com/api/v1/postings/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"posting":{"closes_on":"2026-12-31","openings":2}}'import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.postings.update("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91", { closes_on: "2026-12-31", openings: 2 });Response: Posting
- id
- string
- title
- string
- description
- string
- kind
- string · job | campus_drive
- status
- string
- location
- string | null
- country
- string | null
- work_mode
- string · onsite | remote | hybrid
- employment_type
- string · full_time | part_time | contract | internship | freelance
- experience_min
- integer | null · years
- experience_max
- integer | null · years
- salary
- Salary
- skills
- array
- requirements
- array
- openings
- integer | null
- closes_on
- string | null · YYYY-MM-DD
- published_at
- string | null
- created_at
- string | null
- updated_at
- string | null
- apply_url
- string · Where candidates apply on One-Career
/api/v1/postings/{id}/submitIdempotency-Keypostings:writeSubmit for review
Sends a draft to the quality and Trust & Safety review.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Posting ID |
curl -X POST https://one-career.com/api/v1/postings/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91/submit \
-H "Authorization: Bearer $ONE_CAREER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.postings.submit("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91");Response: Posting
- id
- string
- title
- string
- description
- string
- kind
- string · job | campus_drive
- status
- string
- location
- string | null
- country
- string | null
- work_mode
- string · onsite | remote | hybrid
- employment_type
- string · full_time | part_time | contract | internship | freelance
- experience_min
- integer | null · years
- experience_max
- integer | null · years
- salary
- Salary
- skills
- array
- requirements
- array
- openings
- integer | null
- closes_on
- string | null · YYYY-MM-DD
- published_at
- string | null
- created_at
- string | null
- updated_at
- string | null
- apply_url
- string · Where candidates apply on One-Career
/api/v1/postings/{id}/pauseIdempotency-Keypostings:writePause a posting
Hides an open posting from the job board without closing it.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Posting ID |
curl -X POST https://one-career.com/api/v1/postings/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91/pause \
-H "Authorization: Bearer $ONE_CAREER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.postings.pause("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91");Response: Posting
- id
- string
- title
- string
- description
- string
- kind
- string · job | campus_drive
- status
- string
- location
- string | null
- country
- string | null
- work_mode
- string · onsite | remote | hybrid
- employment_type
- string · full_time | part_time | contract | internship | freelance
- experience_min
- integer | null · years
- experience_max
- integer | null · years
- salary
- Salary
- skills
- array
- requirements
- array
- openings
- integer | null
- closes_on
- string | null · YYYY-MM-DD
- published_at
- string | null
- created_at
- string | null
- updated_at
- string | null
- apply_url
- string · Where candidates apply on One-Career
/api/v1/postings/{id}/resumeIdempotency-Keypostings:writeResume a posting
Re-opens a paused posting.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Posting ID |
curl -X POST https://one-career.com/api/v1/postings/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91/resume \
-H "Authorization: Bearer $ONE_CAREER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.postings.resume("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91");Response: Posting
- id
- string
- title
- string
- description
- string
- kind
- string · job | campus_drive
- status
- string
- location
- string | null
- country
- string | null
- work_mode
- string · onsite | remote | hybrid
- employment_type
- string · full_time | part_time | contract | internship | freelance
- experience_min
- integer | null · years
- experience_max
- integer | null · years
- salary
- Salary
- skills
- array
- requirements
- array
- openings
- integer | null
- closes_on
- string | null · YYYY-MM-DD
- published_at
- string | null
- created_at
- string | null
- updated_at
- string | null
- apply_url
- string · Where candidates apply on One-Career
/api/v1/postings/{id}/closeIdempotency-Keypostings:writeClose a posting
Closes the posting. Candidates in progress are informed by One-Career.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Posting ID |
curl -X POST https://one-career.com/api/v1/postings/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91/close \
-H "Authorization: Bearer $ONE_CAREER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.postings.close("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91");Response: Posting
- id
- string
- title
- string
- description
- string
- kind
- string · job | campus_drive
- status
- string
- location
- string | null
- country
- string | null
- work_mode
- string · onsite | remote | hybrid
- employment_type
- string · full_time | part_time | contract | internship | freelance
- experience_min
- integer | null · years
- experience_max
- integer | null · years
- salary
- Salary
- skills
- array
- requirements
- array
- openings
- integer | null
- closes_on
- string | null · YYYY-MM-DD
- published_at
- string | null
- created_at
- string | null
- updated_at
- string | null
- apply_url
- string · Where candidates apply on One-Career
Applications
/api/v1/applicationsapplications:readList applications
Applications to your postings. Candidate identity and contact details follow OC-Reveal: they stay masked until the candidate reaches a stage where One-Career reveals them, exactly as in the recruiter console. Documents and salary history are never exposed.
| Parameter | In | Type | Description |
|---|---|---|---|
limit | query | integer | Items per page, 1–100 (default 20) |
cursor | query | string | next_cursor from the previous page |
posting_id | query | uuid | Only applications to this posting |
stage | query | sourced | applied | screening | assessment | interview | debrief | reference_check | background_check | offer_approval | offer | negotiation | accepted | pre_joining | joined | probation | hired | rejected | withdrawn | declined | closed | Only this stage |
curl https://one-career.com/api/v1/applications?limit=20 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.applications.list({ stage: "screening", limit: 20 });Response: list of ApplicationCard
- id
- string
- posting_id
- string
- stage
- string
- stage_label
- string
- match_score
- number | null · Skill match 0–100
- band
- string | null · strong | good | partial | low
- created_at
- string | null
- stage_changed_at
- string | null
- resume_title
- string | null
- has_cover_letter
- boolean
- name
- string | null · Only when the candidate shared it with you (OC-Reveal); otherwise null
- headline
- string | null · Only when shared
- city
- string | null · Only when shared
- next_round
- string | null
- rounds
- integer
- scorecards
- integer
- offer_approval
- string | null
- background
- string | null
- notes
- integer
- trust
- object | null · One-Career trust signal for the candidate's records
/api/v1/applications/{id}applications:readGet an application
Full application view (stage history, rounds, scorecards), with the same masking as the recruiter console.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Application ID |
curl https://one-career.com/api/v1/applications/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.applications.get("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91");/api/v1/applications/{id}/moveIdempotency-Keyapplications:writeMove to a stage
Moves the application to another stage. The candidate is notified and the change is recorded in the audit log and the hiring timeline.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Application ID |
| Body field | Type | Description |
|---|---|---|
stage * | sourced | applied | screening | assessment | interview | debrief | reference_check | background_check | offer_approval | offer | negotiation | accepted | pre_joining | joined | probation | hired | rejected | withdrawn | declined | closed | Target stage |
message | string | Optional note shown to the candidate |
curl -X POST https://one-career.com/api/v1/applications/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91/move \
-H "Authorization: Bearer $ONE_CAREER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"stage":"interview","message":"Thanks! Let's talk next week."}'import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.applications.move("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91", "interview", "Thanks! Let's talk next week.");Response: ApplicationCard
- id
- string
- posting_id
- string
- stage
- string
- stage_label
- string
- match_score
- number | null · Skill match 0–100
- band
- string | null · strong | good | partial | low
- created_at
- string | null
- stage_changed_at
- string | null
- resume_title
- string | null
- has_cover_letter
- boolean
- name
- string | null · Only when the candidate shared it with you (OC-Reveal); otherwise null
- headline
- string | null · Only when shared
- city
- string | null · Only when shared
- next_round
- string | null
- rounds
- integer
- scorecards
- integer
- offer_approval
- string | null
- background
- string | null
- notes
- integer
- trust
- object | null · One-Career trust signal for the candidate's records
Offers
/api/v1/offersNew · 2026-10-31offers:readList offers
Offers across your applications, most recently changed first: terms, where the approval chain stands, whether it was sent and signed, and the Vault copies.
| Parameter | In | Type | Description |
|---|---|---|---|
limit | query | integer | Items per page, 1–100 (default 20) |
cursor | query | string | next_cursor from the previous page |
state | query | draft | pending_approval | changes_requested | approved | sent | signed | accepted | declined | Only offers in this state |
posting_id | query | uuid | Only offers for this posting |
curl https://one-career.com/api/v1/offers?limit=20 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.offers.list({ state: "sent", limit: 20 });Response: list of Offer
- application_id
- string
- posting_id
- string
- posting_title
- string | null
- stage
- string
- state
- string · Where the offer stands
- version
- integer | null · Offer version (a revised offer gets a new version)
- terms
- object
- approval
- object
- proposed_at
- string | null
- sent_at
- string | null
- signing
- object
- vault
- object
- updated_at
- string | null
/api/v1/offers/approvalsNew · 2026-10-31offers:readApproval queue
Offers waiting for internal approval, oldest first, each with waiting_on: the approvers whose decision is needed now (only the current level under a sequential policy). Up to 200.
curl https://one-career.com/api/v1/offers/approvals?limit=20 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.offers.approvals();Response: list of OfferApproval
- application_id
- string
- posting_id
- string
- posting_title
- string | null
- stage
- string
- state
- string · Where the offer stands
- version
- integer | null · Offer version (a revised offer gets a new version)
- terms
- object
- approval
- object
- proposed_at
- string | null
- sent_at
- string | null
- signing
- object
- vault
- object
- updated_at
- string | null
- waiting_on
- array · Approvers whose decision is needed now
/api/v1/offers/{id}New · 2026-10-31offers:readGet an offer
The offer on one application (the id is the application ID). signing.verify_url lets anyone check the signed letter.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Application ID |
curl https://one-career.com/api/v1/offers/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.offers.get("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91");Response: Offer
- application_id
- string
- posting_id
- string
- posting_title
- string | null
- stage
- string
- state
- string · Where the offer stands
- version
- integer | null · Offer version (a revised offer gets a new version)
- terms
- object
- approval
- object
- proposed_at
- string | null
- sent_at
- string | null
- signing
- object
- vault
- object
- updated_at
- string | null
Vault
/api/v1/vaultNew · 2026-10-31vault:readList Vault documents
Your organisation's own copies of offer paperwork: letters as sent, signed letters and acceptance letters, each with its SHA-256 fingerprint.
| Parameter | In | Type | Description |
|---|---|---|---|
limit | query | integer | Items per page, 1–100 (default 20) |
cursor | query | string | next_cursor from the previous page |
application_id | query | uuid | Only documents of this application |
kind | query | offer_letter | signed_offer | acceptance_letter | other | Only this kind |
curl https://one-career.com/api/v1/vault?limit=20 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.vault.list({ kind: "signed_offer" });Response: list of VaultDocument
- id
- string
- kind
- string
- title
- string
- mime_type
- string
- size_bytes
- integer | null
- sha256
- string | null · SHA-256 of the file
- application_id
- string | null
- offer_version
- integer | null
- reference
- string | null · Signing reference, for signed copies
- signed_at
- string | null
- sent_at
- string | null
- created_at
- string | null
/api/v1/vault/{id}/downloadNew · 2026-10-31vault:readDownload a document
A link to the file that works for 15 minutes, plus its SHA-256 so you can check the bytes you fetch. Ask again for a fresh link.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Document ID |
curl https://one-career.com/api/v1/vault/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91/download \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.vault.download("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91") // { url, sha256, expires_at };Response: VaultDownload
- id
- string
- kind
- string
- title
- string
- mime_type
- string
- size_bytes
- integer | null
- sha256
- string | null · SHA-256 of the file
- application_id
- string | null
- offer_version
- integer | null
- reference
- string | null · Signing reference, for signed copies
- signed_at
- string | null
- sent_at
- string | null
- created_at
- string | null
- url
- string · Works for 15 minutes
- expires_at
- string | null
Assessments
/api/v1/assessmentsassessments:readList assessment campaigns
Assessment campaigns your organisation has run.
| Parameter | In | Type | Description |
|---|---|---|---|
limit | query | integer | Items per page, 1–100 (default 20) |
cursor | query | string | next_cursor from the previous page |
curl https://one-career.com/api/v1/assessments?limit=20 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.assessments.list();Response: list of AssessmentCampaign
- id
- string
- name
- string
- assessment
- object
- status
- string
- posting_id
- string | null
- opens_at
- string | null
- window_hours
- integer | null
- invited
- integer | null
- delivered
- integer | null
- created_at
- string | null
/api/v1/assessments/{id}/resultsassessments:readCampaign results
Aggregates (score distribution, pass rate, integrity bands) and up to 500 graded results keyed by application ID. No names or contact details.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Campaign ID |
curl https://one-career.com/api/v1/assessments/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91/results \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.assessments.results("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91");Response: AssessmentResults
- campaign_id
- string
- by_state
- object
- graded
- integer
- avg_score_pct
- number | null
- median_score_pct
- number | null
- p90_score_pct
- number | null
- pass_rate
- number | null
- integrity_bands
- object
- results
- array
Interviews
/api/v1/interviewsinterviews:readList interview rounds
Interview rounds across your applications.
| Parameter | In | Type | Description |
|---|---|---|---|
limit | query | integer | Items per page, 1–100 (default 20) |
cursor | query | string | next_cursor from the previous page |
application_id | query | uuid | Only rounds of this application |
curl https://one-career.com/api/v1/interviews?limit=20 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.interviews.list({ application_id: "3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91" });Response: list of Interview
- id
- string
- application_id
- string
- round_no
- integer | null
- type
- string
- title
- string | null
- scheduled_at
- string | null
- duration_min
- integer | null
- mode
- string | null
- status
- string
- meeting_id
- string | null
- meeting_url
- string | null
- created_at
- string | null
/api/v1/interviews/{id}/meetingIdempotency-Keyinterviews:writeCreate a meeting room
Creates (or returns) the One-Career Meet room for a round and invites the panel and candidate.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Interview round ID |
curl -X POST https://one-career.com/api/v1/interviews/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91/meeting \
-H "Authorization: Bearer $ONE_CAREER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.interviews.createMeeting("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91");Webhooks
/api/v1/webhookswebhooks:manageList webhooks
Webhook endpoints of your organisation.
curl https://one-career.com/api/v1/webhooks?limit=20 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.webhooks.list();Response: list of Webhook
- id
- string
- url
- string
- events
- array
- active
- boolean
- secret_hint
- string · Last 4 characters of the signing secret
- created_at
- string | null
- last_success_at
- string | null
- failing_since
- string | null
/api/v1/webhooksIdempotency-Keywebhooks:manageCreate a webhook
Registers an https endpoint. The signing secret is returned once; store it to verify the OC-Signature header.
| Body field | Type | Description |
|---|---|---|
url * | string | Public https:// URL |
events | array of application.created | application.stage_changed | offer.accepted | offer.declined | assessment.completed | interview.scheduled | posting.opened | posting.closed | offer.approval_requested | offer.approved | offer.changes_requested | offer.sent | offer.signed | vault.document_added | Events to receive (default: all) |
curl -X POST https://one-career.com/api/v1/webhooks \
-H "Authorization: Bearer $ONE_CAREER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/oc-webhooks","events":["application.created","application.stage_changed"]}'import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.webhooks.create("https://example.com/oc-webhooks", ["application.created", "application.stage_changed"]);Response: WebhookCreated
- id
- string
- url
- string
- events
- array
- secret
- string · whsec_… — shown only once
- note
- string
/api/v1/webhooks/{id}New · 2026-10-31Idempotency-Keywebhooks:manageUpdate a webhook
Change the events an endpoint receives, or pause and re-enable it. Re-enabling clears the failing state, so an endpoint One-Career paused after 3 days of failures can be switched back on once fixed.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Webhook ID |
| Body field | Type | Description |
|---|---|---|
events | array of * | application.created | application.stage_changed | offer.accepted | offer.declined | assessment.completed | interview.scheduled | posting.opened | posting.closed | offer.approval_requested | offer.approved | offer.changes_requested | offer.sent | offer.signed | vault.document_added | Events to receive (["*"] for all) |
active | boolean | false pauses deliveries; true re-enables |
curl -X PATCH https://one-career.com/api/v1/webhooks/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"events":["offer.sent","offer.signed","vault.document_added"],"active":true}'import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.webhooks.update("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91", { events: ["offer.sent", "offer.signed"], active: true });Response: Webhook
- id
- string
- url
- string
- events
- array
- active
- boolean
- secret_hint
- string · Last 4 characters of the signing secret
- created_at
- string | null
- last_success_at
- string | null
- failing_since
- string | null
/api/v1/webhooks/{id}/deliveriesNew · 2026-10-31webhooks:manageDelivery log
Every delivery to this endpoint, newest first: event, attempts, the last HTTP status and error, and when the next retry is due.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Webhook ID |
limit | query | integer | Items per page, 1–100 (default 20) |
cursor | query | string | next_cursor from the previous page |
status | query | queued | sending | sent | failed | dead | Only deliveries in this status |
curl https://one-career.com/api/v1/webhooks/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91/deliveries?limit=20 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.webhooks.deliveries("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91", { status: "failed" });Response: list of WebhookDelivery
- id
- string
- event
- string
- event_id
- string · The event id inside the payload
- status
- string
- attempts
- integer
- last_status
- integer | null · Last HTTP status from your endpoint
- last_error
- string | null
- next_attempt_at
- string | null
- created_at
- string | null
- delivered_at
- string | null
/api/v1/webhook-deliveries/{id}/redeliverNew · 2026-10-31Idempotency-Keywebhooks:manageRedeliver an event
Queues the same event again, with the same event id so receivers that dedupe on it stay correct. Use it after fixing an endpoint, or to replay a dead delivery.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Delivery ID |
curl -X POST https://one-career.com/api/v1/webhook-deliveries/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91/redeliver \
-H "Authorization: Bearer $ONE_CAREER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.webhooks.redeliver("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91");Response: Redelivery
- delivery_id
- string
- status
- string
- event
- string
- event_id
- string
/api/v1/webhooks/{id}Idempotency-Keywebhooks:manageDelete a webhook
Stops deliveries to this endpoint.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Webhook ID |
curl -X DELETE https://one-career.com/api/v1/webhooks/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91 \
-H "Authorization: Bearer $ONE_CAREER_API_KEY"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.webhooks.delete("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91");Response: Deleted
- id
- string
- deleted
- boolean
/api/v1/webhooks/{id}/testIdempotency-Keywebhooks:manageSend a test event
Queues a signed ping event to the endpoint (delivered within a minute).
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Webhook ID |
curl -X POST https://one-career.com/api/v1/webhooks/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91/test \
-H "Authorization: Bearer $ONE_CAREER_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer({ apiKey: process.env.ONE_CAREER_API_KEY });
const result = await oc.webhooks.test("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91");Response: TestDelivery
- delivery_id
- string
- status
- string
Public
/api/v1/companies/{slug}public · CORSCompany profile and grade
Public profile of a verified organisation with its employer grade and number of open jobs. No key needed; CORS enabled.
| Parameter | In | Type | Description |
|---|---|---|---|
slug * | path | string | Organisation slug |
curl https://one-career.com/api/v1/companies/acmeimport { OneCareer } from "@one-career/sdk";
const oc = new OneCareer(); // public endpoint: no key needed
const result = await oc.public.company("acme");Response: Company
- id
- string
- name
- string
- slug
- string
- type
- string
- website
- string | null
- country
- string | null
- verified
- boolean
- verified_tier
- string | null
- verified_until
- string | null
- logo_url
- string | null
- grade
- object
- open_jobs
- integer
- profile_url
- string
/api/v1/companies/{slug}/jobspublic · CORSCompany job board
Postings of a verified organisation, for career pages: filter by status, employment type, work mode and location. The response adds total and facets (counts for filter chips). Closed roles are listed for 180 days without an apply link. No key needed; CORS enabled.
| Parameter | In | Type | Description |
|---|---|---|---|
slug * | path | string | Organisation slug |
q | query | string | Title or skill search |
status | query | open | closed | all | open (default), closed (last 180 days) or all |
employment_type | query | string | Comma list: full_time, part_time, contract, fixed_term, temporary, internship, apprenticeship, freelance |
work_mode | query | string | Comma list: onsite, hybrid, remote |
location | query | string | City, region or country contains |
limit | query | integer | Items per page, 1–100 (default 20) |
cursor | query | string | next_cursor from the previous page |
curl https://one-career.com/api/v1/companies/acme/jobs?limit=20import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer(); // public endpoint: no key needed
const result = await oc.public.companyJobs("acme", { limit: 20 });Response: list of PublicJob
- id
- string
- title
- string
- description
- string
- kind
- string
- location
- string | null
- country
- string | null
- work_mode
- string
- employment_type
- string
- experience_min
- integer | null
- experience_max
- integer | null
- salary
- Salary
- skills
- array
- openings
- integer | null
- closes_on
- string | null
- published_at
- string | null
- apply_url
- string | null · Null when the role is closed
- status
- string
- job_url
- string
- closed_at
- string | null
- pay_period
- string | null
- region
- string | null
- organisation
- object
/api/v1/companies/{slug}/embedpublic · CORSEmbed settings
Domains where the organisation allows its One-Career widgets. An empty list means any site.
| Parameter | In | Type | Description |
|---|---|---|---|
slug * | path | string | Organisation slug |
curl https://one-career.com/api/v1/companies/acme/embedimport { OneCareer } from "@one-career/sdk";
const oc = new OneCareer(); // public endpoint: no key needed
const result = await oc.request("GET", "/companies/acme/embed", { auth: false });Response: EmbedConfig
- domains
- array · Allowed hostnames; *.example.com matches subdomains
/api/v1/jobs/{id}public · CORSPublic job
One open posting. Returns 404 once the posting is closed.
| Parameter | In | Type | Description |
|---|---|---|---|
id * | path | uuid | Posting ID |
curl https://one-career.com/api/v1/jobs/3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer(); // public endpoint: no key needed
const result = await oc.public.job("3f6c2a9e-8b1d-4c7a-9e2f-5d4b1a0c7e91");Response: PublicJob
- id
- string
- title
- string
- description
- string
- kind
- string
- location
- string | null
- country
- string | null
- work_mode
- string
- employment_type
- string
- experience_min
- integer | null
- experience_max
- integer | null
- salary
- Salary
- skills
- array
- openings
- integer | null
- closes_on
- string | null
- published_at
- string | null
- apply_url
- string | null · Null when the role is closed
- status
- string
- job_url
- string
- closed_at
- string | null
- pay_period
- string | null
- region
- string | null
- organisation
- object
/api/v1/verify/card/{number}public · CORSVerify an ID or staff card
Checks a One-Career ID card (person), staff card (OCS-) or organisation card (OCO-). Pass the QR signature as sig for a full check.
| Parameter | In | Type | Description |
|---|---|---|---|
number * | path | string | Card number |
sig | query | string | Signature from the card QR code |
curl https://one-career.com/api/v1/verify/card/OCS-7K2P-9QX4import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer(); // public endpoint: no key needed
const result = await oc.public.verifyCard("OCS-7K2P-9QX4");Response: CardVerification
- valid
- boolean
/api/v1/verify/certificate/{serial}public · CORSVerify a certificate
Checks a One-Career certificate by its serial number.
| Parameter | In | Type | Description |
|---|---|---|---|
serial * | path | string | Certificate serial |
curl https://one-career.com/api/v1/verify/certificate/OC-CERT-2026-000123import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer(); // public endpoint: no key needed
const result = await oc.public.verifyCertificate("OC-CERT-2026-000123");Response: CertificateVerification
- valid
- boolean
/api/v1/profile-cards/{token}public · CORSShared profile card
A candidate's profile card, shared by the candidate with a revocable token. Only the fields the candidate chose are returned.
| Parameter | In | Type | Description |
|---|---|---|---|
token * | path | string | Share token (pc_…) |
curl https://one-career.com/api/v1/profile-cards/pc_a1b2c3d4a1b2c3d4a1b2c3d4a1b2c3d4a1b2c3d4import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer(); // public endpoint: no key needed
const result = await oc.public.profileCard("pc_a1b2c3d4a1b2c3d4a1b2c3d4a1b2c3d4a1b2c3d4");Response: ProfileCard
- name
- string
- headline
- string | null
- location
- string | null
- photo_url
- string | null
- skills
- array
- identity_verified
- boolean
- open_to_work
- boolean
- portfolio_url
- string | null
- expires_at
- string | null
/api/v1/verify/signature/{ref}New · 2026-10-31public · CORSVerify an e-signed document
Checks a document signed on One-Career, by its signing reference (OC-SIGN-…, printed on the signed page) or by the SHA-256 of the file. Says whether it matches the signed copy or the unsigned original, when it was signed, by whom (first name and initial) and for which organisation. Background-check firms, banks and HR systems can confirm an offer letter without contacting anyone.
| Parameter | In | Type | Description |
|---|---|---|---|
ref * | path | string | OC-SIGN-… reference or 64-character SHA-256 |
curl https://one-career.com/api/v1/verify/signature/OC-SIGN-00B4839221import { OneCareer } from "@one-career/sdk";
const oc = new OneCareer(); // public endpoint: no key needed
const result = await oc.public.verifySignature("OC-SIGN-00B4839221");Response: SignatureVerification
- valid
- boolean
- reason
- string | null · Why it is not valid
- matched
- string · reference | signed | original
- note
- string
- reference
- string
- kind
- string · offer_letter | acceptance_letter
- signed_at
- string | null
- signer
- string | null · First name and last initial
- organisation
- object | null
- signed_sha256
- string | null
- original_sha256
- string | null
- method
- string