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

# Managing Checklists & Checklist Templates

> Create checklist templates to standardize compliance reviews, then use checklists on alerts, cases, and clients to track document collection and approval steps.

Checklists let your compliance team track required documents and approval steps against any Corsa entity — alerts, cases, or clients. Define a reusable **checklist template** once, and Corsa automatically attaches a checklist to the relevant entities when triggered.

Full API endpoint details are available in the [API Reference](https://api.corsa.finance/api-spec.json) (requires API credentials).

***

## Checklist Templates

Templates define the standard items your team must complete for a given entity type. Each template belongs to a specific `entityType` and contains one or more items. Templates can be toggled active or inactive — inactive templates are not used for new checklists.

### Create a Checklist Template

**Endpoint:** `POST /v1/checklist-templates`

<CodeGroup>
  ```json REST API theme={null}
  POST /v1/checklist-templates
  Content-Type: application/json

  {
    "entityType": "ALERT",
    "name": "Sanctions Alert Review",
    "description": "Standard checklist for reviewing sanctions screening alerts.",
    "isActive": true,
    "items": [
      {
        "name": "Verify client identity documents",
        "note": "Confirm passport or national ID is valid and not expired.",
        "category": "PERSONAL_IDENTIFICATION"
      },
      {
        "name": "Review sanctions list match",
        "note": "Cross-reference match with OFAC and UN lists.",
        "category": "DECLARATIONS_COMPLIANCE"
      }
    ]
  }
  ```

  ```typescript Javascript theme={null}
  const template = await corsa.checklists.createChecklistTemplate({
    entityType: "ALERT",
    name: "Sanctions Alert Review",
    description: "Standard checklist for reviewing sanctions screening alerts.",
    isActive: true,
    items: [
      {
        name: "Verify client identity documents",
        note: "Confirm passport or national ID is valid and not expired.",
        category: "PERSONAL_IDENTIFICATION",
      },
      {
        name: "Review sanctions list match",
        note: "Cross-reference match with OFAC and UN lists.",
        category: "DECLARATIONS_COMPLIANCE",
      },
    ],
  });
  ```

  ```python Python theme={null}
  from corsa_sdk.api.checklists.create_checklist_template import _get_kwargs
  from corsa_sdk.models.create_checklist_template_dto import CreateChecklistTemplateDto

  resp = http.request(**_get_kwargs(
      body=CreateChecklistTemplateDto(
          entity_type="ALERT",
          name="Sanctions Alert Review",
          description="Standard checklist for reviewing sanctions screening alerts.",
          is_active=True,
      )
  ))
  template = resp.json()
  ```
</CodeGroup>

#### Request Fields

| Field         | Required | Description                                                                                        |
| ------------- | -------- | -------------------------------------------------------------------------------------------------- |
| `entityType`  | Yes      | Entity type this template applies to: `ALERT`, `CASE`, `INDIVIDUAL_CLIENT`, or `CORPORATE_CLIENT`. |
| `name`        | Yes      | Display name for the template.                                                                     |
| `description` | No       | Optional description visible to analysts.                                                          |
| `isActive`    | No       | Whether the template is active. Defaults to `true`.                                                |
| `items`       | No       | Initial checklist items to include (see [item fields](#checklist-item-fields) below).              |

#### Checklist Item Fields

| Field           | Required | Description                                                                                                                               |
| --------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `name`          | Yes      | Name of the checklist item.                                                                                                               |
| `note`          | No       | Guidance note shown to the analyst.                                                                                                       |
| `category`      | No       | Classification label: `PERSONAL_IDENTIFICATION`, `FINANCIAL_INFORMATION`, `CORPORATE_INFORMATION`, `DECLARATIONS_COMPLIANCE`, or `OTHER`. |
| `statusOptions` | No       | Custom status options for this item.                                                                                                      |

***

### List Checklist Templates

**Endpoint:** `GET /v1/checklist-templates`

Returns all checklist templates for the platform. The `platformId` is available from the Corsa dashboard under **Settings → General**.

<CodeGroup>
  ```json REST API theme={null}
  GET /v1/checklist-templates?platformId=<your-platform-id>
  ```

  ```typescript Javascript theme={null}
  const templates = await corsa.checklists.getChecklistTemplatesByPlatform("<your-platform-id>");
  ```

  ```python Python theme={null}
  from corsa_sdk.api.checklists.get_checklist_templates_by_platform import _get_kwargs

  resp = http.request(**_get_kwargs(platform_id="<your-platform-id>"))
  templates = resp.json()
  ```
</CodeGroup>

***

### Get a Checklist Template

**Endpoint:** `GET /v1/checklist-templates/{id}`

<CodeGroup>
  ```json REST API theme={null}
  GET /v1/checklist-templates/tmpl_abc123
  ```

  ```typescript Javascript theme={null}
  const template = await corsa.checklists.getChecklistTemplateById("tmpl_abc123");
  ```

  ```python Python theme={null}
  from corsa_sdk.api.checklists.get_checklist_template_by_id import _get_kwargs

  resp = http.request(**_get_kwargs(id="tmpl_abc123"))
  template = resp.json()
  ```
</CodeGroup>

***

### Update a Checklist Template

**Endpoint:** `PUT /v1/checklist-templates/{id}`

Update the template name, description, or active state. Updating a template does not affect checklists already created from it.

<CodeGroup>
  ```json REST API theme={null}
  PUT /v1/checklist-templates/tmpl_abc123
  Content-Type: application/json

  {
    "name": "Sanctions Alert Review — Enhanced",
    "isActive": true
  }
  ```

  ```typescript Javascript theme={null}
  const updated = await corsa.checklists.updateChecklistTemplate("tmpl_abc123", {
    name: "Sanctions Alert Review — Enhanced",
    isActive: true,
  });
  ```

  ```python Python theme={null}
  from corsa_sdk.api.checklists.update_checklist_template import _get_kwargs
  from corsa_sdk.models.update_checklist_template_dto import UpdateChecklistTemplateDto

  resp = http.request(**_get_kwargs(
      id="tmpl_abc123",
      body=UpdateChecklistTemplateDto(
          name="Sanctions Alert Review — Enhanced",
          is_active=True,
      )
  ))
  ```
</CodeGroup>

***

### Delete a Checklist Template

**Endpoint:** `DELETE /v1/checklist-templates/{id}`

Deletes the template. This does not affect checklists already created from it.

<CodeGroup>
  ```json REST API theme={null}
  DELETE /v1/checklist-templates/tmpl_abc123
  ```

  ```typescript Javascript theme={null}
  await corsa.checklists.deleteChecklistTemplate("tmpl_abc123");
  ```

  ```python Python theme={null}
  from corsa_sdk.api.checklists.delete_checklist_template import _get_kwargs

  http.request(**_get_kwargs(id="tmpl_abc123"))
  ```
</CodeGroup>

***

### Add an Item to a Template

**Endpoint:** `POST /v1/checklist-templates/{id}/items`

Add a new item to an existing template.

<CodeGroup>
  ```json REST API theme={null}
  POST /v1/checklist-templates/tmpl_abc123/items
  Content-Type: application/json

  {
    "name": "Confirm source of funds",
    "note": "Review bank statements or proof of income submitted by the client.",
    "category": "FINANCIAL_INFORMATION"
  }
  ```

  ```typescript Javascript theme={null}
  const item = await corsa.checklists.addItemToTemplate("tmpl_abc123", {
    name: "Confirm source of funds",
    note: "Review bank statements or proof of income submitted by the client.",
    category: "FINANCIAL_INFORMATION",
  });
  ```

  ```python Python theme={null}
  from corsa_sdk.api.checklists.add_item_to_template import _get_kwargs
  from corsa_sdk.models.create_checklist_item_dto import CreateChecklistItemDto

  resp = http.request(**_get_kwargs(
      id="tmpl_abc123",
      body=CreateChecklistItemDto(
          name="Confirm source of funds",
          note="Review bank statements or proof of income submitted by the client.",
          category="FINANCIAL_INFORMATION",
      )
  ))
  item = resp.json()
  ```
</CodeGroup>

***

### Update a Template Item

**Endpoint:** `PUT /v1/checklist-templates/items/{itemId}`

<CodeGroup>
  ```json REST API theme={null}
  PUT /v1/checklist-templates/items/item_xyz789
  Content-Type: application/json

  {
    "name": "Confirm source of funds — updated",
    "note": "Review bank statements, payslips, or audited accounts.",
    "category": "FINANCIAL_INFORMATION"
  }
  ```

  ```typescript Javascript theme={null}
  const updated = await corsa.checklists.updateTemplateItem("item_xyz789", {
    name: "Confirm source of funds — updated",
    note: "Review bank statements, payslips, or audited accounts.",
    category: "FINANCIAL_INFORMATION",
  });
  ```

  ```python Python theme={null}
  from corsa_sdk.api.checklists.update_template_item import _get_kwargs
  from corsa_sdk.models.update_checklist_template_item_dto import UpdateChecklistTemplateItemDto

  resp = http.request(**_get_kwargs(
      item_id="item_xyz789",
      body=UpdateChecklistTemplateItemDto(
          name="Confirm source of funds — updated",
          note="Review bank statements, payslips, or audited accounts.",
          category="FINANCIAL_INFORMATION",
      )
  ))
  ```
</CodeGroup>

***

### Delete a Template Item

**Endpoint:** `DELETE /v1/checklist-templates/items/{itemId}`

<CodeGroup>
  ```json REST API theme={null}
  DELETE /v1/checklist-templates/items/item_xyz789
  ```

  ```typescript Javascript theme={null}
  await corsa.checklists.deleteTemplateItem("item_xyz789");
  ```

  ```python Python theme={null}
  from corsa_sdk.api.checklists.delete_template_item import _get_kwargs

  http.request(**_get_kwargs(item_id="item_xyz789"))
  ```
</CodeGroup>

***

## Working with Checklists

Once a template is active, Corsa creates checklists for the matching entity type. You can retrieve and update checklist items through the following endpoints.

### Get a Checklist for an Entity

**Endpoint:** `GET /v1/checklists/entity`

Returns the active checklist for a given entity. Pass the entity ID and type as query parameters.

<CodeGroup>
  ```json REST API theme={null}
  GET /v1/checklists/entity?entityId=alert-uuid-123
  ```

  ```typescript Javascript theme={null}
  const checklist = await corsa.checklists.getEntityChecklist("alert-uuid-123");
  ```

  ```python Python theme={null}
  from corsa_sdk.api.checklists.get_entity_checklist import _get_kwargs

  resp = http.request(**_get_kwargs(entity_id="alert-uuid-123"))
  checklist = resp.json()
  ```
</CodeGroup>

#### Query Parameters

| Parameter  | Required | Description                                     |
| ---------- | -------- | ----------------------------------------------- |
| `entityId` | Yes      | ID of the entity to retrieve the checklist for. |

#### Response

```json theme={null}
{
  "id": "checklist_abc123",
  "entityId": "alert-uuid-123",
  "entityType": "ALERT",
  "referenceId": "ALT-2024-001",
  "name": "Sanctions Alert Review",
  "description": "Standard checklist for reviewing sanctions screening alerts.",
  "status": "ACTIVE",
  "items": [
    {
      "id": "item_001",
      "name": "Verify client identity documents",
      "note": "Confirm passport or national ID is valid and not expired.",
      "category": "PERSONAL_IDENTIFICATION",
      "status": "PENDING",
      "documentUrl": null,
      "attachmentId": null,
      "expirationDate": null,
      "createdAt": "2024-01-20T11:00:00.000Z",
      "updatedAt": "2024-01-20T11:00:00.000Z"
    }
  ],
  "createdAt": "2024-01-20T11:00:00.000Z",
  "updatedAt": "2024-01-20T11:00:00.000Z"
}
```

***

### Update a Checklist Item

**Endpoint:** `PUT /v1/checklists/{checklistId}/items/{itemId}`

Mark an item as completed, attach a document, set an expiration date, or add custom fields.

<CodeGroup>
  ```json REST API theme={null}
  PUT /v1/checklists/checklist_abc123/items/item_001
  Content-Type: application/json

  {
    "status": "APPROVED",
    "documentUrl": "https://storage.example.com/docs/passport-john-doe.pdf",
    "documentMimeType": "application/pdf",
    "documentSubmissionDate": "2024-01-21T09:00:00.000Z",
    "expirationDate": "2029-01-21T00:00:00.000Z",
    "note": "Passport verified — expires Jan 2029."
  }
  ```

  ```typescript Javascript theme={null}
  const updated = await corsa.checklists.updateChecklistItem(
    "checklist_abc123",
    "item_001",
    {
      status: "APPROVED",
      documentUrl: "https://storage.example.com/docs/passport-john-doe.pdf",
      documentMimeType: "application/pdf",
      documentSubmissionDate: "2024-01-21T09:00:00.000Z",
      expirationDate: "2029-01-21T00:00:00.000Z",
      note: "Passport verified — expires Jan 2029.",
    }
  );
  ```

  ```python Python theme={null}
  from corsa_sdk.api.checklists.update_checklist_item import _get_kwargs
  from corsa_sdk.models.update_checklist_item_dto import UpdateChecklistItemDto

  http.request(**_get_kwargs(
      checklist_id="checklist_abc123",
      item_id="item_001",
      body=UpdateChecklistItemDto(
          status="APPROVED",
          document_url="https://storage.example.com/docs/passport-john-doe.pdf",
          document_mime_type="application/pdf",
          document_submission_date="2024-01-21T09:00:00.000Z",
          expiration_date="2029-01-21T00:00:00.000Z",
          note="Passport verified — expires Jan 2029.",
      )
  ))
  ```
</CodeGroup>

#### Request Fields

| Field                    | Required | Description                                                                                                       |
| ------------------------ | -------- | ----------------------------------------------------------------------------------------------------------------- |
| `status`                 | No       | Item status (e.g., `PENDING`, `APPROVED`, `REJECTED`). Available values depend on the template's `statusOptions`. |
| `documentUrl`            | No       | URL of the supporting document.                                                                                   |
| `attachmentId`           | No       | ID of an attachment already uploaded to Corsa (see [Managing Attachments](/api/managing-attachments)).            |
| `documentMimeType`       | No       | MIME type of the document (e.g., `application/pdf`, `image/jpeg`).                                                |
| `documentSubmissionDate` | No       | ISO 8601 timestamp of when the document was submitted.                                                            |
| `expirationDate`         | No       | ISO 8601 timestamp of when the document expires.                                                                  |
| `note`                   | No       | Analyst note for this item.                                                                                       |
| `customFields`           | No       | Key-value custom fields.                                                                                          |

***

## What's Next?

<CardGroup cols={2}>
  <Card title="Managing Attachments" icon="paperclip" href="/api/managing-attachments">
    Upload and link documents to checklist items, alerts, and cases.
  </Card>

  <Card title="Managing Alerts & Cases" icon="bell" href="/api/managing-alerts-and-cases">
    Bulk operations, status updates, and entity associations for alerts and cases.
  </Card>
</CardGroup>
