# List tests

Page through assessment tests in a stable, curated shape. Scope: tests:read.

Lists assessment tests in the stable v1 shape. The question **content is never included** — only metadata. **Scope:** `tests:read`. Visibility: admins all; everyone else sees their org's tests plus platform-global (public) tests.

## Query parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `page` | integer | No | 0-indexed page. Default `0`. |
| `pageSize` | integer | No | Rows per page (max 100). Default `20`. |
| `type` | string | No | Filter by test type. |
| `analysisCategory` | string | No | Filter by analysis category. |
| `language` | string | No | Filter by language (ISO 639-1). |

## Example request

```bash
curl "https://app.talent-ray.com/api/v1/tests?analysisCategory=hard_skill" \
  -H "Authorization: Bearer tr_YOUR_KEY"
```

## Response

`200 OK`

```json
{
  "data": [
    {
      "id": "test_js",
      "name": "JavaScript Fundamentals",
      "type": "multiple_choice",
      "description": "Core JS assessment.",
      "duration": 30,
      "targetPersona": "Backend Engineer",
      "analysisCategory": "hard_skill",
      "language": "en",
      "isPublic": false,
      "organizationIds": ["org_acme"],
      "createdAt": "2026-04-01T09:00:00Z",
      "updatedAt": "2026-04-10T09:00:00Z"
    }
  ],
  "pagination": { "page": 0, "pageSize": 20, "totalCount": 48, "totalPages": 3 }
}
```

`isPublic` is `true` when the test has no linked organization (a platform-global template). `duration` is in minutes.

## Status codes

| Status | Meaning |
| --- | --- |
| `200` | Success. |
| `401` | No valid API key. |
| `403` | `insufficient_scope` — the key lacks `tests:read`. |
| `429` | Rate limit exceeded. |