talenthic

Developers

Talenthic API

Jobs, employers and opportunity intelligence over a stable JSON HTTP API. Full-text and faceted filters, aggregated market insights, per-key rate limits, OpenAPI 3.1 and a hosted Postman collection.

Base URLhttps://www.talenthic.info/api/public/v1
Auth

x-api-key header, or?api_key=.

Rate limit

Per-key hourly window. X-RateLimit-* on every response.

Format

Pure application/json. CORS enabled. UTF-8.

Versioning

Stable /v1. Additive only; breaking changes ship as /v2.

Endpoints

All paths are relative to https://www.talenthic.info/api/public/v1.

GET/healthpublicLiveness probe and build metadata
GET/jobsSearch jobs: q, country, work_mode, employment_type, seniority, skills, salary_min, visa, days_fresh
GET/jobs/{id}Full job record incl. description, requirements and benefits
GET/companiesEmployer directory with verification and hiring volume
GET/companies/{slug}Single employer profile
GET/companies/{slug}/jobsActive openings for one employer
GET/skillsTrending skills with demand deltas
GET/statsAggregate market stats: volume, freshness, geography

Quickstart

Request an API key, export it as TALENTHIC_KEY, then call the API from any HTTP client.

cURL
curl -sS -H "x-api-key: $TALENTHIC_KEY" \
  "https://www.talenthic.info/api/public/v1/jobs?q=react&work_mode=remote&limit=20"
JavaScript (fetch)
const res = await fetch(
  "https://www.talenthic.info/api/public/v1/jobs?q=react&work_mode=remote&limit=20",
  { headers: { "x-api-key": process.env.TALENTHIC_KEY } }
);
if (!res.ok) throw new Error(`Talenthic ${res.status}`);
const { data, meta } = await res.json();
Python (requests)
import os, requests

r = requests.get(
    "https://www.talenthic.info/api/public/v1/jobs",
    headers={"x-api-key": os.environ["TALENTHIC_KEY"]},
    params={"q": "react", "work_mode": "remote", "limit": 20},
    timeout=20,
)
r.raise_for_status()
payload = r.json()
jobs, meta = payload["data"], payload.get("meta", {})
TypeScript (tiny SDK)
const BASE = "https://www.talenthic.info/api/public/v1";

export class Talenthic {
  constructor(private key: string) {}

  private async get<T>(path: string, params: Record<string, string | number> = {}) {
    const qs = new URLSearchParams(
      Object.entries(params).map(([k, v]) => [k, String(v)]),
    );
    const res = await fetch(`${BASE}${path}?${qs}`, {
      headers: { "x-api-key": this.key },
    });
    if (res.status === 429) {
      const wait = Number(res.headers.get("retry-after") ?? 60);
      throw Object.assign(new Error("rate_limited"), { retryAfter: wait });
    }
    if (!res.ok) throw new Error(`Talenthic ${res.status}`);
    return (await res.json()) as T;
  }

  jobs(params?: Record<string, string | number>) { return this.get("/jobs", params); }
  job(id: string) { return this.get(`/jobs/${id}`); }
  companies(params?: Record<string, string | number>) { return this.get("/companies", params); }
}

Response envelope

Every list endpoint returns data plus meta.

200 OK
{
  "data": [
    {
      "id": "0f1c…",
      "title": "Senior React Engineer",
      "company": { "name": "Acme", "slug": "acme", "verified": true },
      "location": "Berlin, Germany",
      "work_mode": "hybrid",
      "employment_type": "full_time",
      "salary": { "min": 80000, "max": 110000, "currency": "EUR", "period": "year" },
      "skills": ["react", "typescript"],
      "url": "https://www.talenthic.info/jobs/senior-react-engineer-at-acme-0f1c…",
      "posted_at": "2026-07-21T09:14:00Z"
    }
  ],
  "meta": { "limit": 20, "offset": 0, "count": 20 }
}

Pagination & limits

Offset pagination with a hard ceiling per page.

  • limit 1–100, default 20.
  • offset 0-based. Stop when meta.count < limit.
  • X-RateLimit-Remaining Requests left in the current hour window.
  • Retry-After Seconds to wait after a 429. Back off exponentially with jitter.
  • days_fresh Poll incrementally with days_fresh=1 instead of refetching the full corpus.

Errors

Standard HTTP status codes with a { "error": "…" } envelope.

  • 200Success
  • 400Malformed request or invalid parameter
  • 401Missing or invalid API key
  • 404Resource not found
  • 429Rate limit exceeded — respect Retry-After
  • 500Internal error — retry with exponential backoff
  • 503Service degraded (see /health)

Interactive reference

Powered by the OpenAPI 3.1 spec at /api/public/v1/openapi.json.

Higher limits, dedicated support or streaming updates? Talk to us about enterprise SLAs on www.talenthic.info.
Community

Join the community.
Get opportunities first.

Early alerts, referrals, and behind-the-scenes threads from people hiring across Bangladesh — inside one private group.