---
title: "Amend a reservation's term, audience, or topology pin (platform admin)"
method: PATCH
path: "/v1/nodes/{nodeId}/reservations/{id}"
tags: ["Reservations"]
---

# Amend a reservation's term, audience, or topology pin (platform admin)

`PATCH /v1/nodes/{nodeId}/reservations/{id}`

## Path parameters

- `nodeId` string, required
- `id` string, required

## Request body

- UpdateNodeReservationRequest
  - `allowedOrgIds` string[] — Replace the audience
  - `endsAt` string — Move the term end. Empty string makes it open-ended.
  - `reaffirm` boolean — Re-pin to the node's current topology and reactivate (clears needs-review)

## Response `200`

OK

- NodeReservation — Exclusive placement rights for a set of orgs over specific GPU units of one node, for a term. Scoped to units, not GPU counts, because units are the indivisible allocation primitive.
  - `allowedOrgIds` string[], required
  - `contractRef` string
  - `createdAt` string
  - `endsAt` string — Absent = open-ended until cancelled
  - `id` string, required
  - `nodeId` string, required
  - `reason` string
  - `reservedUnitIds` string[], required
  - `startsAt` string, required
  - `status` 'pending' | 'active' | 'expired' | 'cancelled' | 'needs-review', required — needs-review means the node's GPU topology changed under the reservation: it grants nothing (and withholds its units from everyone) until an operator re-affirms it.
  - `topologyGen` integer — Node topology generation this reservation was written against
  - `updatedAt` string

## Other responses

- `400` — The request is invalid
- `401` — Missing or invalid API key
- `403` — API key lacks the required scope
- `404` — Resource not found
- `409` — The request conflicts with existing state

---

[API](https://skmtc.net/openrelay/apis/openrelay-api.md) · [All operations](https://skmtc.net/openrelay/apis/openrelay-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/openrelay/openrelay-api/versions/4c42fd61ed41/schema)
