Developer
The same data that runs the site, in your own code. Search live UK visa-sponsor jobs, look up licensed companies, pull sponsor scores and visa stats. REST API, metered by credits. Manage your API keys • View the MCP tool reference
Get your API key
Create an API key from the Developer Dashboard. API access is included in Pro and Agency plans.
Make your first request
curl "https://huntukvisasponsors.com/public/v1/search/jobs?q=software+engineer" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"Watch your credit balance
Every response includes X-RateLimit-Remaining, and you should pay attention to it. Credits reset on the 1st of each month; if you run out before then, you'll get 429s until reset. Don't retry-loop on a 429. It won't help. Wait for the reset or upgrade.
Every request needs your API key as a Bearer token in the Authorization header.
curl "https://huntukvisasponsors.com/public/v1/stats" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"Treat your key like a password
Anyone who finds your key can burn through your monthly credits before you notice. Don't put it in browser code, mobile apps, or anywhere public. Secret-scanners crawl GitHub constantly. Call the API from a server you control and only send your frontend the rows it actually needs.
There's a monthly credit budget. Search endpoints cost 5 credits, detail lookups 1–3, reference data 1. Each endpoint card below shows its exact cost. MCP tool calls pull from the same pool, so search_jobs over MCP costs the same as GET /search/jobs.
| Plan | Credits / Month |
|---|---|
| agency | 160,000 |
| pro | 7,000 |
| Header | Description |
|---|---|
| X-RateLimit-Limit | Your plan's monthly credit budget |
| X-RateLimit-Cost | Credit cost of this request |
| X-RateLimit-Remaining | Credits remaining for the current month |
Once you blow through your monthly budget you'll get 429 Too Many Requests until the next reset. Watch X-RateLimit-Remaining on every response so you see it coming, instead of getting surprised at midnight on the 30th.
/company/{idOrSlug}Get detailed company profile including sponsorship status, company size, industry, website, and Companies House data.
| Name | Type | Required | Description |
|---|---|---|---|
idOrSlugpath | string | yes | Company ID (CUID) or URL slug |
curl "https://huntukvisasponsors.com/public/v1/company/company-name-abc123xyz456" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/company/{idOrSlug}/jobsList current job openings from a specific company. Supports pagination and filtering.
| Name | Type | Required | Description |
|---|---|---|---|
idOrSlugpath | string | yes | Company ID (CUID) or URL slug |
locationquery | string[] | no | Filter by one or more location names (repeat the param to pass multiple) |
limitquery | number | no | Page size (default 20, max 100) |
afterquery | string | no | Forward pagination cursor from a previous response |
beforequery | string | no | Backward pagination cursor from a previous response |
curl "https://huntukvisasponsors.com/public/v1/company/company-name-abc123xyz456/jobs?location=value" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/company/{idOrSlug}/jobs/facetsGet aggregated facet counts for a company's jobs (by location, occupation code, etc.).
| Name | Type | Required | Description |
|---|---|---|---|
idOrSlugpath | string | yes | Company ID (CUID) or URL slug |
curl "https://huntukvisasponsors.com/public/v1/company/company-name-abc123xyz456/jobs/facets" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/company/{idOrSlug}/relatedGet companies related to the specified company, based on industry, size, and location similarity.
| Name | Type | Required | Description |
|---|---|---|---|
idOrSlugpath | string | yes | Company ID (CUID) or URL slug |
curl "https://huntukvisasponsors.com/public/v1/company/company-name-abc123xyz456/related" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/company/{id}/visa_statsGet a company's visa sponsorship statistics including historical Certificates of Sponsorship (CoS) data by visa type and year.
| Name | Type | Required | Description |
|---|---|---|---|
idpath | string | yes | Company ID (CUID) or URL slug |
curl "https://huntukvisasponsors.com/public/v1/company/id_here/visa_stats" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/job/{idOrSlug}Get detailed information about a specific job posting including title, description, location, salary, company details, and application link.
| Name | Type | Required | Description |
|---|---|---|---|
idOrSlugpath | string | yes | Job ID (CUID) or URL slug |
curl "https://huntukvisasponsors.com/public/v1/job/company-name-abc123xyz456" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/search/companiesSearch licensed visa sponsor companies. Filter by name, industry, location, company size, and sponsor licence status.
| Name | Type | Required | Description |
|---|---|---|---|
qquery | string | no | Free-text query (company name, keyword) |
companyquery | string | no | Filter by company name (lowercase) |
visaTypequery | string[] | no | Filter by one or more visa/licence type slugs |
locationquery | string[] | no | Filter by company city/location names |
companySizequery | string[] | no | Filter by company size bucket (e.g. '1-50') |
industryquery | string[] | no | Filter by SIC section industry name |
minRecentVisaCountquery | number | no | Minimum number of recent visa issuances |
includeRecruitmentAgencyquery | boolean | no | Include recruitment agencies. Default false |
jobCreatedAtAfterquery | string | no | Only include companies with jobs created at or after this RFC3339 timestamp |
viewquery | string | no | Response detail level. Default minimal |
sizequery | number | no | Page size (default 10, max 50) |
afterquery | string | no | Forward pagination cursor from a previous response |
beforequery | string | no | Backward pagination cursor from a previous response |
curl "https://huntukvisasponsors.com/public/v1/search/companies?q=engineer" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/search/jobsSearch for visa-sponsored jobs. Supports keyword search, filters for location, occupation code, company size, industry, and more.
| Name | Type | Required | Description |
|---|---|---|---|
qquery | string | no | Free-text search query (e.g. 'software engineer') |
companyquery | string | no | Filter by company name (lowercase) |
jobquery | string | no | Filter by job title (lowercase) |
visaTypequery | string | no | Filter by visa/licence type slug (e.g. 'skilled-worker') |
locationquery | string[] | no | Filter by one or more location names (repeat the param to pass multiple) |
occupationCodequery | string[] | no | Filter by SOC occupation codes (e.g. '2137') |
companySizequery | string[] | no | Filter by company size bucket (e.g. '51-200') |
industryquery | string[] | no | Filter by SIC section industry name |
minSponsorScorequery | number | no | Minimum sponsor score (0-100). Default 0 |
minOccupationConfidencequery | number | no | Minimum occupation-classification confidence (0-100) |
includeUnclassifiedOccquery | boolean | no | Include jobs whose occupation code is unclassified. Default true |
minRelevancequery | number | no | Minimum text-search relevance score (0-1) |
includeRecruitmentAgencyquery | boolean | no | Include jobs from recruitment agencies. Default false |
jobCreatedAtAfterquery | string | no | Only return jobs created at or after this RFC3339 timestamp |
jobCreatedAtBeforequery | string | no | Only return jobs created at or before this RFC3339 timestamp |
searchTimequery | string | no | RFC3339 anchor timestamp for time-decay relevance scoring. Pass the same value across paginated requests to keep cursor ordering stable |
postedWithinquery | string | no | Only return jobs posted within this time window |
viewquery | string | no | Response detail level. Default minimal |
sizequery | number | no | Page size (default 10, max 50) |
afterquery | string | no | Forward pagination cursor from a previous response |
beforequery | string | no | Backward pagination cursor from a previous response |
curl "https://huntukvisasponsors.com/public/v1/search/jobs?q=engineer" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/search/locationAutocomplete location search. Returns matching UK locations for use as filter values in job or company searches.
| Name | Type | Required | Description |
|---|---|---|---|
qquery | string | no | Location name fragment to search for (e.g. 'Manch') |
limitquery | number | no | Maximum number of results (1-1000, default 10) |
offsetquery | number | no | Pagination offset (default 0) |
orderByquery | string | no | Result ordering. Default location |
curl "https://huntukvisasponsors.com/public/v1/search/location?q=engineer" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/sicsectionList all Standard Industrial Classification (SIC) sections used to categorize company industries.
curl "https://huntukvisasponsors.com/public/v1/sicsection" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/statsGet platform-wide statistics including total jobs, companies, and sponsored visa counts.
curl "https://huntukvisasponsors.com/public/v1/stats" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/visa-typesList all UK visa types tracked on the platform (Skilled Worker, Global Talent, etc.).
curl "https://huntukvisasponsors.com/public/v1/visa-types" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/user/alertsList your job alert subscriptions.
curl "https://huntukvisasponsors.com/public/v1/user/alerts" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/user/alertsCreate a new job alert subscription with keyword, location, and frequency filters.
| Name | Type | Required | Description |
|---|---|---|---|
jobKeywordbody | no | Keyword query for the alert (e.g. 'data scientist') | |
locationbody | no | Optional location filter | |
frequencyInDaysbody | yes | How often (in days) the alert is delivered. 1 = daily |
curl -X POST "https://huntukvisasponsors.com/public/v1/user/alerts" \
-H "Authorization: Bearer huvs_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"frequencyInDays":"frequencyInDays_value","jobKeyword":"jobKeyword_value","location":"location_value"}'/user/alerts/{id}Delete a job alert subscription.
| Name | Type | Required | Description |
|---|---|---|---|
idpath | string | yes | Alert ID |
curl -X DELETE "https://huntukvisasponsors.com/public/v1/user/alerts/id_here" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/user/bookmark/companiesList your bookmarked companies.
curl "https://huntukvisasponsors.com/public/v1/user/bookmark/companies" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/user/bookmark/companiesBookmark a company by its ID.
| Name | Type | Required | Description |
|---|---|---|---|
idbody | yes | Company ID (CUID) |
curl -X POST "https://huntukvisasponsors.com/public/v1/user/bookmark/companies" \
-H "Authorization: Bearer huvs_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"id":"id_value"}'/user/bookmark/companies/{id}Remove a company from your bookmarks.
| Name | Type | Required | Description |
|---|---|---|---|
idpath | string | yes | Company ID (CUID) |
curl -X DELETE "https://huntukvisasponsors.com/public/v1/user/bookmark/companies/id_here" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/user/bookmark/jobsList your bookmarked jobs.
curl "https://huntukvisasponsors.com/public/v1/user/bookmark/jobs" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"/user/bookmark/jobsBookmark a job by its ID or slug.
| Name | Type | Required | Description |
|---|---|---|---|
idOrSlugbody | yes | Job ID (CUID) or URL slug |
curl -X POST "https://huntukvisasponsors.com/public/v1/user/bookmark/jobs" \
-H "Authorization: Bearer huvs_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"idOrSlug":"idOrSlug_value"}'/user/bookmark/jobs/{idOrSlug}Remove a job from your bookmarks.
| Name | Type | Required | Description |
|---|---|---|---|
idOrSlugpath | string | yes | Job ID (CUID) or URL slug |
curl -X DELETE "https://huntukvisasponsors.com/public/v1/user/bookmark/jobs/company-name-abc123xyz456" \
-H "Authorization: Bearer huvs_YOUR_API_KEY"The API returns standard HTTP status codes. Error responses include a JSON body with an error field.
{
"error": "rate limit exceeded, cost: 5 credits"
}| Status | Meaning |
|---|---|
| 400 | Bad Request — invalid parameters |
| 401 | Unauthorized — missing or invalid API key |
| 403 | Forbidden — key lacks permission (e.g. free tier) |
| 404 | Not Found — resource does not exist |
| 429 | Too Many Requests — rate limit exceeded, check Retry-After header |
| 500 | Internal Server Error — unexpected server issue |