# Changelog

All changes to v1 are additive. Existing fields and endpoints keep working. See [Versioning](/concepts/versioning/).

## 2026-10-15

**Clients**

- `GET /v1/clients` accepts `external_ref` (exact) and `phone` (exact, any format) to find one client.
- Single client responses include `external_ref`.

**API keys**

- Switched-off keys, IP allow-lists (addresses or CIDR ranges) and the daily call limit are enforced. Key responses
  carry `X-RateLimit-Limit` and `X-RateLimit-Remaining`; the daily limit answers `429` with `Retry-After`.
- New ability `tickets:dispatch` in the key permissions, to book a technician over a conflict.

**Service jobs**

- `GET /v1/ticket-job-types` always answers `{"data": [...]}`, also for a board the key cannot open.

**Reference**

- "Try it" in the API reference: send real requests with your own key.

## 2026-10-14

**Service jobs**

- `sla_hours` on `POST /v1/tickets` and `PUT /v1/tickets/{id}`: an SLA per job, in hours from creation. Not sent
  means the job type's SLA; `null` means no SLA. Jobs return `sla_hours`. Changing it on a done or cancelled job
  answers `422`.
- `POST /v1/tickets/{id}/schedule` (and create with a window) refuses a visit that starts more than 5 minutes in
  the past.
- Clearing the technician also removes them from the assignees.

**Webhooks**

- API keys can manage webhooks with the new abilities `webhooks:read` and `webhooks:manage`. A key subscribes only
  to topics it can read and sees only the endpoints it created. Its endpoints stop receiving events when the key is
  deleted, switched off, or loses the read ability.

## 2026-10-13

**Service jobs**

- Complete, bill and cancel: `POST /v1/tickets/{id}/complete`, `/create-invoice`, `/cancel` and
  `GET /v1/tickets/{id}/completion-preview`. Optional `Idempotency-Key` header; replays answer
  `Idempotent-Replayed: true`.
- Job types (`/v1/ticket-job-types`) with priority, SLA, checklist and billing mode (`none`, `on_completion`,
  `manual`).
- Scheduling: `POST /v1/tickets/{id}/schedule`, `/unschedule`, `/start`, technician suggestions and
  `GET /v1/ticket-technicians`. API keys need `tickets:schedule`; completion needs `tickets:complete`.
- Working hours, time off and skills are checked when a visit is booked.
- `external_ref` on `POST /v1/tickets` for safe retries (`200` on replay, `409` on conflict) and as a filter on
  `GET /v1/tickets`. Jobs return `external_ref`, `created_via` and `api_key_id`.
- Client lookup on create and list: `client_phone`, `client_isp_username` or `client_external_ref` instead of
  `client_id`, with `422` reasons `client_not_found`, `client_ambiguous`, `client_lookup_conflict`.
- API keys can be limited to some ticket boards.
- Column categories (`new`, `scheduled`, `in_progress`, `waiting`, `done`, `cancelled`), archive and unarchive, and
  new list filters (`status_category`, `unassigned`, `overdue`, `archived`, `technician_id`, `job_type_id`).
- Webhook topics `ticket.created`, `ticket.status_changed`, `ticket.assigned`, `ticket.archived`,
  `ticket.scheduled`, `ticket.completed`, `ticket.cancelled`.

**Clients**

- `external_ref` on create and update: your own id for a client, unique per organization.

## 2026-09-06

**Webhooks**

- Outbound webhooks: endpoints, signed deliveries (`X-PROradius-Signature`), retries, delivery history and resend.
  Topics `invoice.created`, `invoice.paid`, `invoice.voided`, `payment.created`, `payment.deleted`,
  `client.created`, `client.updated`.