> 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 ATS Application form

GET https://api.letsdeel.com/rest/ats/application-forms/{application_form_id}

Retrieves a single ATS application form by its unique ID within the specified organization. Use it when you need the full form definition and metadata, such as its title, status, and the pages, sections, and questions of the underlying form builder configuration, to display or process an application.

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

Reference: https://developer.deel.com/api/reference/endpoints/ats/retrieve-ats-application-form-v-2026-01-01

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

- `application_form_id` (string, required) — Id of the application form

## Response

### 200

Successful response with application form data

- `data` (AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaData, required)

## Errors

### 400 Bad Request Error

Operation failed.

- `errors` (list of AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaErrorsItems, 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 AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaErrorsItems, 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 AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaErrorsItems, required) — List of error objects

## Types

### AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaData

- `id` (string, required) — Unique identifier for the application form
- `title` (string, required) — Title of the application form
- `created_at` (string, required) — Timestamp when the application form was created
- `updated_at` (string, required) — Timestamp when the application form was last updated
- `status_enum` (enum, required) — Status of the application form
  - Allowed values: `DRAFT`, `PUBLISHED`, `ARCHIVED`
- `organization_id` (string, required) — Unique identifier for the organization
- `form_builder_form` (AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderForm, required, nullable) — Form builder configuration
- `is_resume_required` (boolean, required) — Whether the resume field is required
- `form_builder_form_id` (string, required, nullable) — Unique identifier for the form builder form
- `richtext_description` (string, required, nullable) — Rich text description of the application form
- `sensitive_fields_ids` (list of string, required, nullable) — Array of sensitive field IDs
- `has_show_resume_field` (boolean, required) — Whether to show the resume field
- `is_phone_number_required` (boolean, required) — Whether the phone number field is required
- `resume_field_helper_text` (string, required, nullable) — Helper text for the resume field
- `demographic_section_title` (string, required, nullable) — Title for the demographic section
- `form_builder_form_revision_id` (string, required, nullable) — Unique identifier for the form builder form revision
- `demographic_section_helper_text` (string, required, nullable) — Helper text for the demographic section
- `is_location_city_field_required` (boolean, required) — Whether the city field is required, which is only required alongside the country field
- `should_show_location_city_field` (boolean, required) — Whether to show the city field, which is only shown alongside the country field
- `is_linkedin_profile_url_required` (boolean, required) — Whether the LinkedIn profile URL field is required
- `is_location_country_field_required` (boolean, required) — Whether the country field is required
- `should_show_location_country_field` (boolean, required) — Whether to show the country field
- `application_confirmation_email_template_id` (string, required, nullable) — Unique identifier for the application confirmation email template
- `demographic_option_types` (list of AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataDemographicOptionTypesItems, optional) — Array of demographic option types for collecting diversity information

### AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaErrorsItems

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

### AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderForm

Form builder configuration

- `pages` (list of AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderFormPagesItems, required) — List of pages in the form

### AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataDemographicOptionTypesItems

- `id` (string, optional) — Unique identifier for the demographic option type
- `options` (list of AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataDemographicOptionTypesItemsOptionsItems, optional) — Array of available options for this demographic type
- `helper_text` (string, optional, nullable) — Helper text for the option type
- `option_type_slug` (string, optional) — Slug for the option type

### AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderFormPagesItems

Pages in the form

- `title` (string, required) — Title of the form page
- `sections` (list of AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderFormPagesItemsSectionsItems, required) — Sections within the page

### AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataDemographicOptionTypesItemsOptionsItems

- `id` (string, optional) — Unique identifier for the option
- `value` (string, optional) — Value of the option

### AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderFormPagesItemsSectionsItems

Sections within the page

- `title` (string, required) — Title of the section
- `questions` (list of AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderFormPagesItemsSectionsItemsQuestionsItems, required) — List of questions within the section
- `subtitle` (string, optional) — Additional information shown at the top of the section

### AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderFormPagesItemsSectionsItemsQuestionsItems

List of questions within the section

- `type` (enum, required) — Type of the question
  - Allowed values: `FREETEXT`, `PARAGRAPH`, `SINGLESELECTION`, `MULTISELECTION`, `ADDRESS`, `PHONENUMBER`, `DOCUMENTUPLOAD`, `NUMBER`, `DROPDOWN`, `DATEPICKER`, `EMAIL`, `CUSTOMDROPDOWN`, `PRESETDROPDOWN`, `NESTED`
