Jobicy developer resource

Remote Jobs API & RSS Feed

Add current remote jobs to apps, websites, AI tools, and automated workflows with a public REST endpoint, MCP server, RSS feed, or widget.

Public access
REST API Structured JSON
MCP AI tool access
RSS Filtered feeds
Widget Drop-in search
On this page
Endpoint
api/v2/remote-jobs
Authentication
Optional for direct ATS links
Updated
October 1, 2026

Discover jobs and keep stored listings current.

The public and Commercial Jobs APIs return matching listings published in the last 7 days. Use it 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 200 per page

Use cursor pagination to retrieve more matching jobs within the 7-day window. Combine location, category, and keyword filters.

Base request
GET https://jobicy.com/api/v2/remote-jobs

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.

  1. Send a GET request No token or account is required for the public Jobs API.
  2. Add optional filters Use count, geo, industry, and tag.
  3. Read the jobs array Store only what your interface needs and retain the Jobicy listing URL.
  4. Continue with nextCursor Pass the response's nextCursor as cursor in the next request, keeping your filters unchanged. Stop when it is null.
  5. Check whether a listing is still active Send stored job IDs to /api/v2/remote-jobs/status?ids=123456,123457. Read each result's active, closed, or unknown status.
JavaScript
const response = await fetch(
  "https://jobicy.com/api/v2/remote-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/v2/remote-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.

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–200 and default to 200. Use count=100 for smaller pages; the final page may contain fewer records.

Default 200
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 available job content.

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/v2/remote-jobs?count=20&tag=python

Country filter

Fifteen recent jobs available in Canada.

GET /api/v2/remote-jobs?count=15&geo=canada

Category and location

Marketing jobs available to applicants in the USA.

GET /api/v2/remote-jobs?geo=usa&industry=marketing

Customer success

Five recent customer support opportunities.

GET /api/v2/remote-jobs?count=5&industry=supporting

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.

  1. Start without a cursorSend your filters and page size, for example count=100&geo=usa.
  2. Read nextCursorIf it contains a string, pass that exact value as cursor in the next request. Keep geo, industry, and tag unchanged.
  3. Stop at the endThe final response contains nextCursor: null and hasMore: false. Deduplicate stored listings by id.
JavaScript: retrieve every available page
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/v2/remote-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

New cursors use a compact signed Base64URL representation. Previously issued cursors remain accepted within their original 24-hour 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.

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 fieldTypeDescription
jobsarrayListing objects returned on this page.
jobCountintegerNumber of jobs on this page, not the total available.
nextCursorstring / nullPass this token as cursor to continue. null means this response has no next page.
hasMorebooleanWhether another matching record was available when this page was generated.
lastUpdatedate-time / empty stringPublication date of the newest job on this page; empty when no jobs match.
appliedFiltersobjectApplied page size, filters, and incoming cursor when supplied.
apiVersionstringAPI version.
success / statusCodeboolean / integerSuccess indicator and HTTP status for successful responses. Errors contain success: false and error.
total_request_costnumberCommercial responses only: amount charged in USD for this page.

Job fields

FieldTypeDescription
idintegerUnique Jobicy listing ID.
urlstringJobicy 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.
jobTitlestringRole title.
companyNamestringEmployer name.
companyLogostringEmployer logo URL when available.
jobIndustryarrayJob category labels.
jobTypearrayEmployment type values.
jobGeostringRemote location eligibility.
jobLevelstringExperience or seniority level.
jobExcerptstringSupplied listing summary, or a fallback excerpt of up to 55 words.
jobDescriptionHTML stringFull job description.
pubDatedate-timeOriginal publication date.
salaryMin / salaryMaxnumberSalary bounds when provided.
salaryCurrencystringISO currency code.
salaryPeriodstringSalary interval, such as yearly or hourly.
job_request_costnumberCommercial 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-10-09T06:10:27+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-10-09T06:10:27+00:00",
      "salaryMin": 90000,
      "salaryMax": 125000,
      "salaryCurrency": "USD",
      "salaryPeriod": "yearly"
    }
  ],
  "statusCode": 200,
  "success": true
}
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.

Check stored jobs in one request.

Verify up to 100 Jobicy job IDs at once, including listings published more than seven days ago.

GET · Batch status
GET https://jobicy.com/api/v2/remote-jobs/status?ids=123456,123457,123458
StatusMeaningSuggested action
activeA public Jobicy listing is open for applications.Keep it in active results.
closedThe listing is expired, marked filled, or its expiry date has passed.Hide it from active results.
unknownThe 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.

JSON · Illustrative response
{
  "apiVersion": "2.2.19",
  "checkedAt": "2026-10-01T11:00:00+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.

Live API GET /api/v2/remote-jobs
Response
GET https://jobicy.com/api/v2/remote-jobs?count=5

{
  "status": "Ready to send a request"
}

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.

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.

MCP configuration
{
  "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 .

Build a filtered feed.

RSS works well for readers, publishing workflows, and automation services that do not need a JSON integration.

Generated feed URL
https://jobicy.com/jobs/feed
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.

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.

  1. You may use Jobicy listings in your own products and user experiences without requesting individual permission.
  2. Keep Jobicy as the original source and preserve the canonical Jobicy job URL when displaying listings.
  3. You may create your own interfaces, summaries, categories, search experiences, and additional context around listings.
  4. Do not present Jobicy listings as your own original job postings or remove source attribution.
  5. Avoid excessive API requests and cache responses where appropriate to provide a reliable experience for everyone.
  6. Do not use the API to create spam networks, misleading job databases, or services that negatively affect employers or candidates.
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 →

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

IFTTT applets ›

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.

Widget example

HTML
<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>

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.

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–200 and defaults to 200 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, with a 3-hour delay. 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 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.

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.

Integration examples on GitHub

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 

Ready to test an integration?

Start with the public endpoint, inspect current filter values, and move to MCP, RSS, or the widget when the use case is clear.

Jobs Talent AI Tools Salaries
Menu