> This page is for API, version 2026-01-01 (Stable) (default).
> For other versions, use one of these documentation indexes:
> - 2026-01-01 (Stable) (default): https://developer.deel.com/api/stable/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.deel.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.deel.com/_mcp/server.

# Retrieve a list of ATS job postings

GET https://api.letsdeel.com/rest/ats/job-boards/{job_board_id}/job-postings

Returns job postings for a specific job board, including publication status and nested job details, to monitor active postings on that board integration.

 **Token scopes**: `ats:read`, `worker:read`

Reference: https://developer.deel.com/api/reference/endpoints/ats-job-postings/retrieve-a-list-of-ats-job-postings

## Authentication

- `Authorization` header (bearer token, required) — ## Authentication The Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail. ```curl curl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \ -H 'Authorization: Bearer YOUR-TOKEN-HERE' ``` [Learn more about authentication](/api/authentication)
- `Authorization` header (bearer token, required) — Standard OAuth2 security scheme based on https://swagger.io/docs/specification/authentication/

## Servers

- `https://api.letsdeel.com/rest` (Production, default)
- `https://api-staging.letsdeel.com/rest` (Demo)

## Request

### Path parameters

- `job_board_id` (string, required) — Job Board ID must be a valid UUID

### Query parameters

- `cursor` (string, optional) — The cursor for pagination (optional)
- `limit` (integer, optional, default: 20) — Maximum number of records returned in one response (optional)

## Response

### 200

Successful operation.

- `data` (list of AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItems, required)
- `has_more` (boolean, required) — Indicates if there are more results available
- `next_cursor` (string, required, nullable) — Cursor for the next page of results
- `total_count` (integer, required) — Total number of job postings

## Errors

### 400 Bad Request Error

Operation failed.

- `errors` (list of AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaErrorsItems, required) — List of error objects

### 401 Unauthorized Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

### 403 Forbidden Error

Forbidden. ATS is not enabled for this organization or insufficient permissions.

- `errors` (list of AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaErrorsItems, required) — List of error objects

### 404 Not Found Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

### 500 Internal Server Error

Operation failed.

- `errors` (list of AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaErrorsItems, required) — List of error objects

## Types

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItems

Job posting with nested job details and publication status.

- `id` (string, required) — Unique identifier for the job posting
- `job` (AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJob, required) — Associated job information
- `title` (string, required) — Job posting title
- `job_id` (string, required) — Identifier of the underlying job this posting belongs to.
- `created_at` (string, required) — Creation timestamp
- `updated_at` (string, required) — Last update timestamp
- `publications` (list of AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsPublicationsItems, required) — Publication rows for this posting, one per job board integration, with current state.
- `richtext_description` (string, required, nullable) — Rich text description of the job posting
- `is_compensation_visible` (boolean, required) — Indicates if compensation details are visible to candidates
- `application_form` (AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsApplicationForm, optional, nullable) — Application form assigned to the job posting

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaErrorsItems

- `code` (string, required) — Machine-readable error code
- `message` (string, required) — Human-readable error message
- `field` (string, optional) — Request field related to the error, if applicable

### ApiErrorRequest

- `method` (string, optional) — The HTTP method of the failed request
- `url` (string, optional) — The relative URL of the failed request
- `status` (double, optional) — The status code of the response
- `api_req_id` (string, optional) — The request ID of the failed request
- `docs` (string, optional) — A link to the official documentation for the requested endpoint resource
- `source` (string, optional) — The source handler which produced the returned error
- `code` (double, optional) — The code of the source handler which produced the returned error

### ApiError

- `message` (string, optional) — A description of the returned error
- `path` (string, optional) — The JSON path where input validation failed

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJob

Associated job information

- `id` (string, required) — Unique identifier for the job
- `compensation` (AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobCompensation, required, nullable) — Compensation information for the job
- `job_locations` (list of AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobLocationsItems, required) — Locations associated with the job
- `job_employment_types` (list of AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobEmploymentTypesItems, required) — Employment types associated with the job
- `job_teams` (list of AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobTeamsItems, optional, nullable) — Teams associated with the job
- `job_departments` (list of AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobDepartmentsItems, optional, nullable) — Departments associated with the job

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsPublicationsItems

Publication information for different job boards

- `id` (string, required) — Unique identifier for the job posting publication
- `job_board` (AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsPublicationsItemsJobBoard, required) — Job board where the posting is published
- `current_state` (AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsPublicationsItemsCurrentState, required) — Current publication state details

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsApplicationForm

Application form assigned to the job posting

- `id` (string, required) — Unique identifier for the application form
- `title` (string, required) — Title of the application form

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobCompensation

Compensation information for the job

- `id` (string, required) — Unique identifier for the compensation record
- `currency_iso_code` (string, required) — Currency ISO code for the compensation
- `max_amount` (double, optional, nullable) — Maximum compensation amount
- `min_amount` (double, optional, nullable) — Minimum compensation amount

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobLocationsItems

- `id` (string, required) — Unique identifier for the job location
- `location` (AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobLocationsItemsLocation, required) — Details for the location assigned to the job

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobEmploymentTypesItems

- `id` (string, required) — Unique identifier for the job employment type
- `employment_type` (AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobEmploymentTypesItemsEmploymentType, required) — Details for the employment type assigned to the job

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobTeamsItems

- `id` (string, required) — Unique identifier for the job team
- `team` (AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobTeamsItemsTeam, required) — Details for the team assigned to the job

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobDepartmentsItems

