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

# Get test case

> Read a saved case with effective criteria, setup and run history.

Read a saved case with effective criteria, setup and run history.

`criteria` includes shared and local checks; `localCriteria` contains only case-specific checks. `history` contains up to 20 recent case runs. `latestIndividualRun` excludes group runs.

## Headers

<ParamField header="Authorization" type="string" required>
  Bearer token containing your workspace API key. The key needs `read` scope.
</ParamField>

## Path parameters

<ParamField path="id" type="string" required>
  Case UUID.
</ParamField>

## Response

Returns case detail rather than the stored raw `input`. A fresh scenario intentionally has empty arrays for Action-response overrides and history.

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url 'https://api-prod.usefini.com/v2/test-suite/cases/00000000-0000-4000-8000-000000000002/public' \
    --header 'Authorization: Bearer fini_your_api_key'
  ```

  ```javascript Node.js theme={null}
  const response = await fetch("https://api-prod.usefini.com/v2/test-suite/cases/00000000-0000-4000-8000-000000000002/public", {
    method: "GET",
    headers: {
      Authorization: "Bearer fini_your_api_key",
    },
  });
  if (!response.ok) throw new Error(await response.text());
  const result = await response.json();
  ```

  ```python Python theme={null}
  import requests

  response = requests.request(
      "GET",
      "https://api-prod.usefini.com/v2/test-suite/cases/00000000-0000-4000-8000-000000000002/public",
      headers={"Authorization": "Bearer fini_your_api_key"},
  )
  response.raise_for_status()
  result = response.json()
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "id": "00000000-0000-4000-8000-000000000002",
    "companyId": "00000000-0000-4000-8000-000000000011",
    "botId": "00000000-0000-4000-8000-000000000001",
    "name": "Refund policy",
    "sourceType": "scenario",
    "sourceInteractionId": null,
    "criteria": [
      {
        "id": "2995012b-d9bf-58e9-c6c7-672205196681",
        "companyId": "00000000-0000-4000-8000-000000000011",
        "defaultCriterionId": null,
        "name": "No handoff",
        "type": "deterministic",
        "condition": {
          "scope": "SCALAR",
          "predicate": {"left": {"path": "escalated", "dataType": "boolean"}, "operator": "==", "right": {"value": false}}
        },
        "blocking": true,
        "judgePrompt": null,
        "passPrompt": null,
        "failPrompt": null,
        "isActive": true,
        "createdAt": "2026-10-12T10:00:00.000Z",
        "updatedAt": "2026-10-12T10:00:00.000Z"
      },
      {
        "id": "00000000-0000-4000-8000-000000000012",
        "companyId": "00000000-0000-4000-8000-000000000011",
        "defaultCriterionId": null,
        "name": "No handoff",
        "type": "deterministic",
        "condition": {
          "scope": "SCALAR",
          "predicate": {"left": {"path": "escalated", "dataType": "boolean"}, "operator": "==", "right": {"value": false}}
        },
        "blocking": true,
        "judgePrompt": null,
        "passPrompt": null,
        "failPrompt": null,
        "isActive": true,
        "createdAt": "2026-10-12T10:00:00.000Z",
        "updatedAt": "2026-10-12T10:00:00.000Z"
      }
    ],
    "artifacts": [{"kind": "rule", "id": "00000000-0000-4000-8000-000000000005", "name": "Refund workflow", "origin": "manual"}],
    "criteriaGroupId": "00000000-0000-4000-8000-000000000003",
    "criteriaGroupIds": ["00000000-0000-4000-8000-000000000003"],
    "criteriaGroup": {
      "id": "00000000-0000-4000-8000-000000000003",
      "companyId": "00000000-0000-4000-8000-000000000011",
      "botId": "00000000-0000-4000-8000-000000000001",
      "name": "Refund checks",
      "criteria": [
        {
          "id": "00000000-0000-4000-8000-000000000012",
          "companyId": "00000000-0000-4000-8000-000000000011",
          "defaultCriterionId": null,
          "name": "No handoff",
          "type": "deterministic",
          "condition": {
            "scope": "SCALAR",
            "predicate": {"left": {"path": "escalated", "dataType": "boolean"}, "operator": "==", "right": {"value": false}}
          },
          "blocking": true,
          "judgePrompt": null,
          "passPrompt": null,
          "failPrompt": null,
          "isActive": true,
          "createdAt": "2026-10-12T10:00:00.000Z",
          "updatedAt": "2026-10-12T10:00:00.000Z"
        }
      ],
      "revision": 1,
      "createdAt": "2026-10-12T10:00:00.000Z",
      "updatedAt": "2026-10-12T10:00:00.000Z"
    },
    "criteriaGroups": [
      {
        "id": "00000000-0000-4000-8000-000000000003",
        "companyId": "00000000-0000-4000-8000-000000000011",
        "botId": "00000000-0000-4000-8000-000000000001",
        "name": "Refund checks",
        "criteria": [
          {
            "id": "00000000-0000-4000-8000-000000000012",
            "companyId": "00000000-0000-4000-8000-000000000011",
            "defaultCriterionId": null,
            "name": "No handoff",
            "type": "deterministic",
            "condition": {
              "scope": "SCALAR",
              "predicate": {"left": {"path": "escalated", "dataType": "boolean"}, "operator": "==", "right": {"value": false}}
            },
            "blocking": true,
            "judgePrompt": null,
            "passPrompt": null,
            "failPrompt": null,
            "isActive": true,
            "createdAt": "2026-10-12T10:00:00.000Z",
            "updatedAt": "2026-10-12T10:00:00.000Z"
          }
        ],
        "revision": 1,
        "createdAt": "2026-10-12T10:00:00.000Z",
        "updatedAt": "2026-10-12T10:00:00.000Z"
      }
    ],
    "criterionOrigins": {
      "2995012b-d9bf-58e9-c6c7-672205196681": {"groupId": "00000000-0000-4000-8000-000000000003", "groupName": "Refund checks"}
    },
    "localCriteria": [
      {
        "id": "00000000-0000-4000-8000-000000000012",
        "companyId": "00000000-0000-4000-8000-000000000011",
        "defaultCriterionId": null,
        "name": "No handoff",
        "type": "deterministic",
        "condition": {
          "scope": "SCALAR",
          "predicate": {"left": {"path": "escalated", "dataType": "boolean"}, "operator": "==", "right": {"value": false}}
        },
        "blocking": true,
        "judgePrompt": null,
        "passPrompt": null,
        "failPrompt": null,
        "isActive": true,
        "createdAt": "2026-10-12T10:00:00.000Z",
        "updatedAt": "2026-10-12T10:00:00.000Z"
      }
    ],
    "createdAt": "2026-10-12T10:00:00.000Z",
    "updatedAt": "2026-10-12T10:00:00.000Z",
    "messages": [{"id": "00000000-0000-4000-8000-000000000010", "role": "user", "content": "Am I eligible for a refund?"}],
    "conversationName": "Refund policy",
    "attributeOverrides": {"plan": "standard"},
    "history": [],
    "latestIndividualRun": null,
    "actionResponses": [],
    "turns": [
      {
        "message": "Am I eligible for a refund?",
        "actions": [
          {
            "ruleId": "00000000-0000-4000-8000-000000000005",
            "nodeId": "lookup",
            "toolId": "00000000-0000-4000-8000-000000000006",
            "success": true,
            "output": {"eligible": true}
          }
        ]
      }
    ],
    "userAttributes": {"plan": "standard"},
    "createdBy": null,
    "deletedAt": null
  }
  ```
</ResponseExample>


## Related topics

- [Overview](/en/api-reference/test-suite.md)
- [Get Test Suite summary](/en/api-reference/get-test-suite-summary.md)
- [Test Suite](/en/testing/test-suite.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.