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

# Get Reviewer Profile

Use this API to fetch a reviewer's behavioral profile: judgment volume, approval rate, top flags, content types, peak hours, and a per-organization breakdown. Profiles are derived from accumulated judgments, so they need some review history before they are meaningful.

# Endpoint

`POST https://api.velt.dev/v2/memory/profiles/get`

# Headers

<ParamField header="x-velt-api-key" type="string" required>
  Your API key.
</ParamField>

<ParamField header="x-velt-auth-token" type="string" required>
  Your [Auth Token](/docs/security/auth-tokens).
</ParamField>

# Body

#### Params

<ParamField body="data" type="object" required>
  <Expandable title="properties">
    <ParamField body="targetUserId" type="string">
      The reviewer to profile. Always send this field. The API does not identify the reviewer from your auth token, so omitting `targetUserId` returns `null`.
    </ParamField>
  </Expandable>
</ParamField>

## **Example Requests**

#### Get a specific reviewer's profile

```JSON theme={null}
{
  "data": {
    "targetUserId": "u_sarah"
  }
}
```

# Response

The result is a reviewer profile, or `null` when no profile exists yet.

`avgReviewTimeSeconds` is reserved and always returns `0`.

`orgBreakdown` is keyed by Velt's internal organization id, which is also the value of the `organizationId` field. Match on `clientOrganizationId` to map an entry back to the organization id you sent.

`twinEligible` is `true` once the reviewer has at least 50 judgments. `twinAccuracy` is the share of twin-assisted judgments the twin got right, and is `null` when the reviewer has no twin-assisted judgments. `evolvedStandards` is present only for reviewers with at least 50 judgments, and only when a content type's approval rate moved by 25 percentage points or more between the last 90 days and the preceding 90 to 365 days. Most integrations can ignore all three.

#### Success Response

```JSON theme={null}
{
  "result": {
    "userId": "u_sarah",
    "name": "Sarah Lee",
    "email": "sarah@acme.com",
    "totalJudgments": 214,
    "approvalRate": 0.62,
    "avgReviewTimeSeconds": 0,
    "topFlags": [ { "issue": "missing-citation", "count": 31 } ],
    "contentTypes": ["marketing-copy"],
    "peakHours": [9, 10, 14],
    "orgBreakdown": {
      "1204438871": {
        "organizationId": "1204438871",
        "clientOrganizationId": "org_eu",
        "judgments": 120,
        "approvals": 70,
        "approvalRate": 0.58
      }
    },
    "lastActive": 1731432000000,
    "twinEligible": true,
    "twinAccuracy": 0.81,
    "evolvedStandards": [
      {
        "topic": "medical claims",
        "shiftDate": 1731000000000,
        "oldPattern": "Approved with a disclaimer.",
        "newPattern": "Rejected unless a citation is present."
      }
    ]
  }
}
```

#### Failure Response

```JSON theme={null}
{
  "error": {
    "message": "ERROR_MESSAGE",
    "status": "INVALID_ARGUMENT"
  }
}
```

<ResponseExample>
  ```js theme={null}
  {
    "result": {
      "userId": "u_sarah",
      "name": "Sarah Lee",
      "email": "sarah@acme.com",
      "totalJudgments": 214,
      "approvalRate": 0.62,
      "avgReviewTimeSeconds": 0,
      "topFlags": [ { "issue": "missing-citation", "count": 31 } ],
      "contentTypes": ["marketing-copy"],
      "peakHours": [9, 10, 14],
      "orgBreakdown": {
        "1204438871": {
          "organizationId": "1204438871",
          "clientOrganizationId": "org_eu",
          "judgments": 120,
          "approvals": 70,
          "approvalRate": 0.58
        }
      },
      "lastActive": 1731432000000,
      "twinEligible": true,
      "twinAccuracy": 0.81,
      "evolvedStandards": [
        {
          "topic": "medical claims",
          "shiftDate": 1731000000000,
          "oldPattern": "Approved with a disclaimer.",
          "newPattern": "Rejected unless a citation is present."
        }
      ]
    }
  }
  ```
</ResponseExample>
