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 candidate
  • in_progress — candidate is taking the assessment at the provider
  • completed — process finished without a pass/fail outcome; use optional verdict for a separate outcome channel
  • passed — terminal pass outcome
  • failed — terminal fail outcome
  • canceled — assessment was canceled
  • failed_to_send_assessment — provider could not send the assessment

Optional fields:

  • providerAssessmentId — your own assessment reference
  • score — overall numeric score (no fixed range in v1)
  • verdict — free-text outcome channel (not the same as status)
  • resultUrl — HTTPS URL to results on your site; Bob stores the URL only and does not fetch the page
  • sectionSummary — per-section score breakdown with name and score
  • comments — 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.

LayerWhat it controlsAssessment partner
OAuth scopeWhat the partner app token can callhiring.integrations:write

Assessments API endpoints

Use caseMethod and pathComments
Register or replace packagesPOST /v1/hiring/assessments/packagesIdempotent full catalog replace per company/app. Omitted packages are soft-archived; an empty catalog archives all packages. Returns 201.
Permanently delete packagesPOST /v1/hiring/assessments/packages/deleteDeletes a subset of packages by packageIds; unknown IDs are ignored. Returns 204.
Get assessment detailsGET /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 resultPATCH /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.

EventWhen firedPartner action
assessment.triggeredRecruiter orders an assessment for a candidate and selects a packageGET assessment details; start processing at the provider
assessment.cancelledRecruiter cancels an in-flight or pending assessmentStop 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 testing

Marketplace 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:write scope and configure the redirect URL used for testing.
  • Webhook listener URL — register the HTTPS endpoint that will receive assessment.triggered and assessment.cancelled events.
    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


Did this page help you?