- `title` (string, required) — Title of the question
- `key` (string, optional) — Unique key identifier for the question
- `rules` (list of AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderFormPagesItemsSectionsItemsQuestionsItemsRulesItems, optional, nullable) — Validation rules for the question
- `source` (AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderFormPagesItemsSectionsItemsQuestionsItemsSource, optional, nullable) — Defines dynamic data source for the question
- `options` (list of AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderFormPagesItemsSectionsItemsQuestionsItemsOptionsItems, optional, nullable) — List of selectable options for selection-type questions
- `is_range` (boolean, optional) — Specifies whether a date picker allows range selection
- `max_value` (double, optional, nullable) — Maximum value allowed
- `min_value` (double, optional, nullable) — Minimum value allowed
- `max_length` (integer, optional, nullable) — Maximum character length for text responses
- `min_length` (integer, optional, nullable) — Minimum character length for text responses
- `helper_text` (string, optional, nullable) — Additional information to assist the user
- `is_disabled` (boolean, optional) — If true, the field is disabled and cannot be edited
- `is_required` (boolean, optional) — Indicates if the question is required
- `number_type` (string, optional) — Used for number fields to define the unit or representation
- `default_value` (string, optional, nullable) — Default value to pre-fill in the form
- `is_only_digits` (boolean, optional) — Restricts input to numeric characters only, for FreeText questions
- `date_limitation` (string, optional, nullable) — Limits date selection (e.g., blocking past dates). Will always be 'BLOCK_PAST' for now
- `is_multiple_selection` (boolean, optional) — Indicates if the user can select multiple values
- `has_request_validation` (boolean, optional) — Whether additional validation should be triggered for this field

### AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderFormPagesItemsSectionsItemsQuestionsItemsRulesItems

Validation rules for the question

- `title` (string, optional) — Title of the question
- `source` (AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderFormPagesItemsSectionsItemsQuestionsItemsRulesItemsSource, optional, nullable) — Defines dynamic data source for the question
- `options` (list of any, optional, nullable) — List of selectable options for selection-type questions. Value may be of any type.
- `is_range` (boolean, optional) — Specifies whether a date picker allows range selection
- `requires` (list of any, optional) — List of conditions that must be met for this rule to apply
- `max_value` (double, optional, nullable) — Maximum value allowed
- `min_value` (double, optional, nullable) — Minimum value allowed
- `max_length` (integer, optional, nullable) — Maximum character length for text responses
- `min_length` (integer, optional, nullable) — Minimum character length for text responses
- `helper_text` (string, optional, nullable) — Additional information to assist the user
- `is_disabled` (boolean, optional) — If true, the field is disabled and cannot be edited
- `is_required` (boolean, optional) — Indicates if the question is required
- `number_type` (string, optional) — Used for number fields to define the unit or representation
- `default_value` (string, optional, nullable) — Default value to pre-fill in the form
- `is_only_digits` (boolean, optional) — Restricts input to numeric characters only, for FreeText questions
- `date_limitation` (string, optional, nullable) — Limits date selection (e.g., blocking past dates). Will always be 'BLOCK_PAST' for now
- `is_multiple_selection` (boolean, optional) — Indicates if the user can select multiple values
- `has_request_validation` (boolean, optional) — Whether additional validation should be triggered for this field

### AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderFormPagesItemsSectionsItemsQuestionsItemsSource

Defines dynamic data source for the question

- `url` (string, optional) — API endpoint providing dynamic options
- `definition` (string, optional) — Reference URL for API documentation
- `description` (string, optional) — Description of the data source

### AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderFormPagesItemsSectionsItemsQuestionsItemsOptionsItems

- `title` (string, required) — Display text for the option
- `value` (string, optional, nullable) — Value associated with the option

### AtsApplicationFormsApplicationFormIdGetResponsesContentApplicationJsonSchemaDataFormBuilderFormPagesItemsSectionsItemsQuestionsItemsRulesItemsSource

Defines dynamic data source for the question

- `url` (string, optional) — API endpoint providing dynamic options
- `definition` (string, optional) — Reference URL for API documentation
- `description` (string, optional) — Description of the data source

## Examples

**Response**

