---
title: "2026-04-16 · Legacy URL cleanup, and a stable OpenAPI spec"
description: "Five unused URL aliases removed, five more renamed for consistency, and the OpenAPI spec reached version 1.0.0 with every operationId locked."
order: 10
date: "2026-04-16"
---

# Legacy URL cleanup, and a stable OpenAPI spec

Two changes landed the same day. Five unused URLs were deleted. Five more were renamed for consistency with the rest of the API.

## Removed — five aliases with no live traffic

Each one already had a documented replacement:

| Removed | Use instead |
|---|---|
| `GET /v1/credits/{customer_id}` | `GET /v1/customers/{customer_id}/credits` |
| `POST /v1/credits/{customer_id}/grant` | `POST /v1/customers/{customer_id}/credits/grant` |
| `POST /v1/credits/{customer_id}/adjust` | `POST /v1/customers/{customer_id}/credits/adjust` |
| `GET /v1/credits/{customer_id}/history` | `GET /v1/customers/{customer_id}/credits/history` |
| `GET /v1/entitlements/{customer_id}` | `GET /v1/customers/{customer_id}/entitlements` |

## Renamed — plural, like every other resource

| Old | New |
|---|---|
| `/v1/reserve`, `/v1/reserve/{id}/...` | `/v1/reservations`, `/v1/reservations/{id}/...` |
| `/v1/topup/grant` | `/v1/topups/grant` |

If you hand-copied a path before this date, grep your code for `/v1/reserve`, `/v1/topup/grant`, `/v1/credits/{`, or `/v1/entitlements/{`.

## Changed — the spec is now the source of truth

`openapi.yaml` reached version `1.0.0`. Every path is named, and every `operationId` is locked. A client generated from the spec today keeps the same method names until a major version bump.

See the [API reference](/docs/api), which now renders from this spec.
