HiBob APIoviva.careers.hibob.com ↗
Retrieve job application form structure from HiBob-hosted careers sites: sections, fields, documents, questionnaire, and data-retention consent settings.
What is the HiBob API?
The HiBob Careers Application Form API exposes 1 endpoint — get_application_form — that returns the complete form definition for any job listing hosted on a HiBob careers subdomain. A single call delivers 7 top-level response objects including ordered form sections, field types, document upload requirements, screening questionnaire items, and data-retention consent configuration, all keyed to a job listing UUID.
curl -X GET 'https://api.parse.bot/scraper/2ca488ba-05bf-4dba-b1c0-28ef8cd9b1b3/get_application_form?job_id=da96b227-e519-473e-87f8-06267ff42855&company=oviva' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace oviva-careers-hibob-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: HiBob Careers Application Form API — inspect a job's application structure."""
from parse_apis.oviva_careers_hibob_com_api import HiBobCareers, InputNotFound
client = HiBobCareers()
# Fetch the application form for a known job listing.
try:
form = client.application_forms.get(
company="oviva",
job_id="da96b227-e519-473e-87f8-06267ff42855",
)
except InputNotFound:
print("Company or job listing not found.")
raise
print(f"Form #{form.application_form_id} for job {form.job_id} at {form.company}")
# Walk ordered sections and their fields.
for section in form.sections:
print(f"\n== {section.title} ==")
for field in section.fields:
req = "required" if field.required else "optional"
print(f" {field.label} ({field.field_type}, {req})")
# List requested documents.
for doc in form.documents:
req = "required" if doc.required else "optional"
print(f"Document: {doc.name} ({doc.type}, {req}) — {doc.instructions}")
# Show screening questions and their answer options.
for q in form.questionnaire:
answers = ", ".join(opt.text for opt in q.options)
print(f"Q: {q.text} [{q.type}] options: {answers}")
# Data-retention consent settings (may be absent).
if form.data_retention_consent is not None:
consent = form.data_retention_consent
print(f"Consent: {consent.initial_consent_type}, "
f"extended={consent.requests_extended_consent} "
f"({consent.extended_consent_period_months} months)")
print("\nexercised: application_forms.get")
Returns the application form definition for one job listing on a HiBob careers site (<company>.careers.hibob.com), in two fixed requests. The result has ordered sections (as displayed on the site, e.g. 'Personal information' and 'Professional profile') each holding ordered candidate fields with label, field type and whether it is mandatory; the list of documents the applicant is asked to upload (name, type, instructions, mandatory flag); the questionnaire with each question's type, mandatory flag and answer options; and the data-retention consent configuration shown at the bottom of the form (null if that setting cannot be read). A listing that does not exist returns a stale_input error; a company identifier with no HiBob careers site also returns stale_input. Sections, documents and questionnaire are empty arrays when the form defines none of that kind.
| Param | Type | Description |
|---|---|---|
| job_idrequired | string | The job listing UUID taken from the listing URL path (/jobs/<job_id>). |
| companyrequired | string | The company's HiBob careers-site subdomain, i.e. the part before .careers.hibob.com in the listing URL (lowercase letters, digits, hyphens). |
{
"type": "object",
"fields": {
"job_id": "the listing UUID as supplied",
"company": "careers-site subdomain as supplied",
"sections": "ordered array of {title, fields[]}; each field has key (site field name), label (display label), field_type (text|date|currency|json|...), display_type (widget hint such as languages/skills, or null), required (boolean), ordinal (display order)",
"documents": "ordered array of requested uploads: name, type (e.g. resume, portfolio), instructions, required, ordinal",
"questionnaire": "ordered array of screening questions: question_id, text, description, type (e.g. yes_no), required, allow_multiple_answers, options[{option_id, text}], ordinal",
"application_form_id": "integer id of the form definition on the site",
"data_retention_consent": "object with initial_consent_type, extended_consent_period_months, requests_extended_consent; null when unavailable"
},
"sample": {
"data": {
"job_id": "da96b227-e519-473e-87f8-06267ff42855",
"company": "oviva",
"sections": [
{
"title": "Personal information",
"fields": [
{
"key": "firstName",
"label": "First name",
"ordinal": 0,
"required": true,
"field_type": "text",
"display_type": null
},
{
"key": "desiredSalary",
"label": "Desired salary",
"ordinal": 5,
"required": true,
"field_type": "currency",
"display_type": null
}
]
},
{
"title": "Professional profile",
"fields": [
{
"key": "skills",
"label": "Skills",
"ordinal": 7,
"required": false,
"field_type": "json",
"display_type": "skills"
}
]
}
],
"documents": [
{
"name": "Resume",
"type": "resume",
"ordinal": 0,
"required": false,
"instructions": "Upload your resume"
}
],
"questionnaire": [
{
"text": "Do you speak at least C2 German?",
"type": "yes_no",
"options": [
{
"text": "Yes",
"option_id": 49691123
},
{
"text": "No",
"option_id": 49691124
}
],
"ordinal": 0,
"required": true,
"description": null,
"question_id": 49691125,
"allow_multiple_answers": false
}
],
"application_form_id": 49670747,
"data_retention_consent": {
"initial_consent_type": "implied",
"requests_extended_consent": true,
"extended_consent_period_months": 6
}
},
"status": "success"
}
}About the HiBob API
What get_application_form returns
The get_application_form endpoint accepts two required parameters: job_id (the UUID from the listing URL path, e.g. /jobs/da96b227-e519-473e-87f8-06267ff42855) and company (the subdomain before .careers.hibob.com). The response is structured around the form as it appears to candidates, with sections as an ordered array. Each section carries a title (e.g. "Personal information", "Professional profile") and a fields array where every field includes a key, label, field_type (one of text, date, currency, json, and others), and metadata like required status.
Documents and questionnaire
Beyond the candidate input fields, the response includes a documents array listing every requested upload — each entry specifies name, type (e.g. resume, portfolio), instructions, required, and ordinal for ordering. The questionnaire array contains screening questions with question_id, text, description, type (e.g. yes_no), required, allow_multiple_answers, and answer options. This lets you inspect the full pre-screening logic a company has configured for a given role.
Data retention and form identity
Two additional fields round out the response. application_form_id is the integer identifier HiBob assigns to this form definition — useful for detecting when a company has swapped out the form. data_retention_consent is an object containing initial_consent_type, extended_consent_period_months, and requests_extended_consent; it returns null when the company has not configured a retention policy. Together these fields let you track form versioning and compliance posture across roles and companies.
The HiBob API is a managed, monitored endpoint for oviva.careers.hibob.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when oviva.careers.hibob.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official oviva.careers.hibob.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Audit which document types (resume, portfolio, etc.) different employers require before applying
- Compare screening questionnaire complexity across job listings to estimate application friction
- Track changes to a form definition over time using application_form_id as a version signal
- Extract field labels and types to pre-fill or validate candidate data in an ATS integration
- Map data_retention_consent settings across companies for GDPR compliance research
- Identify required vs optional fields programmatically to surface form difficulty to job seekers
- Aggregate questionnaire question types across HiBob-hosted listings for recruiting analytics
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does HiBob provide an official developer API for its careers site forms?+
What does the sections field actually contain, and are nested fields supported?+
sections has a title string and a fields array. Every field carries key (the site's internal field name), label (what the candidate sees), field_type (e.g. text, date, currency, json), and a required flag. The sections are returned in display order. Deeply nested conditional field trees are not currently a documented part of the schema — the API covers flat fields within sections.Does the API cover job listings from any HiBob careers subdomain, or only Oviva?+
company parameter accepts any subdomain that follows the <company>.careers.hibob.com pattern, so you can query listings from any employer using HiBob's hosted careers site product, not just Oviva. The job_id UUID comes from that company's listing URL.Does the API return the actual job description or posting metadata like salary range or location?+
What happens when a company has not configured data-retention consent settings?+
data_retention_consent field returns null in that case. When it is populated, it contains initial_consent_type, extended_consent_period_months, and a boolean requests_extended_consent indicating whether the company asks candidates to opt into longer data storage.