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

# Get User

> Fetches a user's profile and KYC record. Only users belonging to the authenticated partner are accessible.

## Overview

Returns the user's profile plus their KYC record. Partner-scoped — if the `grail_user_id` belongs to a different partner, the request is rejected with `403 partner_mismatch`.

## Headers

<ParamField header="x-api-key" type="string" required>
  A valid `PARTNER` scope key.
</ParamField>

## Path Parameters

<ParamField path="grail_user_id" type="string" required>
  GRAIL's identifier for the user, prefixed `gu_`. Returned from [Create User](/api-reference/users/create-user).
</ParamField>

## Response

<ResponseField name="grail_user_id" type="string">
  GRAIL's user identifier.
</ResponseField>

<ResponseField name="user_id" type="string">
  Your internal identifier (the `partner_user_id` supplied at creation time).
</ResponseField>

<ResponseField name="wallet_address" type="string">
  The user's Solana wallet address.
</ResponseField>

<ResponseField name="status" type="string">
  `"active"` or `"suspended"`. Suspended users cannot quote trades or redemptions.
</ResponseField>

<ResponseField name="created_at" type="string">
  ISO-8601 timestamp of user creation.
</ResponseField>

<ResponseField name="kyc" type="object">
  The user's KYC record. Omitted if no KYC record exists (shouldn't happen for users created via [Create User](/api-reference/users/create-user)).

  <Expandable title="properties">
    <ResponseField name="country" type="string">
      ISO-3166-1 alpha-2 country code.
    </ResponseField>

    <ResponseField name="full_name" type="string">
      Full legal name as supplied at creation.
    </ResponseField>

    <ResponseField name="kyc_level" type="string">
      `"full"` for users able to trade / redeem.
    </ResponseField>

    <ResponseField name="kyc_provider" type="string">
      Label of the KYC provider.
    </ResponseField>

    <ResponseField name="kyc_verified_at" type="string">
      ISO-8601 timestamp of when KYC was verified.
    </ResponseField>

    <ResponseField name="kyc_data" type="object">
      Free-form JSON with provider-specific fields, as supplied at creation.
    </ResponseField>
  </Expandable>
</ResponseField>

## Errors

| HTTP | `error`            | When                                   |
| ---- | ------------------ | -------------------------------------- |
| 401  | `unauthorized`     | Missing or invalid `x-api-key`         |
| 403  | `partner_mismatch` | User belongs to a different partner    |
| 404  | `user_not_found`   | No user with the given `grail_user_id` |

<RequestExample>
  ```bash cURL theme={null}
  curl https://grail-stack-dev.onrender.com/v1/users/gu_6b60956e-a8ee-4de2-8128-04c7fdf633c3 \
    -H "x-api-key: grail_partner_<hex>"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "grail_user_id": "gu_6b60956e-a8ee-4de2-8128-04c7fdf633c3",
    "user_id": "partner_internal_user_001",
    "wallet_address": "2u7vVGJCTtsijCqWJNCEknVkuLjeU7Rd4PMg4dXuTZGx",
    "status": "active",
    "created_at": "2026-04-17T10:15:30.000Z",
    "kyc": {
      "country": "PK",
      "full_name": "Alice Example",
      "kyc_level": "full",
      "kyc_provider": "manual",
      "kyc_verified_at": "2026-04-17T00:00:00.000Z",
      "kyc_data": {
        "id_type": "CNIC",
        "id_number": "12345-1234567-1"
      }
    }
  }
  ```
</ResponseExample>