- `id` (string, required) — Job-department association row identifier.
- `department` (AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobDepartmentsItemsDepartment, optional, nullable)

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsPublicationsItemsJobBoard

Job board where the posting is published

- `id` (string, required) — Unique identifier for the job board

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsPublicationsItemsCurrentState

Current publication state details

- `id` (string, required) — Unique identifier for the publication state
- `created_at` (string, required) — Timestamp when the publication was created
- `state_slug` (enum, required) — Current publication state
  - Allowed values: `PUBLISHED_BASIC`, `PUBLISHED_PREMIUM`, `UNPUBLISHED`, `EXPIRED`, `IN_PROGRESS`, `FAILED`
- `created_by` (string, optional, nullable) — User who created the publication
- `error_message` (string, optional, nullable) — Error message if publication failed

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobLocationsItemsLocation

Details for the location assigned to the job

- `id` (string, required) — Unique identifier for the location
- `name` (string, required) — Location name

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobEmploymentTypesItemsEmploymentType

Details for the employment type assigned to the job

- `id` (string, required) — Unique identifier for the employment type
- `name` (string, required) — Employment type name

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobTeamsItemsTeam

Details for the team assigned to the job

- `id` (string, required) — Unique identifier for the team
- `name` (string, required) — Team name

### AtsJobBoardsJobBoardIdJobPostingsGetResponsesContentApplicationJsonSchemaDataItemsJobJobDepartmentsItemsDepartment

- `id` (string, optional) — Department identifier.
- `name` (string, optional) — Display name of the department.

## Examples

**Response**

```json
{
  "data": [
    {
      "id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
      "job": {
        "id": "5f3cbc4b-2c51-4b48-a2c5-141f581dbf8a",
        "compensation": {
          "id": "9a8b7c6d-5e4f-4321-abcd-9876543210ff",
          "currency_iso_code": "USD",
          "max_amount": 105000,
          "min_amount": 85000
        },
        "job_locations": [
          {
            "id": "ae5ea0d8-300b-4027-9d14-0330ac5e527c",
            "location": {
              "id": "f61a2d36-2790-45d0-b9c9-988c6c234b9b",
              "name": "France"
            }
          }
        ],
        "job_employment_types": [
          {
            "id": "33a13504-ec08-4f2a-98cf-64c0cc20f20b",
            "employment_type": {
              "id": "5ed1ab2a-395f-4cf1-854f-7aa060a31db3",
              "name": "Temporary"
            }
          }
        ],
        "job_teams": [
          {
            "id": "53e4d5bb-65e3-42ff-ada7-65badeeb9d8f",
            "team": {
              "id": "127ee4e0-3776-46c8-8999-5e045e2ae1cf",
              "name": "Product Design Team"
            }
          }
        ],
        "job_departments": [
          {
            "id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
            "department": {
              "id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
              "name": "Product"
            }
          }
        ]
      },
      "title": "Product Designer",
      "job_id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
      "created_at": "2025-07-24T16:28:46.063Z",
      "updated_at": "2025-07-25T10:11:12.613Z",
      "publications": [
        {
          "id": "07e7f02c-e10f-4751-a1af-a7d110617e27",
          "job_board": {
            "id": "95858e6b-3971-408c-97d6-73ca4fce10b7"
          },
          "current_state": {
            "id": "958e9211-5944-49df-a9df-af43967b233f",
            "created_at": "2025-07-24T16:28:46.063Z",
            "state_slug": "PUBLISHED_BASIC",
            "created_by": "42d103ea-9367-432a-8e6f-7ab548eeddcd",
            "error_message": "Publication failed due to invalid job board credentials"
          }
        }
      ],
      "richtext_description": "<p>Some description</p>",
      "is_compensation_visible": false,
      "application_form": {
        "id": "6bfbc928-8d34-46a0-8bca-6503f0e7128c",
        "title": "Standard Application"
      }
    }
  ],
  "has_more": false,
  "next_cursor": "string",
  "total_count": 1
}
```

**SDK Code**

```python
import requests

url = "https://api.letsdeel.com/rest/ats/job-boards/a1b2c3d4-e5f6-7890-1234-567890abcdef/job-postings"

querystring = {"cursor":"cursor_value","limit":"50"}

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

```javascript
const url = 'https://api.letsdeel.com/rest/ats/job-boards/a1b2c3d4-e5f6-7890-1234-567890abcdef/job-postings?cursor=cursor_value&limit=50';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.letsdeel.com/rest/ats/job-boards/a1b2c3d4-e5f6-7890-1234-567890abcdef/job-postings?cursor=cursor_value&limit=50"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.letsdeel.com/rest/ats/job-boards/a1b2c3d4-e5f6-7890-1234-567890abcdef/job-postings?cursor=cursor_value&limit=50")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.letsdeel.com/rest/ats/job-boards/a1b2c3d4-e5f6-7890-1234-567890abcdef/job-postings?cursor=cursor_value&limit=50")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.letsdeel.com/rest/ats/job-boards/a1b2c3d4-e5f6-7890-1234-567890abcdef/job-postings?cursor=cursor_value&limit=50', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.letsdeel.com/rest/ats/job-boards/a1b2c3d4-e5f6-7890-1234-567890abcdef/job-postings?cursor=cursor_value&limit=50");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.letsdeel.com/rest/ats/job-boards/a1b2c3d4-e5f6-7890-1234-567890abcdef/job-postings?cursor=cursor_value&limit=50")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```