Interview
Parse Job Description
POST
/
ai
/
parse-jd
curl --request POST \
--url https://api.tidyhire.app/api/public/v1/ai/parse-jd \
--header 'x-tidyhire-api-key: <token>' \
--header 'Content-Type: application/json' \
--data '{
"job_description": "We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required."
}'
fetch('https://api.tidyhire.app/api/public/v1/ai/parse-jd', {
method: 'POST',
headers: {
'x-tidyhire-api-key': '<token>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
job_description:
'We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.',
}),
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error('Error:', error));
<?php
$url = 'https://api.tidyhire.app/api/public/v1/ai/parse-jd';
$data = [
'job_description' => 'We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.'
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'x-tidyhire-api-key: <token>',
'Content-Type: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
url := "https://api.tidyhire.app/api/public/v1/ai/parse-jd"
payload := map[string]interface{}{
"job_description": "We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("x-tidyhire-api-key", "<token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class ParseJd {
public static void main(String[] args) {
try {
URL url = new URL("https://api.tidyhire.app/api/public/v1/ai/parse-jd");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("x-tidyhire-api-key", "<token>");
con.setRequestProperty("Content-Type", "application/json");
con.setDoOutput(true);
String jsonInputString = "{\n" +
" \"job_description\": \"We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.\"\n" +
"}";
try (OutputStream os = con.getOutputStream()) {
byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
}
int status = con.getResponseCode();
System.out.println("Response Status: " + status);
} catch (Exception e) {
e.printStackTrace();
}
}
}
require 'net/http'
require 'json'
require 'uri'
uri = URI('https://api.tidyhire.app/api/public/v1/ai/parse-jd')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.path)
request['x-tidyhire-api-key'] = '<token>'
request['Content-Type'] = 'application/json'
request.body = {
job_description: 'We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.'
}.to_json
response = http.request(request)
puts response.body
{
"success": true,
"message": "Job requirements parsed successfully",
"data": {
"min_experience": 3,
"max_experience": 5,
"seniority_level": "Senior",
"work_type": "Remote",
"employment_type": "Full Time",
"location": "New York, NY",
"skills_required": ["JavaScript", "Node.js", "MongoDB"],
"skills_good_to_have": ["TypeScript", "Redis", "Docker"]
}
}
This endpoint is AI-powered and rate limited to 5 requests/minute. It uses a large language model to intelligently extract structured job requirements from free-text job descriptions.
- Experience & seniority level
- Work type & employment type
- Location
- Must-have and good-to-have skills
curl --request POST \
--url https://api.tidyhire.app/api/public/v1/ai/parse-jd \
--header 'x-tidyhire-api-key: <token>' \
--header 'Content-Type: application/json' \
--data '{
"job_description": "We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required."
}'
fetch('https://api.tidyhire.app/api/public/v1/ai/parse-jd', {
method: 'POST',
headers: {
'x-tidyhire-api-key': '<token>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
job_description:
'We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.',
}),
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error('Error:', error));
<?php
$url = 'https://api.tidyhire.app/api/public/v1/ai/parse-jd';
$data = [
'job_description' => 'We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.'
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'x-tidyhire-api-key: <token>',
'Content-Type: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
url := "https://api.tidyhire.app/api/public/v1/ai/parse-jd"
payload := map[string]interface{}{
"job_description": "We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("x-tidyhire-api-key", "<token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class ParseJd {
public static void main(String[] args) {
try {
URL url = new URL("https://api.tidyhire.app/api/public/v1/ai/parse-jd");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("x-tidyhire-api-key", "<token>");
con.setRequestProperty("Content-Type", "application/json");
con.setDoOutput(true);
String jsonInputString = "{\n" +
" \"job_description\": \"We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.\"\n" +
"}";
try (OutputStream os = con.getOutputStream()) {
byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
}
int status = con.getResponseCode();
System.out.println("Response Status: " + status);
} catch (Exception e) {
e.printStackTrace();
}
}
}
require 'net/http'
require 'json'
require 'uri'
uri = URI('https://api.tidyhire.app/api/public/v1/ai/parse-jd')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.path)
request['x-tidyhire-api-key'] = '<token>'
request['Content-Type'] = 'application/json'
request.body = {
job_description: 'We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.'
}.to_json
response = http.request(request)
puts response.body
{
"success": true,
"message": "Job requirements parsed successfully",
"data": {
"min_experience": 3,
"max_experience": 5,
"seniority_level": "Senior",
"work_type": "Remote",
"employment_type": "Full Time",
"location": "New York, NY",
"skills_required": ["JavaScript", "Node.js", "MongoDB"],
"skills_good_to_have": ["TypeScript", "Redis", "Docker"]
}
}
Authorizations
string | header
required
API key of the form
<token>, passed as the x-tidyhire-api-key header.Body
string
required
Free-text job description to parse.Example:
"We are looking for a Senior Software Engineer..."Response
Job requirements parsed successfullyboolean
Indicates if the request was successful. Example:
truestring
Status details. Example:
"Job requirements parsed successfully"object
Common Errors
- 200 (success: false)
- 400 Bad Request
- 401 Unauthorized
- 422 Validation Error
- 429 Too Many Requests
Reason: The text is not a recognisable job description — the request succeeded but the AI could not parse it.
{
"success": false,
"message": "Input is not a recognisable job description."
}
Reason: The request body is not valid JSON.
{
"success": false,
"message": "Invalid JSON in request body"
}
Reason: Missing or invalid
x-tidyhire-api-key header.{
"success": false,
"message": "Unauthorized, Please reach out at support@tidyhire.app"
}
Reason:
job_description is empty, missing, or has the wrong type.{
"success": false,
"message": "Validation error: Job Description is required",
"errors": [
{ "path": "job_description", "message": "Job Description is required" }
]
}
Reason: More than 5 requests in a minute.
{
"success": false,
"message": "Too many requests, please try again later"
}
Was this page helpful?
⌘I
curl --request POST \
--url https://api.tidyhire.app/api/public/v1/ai/parse-jd \
--header 'x-tidyhire-api-key: <token>' \
--header 'Content-Type: application/json' \
--data '{
"job_description": "We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required."
}'
fetch('https://api.tidyhire.app/api/public/v1/ai/parse-jd', {
method: 'POST',
headers: {
'x-tidyhire-api-key': '<token>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
job_description:
'We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.',
}),
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error('Error:', error));
<?php
$url = 'https://api.tidyhire.app/api/public/v1/ai/parse-jd';
$data = [
'job_description' => 'We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.'
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'x-tidyhire-api-key: <token>',
'Content-Type: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
url := "https://api.tidyhire.app/api/public/v1/ai/parse-jd"
payload := map[string]interface{}{
"job_description": "We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("x-tidyhire-api-key", "<token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class ParseJd {
public static void main(String[] args) {
try {
URL url = new URL("https://api.tidyhire.app/api/public/v1/ai/parse-jd");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("x-tidyhire-api-key", "<token>");
con.setRequestProperty("Content-Type", "application/json");
con.setDoOutput(true);
String jsonInputString = "{\n" +
" \"job_description\": \"We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.\"\n" +
"}";
try (OutputStream os = con.getOutputStream()) {
byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
}
int status = con.getResponseCode();
System.out.println("Response Status: " + status);
} catch (Exception e) {
e.printStackTrace();
}
}
}
require 'net/http'
require 'json'
require 'uri'
uri = URI('https://api.tidyhire.app/api/public/v1/ai/parse-jd')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.path)
request['x-tidyhire-api-key'] = '<token>'
request['Content-Type'] = 'application/json'
request.body = {
job_description: 'We are looking for a Senior Software Engineer to join our team and build scalable backend services. 5+ years of experience with Node.js required.'
}.to_json
response = http.request(request)
puts response.body
{
"success": true,
"message": "Job requirements parsed successfully",
"data": {
"min_experience": 3,
"max_experience": 5,
"seniority_level": "Senior",
"work_type": "Remote",
"employment_type": "Full Time",
"location": "New York, NY",
"skills_required": ["JavaScript", "Node.js", "MongoDB"],
"skills_good_to_have": ["TypeScript", "Redis", "Docker"]
}
}