Talentta for developers
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.
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.
GET /v1/jobs/ returns your live jobs, newest first.
| Parameter | Meaning |
|---|---|
| page, page_size | Pagination. page_size is at most 50 (default 20). |
| q | Text search on the job title. |
| job_type | full_time, part_time, contract, freelance or internship. |
| work_mode | remote, hybrid or onsite. |
| location | Text match on location. |
| updated_since | ISO 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 /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.
const res = await fetch("https://api.talentta.africa/v1/jobs/", {
headers: { Authorization: "Bearer " + TALENTTA_KEY },
});
const { results } = await res.json();$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"];429 with a Retry-After header.ETag. Send it back as If-None-Match and you'll get a cheap 304 when nothing changed.403 until it's verified again; the keys work again after that.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>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.