Skip to main content
Two ways to apply — run for full automation from a saved profile, or interactive sessions (startset-answersend) when you need to step through fields. Profiles let you store applicant answers once and reuse them across hundreds of applications.
Currently unavailable. Every Auto Apply endpoint returns 503 Service Unavailable while the service is paused. No credits are charged on 503 responses — your wallet is untouched while the API is down. The reference below describes the API as it will behave once re-enabled.
When available, each session (manual or run) costs 200 credits ($0.20). Credits are charged when the session starts. See Pricing for details.

Lifecycle

The Auto Apply API uses a session-based workflow to automate job applications:
1

Start a Session

Send a job application URL to discover form fields. A browser session is launched and the application page is analyzed.
2

Fill in Answers

Submit answers for the discovered fields. The API fills forms, handles multi-page flows, and validates input.
3

Application Submitted

Once all pages are complete, the application is automatically submitted. The session is closed and resources are released.

Session lifecycle diagram

Endpoint summary

Session-based (manual control):
MethodPathDescription
POST/api/auto-apply/startStart a new session for a job URL
POST/api/auto-apply/set-answersSubmit answers for discovered fields
DELETE/api/auto-apply/sessions/{id}End a session and release resources
Fully automated:
MethodPathDescription
POST/api/auto-apply/runExecute a full application using a saved profile
Profiles:
MethodPathDescription
POST/api/auto-apply/profilesCreate a new profile
GET/api/auto-apply/profilesList all profiles
GET/api/auto-apply/profiles/{id}Get a profile by ID
PUT/api/auto-apply/profiles/{id}Update a profile
DELETE/api/auto-apply/profiles/{id}Delete a profile

Session endpoints

Full request/response reference and a live “Try it” playground live on the dedicated pages below.

Run an application

POST /api/auto-apply/run — recommended one-shot flow. Handles session creation, form filling, page navigation, and submission in a single request.

Start a session

POST /api/auto-apply/start — open a session for a job application URL and discover form fields.

Set answers

POST /api/auto-apply/set-answers — submit answers for the current page’s fields and advance the flow.

End a session

DELETE /api/auto-apply/sessions/{id} — explicitly terminate a session and release browser resources.

Profiles

Auto Apply Profiles let you save applicant information — personal details, education, work history, and preferences — so it can be reused across multiple automated applications. Instead of providing applicant data on every request, create a profile once and reference it by ID. Profiles are used with the Run an application endpoint (POST /api/auto-apply/run) for fully automated, one-shot job applications. Key benefits
  • Reusable — Create a profile once, use it for hundreds of applications
  • Complete — Store everything from contact info to EEO responses and custom answers
  • Flexible — Update profiles as applicant details change
What’s stored in a profile?
CategoryFields
IdentityFirst name, last name, email, phone
Online PresenceLinkedIn URL, website, portfolio
LocationAddress, city, state, country, ZIP code
Resume & Cover LetterResume text, resume file path, cover letter template
Work AuthorizationAuthorization status, sponsorship requirement
EEO / DemographicsGender, ethnicity, veteran status, disability status
CompensationDesired salary, salary currency
AvailabilityStart date, willingness to relocate
EducationHighest degree, field of study, university, graduation year
ExperienceYears of experience, current job title, current company
CustomKey-value pairs for any additional form questions

Profile endpoints

Create a profile

POST /api/auto-apply/profiles — create a new applicant profile.

Get a profile

GET /api/auto-apply/profiles/{id} — fetch an existing profile by ID.

List profiles

GET /api/auto-apply/profiles — list every profile under the calling account.

Update a profile

PUT /api/auto-apply/profiles/{id} — update an existing profile.

Delete a profile

DELETE /api/auto-apply/profiles/{id} — permanently delete a profile.

Field types

The Auto Apply API discovers form fields and reports their types. Each type has a specific value format you should use when calling Set answers. All type values are lowercase snake_case.

Type reference

TypeDescriptionValue Format
textSingle-line text input (text, email, tel, url)The string value to type
text_areaMulti-line textareaThe string value to type
selectDropdown / select menuThe option value to select
multi_selectMulti-select dropdown or tokenized selectorComma-separated option values
radioRadio button groupThe option value to select
checkboxCheckbox (single or group)"true" or "false" (single), comma-separated values (group)
fileFile upload inputLocal file path to upload
dateDate input or date pickerDate string (YYYY-MM-DD)
numberNumeric inputNumeric string
typeaheadAutocomplete / comboboxText to type; use typeahead_selection for the option to click
toggleToggle / switch control"true" or "false"
rich_textRich text editor (Quill, TinyMCE, etc.)HTML or plain text content
hiddenHidden inputThe string value to set
passwordPassword inputThe string value to type
staticStatic informational content (not directly answerable)— (skip in answers)
complexComposite field requiring provider-specific handler logicProvider-defined
unknownUnknown or unrecognised field typeProvider-defined

