1. Home
Healthier Business Group
  • Healthier Business Group
  • Integrations
  • Virtual BLS APIs
    • Authentication
      • Exchange credentials for a token pair
      • Refresh an access token
      • Inspect the current token
      • Revoke the current token
    • Client
      • Get your unique booking URL
      • Get credit and money balances
      • List wallet transactions
    • Timeslots
      • List available timeslots
      • Hold a timeslot
      • Release a slot hold
    • Bookings
      • List bookings
      • Create a booking
      • Get a single booking
      • Download a certificate
    • Webhook Endpoints
      • List webhook endpoints
      • Create a webhook endpoint
      • Get a webhook endpoint
      • Update a webhook endpoint
      • Delete a webhook endpoint
      • Rotate the signing secret
      • Send a test event
    • Webhook Events
      • Booking created
      • Booking confirmed — candidate paid
      • Booking rescheduled
      • Booking cancelled
      • Attendance marked
      • Equipment return overdue
      • Certificate available
      • Test event
    • Courses
      • List active courses
  • Practical Training APIs
    • Authentication
      • Exchange credentials for a token pair
      • Refresh an access token
      • Inspect the current token
      • Revoke the current token
    • Client
      • Get your unique booking URL
      • Get account profile
      • Get credit and money balances
      • List wallet transactions
    • Courses
      • List active courses
    • Locations
      • List training locations
    • Training Events
      • List upcoming training events
      • Get a training event
      • Hold a seat (30 minutes)
      • Release a seat hold
    • Bookings
      • List bookings
      • Create a booking
      • List no-show bookings
      • Get a booking
      • Cancel a booking
      • Download completion certificate (PDF)
    • Booking Invites
      • List booking invites
      • Create and send a booking invite
      • Get a booking invite
    • Webhook Endpoints
      • List webhook endpoints
      • Register a webhook endpoint
      • Get a webhook endpoint
      • Update a webhook endpoint
      • Delete a webhook endpoint
      • Rotate the signing secret
      • Send a test delivery
    • Webhook Events
      • Booking Created
      • Booking Confirmed (Stripe Payment)
      • Booking Rescheduled
      • Booking Cancelled
      • Attendance Marked
      • Candidate No-Show
      • Certificate Available
      • Booking Invite Sent
      • Booking Invite Opened
      • Booking Invite Used
      • Credit Balance Low
      • Credit Balance Depleted
      • Money Balance Low
      • Money Balance Depleted
      • Training Event Seats Running Low
      • Seat Hold Expired
      • Test Event
  • Clinical Interview APIs
    • Authentication
      • Exchange credentials for a token pair
      • Refresh an access token
      • Inspect the current token
      • Revoke the current token
    • Client
      • Get your unique booking URL
      • Get credit and money balances
      • List wallet transactions
    • Interview Types
      • List active interview types
    • Timeslots
      • List available timeslots
      • Hold a timeslot
      • Release a slot hold
    • Bookings
      • List bookings
      • Create a booking
      • Get a single booking
      • Download interview report
    • Webhook Endpoints
      • List webhook endpoints
      • Create a webhook endpoint
      • Get a webhook endpoint
      • Update a webhook endpoint
      • Delete a webhook endpoint
      • Rotate the signing secret
      • Send a test event
    • Webhook Events
      • Booking created
      • Booking confirmed — candidate paid
      • Booking rescheduled
      • Booking cancelled
      • Interview completed
      • Interview report available
      • Test event
  • Registration Assurance Monitoring APIs
    • Authentication
      • Obtain access token
      • Refresh access token
      • Get token info
      • Revoke current token
    • Workers
      • List workers
      • Create worker
      • Get worker
      • Update worker
      • Partially update worker
      • Delete worker
    • Verification
      • Verify single worker
      • Get worker verification history
      • Batch verify all workers
      • Get verification job status
    • Alerts
      • List alerts
      • Get alert
      • Acknowledge single alert
      • Acknowledge alerts in bulk
    • Monitoring
      • Update worker monitoring settings
      • Bulk update monitoring settings
    • Evidence
      • List worker evidence files
      • Get evidence metadata
      • Download evidence file
    • Billing
      • Get billing and usage summary
    • Imports
      • List worker imports
      • Upload worker CSV import
      • Get worker import status
    • Team
      • List available team roles
      • List team users
      • Create team user
      • Get team user
      • Update team user
      • Delete team user
    • Webhooks
      • List webhook endpoints
      • Create webhook endpoint
      • Get webhook endpoint
      • Update webhook endpoint
      • Delete webhook endpoint
      • Rotate webhook secret
      • Queue test webhook delivery
  • HB Portal APIs V2
    • Authentication
      • Get access token
      • Refresh access token
      • Get token info
      • Revoke current token
    • Reference Requests
      • References
        • Get reference detail
        • Download reference PDF
      • List reference requests
      • Create reference request
      • Get reference request
      • Cancel reference request
      • Add referee to request
      • Send reminders
    • Candidate Requests
    • Training Requests
    • OH Requests
    • Practical Training Requests
    • BLS Requests
    • Appraisal Requests
    • Certificate Requests
    • Training Verification Requests
    • Webhooks
      • List webhook endpoints
      • Create webhook endpoint
      • Update webhook endpoint
      • Delete webhook endpoint
      • View webhook call logs
      • Send test webhook
    • Templates
      • List form templates
  • HB Portal APIs V1 - Deprecated
    • Candidate Requests
      • Get All Candidates
      • Get Candidate Data
      • Create New Candidate
      • Update Candidate Details
    • Training Requests
      • Get Available Trainings
      • Get Candidate Course Result
      • Get Candidate Training Report
      • Get Candidate Training Report - Unassigned
    • OH Requests
      • Get Available Forms
      • Get Form Fields
      • Creating a new submission
      • Modifying the details of an existing submission (Upload Documents)
      • Make final form submission (after uploading documents)
      • Get submission list
      • Retrieve submission result details
      • Retrieve the submission result documents for the employer
    • Certificates Requests
      • Get Training Certificate
      • Get Training Certificate - including expired
      • Get Training Certificate - including non-assigned courses, but excluding expired
      • Get Training Certificate - All available courses
      • Get Training Certificate - Specific Course
    • Webhooks
      • Training Completion
      • Course Completion
  • HB Services APIs
    • List Interview Bookings
  • Practical Training Legacy APIs - Deprecated
    • Bookings
      • Get Past Bookings
      • Get Upcoming Bookings
      • Search Bookings by Date
    • Booking Links
      • Search Booking Links
  • Schemas
    • InterviewBooking
    • TokenRequest
    • CourseItem
    • InterviewTypeItem
    • Pagination
    • TokenResponse
    • ReferenceRequest
    • RefreshRequest
    • BookingsResponse
    • Reference
    • MessageResponse
    • BookingLinksResponse
    • ReferenceDetail
    • TokenInfo
    • ErrorResponse
    • ClientProfile
    • CreateReferenceRequest
    • Worker
    • CreditsResponse
    • RefereeInput
    • WorkerResponse
    • SlotItem
    • Transaction
    • Template
    • WorkerPaginatedResponse
    • TimeslotsResponse
    • TransactionListResponse
    • StoreWorkerRequest
    • HoldRequest
    • Course
    • CreateWebhookEndpoint
    • UpdateWorkerRequest
    • HoldResponse
    • Location
    • UpdateWebhookEndpoint
    • VerificationCheck
    • CreateBookingRequest
    • LocationListResponse
    • WebhookCall
    • VerificationCheckPaginatedResponse
    • BookingResource
    • CourseRef
    • WebhookPayload
    • VerifyQueuedResponse
    • PaginatedBookings
    • LocationRef
    • VerifyBatchResponse
    • PaginatedTransactions
    • TrainerRef
    • VerificationJobStatus
    • CreateWebhookRequest
    • TrainingEvent
    • Error
    • Alert
    • UpdateWebhookRequest
    • TrainingEventDetail
    • RateLimitError
    • AlertPaginatedResponse
    • WebhookEndpointResource
    • TrainingEventListResponse
    • ValidationError
    • BulkAcknowledgeAlertsRequest
    • WebhookCreatedResponse
    • SlotHoldResponse
    • AcknowledgeCountResponse
    • WebhookEnvelope
    • ConflictHold
    • PaginationLinks
    • UpdateMonitoringSettingsRequest
    • CandidateInfo
    • Booking
    • PaginationMeta
    • BulkUpdateMonitoringSettingsRequest
    • EvidenceFile
    • BookingDetail
    • EvidenceFilePaginatedResponse
    • BookingListResponse
    • BillingUsageResponse
    • StoreWorkerImportRequest
    • BookingInviteRef
    • BookingInvite
    • WorkerImport
    • WorkerImportPaginatedResponse
    • BookingInviteListResponse
    • TeamUser
    • CreateBookingInviteRequest
    • TeamUserPaginatedResponse
    • StoreTeamUserRequest
    • WebhookEndpointWithSecret
    • UpdateTeamUserRequest
    • WebhookEndpointListResponse
    • WebhookEndpoint
    • CreateWebhookEndpointRequest
    • WebhookEndpointPaginatedResponse
    • StoreWebhookEndpointRequest
    • UpdateWebhookEndpointRequest
    • CreateWebhookEndpointResponse
    • RotateWebhookSecretResponse
    • WebhookTestRequest
    • WebhookTestQueuedResponse
    • WebhookEventStatusChanged
    • WebhookEventInitialVerification
    • ValidationErrorResponse
