> ## Documentation Index
> Fetch the complete documentation index at: https://docs.instaview.sk/llms.txt
> Use this file to discover all available pages before exploring further.

# May 2026

> Changelog entries for May 2026

## May 30, 2026

### New Features

* **List Phone Numbers — Public API**: A new `GET /phone-numbers` endpoint is available for all API key types, returning all active phone numbers assigned to the company.
  * Requires the new **`read:phone_numbers`** scope on the API key.
  * Supports standard pagination (`page`, `limit`) and the `companyId` query parameter for ATS partner keys managing multiple child companies.

## May 28, 2026

### Enhancements

* **Public Sourcing API Photo Support**: Exposed candidate profile picture URLs in the public API sourcing and enrichment responses.
  * Added a new **`photoUrl`** property to `PublicSourcingCandidateDto` that fetches the profile image or avatar directly from persistent candidate records in the database.
  * Populates photo links across search results polling (`GET /sourcing/{id}/results`), asynchronous webhooks (`sourcing.completed`), and profile enrichment results (`GET /sourcing/enrich/{id}/results`).

## May 27, 2026

### New Features

* **Agent Background Sound**: A new `backgroundSound` field is available on agents, controlling the ambient noise played to candidates during calls.
  * Accepted values: `"OFFICE"` (default — subtle office noise) and `"OFF"` (silence).
  * Configurable via the agent create/update form in the dashboard and via the Public API (`POST /v1/agents`, `PATCH /v1/agents/:id`).

## May 25, 2026

### New Features

* **Public Sourcing & Enrichment API**: A fully programmable, asynchronous candidate sourcing API is now available for ATS partners and direct integrations.
  * **`POST /sourcing`** — Initiates a background AI-powered candidate sourcing run. The sourcing agent runs fully automatically, deriving the Ideal Candidate Profile (ICP) directly from the supplied `title`, `jobDescription`, `location`, and optional `query`. Returns immediately with a `requestId` and `status: "processing"`.
  * **`PATCH /sourcing/{id}`** — Patches the reasoning context of a completed run and triggers a new asynchronous sourcing pass. Accepts `query` (context refinement) and/or `limit` (additional candidates) in a single request. Returns `409 Conflict` if the previous run is still processing.
  * **`GET /sourcing/{id}/results`** — Polls the status and full ranked candidate list for a sourcing run. Returns `202 Accepted` while processing and `200 OK` with the complete result payload on completion or failure.
  * **`POST /sourcing/enrich`** — Asynchronously enriches up to 10 candidate profiles per request. Performs deep background evaluation including email discovery. Returns immediately with a `requestId` and `status: "processing"`. Consumes 1 credit per successfully enriched profile; failed profiles are not billed.
  * **`GET /sourcing/enrich/{id}/results`** — Polls per-profile enrichment results. Returns `202 Accepted` while processing and `200 OK` with per-profile results (supporting partial success) on completion.
  * **`POST /sourcing/render-html`** — Synchronously generates self-contained inline HTML/CSS candidate profile cards for up to 10 profiles. Supports `"dark"` (default) and `"light"` themes. Suitable for direct embedding in ATS dashboards or email templates.

* **New Webhook Event Types**: Four new webhook event types across two new categories are now supported in `WebhookConfig` subscriptions:
  * `SOURCING_COMPLETED` / `sourcing.completed` — Dispatched when a sourcing run finishes with a scored candidate list.
  * `SOURCING_FAILED` / `sourcing.failed` — Dispatched when a sourcing run terminates with an unrecoverable error.
  * `ENRICH_COMPLETED` / `enrich.completed` — Dispatched when an enrichment run completes (partial profile-level failures do not prevent this event from firing).
  * `ENRICH_FAILED` / `enrich.failed` — Dispatched when an enrichment run terminates with an unrecoverable error before any profile is processed.
  * Pass the `webhookId` of a pre-registered `WebhookConfig` in the sourcing/enrichment request bodies to receive asynchronous delivery. The config must subscribe to at least one event from the relevant category.

* **Sourcing API Key Scopes**: Three scopes gate access to the new sourcing endpoints.
  * `sourcing:write` — `POST /sourcing`, `PATCH /sourcing/{id}`
  * `sourcing:read` — `GET /sourcing/{id}/results`
  * `enrich:write` — `POST /sourcing/enrich`, `GET /sourcing/enrich/{id}/results`, `POST /sourcing/render-html`

* **Execution & Billing Behaviour**: All sourcing and enrichment runs use a fire-and-forget background execution model. External index queries have a 15-second timeout with 2 automatic retries and a circuit-breaker failover. Per-profile enrichment has a 10-second timeout with isolated failure handling — one timed-out profile does not fail the entire batch. All resources (`requestId`s, candidate lists, enrichment results) are strictly bound to the `companyId` of the authenticating API key; cross-tenant access attempts return `404 REQUEST_NOT_FOUND` to prevent resource enumeration. Prepaid credit validation runs before a sourcing or enrichment run starts; postpaid accounts are invoiced at end of billing cycle.
