Referio Jobs API · v1

Post your jobs to Referio, programmatically

Anyone with a Referio account can publish referral job ads through our REST API — directly from your own systems, or through an ATS or job-posting platform you already use. One POST puts a role on the board, with its referral fee live for the world to refer against.

Overview

What the API does

The Referio Jobs API lets you create, update, and expire job listings without touching the dashboard. It's a small, predictable JSON REST API — if you can send an HTTP request, you can post a job.

There are three ways people use it:

Employers, directly

Wire your careers page or internal tooling straight to Referio with your own employer API key.

ATS & job platforms

Post on behalf of many employers at once with a single platform key — each job is scoped by employer email.

AI agents

A self-describing JSON index lets agents discover the schema and post autonomously.

The one rule: every job on Referio must carry a referral fee worth at least US$5,000. The API enforces this on every write — see The fee rule.

Base URL https://referio.io/api/v1
All requests and responses are JSON. All endpoints require authentication.

Quick start

Post your first job

Grab an API key from Settings → API keys, then send a single POST. The job goes live the moment it's accepted.

curl — create a job
curl -X POST https://referio.io/api/v1/jobs \
  -H "Authorization: Bearer $REFERIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Senior Platform Engineer",
    "description": "Own our build and deploy pipeline end to end. Kubernetes, Go, and a small, kind team.",
    "referral_fee_amount": 8000,
    "referral_fee_currency": "USD",
    "location": "London or remote (UK)",
    "work_mode": "remote",
    "employment_type": "full_time",
    "tags": ["golang", "kubernetes", "platform"],
    "external_id": "ats-job-4471"
  }'

A 201 Created response comes back with the stored job, including its slug (its public URL) and the fee converted to USD.

201 Created
HTTP/1.1 201 Created
{
  "job": {
    "id": "8f3c…",
    "slug": "senior-platform-engineer",
    "status": "active",
    "referral_fee_amount": 8000,
    "referral_fee_currency": "USD",
    "referral_fee_usd": 8000,
    "external_id": "ats-job-4471"
  }
}

Authentication

API keys & Bearer tokens

Every request authenticates with a Bearer token in the Authorization header:

header
Authorization: Bearer <your_api_key>

There are two kinds of key:

Employer key

Scoped to a single employer — your own account. It can only create and edit that employer's jobs. Generate one in Settings → API keys. The employer_email field is ignored.

Platform key

For ATS providers and job-posting platforms posting on behalf of many employers. Pass employer_emailwith each job to say who owns it — the employer is created automatically if it's new.

Treat keys like passwords. Send them only over HTTPS, never embed them in client-side code, and rotate (revoke & reissue) them if one leaks.

The fee rule

Every job pays US$5,000+

Referio exists so that referring great people is worth real money. That's why every job must carry a referral fee worth at least US$5,000. You can quote the fee in any supported currency — the API converts it to USD at the current exchange rate and rejects anything below the minimum with a 422.

Supported currencies

USDUS DollarEUREuroGBPBritish PoundAUDAustralian DollarCADCanadian DollarNZDNew Zealand DollarSGDSingapore DollarCHFSwiss FrancJPYJapanese YenINRIndian RupeeZARSouth African RandAEDUAE Dirham

Endpoints

The full surface

POST/api/v1/jobs
Create a job — or update an existing one when you reuse an external_id. This is the endpoint you'll use most.
PATCH/api/v1/jobs/:id
Partially update a job. Send only the fields you want to change. To change the fee, send referral_fee_amount and referral_fee_currency together.
DELETE/api/v1/jobs/:id
Expire a job (soft delete). It leaves the board but is retained in your account.
POST/api/v1/jobs/:id/expire
The same as DELETE, for clients that can't send the DELETE method.
GET/api/v1
A machine-readable index of the API — auth, rules, and the request schema. No key required. Handy for agents and integration tests.

Example — mark a role as filled:

curl — patch a job
curl -X PATCH https://referio.io/api/v1/jobs/8f3c… \
  -H "Authorization: Bearer $REFERIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "status": "filled" }'

Job fields

