---
title: "List catalogue categories — Anis Developers"
description: "The top level of the catalogue, as this wallet sees it. Pages with a cursor."
url: https://developers.anis.ly/reference/list-categories/
language: en
---

> Every page of this documentation: https://developers.anis.ly/llms.txt

[API reference](https://developers.anis.ly/reference.md) · Catalogue

# List catalogue categories

`GET /v1/wallets/{walletId}/catalog/categories`

The top level of the catalogue, as this wallet sees it. Pages with a cursor.

- **Permission:** `catalogue:read`
- **Authentication:** Signed read
- **Staff-set limits it counts toward:** All requests
- **.NET SDK:** `anis.Catalogue.ListCategoriesAsync(walletId)`

## Parameters

| Name | In | Type | Notes |
| --- | --- | --- | --- |
| `walletId` (required) | `path` | UUID | A UUID, lower-case with hyphens. |
| `cursor` (optional) | `query` | string | The `nextCursor` of the previous page, passed back exactly as received. Leave it out for the first page. |

## Request

Signed with your key. No body, no nonce.

Headers: `Signature-Input`, `Signature`, `X-Anis-Date`, `Accept-Language` (optional). The SDKs set all of them for you.

**Body:** none.

## Responses

| Status | Meaning | Body |
| --- | --- | --- |
| 200 | Success. | [CatalogueCollection](#type-cataloguecollection) |
| 401 | Refused: not authenticated. | [Problem](#refusals) |
| 403 | Refused: not allowed. | [Problem](#refusals) |
| 404 | Refused: not found, or not yours. | [Problem](#refusals) |
| 422 | Refused: the request breaks a rule. | [Problem](#refusals) |
| 429 | Refused: a limit was reached. | [Problem](#refusals) |
| 503 | No decision: a dependency was unavailable. | [Problem](#refusals) |

Every answer is signed by Anis; the SDKs check it before you see it.

## Refusals

Every refusal is a signed problem. Branch on its `code`; each links to what it means and what to do.

| Error | Code | Status |
| --- | --- | --- |
| [Invalid credentials](https://developers.anis.ly/errors/invalid-credentials.md) | `invalid_credentials` | 401 |
| [Insufficient scope](https://developers.anis.ly/errors/insufficient-scope.md) | `insufficient_scope` | 403 |
| [Source address not allowed](https://developers.anis.ly/errors/source-ip-not-allowed.md) | `source_ip_not_allowed` | 403 |
| [Rate limited](https://developers.anis.ly/errors/rate-limited.md) | `rate_limited` | 429 |
| [Account not authorised](https://developers.anis.ly/errors/binding-not-authorized.md) | `binding_not_authorized` | 403 |
| [Account inactive](https://developers.anis.ly/errors/account-inactive.md) | `account_inactive` | 403 |
| [Wallet not granted](https://developers.anis.ly/errors/wallet-not-granted.md) | `wallet_not_granted` | 404 |
| [Validation failed](https://developers.anis.ly/errors/validation-failed.md) | `validation_failed` | 422 |
| [Service unavailable](https://developers.anis.ly/errors/dependency-unavailable.md) | `dependency_unavailable` | 503 |
| [Request timeout](https://developers.anis.ly/errors/request-timeout.md) | `request_timeout` | 504 |
| [Internal error](https://developers.anis.ly/errors/internal-error.md) | `internal_error` | 500 |

## Types

### CatalogueCollection

| Field | Type | Notes |
| --- | --- | --- |
| `items` (required) | list of [CatalogueObject](#type-catalogueobject) | The categories, subcategories or cards on this page — each list route returns one kind. |
| `nextCursor` | string | Pass it as `cursor` to get the next page. Absent on the last page. |

### CatalogueObject

One of: [CatalogueCategory](#type-cataloguecategory), [CatalogueSubcategory](#type-cataloguesubcategory), [CatalogueCard](#type-cataloguecard) — each route answers with exactly one of them.

### CatalogueCategory

| Field | Type | Notes |
| --- | --- | --- |
| `id` (required) | UUID | The category’s id. |
| `name` | [LocalizedText](#type-localizedtext) | The category’s name, in Arabic and English. |
| `description` | [LocalizedText](#type-localizedtext) | A description, in Arabic and English. |
| `logo` | string | The address of the category’s logo image. |
| `type` | string | Whether the category is local or international. Values: `local`, `international` |
| `inStock` (required) | boolean | Whether anything in it can be bought now. |
| `displayOrder` (required) | integer | The order to show categories in — lower first. |

### LocalizedText

| Field | Type | Notes |
| --- | --- | --- |
| `ar` | string | The Arabic text. |
| `en` | string | The English text. |

### CatalogueSubcategory

| Field | Type | Notes |
| --- | --- | --- |
| `id` (required) | UUID | The subcategory’s id. |
| `categoryId` (required) | UUID | The category it belongs to. |
| `name` | [LocalizedText](#type-localizedtext) | The subcategory’s name, in Arabic and English. |
| `description` | [LocalizedText](#type-localizedtext) | A description, in Arabic and English. |
| `logo` | string | The address of the subcategory’s logo image. |
| `isBestSelling` (required) | boolean | Marked by Anis as a best seller. |
| `displayOrder` (required) | integer | The order to show subcategories in — lower first. |
| `available` (required) | boolean | Whether it can be bought from now. |

### CatalogueCard

| Field | Type | Notes |
| --- | --- | --- |
| `id` (required) | UUID | The card’s id — the `cardId` an order carries. |
| `subcategoryId` (required) | UUID | The subcategory it belongs to. |
| `name` | [LocalizedText](#type-localizedtext) | The card’s name, in Arabic and English. |
| `faceValue` | string | The value printed on the card, when it has one. |
| `unitPrice` | [Money](#type-money) | The price THIS wallet pays. Send it unchanged as the order’s `expectedUnitPrice`. A card without it cannot be sold to this wallet. |
| `businessPrice` | [Money](#type-money) | For display. An order at this price can be refused as `price_changed`. |
| `personalPrice` | [Money](#type-money) | The retail price, shown only while it is above the business price. For display. |
| `hasSpecialOffer` (required) | boolean | Whether a special offer applies. |
| `specialOfferPrice` | [Money](#type-money) | The offer price, shown only with a special offer. For display. |
| `available` (required) | boolean | Whether the card can be bought now. |

### Money

| Field | Type | Notes |
| --- | --- | --- |
| `amount` (required) | string | A decimal string with exactly three decimals, such as `"10.500"` — never a JSON number. |
| `currency` (required) | string | The currency code, such as `LYD`: always the wallet’s currency. |
| `asOf` | string (date-time) | When this price or balance was read. |
