Released docs. You are viewing the documentation published with v0.34.0. Development docs are available at Latest.
Reserve an admission
const url = 'https://scheduling.example.test/v1/holds';const options = { method: 'POST', headers: { 'Idempotency-Key': 'example', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"capabilities":["example"],"channel":"example","duplicateKey":"example","offering":"example","party":{"attendees":1,"recipients":1},"policyRevision":1,"prerequisites":["example"],"start":"2026-04-15T12:00:00Z","windowRevision":1}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://scheduling.example.test/v1/holds \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Idempotency-Key: example' \ --data '{ "capabilities": [ "example" ], "channel": "example", "duplicateKey": "example", "offering": "example", "party": { "attendees": 1, "recipients": 1 }, "policyRevision": 1, "prerequisites": [ "example" ], "start": "2026-04-15T12:00:00Z", "windowRevision": 1 }'Reserves supply instead of committing it and answers the hold with its expiry. The caller must carry a complete task grant whose scheduling permission names the offering’s service, its location, and hold.create; readable availability is not authority to book. The hold expires on its own, so its capacity returns without a release.
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Header Parameters
Section titled “Header Parameters”Optional W3C trace context continued in the response.
Caller-selected ASCII graphic key bound to this exact request. An exact retry replays the first answer, a changed request is idempotency.key-reused, and a receipt retained past its window is idempotency.expired.
Request Bodyrequired
Section titled “Request Bodyrequired”object
object
Examplegenerated
{ "capabilities": [ "example" ], "channel": "example", "duplicateKey": "example", "offering": "example", "party": { "attendees": 1, "recipients": 1 }, "policyRevision": 1, "prerequisites": [ "example" ], "start": "2026-04-15T12:00:00Z", "windowRevision": 1}Responses
Section titled “ Responses ”Success
object
Examplegenerated
{ "end": "2026-04-15T12:00:00Z", "expiresAt": "2026-04-15T12:00:00Z", "holdId": "example", "offering": "example", "policyRevision": 1, "resource": "example", "start": "2026-04-15T12:00:00Z", "units": 1}Headers
Section titled “Headers”Every answer is marked no-store, so a booking view is never served from a cache.
W3C trace context for the request and response.
Problem response: request.invalid
object
Example
{ "code": "request.invalid", "detail": "The request could not be read as a Scheduling request.", "status": 400, "title": "Request invalid", "type": "https://id.registrystack.org/problems/registry-scheduling/request/invalid"}Headers
Section titled “Headers”Every answer is marked no-store, so a booking view is never served from a cache.
W3C trace context for the request and response.
Problem response: authentication.refused
object
Example
{ "code": "authentication.refused", "detail": "The bearer credential is missing, invalid, or expired. Sign in again.", "status": 401, "title": "Authentication refused", "type": "https://id.registrystack.org/problems/registry-scheduling/authentication/refused"}Headers
Section titled “Headers”Bearer authentication challenge.
Every answer is marked no-store, so a booking view is never served from a cache.
W3C trace context for the request and response.
Problem response: profile.not-authorized, operation.not-authorized
object
object
Example
{ "code": "profile.not-authorized", "detail": "The selected Scheduling profile does not authorize this request.", "status": 403, "title": "Profile not authorized", "type": "https://id.registrystack.org/problems/registry-scheduling/profile/not-authorized"}Headers
Section titled “Headers”Every answer is marked no-store, so a booking view is never served from a cache.
W3C trace context for the request and response.
Problem response: request.not-found
object
Example
{ "code": "request.not-found", "detail": "The requested route does not exist.", "status": 404, "title": "Route not found", "type": "https://id.registrystack.org/problems/registry-scheduling/request/not-found"}Headers
Section titled “Headers”Every answer is marked no-store, so a booking view is never served from a cache.
W3C trace context for the request and response.
Problem response: request.method-not-allowed
object
Example
{ "code": "request.method-not-allowed", "detail": "The route exists but not for this method.", "status": 405, "title": "Method not allowed", "type": "https://id.registrystack.org/problems/registry-scheduling/request/method-not-allowed"}Headers
Section titled “Headers”Every answer is marked no-store, so a booking view is never served from a cache.
W3C trace context for the request and response.
Problem response: booking.duplicate-active, capacity.exhausted, location.closed, idempotency.key-reused
object
object
object
object
Example
{ "code": "booking.duplicate-active", "detail": "An active booking already holds this party's duplicate key. Cancel it, or wait until it has passed, before booking again.", "status": 409, "title": "Duplicate active booking", "type": "https://id.registrystack.org/problems/registry-scheduling/booking/duplicate-active"}Headers
Section titled “Headers”Every answer is marked no-store, so a booking view is never served from a cache.
W3C trace context for the request and response.
Problem response: idempotency.expired
object
Example
{ "code": "idempotency.expired", "detail": "The stored response for this idempotency key has expired. Reconcile the original operation before choosing a new key.", "status": 410, "title": "Idempotency window expired", "type": "https://id.registrystack.org/problems/registry-scheduling/idempotency/expired"}Headers
Section titled “Headers”Every answer is marked no-store, so a booking view is never served from a cache.
W3C trace context for the request and response.
Problem response: policy.changed, revision.mismatch
object
object
Example
{ "code": "policy.changed", "detail": "The policy revision changed before the request committed. Reload the catalogue and try again with the current revision.", "status": 412, "title": "Policy changed", "type": "https://id.registrystack.org/problems/registry-scheduling/policy/changed"}Headers
Section titled “Headers”Every answer is marked no-store, so a booking view is never served from a cache.
W3C trace context for the request and response.
Problem response: request.body-too-large
object
Example
{ "code": "request.body-too-large", "detail": "The request body exceeds the accepted size.", "status": 413, "title": "Payload too large", "type": "https://id.registrystack.org/problems/registry-scheduling/request/body-too-large"}Headers
Section titled “Headers”Every answer is marked no-store, so a booking view is never served from a cache.
W3C trace context for the request and response.
Problem response: request.unsupported-media-type
object
Example
{ "code": "request.unsupported-media-type", "detail": "The request body is not JSON.", "status": 415, "title": "Unsupported media type", "type": "https://id.registrystack.org/problems/registry-scheduling/request/unsupported-media-type"}Headers
Section titled “Headers”Every answer is marked no-store, so a booking view is never served from a cache.
W3C trace context for the request and response.
Problem response: request.unprocessable, capability.unmatched, horizon.outside, party.capacity-inadequate, prerequisite.missing, schedule.unpublished
object
object
object
object
object
object
Example
{ "code": "request.unprocessable", "detail": "The request body could not be processed.", "status": 422, "title": "Request unprocessable", "type": "https://id.registrystack.org/problems/registry-scheduling/request/unprocessable"}Headers
Section titled “Headers”Every answer is marked no-store, so a booking view is never served from a cache.
W3C trace context for the request and response.
Problem response: precondition.required
object
Example
{ "code": "precondition.required", "detail": "This mutation requires the revision you loaded, or the duplicate key this offering keys on.", "status": 428, "title": "Precondition required", "type": "https://id.registrystack.org/problems/registry-scheduling/precondition/required"}Headers
Section titled “Headers”Every answer is marked no-store, so a booking view is never served from a cache.
W3C trace context for the request and response.
Problem response: service.unavailable
object
Example
{ "code": "service.unavailable", "detail": "Scheduling storage is unavailable. Try again after the service recovers.", "status": 503, "title": "Scheduling service unavailable", "type": "https://id.registrystack.org/problems/registry-scheduling/service/unavailable"}Headers
Section titled “Headers”Seconds before retrying the unavailable dependency; the runtime answers 5.
Every answer is marked no-store, so a booking view is never served from a cache.
W3C trace context for the request and response.