---
updatedAt: 2026-05-27T13:17:22.000Z
agentTools:
  projectIndex: https://integrate.apploi.com/llms.txt
---

# /applicants/preconfigured-documents/{applicant_id}

Downloads a candidate's completed preconfigured documents as a single zip archive. 

Preconfigured documents are the document templates your team has set up in Apploi. This endpoint returns the individual files pulled out of those documents once the candidate has completed them, bundled into one archive and served as an attachment named `files.zip`. 

Which templates are covered, and which files are extracted from each, is part of your team's document configuration in Apploi rather than something you select per request. A team with no such configuration set up — and no parent team configuration to fall back on — gets a `404` from this endpoint rather than an empty archive. 

Only documents the candidate has actually completed are included. An application whose documents are still outstanding also returns a `404`, so a `404` here does not necessarily mean the application does not exist. A `200` is not a guarantee of content either: when the candidate has completed documents but none of the files configured for them are found, the archive comes back empty. 

Access is authorized per candidate: the caller must have permission on the job the candidate applied to, otherwise the request is rejected with a `403`. 

Every request to this endpoint must include your Apploi-issued API key in the `x-api-key` header.

# OpenAPI definition

````json
{
  "components": {
    "schemas": {
      "ResponsePreconfiguredDocumentsZipArchive": {
        "description": "A zip archive of the candidate's completed preconfigured documents, served as an attachment named `files.zip`.",
        "format": "binary",
        "title": "Preconfigured Documents Archive",
        "type": "string"
      }
    },
    "securitySchemes": {
      "api_key": {
        "in": "header",
        "name": "x-api-key",
        "type": "apiKey"
      }
    }
  },
  "info": {
    "title": "Partner API",
    "version": "2026-09-22T01:26:22Z"
  },
  "openapi": "3.0.1",
  "paths": {
    "/applicants/preconfigured-documents/{applicant_id}": {
      "get": {
        "description": "Downloads a candidate's completed preconfigured documents as a single zip archive. \n\nPreconfigured documents are the document templates your team has set up in Apploi. This endpoint returns the individual files pulled out of those documents once the candidate has completed them, bundled into one archive and served as an attachment named `files.zip`. \n\nWhich templates are covered, and which files are extracted from each, is part of your team's document configuration in Apploi rather than something you select per request. A team with no such configuration set up — and no parent team configuration to fall back on — gets a `404` from this endpoint rather than an empty archive. \n\nOnly documents the candidate has actually completed are included. An application whose documents are still outstanding also returns a `404`, so a `404` here does not necessarily mean the application does not exist. A `200` is not a guarantee of content either: when the candidate has completed documents but none of the files configured for them are found, the archive comes back empty. \n\nAccess is authorized per candidate: the caller must have permission on the job the candidate applied to, otherwise the request is rejected with a `403`. \n\nEvery request to this endpoint must include your Apploi-issued API key in the `x-api-key` header.",
        "parameters": [
          {
            "description": "The application form ID corresponding to a job application in the Apploi platform. The application form ID is a unique identifier for the job application in the Apploi platform. The application form ID can be found in the 'id' field of the each of the items in the response body of a call to the [/applicants](https://integrate.apploi.com/reference/get_applicants) endpoint in the Apploi Partner API.\n\nExamples: `265733753`, `265733754`, etc.",
            "in": "path",
            "name": "applicant_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "_authorization",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/zip": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsePreconfiguredDocumentsZipArchive"
                }
              }
            },
            "description": "The documents, as a zip archive served with `Content-Type: application/zip` and a `Content-Disposition` attachment filename of `files.zip`. The body is binary, not JSON."
          },
          "403": {
            "content": {},
            "description": "The request was rejected before the archive could be assembled, either because the caller has no permission on the job this candidate applied to or because the API key's user lacks the file-download permission. The body depends on where the rejection happened: a missing or unrecognized `x-api-key` header is rejected by the API gateway itself, which returns `{\"message\": \"Forbidden\"}`, while a rejection further in returns `{\"developer_message\": ...}`."
          },
          "404": {
            "content": {},
            "description": "Returned for four distinct reasons:\n- No application exists with the given `applicant_id`.\n- The `applicant_id` in the path was not an integer.\n- Your team, and its parent team, have no document configuration set up for this endpoint. This is the only one of the four with a `developer_message` that identifies it: `Endpoint not configured for this team`.\n- The candidate has no completed documents to return.\n\nThe `developer_message` does not reliably tell the other three apart, so do not branch on it. The last two reasons mean the application exists and is readable but has nothing to download, so treat a `404` here as an empty result rather than as a missing application."
          },
          "500": {
            "content": {},
            "description": "The archive could not be assembled because of an error on Apploi's side. The request can safely be retried. Note that any document already read before the error is recorded as downloaded in the candidate's activity log, so a failed request and its retry can each leave entries behind."
          }
        },
        "security": [
          {
            "api_key": []
          }
        ],
        "x-amazon-apigateway-integration": {
          "httpMethod": "GET",
          "passthroughBehavior": "when_no_match",
          "requestParameters": {
            "integration.request.header._authorization": "method.request.header._authorization",
            "integration.request.path.applicant_id": "method.request.path.applicant_id"
          },
          "responses": {
            "default": {
              "statusCode": "200"
            }
          },
          "timeoutInMillis": 29000,
          "type": "http_proxy",
          "uri": "https://${stageVariables.apploi_api_readreplica}/v1/document/preconfigured-documents-download/{applicant_id}"
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://partners.apploi.com"
    }
  ],
  "x-amazon-apigateway-documentation": {
    "createdDate": "2026-09-22T01:29:07Z",
    "documentationParts": [
      {
        "location": {
          "path": "/jobs/cities",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "Cities and States mapping. Every incoming request to the API must contain an API key. Otherwise, the caller receives a 403 Forbidden response."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/jobs/cities",
          "type": "METHOD"
        },
        "properties": {
          "description": "Return the list of cities. All parameters are optional, but if used then this will return only cities that has jobs matching the given params."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "location",
          "path": "/jobs/cities",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "GPS coordinates of the location using the format 'lat,long' for example: 25.7616798,-80.1917902"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "radius",
          "path": "/jobs/cities",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Radius distance in miles from the location coordinates, by default is 10mi. Only used if location is specified."
        }
      },
      {
        "location": {
          "path": "/jobs/industries",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "Industries mapping. Every incoming request to the API must contain an API key. Otherwise, the caller receives a 403 Forbidden response."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/jobs/industries",
          "type": "METHOD"
        },
        "properties": {
          "description": "Return the list of industries. All parameters are optional, but if used then this will return only industries that has jobs matching the given params."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "city",
          "path": "/jobs/industries",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Name of the city"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "location",
          "path": "/jobs/industries",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "GPS coordinates of the location using the format 'lat,long' for example: 25.7616798,-80.1917902"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "radius",
          "path": "/jobs/industries",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Radius distance in miles from the location coordinates, by default is 10mi. Only used if location is specified."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "state",
          "path": "/jobs/industries",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Name of the state of the city"
        }
      },
      {
        "location": {
          "path": "/jobs/search",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "Used for lookup one job or a group of them using an specific criteria (location, keywords, etc.). Every incoming request to the API must contain an API key. Otherwise, the caller receives a 403 Forbidden response."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/jobs/search",
          "type": "METHOD"
        },
        "properties": {
          "description": "Used for retrieving all the jobs that match the specified criteria"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "city",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Name of the city to filter. example: Houston"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "city_center",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Name of the city, Parameter used to group the statistics by city. example: Chicago"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "include_backfilling",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Use 1 (default) to include backfilling jobs on the result. Use 0 to exclude backfilling jobs and include only Apploi jobs."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "include_private",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Set to 1 to include private (hidden) jobs in results. By default (0), only public jobs are returned."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "industry",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Name of the industry to filter, should be in English, if it is more than one, use commas to separate. example: Retail,Healthcare,Other"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "job_id",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Id of the job. If present the request will return only the specified job (if found)"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "language",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Language to use for search, this parameter is added to the property redirect_apply_url for apploi jobs. The allowed values  are (en|es), By default the value for language is en. Example: language=es. "
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "location",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "GPS coordinates of the location using the format 'lat,long' for example: 25.7616798,-80.1917902"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "location_filter",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Use 0 (default) for only sorting by location. Use 1 for filtering by location. into the <radius> param."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "location_sort",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Use 0 (default) to filter by location. \nUse 1 to sort without filtering by location."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "page",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Page number (starts in 1), each page has 50 results."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "radius",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Radius distance in miles from the location coordinates"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "searchbar",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Keyword(s) to use on the search"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "size",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Amount of jobs to return. The maximum number of returned jobs is 1000."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "source",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Partner name"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "source_tracking_string",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Identifies which site sent the traffic"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "state",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Name of the state to filter. example: Texas"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "teams",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "id of the team or teams to search the apploi jobs, if it is more than one, use commas to separate. example: teams=30463,30464"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "test_q_param",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "test doc for q string param"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "utm_campaign",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Identifies a specific product promotion or strategic campaign."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "utm_medium",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Identifies what type of link was used, such as cost per click or email."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "utm_source",
          "path": "/jobs/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Identifies which site sent the traffic"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "x-api-key",
          "path": "/jobs/search",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "*",
          "name": "job_id",
          "path": "/jobs",
          "type": "PATH_PARAMETER"
        },
        "properties": {
          "description": "the job identification number"
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/jobs",
          "type": "METHOD"
        },
        "properties": {
          "description": "Creates a new job posting. If you are looking to utilize this endpoint, please reach out to your CSM or support to approve your access."
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/jobs",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Invalid Token"
        }
      },
      {
        "location": {
          "method": "*",
          "name": "job_id",
          "path": "/jobs/{job_id}",
          "type": "PATH_PARAMETER"
        },
        "properties": {
          "description": "the job identification number"
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/jobs/{job_id}",
          "type": "METHOD"
        },
        "properties": {
          "description": "Update an existing job posting. All fields are optional; only provided fields are updated. team_id is not updatable. The address is the exception to the field-by-field rule: it is stored as a single value, so supplying city, state, zip_code and country replaces the whole address. Send street in the same request to keep it. Sending street on its own, without city, state, zip_code and country, does not update the stored address. If you are looking to utilize this endpoint, please reach out to your CSM or support to approve your access."
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/jobs/{job_id}",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Invalid Token"
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/jobs/{job_id}",
          "statusCode": "404",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Not Found"
        }
      },
      {
        "location": {
          "method": "*",
          "name": "team_id",
          "path": "/jobs/ai_chat/subscription/{team_id}",
          "type": "PATH_PARAMETER"
        },
        "properties": {
          "description": "The ID of the team that the jobs belong to."
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/jobs/ai_chat/subscription/{team_id}",
          "type": "METHOD"
        },
        "properties": {
          "description": "Updates job AT chat feature for a specific team."
        }
      },
      {
        "location": {
          "method": "PUT",
          "name": "x-api-key",
          "path": "/jobs/ai_chat/subscription/{team_id}",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/jobs/ai_chat/subscription/{team_id}",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Invalid Token"
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/jobs/ai_chat/subscription/{team_id}",
          "statusCode": "404",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Not Found"
        }
      },
      {
        "location": {
          "method": "*",
          "name": "team_id",
          "path": "/jobs/job_attributes/{team_id}",
          "type": "PATH_PARAMETER"
        },
        "properties": {
          "description": "the id of the team that the job attributes belong to"
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/jobs/job_attributes/{team_id}",
          "type": "METHOD"
        },
        "properties": {
          "description": "Creates or updates job attributes for a specific team."
        }
      },
      {
        "location": {
          "method": "POST",
          "name": "x-api-key",
          "path": "/jobs/job_attributes/{team_id}",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/jobs/job_attributes/{team_id}",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Invalid Token"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "limit",
          "path": "/applicants",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "The maximum number of applicants to return in a single response. Defaults to `30`. The maximum is `80`: a `limit` that is not a whole number between `1` and `80` is not rejected — it is served as `80`, so a response may contain fewer applicants than you asked for. Use `offset` to page through large result sets."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "offset",
          "path": "/applicants",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "The number of applicants to skip before returning results, used for pagination. Defaults to `0`. To page through all applicants, increment `offset` by `limit` on each request (e.g. `limit=50&offset=0`, then `limit=50&offset=50`, ...) until a page returns fewer than `limit` results."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "updated_after",
          "path": "/applicants",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Filter to include only applicants that were updated after the given date. By using the `updated_after` and `updated_before` filters together, entries returned in the response can be filtered by a window of time in which they were most recently updated.\nThe values provided in the filter must be in one of the following formats:\n```plaintext\n• Dates in the format of YYYY-MM-DD\n    • examples: `2024-10-29`, `2017-09-28`, `2020-01-01`\n• Date-times in isoformat, with or without timezone information.\n    • If timezone information is excluded, then UTC will be assumed.\n    • examples: `2024-10-29T10:00:00`, `2024-10-29T10:00:00Z`, `2024-10-29T10:00:00+00:00`\n```\n"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "updated_before",
          "path": "/applicants",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Filter to include only applicants that were updated before the given date. By using the `updated_after` and `updated_before` filters together, entries returned in the response can be filtered by a window of time in which they were most recently updated.\nThe values provided in the filter must be in one of the following formats:\n```plaintext\n• Dates in the format of YYYY-MM-DD\n    • examples: `2024-10-29`, `2017-09-28`, `2020-01-01`\n• Date-times in isoformat, with or without timezone information.\n    • If timezone information is excluded, then UTC will be assumed.\n    • examples: `2024-10-29T10:00:00`, `2024-10-29T10:00:00Z`, `2024-10-29T10:00:00+00:00`\n```\n"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "x-api-key",
          "path": "/applicants",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "*",
          "name": "applicant_id",
          "path": "/applicants/{applicant_id}",
          "type": "PATH_PARAMETER"
        },
        "properties": {
          "description": "The application form ID corresponding to a job application in the Apploi platform. The application form ID is a unique identifier for the job application in the Apploi platform. The application form ID can be found in the 'id' field of the each of the items in the response body of a call to the [/applicants](https://integrate.apploi.com/reference/get_applicants) endpoint in the Apploi Partner API.\n\nExamples: `265733753`, `265733754`, etc."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/{applicant_id}",
          "type": "METHOD"
        },
        "properties": {
          "description": "Endpoint for retrieving a processed application. This endpoint allows users to fetch the current details of a specific candidate's application for a specific job, including the applicant's status, notes, and other application data."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "include_sensitive_data",
          "path": "/applicants/{applicant_id}",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "When set to `true`, the response includes additional sensitive candidate data (for example, Social Security Number and date of birth) if this has been enabled for the requesting team. Defaults to `false` when omitted.\n\nExamples: `true`, `false`"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "x-api-key",
          "path": "/applicants/{applicant_id}",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/{applicant_id}",
          "statusCode": "200",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Returns the current details of the requested candidate's application, including its status, notes, and other application data."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/{applicant_id}",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Invalid Token"
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/{applicant_id}",
          "statusCode": "404",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Not Found"
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/applicants/{applicant_id}",
          "type": "METHOD"
        },
        "properties": {
          "description": "Endpoint for updating a processed application. This endpoint allows users to modify the properties of a specific candidate's application for a specific job."
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/applicants/{applicant_id}",
          "type": "REQUEST_BODY"
        },
        "properties": {
          "description": "Pass in a JSON body with application details in this format: \n\n\n        {\n          \"notes\": \"Applicant has strong experience in healthcare.\"\n        }\n        "
        }
      },
      {
        "location": {
          "method": "PUT",
          "name": "x-api-key",
          "path": "/applicants/{applicant_id}",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/applicants/{applicant_id}",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Invalid Token"
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/applicants/{applicant_id}",
          "statusCode": "404",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Not Found"
        }
      },
      {
        "location": {
          "path": "/applicants/{applicant_id}/interviews",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "Endpoint for scheduling or cancelling interviews for candidates. This endpoint allows the creation of interview appointments for a specific applicant and job. If the API is called again for the same candidate and job combination, the existing interview details will be updated with the newly provided information, effectively acting as an update operation. It cancels the latest created upcoming interview when the `cancel` flag is set to `true`. When cancelling, all other fields in the request body are ignored."
        }
      },
      {
        "location": {
          "method": "*",
          "name": "applicant_id",
          "path": "/applicants/{applicant_id}/interviews",
          "type": "PATH_PARAMETER"
        },
        "properties": {
          "description": "The application form ID corresponding to a job application in the Apploi platform. The application form ID is a unique identifier for the job application in the Apploi platform. The application form ID can be found in the 'id' field of the each of the items in the response body of a call to the [/applicants](https://integrate.apploi.com/reference/get_applicants) endpoint in the Apploi Partner API.\n\nExamples: `265733753`, `265733754`, etc."
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/applicants/{applicant_id}/interviews",
          "type": "METHOD"
        },
        "properties": {
          "description": "Endpoint for scheduling or cancelling interviews for candidates. This endpoint allows the creation of interview appointments for a specific applicant and job. If the API is called again for the same candidate and job combination, the existing interview details will be updated with the newly provided information, effectively acting as an update operation. It cancels the latest created upcoming interview when the `cancel` flag is set to `true`. When cancelling, all other fields in the request body are ignored."
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/applicants/{applicant_id}/interviews",
          "type": "REQUEST_BODY"
        },
        "properties": {
          "description": "Pass in a JSON body with interview details. Either `interviewerId` must be provided, or both `interviewerTeamId` and `interviewerEmail` must be provided.\n\n**Option 1: Using interviewerId**\n\n```\n{\n    \"date\": \"2022-12-05T17:30:00Z\",\n    \"duration\": \"60\",\n    \"timezone\": \"America/New_York\",\n    \"location\": \"Virtual\",\n    \"interviewerId\": \"123456\"\n}\n```\n\n**Option 2: Using interviewerTeamId and interviewerEmail**\n\n```\n{\n    \"date\": \"2022-12-05T17:30:00Z\",\n    \"duration\": \"60\",\n    \"timezone\": \"America/New_York\",\n    \"location\": \"Virtual\",\n    \"interviewerEmail\": \"interviewer@apploi.com\",\n    \"interviewerTeamId\": \"23567\"\n}\n```\n\n**Option 3: Cancelling the latest interview**\n\n*Note: Scheduling fields are still required by the schema but will be ignored by the service when `cancel` is `true`.*\n\n```\n{\n    \"date\": \"2022-12-05T17:30:00Z\",\n    \"duration\": \"60\",\n    \"timezone\": \"America/New_York\",\n    \"interviewerId\": \"123456\",\n    \"cancel\": true\n}\n```"
        }
      },
      {
        "location": {
          "method": "PUT",
          "name": "x-api-key",
          "path": "/applicants/{applicant_id}/interviews",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/applicants/{applicant_id}/interviews",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Invalid Token"
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/applicants/{applicant_id}/interviews",
          "statusCode": "404",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Not Found"
        }
      },
      {
        "location": {
          "path": "/applicants/{applicant_id}/message",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "Message endpoints for applicant communication. Provides methods to retrieve and create messages for applications. Supports both text (SMS) and email messages. All messages are associated with AI-based candidate messaging features."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/{applicant_id}/message",
          "type": "METHOD"
        },
        "properties": {
          "description": "Retrieves all messages for a specific application. Returns both messages sent to the candidate (outbound) and responses from the candidate (inbound). Messages are ordered by sent date, newest first. \n\n**Authentication:** Requires valid x-api-key header.\n\n**Response Example:**\n```json\n{\n  \"data\": [\n    {\n      \"external_id\": \"uuid123456\",\n      \"message_id\": \"msg001\",\n      \"message_body\": \"Thank you for applying! We'd like to schedule an interview.\",\n      \"message_direction\": \"to_candidate\",\n      \"message_type\": \"text\",\n      \"sent_at\": \"Thu, 23 Oct 2025 13:12:47 GMT\",\n      \"status\": \"SENT\",\n      \"subject\": null\n    },\n    {\n      \"external_id\": \"response789012\",\n      \"message_id\": \"msg002\",\n      \"message_body\": \"I am available for an interview next week.\",\n      \"message_direction\": \"from_candidate\",\n      \"message_type\": \"text\",\n      \"sent_at\": \"Thu, 23 Oct 2025 13:12:47 GMT\",\n      \"status\": \"DELIVERED\",\n      \"subject\": null\n    },\n    {\n      \"external_id\": \"response789015\",\n      \"message_id\": \"msg005\",\n      \"message_body\": \"Hey your interview is scheduled for next week.\",\n      \"message_direction\": \"to_candidate\",\n      \"message_type\": \"email\",\n      \"sent_at\": \"Thu, 23 Oct 2025 13:12:47 GMT\",\n      \"status\": \"DELIVERED\",\n      \"subject\": \"Interview Scheduled\"\n    },\n  ]\n}\n```"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "applicant_id",
          "path": "/applicants/{applicant_id}/message",
          "type": "PATH_PARAMETER"
        },
        "properties": {
          "description": "The application form ID corresponding to a job application in the Apploi platform. The application form ID is a unique identifier for the job application in the Apploi platform. The application form ID can be found in the 'id' field of the each of the items in the response body of a call to the [/applicants](https://integrate.apploi.com/reference/get_applicants) endpoint in the Apploi Partner API.\n\nExamples: `265733753`, `265733754`, etc."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "x-api-key",
          "path": "/applicants/{applicant_id}/message",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/applicants/{applicant_id}/message",
          "type": "METHOD"
        },
        "properties": {
          "description": "Creates a new message for a specific application. Messages can be sent to the candidate (outbound) or recorded as responses from the candidate (inbound). Supports both text (SMS) and email message types. \n\n**Message Direction:** \n- 'to_candidate': Outbound messages sent to the candidate (e.g., from AI system)\n- 'from_candidate': Inbound messages/responses from the candidate\n\n**Message Delivery Control:** \n- `is_sent_by_vendor`: default true if not sent in payload\n- `is_sent_by_vendor=true`: Vendor handles message delivery\n- `is_sent_by_vendor=false`: Apploi sends the message via SMS/Email infrastructure\n\n**Email Requirements:** When message_type is 'email', the 'subject' field is required.\n\n**Authentication:** Requires valid x-api-key header."
        }
      },
      {
        "location": {
          "method": "POST",
          "name": "applicant_id",
          "path": "/applicants/{applicant_id}/message",
          "type": "PATH_PARAMETER"
        },
        "properties": {
          "description": "The application form ID corresponding to a job application in the Apploi platform. The application form ID is a unique identifier for the job application in the Apploi platform. The application form ID can be found in the 'id' field of the each of the items in the response body of a call to the [/applicants](https://integrate.apploi.com/reference/get_applicants) endpoint in the Apploi Partner API.\n\nExamples: `265733753`, `265733754`, etc."
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/applicants/{applicant_id}/message",
          "type": "REQUEST_BODY"
        },
        "properties": {
          "description": "Pass in a JSON body with message details. All fields are required except 'subject' when message_type is 'text'. \n\n**Required Fields:**\n- external_id: Vendor-specific message identifier\n- message_type: 'text' or 'email'\n- message_body: Message content\n- status: Message status (e.g., 'SENT', 'DELIVERED')\n- vendor_name: Vendor/service name (e.g., 'abc')\n- message_direction: 'to_candidate' or 'from_candidate'\n- sender_email: Email address of the message sender. It is required depending on vendor configuration. This email address should match to the user in Apploi for the team.\n\n**Optional Fields:**\n- subject: Required when message_type is 'email'\n- is_sent_by_vendor: Boolean flag (true = vendor sends, false = Apploi sends) default value is true if not passed in payload\n\n**Example - Text Message to Candidate (Vendor Sends):**\n```json\n{\n  \"external_id\": \"uuid-123-456\",\n  \"message_type\": \"text\",\n  \"message_body\": \"Thank you for applying! We'd like to schedule an interview.\",\n  \"status\": \"SENT\",\n  \"vendor_name\": \"abc\",\n  \"message_direction\": \"to_candidate\",\n  \"is_sent_by_vendor\": true,\n  \"sender_email\": \"recruiter@example.com\"\n}\n```\n\n**Example - Email to Candidate (Apploi Sends):**\n```json\n{\n  \"external_id\": \"email-456-789\",\n  \"message_type\": \"email\",\n  \"message_body\": \"We are excited to move forward with your application...\",\n  \"subject\": \"Interview Invitation\",\n  \"status\": \"SENT\",\n  \"vendor_name\": \"abc\",\n  \"message_direction\": \"to_candidate\",\n  \"is_sent_by_vendor\": false,\n  \"sender_email\": \"recruiter@example.com\"\n}\n```\n\n**Example - Response from Candidate (No Optional Fields):**\n```json\n{\n  \"external_id\": \"response-789-012\",\n  \"message_type\": \"text\",\n  \"message_body\": \"I am available for an interview next week.\",\n  \"status\": \"DELIVERED\",\n  \"vendor_name\": \"abc\",\n  \"message_direction\": \"from_candidate\"\n}\n```"
        }
      },
      {
        "location": {
          "method": "POST",
          "name": "x-api-key",
          "path": "/applicants/{applicant_id}/message",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/basic-info",
          "type": "METHOD"
        },
        "properties": {
          "description": "Return email, first name, last name, home phone number, mobile phone number, and resume file name information for a specific applicant using the token returned by the `/easy-apply` endpoint."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "Authorization",
          "path": "/applicants/basic-info",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "**Deprecated: `Authorization`-header authentication is being sunset.** This flow is affected as part of that sunset — watch for a follow-up communication with details and timelines. The bearer token retrieved from the response to a successful call to the `/easy-apply` endpoint, when submitting a candidate application. This token should be passed in the 'Authorization' header in the following format: 'Bearer <token>'."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/already-applied/{job_id}",
          "type": "METHOD"
        },
        "properties": {
          "description": "Return information if the person has already applied for the job associated with the provided {job_id}."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "Authorization",
          "path": "/applicants/already-applied/{job_id}",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "**Deprecated: `Authorization`-header authentication is being sunset.** This flow is affected as part of that sunset — watch for a follow-up communication with details and timelines. The bearer token retrieved from the response to a successful call to the `/easy-apply` endpoint, when submitting a candidate application. This token should be passed in the 'Authorization' header in the following format: 'Bearer <token>'."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/already-applied/{job_id}",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Invalid Token"
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/already-applied/{job_id}",
          "statusCode": "404",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Not Found"
        }
      },
      {
        "location": {
          "path": "/applicants/preconfigured-documents/{applicant_id}",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "Downloads a candidate's completed preconfigured documents as a single zip archive. \n\nPreconfigured documents are the document templates your team has set up in Apploi. This endpoint returns the individual files pulled out of those documents once the candidate has completed them, bundled into one archive and served as an attachment named `files.zip`. \n\nWhich templates are covered, and which files are extracted from each, is part of your team's document configuration in Apploi rather than something you select per request. A team with no such configuration set up — and no parent team configuration to fall back on — gets a `404` from this endpoint rather than an empty archive. \n\nOnly documents the candidate has actually completed are included. An application whose documents are still outstanding also returns a `404`, so a `404` here does not necessarily mean the application does not exist. A `200` is not a guarantee of content either: when the candidate has completed documents but none of the files configured for them are found, the archive comes back empty. \n\nAccess is authorized per candidate: the caller must have permission on the job the candidate applied to, otherwise the request is rejected with a `403`. \n\nEvery request to this endpoint must include your Apploi-issued API key in the `x-api-key` header."
        }
      },
      {
        "location": {
          "method": "*",
          "name": "applicant_id",
          "path": "/applicants/preconfigured-documents/{applicant_id}",
          "type": "PATH_PARAMETER"
        },
        "properties": {
          "description": "The application form ID corresponding to a job application in the Apploi platform. The application form ID is a unique identifier for the job application in the Apploi platform. The application form ID can be found in the 'id' field of the each of the items in the response body of a call to the [/applicants](https://integrate.apploi.com/reference/get_applicants) endpoint in the Apploi Partner API.\n\nExamples: `265733753`, `265733754`, etc."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/preconfigured-documents/{applicant_id}",
          "type": "METHOD"
        },
        "properties": {
          "description": "Downloads a candidate's completed preconfigured documents as a single zip archive. \n\nPreconfigured documents are the document templates your team has set up in Apploi. This endpoint returns the individual files pulled out of those documents once the candidate has completed them, bundled into one archive and served as an attachment named `files.zip`. \n\nWhich templates are covered, and which files are extracted from each, is part of your team's document configuration in Apploi rather than something you select per request. A team with no such configuration set up — and no parent team configuration to fall back on — gets a `404` from this endpoint rather than an empty archive. \n\nOnly documents the candidate has actually completed are included. An application whose documents are still outstanding also returns a `404`, so a `404` here does not necessarily mean the application does not exist. A `200` is not a guarantee of content either: when the candidate has completed documents but none of the files configured for them are found, the archive comes back empty. \n\nAccess is authorized per candidate: the caller must have permission on the job the candidate applied to, otherwise the request is rejected with a `403`. \n\nEvery request to this endpoint must include your Apploi-issued API key in the `x-api-key` header."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "x-api-key",
          "path": "/applicants/preconfigured-documents/{applicant_id}",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/preconfigured-documents/{applicant_id}",
          "statusCode": "200",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "The documents, as a zip archive served with `Content-Type: application/zip` and a `Content-Disposition` attachment filename of `files.zip`. The body is binary, not JSON."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/preconfigured-documents/{applicant_id}",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "The request was rejected before the archive could be assembled, either because the caller has no permission on the job this candidate applied to or because the API key's user lacks the file-download permission. The body depends on where the rejection happened: a missing or unrecognized `x-api-key` header is rejected by the API gateway itself, which returns `{\"message\": \"Forbidden\"}`, while a rejection further in returns `{\"developer_message\": ...}`."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/preconfigured-documents/{applicant_id}",
          "statusCode": "404",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Returned for four distinct reasons:\n- No application exists with the given `applicant_id`.\n- The `applicant_id` in the path was not an integer.\n- Your team, and its parent team, have no document configuration set up for this endpoint. This is the only one of the four with a `developer_message` that identifies it: `Endpoint not configured for this team`.\n- The candidate has no completed documents to return.\n\nThe `developer_message` does not reliably tell the other three apart, so do not branch on it. The last two reasons mean the application exists and is readable but has nothing to download, so treat a `404` here as an empty result rather than as a missing application."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/preconfigured-documents/{applicant_id}",
          "statusCode": "500",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "The archive could not be assembled because of an error on Apploi's side. The request can safely be retried. Note that any document already read before the error is recorded as downloaded in the candidate's activity log, so a failed request and its retry can each leave entries behind."
        }
      },
      {
        "location": {
          "path": "/applicants/files/{applicant_id}",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "Endpoint for downloading every file attached to a candidate's application as a single zip archive. This endpoint returns the files a candidate uploaded during the application process, such as resumes, certifications and licences, bundled into one archive served as an attachment. If the candidate exists but has no files attached, the request still succeeds with a `200`, and the body is a short JSON message instead of an archive. Callers should therefore check the response `Content-Type` before treating the body as binary. Access is authorised per candidate: the caller must have permission on the job the candidate applied to, otherwise the request is rejected with a `403`."
        }
      },
      {
        "location": {
          "method": "*",
          "name": "applicant_id",
          "path": "/applicants/files/{applicant_id}",
          "type": "PATH_PARAMETER"
        },
        "properties": {
          "description": "The application form ID corresponding to a job application in the Apploi platform. The application form ID is a unique identifier for the job application in the Apploi platform. The application form ID can be found in the 'id' field of the each of the items in the response body of a call to the [/applicants](https://integrate.apploi.com/reference/get_applicants) endpoint in the Apploi Partner API.\n\nExamples: `265733753`, `265733754`, etc."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/files/{applicant_id}",
          "type": "METHOD"
        },
        "properties": {
          "description": "Endpoint for downloading every file attached to a candidate's application as a single zip archive. This endpoint returns the files a candidate uploaded during the application process, such as resumes, certifications and licences, bundled into one archive served as an attachment. If the candidate exists but has no files attached, the request still succeeds with a `200`, and the body is a short JSON message instead of an archive. Callers should therefore check the response `Content-Type` before treating the body as binary. Access is authorised per candidate: the caller must have permission on the job the candidate applied to, otherwise the request is rejected with a `403`."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "x-api-key",
          "path": "/applicants/files/{applicant_id}",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/files/{applicant_id}",
          "statusCode": "200",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Files downloaded as a zip archive, or a JSON message when the candidate has no files. Check the response `Content-Type` before treating the body as binary."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/files/{applicant_id}",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Invalid Token"
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/files/{applicant_id}",
          "statusCode": "404",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Not Found"
        }
      },
      {
        "location": {
          "path": "/applicants/backgroundcheckresult",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "Endpoint for updating background check results for a candidate. This endpoint allows the submission of background check results for a specific applicant.\n\n Note: Every incoming request to the API must contain an API key. The request must include the applicant's ID and the background check result details in JSON format."
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/applicants/backgroundcheckresult",
          "type": "METHOD"
        },
        "properties": {
          "description": "Endpoint for updating background check results for a candidate. This endpoint allows the submission of background check results for a specific applicant.\n\n Note: Every incoming request to the API must contain an API key. The request must include the applicant's ID and the background check result details in JSON format."
        }
      },
      {
        "location": {
          "method": "POST",
          "name": "x-api-key",
          "path": "/applicants/backgroundcheckresult",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "path": "/applicants/status",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "This endpoint is used to update the status of job applications. It can be used to update the status of a single application or multiple applications at once, depending on the request body."
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/applicants/status",
          "type": "METHOD"
        },
        "properties": {
          "description": "This endpoint is used to update the status of job applications. It can be used to update the status of a single application or multiple applications at once, depending on the request body."
        }
      },
      {
        "location": {
          "method": "PUT",
          "name": "x-api-key",
          "path": "/applicants/status",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "PUT",
          "path": "/applicants/status",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Invalid Token"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "team_id",
          "path": "/applicants/applicant-statuses",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "This ID is used to identify the specific `team` record in the Apploi platform which owns the application statuses being queried. \n\nThis ID is assigned by Apploi automatically when a `team` record is first created and is unique to each team. The value of the `team_id` can be found in each of the items returned in the response data of a call to the [/applicants](https://integrate.apploi.com/reference/get_applicants) endpoint. If the JSON body of the response were assigned to a variable called `response` then the team ID for the first item could be accessed through the following nested attribute reference: `response.data[0].job.team_id`(JavaScript), `response['data'][0]['job']['team_id']`(Python). When fetching the available application statuses for the purpose of updating the status of specific job applications, the `team_id` should be the same as the one found in a response from a call to the [/applicants](https://integrate.apploi.com/reference/get_applicants) endpoint.\n\nExamples: `123456`, `789012`"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "Authorization",
          "path": "/applicants/applicant-statuses",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "**Deprecated: `Authorization`-header authentication is being sunset** in favor of `x-api-key` authentication, which is now the standard way to authenticate with the Partner API. New integrations should use `x-api-key` instead — watch for a follow-up communication with removal timelines. The bearer token provided by the `/easy-apply` and/or `/v1/users/login` endpoints (depending on the use case). This token should be passed in the 'Authorization' header in the following format: 'Bearer <token>'."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "x-api-key",
          "path": "/applicants/applicant-statuses",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/applicants/applicant-statuses",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Invalid Token"
        }
      },
      {
        "location": {
          "path": "/easy-apply",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "Endpoint for uploading applicants into Apploi platform. Note: Every incoming request to the API must contain an API key. Otherwise, the caller receives a 403 Forbidden response."
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/easy-apply",
          "type": "REQUEST_BODY"
        },
        "properties": {
          "description": "Pass in a JSON body with applicant details in this format: \n\n\n        \n\n\n        {\n            \"id\": \"12345\",\n            \"get_person_token\": True,\n            \"partner_attributes\": {\n                \"sponsored\": false,\n            },\n            \"applicant_status\": \"New\",\n            \"applicant\": {\n                \"email\": \"john.doe@example.com\",\n                \"fullName\": \"John Doe\",\n                \"phoneNumber\": \"123-456-7890\",\n                \"source\": \"linkedin\",\n                \"utm_source\": \"linkedin\",\n                \"utm_medium\": \"social\",\n                \"utm_campaign\": \"spring_campaign\",\n                \"resume\": {\n                    \"file\": {\n                        \"fileName\": \"resume.pdf\",\n                        \"contentType\": \"application/pdf\",\n                        \"data\": \"base64_encoded_resume_content\",\n                    }\n                },\n            },\n            \"appliedOnMillis\": 1672531199000,\n            \"job\": {\n                \"jobId\": \"67890\"\n            },\n            \"questions\": {\n                \"answers\": [\n                    {\n                        \"id\": \"1\",\n                        \"value\": \"Yes\"\n                    },\n                    {\n                        \"id\": \"2\",\n                        \"values\": [\"Option1\", \"Option2\"]\n                    }\n                ]\n            },\n            \"interview\": {\n                \"date\": \"2024-10-22T14:00:00Z\",\n                \"duration\": \"60\",\n                \"timezone\": \"America/New_York\",\n                \"location\": \"Virtual\",\n                \"interviewerId\": \"123\"\n            }\n        }\n        "
        }
      },
      {
        "location": {
          "method": "POST",
          "name": "x-api-key",
          "path": "/easy-apply",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/easy-apply",
          "statusCode": "409",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Duplicate application: We define duplicate as an application from the same job seeker email, to the same jobid"
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/easy-apply",
          "statusCode": "410",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "If a job post is expired or no longer available."
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/easy-apply",
          "statusCode": "503",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "request took longer than 30 seconds to complete."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "city",
          "path": "/analytics/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Name of the city to filter. example: Houston"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "industry",
          "path": "/analytics/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Name of the industry to filter, should be in English, if it is more than one, use commas to separate. example: Retail,Healthcare,Other"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "language",
          "path": "/analytics/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Language to use for search, this parameter is added to the property redirect_apply_url for apploi jobs. The allowed values are (en|es), By default the value for language is en. Example: language=es."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "location",
          "path": "/analytics/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "GPS coordinates of the location using the format 'lat,long' for example: 25.7616798,-80.1917902"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "location_filter",
          "path": "/analytics/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Use 0 (default) for only sorting by location. Use 1 for filtering by location. into the param."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "page",
          "path": "/analytics/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Page number (starts in 1), each page has 50 results."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "radius",
          "path": "/analytics/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Radius distance in miles from the location coordinates"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "searchbar",
          "path": "/analytics/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Keyword(s) to use on the search"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "source",
          "path": "/analytics/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Partner name"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "state",
          "path": "/analytics/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Name of the state to filter. example: Texas"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "utm_campaign",
          "path": "/analytics/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Identifies a specific product promotion or strategic campaign."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "utm_medium",
          "path": "/analytics/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Identifies what type of link was used, such as cost per click or email."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "utm_source",
          "path": "/analytics/search",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Identifies which site sent the traffic"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "backfilled",
          "path": "/analytics/job-click",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "backfilled field is provided on the job search results"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "city_center",
          "path": "/analytics/job-click",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Houston or Chicago"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "id",
          "path": "/analytics/job-click",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "the job id"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "redirect_apply_url",
          "path": "/analytics/job-click",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Redirect apply url"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "session_id",
          "path": "/analytics/job-click",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "unique id to indicate the unique user"
        }
      },
      {
        "location": {
          "path": "/documents/templates/{template_id}/mergefields",
          "type": "RESOURCE"
        },
        "properties": {}
      },
      {
        "location": {
          "method": "*",
          "name": "template_id",
          "path": "/documents/templates/{template_id}/mergefields",
          "type": "PATH_PARAMETER"
        },
        "properties": {
          "description": "the alphanumeric template id which belongs to the document template"
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/documents/templates/{template_id}/mergefields",
          "type": "METHOD"
        },
        "properties": {
          "description": "Creates or updates merge fields or variables for a specific document template."
        }
      },
      {
        "location": {
          "method": "POST",
          "name": "x-api-key",
          "path": "/documents/templates/{template_id}/mergefields",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/documents/templates/{template_id}/mergefields",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Invalid Token"
        }
      },
      {
        "location": {
          "path": "/application-form-templates",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "Lists the application form templates available to your team, so you can reference a template when creating a job. \n\nResults include every template owned by your team or, if your team has a parent team, that parent team — regardless of who created the template. The API does not currently restrict results further by creator or by template-sharing settings: any caller authenticated for a team sees the full set of templates owned by that team and its parent team."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/application-form-templates",
          "type": "METHOD"
        },
        "properties": {
          "description": "Lists the application form templates available to your team, so you can reference a template when creating a job. \n\nResults include every template owned by your team or, if your team has a parent team, that parent team — regardless of who created the template. The API does not currently restrict results further by creator or by template-sharing settings: any caller authenticated for a team sees the full set of templates owned by that team and its parent team."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "team_id",
          "path": "/application-form-templates",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "This ID is used to identify the specific `team` record in the Apploi platform whose application form templates are being requested. \n\nThis ID is assigned by Apploi automatically when a `team` record is first created and is unique to each team. The value of the `team_id` can be found in each of the items returned in the response data of a call to the [/applicants](https://integrate.apploi.com/reference/get_applicants) endpoint. If the JSON body of the response were assigned to a variable called `response` then the team ID for the first item could be accessed through the following nested attribute reference: `response.data[0].job.team_id` (JavaScript), `response['data'][0]['job']['team_id']` (Python).\n\nExamples: `123456`, `789012`"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "template_group",
          "path": "/application-form-templates",
          "type": "QUERY_PARAMETER"
        },
        "properties": {
          "description": "Filters the returned templates by which stage of the hiring funnel they belong to. \n\nAccepted values: `First Stage` (the initial application a candidate fills out), `Second Stage` (an optional secondary screener), `Interview Guide` (filled out by the interviewer, not the candidate — `interview_guide` is also accepted as an exact alias), and `Not Interview Guide` (a shorthand for \"every template whose group is set to something other than `Interview Guide`\" — `not_interview_guide` is also accepted as an exact alias). \n\n**Matching is case-sensitive and only recognizes these exact strings** — a value like `interview guide` or `INTERVIEW GUIDE` will not match and returns an empty `data` array rather than an error, the same as any other unrecognized value; an empty result does not necessarily mean your team has no templates. \n\n**`Not Interview Guide` also excludes templates whose group is unset (`null`)**, not only ones set to `Interview Guide` — a team whose templates are all ungrouped can get an empty result from this value even though those same templates are returned when the parameter is omitted entirely. \n\nOmit this parameter to return templates from every group, including ungrouped ones.\n\nExamples: `First Stage`, `Interview Guide`, `Not Interview Guide`"
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "Authorization",
          "path": "/application-form-templates",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "**Deprecated: `Authorization`-header authentication is being sunset** in favor of `x-api-key` authentication, which is now the standard way to authenticate with the Partner API. New integrations should use `x-api-key` instead — watch for a follow-up communication with removal timelines. The bearer token provided by the `/easy-apply` and/or `/v1/users/login` endpoints (depending on the use case). This token should be passed in the 'Authorization' header in the following format: 'Bearer <token>'."
        }
      },
      {
        "location": {
          "method": "GET",
          "name": "x-api-key",
          "path": "/application-form-templates",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/application-form-templates",
          "statusCode": "200",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "A `data` array of application form templates. Note `templateGroup` and `template_group` are the same value under two keys (a legacy artifact) — either can be used."
        }
      },
      {
        "location": {
          "method": "GET",
          "path": "/application-form-templates",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "Invalid Token"
        }
      },
      {
        "location": {
          "path": "/v1/users/login",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "**Deprecated: this endpoint is being sunset.** `/v1/users/login` predates API-key authentication and, along with `Authorization`-header authentication generally, is being phased out now that `x-api-key` is the standard way to authenticate with the Partner API. New integrations should use `x-api-key` authentication instead of this endpoint. Existing integrations using this endpoint should plan to migrate — watch for a follow-up communication with removal timelines.\n\nAPI resource to login and getting a response"
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/v1/users/login",
          "type": "METHOD"
        },
        "properties": {
          "description": "**Deprecated: this endpoint is being sunset** in favor of `x-api-key` authentication and will be removed in a future release. Used for logging into the API and getting a response via POST."
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/v1/users/login",
          "type": "REQUEST_BODY"
        },
        "properties": {
          "description": "Pass in a json body with an email address and a password in this format: {\"email\": \"test@example.com\",\"password\": \"<password>\"}"
        }
      },
      {
        "location": {
          "method": "POST",
          "name": "x-api-key",
          "path": "/v1/users/login",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "The AWS API Key provided by Apploi"
        }
      },
      {
        "location": {
          "path": "/webhook/status/{webhook_id}",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "Reports back to Apploi whether a webhook Apploi sent you was processed successfully on your side. \n\nApploi delivers an outbound webhook to your endpoint when an application reaches a configured state. Once you have finished processing that delivery, call this endpoint to record the outcome against the application it was sent for. The `webhook_id` in the path identifies the webhook configuration, and `applicant_id` in the body identifies the application — together they must match a delivery that Apploi has already made successfully, or the request is rejected with a `400`. \n\nWhen reporting a failure (`status` is `false`), `error_message` is required and must not be blank. \n\nEach call records a new status entry rather than replacing the previous one, so calling this endpoint twice for the same delivery records two entries. \n\nEvery request to this endpoint must include your Apploi-issued API key in the `x-api-key` header."
        }
      },
      {
        "location": {
          "method": "*",
          "name": "webhook_id",
          "path": "/webhook/status/{webhook_id}",
          "type": "PATH_PARAMETER"
        },
        "properties": {
          "description": "The ID of the Apploi webhook configuration whose delivery you are reporting on. A webhook configuration is the endpoint, credentials, and trigger state Apploi uses to notify you, and this ID is assigned by Apploi when that configuration is created. It is supplied to you by Apploi as part of setting up your webhook integration, and is the same value for every delivery from that configuration. \n\nThe webhook configuration identified here must be the one whose delivery for the `applicant_id` in the request body succeeded; if no such delivery is found, the request is rejected with a `400`.\n\nExamples: `42`, `43`"
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/webhook/status/{webhook_id}",
          "type": "METHOD"
        },
        "properties": {
          "description": "Reports back to Apploi whether a webhook Apploi sent you was processed successfully on your side. \n\nApploi delivers an outbound webhook to your endpoint when an application reaches a configured state. Once you have finished processing that delivery, call this endpoint to record the outcome against the application it was sent for. The `webhook_id` in the path identifies the webhook configuration, and `applicant_id` in the body identifies the application — together they must match a delivery that Apploi has already made successfully, or the request is rejected with a `400`. \n\nWhen reporting a failure (`status` is `false`), `error_message` is required and must not be blank. \n\nEach call records a new status entry rather than replacing the previous one, so calling this endpoint twice for the same delivery records two entries. \n\nEvery request to this endpoint must include your Apploi-issued API key in the `x-api-key` header."
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/webhook/status/{webhook_id}",
          "type": "REQUEST_BODY"
        },
        "properties": {
          "description": "Pass in a JSON body describing the outcome of the webhook delivery. `applicant_id` and `status` are always required; `error_message` is additionally required whenever `status` is `false`.\n\n**Fields**\n- `applicant_id` (integer, required): the application form ID the webhook was delivered for. This is the application ID, not the candidate's applicant ID.\n- `status` (boolean, required): `true` if you processed the webhook successfully, `false` if it failed.\n- `error_message` (string): why processing failed. Required and must be non-blank when `status` is `false`; ignored when `status` is `true`.\n- `link` (string): a URL to a resource produced while processing the webhook, such as a completed background check report.\n\n**Example — reporting success**\n```json\n{\n  \"applicant_id\": 265733753,\n  \"status\": true,\n  \"link\": \"https://vendor.example.com/reports/abc123\"\n}\n```\n\n**Example — reporting a failure**\n```json\n{\n  \"applicant_id\": 265733753,\n  \"status\": false,\n  \"error_message\": \"Candidate record could not be matched in our system\"\n}\n```"
        }
      },
      {
        "location": {
          "method": "POST",
          "name": "_authorization",
          "path": "/webhook/status/{webhook_id}",
          "type": "REQUEST_HEADER"
        },
        "properties": {
          "description": "**Deprecated: `Authorization`-header authentication is being sunset** in favor of `x-api-key` authentication, which is now the standard way to authenticate with the Partner API. New integrations should use `x-api-key` instead — watch for a follow-up communication with removal timelines. The bearer token provided by the `/easy-apply` and/or `/v1/users/login` endpoints (depending on the use case). This token should be passed in the 'Authorization' header in the following format: 'Bearer <token>'.\n\nOn this endpoint that header is named `_authorization` rather than `Authorization`. You do not need to send it: authenticating with the `x-api-key` header alone is sufficient, and the bearer token is derived from your API key."
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/webhook/status/{webhook_id}",
          "statusCode": "200",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "The status was recorded. The response body carries a `developerMessage` of `status updated successfully` and a `status` field echoing the HTTP status code. Note that the `status` field in the response is the integer HTTP status code, and is unrelated to the boolean `status` field in the request body."
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/webhook/status/{webhook_id}",
          "statusCode": "400",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "The request could not be processed. The `developer_message` field explains why. This status covers:\n- `applicant_id` or `status` missing, or of the wrong type.\n- `status` sent as `false` with no `error_message`, or a blank one.\n- No successful delivery of the webhook identified by `webhook_id` was found for the given `applicant_id`. This case returns `webhook event not found` and is a `400`, not a `404`.\n- A malformed JSON body, or a `Content-Type` other than `application/json`."
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/webhook/status/{webhook_id}",
          "statusCode": "403",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "The request was rejected before it could be processed. This status is returned with one of two different bodies, depending on where the rejection happened, which is why no single schema is declared for it:\n- A missing or unrecognized `x-api-key` header is rejected by the API gateway itself, which returns `{\"message\": \"Forbidden\"}`.\n- A recognized key that lacks permission for this endpoint, or an expired bearer token, is rejected further in and returns `{\"developer_message\": ...}` naming the check that failed."
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/webhook/status/{webhook_id}",
          "statusCode": "404",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "The `webhook_id` in the path was not an integer. Note that a well-formed `webhook_id` with no matching webhook delivery returns a `400`, not a `404` — this status only indicates a malformed path."
        }
      },
      {
        "location": {
          "method": "POST",
          "path": "/webhook/status/{webhook_id}",
          "statusCode": "500",
          "type": "RESPONSE"
        },
        "properties": {
          "description": "The status could not be recorded because of an error on Apploi's side. The request may be retried, but if the original call was applied before the error reached you, the retry records a second entry."
        }
      },
      {
        "location": {
          "path": "/jobs/ai_chat/subscription",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "Endpoint for updating job ai chat feature for a specific team."
        }
      },
      {
        "location": {
          "path": "/jobs/job_attributes",
          "type": "RESOURCE"
        },
        "properties": {
          "description": "Endpoint for creating or updating job attributes for a specific team."
        }
      }
    ],
    "version": "1.3.27"
  },
  "x-amazon-apigateway-gateway-responses": {
    "INTEGRATION_TIMEOUT": {
      "responseTemplates": {
        "application/json": "#if($context.resourcePath == \"/applicants\" && $context.httpMethod == \"GET\"){\"message\": \"Request timed out. The maximum page size is 80; try a smaller limit and use offset to page through results.\"}#else{\"message\":$context.error.messageString}#end"
      }
    }
  },
  "x-amazon-apigateway-request-validators": {
    "BodyValidator": {
      "validateRequestBody": true,
      "validateRequestParameters": false
    },
    "FullRequestValidator": {
      "validateRequestBody": true,
      "validateRequestParameters": true
    }
  }
}
````