---
title: "Return the caller's identity + tenant info (for the UI banner)."
method: GET
path: "/v1/auth/profile"
tags: ["auth"]
---

# Return the caller's identity + tenant info (for the UI banner).

`GET /v1/auth/profile`

## Request

- Base URL: `https://api.andish.ru` (the document declares no server; this is the origin it was published from)
- URL: `https://api.andish.ru/v1/auth/profile`
- Auth: none declared

Narrow profile shape for the Dashboard email-verification banner. Accepts either a dashboard session token or an API key (Bearer adsh_* / mne_*) — the session token is the production path (the Dashboard always sends one); API-key auth exists for tooling and tests. Distinct from /me in response shape, not in auth method. Returns whoever asked, not the workspace owner — a workspace can contain several people with different roles.

## Response `200`

Successful Response

- ProfileResponse: Response for GET /v1/auth/profile (HTTP 200). Narrow shape for the UI banner. Accepts either a dashboard session token or an API key — see the endpoint description for the auth detail; the difference from MeResponse is this response's shape (no consent fields, no created_at), not the auth method. Every field describes the CALLER (Task A3, ADR-074): user_id, email, email_verified, last_login_at and role are all resolved via ctx.user_id — the identity behind this specific request — never via tenant.owner_user_id. A workspace can contain more than one person (ADR-072), and each of them gets back their own row.
  - `user_id` string, uuid, required
  - `email` string, required: User email address.
  - `email_verified` boolean, required: True if email was confirmed. MVP: False until the user clicks the verification link.
  - `last_login_at` string, date-time, nullable
  - `tenant` TenantInfo, required: Partial tenant info embedded in MeResponse and ProfileResponse.
    - `id` string, uuid, required
    - `slug` string, required
    - `name` string, required
    - `plan` string, required
    - `tier` string: Billing tier.
    - `trial_ends_at` string, date-time, nullable: Deprecated (ADR-083): the free tier has no end date, so this is null for every tenant that was not on an old trial. Kept in the schema until the next API version (ADR-012).
    - `trial_days_remaining` integer, required: Days remaining in the trial period; 0 if expired or not on trial.
  - `role` string, nullable: Caller's role in their workspace: admin | editor | viewer. None means the role is unknown (a request made with an API key that has no resolvable creator).

## Other responses

- `401`: Invalid or missing API key

---

[API](https://skmtc.dev/andish/apis/mnemo-api.md) · [All operations](https://skmtc.dev/andish/apis/mnemo-api/llms.txt) · [OpenAPI document](https://skmtc.dev/andish/apis/mnemo-api/revisions/d5449f23414c?raw)
