# API changelog – Tiempo

> Every change to the Tiempo API, newest first: dated versions with breaking changes, plus additions and fixes that apply to every version.

Source: https://tiempo.one/docs/changelog

Breaking changes ship as dated versions. Your platform stays on the version it started with until you upgrade in the dashboard (see [versioning](https://tiempo.one/docs#versioning)). Additions and fixes below that aren’t marked as a version apply to every version at once.

## 16 October 2026

-   Accounts have a slot grid: `slot_interval_minutes` (default 15) and `slot_alignment`. Searches use it unless they give `interval_minutes` or `slot_alignment`, and the response says which grid it used.
-   `slot_alignment: "opening"` starts the grid at each stretch of working hours instead of midnight, so someone who starts at 09:20 is offered 09:20 on a 30-minute grid.
-   The API has its own host. The test deployment's is `https://api.uat.tiempo.one` (base URL for every request, `https://api.uat.tiempo.one/v1/…`); the docs and dashboard stay at `https://uat.tiempo.one`, which no longer answers `/v1`. Production's will be `https://api.tiempo.one`.
-   Every API response carries `Cache-Control: no-store`: no cache between you and Tiempo may keep it. `/openapi.json` may be cached for five minutes.
-   Rate limits: 100 requests a second per platform in live mode, 25 in test. Responses carry `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset`; over the limit you get `429 rate_limited` with `Retry-After`.

## 15 October 2026

-   The test deployment has its own domain: the API, docs and dashboard are at `https://uat.tiempo.one`, so use that as your base URL (`https://uat.tiempo.one/v1/…`). The old address, `https://tiempo-test-3e407.web.app`, works for now. Production will be `https://tiempo.one`.

## 14 October 2026

-   A resource with no schedule is now closed: give it hours with `POST /v1/schedules` before it shows in search or takes a booking. Before, it was open around the clock. An override still opens a single date, and `conflict_policy: "capacity_only"` still books outside hours.

## 7 October 2026

-   Search can give one `duration_minutes` for every segment, and `duration_overrides` for candidates who take a different time. Each slot is one possible booking, so a start can appear once per length.
-   New `conflict_policy: "capacity_only"` on bookings, reschedules and series: ignores working hours, overrides and blocks, but never overlaps another booking. For staff booking a client in after hours.
-   Completed and no-show bookings keep their time until they end; only cancelling frees it. Completing is allowed before the booking starts (paid in advance); a no-show still has to wait for the start.

## 6 October 2026

-   Every response carries a `Request-Id` header (`req_…`). Quote it when you ask us about a request.
-   Request bodies over 1 MB are refused with `413 request_too_large`.

## 5 October 2026

-   Confirming or extending a hold now locks its resources and checks expiry under the lock, so a hold that lapsed while a payment was in flight can never be confirmed on top of a booking that took its slot.
-   Idempotent requests are atomic: the key, the request’s changes and the stored response commit together, so a request that failed half way leaves nothing behind and a retry runs it again.
-   `GET /v1/events` lists events in commit order, so paging forward from the newest event you’ve seen never skips one.
-   Series occurrences that couldn’t be created in time are recorded as skipped with reason `start_passed`.

## 4 October 2026: version 2026-10-04

**Breaking, in version 2026-10-04:** bookings and attendees keep `expires_at` after they leave `pending`, so you can see when a hold lapsed or how long it had left when it was confirmed. Before this version it was cleared.

Also added, for every version:

-   Buffers: `buffer_before_minutes` and `buffer_after_minutes` on resources and segments.
-   Edit a series in place from a date, and split a series into a new one.
-   Each platform sets its longest hold, up to 7 days.
-   Webhook endpoints report their health, turn off after three days of failures, and can resend what they missed.
-   Unknown query parameters are refused with `400 parameter_unknown`, like unknown body fields.

## 3 October 2026: version 2026-10-03

The first version: accounts, locations, resources, schedules, overrides, blocks, availability search and calendar, bookings with holds and candidates, sessions with attendees, series, events and webhooks.

The machine-readable description is at [/openapi.json](https://tiempo.one/openapi.json). Try calls in [Swagger UI](https://tiempo.one/swagger-ui.html).[Tiempo home](https://tiempo.one/)[Dashboard](https://tiempo.one/app)
