Fewer jobs than before? We removed 3.7 million closed, copied and fake listings in two weeks. See how we keep jobs real

Job Search API

API reference

Five endpoints over HTTPS that return JSON. Every request carries your API key; every job you receive for the first time in a calendar month uses one credit.

Authentication

Create a key in the dashboard and send it as a bearer token (or in an X-API-Key header). Keys are secrets: call the API from your server, never from a browser or an app. The base URL is https://findyourcareer.io/api/v1.

Request
curl "https://findyourcareer.io/api/v1/jobs?title=data+engineer&country=de&work_arrangement=remote&limit=2" \
  -H "Authorization: Bearer $FYC_API_KEY"

Endpoints

EndpointWhat it doesCredits
GET /jobsSearch jobs, newest first.1 per job not yet received this month
GET /jobs/{id}One job with its full description. 404 once it has closed.1, or 0 if already received this month
GET /changesIds of jobs added, updated or closed since your last call. Growth and larger plans.None
GET /usageYour plan, this month's usage and your request limits.None
GET /filtersEvery search parameter and the country codes.None

Job fields

Null means the posting does not say; nothing is guessed.

FieldWhat it is
idStable id of the job. The same job keeps its id for as long as it is listed.
title, companyAs the employer wrote them.
company_website, company_logoThe employer's site and logo, where known.
location, city, countryWhere the job is. country is a two-letter ISO code.
additional_locationsOther places the same posting is open in.
work_arrangementremote, hybrid or onsite.
remote_scopeWho may apply to a remote job: worldwide, region or country. Null when the posting does not say.
eligible_statesThe states a remote job requires you to live in, as ISO 3166-2 codes such as US-FL.
employment_type, job_levelFull-time, contract and so on; entry to lead.
min_years_experience, max_years_experienceYears of experience the posting asks for.
skills, languagesSkills the job lists and the working languages it requires.
visa_sponsorship, security_clearanceTrue, false, or null when the posting does not say.
salarymin, max, currency and period, as the employer stated them.
benefitsBenefits named in the posting.
posted_at, first_seen_at, last_checked_atWhen the employer posted it, when we first saw it and when we last confirmed it is still listed.
application_deadlineLast day to apply, when the posting states one.
republish_countHow often the employer re-posted the job.
ghost_score, ghost_level0 to 100: how likely the job is a ghost job, from how long it has been open, re-posts and refreshed dates. 50 and up is high.
sourceThe applicant tracking system or feed the job came from.
apply_urlThe employer's own application page.
excerpt, descriptionThe first 500 characters, and the full text on request.
urlThe job's page on findyourcareer.io.

GET /changes

Call it once without parameters to get your starting position in next_after. From then on pass that value as after: you get the ids that changed since, each live (new or updated; fetch it with GET /jobs/{id}) or removed (closed).

ParameterMeaning
afternext_after of the previous page. Leave it out on the first call to get the current position.
limitChanges per page, 1 to 1000.

Plans and limits

A credit is one unique job per calendar month (UTC). The allowance resets on the first of the month. Requests that return no new jobs cost nothing.

PlanJobsRequests per secondJob requests at onceChanges feed
Test key500 in total11No
Starter25,000 a month22No
Growth100,000 a month54Yes
Scale400,000 a month158Yes
EnterpriseCustomCustomCustomYes

When the allowance is used up, a page is cut short (truncated_by_quota) and jobs you already received stay available. Switch on extra jobs in the dashboard to continue at your plan's rate per 1,000; they appear on your next invoice.

Errors

An error is a JSON body { "error": { "code", "message" } } with the HTTP status below. Rate-limit responses also carry a Retry-After header.

CodeStatusMeaning
INVALID_PARAMETERS400A parameter is unknown or has a wrong value. issues names each one.
INVALID_CURSOR400The cursor is malformed or was made with other filters.
SEARCH_TOO_BROAD400The search took too long. Narrow it; retrying unchanged will not help.
UNAUTHORIZED401The key is missing or not valid.
KEY_REVOKED401The key was revoked in the dashboard.
PAYMENT_REQUIRED402The last payment failed. Update the payment method.
QUOTA_EXCEEDED402The allowance is used up and extra jobs are off. The response carries usage and reset_at.
ACCOUNT_BLOCKED403API access is suspended for the account.
PLAN_REQUIRED403The endpoint is not part of the account's plan.
NOT_FOUND404The job is not listed (any more).
RATE_LIMITED429More requests per second than the plan allows. Wait retry_after_seconds.
TOO_MANY_CONCURRENT_REQUESTS429More job requests in flight than the plan allows.
SERVICE_UNAVAILABLE503A temporary problem on our side. Retry after retry_after_seconds.

Using the data

You may show the jobs in your own product and link to the employer's application page. Reselling the data as a feed, dataset or competing API is not allowed. Read the API licence terms.