Answer object schema

{
  "field_id": "c0203e24-63fd-4425-914c-216a5701861c",
  "type": "text",
  "value": "Jane",
  "handler_type": "first-name",
  "clear_first": true
}
PropertyTypeRequiredDescription
field_idstringField identifier from the fields array
typestringField type matching the discovered type (snake_case)
valuestringValue to set (format depends on type)
handler_typestringATS-specific handler hint copied from the corresponding FormFieldInfo
clear_firstbooleanClear field before typing (default: true)
typeahead_selectionstringFor typeahead: the dropdown option text to click

Typeahead fields

Typeahead (autocomplete) fields require two values:
  1. value — The text to type into the input (triggers the dropdown)
  2. typeahead_selection — The exact text of the dropdown option to select
{
  "field_id": "loc-uuid",
  "type": "typeahead",
  "value": "San Fran",
  "typeahead_selection": "San Francisco, CA"
}

File fields

File upload fields accept a local file path on the worker (e.g. a resume from your applicant profile):
{
  "field_id": "9d84ae3a-b192-43e1-8cff-76ff809cc7f5",
  "type": "file",
  "value": "/path/to/resume.pdf"
}

Flow states

Each Auto Apply API response includes a status field indicating the current state of the session. States are either active (further actions possible) or terminal (session is finished). All status values are lowercase snake_case.

State reference

StatusTerminalDescriptionAction
form_readyForm fields are available to fill on the current pageCall Set answers with field values
next_availableCurrent page is complete; next step is availableHandled automatically — next page fields returned
submit_readyAll pages complete; submit action is availableHandled automatically — application submitted
redirect_requiredPage redirected to a different ATS providerStart a new session with the redirect_url
submittedApplication submitted successfullyDone! Session auto-closed
login_requiredLogin or registration requiredEnd session — manual intervention needed
captcha_requiredCAPTCHA needs to be solvedEnd session — manual intervention needed
expiredJob posting has expiredEnd session
redirectedPage redirected to an external domainEnd session
errorAn error occurred during the stepCheck error message, retry or end session

State flow diagram

Handling terminal states

TERMINAL_STATUSES = {"submitted", "login_required", "captcha_required", "expired", "redirected", "error"}

if result["status"] in TERMINAL_STATUSES:
    if result["status"] == "submitted":
        print("Application submitted!")
    else:
        print(f"Session ended: {result['status']} - {result.get('error')}")
        # Clean up
        requests.delete(f"{API_BASE}/api/auto-apply/sessions/{session_id}", headers=HEADERS)
Always call End a session for terminal error states to release browser resources, even if is_terminal is true.

Supported providers

The Auto Apply API supports 25 ATS providers. Pass any matching job application URL to the Start a session endpoint.

Provider list

ProviderURL Pattern
Greenhouseboards.greenhouse.io/*
Leverjobs.lever.co/*
Ashbyjobs.ashbyhq.com/*
Workableapply.workable.com/*
BambooHR*.bamboohr.com/*
Breezy HR*.breezy.hr/*
Recruitee*.recruitee.com/*
Teamtailor*.teamtailor.com/*
Jobvitejobs.jobvite.com/*
Rippling*.rippling.com/*
ADP*.adp.com/*
Eightfold*.eightfold.ai/*
SAP SuccessFactors*.successfactors.com/*
UKG / UltiPro*.ultipro.com/*
Phenom*.phenompeople.com/*
Pinpoint*.pinpointhq.com/*
Comeet*.comeet.com/*
JazzHR*.applytojob.com/*
JobScore*.jobscore.com/*
Homerun*.homerun.co/*
Freshteam*.freshteam.com/*
Dayforce*.dayforcehcm.com/*
Avature*.avature.net/*
TriNet Hire*.trinethire.com/*
Polymer*.polymer.co/*

URL detection

The API automatically detects the ATS provider from the URL. If the provider is not supported, the response will have:
{
  "success": false,
  "status": "error",
  "error": "The ATS provider for this URL is not currently supported.",
  "is_terminal": true
}
We’re continuously adding new providers. If you need a specific provider, contact us at support@jobo.world.