---
title: "Grant Comp"
method: POST
path: "/users/{user_id}/comp"
tags: ["users"]
---

# Grant Comp

`POST /users/{user_id}/comp`

## Request

- Base URL: `https://api.tickertrac.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.tickertrac.com/users/{user_id}/comp`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Grant complimentary Investor access through the audited account-access desk.

Note this writes comp_expires_at, never subscription_status. See entitlements.py
for why touching Stripe's column instead would silently lose the grant.

Re-granting overwrites rather than extends. Extension would make "give them
another 30 days" ambiguous depending on whether the previous grant had already
lapsed; setting an absolute end date from now is the same operation every time.

## Path parameters

- `user_id` integer, required

## Request body

- CompGrantIn
  - `days` integer, required
  - `reason` string, required

## Response `200`

Successful Response

- UserOut
  - `id` integer, nullable
  - `email` string, required
  - `is_admin` boolean, required
  - `email_verified` boolean, required
  - `alerts_paused` boolean, required
  - `email_delivery_suppressed_at` string, date-time, nullable, required
  - `email_delivery_suppression_reason` string, nullable, required
  - `onboarding_preferences_confirmed_at` string, date-time, nullable, required
  - `created_at` string, date-time, required
  - `guidance_preference` 'guided' | 'experienced', nullable
  - `example_thesis_hidden_at` string, date-time, nullable
  - `has_password` boolean, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/tickertrac/apis/tickerrag-api.md) · [All operations](https://skmtc.dev/tickertrac/apis/tickerrag-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tickertrac/apis/tickerrag-api/revisions/3c7eb0f6425d?raw)
