Hopin API reference
The public Hopin API is read-only, unauthenticated and CORS-open. Base URL:
https://api.hopinjobs.com
The formal description is at https://hopinjobs.com/openapi.json (OpenAPI 3.1). Every operation below has a stable operationId that matches the spec, so it can be turned into an LLM tool definition mechanically.
Background — rate limits, error shape, CORS and the open dataset — is on the docs page.
Conventions
- All public operations are
GET. There is no public write surface. - Responses are
application/json; charset=utf-8. - No API key, no OAuth, no signup.
- Collection endpoints return the whole filtered collection in one response. There is no pagination to walk; filter server-side instead.
- Rate limit: 300 requests per 60-second window per client, advertised on every response as
ratelimit-limit,ratelimit-remaining,ratelimit-resetandratelimit-policy.
getHealth
GET /api/health — liveness check for the API. Use it to confirm reachability before a batch of calls.
curl -s https://api.hopinjobs.com/api/health
{"status":"ok","message":"Hopin Backend API is running"}
listJobs
GET /api/jobs — full-time and entry-level job listings. Returns every matching listing in one response under a jobs array.
| Parameter | Type | Description |
|---|---|---|
is_unofficial | "true" / "false" | true returns hidden roles — openings sourced from a recruiter's own feed rather than a job board. Default false. |
is_on_campus | "true" / "false" | Restrict to on-campus or off-campus listings. Ignored when is_unofficial=true. |
industry | string | Exact match on an industry from GET /api/filters, e.g. Technology. |
location | string | Exact match on a location from GET /api/filters, e.g. Bangalore, India. |
work_type | string | One of On-site, Remote, Hybrid. |
role_type | string | Exact match on a role from GET /api/filters. |
curl -s "https://api.hopinjobs.com/api/jobs?is_unofficial=true"
{
"jobs": [
{
"id": "e4841672-3717-4959-ac26-d9fa5fca7673",
"company": "Infosys",
"title": "Business Roles",
"description": "Information Technology / Business Roles",
"location": "Remote, India",
"work_type": "On-site",
"industry": "Information Technology",
"role_type": "Business Roles",
"ctc_amount": "₹3.5-7 LPA (Estimated)",
"posted_at": "2026-08-21T03:52:44",
"posted_days": 1,
"is_on_campus": false,
"is_active": true,
"job_type": "job"
}
]
}
posted_days is derived at request time from posted_at. ctc_amount is a human-readable band and may be marked estimated; treat it as a string, not a number.
getJob
GET /api/jobs/{id} — a single job by its UUID. Returns 404 with {"error":"Job not found"} when the id does not exist.
curl -s https://api.hopinjobs.com/api/jobs/e4841672-3717-4959-ac26-d9fa5fca7673
{"job": {"id": "e4841672-3717-4959-ac26-d9fa5fca7673", "company": "Infosys", "title": "Business Roles"}}
listInternships
GET /api/internships — internship listings. Same parameters as listJobs; the response key is internships and each item carries stipend rather than ctc_amount.
curl -s "https://api.hopinjobs.com/api/internships?is_unofficial=true"
getInternship
GET /api/internships/{id} — a single internship by UUID, under an internship key.
listFilters
GET /api/filters — the allowed values for every filter parameter, grouped by type. Call this first and filter server-side rather than fetching everything.
curl -s https://api.hopinjobs.com/api/filters
The groups are industry, location, pay_range, role and work_type. Each entry carries filter_value (what you send) and display_label (what to show).
listEvents
GET /api/events — campus and career events (workshops, drives, sessions) with their date, time, location and whether they are online.
The open hiring dataset
Aggregate hiring data is a static file on the website origin rather than an API call, so it is cacheable and citable:
curl -s https://hopinjobs.com/reports/fresher-hiring-india.json
It returns updatedAt, a totals object (live listings, new in the last seven days, internship share, remote share, median posting age) and topCities, topRoles and topCompanies arrays. Licensed CC-BY-4.0 — cite it with attribution to Hopin.
Errors
| Status | Meaning | Body |
|---|---|---|
404 | The resource does not exist | {"error":"Job not found"} |
429 | Rate limit exceeded; honour Retry-After | JSON error object |
500 | Server-side failure; the request is worth retrying | {"error":"Failed to fetch jobs"} |
Stability
These endpoints back Hopin's own web and mobile clients, so they do not change casually. Breaking changes will be announced on the changelog and reflected in openapi.json first. Questions: help@hopinjobs.com.