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

> List the jobs owned by the authenticated account.

Lists every job owned by your account — drafts included — with proposal counts, newest first. This is the authenticated counterpart to the tokenless [marketplace search](/docs/developers/api-reference/jobs/search): use it to find your own drafts to finish, open jobs to monitor, and proposal queues to review.

**Requirements:** `jobs:read` scope. Works pre-claim.

## Request

<ParamField query="status" type="string">
  Filter to one status: `DRAFT`, `OPEN`, `ONGOING`, `COMPLETED`, `ARCHIVED`, or `PENDING_APPROVAL`. Invalid values return `400` with `details.supportedStatuses`.
</ParamField>

<ParamField query="limit" type="number" default="25">
  Page size, max 100.
</ParamField>

<ParamField query="cursor" type="string">
  Pagination cursor from a previous response's `nextCursor`.
</ParamField>

## Response

<ResponseField name="jobs" type="object[]">
  Your jobs, newest first.

  <Expandable title="job entry">
    <ResponseField name="id" type="string">
      Job ID.
    </ResponseField>

    <ResponseField name="title" type="string">
      Job title.
    </ResponseField>

    <ResponseField name="status" type="string">
      `DRAFT`, `OPEN`, `ONGOING`, `COMPLETED`, `ARCHIVED`, or `PENDING_APPROVAL`.
    </ResponseField>

    <ResponseField name="published" type="boolean">
      Whether the job is live on the marketplace.
    </ResponseField>

    <ResponseField name="acceptingApplicants" type="boolean">
      Whether new proposals are being accepted.
    </ResponseField>

    <ResponseField name="createdAt" type="string">
      ISO creation timestamp.
    </ResponseField>

    <ResponseField name="updatedAt" type="string">
      ISO last-update timestamp.
    </ResponseField>

    <ResponseField name="jobUrl" type="string">
      In-app URL (draft editor for drafts, listing for published jobs).
    </ResponseField>

    <ResponseField name="proposalCounts" type="object">
      `{total, unreviewed}` — proposal volume for the job. A nonzero `unreviewed` means there are candidates to [evaluate](/docs/developers/api-reference/jobs/list-proposals).
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="nextCursor" type="string | null">
  Pass back as `cursor` for the next page; `null` at the end.
</ResponseField>

## Errors

| Status | `code`         | Meaning                                                           |
| ------ | -------------- | ----------------------------------------------------------------- |
| `400`  | `BAD_REQUEST`  | Invalid `status` (`details.supportedStatuses`) or `limit` below 1 |
| `401`  | `UNAUTHORIZED` | Missing or invalid token                                          |
| `403`  | `FORBIDDEN`    | Missing `jobs:read` scope                                         |

<RequestExample>
  ```bash curl theme={null}
  curl -sS "https://app.opentrain.ai/api/public/v1/jobs/mine?status=OPEN&limit=25" \
    -H "Authorization: Bearer $OT_API_TOKEN"
  ```

  ```bash CLI theme={null}
  opentrain jobs list --status OPEN --limit 25 --json
  ```

  ```json MCP: opentrain_list_jobs theme={null}
  {
    "status": "OPEN",
    "limit": 25
  }
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "jobs": [
      {
        "id": "<JOB_ID>",
        "title": "Spanish Sentiment Labeling — Social Media Posts",
        "status": "OPEN",
        "published": true,
        "acceptingApplicants": true,
        "createdAt": "2026-06-10T11:02:00.000Z",
        "updatedAt": "2026-06-11T09:15:00.000Z",
        "jobUrl": "https://app.opentrain.ai/jobs/<JOB_ID>",
        "proposalCounts": {
          "total": 12,
          "unreviewed": 5
        }
      }
    ],
    "nextCursor": null
  }
  ```

  ```json 400 (invalid status) theme={null}
  {
    "error": "Invalid status filter",
    "code": "BAD_REQUEST",
    "requestId": "<REQUEST_ID>",
    "details": {
      "status": "LIVE",
      "supportedStatuses": [
        "DRAFT",
        "OPEN",
        "ONGOING",
        "COMPLETED",
        "ARCHIVED",
        "PENDING_APPROVAL"
      ]
    }
  }
  ```
</ResponseExample>
