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).
State Reference
| Status | Terminal | Description | Action |
|---|
FormReady | ❌ | Form fields are available to fill on the current page | Call Set Answers with field values |
NextAvailable | ❌ | Current page is complete; next step is available | Handled automatically — next page fields returned |
SubmitReady | ❌ | All pages complete; submit action is available | Handled automatically — application submitted |
RedirectRequired | ❌ | Page redirected to a different ATS provider | Start a new session with the redirectUrl |
Submitted | ✅ | Application submitted successfully | Done! Session auto-closed |
LoginRequired | ✅ | Login or registration required | End session — manual intervention needed |
CaptchaRequired | ✅ | CAPTCHA needs to be solved | End session — manual intervention needed |
Expired | ✅ | Job posting has expired | End session |
Error | ✅ | An error occurred during the step | Check error message, retry or end session |
State Flow Diagram
Handling Terminal States
TERMINAL_STATUSES = {"Submitted", "LoginRequired", "CaptchaRequired", "Expired", "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 Session for terminal error states to release browser resources, even if is_terminal is true.