curl --request POST \
--url https://hiresweep.com/api/openapi/applications/{id}/apply \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"answers": [
{
"question": "<string>",
"answer": "<string>"
}
],
"applyUrl": "<string>"
}
'import requests
url = "https://hiresweep.com/api/openapi/applications/{id}/apply"
payload = {
"answers": [
{
"question": "<string>",
"answer": "<string>"
}
],
"applyUrl": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({answers: [{question: '<string>', answer: '<string>'}], applyUrl: '<string>'})
};
fetch('https://hiresweep.com/api/openapi/applications/{id}/apply', 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://hiresweep.com/api/openapi/applications/{id}/apply",
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([
'answers' => [
[
'question' => '<string>',
'answer' => '<string>'
]
],
'applyUrl' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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://hiresweep.com/api/openapi/applications/{id}/apply"
payload := strings.NewReader("{\n \"answers\": [\n {\n \"question\": \"<string>\",\n \"answer\": \"<string>\"\n }\n ],\n \"applyUrl\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://hiresweep.com/api/openapi/applications/{id}/apply")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"answers\": [\n {\n \"question\": \"<string>\",\n \"answer\": \"<string>\"\n }\n ],\n \"applyUrl\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hiresweep.com/api/openapi/applications/{id}/apply")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"answers\": [\n {\n \"question\": \"<string>\",\n \"answer\": \"<string>\"\n }\n ],\n \"applyUrl\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"clientId": "<string>",
"jobPostingId": "<string>",
"resumeId": "<string>",
"status": "saved",
"statusChangedAt": "2023-11-07T05:31:56Z",
"matchScore": 50,
"matchScorecard": {
"dimensions": [
{
"dimension": "<string>",
"score": 50,
"rationale": "<string>"
}
],
"missingKeywords": [
"<string>"
],
"strengths": [
"<string>"
],
"modelMeta": {
"provider": "<string>",
"model": "<string>"
},
"updatedAt": "2023-11-07T05:31:56Z",
"resume": {
"id": "<string>",
"name": "<string>"
}
},
"tailoredResumeId": "<string>",
"tailoring": {
"sourceResumeId": "<string>",
"changes": [
{
"kind": "headline",
"label": "<string>",
"before": "<string>",
"after": "<string>",
"reason": "<string>"
}
],
"refused": [
{
"kind": "headline",
"label": "<string>",
"reason": "<string>"
}
],
"match": {
"score": 50,
"dimensions": [
{
"dimension": "<string>",
"score": 50,
"rationale": "<string>"
}
]
},
"modelMeta": {
"provider": "<string>",
"model": "<string>"
},
"updatedAt": "2023-11-07T05:31:56Z",
"sourceScore": 50
},
"tailorError": "<string>",
"applySource": "tailored",
"notes": "<string>",
"coverLetter": "<string>",
"coverLetterTone": "neutral",
"coverLetterGeneratedAt": "2023-11-07T05:31:56Z",
"submittedVia": "manual",
"submittedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"posting": {
"id": "<string>",
"clientId": "<string>",
"source": "manual",
"externalId": "<string>",
"url": "<string>",
"title": "<string>",
"company": "<string>",
"location": "<string>",
"isRemote": true,
"employmentType": "full_time",
"salaryMin": -1,
"salaryMax": -1,
"salaryCurrency": "<string>",
"descriptionRaw": "<string>",
"descriptionParsed": {
"summary": "<string>",
"responsibilities": [
"<string>"
],
"requirements": [
"<string>"
],
"keywords": [
"<string>"
]
},
"postedAt": "2023-11-07T05:31:56Z",
"fetchedAt": "2023-11-07T05:31:56Z",
"reviewError": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
},
"resume": {
"id": "<string>",
"name": "<string>"
}
}{
"defined": true,
"code": "APPLY_LIMIT_REACHED",
"status": 402,
"message": "You have used all the applications in your plan. Upgrade or buy more to keep applying.",
"data": {
"reason": "allowance",
"resetsAt": 123
}
}{
"defined": true,
"code": "APPROVAL_REQUIRED",
"status": 409,
"message": "This client approves each application before it is sent. Ask them to approve this one first.",
"data": {
"reason": "missing"
}
}Fill the application form with the tailored resume
Starts an assisted apply run: Hiresweep’s browser opens the posting, reaches the company’s form (never signing in to LinkedIn or anywhere else), fills it from the tailored resume and the apply profile, attaches the tailored resume as a PDF, and waits. Nothing is submitted until submitApplication, unless the apply profile turns on automatic submission. Answers given here are saved to the apply profile first. Requires a tailored copy. Refused with APPLY_IN_OWN_BROWSER, before any credit is held, when the form asks the candidate to sign in or create an account (Workday): fill those in the user’s own browser instead. Requires authentication.
curl --request POST \
--url https://hiresweep.com/api/openapi/applications/{id}/apply \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"answers": [
{
"question": "<string>",
"answer": "<string>"
}
],
"applyUrl": "<string>"
}
'import requests
url = "https://hiresweep.com/api/openapi/applications/{id}/apply"
payload = {
"answers": [
{
"question": "<string>",
"answer": "<string>"
}
],
"applyUrl": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({answers: [{question: '<string>', answer: '<string>'}], applyUrl: '<string>'})
};
fetch('https://hiresweep.com/api/openapi/applications/{id}/apply', 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://hiresweep.com/api/openapi/applications/{id}/apply",
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([
'answers' => [
[
'question' => '<string>',
'answer' => '<string>'
]
],
'applyUrl' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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://hiresweep.com/api/openapi/applications/{id}/apply"
payload := strings.NewReader("{\n \"answers\": [\n {\n \"question\": \"<string>\",\n \"answer\": \"<string>\"\n }\n ],\n \"applyUrl\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://hiresweep.com/api/openapi/applications/{id}/apply")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"answers\": [\n {\n \"question\": \"<string>\",\n \"answer\": \"<string>\"\n }\n ],\n \"applyUrl\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hiresweep.com/api/openapi/applications/{id}/apply")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"answers\": [\n {\n \"question\": \"<string>\",\n \"answer\": \"<string>\"\n }\n ],\n \"applyUrl\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"clientId": "<string>",
"jobPostingId": "<string>",
"resumeId": "<string>",
"status": "saved",
"statusChangedAt": "2023-11-07T05:31:56Z",
"matchScore": 50,
"matchScorecard": {
"dimensions": [
{
"dimension": "<string>",
"score": 50,
"rationale": "<string>"
}
],
"missingKeywords": [
"<string>"
],
"strengths": [
"<string>"
],
"modelMeta": {
"provider": "<string>",
"model": "<string>"
},
"updatedAt": "2023-11-07T05:31:56Z",
"resume": {
"id": "<string>",
"name": "<string>"
}
},
"tailoredResumeId": "<string>",
"tailoring": {
"sourceResumeId": "<string>",
"changes": [
{
"kind": "headline",
"label": "<string>",
"before": "<string>",
"after": "<string>",
"reason": "<string>"
}
],
"refused": [
{
"kind": "headline",
"label": "<string>",
"reason": "<string>"
}
],
"match": {
"score": 50,
"dimensions": [
{
"dimension": "<string>",
"score": 50,
"rationale": "<string>"
}
]
},
"modelMeta": {
"provider": "<string>",
"model": "<string>"
},
"updatedAt": "2023-11-07T05:31:56Z",
"sourceScore": 50
},
"tailorError": "<string>",
"applySource": "tailored",
"notes": "<string>",
"coverLetter": "<string>",
"coverLetterTone": "neutral",
"coverLetterGeneratedAt": "2023-11-07T05:31:56Z",
"submittedVia": "manual",
"submittedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"posting": {
"id": "<string>",
"clientId": "<string>",
"source": "manual",
"externalId": "<string>",
"url": "<string>",
"title": "<string>",
"company": "<string>",
"location": "<string>",
"isRemote": true,
"employmentType": "full_time",
"salaryMin": -1,
"salaryMax": -1,
"salaryCurrency": "<string>",
"descriptionRaw": "<string>",
"descriptionParsed": {
"summary": "<string>",
"responsibilities": [
"<string>"
],
"requirements": [
"<string>"
],
"keywords": [
"<string>"
]
},
"postedAt": "2023-11-07T05:31:56Z",
"fetchedAt": "2023-11-07T05:31:56Z",
"reviewError": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
},
"resume": {
"id": "<string>",
"name": "<string>"
}
}{
"defined": true,
"code": "APPLY_LIMIT_REACHED",
"status": 402,
"message": "You have used all the applications in your plan. Upgrade or buy more to keep applying.",
"data": {
"reason": "allowance",
"resetsAt": 123
}
}{
"defined": true,
"code": "APPROVAL_REQUIRED",
"status": 409,
"message": "This client approves each application before it is sent. Ask them to approve this one first.",
"data": {
"reason": "missing"
}
}Authorizations
An API key from Settings → Developers → API keys in Hiresweep.
Path Parameters
Body
Response
The application, now applying.
The ID of the application.
The client this application is for; null for your own.
Where the application stands in the pipeline.
saved, reviewing, reviewed, tailoring, ready, applying, needs_action, submitted, screening, interview, offer, rejected, withdrawn, ghosted How well the chosen resume answers the posting.
0 <= x <= 100The per-dimension breakdown behind the score.
Show child attributes
Show child attributes
The copy of the chosen resume tailored to this posting, if any.
What tailoring changed, what it refused, and how the copy scores.
Show child attributes
Show child attributes
Why the last tailoring failed, if it did.
Whether an apply run attaches the tailored copy or the resume itself.
tailored, original The user's own notes about this application.
The application's cover letter as plain text, once there is one.
The tone the cover letter was last written in.
neutral, warm, formal, concise When the cover letter was last written by AI.
Whether the application was sent by hand or assisted.
manual, assisted Show child attributes
Show child attributes
Show child attributes
Show child attributes