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

# List Projects

List all projects belonging to the API user, newest first, in pages of 100.

## Request

| Query param | Type        | Default | Description                                 |
| ----------- | ----------- | ------- | ------------------------------------------- |
| `page`      | integer ≥ 1 | `1`     | Page number. Page size is fixed at **100**. |

## Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.transcribetube.com/api/list?page=1" \
    -H "api-key: $TRANSCRIBETUBE_API_KEY"
  ```

  ```js Node (fetch) theme={null}
  const res = await fetch("https://api.transcribetube.com/api/list?page=1", {
    headers: { "api-key": process.env.TRANSCRIBETUBE_API_KEY },
  });
  const projects = await res.json();
  ```

  ```python Python (requests) theme={null}
  import os, requests

  res = requests.get(
      "https://api.transcribetube.com/api/list",
      params={"page": 1},
      headers={"api-key": os.environ["TRANSCRIBETUBE_API_KEY"]},
  )
  projects = res.json()
  ```
</CodeGroup>

## Response

`200 OK` — array of projects (one page):

```json theme={null}
[
  {
    "id": "f3c1e7a0-2b48-4a91-8a30-9b1c2d3e4f50",
    "name": "Rick Astley - Never Gonna Give You Up",
    "youtubeId": "dQw4w9WgXcQ",
    "state": "done",
    "createdAt": "2026-01-15T14:30:00.000Z"
  },
  {
    "id": "a812b3c4-5d6e-7f8a-9b0c-1d2e3f4a5b60",
    "name": "Some other video",
    "youtubeId": "abc123XYZ_w",
    "state": "transcription",
    "createdAt": "2026-01-15T14:25:00.000Z"
  }
]
```

| Field       | Type              | Description                                                                                      |
| ----------- | ----------------- | ------------------------------------------------------------------------------------------------ |
| `id`        | string (UUID)     | Project ID, used in `GET /api/detail/{id}`.                                                      |
| `name`      | string            | Video title from YouTube at submission time.                                                     |
| `youtubeId` | string            | The YouTube video ID.                                                                            |
| `state`     | enum              | `upload` \| `transcription` \| `done` \| `error`. See [Lifecycle](/api-documentation/lifecycle). |
| `createdAt` | string (ISO 8601) | When the project was created.                                                                    |

## Pagination

There is no total count or `hasMore` field. To detect the last page, request until you receive an empty array. Pages are 1-indexed.

```js theme={null}
let page = 1;
while (true) {
  const res = await fetch(`https://api.transcribetube.com/api/list?page=${page}`, {
    headers: { "api-key": apiKey },
  });
  const batch = await res.json();
  if (batch.length === 0) break;
  process(batch);
  page++;
}
```

## Errors

| Status | When                                 |
| ------ | ------------------------------------ |
| 400    | `page` \< 1 or not a number.         |
| 401    | Missing or invalid `api-key` header. |


## OpenAPI

````yaml get /api/list
openapi: 3.0.0
info:
  title: Transcribe Tube
  description: Welcome to the API Panel for Transcribe Tube
  version: 0.0.1
  contact: {}
servers:
  - url: https://api.transcribetube.com
security: []
tags: []
paths:
  /api/list:
    get:
      tags:
        - Api
      operationId: ApiController_getProjects
      parameters:
        - name: page
          in: query
          description: Page number for pagination
          schema:
            type: integer
            default: 1
      responses:
        '200':
          description: One page of projects (max 100)
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProjectListItem'
        '400':
          description: Invalid page parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Missing or invalid api-key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - api-key: []
components:
  schemas:
    ProjectListItem:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
          example: Rick Astley - Never Gonna Give You Up
        youtubeId:
          type: string
          example: dQw4w9WgXcQ
        state:
          type: string
          enum:
            - upload
            - transcription
            - done
            - error
        createdAt:
          type: string
          format: date-time
    ErrorResponse:
      type: object
      properties:
        statusCode:
          type: integer
        message:
          type: string
        error:
          type: string
  securitySchemes:
    api-key:
      type: apiKey
      in: header
      name: api-key

````