---
title: "Teamtailor API"
description: "Teamtailor API: the per-tenant JSON:API behind a key, the public jobs.json feed on teamtailor.com career sites, and every public Teamtailor posting in one call."
canonical: https://jobspipe.dev/sources/teamtailor
date_published: 2026-06-16
date_modified: 2026-09-26
author: Dvir Atias
---

# Teamtailor API

Teamtailor's JSON:API at api.teamtailor.com/v1 takes a key minted inside one customer's admin and reads that tenant only; separately, Teamtailor career sites publish a keyless jobs.json feed of that one employer's postings where the feed is enabled. Neither spans employers. JobsPipe collects public Teamtailor postings into one search endpoint, in the same record shape as the rest of its 30+ sources. [docs.teamtailor.com](https://docs.teamtailor.com/).

> Teamtailor's API key and its public jobs feed both cover one employer at a time, and there is no list of customers. JobsPipe collects public Teamtailor postings into one endpoint with the same record shape as the other collected boards.

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

## Coverage

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

## A Teamtailor career site with the feed enabled serves its jobs as a JSON Feed: no key needed. Swap in any company's career site.

Endpoint: `https://career.teamtailor.com/jobs.json`

```bash
curl "https://career.teamtailor.com/jobs.json"
```

## Why Teamtailor jobs data is confusing

Teamtailor's API is a clean JSON:API surface at api.teamtailor.com/v1 (an Authorization: Token token=<key> header plus an X-Api-Version header, /v1/jobs with page-based pagination), but every key is minted inside one customer's admin and reads that tenant only. There is no aggregator credential and no endpoint that enumerates Teamtailor customers.

Teamtailor career sites are public at <tenant>.teamtailor.com or on custom domains. Where the feed is enabled, a site also publishes its jobs as a keyless JSON Feed at /jobs.json, paged with a next_url link, one employer per feed; some sites turn it off. JobsPipe collects public Teamtailor postings and returns them with sources[0].provider set to teamtailor.

## Workarounds

### Get an API key from each Teamtailor customer

Works for one named tenant at a time. Each customer has to issue you a key.

### Read each career site's jobs.json feed

Works for employers whose career site you already know and that keep the feed enabled. Discovery, paging and the disabled-feed case are on you.

### Use JobsPipe

Public Teamtailor postings, one endpoint, the same schema as every other collected board. 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": "b7d40e19c6a2",
  "job_title": "Frontend Engineer",
  "company": "Halvard Energy",
  "company_domain": "halvardenergy.example",
  "url": "https://halvardenergy.teamtailor.com/jobs/6120457-frontend-engineer",
  "date_posted": "2026-09-18",
  "discovered_at": "2026-09-18T10:05:22+00:00",
  "last_seen_at": "2026-09-29 12:14:03",
  "verified_at": "2026-09-29 12:26:51",
  "status": "active",
  "closed_at": null,
  "closed_reason": null,
  "ghost_score": 6,
  "seniority": "mid",
  "cities": [
    "Stockholm"
  ],
  "state_code": null,
  "min_annual_salary_usd": null,
  "max_annual_salary_usd": null,
  "technology_slugs": [
    "react",
    "typescript"
  ],
  "keyword_slugs": [
    "frontend",
    "energy"
  ],
  "sources": [
    {
      "provider": "teamtailor",
      "url": "https://halvardenergy.teamtailor.com/jobs/6120457-frontend-engineer"
    }
  ]
}
```

## FAQ

### How do I find a company's Teamtailor career site?

Teamtailor career sites are public at <tenant>.teamtailor.com or on the customer's custom domain. There is no endpoint that enumerates Teamtailor customers, so reading those sites yourself works per employer you already know. A JobsPipe search with "source_or": ["teamtailor"] returns the employers behind public Teamtailor postings in the company field of each record.

### Does Teamtailor have a public feed of jobs?

Per career site, yes. Where the feed is enabled, a Teamtailor career site publishes its jobs as a keyless JSON Feed at /jobs.json, paged with a next_url link, and many sites also expose RSS. Each feed covers one employer, some sites turn it off, and there is no feed that spans Teamtailor customers.

### How does Teamtailor API authentication and pagination work?

Teamtailor's API is a JSON:API surface at api.teamtailor.com/v1 that takes the key in an Authorization: Token token=<key> header, with an X-Api-Version header and page-based pagination on /v1/jobs. A Teamtailor admin creates the key in the account's integration settings, choosing its scope. Each key reads that one tenant, and Teamtailor issues no cross-tenant or aggregator credential.

### How do I search Teamtailor jobs across employers?

Send "source_or": ["teamtailor"] in the JSON body of POST /v1/jobs/search and narrow with job_title_or, job_country_code_or or company_name_partial_match_or. Drop source_or to see the same employer's roles on every collected board; sources[0].provider on each record names the board it came from.

## Does Teamtailor have an API?

Teamtailor's API is a clean JSON:API surface at api.teamtailor.com/v1 (an Authorization: Token token=<key> header plus an X-Api-Version header, /v1/jobs with page-based pagination), but every key is minted inside one customer's admin and reads that tenant only. There is no aggregator credential and no endpoint that enumerates Teamtailor customers. Teamtailor career sites are public at <tenant>.teamtailor.com or on custom domains and, where the feed is enabled, publish their jobs as a keyless JSON Feed at /jobs.json.

## What JobsPipe returns for Teamtailor

A POST /v1/jobs/search with "source_or": ["teamtailor"] returns public Teamtailor postings as JobsPipe records: id, job_title, company, company_domain when it resolves, url on the company's Teamtailor career site, 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 the posting states a range, technology_slugs and keyword_slugs parsed from the description, and sources[0].provider set to teamtailor. Drop source_or to search every collected board at once.

## 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/teamtailor.

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