Skip to main content
Three official clients are published for the jobs API. As of 4.0.0 they sit on the same version and cover the same surface, so pick whichever matches your stack. Auto Apply has its own TypeScript client, described below.
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.
You do not need a client library. Every endpoint is plain HTTPS with a single header, and the curl examples in these docs work with any language.

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

The client is organised into sub-clients by resource. Every method takes keyword arguments only.
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:
Every exception carries the problem code when the API supplies one, alongside status_code, detail, and the raw response_body.

Node.js / TypeScript

Zero runtime dependencies — it uses the built-in 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

Targets net6.0 and net8.0. Register it with DI via services.AddJoboClient(...). Feed enumeration returns IAsyncEnumerable<Job>:
If you pass your own 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.

No SDK

Pin whichever client you use to an exact version — see Versioning for the compatibility contract, and Errors for the response shapes you will need to handle yourself.