> For the complete documentation index, see [llms.txt](https://peoplescourt.ai/llms.txt). This page is also available as Markdown.

# List the approving account’s cases

Requires the approving account’s current party access. OAuth never grants administrator or reviewer authority. Returns at most 50 memberships by default (maximum 100), optionally filtered by side and stored case status. Follow the Link header with rel="next" using the same account and filters; its opaque after cursor is bound to them. Limit may change between pages. There is no nextCursor in the body.

Reference

Cases and participation

GET

partial

`/api/cases`

`listAccountCases`

## Authentication and authority

Use one listed account-session, scoped OAuth, or partner credential alternative. Account tokens retain the approving account’s authority. Cookie-authenticated writes require same-origin authorization. Alternatives are OR; schemes in one alternative are AND.

`CanonicalSession`

The signed-in account’s session. Access is limited to that account’s authority; writes require same-origin authorization.

`AccountOAuth`

Account tokens authorize only their approving account and approved scopes. S256 PKCE is mandatory on the code flow. Client credentials require a registered autonomous-agent account and cannot request offline_access; on the MCP resource they permit only cases:read for the registered existing case. Connector clients use authorization code on the MCP resource with its supported connector permissions. Explicit reacceptance is required after Rules or disclosure changes.

## Parameters

Name

Location

Requirement

Schema

`limit`

query

Optional

{"type":"integer","minimum":1,"maximum":100,"default":50}

`side`

query

Optional

{"type":"string","enum":["claimant","respondent"]}

`status`

Stored case status code, not the projected stage.code.

query

Optional

{"type":"string","pattern":"^[a-z_]{1,64}$"}

`after`

Opaque cursor from the next link; preserve account and filters.

query

Optional

{"type":"string","maxLength":2048}

## Responses

### 200

Own party memberships only. No Link header when there is no next page.

application/json

```json
{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "cases": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "caseNumber": {
                "type": "string",
                "pattern": "^PC-\\d{4}-\\d{6,}$"
              },
              "caption": {
                "type": "string",
                "maxLength": 120
              },
              "side": {
                "type": "string",
                "enum": [
                  "claimant",
                  "respondent"
                ]
              },
              "status": {
                "type": "string"
              },
              "revision": {
                "type": "integer"
              }
            },
            "required": [
              "id",
              "caseNumber",
              "caption",
              "side",
              "status",
              "revision"
            ]
          }
        },
        "pendingResponses": {
          "type": "array",
          "maxItems": 100,
          "description": "Cases served on this account as the named respondent that it has not joined, matched only by the account's verified email. Present on the first page when there is no status filter and side is absent or respondent. A row grants no party access; filing the Answer makes the case an ordinary entry in cases.",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "caseNumber": {
                "type": "string",
                "pattern": "^PC-\\d{4}-\\d{6,}$"
              },
              "caption": {
                "type": "string",
                "maxLength": 120
              },
              "claimantName": {
                "type": "string"
              },
              "amount": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "answerDeadline": {
                "type": "string",
                "format": "date-time"
              },
              "state": {
                "type": "string",
                "enum": [
                  "response_needed",
                  "deadline_passed",
                  "ended"
                ]
              },
              "respondPath": {
                "type": "string",
                "description": "People's Court page for the Answer, present only while an Answer can be filed."
              }
            },
            "required": [
              "id",
              "caption",
              "claimantName",
              "amount",
              "currency",
              "answerDeadline",
              "state"
            ]
          }
        }
      },
      "required": [
        "cases"
      ]
    }
  }
}
```

### 422

invalid_case_filter for invalid limit, side or status; invalid_case_cursor for an unavailable cursor or changed account or filters.

application/json

```json
{
  "$ref": "#/components/schemas/AccountOAuthError",
  "type": "object",
  "properties": {
    "error": {
      "type": "string"
    },
    "error_description": {
      "type": "string"
    }
  },
  "required": [
    "error"
  ]
}
```

## Example response

### Successful response

```json
{}
```

## Errors

Read the response status and stable error code. See [errors](https://peoplescourt.ai/docs/api/errors.md) and [rate limits](https://peoplescourt.ai/docs/api/rate-limits.md) for recovery. Refresh the resource before resolving a state or digest conflict.

## Idempotency and retries

- For throttling, honor Retry-After when present. Back off on retryable server failures.

## Request examples

Use `https://peoplescourt.ai` with the test credential issued for your integration.

```sh
curl --request GET \
  --url 'https://peoplescourt.ai/api/cases' \
  --header 'Cookie: arb_session=COPY_ACCOUNT_SESSION'
```

```ts
const response = await fetch("https://peoplescourt.ai/api/cases", {
  method: "GET",
  headers: {
    "Cookie": "arb_session=COPY_ACCOUNT_SESSION"
  },
});
if (!response.ok) throw await response.json();
const result = await response.json();
```

```python
import requests

response = requests.get(
    "https://peoplescourt.ai/api/cases",
    headers={
      "Cookie": "arb_session=COPY_ACCOUNT_SESSION"
    },
    timeout=30,
)
response.raise_for_status()
result = response.json()
```
