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

# Get Case

> GET /cases/{id}

## Endpoint

```http theme={null}
GET /cases/{id}
```

## Purpose

Returns the current public state of a case owned by the authenticated client.

## Authentication

```http theme={null}
x-api-key: your-api-key
```

## Path Parameters

| Parameter | Type   | Required | Notes                                  |
| --------- | ------ | -------- | -------------------------------------- |
| `id`      | string | Yes      | The case ID returned by `POST /cases`. |

## Query Parameters

| Parameter           | Type   | Required | Notes                                                                                                                        |
| ------------------- | ------ | -------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `includeTranscript` | string | No       | When the value is the literal string `true`, Offload fetches the tracked AgentMail thread and includes `conversationThread`. |

## Returned Fields

| Field                | Notes                                                                          |
| -------------------- | ------------------------------------------------------------------------------ |
| `caseId`             | Offload case ID                                                                |
| `clientReferenceId`  | Present when provided at creation time                                         |
| `status`             | Current case status                                                            |
| `createdAt`          | Unix timestamp in milliseconds                                                 |
| `updatedAt`          | Unix timestamp in milliseconds                                                 |
| `nextActionAt`       | Scheduled timestamp, or the unscheduled sentinel `253402300799999`             |
| `attemptCount`       | Number of outbound messages sent so far                                        |
| `maxAttempts`        | Maximum follow-up attempts after the initial outreach                          |
| `channel`            | Current schema allows `EMAIL` or `SMS`, but production workflow is email-based |
| `counterparty`       | Public counterparty object                                                     |
| `attachments`        | Inbound attachment metadata only                                               |
| `resultStatus`       | Open string for workflow outcome                                               |
| `result`             | Present when the case has structured output                                    |
| `goal`               | Original goal object                                                           |
| `resultSchema`       | Present if provided at creation time                                           |
| `senderPersona`      | Original sender persona                                                        |
| `constraints`        | Present if provided at creation time                                           |
| `inputRequest`       | `null` or `{ id, question, status, requestedAt }`                              |
| `conversationThread` | Only included when `includeTranscript=true`                                    |

## Important Omissions

`GET /cases/{id}` does not currently return:

* `metadata`
* `failureReason`
* `clientWebhookUrl`
* internal scheduling fields like `nextActionType`

## Example Response

```json theme={null}
{
  "ok": true,
  "data": {
    "caseId": "4fc5904d-0e44-4ed3-aa57-c4a47ad0ae4f",
    "clientReferenceId": "vendor_2048",
    "status": "INPUT_NEEDED",
    "createdAt": 1774131000000,
    "updatedAt": 1774131900300,
    "nextActionAt": 253402300799999,
    "attemptCount": 1,
    "maxAttempts": 3,
    "channel": "EMAIL",
    "counterparty": {
      "address": "ap@northstar.example",
      "name": "Maya Chen",
      "company": "Northstar Supplies",
      "timezone": "America/Los_Angeles"
    },
    "attachments": [],
    "goal": {
      "objective": "Collect a signed W-9 from the vendor"
    },
    "resultSchema": {
      "type": "object"
    },
    "senderPersona": {
      "name": "Avery",
      "role": "Accounts Payable"
    },
    "constraints": ["Email only"],
    "inputRequest": {
      "id": "c8c6a7ca-a913-4d13-8cd8-5887efb0531c",
      "question": "The vendor asked whether a signed PDF is acceptable. How should I respond?",
      "status": "PENDING",
      "requestedAt": 1774131900300
    }
  }
}
```

## Example Response With Transcript

Request:

```http theme={null}
GET /cases/{id}?includeTranscript=true
```

Response:

```json theme={null}
{
  "ok": true,
  "data": {
    "caseId": "4fc5904d-0e44-4ed3-aa57-c4a47ad0ae4f",
    "status": "RUNNING",
    "createdAt": 1774131000000,
    "updatedAt": 1774131900000,
    "nextActionAt": 1774387500000,
    "attemptCount": 2,
    "maxAttempts": 3,
    "channel": "EMAIL",
    "counterparty": {
      "address": "ap@northstar.example",
      "name": "Maya Chen"
    },
    "attachments": [],
    "goal": {
      "objective": "Collect a signed W-9 from the vendor"
    },
    "senderPersona": {
      "name": "Avery"
    },
    "inputRequest": null,
    "conversationThread": "From: Avery <avery@agentmail.to>\nTimestamp: 2026-03-20T18:10:00.000Z\nMessage: Hi Maya, could you send the signed W-9?\n\n---\n\nFrom: Maya Chen <ap@northstar.example>\nTimestamp: 2026-03-21T15:42:00.000Z\nMessage: Attached here."
  }
}
```

`conversationThread` is formatted plain text, not an array of structured messages.

## Attachment Downloads

Use `GET /cases/{id}/attachments/{attachmentId}` when you need a fresh `downloadUrl`.

## Errors

| Status | Code              | Meaning                                          |
| ------ | ----------------- | ------------------------------------------------ |
| `400`  | `INVALID_REQUEST` | Missing case ID                                  |
| `401`  | `UNAUTHORIZED`    | Missing or invalid API key                       |
| `403`  | `FORBIDDEN`       | Inactive API key or case belongs to another user |
| `404`  | `CASE_NOT_FOUND`  | No case exists for that ID                       |

<Info>
  If `includeTranscript=true` and the live AgentMail fetch fails, the current implementation may return a generic platform `500` instead of the standard JSON error envelope.
</Info>
