Integrate with Bob Hiring Assessments API
Partner OAuth integrations only
The Assessments API is for approved HiBob Marketplace partners with Developer Portal access and OAuth credentials. Service users are not supported for this integration.
Bob customers building integrations for their own company should use Service users and the general Hiring API, not this partner contract.
Overview
Assessments in Bob Hiring let recruiters order an assessment for a candidate, select a partner package, and track status and results in the hiring workflow.
The Assessments API is the partner-facing Public API for marketplace assessment providers.
Use it to:
- Register your package catalog for each installing company
- Receive assessment lifecycle events when a recruiter orders or cancels an assessment
- Fetch assessment context (candidate, requester, job opening, package, and request time)
- Report status and results back to Bob
Common use cases include:
- Onboarding a company after Marketplace install and publishing your assessment packages
- Starting a provider-side assessment when Bob sends
assessment.triggered - Updating Bob as the assessment progresses or completes
- Stopping work when Bob sends
assessment.cancelled
Before you begin
- Confirm you are an approved Marketplace partner with Developer Portal access.
- See Testing notes for more details on how to create and configure your OAuth app before you can test it.
Key concepts
Assessment
An assessment is an evaluation ordered for a candidate in Bob Hiring. It references the candidate, the recruiter who requested it, the related job opening, and the partner package the recruiter selected.
The assessment ID is exposed in events and APIs as assessmentRequestId. Use this ID to:
- Fetch assessment details after a triggered event
- Report status and results with PATCH
- Correlate duplicate webhook deliveries, because webhook delivery is at-least-once
Outbound webhook payloads include IDs only (plus packageId on assessment.triggered). Full candidate and job context is available from the GET details endpoint after authentication.
Package
A package is a partner-defined assessment offering that recruiters can select when ordering an assessment, for example, a coding challenge or personality questionnaire.
After a company installs your app, register or replace your package catalog with POST /hiring/assessments/packages.
The call is idempotent per company, so you can safely refresh names and descriptions.
When a recruiter orders an assessment, the selected packageId is included on the triggered webhook and on the assessment details response.
Candidate
The candidate is the person linked to the assessment.
GET assessment details returns a fixed set of standard fields for every provider, for example, name, email, and phone.
Partners do not configure which candidate fields are required, and Bob does not manage provider-specific custom fields for this integration.
If you need additional input, collect it in your own flow after receiving the assessment.
Requester
The requester is the employee, usually a recruiter, who ordered the assessment in Bob.
GET assessment details returns requester identity fields such as name and email.
Job opening
The job opening is the role the candidate applied to.
GET assessment details returns job opening fields such as title so you can associate the assessment with the hiring context.
Assessment progress
Partners report progress and outcomes with PATCH on the assessment. status is required on every PATCH. Optional result fields are omitted when unchanged — previously stored values are kept.
Supported status values:
assessment_sent— assessment invitation was sent to the candidatein_progress— candidate is taking the assessment at the providercompleted— process finished without a pass/fail outcome; use optionalverdictfor a separate outcome channelpassed— terminal pass outcomefailed— terminal fail outcomecanceled— assessment was canceledfailed_to_send_assessment— provider could not send the assessment
Optional fields:
providerAssessmentId— your own assessment referencescore— overall numeric score (no fixed range in v1)verdict— free-text outcome channel (not the same asstatus)resultUrl— HTTPS URL to results on your site; Bob stores the URL only and does not fetch the pagesectionSummary— per-section score breakdown withnameandscorecomments— free-text notes as an array of strings
How it works
The integration follows a notify-then-pull, then push-back model:
1. Setup (once per company): After the user installs your app, register your packages.
2. Event notification: Bob sends a webhook when a recruiter orders or cancels an assessment.
3. Pull context: On assessment.triggered, call GET details with assessmentRequestId.
4. Run the assessment in your provider system.
5. Push updates: PATCH status and results as the assessment progresses or completes.
6. On cancel: Stop processing. Do not send further PATCH updates.
Bob does not call partner APIs. Partners always initiate GET, PATCH, and package calls after receiving a webhook or during setup.
Packages setup
sequenceDiagram
participant Partner
participant HiBob as Bob
Partner->>HiBob: POST /hiring/assessments/packages
HiBob-->>Partner: 201 Created
Note over Partner,HiBob: Idempotent catalog replace per company
Assessment lifecycle
sequenceDiagram
participant HiBob as Recruiter in Bob
participant Partner
participant Provider as Partner provider system
HiBob->>HiBob: Order assessment (select package)
HiBob-->>Partner: Webhook assessment.triggered (IDs + packageId)
Partner->>HiBob: GET /hiring/assessments/{assessmentRequestId}
HiBob-->>Partner: Candidate, requester, job opening, packageId
Partner->>Provider: Submit assessment
Provider-->>Partner: Progress / completion
Partner->>HiBob: PATCH /hiring/assessments/{assessmentRequestId}
HiBob-->>Partner: 204 No Content
HiBob-->>HiBob: Updated status in UI
Cancellation
sequenceDiagram
participant HiBob as Recruiter in Bob
participant Partner
HiBob->>HiBob: Cancel assessment
HiBob-->>Partner: Webhook assessment.cancelled (assessmentRequestId only)
Note over Partner: Stop processing. Do not PATCH further updates.
Required permissions
This API supports OAuth only. Service users are not supported.
| Layer | What it controls | Assessment partner |
|---|---|---|
| OAuth scope | What the partner app token can call | hiring.integrations:write |
Assessments API endpoints
| Use case | Method and path | Comments |
|---|---|---|
| Register or replace packages | POST /v1/hiring/assessments/packages | Idempotent full catalog replace per company/app. Omitted packages are soft-archived; an empty catalog archives all packages. Returns 201. |
| Permanently delete packages | POST /v1/hiring/assessments/packages/delete | Deletes a subset of packages by packageIds; unknown IDs are ignored. Returns 204. |
| Get assessment details | GET /v1/hiring/assessments/{assessmentRequestId} | Call after assessment.triggered. Company-scoped; returns 404 if the assessment does not belong to the installing company. |
| Update status or result | PATCH /v1/hiring/assessments/{assessmentRequestId} | Report progress and final results. status is required; providerAssessmentId, score, verdict, resultUrl, sectionSummary, and comments are optional. Returns 204. |
Webhooks
Bob delivers outbound events to your registered HTTPS webhook URL. Requests are signed — verify authenticity using the Bob-Signature header. See How Bob calculates the signature and Getting started with partner webhooks.
Delivery is at-least-once. Handle duplicate deliveries idempotently using assessmentRequestId.
| Event | When fired | Partner action |
|---|---|---|
assessment.triggered | Recruiter orders an assessment for a candidate and selects a package | GET assessment details; start processing at the provider |
assessment.cancelled | Recruiter cancels an in-flight or pending assessment | Stop processing; do not call PATCH for terminal status unless product specifies otherwise |
Example assessment.triggered payload: |
{
"version": "v2",
"type": "assessment.triggered",
"triggeredBy": "emp-001",
"triggeredAt": "2026-05-28T10:00:00Z",
"data": {
"assessmentRequestId": "12345",
"packageId": "test-coding-101"
}
}Example assessment.cancelled payload (same envelope; packageId is not included):
{
"version": "v2",
"type": "assessment.cancelled",
"triggeredBy": "emp-001",
"triggeredAt": "2026-05-28T11:00:00Z",
"data": {
"assessmentRequestId": "12345"
}
}Testing notes
Before you test an assessment integration, complete the basic app setup in the Developer Portal. See the Quick start guide for general app setup instructions.
Add app listing details before testingMarketplace app listing details are usually completed only after an app is approved. For assessment integrations, you must add them earlier.
Bob uses the app tile when a recruiter chooses an assessment provider. The tile is based on your app listing details, so Bob needs those details before it can install and display the app correctly in a test company.
Before testing, make sure your app includes:
- App listing details — add the provider name and description that should appear in Bob. For the full live listing, Overview comes from App listing details in the Developer Portal; About comes from the external Tech Partner Overview form. See Complete listing content for Overview and About in the Quick start guide.
- Logo — upload the logo Bob should show on the provider tile.
- Marketplace category — choose Candidate assessments as the integration type.
- OAuth configuration — request the
hiring.integrations:writescope and configure the redirect URL used for testing. - Webhook listener URL — register the HTTPS endpoint that will receive
assessment.triggeredandassessment.cancelledevents.
After you save these details, install the app in the test company, register your package catalog, and confirm that the provider appears as an available assessment option in Bob Hiring.
Related resources
Updated about 1 hour ago

