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

# List Project Links

> List the project links on the current install, newest first.

Lists every [project link](/docs/developers/annotation-platforms/project-links) on the calling token's install, newest first. There is no pagination — installs hold a bounded number of links.

**Requirements:** `project-links:read` scope (implied by `project-links:write`).

## Request

No parameters.

## Response

<ResponseField name="projectLinks" type="object[]">
  Array of project links, newest first. Each: `{id, jobId, externalProjectId, externalProjectName, externalProjectUrl, provisioningMode, createdAt}` — same shape as [`GET /project-links/{linkId}`](/docs/developers/annotation-platforms/api-reference/project-links/get).
</ResponseField>

## Errors

| Status | `code`         | Meaning                            |
| ------ | -------------- | ---------------------------------- |
| `401`  | `UNAUTHORIZED` | Missing, invalid, or revoked token |
| `403`  | `FORBIDDEN`    | Token lacks `project-links:read`   |

<RequestExample>
  ```bash curl theme={null}
  curl -sS https://app.opentrain.ai/api/partner/v1/project-links \
    -H "Authorization: Bearer $OT_PARTNER_TOKEN"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "projectLinks": [
      {
        "id": "<LINK_ID>",
        "jobId": "<OPENTRAIN_JOB_ID>",
        "externalProjectId": "42",
        "externalProjectName": "Traffic signs batch 3",
        "externalProjectUrl": "https://your-platform.example.com/projects/42",
        "provisioningMode": "PARTNER_WEBHOOK",
        "createdAt": "2026-06-12T10:00:00.000Z"
      }
    ]
  }
  ```
</ResponseExample>