Request body reference

The body for POST /api/v1/jobs (and the editable fields for PATCH). Unknown fields are ignored.

FieldTypeRequiredNotes
titlestringYesThe role title. 3–140 characters.
descriptionstringYesFull role description. Minimum 20 characters. Plain text or markdown.
referral_fee_amountnumberYesThe referral fee you'll pay. Must convert to at least US$5,000.
referral_fee_currencystringYesISO 4217 code, e.g. USD. Must be a supported currency (see below).
employer_emailstringPlatform key onlyIdentifies which employer owns the job. Required with a platform key, ignored with an employer key. An employer account is created on first use.
employer_namestringNoDisplay name for a newly-provisioned employer.
locationstringNoFree-text location, up to 160 characters.
work_modeenumNoremote · hybrid · onsite. Defaults to onsite.
employment_typeenumNofull_time · part_time · contract · temporary. Defaults to full_time.
salary_minnumberNoLower bound of the advertised salary.
salary_maxnumberNoUpper bound of the advertised salary.
salary_currencystringNoISO 4217 code for the salary range.
tagsstring[]NoUp to 12 tags for filtering and discovery.
apply_instructionsstringNoHow candidates apply. Up to 2,000 characters.
expires_atstringNoISO 8601 datetime. The job auto-expires after this moment.
external_idstringNoYour own ID for the job. Re-posting with the same external_id updates the existing job instead of creating a duplicate (idempotency).
statusenumNoactive · draft · expired · filled. Defaults to active (live on the board).

Idempotency

Re-post safely with external_id

Pass your own external_id on every job. The first call creates the job; any later call with the same external_id updates the existing one instead of creating a duplicate. This makes syncs from an ATS safe to retry and replay — you can push your whole board on a schedule without fear of duplicates.

Responses & errors

What you get back

Success returns the stored job object. Validation problems return a 422 with a details object describing each field.

422 Unprocessable Entity
HTTP/1.1 422 Unprocessable Entity
{
  "error": "Validation failed",
  "details": {
    "fieldErrors": {
      "title": ["Title is too short."]
    }
  }
}
StatusMeaning
200OK — job updated or expired.
201Created — a new job was posted.
400Bad request — malformed JSON, or missing employer_email on a platform key.
401Unauthorized — missing or invalid API key.
403Forbidden — an employer key tried to touch another employer's job.
404Not found — no job with that id.
422Validation failed — see the details object. Includes the US$5,000 fee minimum.

ATS & platforms

Posting on behalf of employers

If you run an applicant tracking system or a job-posting platform, a single platform key lets you post for all of your employer customers. Identify each employer with employer_emailon the job body — Referio provisions the employer account automatically the first time it sees a new address, so there's no onboarding step to build.

curl — platform key, on behalf of an employer
curl -X POST https://referio.io/api/v1/jobs \
  -H "Authorization: Bearer $REFERIO_PLATFORM_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "employer_email": "talent@acme.com",
    "employer_name": "Acme Corp",
    "title": "Staff Designer",
    "description": "Lead design across our flagship product. Strong systems thinking required.",
    "referral_fee_amount": 6500,
    "referral_fee_currency": "GBP",
    "external_id": "acme-217"
  }'

Combine this with external_idand you can mirror an entire customer's job board into Referio idempotently, on whatever schedule suits you.

For AI agents

Built to be driven by software

This API is designed to be discoverable and safe for autonomous agents. If you're an agent integrating Referio, here's the short version:

  • Discover the schema by sending GET https://referio.io/api/v1. It returns auth rules, constraints, and the full request body shape as JSON — no key needed.
  • Authenticate with Authorization: Bearer <key> on every write.
  • Honour the fee minimum: referral_fee_amount must convert to ≥ US$5,000, or the write is rejected with 422. Read the error message and adjust.
  • Be idempotent: always send a stable external_id so retries never create duplicates.
  • Required fields are title, description, referral_fee_amount, and referral_fee_currency (plus employer_email on a platform key). Everything else has sensible defaults.

Ready to post?

Create an account, generate a key, and put your first role on the board in minutes.