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

# Borrower Deal Logs

> Snapshots of borrower deal state changes

| Property      | Value                                              |
| ------------- | -------------------------------------------------- |
| Dataset code  | `D18`                                              |
| Section code  | `S3` — Collections Cases                           |
| Endpoint path | `/exports/S3/D18`                                  |
| Cursor field  | `created_at`                                       |
| Page size     | `1`–`1000` (default `500`)                         |
| Availability  | Available (v1.2)                                   |
| Pagination    | Via (variable page size — joined through a parent) |

Each row is a snapshot of a borrower deal state change — stage, pipeline, communications pipeline, and PTP / broken-PTP markers at the time of the log.

## Fields

| Field                   | Type           | Description                                          | Notes                            |
| ----------------------- | -------------- | ---------------------------------------------------- | -------------------------------- |
| `public_id`             | string         | Stable per-row identifier (string-cast Mongo `_id`). | Use as the warehouse primary key |
| `log_action`            | string         | Log action code.                                     |                                  |
| `deal_stage_id`         | string         | Stage at log time.                                   |                                  |
| `pipeline`              | string         | Pipeline at log time.                                |                                  |
| `comms_pipeline`        | string         | Communications pipeline at log time.                 |                                  |
| `ptp_date_human`        | string \| null | PTP date set by a human agent (ISO-8601).            |                                  |
| `ptp_date_ai`           | string \| null | PTP date set by an AI call (ISO-8601).               |                                  |
| `broken_ptp_date_human` | string \| null | When the human-set PTP was broken (ISO-8601).        |                                  |
| `broken_ptp_date_ai`    | string \| null | When the AI-set PTP was broken (ISO-8601).           |                                  |
| `do_not_contact`        | boolean        | Do-not-contact flag at log time.                     |                                  |
| `created_at`            | string         | Log timestamp (ISO-8601).                            | Cursor field                     |

## Sample row

```json theme={null}
{
  "public_id": "664b1d3e4f5a6b7081920288",
  "log_action": "stage_transition",
  "deal_stage_id": "stage_negotiation",
  "pipeline": "Early Collections",
  "comms_pipeline": "Standard Outreach",
  "ptp_date_human": "2026-06-05T00:00:00.000Z",
  "ptp_date_ai": null,
  "broken_ptp_date_human": null,
  "broken_ptp_date_ai": null,
  "do_not_contact": false,
  "created_at": "2026-05-22T11:14:06.000Z"
}
```

## Pagination characteristics

This dataset is **via** — it is filtered to your tenant by joining through its parent (`borrower_deal_id` → `BorrowerDeals`). On multi-tenant databases a single response may contain **fewer rows than your `limit`** even when more data exists. The cursor still advances correctly — keep paging until `nextCursor` is `null`. See [Pagination → Variable page size](/api-reference/exports/pagination).

## Use cases

* Deal-state historical reconstruction.
* SCD-style (slowly-changing-dimension) change capture for the case dimension table.
* Pipeline transition timing.

***

<Snippet file="snippets/support-info.mdx" />
