---
title: "List applications"
method: GET
path: "/zones/{zoneId}/applications"
tags: ["Applications"]
---

# List applications

`GET /zones/{zoneId}/applications`

Returns a paginated list of applications in the specified zone. Use cursor pagination via `after`/`before`. Sort: comma-separated field list; prefix with `-` for descending. Use `expand[]=total_count` to include the matching row count. Filter by exact slug via `filter[slug]` and by exact identifier via `filter[identifier]`. Search via `query[name]` / `query[identifier]` / `query[]` (substring match, OR'd across repeated values). `query[]` matches against name and identifier. Pass `filter[id]` (repeatable, max 100) to restrict results to a known set of applications — mutually exclusive with `after`/`before` (returns 400 if combined). When `filter[id]` is set, `limit` is ignored and the response contains every requested application that exists in the zone, in a single page. IDs not in the zone are silently omitted.

## Path parameters

- `zoneId` string, required

## Query parameters

- `after` string
- `before` string
- `limit` integer
- `expand[]` union
  - 'total_count'
  - string[]
- `filter[slug]` union
  - string — Filter by exact application slug
  - string[]
- `filter[identifier]` union
  - string — Filter by exact application identifier
  - string[]
- `filter[id]` union
  - string — Restrict results to applications with this publicId. Repeatable, max 100. Mutually exclusive with after/before.
  - string[]
- `slug` string
- `identifier` string
- `query[name]` union
  - string — Search by name (substring match)
  - string[]
- `query[identifier]` union
  - string — Search by identifier (substring match)
  - string[]
- `query[]` union
  - string — Search across name and identifier (substring match)
  - string[]
- `sort` string

## Response `200`

Default Response

- object
  - `items` IamApplication[], required
    - `id` string, required — Unique identifier of the application
    - `organization_id` string, required — Organization that owns this application
    - `zone_id` string, required — Zone this application belongs to
    - `slug` string, required — URL-safe identifier, unique within the zone
    - `identifier` string, required — User specified identifier, unique within the zone
    - `name` string, required — Human-readable name
    - `description` string, nullable — Human-readable description
    - `metadata` IamMetadata — Entity metadata
      - `docs_url` string, uri — Documentation URL
      - `icon_url` string, uri — Icon URL
    - `protocols` object, nullable — Protocol-specific configuration
      - `oauth2` IamApplicationOAuth2Protocol, nullable — OAuth 2.0 protocol configuration
        - `redirect_uris` string[], nullable — OAuth 2.0 redirect URIs for this application
        - `post_logout_redirect_uris` string[], nullable — OAuth 2.0 post-logout redirect URIs for this application
    - `dependencies_count` integer, required — Number of resource dependencies
    - `owner_type` 'platform' | 'customer', required — Who owns this application. Platform-owned applications cannot be modified via API.
    - `consent` 'implicit' | 'required', required — Consent mode for the application. 'implicit' means consent is automatically granted, 'required' means explicit user consent is needed.
    - `created_at` string, date-time, required — Entity creation timestamp
    - `updated_at` string, date-time, required — Entity update timestamp
  - `page_info` IamPageInfo, required — Pagination information
    - `has_next_page` boolean, required — Whether there are more items after the current page
    - `has_previous_page` boolean, required — Whether there are items before the current page
    - `start_cursor` string, nullable — Cursor pointing to the first item in the current page
    - `end_cursor` string, nullable — Cursor pointing to the last item in the current page
  - `pagination` IamPagination, required — Cursor-based pagination metadata
    - `after_cursor` string, required — An opaque cursor used for paginating through a list of results
    - `before_cursor` string, required — An opaque cursor used for paginating through a list of results
    - `total_count` integer — Total number of items matching the query. Only included when expand[]=total_count is requested.

## Other responses

- `400` — Error response
- `default` — Error response

## Changes

- **2026-08-26** `d65d51379d93` — 2 warning, 1 info
  - deleted the `query` request parameter `traits[]`
  - deleted the `query` request parameter `traits[all]`
  - added the non-success response with the status `400`
- **2026-07-01** `2f5033ed4491` — 1 info
  - added the optional property `items/items/metadata/icon_url` to the response with the `200` status
- **2026-06-01** `6149152cee43` — 3 breaking, 3 warning, 9 info
  - the `page_info` response's property type/format changed from `object`/`` to ``/`` for status `200`
  - removed the required property `page_info/has_next_page` from the response with the `200` status
  - removed the required property `page_info/has_previous_page` from the response with the `200` status
  - deleted the `query` request parameter `cursor`
  - …11 more
- **2026-04-20** `932699a5ea16` — 1 info
  - added the required property `items/items/consent` to the response with the `200` status
- **2026-03-16** `d3d69f45bfed` — 1 warning, 3 info
  - removed the optional property `items/items/traits` from the response with the `200` status
  - the endpoint scheme security `OAuth2` was added to the API
  - the endpoint scheme security `bearerAuth` was added to the API
  - the endpoint scheme security `iam_bearerAuth` was removed from the API

[Full history](https://skmtc.dev/keycardai/apis/untitled-api/changes/zones/:zoneId/applications/get.md)

---

[API](https://skmtc.dev/keycardai/apis/untitled-api.md) · [All operations](https://skmtc.dev/keycardai/apis/untitled-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/keycardai/untitled-api/revisions/d65d51379d93/schema)
