curl --request POST \
--url https://api.talentunveiled.com/api/v2/jobs/{job_id}/applications \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"external_id": "candidate-9921",
"first_name": "John",
"last_name": "Doe",
"phone_number": "+16505551234",
"email": "john@example.com",
"custom_fields": {
"Notice period": "30 days"
},
"cv_url": "https://example.com/cv/john-doe.pdf"
}
'import requests
url = "https://api.talentunveiled.com/api/v2/jobs/{job_id}/applications"
payload = {
"external_id": "candidate-9921",
"first_name": "John",
"last_name": "Doe",
"phone_number": "+16505551234",
"email": "john@example.com",
"custom_fields": { "Notice period": "30 days" },
"cv_url": "https://example.com/cv/john-doe.pdf"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
external_id: 'candidate-9921',
first_name: 'John',
last_name: 'Doe',
phone_number: '+16505551234',
email: 'john@example.com',
custom_fields: {'Notice period': '30 days'},
cv_url: 'https://example.com/cv/john-doe.pdf'
})
};
fetch('https://api.talentunveiled.com/api/v2/jobs/{job_id}/applications', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.talentunveiled.com/api/v2/jobs/{job_id}/applications",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'external_id' => 'candidate-9921',
'first_name' => 'John',
'last_name' => 'Doe',
'phone_number' => '+16505551234',
'email' => 'john@example.com',
'custom_fields' => [
'Notice period' => '30 days'
],
'cv_url' => 'https://example.com/cv/john-doe.pdf'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.talentunveiled.com/api/v2/jobs/{job_id}/applications"
payload := strings.NewReader("{\n \"external_id\": \"candidate-9921\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"phone_number\": \"+16505551234\",\n \"email\": \"john@example.com\",\n \"custom_fields\": {\n \"Notice period\": \"30 days\"\n },\n \"cv_url\": \"https://example.com/cv/john-doe.pdf\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.talentunveiled.com/api/v2/jobs/{job_id}/applications")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"external_id\": \"candidate-9921\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"phone_number\": \"+16505551234\",\n \"email\": \"john@example.com\",\n \"custom_fields\": {\n \"Notice period\": \"30 days\"\n },\n \"cv_url\": \"https://example.com/cv/john-doe.pdf\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.talentunveiled.com/api/v2/jobs/{job_id}/applications")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"external_id\": \"candidate-9921\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"phone_number\": \"+16505551234\",\n \"email\": \"john@example.com\",\n \"custom_fields\": {\n \"Notice period\": \"30 days\"\n },\n \"cv_url\": \"https://example.com/cv/john-doe.pdf\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"status": "applied",
"created_at": "2023-11-07T05:31:56Z",
"candidate": {
"first_name": "<string>",
"last_name": "<string>",
"phone_number": "<string>",
"email": "jsmith@example.com"
},
"job": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>"
},
"interview": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"is_eligible": true
},
"links": {},
"custom_fields": null
}[
{
"code": "error",
"detail": "<string>",
"attr": "<string>"
}
][
{
"code": "error",
"detail": "<string>",
"attr": "<string>"
}
][
{
"code": "error",
"detail": "<string>",
"attr": "<string>"
}
][
{
"code": "error",
"detail": "<string>",
"attr": "<string>"
}
]Create an application
Create a job application. Phone must be E.164. The interview session is auto-created. Accepts an Idempotency-Key header to make retries safe.
curl --request POST \
--url https://api.talentunveiled.com/api/v2/jobs/{job_id}/applications \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"external_id": "candidate-9921",
"first_name": "John",
"last_name": "Doe",
"phone_number": "+16505551234",
"email": "john@example.com",
"custom_fields": {
"Notice period": "30 days"
},
"cv_url": "https://example.com/cv/john-doe.pdf"
}
'import requests
url = "https://api.talentunveiled.com/api/v2/jobs/{job_id}/applications"
payload = {
"external_id": "candidate-9921",
"first_name": "John",
"last_name": "Doe",
"phone_number": "+16505551234",
"email": "john@example.com",
"custom_fields": { "Notice period": "30 days" },
"cv_url": "https://example.com/cv/john-doe.pdf"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
external_id: 'candidate-9921',
first_name: 'John',
last_name: 'Doe',
phone_number: '+16505551234',
email: 'john@example.com',
custom_fields: {'Notice period': '30 days'},
cv_url: 'https://example.com/cv/john-doe.pdf'
})
};
fetch('https://api.talentunveiled.com/api/v2/jobs/{job_id}/applications', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.talentunveiled.com/api/v2/jobs/{job_id}/applications",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'external_id' => 'candidate-9921',
'first_name' => 'John',
'last_name' => 'Doe',
'phone_number' => '+16505551234',
'email' => 'john@example.com',
'custom_fields' => [
'Notice period' => '30 days'
],
'cv_url' => 'https://example.com/cv/john-doe.pdf'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.talentunveiled.com/api/v2/jobs/{job_id}/applications"
payload := strings.NewReader("{\n \"external_id\": \"candidate-9921\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"phone_number\": \"+16505551234\",\n \"email\": \"john@example.com\",\n \"custom_fields\": {\n \"Notice period\": \"30 days\"\n },\n \"cv_url\": \"https://example.com/cv/john-doe.pdf\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.talentunveiled.com/api/v2/jobs/{job_id}/applications")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"external_id\": \"candidate-9921\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"phone_number\": \"+16505551234\",\n \"email\": \"john@example.com\",\n \"custom_fields\": {\n \"Notice period\": \"30 days\"\n },\n \"cv_url\": \"https://example.com/cv/john-doe.pdf\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.talentunveiled.com/api/v2/jobs/{job_id}/applications")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"external_id\": \"candidate-9921\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"phone_number\": \"+16505551234\",\n \"email\": \"john@example.com\",\n \"custom_fields\": {\n \"Notice period\": \"30 days\"\n },\n \"cv_url\": \"https://example.com/cv/john-doe.pdf\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"external_id": "<string>",
"status": "applied",
"created_at": "2023-11-07T05:31:56Z",
"candidate": {
"first_name": "<string>",
"last_name": "<string>",
"phone_number": "<string>",
"email": "jsmith@example.com"
},
"job": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>"
},
"interview": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"is_eligible": true
},
"links": {},
"custom_fields": null
}[
{
"code": "error",
"detail": "<string>",
"attr": "<string>"
}
][
{
"code": "error",
"detail": "<string>",
"attr": "<string>"
}
][
{
"code": "error",
"detail": "<string>",
"attr": "<string>"
}
][
{
"code": "error",
"detail": "<string>",
"attr": "<string>"
}
]Authorizations
API key authentication for the public API. Pass your API key as a Bearer token.
Headers
Unique key (e.g. a UUID v4) that makes this POST safe to retry: a repeated key replays the original response instead of creating a second resource.
Path Parameters
Body
Request body for POST /jobs/{job_id}/applications.
1 - 150Phone number in E.164 format (e.g. +16505551234, +66812345678).
1 - 20Your identifier for this application in your own system. Returned on reads and webhook events. Unique per job posting.
2551 - 1501Free-form JSON object of customer-submitted data. Max 64 KB serialized.
Show child attributes
Show child attributes
Optional https URL to the candidate's CV (PDF). Downloaded and processed asynchronously.
When to hold the interview (ISO 8601). Required when the job's interview-config schedule is enabled; must be omitted otherwise (a 409 is returned if provided when scheduling is off).
Response
Full application: adds custom_fields to the list shape.
The interview / insights / CV-evaluation sub-resources are reached via the
links block (each is its own typed endpoint), not inlined here.
The application's ID in the system that supplied it, in that system's own form. Unique per job posting and source.
applied- Appliedscreened- Screenedinterviewed- Interviewedshortlisted- Shortlistedhired- Hiredrejected- Rejected
applied, screened, interviewed, shortlisted, hired, rejected Show child attributes
Show child attributes
Show child attributes
Show child attributes
Lean interview pointer on an application (full result is its own sub-resource).
Show child attributes
Show child attributes
Show child attributes
Show child attributes

