
# List applications

`GET /v1/applications` · permission `applications:read`

Lists the applications of the environment, newest first (`order=asc` reverses it). Pagination is cursor based: pass `list_metadata.after` as `after` for the next page and `list_metadata.before` as `before` for the previous one. A cursor is bound to the filters and order it was issued for; using it with other filters returns `400 invalid_cursor`. No total count is returned.

## Request

| Parameter | Type | Description |
|---|---|---|
| `limit` | integer | 1-100, default 20. |
| `after` / `before` | string | Opaque cursors; not both. |
| `order` | string | `desc` (default) or `asc`. |
| `app_type` | string | Filter: `web`, `spa`, `native`, `m2m`, `device`, `management`. |
| `status` | string | Filter: `active` or `suspended`. |

## Response

`200 OK`.

```json
{
  "data": [ { "id": "app_6f8d0cjgbmf0gtn2rg6pscp3cg", "key": "portal", "…": "…" } ],
  "list_metadata": { "before": null, "after": "<cursor>" }
}
```

## Errors

| HTTP | `code` | When |
|---|---|---|
| 401 | `unauthenticated` | The key is missing, invalid or revoked. |
| 403 | `insufficient_permissions` | The key lacks the required permission. |
| 400 | `invalid_cursor` | The cursor is malformed, was issued for other filters or order, or belongs to another environment. |
| 422 | `validation_failed` | A query parameter is invalid (`limit`, `order`, `app_type`, `status`). |

## Example

```bash
curl "https://api.eu.keenauth.com/v1/applications?limit=20&app_type=web" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```