Home
HB PortalRequest API access
Home
HB PortalRequest API access
X
Instagram
LinkedIn
  1. Home

Clinical Interview APIs

HB Compliance - Clinical Interviews#

📌
⚠️ This API is in beta. Endpoint shapes, event payloads, and behaviour may change before general availability. Breaking changes will be communicated to registered integrators in advance.

Interviews Client API - Overview#

The HB Interviews Client API lets agency integrators programmatically manage clinical interview bookings, discover available timeslots, and receive real-time webhook notifications for booking lifecycle events.
Base URL: https://interviews.hbcompliance.co.uk/api/v1

How Interviews Work#

All interviews are conducted virtually via Zoom. After a booking is confirmed, the candidate receives a Zoom link by email. This affects two important API behaviours:
Timeslots are dynamic. There are no fixed interview events — available date/time slots are generated based on interviewer capacity. Query them via GET /timeslots, hold one via POST /timeslots/hold, then confirm with POST /bookings.
Interview reports require a completed interview. GET /bookings/{id}/interview-report is only available once interview_status = completed. The booking.interview_report_available webhook fires when the full report has been submitted by the interviewer.

Authentication#

All protected endpoints require a Bearer token in the Authorization header:
Authorization: Bearer <access_token>
Obtain a token pair via POST /auth/token using your hb_client_id and an active API key. Access tokens expire after 1 hour; use POST /auth/refresh (valid 7 days) to rotate without re-entering credentials.

