---
title: "Sign the headset-lending waiver"
method: POST
path: "/api/headsets/sign-waiver"
tags: ["headsets", "browser-session"]
---

# Sign the headset-lending waiver

`POST /api/headsets/sign-waiver`

## Request

- Base URL: `https://www.immersivecommons.com`
- URL: `https://www.immersivecommons.com/api/headsets/sign-waiver`
- Auth: API key in cookie `__session`

Clerk-session only (NOT reachable with an agt_ bearer), ic-member+. One-time, version-gated, and a precondition for checkout. The signer's ring is derived SERVER-SIDE from their live tier — a `ring` field in the body is never trusted. `photo_consent` is tri-state and anything other than "yes"/"no" is recorded as "unset".

## Request body

- HeadsetWaiverRequest: The signer's ring is derived server-side from their live tier; a `ring` field here is ignored.
  - `name` string, required
  - `email` string
  - `phone` string
  - `telegram` string
  - `signature_typed` string, required: The typed signature.
  - `photo_consent` 'yes' | 'no' | 'unset': Anything other than yes/no is recorded as unset.

## Response `200`

Waiver recorded.

- HeadsetWaiverResponse
  - `ok` boolean, required
  - `record_id` string
  - `expires_at` string, date-time: When the waiver must be re-signed.

## Other responses

- `400`: Invalid JSON or a rejected field (name / email / typed signature).
- `401`: Not signed in.
- `403`: ic-member tier required.
- `503`: Waiver store unavailable.

---

[API](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api.md) · [All operations](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api/revisions/be67c1f67c27?raw)
