/application-form-templates

Lists the application form templates available to your team, so you can reference a template when creating a job.

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

By default every matching template is returned in one response. To read them in pages instead, send limit and offset.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

Here is the documentation to use this endpoint as library.

Examples

Each example lists the application form templates for one team. Replace 123456 with one of your team ids. Use a template's id when you create a job.

The examples read your API key from an environment variable named APPLOI_API_KEY. Before running them, set APPLOI_API_KEY in your own environment to the Partner API key you received from Apploi. The examples do not set it for you, and the key should never be written into your code.

Listing every template

Without limit or offset, every template your team can use comes back in one response. Most teams have few enough templates for this to be the simplest option.

# APPLOI_API_KEY must hold the Partner API key you received from Apploi.
# These examples do not set it for you: set it yourself, in your own
# environment, before running them. For example, in your shell:
#   export APPLOI_API_KEY="<the API key you received from Apploi>"

curl -G https://partners.apploi.com/application-form-templates \
  -H "X-Api-Key: $APPLOI_API_KEY" \
  --data-urlencode "team_id=123456"
import os

import requests

# APPLOI_API_KEY must hold the Partner API key you received from Apploi.
# These examples do not set it for you: set it yourself, in your own
# environment, before running them. For example, in your shell:
#   export APPLOI_API_KEY="<the API key you received from Apploi>"
API_KEY = os.environ["APPLOI_API_KEY"]

response = requests.get(
    "https://partners.apploi.com/application-form-templates",
    headers={"X-Api-Key": API_KEY},
    params={"team_id": 123456},
    timeout=60,
)
response.raise_for_status()

for template in response.json()["data"]:
    print(template["id"], template["name"], template["templateGroup"])
// APPLOI_API_KEY must hold the Partner API key you received from Apploi.
// These examples do not set it for you: set it yourself, in your own
// environment, before running them. For example, in your shell:
//   export APPLOI_API_KEY="<the API key you received from Apploi>"
if (!process.env.APPLOI_API_KEY) {
  throw new Error("Set APPLOI_API_KEY to the Partner API key you received from Apploi");
}
const API_KEY: string = process.env.APPLOI_API_KEY;

const params = new URLSearchParams({ team_id: "123456" });
const response = await fetch(`https://partners.apploi.com/application-form-templates?${params}`, {
  headers: { "X-Api-Key": API_KEY },
});
if (!response.ok) {
  throw new Error(`Request failed with status ${response.status}`);
}
const body = await response.json();

for (const template of body.data) {
  console.log(template.id, template.name, template.templateGroup);
}
require "json"
require "net/http"
require "uri"

# APPLOI_API_KEY must hold the Partner API key you received from Apploi.
# These examples do not set it for you: set it yourself, in your own
# environment, before running them. For example, in your shell:
#   export APPLOI_API_KEY="<the API key you received from Apploi>"
API_KEY = ENV.fetch("APPLOI_API_KEY")

uri = URI("https://partners.apploi.com/application-form-templates")
uri.query = URI.encode_www_form(team_id: 123456)
request = Net::HTTP::Get.new(uri)
request["X-Api-Key"] = API_KEY

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, read_timeout: 60) do |http|
  http.request(request)
end
raise "Request failed with status #{response.code}" unless response.is_a?(Net::HTTPSuccess)

JSON.parse(response.body)["data"].each do |template|
  puts [template["id"], template["name"], template["templateGroup"]].join(" ")
end

Trimmed to a few fields, the response looks like this:

{
  "data": [
    {
      "id": 12345,
      "name": "Standard CNA Application",
      "published": true,
      "templateGroup": "First Stage",
      "team_id": 456
    }
  ]
}

Results include templates owned by your team's parent team, so a template's team_id can differ from the team_id you sent.

Paging through templates

To keep each response small, send limit and offset. Templates are then ordered by id, and the response also returns the limit and offset that were applied. Add limit to offset on each request, and stop when a page holds fewer templates than limit.

limit must be between 1 and 2200, and offset must be between 0 and 2147483647. Any other value returns 400.

# APPLOI_API_KEY must hold the Partner API key you received from Apploi.
# These examples do not set it for you: set it yourself, in your own
# environment, before running them. For example, in your shell:
#   export APPLOI_API_KEY="<the API key you received from Apploi>"

# Page 1
curl -G https://partners.apploi.com/application-form-templates \
  -H "X-Api-Key: $APPLOI_API_KEY" \
  --data-urlencode "team_id=123456" \
  --data-urlencode "limit=50" \
  --data-urlencode "offset=0"

# Page 2: offset increases by limit
curl -G https://partners.apploi.com/application-form-templates \
  -H "X-Api-Key: $APPLOI_API_KEY" \
  --data-urlencode "team_id=123456" \
  --data-urlencode "limit=50" \
  --data-urlencode "offset=50"
