> ## Documentation Index
> Fetch the complete documentation index at: https://developers.kit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List apps

> Returns the apps in the [Kit App Store](https://kit.com/apps) that the account can see: every app listed in the store, plus any app the account created, in any status, marked `owned`. Each row is a compact summary; fetch [Get an app](/api-reference/apps/get-an-app) for the description, capabilities, links and install URL.

Narrow the list with `category` (one or more App Store categories, comma-separated), `query` (Kit's App Store search), or both.

Without `query`, apps are ordered by install count, most installed first, with cursor pagination as for other v4 list endpoints. With `query`, apps are in relevance order and the cursors are search cursors: pass them back unchanged. Mixing a cursor from a search with a non-search request returns 422.

With `query`, `pagination.total_count` is the search index's count: it is capped at 10,000 and can include an app that the page itself does not return (a stale index entry for an app that has since been disabled or unlisted). Without `query` it is exact.



## OpenAPI

````yaml /api-reference/v4.json get /v4/apps
openapi: 3.0.3
info:
  title: Kit API
  version: '4.0'
servers:
  - url: https://api.kit.com
security: []
paths:
  /v4/apps:
    get:
      tags:
        - Apps
      summary: List apps
      description: >-
        Returns the apps in the [Kit App Store](https://kit.com/apps) that the
        account can see: every app listed in the store, plus any app the account
        created, in any status, marked `owned`. Each row is a compact summary;
        fetch [Get an app](/api-reference/apps/get-an-app) for the description,
        capabilities, links and install URL.


        Narrow the list with `category` (one or more App Store categories,
        comma-separated), `query` (Kit's App Store search), or both.


        Without `query`, apps are ordered by install count, most installed
        first, with cursor pagination as for other v4 list endpoints. With
        `query`, apps are in relevance order and the cursors are search cursors:
        pass them back unchanged. Mixing a cursor from a search with a
        non-search request returns 422.


        With `query`, `pagination.total_count` is the search index's count: it
        is capped at 10,000 and can include an app that the page itself does not
        return (a stale index entry for an app that has since been disabled or
        unlisted). Without `query` it is exact.
      parameters:
        - name: after
          in: query
          required: false
          schema:
            nullable: true
          description: >-
            To fetch next page of results, use `?after=<end_cursor>`. With
            `query`, pass the cursor back unchanged.
        - name: before
          in: query
          required: false
          schema:
            nullable: true
          description: >-
            To fetch previous page of results, use `?before=<start_cursor>`.
            With `query`, pass the cursor back unchanged.
        - name: category
          in: query
          required: false
          schema:
            type: string
          example: e_commerce,scheduling
          description: >-
            Only apps in these App Store categories. Accepts one category or a
            comma-separated list; an app matches when it is listed under any of
            them. Values: `advertisements`, `affiliate_management`, `analytics`,
            `content`, `crm`, `e_commerce`, `email_verification`, `events`,
            `giveaways`, `lead_capture`, `memberships_courses`, `scheduling`,
            `surveys_quizzes`, `webinar_services`, `website_platforms`,
            `workflows`. An unknown value returns 422.
        - name: include_total_count
          in: query
          required: false
          schema:
            type: boolean
          example: false
          description: >-
            Set to `true` to include the `total_count` in the response. This
            option can cause slow responses; if paging through results, request
            it only on the first page and reuse the value for subsequent pages.
        - name: per_page
          in: query
          required: false
          schema:
            type: integer
            nullable: true
          description: >-
            Number of results per page. Default 50, maximum 100; larger values
            are clamped to 100.
        - name: query
          in: query
          required: false
          schema:
            type: string
            maxLength: 100
          example: calendar
          description: >-
            Searches app names, categories, summaries and descriptions with
            Kit's App Store search. Results are ranked by relevance, and recent
            edits to an app can take a few minutes to appear. Maximum 100
            characters.
      responses:
        '200':
          description: >-
            Returns a paginated list of the apps the authenticated account can
            see
          content:
            application/json:
              schema:
                type: object
                properties:
                  apps:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: integer
                          description: >-
                            The app's id. Use it with [Get an
                            app](/api-reference/apps/get-an-app).
                        name:
                          type: string
                          description: The app's name as shown in the Kit App Store.
                        summary:
                          nullable: true
                          type: string
                          description: >-
                            One-line summary from the app's listing. `null` when
                            the developer hasn't written one.
                        icon_url:
                          type: string
                          description: >-
                            URL of the app's icon, or `null` when the developer
                            hasn't uploaded one.
                          nullable: true
                        categories:
                          type: array
                          items:
                            type: string
                            enum:
                              - advertisements
                              - affiliate_management
                              - analytics
                              - content
                              - crm
                              - e_commerce
                              - email_verification
                              - events
                              - giveaways
                              - lead_capture
                              - memberships_courses
                              - scheduling
                              - surveys_quizzes
                              - webinar_services
                              - website_platforms
                              - workflows
                          description: App Store categories the app is listed under.
                        pricing:
                          type: string
                          description: >-
                            Whether the third party charges for its own service:
                            `free` or `paid`. This is the developer's own
                            declaration on the listing, not a statement about
                            Kit plans.
                          enum:
                            - free
                            - paid
                        plan_availability:
                          type: string
                          enum:
                            - all_plans
                            - paid_plans
                            - pro
                          description: >-
                            The lowest Kit plan that can install the app:
                            `all_plans`, `paid_plans`, or `pro` (Kit's top
                            tier). `paid_plans` means any trialing or paying
                            account, legacy plans included.
                        installable:
                          type: boolean
                          description: >-
                            `true` when the Install button would show for the
                            authenticated account: the app is published, the
                            account's plan includes it and the account is in
                            good standing. Always `true` for the app's own
                            developer.
                        access_types:
                          type: array
                          items:
                            type: string
                            enum:
                              - api
                              - plugin
                          description: >-
                            How the app connects to Kit: `api` (it calls the Kit
                            API on the creator's behalf) and/or `plugin` (it
                            adds elements inside Kit, such as content blocks or
                            automation nodes).
                        published_at:
                          type: string
                          nullable: true
                          description: >-
                            When the app was published to the App Store, in ISO
                            8601 UTC. `null` when the app isn't currently
                            published.
                        app_store_url:
                          type: string
                          description: >-
                            Opens the app's page in Kit for a signed-in creator.
                            It isn't a public page.
                        owned:
                          type: boolean
                          description: >-
                            `true` when the authenticated account created this
                            app. Apps the account created are returned in any
                            status.
                        status:
                          type: string
                          description: >-
                            `published`, `unlisted` (published but hidden from
                            browsing), `unpublished` (not currently published),
                            `disabled` (turned off by Kit, and hidden from
                            everyone except the account that created it), or
                            `blocked` (blocked by Kit after review; visible only
                            to the account that created it). Other developers'
                            apps are only returned when `published`.
                          enum:
                            - published
                            - unlisted
                            - unpublished
                            - disabled
                            - blocked
                      required:
                        - id
                        - name
                        - summary
                        - icon_url
                        - categories
                        - pricing
                        - plan_availability
                        - installable
                        - access_types
                        - published_at
                        - app_store_url
                        - owned
                        - status
                  pagination:
                    type: object
                    properties:
                      has_previous_page:
                        type: boolean
                      has_next_page:
                        type: boolean
                      start_cursor:
                        type: string
                        nullable: true
                      end_cursor:
                        type: string
                        nullable: true
                      per_page:
                        type: integer
                      total_count:
                        type: integer
                        description: >-
                          Total number of matching apps. Only present when
                          `include_total_count=true`.
                    required:
                      - has_previous_page
                      - has_next_page
                      - start_cursor
                      - end_cursor
                      - per_page
                required:
                  - apps
                  - pagination
              example:
                apps:
                  - id: 1318
                    name: Storefront Orders
                    summary: Tag subscribers by what they buy in your store
                    icon_url: https://embed.filekit.com/e/storefront-orders-icon
                    categories:
                      - e_commerce
                      - workflows
                    pricing: paid
                    plan_availability: pro
                    installable: false
                    access_types:
                      - api
                      - plugin
                    published_at: '2026-05-19T15:40:00Z'
                    app_store_url: https://app.kit.com/apps/1318
                    owned: false
                    status: published
                  - id: 1245
                    name: Calendar Sync
                    summary: Let subscribers book a call from your emails
                    icon_url: https://embed.filekit.com/e/calendar-sync-icon
                    categories:
                      - scheduling
                    pricing: free
                    plan_availability: paid_plans
                    installable: true
                    access_types:
                      - api
                      - plugin
                    published_at: '2026-03-04T09:12:00Z'
                    app_store_url: https://app.kit.com/apps/1245
                    owned: false
                    status: published
                pagination:
                  has_previous_page: false
                  has_next_page: false
                  start_cursor: WzEzMThd
                  end_cursor: WzEyNDVd
                  per_page: 50
        '401':
          description: Returns a 401 if the token and/or account cannot be authenticated
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: string
                required:
                  - errors
              example:
                errors:
                  - The access token is invalid
        '422':
          description: >-
            Returns a 422 when `category` contains an unknown value, `query` is
            longer than 100 characters, a pagination parameter is invalid, or a
            cursor from a search is used on a request without `query` (or the
            reverse)
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: string
                required:
                  - errors
              example:
                errors:
                  - >-
                    category must be one of: advertisements,
                    affiliate_management, analytics, content, crm, e_commerce,
                    email_verification, events, giveaways, lead_capture,
                    memberships_courses, scheduling, surveys_quizzes,
                    webinar_services, website_platforms, workflows
        '503':
          description: >-
            Returns a 503 only when `query` is set and App Store search is
            unavailable
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: string
                required:
                  - errors
              example:
                errors:
                  - >-
                    App search is temporarily unavailable. Try again shortly, or
                    list apps by category without query.
      security:
        - API Key: []
        - OAuth2: []
components:
  securitySchemes:
    API Key:
      description: Authenticate API requests via an API Key
      type: apiKey
      in: header
      name: X-Kit-Api-Key
    OAuth2:
      description: Authenticate API requests via an OAuth token
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://api.kit.com/v4/oauth/authorize
          tokenUrl: https://api.kit.com/v4/oauth/token
          refreshUrl: https://api.kit.com/v4/oauth/token
          scopes:
            read: Read access to Kit API v4
            write: Write access to Kit API v4

````

## Related topics

- [Get an app](https://developers.kit.com/api-reference/apps/get-an-app.md)
- [Changelog](https://developers.kit.com/changelog.md)
- [Kit App Store overview](https://developers.kit.com/kit-app-store/overview.md)
- [API Overview](https://developers.kit.com/api-reference/overview.md)
- [Managing plugins](https://developers.kit.com/plugins/managing-plugins.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.