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

# Read the event feed

> Every loan event of the tenancy in recording order, paginated by a cursor that never expires: the feed a mirror is built from.

The feed answers every Loan's events in one stream, oldest first by recording order, each row naming its `loan_id`. It is the route for keeping an external system current: hold the cursor, ask again, and everything recorded since is what comes back.

## Path parameters

<ParamField path="tenant_id" type="string" required>
  The Tenancy whose events these are.
</ParamField>

## Query parameters

<ParamField query="limit" type="integer" default="50">
  How many events to serve, between 1 and 200. A value outside that range is `400`, never clamped.
</ParamField>

<ParamField query="cursor" type="string">
  Where to resume, returned verbatim from the previous page. A cursor issued for another listing or another Tenancy is refused.
</ParamField>

## Response

<ResponseField name="events" type="array" required>
  The rows, five fields each — `id`, `loan_id`, `kind`, `occurred_on`, `recorded_at` — and `merchant_ref` where the Loan names a merchant, so entries route to [the merchant's book](/api-reference/merchants/book) without a read per entry. The act's account and any retraction are read on [the Loan itself](/api-reference/loans/read) — the feed says what happened and where, not why.
</ResponseField>

<ResponseField name="cursor" type="string" required>
  Where to resume. The feed answers a cursor whenever it served anything, the last page included — so a caller that caught up still holds a position, and a page of **no events carrying the cursor unchanged** is what being caught up looks like. It is not an error and not the end of anything.
</ResponseField>

<Info>
  Catching up is silent by design. Poll with the held cursor: an empty page means nothing new, and the next non-empty page starts exactly where the last one ended.
</Info>

<RequestExample>
  ```bash First page theme={null}
  curl "https://api.capcells.com/v1/tenants/$TENANT_ID/loan-events?limit=3" \
    -H "Authorization: $(capcells_sign "$CAPCELLS_API_KEY" GET "/v1/tenants/$TENANT_ID/loan-events?limit=3")"
  ```

  ```bash Resume theme={null}
  curl "https://api.capcells.com/v1/tenants/$TENANT_ID/loan-events?limit=3&cursor=$CURSOR" \
    -H "Authorization: $(capcells_sign "$CAPCELLS_API_KEY" GET "/v1/tenants/$TENANT_ID/loan-events?limit=3&cursor=$CURSOR")"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "events": [
      {
        "id": "aac1e3d3-0c27-4790-99f7-636f494b64a5",
        "loan_id": "2241c66e-1163-4d4c-9a78-aa2d29912201",
        "kind": "issued",
        "occurred_on": "2026-03-02",
        "recorded_at": "2026-08-31T11:27:14.548589Z"
      },
      {
        "id": "64d0cefa-d65f-4806-858d-6510a69ba988",
        "loan_id": "3439988a-fd7d-4d6a-9fac-44d7bb0415fc",
        "kind": "issued",
        "occurred_on": "2026-03-02",
        "recorded_at": "2026-08-31T11:27:14.56155Z"
      },
      {
        "id": "95c44c3c-cf39-44eb-bf95-40c599006dc6",
        "loan_id": "3439988a-fd7d-4d6a-9fac-44d7bb0415fc",
        "kind": "rolled_over",
        "occurred_on": "2026-03-16",
        "recorded_at": "2026-08-31T11:27:14.570813Z"
      }
    ],
    "cursor": "MR9kYTljYWM4ZB8yMDI2LTA4LTMxVDExOjI3OjE0LjU3MDgxM1ofOTVjNDRjM2MtY2YzOS00NGViLWJmOTUtNDBjNTk5MDA2ZGM2"
  }
  ```
</ResponseExample>


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