import os

import requests

# APPLOI_API_KEY must hold the Partner API key you received from Apploi.
# These examples do not set it for you: set it yourself, in your own
# environment, before running them. For example, in your shell:
#   export APPLOI_API_KEY="<the API key you received from Apploi>"
API_KEY = os.environ["APPLOI_API_KEY"]

def fetch_all_templates(team_id, page_size=50):
    templates = []
    offset = 0
    while True:
        response = requests.get(
            "https://partners.apploi.com/application-form-templates",
            headers={"X-Api-Key": API_KEY},
            params={"team_id": team_id, "limit": page_size, "offset": offset},
            timeout=60,
        )
        response.raise_for_status()
        page = response.json()

        templates.extend(page["data"])
        if len(page["data"]) < page["limit"]:
            return templates
        offset += page["limit"]

templates = fetch_all_templates(123456)
// APPLOI_API_KEY must hold the Partner API key you received from Apploi.
// These examples do not set it for you: set it yourself, in your own
// environment, before running them. For example, in your shell:
//   export APPLOI_API_KEY="<the API key you received from Apploi>"
if (!process.env.APPLOI_API_KEY) {
  throw new Error("Set APPLOI_API_KEY to the Partner API key you received from Apploi");
}
const API_KEY: string = process.env.APPLOI_API_KEY;

async function fetchAllTemplates(teamId: string, pageSize = 50): Promise<any[]> {
  const templates: any[] = [];
  let offset = 0;
  while (true) {
    const params = new URLSearchParams({
      team_id: teamId,
      limit: String(pageSize),
      offset: String(offset),
    });
    const response = await fetch(`https://partners.apploi.com/application-form-templates?${params}`, {
      headers: { "X-Api-Key": API_KEY },
    });
    if (!response.ok) {
      throw new Error(`Request failed with status ${response.status}`);
    }
    const page = await response.json();

    templates.push(...page.data);
    if (page.data.length < page.limit) {
      return templates;
    }
    offset += page.limit;
  }
}

const templates = await fetchAllTemplates("123456");
require "json"
require "net/http"
require "uri"

# APPLOI_API_KEY must hold the Partner API key you received from Apploi.
# These examples do not set it for you: set it yourself, in your own
# environment, before running them. For example, in your shell:
#   export APPLOI_API_KEY="<the API key you received from Apploi>"
API_KEY = ENV.fetch("APPLOI_API_KEY")

def fetch_all_templates(team_id, page_size = 50)
  templates = []
  offset = 0
  loop do
    uri = URI("https://partners.apploi.com/application-form-templates")
    uri.query = URI.encode_www_form(team_id: team_id, limit: page_size, offset: offset)
    request = Net::HTTP::Get.new(uri)
    request["X-Api-Key"] = API_KEY

    response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, read_timeout: 60) do |http|
      http.request(request)
    end
    raise "Request failed with status #{response.code}" unless response.is_a?(Net::HTTPSuccess)
    page = JSON.parse(response.body)

    templates.concat(page["data"])
    return templates if page["data"].length < page["limit"]

    offset += page["limit"]
  end
end

templates = fetch_all_templates(123456)

A page looks like this:

{
  "data": [
    {
      "id": 12345,
      "name": "Standard CNA Application",
      "published": true,
      "templateGroup": "First Stage",
      "team_id": 456
    }
  ],
  "offset": 0,
  "limit": 50
}

A new template has a higher id than every existing one, so it shows up on the last page. A template deleted or archived while you page moves the ones after it up one place, so one template can be skipped. If that matters, read the list again, or read it in one request without limit.

Query Params
string

The maximum number of templates to return in a single response. Must be a whole number between 1 and 2200; any other value is rejected with a 400.

Omit limit to return every matching template in one response, as this endpoint always has. Unlike some other list endpoints, there is no default page size.

When you send limit or offset, templates are ordered by id, and the response also includes the limit and offset that were applied.

Examples: 50, 100

string
required

This ID is used to identify the specific team record in the Apploi platform whose application form templates are being requested.

This 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 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).

Examples: 123456, 789012

string

The number of templates to skip before returning results, used for pagination. Defaults to 0. Must be a whole number between 0 and 2147483647; any other value is rejected with a 400.

To page through all templates, increase offset by limit on each request (e.g. limit=50&offset=0, then limit=50&offset=50, ...) until a page returns fewer templates than limit.

Examples: 0, 50

string

Filters the returned templates by which stage of the hiring funnel they belong to.

Accepted 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).

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.

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.

Omit this parameter to return templates from every group, including ungrouped ones.

Examples: First Stage, Interview Guide, Not Interview Guide

Responses

400

400 response

403

Invalid Token

Language
Credentials
Header
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json