---
title: "Record acceptance of the Terms of Service"
method: POST
path: "/v1/auth/terms"
tags: ["auth"]
---

# Record acceptance of the Terms of Service

`POST /v1/auth/terms`

## Request

- Base URL: `https://api.hyperresearch.ai`
- URL: `https://api.hyperresearch.ai/v1/auth/terms`
- Auth: API key in cookie `hr_session`

Session + CSRF required. The console posts the `LEGAL_VERSION` it rendered on the first authenticated session after sign-in, and on any session where the version it renders differs from the one the response reports. Idempotent: re-posting the version already on the account writes nothing and returns the original `terms_accepted_at` with `recorded: false`. A different version replaces the record, which is the re-acceptance path after a terms change. Acceptance is recorded per account, and each write leaves an `auth.terms_accepted` audit row.

## Request body

- AuthAcceptTermsRequest
  - `version` string, required

## Response `200`

Acceptance on file

- AuthTermsAcceptance
  - `terms_version` string, nullable, required
  - `terms_accepted_at` string, nullable, required
  - `recorded` boolean, required

## Other responses

- `400`: Invalid request
- `401`: Authentication failed
- `403`: Insufficient scope or plan
- `404`: Not found
- `429`: Rate limited or over quota
- `500`: Internal error

---

[API](https://skmtc.dev/hyperresearch/apis/hyperresearch-cloud-api.md) · [All operations](https://skmtc.dev/hyperresearch/apis/hyperresearch-cloud-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hyperresearch/apis/hyperresearch-cloud-api/revisions/726ef831ebf4?raw)
