> ## 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

**x-velt-api-key** `string` *required*

Your API key.

**x-velt-auth-token** `string` *required*

Your [Auth Token](https://velt.dev/docs/security/auth-tokens.md).

# Body

#### Params

**data** `object` *required*

**properties**

**targetUserId** `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`.

## **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"
  }
}
```

```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."
      }
    ]
  }
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.