Endpoints#

Authentication#

MethodPathAuthDescription
POST/auth/token—Exchange hb_client_id + api_key for a token pair
POST/auth/refresh—Rotate access token using a refresh token
GET/auth/token-info✓Inspect the current token
POST/auth/revoke✓Revoke the current token

Client#

MethodPathAuthDescription
GET/booking-url✓Your account's unique public booking URL
GET/credits✓Per-interview-type credit balances and GBP money balance
GET/transactions✓Paginated wallet transaction history

Interview Types#

MethodPathAuthDescription
GET/interview-types✓Active interview types — use IDs for timeslot and booking queries

Timeslots#

MethodPathAuthDescription
GET/timeslots✓Available date/time slots for an interview type
POST/timeslots/hold✓Reserve a timeslot for 30 minutes
DELETE/timeslots/hold/{holdHash}✓Release a timeslot hold early

Bookings#

MethodPathAuthDescription
GET/bookings✓List bookings (filterable, paginated)
POST/bookings✓Create a booking using a held timeslot
GET/bookings/{id}✓Single booking detail
GET/bookings/{id}/interview-report✓Download interview report (PDF)

Webhook Endpoints#

MethodPathAuthDescription
GET/webhooks✓List registered webhook endpoints
POST/webhooks✓Register a new endpoint (secret shown once)
GET/webhooks/{id}✓Get an endpoint
PUT/webhooks/{id}✓Update name, URL, events, timeout, active state
DELETE/webhooks/{id}✓Delete an endpoint
POST/webhooks/{id}/rotate-secret✓Generate a new signing secret
POST/webhooks/{id}/test✓Send a test delivery

Timeslot & Booking Flow#

The standard booking flow is a three-step process:
1. GET  /timeslots?interview_type_id=4&months_ahead=2   → pick a date/time
2. POST /timeslots/hold                                  → hold_hash (valid 30 min)
3. POST /bookings                                        → confirmed booking
Step 1 — Query available slots
GET /timeslots?interview_type_id=4&months_ahead=2&date=2026-07-15
Returns a list of { date, time, interview_type } objects. Optionally filter to a specific date.
Step 2 — Hold a slot
POST /timeslots/hold
{
  "interview_type_id": 4,
  "date": "2026-07-15",
  "time": "10:00"
}
Response includes a hold_hash and expires_at (30 minutes). Only one active hold is permitted per account at a time — a 409 is returned if one already exists.
Step 3 — Create the booking
POST /bookings
{
  "hold_hash": "Xy7kRtQmNpLsWvBzJcFdEaHgUiOeYtAn",
  "first_name": "Jane",
  "last_name": "Smith",
  "email": "jane@example.com",
  "phone": "+441234567890",
  "job_role": "Registered Nurse",
  "nmc_number": "12A3456B",
  "pay_option": "credits",
  "agency_contact_name": "John Doe",
  "agency_contact_email": "john@acme.co.uk",
  "agency_email": "invoices@acme.co.uk"
}
The hold is released and a booking is created in one step. The candidate receives a confirmation email with their Zoom interview link.

