# List loyalty entries

> Loyalty point transactions, most recent first.

Source: https://docs.stxapp.io/api/rest/portfolio/list-loyalty/

Loyalty point transactions, most recent first. Scoped to rollup and referral entries only. This endpoint returns the entries themselves, not a points balance or a tier.

```http
GET /api/v1/portfolio/loyalty
```

Send it with your own demo key: [Try it](/quick-start/?op=portfolio_loyalty_get#try-it).

:::tip[In the SDKs]
- TypeScript: [`STX.loyalty()`](/sdks/typescript/reference/stx/#loyalty)
- Python: [`STX.loyalty()`](/sdks/python/reference/stx/#loyalty)
:::

## Parameters

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `limit` | `query` | integer | no | Rows per page. Defaults to 100 and is silently clamped to 200; a larger value is not an error. |
| `cursor` | `query` | string | no | Cursor from the previous response. Omit for the first page. |

## Responses

| Status | Description | Schema |
|---|---|---|
| `200` | Success | object |
| `401` | Missing, malformed or unrecognized signature, or a timestamp outside the 30-second window. Body: &#123;"error":"Missing or invalid API key credentials"&#125; | Error |
| `403` | The account behind this key is not active, for example it is pending approval or suspended. Body: &#123;"error":"Your account is suspended. Contact support."&#125;, the message naming the account's status. | Error |

## Example

Request:

```bash
curl --request GET \
  --url 'https://demo.stxapp.io/api/v1/portfolio/loyalty' \
  --header 'X-STX-ACCESS-KEY: <key-id>' \
  --header 'X-STX-ACCESS-TIMESTAMP: <unix-ms>' \
  --header 'X-STX-ACCESS-SIGNATURE: <base64-ed25519>'
```

Response `200`:

```json
{
  "cursor": null,
  "loyalty": [
    {
      "account_id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
      "amount": "0.6700",
      "event_id": null,
      "fee_id": null,
      "id": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
      "inserted_at": 0,
      "market_id": null,
      "payment_id": null,
      "points": null,
      "referee_account_id": null,
      "referrer_account_id": null,
      "settlement_id": null,
      "time": "2026-08-25T04:42:46.242093Z",
      "type": "deposit"
    }
  ]
}
```

### Response fields

| Field | Type | Description |
|---|---|---|
| `cursor` | string | Opaque cursor for the next page. Pass the value from the previous response; omit for the first page. `null` once there are no more pages. |
| `account_id` | uuid | The account the record belongs to. |
| `amount` | decimal | The monetary value the entry was calculated from. In dollars. |
| `event_id` | uuid | The event the market belongs to. |
| `fee_id` | uuid | The fee that generated this entry, when it came from one. |
| `id` | uuid | Unique identifier for the record. |
| `inserted_at` | int64 | Creation time, as UNIX microseconds. |
| `market_id` | uuid | The market this record relates to. |
| `payment_id` | uuid | The payment that generated this entry, when it came from one. |
| `points` | number | Points added by this entry. Negative when points were spent. |
| `referee_account_id` | uuid | For referral entries, the account that was referred. |
| `referrer_account_id` | uuid | For referral entries, the account that referred. |
| `settlement_id` | uuid | The settlement that generated this entry, when it came from one. |
| `time` | date-time | When the entry was recorded. |
| `type` | string | What moved the money or the points, for example a deposit, a trade fee, a referral, or a manual adjustment. Each endpoint returns only its own subset of these. |