```json
{
  "data": {
    "id": "cf3bf34f-89e9-49fb-83a5-32104271f261",
    "title": "Software Engineer Application Form",
    "created_at": "2026-01-07T17:51:39.961Z",
    "updated_at": "2026-01-07T17:51:39.961Z",
    "status_enum": "PUBLISHED",
    "organization_id": "3cfbb359-6084-46c0-9d3f-1ed1a1007a7a",
    "form_builder_form": {
      "pages": [
        {
          "title": "Application Questions",
          "sections": [
            {
              "title": "Screening Questions",
              "questions": [
                {
                  "type": "FREETEXT",
                  "title": "What are your salary expectations?",
                  "key": "application.screening.salary_expectations",
                  "rules": [
                    {
                      "title": "Salary Expectation",
                      "source": {
                        "url": "/rest/v2/departments",
                        "definition": "https://api.example.com/docs",
                        "description": "Available departments"
                      },
                      "options": [],
                      "is_range": false,
                      "requires": [
                        null
                      ],
                      "max_value": 1000000,
                      "min_value": 0,
                      "max_length": 255,
                      "min_length": 1,
                      "helper_text": "Enter your expected annual salary",
                      "is_disabled": false,
                      "is_required": true,
                      "number_type": "CURRENCY",
                      "default_value": "Default text value",
                      "is_only_digits": true,
                      "date_limitation": "BLOCK_PAST",
                      "is_multiple_selection": false,
                      "has_request_validation": false
                    }
                  ],
                  "source": {
                    "url": "/rest/v2/departments",
                    "definition": "https://api.example.com/docs",
                    "description": "Available departments"
                  },
                  "options": [
                    {
                      "title": "Yes",
                      "value": "true"
                    }
                  ],
                  "is_range": false,
                  "max_value": 1000000,
                  "min_value": 0,
                  "max_length": 255,
                  "min_length": 1,
                  "helper_text": "Please provide additional details",
                  "is_disabled": false,
                  "is_required": true,
                  "number_type": "CURRENCY",
                  "default_value": "Default text value",
                  "is_only_digits": false,
                  "date_limitation": "BLOCK_PAST",
                  "is_multiple_selection": false,
                  "has_request_validation": true
                }
              ],
              "subtitle": "Please answer the following questions"
            }
          ]
        }
      ]
    },
    "is_resume_required": true,
    "form_builder_form_id": "10164abf-6ea2-4fb9-963c-de2fa2ea4e1b",
    "richtext_description": "<p>Please fill out this form to apply</p>",
    "sensitive_fields_ids": [
      "10164abf-6ea2-4fb9-963c-de2fa2ea4e1b"
    ],
    "has_show_resume_field": true,
    "is_phone_number_required": false,
    "resume_field_helper_text": "Please upload your resume in PDF format",
    "demographic_section_title": "Demographics",
    "form_builder_form_revision_id": "8ed5dd1f-b8ad-4847-b185-eb8209a3d54f",
    "demographic_section_helper_text": "This information is optional and helps us track diversity",
    "is_location_city_field_required": false,
    "should_show_location_city_field": true,
    "is_linkedin_profile_url_required": false,
    "is_location_country_field_required": false,
    "should_show_location_country_field": true,
    "application_confirmation_email_template_id": "10164abf-6ea2-4fb9-963c-de2fa2ea4e1b",
    "demographic_option_types": [
      {
        "id": "10164abf-6ea2-4fb9-963c-de2fa2ea4e1b",
        "options": [
          {
            "id": "8ed5dd1f-b8ad-4847-b185-eb8209a3d54f",
            "value": "Male"
          },
          {
            "id": "9fd6ee2g-c9be-5958-c296-fc9309b4e65g",
            "value": "Female"
          }
        ],
        "helper_text": "Please select your gender identity",
        "option_type_slug": "gender"
      }
    ]
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.letsdeel.com/rest/ats/application-forms/cfe8c14f-741e-4bf8-8090-b9427eeb44c0"

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

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

print(response.json())
```

```javascript
const url = 'https://api.letsdeel.com/rest/ats/application-forms/cfe8c14f-741e-4bf8-8090-b9427eeb44c0';
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/application-forms/cfe8c14f-741e-4bf8-8090-b9427eeb44c0"

	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/application-forms/cfe8c14f-741e-4bf8-8090-b9427eeb44c0")

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/application-forms/cfe8c14f-741e-4bf8-8090-b9427eeb44c0")
  .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/application-forms/cfe8c14f-741e-4bf8-8090-b9427eeb44c0', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.letsdeel.com/rest/ats/application-forms/cfe8c14f-741e-4bf8-8090-b9427eeb44c0");
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/application-forms/cfe8c14f-741e-4bf8-8090-b9427eeb44c0")! 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()
```