Talentta for developers

Jobs API

Show your company's live Talentta jobs anywhere: your website, intranet or ATS. The API is read-only and returns only jobs that are published, paid for, open and not past their deadline.

Authentication

Create a key in Dashboard → Company Page (free for verified companies). Send it as a bearer token. Keys are shown once; revoke and replace one if it leaks.

curl https://api.talentta.africa/v1/jobs/ \
  -H "Authorization: Bearer tk_live_1a2b3c4d_your_secret"

You can also send X-Api-Key: tk_live_…. Keys are read-only, so calling from the browser is allowed. Restrict a browser key to your site with Allowed websites, or keep it on your server.

List jobs

GET /v1/jobs/ returns your live jobs, newest first.

ParameterMeaning
page, page_sizePagination. page_size is at most 50 (default 20).
qText search on the job title.
job_typefull_time, part_time, contract, freelance or internship.
work_moderemote, hybrid or onsite.
locationText match on location.
updated_sinceISO 8601 datetime. Only jobs changed since then (for syncing).
{
  "count": 12, "page": 1, "page_size": 20, "has_next": false,
  "results": [ { …job } ]
}

Each job:

{
  "id": 4821,
  "slug": "backend-engineer-x8k2",
  "title": "Backend Engineer",
  "job_type": "full_time",          // full_time | part_time | contract | freelance | internship
  "work_mode": "hybrid",            // remote | hybrid | onsite
  "location": "Lagos",
  "experience_level": "mid",
  "salary": {                       // null when the employer hides pay
    "type": "range", "min": 600000, "max": 900000,
    "currency": "NGN", "period": "monthly", "basis": "gross", "negotiable": false
  },
  "deadline": "2026-11-01T23:59:00Z",
  "posted_at": "2026-09-20T09:12:44Z",
  "updated_at": "2026-09-22T15:03:10Z",
  "apply_url": "https://talentta.io/jobs/4821?src=api_1a2b3c4d"
}

Always send candidates to apply_url. It tells you which key the application came from.

Get a job

GET /v1/jobs/{id or slug}/ returns the job plus description, key_responsibilities, requirements, required_skills and benefits. These are sanitised HTML, safe to render. Closed jobs return 404.

JavaScript

const res = await fetch("https://api.talentta.africa/v1/jobs/", {
  headers: { Authorization: "Bearer " + TALENTTA_KEY },
});
const { results } = await res.json();

PHP (e.g. WordPress)

$res = wp_remote_get("https://api.talentta.africa/v1/jobs/", [
  "headers" => ["Authorization" => "Bearer " . TALENTTA_KEY],
]);
$jobs = json_decode(wp_remote_retrieve_body($res), true)["results"];

Limits & caching

  • 60 requests per minute per key, and 10,000 requests a day per company. Need more? Ask us and we can raise it.
  • Over the limit you get 429 with a Retry-After header.
  • Responses carry an ETag. Send it back as If-None-Match and you'll get a cheap 304 when nothing changed.
  • The API is for verified companies. If a company's verification is withdrawn, requests return 403 until it's verified again; the keys work again after that.

No-code embed

Don't have a developer? Paste this into any page (WordPress, Wix, Webflow…) to show a live list that updates on its own:

<div data-talentta-jobs="your-subdomain"></div>
<script src="https://talentta.io/embed/jobs.js" async></script>

Webhooks

Add an https endpoint in Company Page settings. We POST JSON for job.published, job.updated and job.closed, retrying for about 8 hours on failure. An endpoint is switched off after 20 failures in a row.

POST /your-endpoint
Talentta-Event: job.published
Talentta-Delivery: evt_5f2c…
Talentta-Signature: t=1727500000,v1=5d41402abc4b2a76b9719d911017c592…

{ "id": "evt_5f2c…", "type": "job.published", "created": 1727500000, "data": { …job } }

Verify the signature. It is HMAC-SHA256 of {t}.{raw body} with your signing secret:

import hmac, hashlib

def verify(secret, header, body):
    parts = dict(p.split("=", 1) for p in header.split(","))
    expected = hmac.new(secret.encode(), f"{parts['t']}.{body}".encode(), hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, parts["v1"])

Reply with any 2xx quickly and do the slow work afterwards. Use id to ignore duplicates.