Update a profile
Section-level replace: every top-level key present in the body replaces that entire section; absent keys are left untouched. Send an empty object {} (or empty array []) to clear a section — except contact, which requires first_name, last_name and email whenever present. For cover_letter_template, absent means untouched and "" clears it. A successful PATCH on an import_failed profile flips it back to ready. Patching while a resume import is running returns 409.
Authorizations
API key provided by Jobo
Path Parameters
Profile ID
Body
Shared request body for POST /api/auto-apply/profiles and PATCH /api/auto-apply/profiles/{id}. On create, absent sections start empty. On patch, every top-level key that is present replaces that entire section; absent keys are left untouched (send an empty object/array to clear a section — except contact, which requires first_name/last_name/email whenever present).
Friendly profile label (e.g. "Default", "Tech applications"). Defaults to "Default" on create; max 100 characters.
"Default"
Contact details. first_name, last_name, and email are required on create.
Where the applicant lives. All fields optional.
Public profile links. Each must be an absolute http(s) URL, max 500 characters.
Work history, most recent first. Max 50 entries.
Education history. Max 20 entries.
Work authorization — facts a resume cannot state.
Job preferences used to answer salary, start-date, relocation, and remote questions.
Voluntary EEO self-identification. Everything here is optional — omitted or prefer_not_to_say values make the applicant decline those questions on application forms.
Freeform facts about the applicant, one plain sentence each. The AI reads these as context when answering arbitrary screening questions; resume import generates them automatically. Max 100 entries of 1000 characters each.
[
"8 years of backend engineering experience",
"Key skills: Go, Kubernetes, PostgreSQL"
]Optional cover letter template the AI personalizes per job. Max 10000 characters. On PATCH, absent leaves it untouched and "" clears it.
null
Response
The updated profile
A resume-first applicant profile. The resume file is the canonical source — importing one fills contact, links, work_experience, education, and memories automatically. Explicit sections carry only what a resume cannot state (eligibility, preferences, voluntary self-identification).
Stable profile identifier.
"8c5e6d0a-9f2b-4c1e-b7a3-2f4d5e6a7b8c"
Friendly profile label.
"Default"
Lifecycle of a profile, driven by the async resume import. ready — complete and usable for applications; importing — a resume import is building the profile, poll until it leaves this state; import_failed — the import failed, see import_error (fix with PATCH or re-import).
ready, importing, import_failed "ready"
Why the resume import failed. Only set when status is import_failed.
null
Contact details. first_name, last_name, and email are required on create.
Where the applicant lives. All fields optional.
Public profile links. Each must be an absolute http(s) URL, max 500 characters.
Work history, most recent first.
Education history.
Work authorization — facts a resume cannot state.
Job preferences used to answer salary, start-date, relocation, and remote questions.
Voluntary EEO self-identification. Everything here is optional — omitted or prefer_not_to_say values make the applicant decline those questions on application forms.
Freeform facts the AI uses as context when answering screening questions. Resume import generates them automatically; you can add your own via PATCH.
[
"8 years of backend engineering experience",
"Key skills: Go, Kubernetes, PostgreSQL"
]Optional cover letter template the AI personalizes per job.
null
Resume file metadata, or null when no file has been uploaded.
UTC timestamp the profile was created.
"2026-07-01T12:00:00Z"
UTC timestamp the profile was last updated.
"2026-07-05T09:30:00Z"

