curl -X POST "https://connect.jobo.world/api/auto-apply/applications" \
-H "X-Api-Key: $JOBO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
--max-time 120 \
-d '{"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"}'import requests
url = "https://connect.jobo.world/api/auto-apply/applications"
payload = { "job_id": "2c1ac0f5-8772-43d2-b5a8-26b44a3fa171" }
headers = {
"Idempotency-Key": "<idempotency-key>",
"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: {
'Idempotency-Key': '<idempotency-key>',
'X-Api-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({job_id: '2c1ac0f5-8772-43d2-b5a8-26b44a3fa171'})
};
fetch('https://connect.jobo.world/api/auto-apply/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://connect.jobo.world/api/auto-apply/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([
'job_id' => '2c1ac0f5-8772-43d2-b5a8-26b44a3fa171'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"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://connect.jobo.world/api/auto-apply/applications"
payload := strings.NewReader("{\n \"job_id\": \"2c1ac0f5-8772-43d2-b5a8-26b44a3fa171\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
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://connect.jobo.world/api/auto-apply/applications")
.header("Idempotency-Key", "<idempotency-key>")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"job_id\": \"2c1ac0f5-8772-43d2-b5a8-26b44a3fa171\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://connect.jobo.world/api/auto-apply/applications")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"job_id\": \"2c1ac0f5-8772-43d2-b5a8-26b44a3fa171\"\n}"
response = http.request(request)
puts response.read_body{
"api_version": "2026-08-31",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"job_id": "<string>",
"apply_url": "<string>",
"provider_id": "<string>",
"provider_name": "<string>",
"status": "queued",
"cancel_requested": true,
"status_updated_at": "2023-11-07T05:31:56Z",
"queued_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"submitted_at": "2023-11-07T05:31:56Z",
"failed_at": "2023-11-07T05:31:56Z",
"canceled_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"provider_version": "<string>",
"matcher_revision": 123,
"catalog_revision": 123,
"settings_revision": 123,
"provider_receipt_id": "<string>",
"submission_confirmation_kind": "provider_receipt",
"failure": {
"code": "submission_unconfirmed",
"message": "<string>",
"retryable": true
},
"canceled_by": "<string>",
"steps": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence": 2,
"status": "answered",
"correction_round": 1,
"fields": [
{
"field_id": "<string>",
"type": "text",
"label": "<string>",
"required": true,
"requires_answer": true,
"constraints": {},
"sensitive": true,
"format": "<string>"
}
],
"answers": [
{
"field_id": "<string>",
"value": "<string>"
}
],
"command_errors": [
{
"field_id": "<string>",
"item_index": 1,
"field_key": "<string>",
"code": "invalid_option",
"message": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"field_count": 1,
"answer_count": 1,
"answers_expire_at": "2023-11-07T05:31:56Z"
}
],
"current_step": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence": 2,
"status": "answered",
"correction_round": 1,
"fields": [
{
"field_id": "<string>",
"type": "text",
"label": "<string>",
"required": true,
"requires_answer": true,
"constraints": {},
"sensitive": true,
"format": "<string>"
}
],
"answers": [
{
"field_id": "<string>",
"value": "<string>"
}
],
"command_errors": [
{
"field_id": "<string>",
"item_index": 1,
"field_key": "<string>",
"code": "invalid_option",
"message": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"field_count": 1,
"answer_count": 1,
"answers_expire_at": "2023-11-07T05:31:56Z"
}
}{
"api_version": "2026-08-31",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"job_id": "<string>",
"apply_url": "<string>",
"provider_id": "<string>",
"provider_name": "<string>",
"status": "queued",
"cancel_requested": true,
"status_updated_at": "2023-11-07T05:31:56Z",
"queued_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"submitted_at": "2023-11-07T05:31:56Z",
"failed_at": "2023-11-07T05:31:56Z",
"canceled_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"provider_version": "<string>",
"matcher_revision": 123,
"catalog_revision": 123,
"settings_revision": 123,
"provider_receipt_id": "<string>",
"submission_confirmation_kind": "provider_receipt",
"failure": {
"code": "submission_unconfirmed",
"message": "<string>",
"retryable": true
},
"canceled_by": "<string>",
"steps": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence": 2,
"status": "answered",
"correction_round": 1,
"fields": [
{
"field_id": "<string>",
"type": "text",
"label": "<string>",
"required": true,
"requires_answer": true,
"constraints": {},
"sensitive": true,
"format": "<string>"
}
],
"answers": [
{
"field_id": "<string>",
"value": "<string>"
}
],
"command_errors": [
{
"field_id": "<string>",
"item_index": 1,
"field_key": "<string>",
"code": "invalid_option",
"message": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"field_count": 1,
"answer_count": 1,
"answers_expire_at": "2023-11-07T05:31:56Z"
}
],
"current_step": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence": 2,
"status": "answered",
"correction_round": 1,
"fields": [
{
"field_id": "<string>",
"type": "text",
"label": "<string>",
"required": true,
"requires_answer": true,
"constraints": {},
"sensitive": true,
"format": "<string>"
}
],
"answers": [
{
"field_id": "<string>",
"value": "<string>"
}
],
"command_errors": [
{
"field_id": "<string>",
"item_index": 1,
"field_key": "<string>",
"code": "invalid_option",
"message": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"field_count": 1,
"answer_count": 1,
"answers_expire_at": "2023-11-07T05:31:56Z"
}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"api_version": "2026-08-31"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"api_version": "2026-08-31"
}{
"title": "auto_apply_not_enabled",
"status": 403,
"detail": "Auto Apply is not enabled for this account.",
"code": "auto_apply_not_enabled",
"api_version": "2026-08-31"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"api_version": "2026-08-31"
}{
"title": "concurrency_limit_reached",
"status": 409,
"detail": "You have reached your limit of 1 concurrent application. Please cancel or submit your existing applications before starting a new one.",
"code": "concurrency_limit_reached",
"limit": 1,
"active": 1,
"api_version": "2026-08-31"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"api_version": "2026-08-31"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"api_version": "2026-08-31"
}{
"title": "provider_catalog_unavailable",
"status": 503,
"detail": "The verified Auto Apply provider catalog is unavailable.",
"code": "provider_catalog_unavailable",
"api_version": "2026-08-31"
}Create an application
Auto Apply is an invite-only beta. Accounts without access receive 403 with problem code auto_apply_not_enabled.
Validate a profileless job application and BLOCK until the first form step’s fields are discovered. Supply exactly one of job_id or apply_url. The success response is the full application: status awaiting_answers with the fields to answer in current_step, or a terminal failure when the target could not be worked. The hold is typically 10 seconds to 3 minutes but is capped at 90 seconds per request; keep your HTTP client timeout above 120 seconds.
When the server’s wait budget expires while the application is still queued or running, the response is 202 with a snapshot instead. Re-attach by repeating this request with the same Idempotency-Key (the replay joins the in-flight wait) or with GET /api/auto-apply/applications/?wait_seconds=90, looping until the application is answerable or terminal.
Idempotency-Key is required. Reusing a key with the same canonical body re-attaches to the original application for 24 hours; reusing it with a different body returns a conflict.
curl -X POST "https://connect.jobo.world/api/auto-apply/applications" \
-H "X-Api-Key: $JOBO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
--max-time 120 \
-d '{"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"}'import requests
url = "https://connect.jobo.world/api/auto-apply/applications"
payload = { "job_id": "2c1ac0f5-8772-43d2-b5a8-26b44a3fa171" }
headers = {
"Idempotency-Key": "<idempotency-key>",
"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: {
'Idempotency-Key': '<idempotency-key>',
'X-Api-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({job_id: '2c1ac0f5-8772-43d2-b5a8-26b44a3fa171'})
};
fetch('https://connect.jobo.world/api/auto-apply/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://connect.jobo.world/api/auto-apply/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([
'job_id' => '2c1ac0f5-8772-43d2-b5a8-26b44a3fa171'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"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://connect.jobo.world/api/auto-apply/applications"
payload := strings.NewReader("{\n \"job_id\": \"2c1ac0f5-8772-43d2-b5a8-26b44a3fa171\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
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://connect.jobo.world/api/auto-apply/applications")
.header("Idempotency-Key", "<idempotency-key>")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"job_id\": \"2c1ac0f5-8772-43d2-b5a8-26b44a3fa171\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://connect.jobo.world/api/auto-apply/applications")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"job_id\": \"2c1ac0f5-8772-43d2-b5a8-26b44a3fa171\"\n}"
response = http.request(request)
puts response.read_body{
"api_version": "2026-08-31",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"job_id": "<string>",
"apply_url": "<string>",
"provider_id": "<string>",
"provider_name": "<string>",
"status": "queued",
"cancel_requested": true,
"status_updated_at": "2023-11-07T05:31:56Z",
"queued_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"submitted_at": "2023-11-07T05:31:56Z",
"failed_at": "2023-11-07T05:31:56Z",
"canceled_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"provider_version": "<string>",
"matcher_revision": 123,
"catalog_revision": 123,
"settings_revision": 123,
"provider_receipt_id": "<string>",
"submission_confirmation_kind": "provider_receipt",
"failure": {
"code": "submission_unconfirmed",
"message": "<string>",
"retryable": true
},
"canceled_by": "<string>",
"steps": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence": 2,
"status": "answered",
"correction_round": 1,
"fields": [
{
"field_id": "<string>",
"type": "text",
"label": "<string>",
"required": true,
"requires_answer": true,
"constraints": {},
"sensitive": true,
"format": "<string>"
}
],
"answers": [
{
"field_id": "<string>",
"value": "<string>"
}
],
"command_errors": [
{
"field_id": "<string>",
"item_index": 1,
"field_key": "<string>",
"code": "invalid_option",
"message": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"field_count": 1,
"answer_count": 1,
"answers_expire_at": "2023-11-07T05:31:56Z"
}
],
"current_step": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence": 2,
"status": "answered",
"correction_round": 1,
"fields": [
{
"field_id": "<string>",
"type": "text",
"label": "<string>",
"required": true,
"requires_answer": true,
"constraints": {},
"sensitive": true,
"format": "<string>"
}
],
"answers": [
{
"field_id": "<string>",
"value": "<string>"
}
],
"command_errors": [
{
"field_id": "<string>",
"item_index": 1,
"field_key": "<string>",
"code": "invalid_option",
"message": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"field_count": 1,
"answer_count": 1,
"answers_expire_at": "2023-11-07T05:31:56Z"
}
}{
"api_version": "2026-08-31",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"job_id": "<string>",
"apply_url": "<string>",
"provider_id": "<string>",
"provider_name": "<string>",
"status": "queued",
"cancel_requested": true,
"status_updated_at": "2023-11-07T05:31:56Z",
"queued_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"submitted_at": "2023-11-07T05:31:56Z",
"failed_at": "2023-11-07T05:31:56Z",
"canceled_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"provider_version": "<string>",
"matcher_revision": 123,
"catalog_revision": 123,
"settings_revision": 123,
"provider_receipt_id": "<string>",
"submission_confirmation_kind": "provider_receipt",
"failure": {
"code": "submission_unconfirmed",
"message": "<string>",
"retryable": true
},
"canceled_by": "<string>",
"steps": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence": 2,
"status": "answered",
"correction_round": 1,
"fields": [
{
"field_id": "<string>",
"type": "text",
"label": "<string>",
"required": true,
"requires_answer": true,
"constraints": {},
"sensitive": true,
"format": "<string>"
}
],
"answers": [
{
"field_id": "<string>",
"value": "<string>"
}
],
"command_errors": [
{
"field_id": "<string>",
"item_index": 1,
"field_key": "<string>",
"code": "invalid_option",
"message": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"field_count": 1,
"answer_count": 1,
"answers_expire_at": "2023-11-07T05:31:56Z"
}
],
"current_step": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence": 2,
"status": "answered",
"correction_round": 1,
"fields": [
{
"field_id": "<string>",
"type": "text",
"label": "<string>",
"required": true,
"requires_answer": true,
"constraints": {},
"sensitive": true,
"format": "<string>"
}
],
"answers": [
{
"field_id": "<string>",
"value": "<string>"
}
],
"command_errors": [
{
"field_id": "<string>",
"item_index": 1,
"field_key": "<string>",
"code": "invalid_option",
"message": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"field_count": 1,
"answer_count": 1,
"answers_expire_at": "2023-11-07T05:31:56Z"
}
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"api_version": "2026-08-31"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"api_version": "2026-08-31"
}{
"title": "auto_apply_not_enabled",
"status": 403,
"detail": "Auto Apply is not enabled for this account.",
"code": "auto_apply_not_enabled",
"api_version": "2026-08-31"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"api_version": "2026-08-31"
}{
"title": "concurrency_limit_reached",
"status": 409,
"detail": "You have reached your limit of 1 concurrent application. Please cancel or submit your existing applications before starting a new one.",
"code": "concurrency_limit_reached",
"limit": 1,
"active": 1,
"api_version": "2026-08-31"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"api_version": "2026-08-31"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"api_version": "2026-08-31"
}{
"title": "provider_catalog_unavailable",
"status": 503,
"detail": "The verified Auto Apply provider catalog is unavailable.",
"code": "provider_catalog_unavailable",
"api_version": "2026-08-31"
}Authorizations
API key provided by Jobo
Headers
Unique key for this create request. Retained for 24 hours.
1 - 200Body
- Option 1
- Option 2
Profileless application target. Supply exactly one of job_id and apply_url.
Response
The application reached a decision point: awaiting_answers with current_step carrying the discovered fields, or a terminal failure.
Version of the profileless Auto Apply API contract.
2026-08-31 "2026-08-31"
Stable application ID.
Supplied Jobo job ID, or null when apply_url was supplied directly.
Resolved application URL.
Stable provider identifier selected at intake.
Provider display name captured at intake.
Current durable application state.
queued, running, awaiting_answers, submitted, failed, canceled Whether cancellation has been requested.
submitted_at, failed_at, or canceled_at, whichever is set.
Provider implementation version captured at intake.
Non-sensitive request or submission identifier issued by the provider, suitable for support tracing when present.
256Authoritative evidence used to confirm the submitted state.
provider_receipt, confirmation_page Show child attributes
Show child attributes
Actor that completed cancellation, when applicable.
Show child attributes
Show child attributes
The step currently awaiting answers - the one to answer next. Null while the application is queued, running between steps, or terminal.
Show child attributes
Show child attributes

