4.0.0 is a breaking release. The
EmploymentType and CompensationPeriod value sets changed to the values the API actually accepts, and the retired Auto Apply sub-client was removed. Pin an exact version and read the notes below before upgrading from 3.x — or, for Node, from 1.x.Auto Apply is not part of
jobo-enterprise. The live contract is profileless and callback-driven, and it has a dedicated TypeScript client: @jobo-ai/autoapply. Earlier jobo-enterprise versions exposed a create_profile / start_session / set_answers model against routes that no longer exist; 4.0.0 removes it.Upgrading to 4.0.0
Three things can change behaviour in code that already works. Filter values.EmploymentType members now serialize the canonical full-time / part-time instead of full_time / part_time. The index matches both spellings, so this changes what goes over the wire rather than what you get back. freelance and intern are new members — those values exist in the data and the old enums could not express them. CompensationPeriod members were renamed to the values the API actually emits (hourly, yearly, per-diem, …); the old ones (hour, day, year) matched nothing.
Auto Apply. client.auto_apply / client.autoApply / client.AutoApply no longer exists. Nothing on it worked — every method targeted a removed route. Its replacement is the dedicated @jobo-ai/autoapply package.
Node only. npm was serving 1.0.1, which exposed flat methods (searchJobs, getJobsFeed). 4.0.0 is the sub-client shape the other two clients have always had: client.search.search(...), client.feed.getJobs(...).
Python
JoboClient(api_key, *, base_url="https://connect.jobo.world", timeout=30.0, feed_timeout=120.0, httpx_client=None). Use AsyncJoboClient for the async equivalent.
Auto-pagination
iter_jobs and iter_expired_job_ids handle pages and cursors for you.
Incremental sync
updated_after is the watermark for picking up changes after a backfill. Scans page by immutable creation time by default (stable_scan), so records cannot shift across page boundaries mid-read.
Errors
429 and 503 are retried with bounded backoff honouring Retry-After. Everything else raises, deriving from JoboError:
code when the API supplies one, alongside status_code, detail, and the raw response_body.
Node.js / TypeScript
fetch, so it needs Node 18+ and also runs in Bun, Deno, and browsers. Options are camelCase; wire fields on the response objects stay snake_case.
new JoboClient({ apiKey, baseUrl?, timeout?, feedTimeout?, fetch? }).
The iterators are async generators:
.NET
services.AddJoboClient(...).
Feed enumeration returns
IAsyncEnumerable<Job>:
HttpClient instead of JoboClientOptions, its Timeout governs every request — set it to at least 120 seconds when you use the feed endpoints.
Auto Apply (TypeScript)
@jobo-ai/autoapply covers the whole Auto Apply surface: the four application operations plus a signed callback handler. Zero runtime dependencies; Node 20+, Bun, Deno, and edge runtimes. Properties are snake_case, matching the wire format and these docs exactly.
create sends the required Idempotency-Key for you, list auto-paginates with for await, and errors throw a typed JoboAPIError carrying the problem code and retryAfterSeconds.
The callback side — signature verification, event parsing, and the proceed / cancel answer contract — is a Web-standard handler with framework adapters at @jobo-ai/autoapply/next, /nuxt, and /node (Express, Next.js Pages Router). See Callbacks for examples.
The AutoApply provider SDK,
@jobo-ai/autoapply-sdk, is a different package for building browser agents — not for calling the API.
