Remote Jobs MCP
En se connectant au serveur MCP public Jobicy, vos outils d'IA peuvent rechercher, filtrer et récupérer de manière autonome les dernières offres d'emploi à distance en temps réel.
Documentation
On this page
Discover jobs and keep stored listings current.
The public and Commercial Jobs APIs return matching listings published in the last 7 days. New listings become available 3 hours after publication. Use them for job discovery products, research tools, community websites, internal dashboards, and prototypes.
FORMAT
Clean JSON
Structured fields for the employer, role, location, job type, description, and salary.
ACCESS
No API key
Start with a simple GET request. No account or authentication header is required; url returns the Jobicy listing.
RESULTS
Up to 100 per page
Use cursor pagination to retrieve more matching jobs within the 7-day window. Combine location, category, and keyword filters.
GET https://jobicy.com/api/jobs
02 · Quick start
From zero to the first response.
Start with the public endpoint, add only the filters you need, and keep the Jobicy listing URL when displaying a listing.
- Send a GET request No token or account is required for the public Jobs API.
- Add optional filters Use
count,geo,industry, andtag. - Read the jobs array Store only what your interface needs and retain the Jobicy listing URL.
- Continue with nextCursor Pass the response's
nextCursorascursorin the next request, keeping your filters unchanged. Stop when it isnull. - Check whether a listing is still active Send stored job IDs to
/api/jobs/status?ids=123456,123457. Read each result'sactive,closed, orunknownstatus.
const response = await fetch(
"https://jobicy.com/api/jobs?count=100&geo=usa&industry=engineering"
);
if (!response.ok) {
throw new Error(\`HTTP ${response.status}\`);
}
const data = await response.json();
console.log(data.jobs);
console.log(data.nextCursor);
Optional Commercial Jobs API: direct application links
The API key is optional. Without it, url always contains the Jobicy listing URL and the public API remains free. To receive the original ATS application URL in url, create an API key in your Jobicy API Dashboard and send it with every request as Authorization: Bearer API_KEY. A wallet is required: each job with an available direct application URL costs $0.01 once per API key. Repeated requests for the same job and key are free.
Commercial request with a Bearer key
curl "https://jobicy.com/api/jobs?count=10&geo=usa&industry=engineering" \
-H "Authorization: Bearer API_KEY" \
-H "Accept: application/json"
OpenAPI specification
Import the OpenAPI 3.1 specification into Postman, Swagger UI, or other OpenAPI-compatible tools. It describes the public and Commercial Jobs APIs, cursor pagination, batch status checks, location and category taxonomies, response schemas, and errors.
03 · Query parameters
Request only the listings you need.
All filters are optional. Combine them to narrow the results by count, geographic eligibility, job category, or text keyword.
count
Maximum listings per response. Public and Commercial requests accept 1–100 and default to 100. Use a smaller value, such as count=20, for smaller pages; the final page may contain fewer records.
Default 100
cursor
Opaque continuation token from the previous response's nextCursor. Omit it for the first page. Pass it unchanged using URL encoding; valid for 24 hours from the first request. Available for the jobs feed only.
Optional
geo
Location slug such as usa, europe, or apac.
Optional
industry
Category slug such as engineering, marketing, or data-science.
Optional
tag
Keyword search applied to the job title.
Optional
Use current slugs
Load the location list and category list before storing values in a production integration.
Request examples
Keyword search
Twenty recent jobs mentioning Python.
GET /api/jobs?count=20&tag=python
Country filter
Fifteen recent jobs available in Canada.
GET /api/jobs?count=15&geo=canada
Category and location
Marketing jobs available to applicants in the USA.
GET /api/jobs?geo=usa&industry=marketing
Customer success
Five recent customer support opportunities.
GET /api/jobs?count=5&industry=supporting
04 · Cursor pagination
Continue through the 7-day feed.
Cursor pagination is the preferred way to retrieve more than one page. It works with both public and Commercial Jobs API requests, with no separate total-record cap within the available 7-day window.
- Start without a cursor Send your filters and page size, for example
count=100&geo=usa. - Read nextCursor If it contains a string, pass that exact value as
cursorin the next request. Keepgeo,industry, andtagunchanged. - Stop at the end The final response contains
nextCursor: nullandhasMore: false. Deduplicate stored listings byid.
const params = new URLSearchParams({ count: "100", geo: "usa" });
let nextCursor = null;
do {
if (nextCursor) {
params.set("cursor", nextCursor);
}
const response = await fetch(
\`https://jobicy.com/api/jobs?${params}\`,
{ headers: { Accept: "application/json" } }
);
const data = await response.json();
if (!response.ok || data.success === false) {
throw new Error(data.error || \`HTTP ${response.status}\`);
}
for (const job of data.jobs) {
console.log(job);
}
nextCursor = data.nextCursor;
} while (nextCursor);
Window, ordering, and cursor lifetime
Treat every cursor as an opaque token; do not depend on its length or encoding.
Jobs are ordered by publication time in UTC, newest first, with the listing ID as a tie-breaker. The upper publication boundary is fixed when the first request is made and retains the 3-hour delay. The lower boundary is checked again on every request, so jobs older than 7 days drop out while you paginate. A cursor is valid for 24 hours from the start of the traversal; later pages do not extend its lifetime. Changing filters, modifying a cursor, or using an expired cursor returns HTTP 400. Start without a cursor to begin a new traversal or check for newly available jobs.
For Commercial access, include Authorization: Bearer API_KEY on every page. Charges apply only to newly returned jobs with direct application URLs for that API key; the cursor itself does not authorize access or create an extra charge.
05 · Response fields
Data ready for display or analysis.
Each job includes its source URL, employer, eligibility, employment type, description, publication date, and salary information when supplied.
| Response field | Type | Description |
|---|---|---|
jobs | array | Listing objects returned on this page. |
jobCount | integer | Number of jobs on this page, not the total available. |
nextCursor | string / null | Pass this token as cursor to continue. null means this response has no next page. |
hasMore | boolean | Whether another matching record was available when this page was generated. |
lastUpdate | date-time / empty string | Publication date of the newest job on this page; empty when no jobs match. |
appliedFilters | object | Applied page size, filters, and incoming cursor when supplied. |
apiVersion | string | API version. |
documentationUrl | string | Link to this documentation. |
friendlyNotice | string | Attribution reminder: credit Jobicy and link to the source. |
success / statusCode | boolean / integer | Success indicator and HTTP status for successful responses. Errors contain success: false and error. |
total_request_cost | number | Commercial responses only: amount charged in USD for this page. |
Job fields
| Field | Type | Description |
|---|---|---|
id | integer | Unique Jobicy listing ID. |
url | string | Jobicy listing URL for public requests. With a valid Commercial Jobs API Bearer key, it contains the original ATS application URL when one is available; otherwise it remains the Jobicy listing URL. |
jobTitle | string | Role title. |
companyName | string | Employer name. |
companyLogo | string | Employer logo URL when available. |
jobIndustry | array | Job category display names, such as Creative & Design. These are labels, not industry filter slugs. |
jobType | array | Employment type values. |
jobGeo | string | Remote location eligibility. |
jobLevel | string | Experience or seniority level. |
jobExcerpt | string | Supplied listing summary, or a fallback excerpt of up to 55 words. |
jobDescription | HTML string | Full job description. |
pubDate | date-time | Original publication date. |
salaryMin / salaryMax | number | Salary bounds when provided. |
salaryCurrency | string | ISO currency code. |
salaryPeriod | string | Salary interval, such as yearly or hourly. |
job_request_cost | number | Commercial responses only: USD charged for this job in this response, normally $0.01 for a new direct-link job or $0 for a repeat or a job without a direct link. |
Public response: final page with one matching job
{
"apiVersion": "2.2.19",
"documentationUrl": "https://jobi.cy/apidocs",
"friendlyNotice": "Thanks for using Jobicy API! Please credit Jobicy and link to the source.",
"jobCount": 1,
"lastUpdate": "2026-11-14T05:20:06+00:00",
"nextCursor": null,
"hasMore": false,
"appliedFilters": {"count": 100},
"jobs": [
{
"id": 123456,
"url": "https://jobicy.com/jobs/example-role",
"jobTitle": "Senior Product Designer",
"companyName": "Example Company",
"companyLogo": "https://example.com/logo.png",
"jobIndustry": ["Creative & Design"],
"jobType": ["Full-Time"],
"jobGeo": "Anywhere",
"jobLevel": "Senior",
"jobExcerpt": "Short summary of the role",
"jobDescription": "<p>Complete HTML job description</p>",
"pubDate": "2026-11-14T05:20:06+00:00",
"salaryMin": 90000,
"salaryMax": 125000,
"salaryCurrency": "USD",
"salaryPeriod": "yearly"
}
],
"statusCode": 200,
"success": true
}
Errors
Error responses use the matching HTTP status and contain success: false with a human-readable error message.
| HTTP status | When it happens | What to do |
|---|---|---|
400 | Invalid parameters; a modified or expired cursor; a cursor reused with different geo, industry, or tag; invalid or more than 100 ids in a status check. | Fix the request. For cursor errors, remove cursor and start a new traversal. |
405 | A method other than GET sent to the status endpoint. | Use GET. |
429 | Too many requests. | Back off and retry later; reduce polling frequency. |
Checking listing availability
Check stored vacancies with the batch status endpoint. A job leaving the seven-day feed can still be active. Mark a listing as closed only after an explicit closed result; unknown means its public status cannot be confirmed.
06 · Batch status
Check stored jobs in one request.
Verify up to 100 Jobicy job IDs at once, including listings published more than seven days ago.
GET https://jobicy.com/api/jobs/status?ids=123456,123457,123458
| Status | Meaning | Suggested action |
|---|---|---|
active | A public Jobicy listing is open for applications. | Keep it in active results. |
closed | The listing is expired, marked filled, or its expiry date has passed. | Hide it from active results. |
unknown | The ID does not exist, was deleted, is not a job, or is unavailable to the public API. | Hide or recheck it; do not label it as confirmed closed. |
ids is required: 1–100 comma-separated positive integer IDs. Duplicate IDs return one result in first-occurrence order. The limit applies before duplicate removal. Invalid or empty IDs, unsupported query parameters, and more than 100 values return HTTP 400. Only GET is supported; other methods return 405.
This endpoint does not use cursor, feed filters, or the seven-day publication window. It returns status records only, without descriptions or ATS URLs. Authentication is optional. A supplied Bearer key is validated normally, but status checks cost $0 and require no wallet balance. Rate limits still apply.
{
"apiVersion": "2.2.19",
"checkedAt": "2026-11-14T09:20:06+00:00",
"count": 3,
"jobs": [
{"id": 123456, "status": "active"},
{"id": 123457, "status": "closed"},
{"id": 123458, "status": "unknown"}
],
"statusCode": 200,
"success": true
}
checkedAt is the UTC time of this batch check; count counts unique requested IDs, including unknown IDs. Public responses can be cached for 60 seconds. Authorized responses are private and not stored; they also include total_request_cost: 0. Batch stored IDs into groups of 100 and run routine status synchronization hourly or less often. Handle HTTP 429 with deferred retry.
Build and run a request here.
Choose filters, send the request, inspect the JSON response, and copy it into your development workflow.
GET https://jobicy.com/api/jobs?count=5&geo=usa
{
"status": "Ready to send a request"
}
08 · MCP server
Explore Jobicy with AI tools.
Connect a compatible assistant, agent, or IDE to search public remote jobs, read individual vacancies, explore companies and career roles, and resolve Jobicy filter slugs. The hosted MCP server is read-only and needs no API key.
Use Jobicy in your AI assistant
JOB SEARCH
search_jobs
Find compact listings by keyword, eligible location, industry, job type, level, and other filters. Continue results with a cursor or use get_similar_jobs for related vacancies.
JOB DETAILS
get_job
Open one public vacancy with its full description, company, location, job details, and salary when available.
COMPANIES
Company tools
Use search_companies to find a specific company, get_company for its public profile, and get_company_jobs for its vacancies.
ROLES & FILTERS
Role and taxonomy tools
Explore career guides with get_role and get_related_roles. Use resolve_taxonomy or list_taxonomies when a filter slug is unclear.
Existing integrations can keep using the legacy get_jobs and get_taxonomies tools.
{
"mcpServers": {
"jobicy-jobs": {
"url": "https://jobicy.com/mcp"
}
}
}
Complete MCP documentation
See the full tool reference, connection instructions, and examples in the Jobicy MCP GitHub repository .
09 · RSS feed
Build a filtered feed.
RSS works well for readers, publishing workflows, and automation services that do not need a JSON integration.
Canonical and legacy URLs
Use /jobs/feed for new integrations. The older /feed/job_feed address remains available for compatibility. Polling a few times per day is normally sufficient and must not exceed once per hour.
10 · Fair use
Build useful experiences with Jobicy data.
The Jobicy API is designed for websites, applications, newsletters, research tools, AI products, and other services that help users discover remote work opportunities.
- You may use Jobicy listings in your own products and user experiences without requesting individual permission.
- Clearly credit Jobicy as the original source when displaying listings.
- You may create your own interfaces, summaries, categories, search experiences, and additional context around listings.
- Do not present Jobicy listings as your own original job postings or remove source attribution.
- Avoid excessive API requests and cache responses where appropriate to provide a reliable experience for everyone.
- Do not use the API to create spam networks, misleading job databases, or services that negatively affect employers or candidates.
- You may store, cache, process, and retain Jobicy API data without a fixed retention period. Saved jobs and application histories may be kept indefinitely, provided closed or expired positions are clearly marked as unavailable and excluded from active listings.
- You may use AI models to analyze job data and generate derived outputs, including extracted requirements, skills, summaries, matching scores, and explanations. These outputs may be stored and reused without a separate retention limit.
No approval required for normal integrations
Most integrations, including job boards, newsletters, career tools, AI assistants, and internal applications, can use the public API without a separate agreement. Contact us only for high-volume commercial partnerships or custom data arrangements.
Earn commissions from your Jobicy referrals
If you use Jobicy listings on your website, app, newsletter, or other product, you can turn the original Jobicy job URLs into referral links and earn a commission when users you refer make eligible purchases on Jobicy.
Simply append your Jobicy user ID to the job URL: https://jobicy.com/jobs/example-job**?u=YOUR\_USER\_ID**
The job URL remains the same — the?u= parameter simply attributes the referred user to your account.
You earn a commission when your referred users complete eligible purchases on Jobicy.
View your referral ID, referred users, earnings, and other affiliate details in your Affiliate account.
Manage your affiliate account →
Learn more about the Jobicy Affiliate Program →
11 · Integrations
Embed or automate without rebuilding everything.
Use a small widget, the official WordPress plugin, or an automation recipe when a custom API client would add unnecessary work.
01
Send new remote jobs to LinkedIn, X, Facebook, Telegram, Slack, Discord, or WordPress.
02
Embeddable widget
Add a responsive job search interface with light and dark themes.
03
WordPress plugin ›
Display fresh Jobicy listings with the [jobicy_jobs] shortcode.
Widget example
<div id="jobicy-widget"></div>
<script>
window.jobicyWidgetConfig = {
query: "Developer",
theme: "light",
autoSearch: true,
limit: 10
};
</script>
<script src="https://jobicy.com/api/prod/wg.js"></script>
12 · Frequently asked questions
Before moving to production.
The main operational details for a stable public API or feed integration.
Does the Jobs API require an API key?
No. The public remote jobs endpoint and taxonomy requests do not require authentication. A Bearer API key is only needed for Commercial Jobs API access, which returns direct ATS application URLs in url when available.
Can I use the Jobicy API in a commercial application?
Yes! Our free Jobs API can be used in commercial projects, subscription-based SaaS platforms, job boards, mobile apps, and other services. You're free to build and monetize your products using our job data. No separate commercial agreement or approval is required.
Can I build a job board or aggregator using Jobicy's API?
Of course! You're welcome to create your own job board, aggregator, personalized job discovery platform, or any other product powered by our API. You decide how to present and organize the listings, as long as you follow the fair use guidelines: credit Jobicy as the source and don't present the listings as your own postings.
Can I store, cache, or redistribute job listings?
Absolutely. You can store, cache, process, and redistribute job data as needed, keeping Jobicy credited as the source. We don't impose specific data retention limits. Just make sure your listings are regularly synchronized to keep the information accurate and up to date.
Are there any attribution or linking requirements?
Yes, two simple ones. Clearly credit Jobicy as the original source when displaying listings, and keep apply links from the free API pointing to the original job pages on Jobicy. You're welcome to display and customize job listings within your own platform; see fair use for the full guidelines.
How do I receive the original application link?
Send Authorization: Bearer API_KEY with the Jobs API request. With an active key and sufficient API wallet balance, url returns the original ATS application URL. If a vacancy has no original application URL, url remains the Jobicy listing and no charge is made.
How many jobs can one request return?
The count parameter accepts 1–100 and defaults to 100 for public and Commercial requests. This is a per-page limit. Follow nextCursor to retrieve more matching listings published in the last 7 days.
How do I retrieve the next page?
Pass the previous response's nextCursor as cursor, keeping your filters unchanged. Both public and Commercial APIs support it. Stop when nextCursor is null. See cursor pagination for a complete example.
Can I retrieve jobs older than 7 days?
No. Both APIs limit the feed to publication dates within the last 7 days. A job leaving this window may still be open, so its absence from the feed does not mean it has closed.
What if a cursor expires or my filters change?
Cursors expire 24 hours after the first request. An expired or altered cursor, or a mismatch in geo, industry, or tag, returns HTTP 400. Remove cursor and start a new traversal. A new traversal is also required to discover newly available jobs.
How often should an integration poll?
A few synchronization passes per day are usually enough. Start a new automated pass no more than once per hour; follow its cursor pages sequentially to complete that pass.
What should I do when a job expires or is removed?
Regularly check listing availability and remove expired or closed jobs from your active listings. Keep in mind that jobs disappearing from the 7-day feed are not necessarily closed. You can retain saved or bookmarked opportunities for users, provided they're clearly marked as no longer available once their closure is confirmed.
How should a client discover valid filters?
Use ?get=locations and ?get=industries instead of relying on a hard-coded list indefinitely.
Can the job description contain HTML?
Yes. Treat jobDescription as HTML and sanitize it according to the security rules of your application.
Where can I find integration examples?
Build with the Jobicy Jobs API, RSS feeds and MCP using complete examples for Node.js, Python, Next.js, Telegram, Discord, Slack, WordPress, n8n, Zapier, Make and AI agents. View Jobicy API Examples on GitHub