# Get insights

`GET /api/v1/insights`

The telemetry behind the Insights page: recent transfers, cycle runs, cycle snapshots, treasury moves and screenings. `referenceDisagreementCount: null` means the cycle predates the comparison, and `status: "partial"` is reported as it is, not rewritten as completed or failed.

Send a [workspace API key](https://www.vestiarion.xyz/docs/get-started/authentication) as `Authorization: Bearer <key>`.

## Parameters

No parameters.

## Code samples

```bash
curl "https://www.vestiarion.xyz/api/v1/insights" \
  -H "Authorization: Bearer $VESTIARION_API_KEY"
```

## Response

Example, `200` `application/json`:

```json
{
  "data": {
    "transfers": [
      {
        "id": "359e82e1-958d-4327-9174-e0b885eebe8f",
        "targetType": "invoice",
        "targetId": "1d7e1714-3f84-493e-a3ea-c984a2881100",
        "txRef": "0x36ea71ac97cad3743f227860785207e6f25148251735569be0f6b16c73130343",
        "feeUsd": 0.003248,
        "feeSource": "chain_reported",
        "settledInMs": 5000,
        "chain": "ARC-TESTNET",
        "providerMode": "live",
        "executedAt": "2026-09-24T11:55:24.131+00:00",
        "status": "confirmed"
      }
    ],
    "runs": [
      {
        "id": "8cbcf6ca-2d58-43c9-9237-3000851e7046",
        "startedAt": "2026-09-24T11:53:06.672+00:00",
        "finishedAt": "2026-09-24T11:53:16.101+00:00",
        "durationMs": 9429,
        "decisionCount": 1,
        "paidCount": 0,
        "heldCount": 0,
        "flaggedCount": 0,
        "awaitingInfoCount": 0,
        "releasedCount": 0,
        "modelDecisionCount": 1,
        "heuristicDecisionCount": 0,
        "guardrailOverrideCount": 0,
        "referenceDisagreementCount": null,
        "status": "completed",
        "failedStage": null,
        "errorMessage": null,
        "chainMode": "live",
        "screeningMode": "simulate"
      },
      {
        "id": "bd76f653-4352-42b3-aec5-5ddbbe01c882",
        "startedAt": "2026-09-24T15:22:50.871+00:00",
        "finishedAt": "2026-09-24T15:23:00.617+00:00",
        "durationMs": 9746,
        "decisionCount": 0,
        "paidCount": 0,
        "heldCount": 0,
        "flaggedCount": 0,
        "awaitingInfoCount": 0,
        "releasedCount": 0,
        "modelDecisionCount": 0,
        "heuristicDecisionCount": 0,
        "guardrailOverrideCount": 0,
        "referenceDisagreementCount": 0,
        "status": "partial",
        "failedStage": "ap",
        "errorMessage": "ap: AGENT_LLM_PROVIDER=openai but OPENAI_API_KEY is not set; treasury: AGENT_LLM_PROVIDER=openai but OPENAI_API_KEY is not set",
        "chainMode": "live",
        "screeningMode": "simulate"
      }
    ],
    "snapshots": [
      {
        "id": "352d94e4-a945-420f-a933-34b06b46412b",
        "cycleRunId": "8cbcf6ca-2d58-43c9-9237-3000851e7046",
        "capturedAt": "2026-09-24T11:53:16.101+00:00",
        "totalLiquid": 27.58,
        "openPayables": 10.695,
        "openReceivables": 9,
        "obligationsDue7d": 12.195,
        "obligationsDue14d": 12.195,
        "reservePosition": 0,
        "chainMode": "live"
      }
    ],
    "treasuryMoves": [],
    "screenings": [
      {
        "id": "54d6f2a8-d939-45ef-a41e-61f88fd362ae",
        "counterpartyId": "dc5e5751-3287-46c9-8bd1-83a42ab02699",
        "counterpartyName": "Anthropic API Services",
        "riskLevel": "clear",
        "previousRiskLevel": null,
        "tierChanged": false,
        "mode": "simulate",
        "source": "simulated-sanctions-list",
        "status": "complete",
        "createdAt": "2026-09-24T11:55:11.147351+00:00"
      }
    ]
  }
}
```

**Fields**

- `data` (object, required): The telemetry behind the Insights charts: the most recent transfers, cycle runs, snapshots, treasury moves and screenings, each oldest first.
  - `transfers` (array of object, required)
    - `id` (string, required)
    - `targetType` (string, required) One of `invoice`, `milestone`.
    - `targetId` (string, required)
    - `txRef` (string, required)
    - `feeUsd` (number, required)
    - `feeSource` (string, required) One of `chain_reported`, `provider_estimate`, `simulated_profile`.
    - `settledInMs` (number, nullable, required)
    - `chain` (string, required)
    - `providerMode` (string, required) One of `live`, `simulate`.
    - `executedAt` (string, required)
    - `status` (string, required)
  - `runs` (array of object, required)
    - `id` (string, required)
    - `startedAt` (string, required)
    - `finishedAt` (string, required)
    - `durationMs` (number, required)
    - `decisionCount` (number, required)
    - `paidCount` (number, required)
    - `heldCount` (number, required)
    - `flaggedCount` (number, required)
    - `awaitingInfoCount` (number, required)
    - `releasedCount` (number, required)
    - `modelDecisionCount` (number, required)
    - `heuristicDecisionCount` (number, required)
    - `guardrailOverrideCount` (number, required)
    - `referenceDisagreementCount` (number, nullable, required): Model verdicts that chose a different action from the rule-based policy. Null for cycles run before the comparison existed, never zero, which would claim perfect agreement over decisions never compared.
    - `status` (string, required): A cycle that failed partway is not a quiet cycle, and must not read as one. Its counts are real but partial: they cover the stages that ran before it stopped, and nothing after. One of `running`, `completed`, `partial`, `failed`.
    - `failedStage` (string, nullable, required)
    - `errorMessage` (string, nullable, required)
    - `chainMode` (string, required) One of `live`, `simulate`.
    - `screeningMode` (string, required) One of `live`, `simulate`.
  - `snapshots` (array of object, required)
    - `id` (string, required)
    - `cycleRunId` (string, required)
    - `capturedAt` (string, required)
    - `totalLiquid` (number, required)
    - `openPayables` (number, required)
    - `openReceivables` (number, required)
    - `obligationsDue7d` (number, required)
    - `obligationsDue14d` (number, required)
    - `reservePosition` (number, required)
    - `chainMode` (string, required) One of `live`, `simulate`.
  - `treasuryMoves` (array of object, required)
    - `id` (string, required)
    - `action` (string, required) One of `sweep_to_usyc`, `redeem_from_usyc`, `rebalance`.
    - `amount` (number, required)
    - `createdAt` (string, required)
  - `screenings` (array of object, required)
    - `id` (string, required)
    - `counterpartyId` (string, required)
    - `counterpartyName` (string, required)
    - `riskLevel` (string, required)
    - `previousRiskLevel` (string, nullable, required)
    - `tierChanged` (boolean, required)
    - `mode` (string, required) One of `live`, `simulate`.
    - `source` (string, required)
    - `status` (string, required) One of `complete`, `failed`.
    - `createdAt` (string, required)

## Errors

| Status | Code | When |
| --- | --- | --- |
| 401 | `unauthorized` | No key, or a malformed, unknown or revoked one: "A valid API key is required." |
| 403 | `forbidden` | The key's scopes do not cover this route: "This key cannot do that." Or, on a write, the person who created the key can no longer add records: "This key's issuer can no longer add records in this workspace." |
| 500 | `internal` | An unexpected server error. Implementation details are not exposed. |
