# List abandoned carts

Unpaid carts the store treats as abandoned, newest first, with a checkout link.

```http
GET https://larm.sa/stores/{storeId}/v1/abandoned-carts
```

Scope: `carts:read`

## Query parameters

| Field | Type | Required | Description |
|---|---|---|---|
| `limit` | integer = 25 | no | Number of items per page. |
| `cursor` | string | no | The meta.next_cursor value from the previous page. Valid for 15 minutes and bound to the same filters. |
| `created_after` | string (date-time) | no | Carts created after this time. |


## Response

| Field | Type | Required | Description |
|---|---|---|---|
| `data` | array<object> | yes |  |
| `data[].id` | string | yes |  |
| `data[].currency` | string | yes |  |
| `data[].total` | string | yes | Cart total. |
| `data[].items` | array<object> | yes |  |
| `data[].items[].product_id` | string | yes |  |
| `data[].items[].name` | string | yes | Product name at the time of the order. |
| `data[].items[].kind` | string | no | Product kind. One of: `digital`, `physical`, `service`. |
| `data[].items[].quantity` | integer | yes |  |
| `data[].items[].unit_price` | string | yes | Unit price in SAR. |
| `data[].items[].total` | string | yes | Unit price × quantity. |
| `data[].checkout_url` | string (uri) | yes | The same checkout link the store sends in its abandoned-cart reminder. |
| `data[].created_at` | string (date-time) | yes |  |
| `data[].customer` | object | no | Included only with the customers:read scope. Returned with `customers:read`. |
| `data[].customer.id` | string \| null | no | The customer's account ID in the store, or null for a guest order. |
| `data[].customer.name` | string \| null | no | The customer's name as entered. |
| `data[].customer.phone` | string \| null | no | Phone number in E.164 format, such as +966512345678, or null if it is not a valid number. |
| `data[].customer.email` | string \| null (email) | no |  |
| `meta` | object | yes |  |
| `meta.next_cursor` | string \| null | no | Cursor for the next page, or null on the last page. |
| `meta.request_id` | string (uuid) | no |  |


## Example request

```bash
curl -X GET "https://larm.sa/stores/$STORE_ID/v1/abandoned-carts?limit=25" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
```


## Example response (200)

```json
{
  "data": [
    {
      "id": "ord_9Lm4",
      "currency": "SAR",
      "total": "90.00",
      "items": [
        {
          "product_id": "311",
          "name": "Top-up card 100 SAR",
          "kind": "digital",
          "quantity": 2,
          "unit_price": "90.00",
          "total": "180.00"
        }
      ],
      "checkout_url": "https://store.example/p/charge-100",
      "created_at": "2026-10-15T07:40:10Z",
      "customer": {
        "id": null,
        "name": "Mohammed",
        "phone": "+966551234567",
        "email": null
      }
    }
  ],
  "execution": {
    "appId": "1f2e3d4c-5b6a-4978-8695-a4b3c2d1e0f9",
    "versionId": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
    "installationId": "c7e4a1f2-6b3d-4e8a-9c05-1d2f3a4b5c6d",
    "storeId": "5b1d7a62-0c4e-4f38-9a51-2e7b3c9d8f10",
    "requestId": "3f0c2b8e-7a51-4c1e-9d0a-5b6f1e2d4c3a",
    "generation": 1,
    "routeEpoch": 4,
    "appAuthEpoch": 1,
    "grantRevision": 2
  },
  "meta": {
    "next_cursor": null,
    "request_id": "3f0c2b8e-7a51-4c1e-9d0a-5b6f1e2d4c3a"
  }
}
```


## Errors

| HTTP | Code | Meaning |
|---|---|---|
| 403 | `SCOPE_REQUIRED` | The token does not carry the required scope. |
| 503 | `APPS_SCOPE_RUNTIME_NOT_READY` | The resource is not enabled on this merchant's store yet. |
