Submit new hires to Bob with the Applicant API
Learn how to integrate with Bob's Applicant API integration to push a hired candidate into Bob
Early-access program disclaimerThis article describes an early-access program phase. The API surface, behavior, and implementation details may change.
Partner OAuth integrations only
- The Applicant API is for approved HiBob Marketplace partners with Developer Portal access and OAuth credentials. Service users are not supported for this endpoint.
- Bob customers building integrations for their own company should continue to use the legacy Hire API with Service users, not this partner contract.
- Deprecation note: Token-based Hire API connections will be deprecated six months after this release.
Overview
Bob's Applicant API lets Marketplace partners, typically Applicant Tracking Systems (ATS), and also EOR or onboarding providers, push a hired candidate into Bob’s existing ATS Pending Hires flow.
The Applicant API integration is the end-to-end Marketplace partner flow that combines OAuth installation, partner-owned setup and field mapping, metadata and document folder discovery, and the applicant submission.
With the Applicant API integration, you can:
- Onboard a customer via Marketplace OAuth, with no manual token or Hire API connection setup in Bob
- Discover Bob employee field metadata and document folders to power your setup UI
- Submit hired-candidate fields, including required identity fields, optional mapped fields, and documents
- Optionally sync open job positions from Bob into your ATS using existing Workforce Planning APIs
Common use cases include:
- Building a Marketplace ATS integration that pushes new hires into Bob
- Migrating a partner integration off the legacy Hire API onto Marketplace OAuth
Existing Hire API integration partner?
See Migrating from the Hire API below before building Applicant API support.
How it works
The integration is a partner-push model:
- One-time setup per company: Customer installs your app → OAuth consent → Bob redirects to your setup URL → you fetch field and folder metadata → customer maps fields and picks a document folder in your UI → you store the config and tokens.
- Per new hire: When a candidate is marked hired in your system, you
POSTone applicant with Bob field IDs and optional documents. - In Bob: The record appears in ATS Pending Hires. Configured notification recipients are alerted. HR approves and runs the existing New Hire flow to create the employee.
sequenceDiagram
participant Customer
participant Partner as Partner ATS
participant Bob
Note over Customer,Bob: One-time setup
Customer->>Bob: Install Marketplace app + OAuth consent
Bob-->>Partner: Redirect to partner setup URL (company_id)
Partner->>Bob: GET /v1/company/people/fields
Partner->>Bob: GET /v1/docs/folders/metadata
Customer->>Partner: Map ATS fields → Bob field IDs, select folder
Note over Partner: Store mapping, folderId, tokens
Note over Customer,Bob: Per hire
Customer->>Partner: Candidate marked hired
Partner->>Bob: POST /v1/external-hires/applicants
Bob-->>Partner: 201 Created (empty body)
Bob->>Customer: Pending Hires + notification
Customer->>Bob: Approve → New Hire flow → employee created
Before you begin
- Confirm you are an approved Marketplace partner with Developer Portal access
- Create a Marketplace app
- Configure OAuth Redirect URI
- Add the scopes in Required permissions and scopes
- Implement OAuth token exchange, refresh, and per-company token storage — see OAuth 2.0 and Managing customer installations
Bob does not show a Bob-owned configuration screen for Applicant API apps. You own the setup experience after install.
Key concepts
Applicant
An applicant is a candidate marked as hired in the partner system and submitted into Bob’s ATS Pending Hires.
Submit one applicant per request. Success returns 201 Created with an empty body — no applicant ID is returned. Correlate submissions using your own hire / candidate IDs on the partner side.
Field IDs (flat payload)
Under fields, every key is a Bob field id from Get all employee fields (GET /v1/company/people/fields).
Use the id property, not jsonPath. For most fields they match; for Basic info fields they differ — for example id is root.firstName while jsonPath is firstName. Always send the id form: root.firstName, root.surname, root.email, and the other root.* Basic info IDs.
Do not nest categories. Do not use a separate customFields array. Custom fields use the same flat map, for example personal.custom.field_1654765903775.
In your setup UI, show customers the human-readable field name from metadata; store and send only the field id.
Partner-owned mapping
Field mapping and document-folder selection live in your product. Bob does not perform field mapping for Applicant API apps and does not provide a Bob-side mapping UI for these integrations.
After OAuth, fetch metadata, present mapping and folder pickers to the customer, and persist the configuration against that company installation.
Pending Hires and New Hire flow
Accepted applicants appear on Bob’s existing ATS Pending Hires page. Required identity fields are always stored. Optional fields are applied when HR runs New Hire only if those fields are included in the customer’s New Hire flow configuration.
To ensure fields are populated correctly in the new hire flow, explain to your customers that whenever they map fields in your setup UI, they must also ensure those fields are included in their New Hire flow in Bob. Bob uses the applicant data you send to pre-populate matching fields in the New Hire flow wizard; fields that are not included in that flow's setup will not be populated during New Hire.
Documents are downloaded from the URLs you provide and stored under the submitted folderId. On approval, Bob creates the employee and continues the existing New Hire / onboarding experience.
Core workflows
Workflow 1: One-time partner setup
Use this when a customer installs your app from Marketplace:
- Customer clicks Install → OAuth consent for your requested scopes.
- Bob redirects to your First-time setup URL with
company_idand a short-lived session token. - Exchange the auth code for
access_token+refresh_tokenand store them per company. See OAuth 2.0. - Call Get all employee fields (
GET /v1/company/people/fields) to build your field-mapping UI. - Call Get list of folders with metadata (
GET /v1/docs/folders/metadata) so the customer can pick a destination folder (folderId). - In your UI, let the customer:
- Map their ATS fields → Bob field IDs
- Select the document folder for hire attachments
- Confirm that any mapped fields they expect to populate are included in their Bob New Hire flow
- Store mapping +
folderIdon your side, not in Bob. The Marketplace installation shows as connected.
sequenceDiagram
participant Customer
participant Partner
participant Bob
Customer->>Bob: Install + authorize scopes
Bob-->>Partner: Setup redirect (company_id)
Partner->>Bob: Exchange code for tokens
Partner->>Bob: GET /v1/company/people/fields
Partner->>Bob: GET /v1/docs/folders/metadata
Customer->>Partner: Complete mapping + folder selection
Note over Partner: Persist config per company
Workflow 2: Submit a hired candidate
This is the primary recurring flow:
- Candidate is marked hired in your ATS, or equivalent.
- Build the payload from your stored field mapping.
- Call
POST /v1/external-hires/applicantswithAuthorization: Bearer <access_token>. - On
201, the pending hire is created in Bob. There is no applicant ID in the response. - HR reviews Pending Hires, approves, and completes the New Hire flow.
Include at least the required fields. Attach documents only when you have a public or signed URL and a valid numeric folderId.
Workflow 3 (optional): Sync open positions into your ATS
Independently of Applicant API, ATS partners can sync Bob open positions using Workforce Planning APIs, for example Search position openings.
This is optional. Request the Workforce Planning scopes that cover the endpoints you call — see Scopes mapping to endpoints and Explore Workforce Planning.
Required and recommended fields
Partners must send these under fields. A well-formed payload missing either returns 422:
| Field ID | Type | Notes |
|---|---|---|
root.firstName | string | Required; non-empty string |
root.surname | string | Required; non-empty string |
Strongly encourage customers to map and send:
| Field ID | Type | Notes |
|---|---|---|
root.email | string | Prefer work email; personal email is acceptable if work email is not available yet |
work.startDate | date | YYYY-MM-DD |
work.title | string | Job title; must match a valid Bob job title |
work.department | string | Must match a valid Bob department |
work.siteId | string | Site name, for example "London", not a numeric ID. Use work.siteId, not work.site, which is computed |
Field ID tips
- Send field IDs, never display names.
- Scalars (text, number, boolean, date) are stored as sent.
- Complex types (for example currency) are sent as their nested value object — e.g.
payroll.salary.payment:{ "value": 85000, "currency": "GBP" }. Unresolved complex values are dropped; the request can still succeed with201if required fields are present.- Computed fields (tenure, age, and similar) are ignored if sent — they are not an error.
- Effective-dated fields (for example
work.title,work.department,payroll.salary.payment) accept a single current value; Bob applies them against the employment start date when New Hire runs.
Documents
Documents are optional. When present, each item requires:
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | Yes | Filename with extension, for example CV.pdf |
url | string | Yes | Publicly resolvable URL; time-limited signed URLs are supported |
folderId | integer (int64) | Yes | Numeric Bob folder ID from folders metadata; JSON number, not string |
Obtain valid folderId values during setup via Get list of folders with metadata.
Applicant API Endpoint
| Use case | Method and path | Comments |
|---|---|---|
| Submit applicant | POST /v1/external-hires/applicants | One applicant per request. OAuth Bearer token. Scope: applicants:write |
Base URL: https://api.hibob.com
Example request
POST /v1/external-hires/applicants HTTP/1.1
Host: api.hibob.com
Authorization: Bearer <access_token>
Content-Type: application/json{
"fields": {
"root.firstName": "Jane",
"root.surname": "Smith",
"root.email": "[email protected]",
"work.startDate": "2026-09-01",
"work.title": "Senior Engineer",
"work.department": "Engineering",
"work.siteId": "London",
"payroll.salary.payment": {
"value": 85000,
"currency": "GBP"
},
"payroll.salary.payPeriod": "Annual"
},
"documents": [
{
"name": "CV.pdf",
"url": "https://storage.partner.com/cv_jane.pdf",
"folderId": 2010547
}
]
}Success response
201 Created with an empty body. No applicant ID is returned.
Errors
Responses use the standard API error body: code, message, details, request_id.
| Status | When |
|---|---|
400 | Malformed / unparseable payload, including non-integer folderId |
401 | Invalid or expired OAuth token |
403 | Token missing applicants:write |
422 | Well-formed payload missing required field, root.firstName / root.surname, or required value blank / wrong type |
429 | Rate limit exceeded — respect Retry-After |
500 | Temporary Bob processing error — retry with backoff |
Example 422:
{
"code": "unprocessable_entity",
"message": "Missing required field.",
"details": {
"missing": ["root.surname"]
},
"request_id": "b7c1f0e2-..."
}
Supporting endpoints
Partners commonly use these endpoints during setup or for optional ATS features:
| Use case | Method and path | Comments |
|---|---|---|
| Read employee field metadata | GET /v1/company/people/fields | Use during setup to build your field-mapping UI. Scope: company.metadata:read |
| Read document folders | GET /v1/docs/folders/metadata | Use during setup so the customer can select the destination folderId for hire attachments. Scope: documents:read |
| Sync open positions | POST /v1/positions/position-openings/search | Optional Workforce Planning flow for syncing Bob openings into your ATS. Requires the relevant Workforce Planning scopes. |
| OAuth token exchange and refresh | OAuth 2.0 endpoints |
Required permissions and scopes
This API supports OAuth only. Service users are not supported.
| OAuth scope | Purpose | Required? |
|---|---|---|
applicants:write | Submit applicants via POST /v1/external-hires/applicants | Yes |
company.metadata:read | Read Bob field metadata, GET /v1/company/people/fields, for your mapping UI | Yes, for a complete setup |
documents:read | Read document folders, GET /v1/docs/folders/metadata, for folder selection | Yes, if you attach documents |
workforce_planning:writeworkforce_planning:read | Sync open positions / openings into your ATS | Optional, depending on the endpoints you call |
Select scopes in the Developer Portal scope picker. They are not auto-enabled. See Scopes mapping to endpoints.
The customer company must install your Marketplace app and approve the requested scopes.
Rate limits
- Proposed limit: 10 requests per minute per company + app,
companyId+ app user. - On limit exceeded:
429with rate-limit /Retry-Afterheaders.
Final limits may change after load testing during the early-access program.
Partner journey checklist
- Create a standard app in the Developer Portal
- Select
applicants:write,company.metadata:read, anddocuments:read, plus any optional scopes - Configure OAuth Redirect URI, First-time setup URL, and Manage URL
- Implement OAuth, token storage, refresh, and your setup UI, including field mapping and folder picker
- Implement
POST /v1/external-hires/applicantson hire events, with retries for429/500 - Test in Marketplace Dev mode: install → map fields → push a test hire → confirm Pending Hires
- Submit the app for review; approved apps are listed under Marketplace applicant integrations
Migrating from the Hire API
If you have already shipped a Hire API integration, token, or service user, read this before building Applicant API support.
What stays the same for customers
| Scenario | Behavior |
|---|---|
| Existing Hire API connection | Continues working. No forced migration. Customers can still view, edit, enable, disable, or delete it. |
| ATS Pending Hires, New Hire flow | Same Bob experience after a hire is accepted, only how the partner authenticates and builds the payload changes. |
| Notifications in Bob for new hires | Same Bob experience after a hire is accepted, only how the user sets it up is changing. |
What changes for partners
| Area | Legacy Hire API | Applicant API |
|---|---|---|
| Auth | Per-company token or service user pasted into your ATS | Marketplace OAuth; tokens issued per install |
| Setup | Customer configures connection in Bob, including URL, secret / service user | Customer installs your Marketplace app; setup UI is yours |
| Field mapping | Bob-side mapping, including defaults + manual map after first hire | Partner-side mapping using Bob field id values |
| Payload shape | Nested ATS-oriented keys, such as firstName, work.title, customFields, … | Flat fields map of Bob field IDs, such as root.firstName, work.title, … |
| Documents | name • url, Bob stored under Confidential by default | name • url • numeric folderId chosen during your setup |
| Endpoint | Unique Hire API URL under /api/integrations/ats/hire/... | POST /v1/external-hires/applicants on api.hibob.com |
| Success | Hire notification created in Bob | 201 Created, empty body; row appears in Pending Hires |
There is no automated migration of legacy connections. You publish a Marketplace app based on OAuth and Applicant API; each customer installs it and re-completes mapping in your product when they are ready, and sets up notifications in Bob.
Timeline
- Applicant API launch — New Marketplace partner integrations must use Applicant API OAuth. Legacy Hire API remains fully operational for existing connections.
- Launch + 6 months — Creating new token-based Hire API connections is blocked / removed from the Bob UI. Existing token-based and service-user Hire API connections keep working and remain manageable.
- Voluntary cutover — Encourage customers on your legacy connection to install your Marketplace app when you support Applicant API. Run both in parallel until their install is live, then retire the old connection on their side when ready.
Partner migration checklist
- Create a Marketplace app with
applicants:write,company.metadata:read, anddocuments:read, plus any optional scopes. - Partner rebuilds setup: OAuth install → fetch people-fields and folders metadata → develop a field-mapping UI where customers map ATS fields to Bob
ids and selectfolderId. - Rewrite the hire push to
POST /v1/external-hires/applicantswith the flatfieldspayload. Required:root.firstName,root.surname. - Map document handling to include
folderIdon every attachment. - Test with a pilot company in Marketplace Dev mode: install → map → push a hire → confirm Pending Hires.
- Publish the Marketplace app and share install / cutover steps with existing Hire API customers.
- Keep supporting the legacy connection until those customers have cut over, or until product policy requires otherwise.
Legacy developer reference: Integrate with ATS (Hire API).
Best practices
- Own setup in your product — Bob will not provide mapping or folder UI for Applicant API apps
- Always send field
idvalues from people-fields metadata, including theroot.prefix for Basic info fields - Store
folderIdfrom setup and send it on every document; use a JSON number - Keep document URLs reachable long enough for Bob to download. Signed URLs are fine if still valid
- Treat
201empty body as success — keep your own correlation IDs for support and idempotency - Refresh OAuth tokens and cache them per installing company
- Back off on
429and retry500 - Tell customers that notifications are set up in Bob’s ATS Pending Hires UI for all Applicant API apps. To learn more, see ATS Pending Hires Notifications.
- For OAuth and installation lifecycle, see Managing customer installations
Related resources
- Quick start guide — create and submit a Marketplace app
- OAuth 2.0 — authorization code flow, tokens, and uninstall
- Scopes mapping to endpoints
- Get all employee fields
- Get list of folders with metadata
- Explore Workforce Planning — optional open-position sync
- Integrate with ATS (Hire API) — legacy Hire API developer guide
- Become a partner — join the HiBob partner program
Updated about 1 hour ago