Payment Options#

pay_optionBehaviour
creditsDeducts 1 booking credit for the interview type. Confirmed immediately.
balanceDeducts the interview cost from your GBP money balance. Confirmed immediately.
invoiceRaised as an invoice to your account. Confirmed immediately. Requires invoice_payments enabled and sufficient credit limit.
candidate_paysCandidate receives a payment link by email. Booking is pending until paid.

Credits & Balances#

GET /credits returns:
{
  "booking_credits": [
    { "course_id": 4, "course_name": "Clinical Interview", "credits": 5 }
  ],
  "booking_money_balance": 480.00,
  "currency": "GBP"
}
Booking credits — 1 credit = 1 booking for the specified interview type.
Booking money balance — a pre-paid GBP balance deducted at the interview rate when pay_option: balance.

Interview Reports#

GET /bookings/{id}/interview-report
Returns a PDF binary stream. Available only when:
1.
interview_status = completed — the interview has been conducted and marked complete by the interviewer.
Returns 422 otherwise. Subscribe to booking.interview_report_available to know exactly when the report is ready.
Pass ?download=true to force a file download rather than inline rendering.

Booking Statuses#

booking_status#

ValueMeaning
bookedInterview confirmed
pendingAwaiting candidate payment (candidate_pays flow)
rescheduledMoved to a new timeslot
cancelledCancelled
refundedRefunded

interview_status#

ValueMeaning
scheduledInterview booked, not yet conducted
in_progressInterview session is underway
completedInterview completed by the interviewer
no_showCandidate did not attend
cancelledInterview cancelled

Pagination#

All list endpoints return a consistent envelope:
{
  "data": [ ... ],
  "meta": {
    "current_page": 1,
    "per_page": 20,
    "last_page": 4,
    "total": 71
  },
  "links": {
    "next": "https://interviews.hbcompliance.co.uk/api/v1/bookings?page=2",
    "prev": null
  }
}

Errors#

StatusMeaning
401Missing or invalid bearer token
404Resource not found or not owned by your account
409Conflict (e.g. active timeslot hold already exists)
422Validation failed or business rule violation
500Server error — contact support

Webhook Events#

The following outbound events are available for subscription:
EventFires when
booking.createdA new booking is created (immediately for credits/balance/invoice; or after payment for candidate_pays)
booking.confirmedA candidate_pays booking transitions from pending to booked after payment
booking.rescheduledA booking is moved to a different timeslot
booking.cancelledA booking is cancelled
booking.interview_completedThe interviewer marks the session as complete (attended or no-show)
booking.interview_report_availableThe full interview report has been submitted and is ready to download
webhook.testManual test triggered via POST /webhooks/{id}/test
All events share the same envelope:
{
  "event_id": "018f4a2b-1234-7000-8abc-def012345678",
  "event_type": "booking.created",
  "occurred_at": "2026-06-05T10:00:00+00:00",
  "data": { ... }
}

Signature Verification#

Every webhook request includes these headers:
HeaderDescription
X-BLS-EventEvent type, e.g. booking.created
X-BLS-Event-IdUUID of the event — use for idempotency
X-BLS-Delivery-IdNumeric delivery attempt ID
X-BLS-TimestampUnix timestamp of dispatch (seconds)
X-BLS-Signaturesha256=<hmac> — see below
Computing the expected signature:
signature = HMAC-SHA256(signing_secret, "{timestamp}.{raw_json_body}")
expected  = "sha256=" + signature
Compare using a constant-time comparison. Reject requests where |now() - X-BLS-Timestamp| > 300 (5-minute replay window).
PHP:
Python:

Retries#

Deliveries are retried up to 5 times with a 15-minute backoff on any non-2xx response or timeout. Return any 2xx status to acknowledge receipt.

Contact & Support#

Support emailhttps://hbcompliance.co.uk/contact-us/
Bug reports / feedbackhttps://hbcompliance.co.uk/contact-us/
ProviderHealthier Business Group
For urgent issues affecting live bookings, email with the subject line [INTERVIEWS API URGENT] and include your hb_client_id and any relevant booking_id.
Modified at 2026-06-17 18:04:10
Previous
Test Event
Next
Exchange credentials for a token pair
Built with