> ## Documentation Index
> Fetch the complete documentation index at: https://opentrain.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Current Account

> Retrieve the authenticated actor, token scopes, and account context.

Returns the principal behind the bearer token: who the actor is, what the token can do, and which account context it operates in. The natural first call of any session — use it to confirm the token works and to discover your scopes before probing [capabilities](/docs/developers/api-reference/job-drafts/capabilities).

**Requirements:** any valid token — no specific scope.

## Request

No parameters.

## Response

<ResponseField name="actor" type="object">
  The user behind the token.

  <Expandable title="actor fields">
    <ResponseField name="userId" type="string">
      The actor's user ID.
    </ResponseField>

    <ResponseField name="email" type="string | null">
      The account email, if set. Unclaimed agent accounts have no email until a human claims them.
    </ResponseField>

    <ResponseField name="firstName" type="string | null">
      First name, if set.
    </ResponseField>

    <ResponseField name="lastName" type="string | null">
      Last name, if set.
    </ResponseField>

    <ResponseField name="fullName" type="string | null">
      Convenience concatenation of first and last name.
    </ResponseField>

    <ResponseField name="userType" type="string | null">
      The platform role, e.g. `EMPLOYER`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="token" type="object">
  The authenticating token.

  <Expandable title="token fields">
    <ResponseField name="id" type="string">
      Token ID — usable with [`DELETE /tokens/{tokenId}`](/docs/developers/api-reference/tokens/revoke).
    </ResponseField>

    <ResponseField name="label" type="string | null">
      The token's name (e.g. `"ci-runner"`, `"Agent token (pre-claim)"`).
    </ResponseField>

    <ResponseField name="scopes" type="string[]">
      The token's granted scopes. `:write` scopes imply the matching `:read` at enforcement time, but this list shows exactly what was granted.
    </ResponseField>

    <ResponseField name="ownerOrganizationId" type="string | null">
      Organization the token is bound to, if any.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="account" type="object">
  The account context requests operate in.

  <Expandable title="account fields">
    <ResponseField name="kind" type="string">
      `employer_organization` when the actor belongs to an employer organization, otherwise `personal`.
    </ResponseField>

    <ResponseField name="organizationId" type="string | null">
      The organization ID (`null` for `personal`).
    </ResponseField>

    <ResponseField name="ownerUserId" type="string | null">
      The organization owner's user ID (`null` for `personal`).
    </ResponseField>

    <ResponseField name="memberRole" type="string | null">
      The actor's role in the organization, e.g. `OWNER` (`null` for `personal`).
    </ResponseField>
  </Expandable>
</ResponseField>

## Errors

| Status | `code`         | Meaning                                     |
| ------ | -------------- | ------------------------------------------- |
| `401`  | `UNAUTHORIZED` | Missing, invalid, expired, or revoked token |
| `404`  | `NOT_FOUND`    | The token's user no longer exists           |

<RequestExample>
  ```bash curl theme={null}
  curl -sS https://app.opentrain.ai/api/public/v1/auth/me \
    -H "Authorization: Bearer $OT_API_TOKEN"
  ```

  ```bash CLI theme={null}
  opentrain auth status --json
  ```

  ```json MCP: opentrain_auth_status theme={null}
  {}
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "actor": {
      "userId": "<USER_ID>",
      "email": "owner@example.com",
      "firstName": "Mira",
      "lastName": "Chen",
      "fullName": "Mira Chen",
      "userType": "EMPLOYER"
    },
    "token": {
      "id": "<TOKEN_ID>",
      "label": "ci-runner",
      "scopes": ["jobs:read", "jobs:write", "proposals:read", "payments:read"],
      "ownerOrganizationId": null
    },
    "account": {
      "kind": "employer_organization",
      "organizationId": "<ORGANIZATION_ID>",
      "ownerUserId": "<USER_ID>",
      "memberRole": "OWNER"
    }
  }
  ```
</ResponseExample>
