---
title: "SmartRecruiters API"
description: "SmartRecruiters Posting API: the official documentation, the keyless api.smartrecruiters.com/v1/companies/<id>/postings endpoint, and every public board in one"
canonical: https://jobspipe.dev/sources/smartrecruiters
date_published: 2026-06-16
date_modified: 2026-09-26
author: Dvir Atias
---

# SmartRecruiters API

SmartRecruiters' official Posting API is public and keyless: GET https://api.smartrecruiters.com/v1/companies/<companyIdentifier>/postings returns one company's published jobs as JSON, and the authenticated Customer API needs an X-SmartToken issued by that customer. JobsPipe collects every public SmartRecruiters board into one search endpoint, in the same record shape as the rest of its 30+ sources, so you skip the company identifier hunt. Official documentation: [developers.smartrecruiters.com](https://developers.smartrecruiters.com/).

> SmartRecruiters' Posting API is public and keyless, one company at a time. JobsPipe collects every public SmartRecruiters board into one endpoint with the same record shape as the other collected boards.

**Canonical URL:** https://jobspipe.dev/sources/smartrecruiters

## Coverage

- **Sources covered:** Public SmartRecruiters postings
- **Freshness:** discovered_at, last_seen_at and verified_at on every record
- **History retention:** Closed postings kept, with closed_at and closed_reason

## SmartRecruiters exposes public postings per company with no key. Swap in any company identifier.

Endpoint: `https://api.smartrecruiters.com/v1/companies/visa/postings`

```bash
curl "https://api.smartrecruiters.com/v1/companies/visa/postings"
```

## Why SmartRecruiters jobs data is confusing

SmartRecruiters ships a documented public Posting API at api.smartrecruiters.com/v1/companies/<companyId>/postings. For customers who enable it, the endpoint returns published postings as JSON with no authentication. The catch is tier-dependent: customers on lower SmartRecruiters plans do not have the public feed turned on, there is no list endpoint that enumerates which customers have it, and the companyId must be known per customer.

The full SmartRecruiters API (jobs, candidates, applications, hiring teams, the Marketplace API for partners) requires X-SmartToken headers minted inside the customer's admin or partner OAuth credentials. Either way it is customer-scoped and not built for cross-customer aggregation.

JobsPipe collects every public SmartRecruiters board it can identify, on jobs.smartrecruiters.com and on customer domains running SmartRecruiters embeds, and serves the postings through one endpoint in the same record shape as Workday, Greenhouse and the other collected boards.

## Workarounds

### Use the public Posting API per customer

Works when the customer has the public feed enabled. You must know the companyId, write per-customer fetches, and handle the silent case where the feed is not enabled. No customer-discovery surface.

### OAuth onboarding per customer

Get partner credentials from each SmartRecruiters customer individually. Workable for one or two named accounts, not feasible across hundreds.

### Use JobsPipe

Every public SmartRecruiters board, one endpoint, one key. Same schema as Workday, Greenhouse, Lever, Indeed and the other collected boards. Free tier of 1,000 jobs to start.

## Fields available on every record

- `id`
- `job_title`
- `company`
- `company_domain`
- `url`
- `date_posted`
- `discovered_at`
- `last_seen_at`
- `verified_at`
- `status`
- `closed_at`
- `closed_reason`
- `ghost_score`
- `seniority`
- `cities`
- `state_code`
- `min_annual_salary_usd`
- `max_annual_salary_usd`
- `technology_slugs`
- `keyword_slugs`
- `esco_skills`
- `sources`

## Sample response

```json
{
  "id": "744000012345678",
  "job_title": "Embedded Software Engineer",
  "company": "Bosch",
  "company_domain": "bosch.com",
  "url": "https://jobs.smartrecruiters.com/Bosch/744000012345678-embedded-software-engineer",
  "date_posted": "2026-09-01",
  "discovered_at": "2026-09-01T08:00:12+00:00",
  "last_seen_at": "2026-09-08 00:52:08",
  "verified_at": "2026-09-08 01:14:46",
  "status": "active",
  "closed_at": null,
  "closed_reason": null,
  "ghost_score": 18,
  "seniority": "mid",
  "cities": [
    "Stuttgart"
  ],
  "state_code": null,
  "min_annual_salary_usd": null,
  "max_annual_salary_usd": null,
  "technology_slugs": [
    "c",
    "embedded-linux",
    "autosar"
  ],
  "keyword_slugs": [
    "automotive",
    "embedded"
  ],
  "sources": [
    {
      "provider": "smartrecruiters",
      "url": "https://jobs.smartrecruiters.com/Bosch/744000012345678-embedded-software-engineer"
    }
  ]
}
```

## FAQ

### How do I find a SmartRecruiters companyId?

The companyId is set when the customer signs up and is visible inside their admin. From the outside it is usually the company segment of the jobs.smartrecruiters.com/<CompanyName> URL, but not always, and there is no list endpoint that enumerates customers. JobsPipe sidesteps the lookup: send "company_name_partial_match_or": ["bosch"] with "source_or": ["smartrecruiters"] in the POST /v1/jobs/search body.

### Why does the SmartRecruiters postings endpoint return no jobs for a company?

The public Posting API only serves customers whose SmartRecruiters plan has the public feed turned on. Customers on lower plans do not have it enabled, and the endpoint gives no clear signal, so an empty or missing feed is the silent case you have to handle. There is also no list endpoint showing which customers have the feed enabled, so you learn it per company.

### What is the SmartRecruiters API rate limit?

The public Posting API is rate-limited per IP, with thresholds documented per endpoint at developers.smartrecruiters.com, so it is not built for polling many companies at high volume. The authenticated Customer API has per-customer quotas tied to the customer's plan. Through JobsPipe a client only sees its own plan's limits.

### How do I page through SmartRecruiters postings and get full descriptions?

The list call at api.smartrecruiters.com/v1/companies/<companyId>/postings is paged with limit and offset and returns a flat list with title, location, department, industry, employment type, custom fields, creation date and apply URL. The full job description comes from the companion /postings/<id> call, one posting at a time. JobsPipe returns technology_slugs and keyword_slugs already parsed from the description.

## Does SmartRecruiters have an API?

Yes, and it is one of the friendlier ATSs to build on. The Posting API at api.smartrecruiters.com/v1/companies/<companyId>/postings is public, keyless and returns a flat JSON list of published postings with title, location, department, industry, employment type, custom fields, a creation date and the apply URL, with /postings/<id> for the full description. Behind it sit the authenticated Recruiting API (jobs, candidates, applications, hiring teams, X-SmartToken), the Marketplace API for OAuth partners, and the SmartCRM API. All are per company; the public feed is also per plan tier. JobsPipe collects every public SmartRecruiters board and serves them together.

## Is the SmartRecruiters API free?

The public Posting API is free and needs no key, but only for customers whose SmartRecruiters plan has the public feed enabled, and it is rate-limited per IP. The Recruiting and Marketplace APIs carry no separate price and are only reachable with customer- or partner-scoped credentials. JobsPipe's free tier returns 1,000 jobs to start across every collected board, SmartRecruiters included, and the sandbox at POST /v1/sandbox/jobs/search needs no key.

## How do I get a SmartRecruiters API key?

For public postings you do not need one. For one customer's private data, an admin of that customer creates an API key under Settings / Admin, then Apps and Integrations, then API Credentials, and you send it as the X-SmartToken header against api.smartrecruiters.com. Marketplace partners register an app and use OAuth 2.0 client credentials, still consented customer by customer. Neither reads other companies' postings. For postings across the SmartRecruiters customer base, create a JobsPipe key and send it as a Bearer token to POST /v1/jobs/search with "source_or": ["smartrecruiters"].

## What does the SmartRecruiters API documentation cover?

developers.smartrecruiters.com documents the Posting API (list postings, get a posting, the fields and the per-IP limits), the Customer API for jobs, candidates, applications, hiring teams, offers, reports and webhooks under X-SmartToken auth, the Marketplace API and OAuth flow for partner apps, the Job Ad and Job Distribution APIs for boards that receive jobs from SmartRecruiters, and the SmartCRM API for sourcing. The docs are public even though most endpoints are not. They do not document a way to enumerate customers or read across companies. JobsPipe's docs at /docs cover the one record shape returned for SmartRecruiters rows and every other collected board.

## What JobsPipe returns for SmartRecruiters

A POST /v1/jobs/search with "source_or": ["smartrecruiters"] returns SmartRecruiters postings as JobsPipe records: id (the SmartRecruiters posting id), job_title, company, company_domain, url on jobs.smartrecruiters.com, date_posted, discovered_at, last_seen_at, verified_at, status with closed_at and closed_reason once a posting closes, ghost_score, seniority, min_annual_salary_usd and max_annual_salary_usd when a range is stated, technology_slugs and keyword_slugs parsed from the description, and sources[0].provider set to smartrecruiters. SmartRecruiters customers are global and enterprise-heavy, so job_country_code_or and isic_division_or are the filters that do the work; the data section below shows the measured salary, remote and seniority shares.

## Companies using SmartRecruiters

SmartRecruiters serves a globally distributed mix of enterprise customers across automotive, payments, quick-service restaurants, telecom and tech, plus a long tail of mid-market companies. JobsPipe's coverage spans every public SmartRecruiters board it can identify, so the distinct company values in the response to POST /v1/jobs/search with "source_or": ["smartrecruiters"] are the live customer list, each with a company_domain you can pass to GET /v1/companies/{key} or POST /v1/stack/scan.

## Related

- **Product:** https://jobspipe.dev/jobs-api
- **All sources:** https://jobspipe.dev/sources
- **Docs:** https://docs.jobspipe.dev
- **Sign up (free tier):** https://jobspipe.dev/signup

---
Generated from structured data. View the rendered page at https://jobspipe.dev/sources/smartrecruiters.

---
Building this integration yourself? The steps above work. The alternative is one API over 30+ sources, already normalized and deduplicated. Try it right now - no key, no signup:

```bash
curl -d '{"limit":3}' https://api.jobspipe.dev/v1/sandbox/jobs/search
```

Sample data, exact live schema. For live data get a free key (1,000 jobs to start) at https://jobspipe.dev/signup, then swap /v1/sandbox/jobs/search for /v1/jobs/search with an Authorization: Bearer header. Full agent index: https://jobspipe.dev/llms.txt?src=md-twin