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

# List Apps

> List Apps in the organization (paginated).



## OpenAPI

````yaml openapi-final get /list-apps
openapi: 3.0.3
info:
  title: Retell SDK
  version: 3.0.0
  x-retell-spec-revision: 2026-08-22-7679759
  contact:
    name: Retell Support
    url: https://www.retellai.com/
    email: support@retellai.com
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
  - url: https://api.retellai.com
    description: The production server.
security:
  - api_key: []
paths:
  /list-apps:
    get:
      description: List Apps in the organization (paginated).
      operationId: listApps
      parameters:
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortOrderParam'
        - $ref: '#/components/parameters/PaginationKeyParam'
      responses:
        '200':
          description: Page of Apps.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/PaginatedResponseBase'
                  - type: object
                    properties:
                      items:
                        type: array
                        items:
                          $ref: '#/components/schemas/AppResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            import Retell from 'retell-sdk';

            const client = new Retell({
              apiKey: process.env['RETELL_API_KEY'], // This is the default and can be omitted
            });

            const apps = await client.app.list();

            console.log(apps.has_more);
        - lang: Python
          source: |-
            import os
            from retell import Retell

            client = Retell(
                api_key=os.environ.get("RETELL_API_KEY"),  # This is the default and can be omitted
            )
            apps = client.app.list()
            print(apps.has_more)
components:
  parameters:
    LimitParam:
      in: query
      name: limit
      schema:
        type: integer
        default: 50
        maximum: 1000
      description: Maximum number of items to return.
    SortOrderParam:
      in: query
      name: sort_order
      schema:
        type: string
        enum:
          - ascending
          - descending
        default: descending
      description: Sort order for results.
    PaginationKeyParam:
      in: query
      name: pagination_key
      schema:
        type: string
      description: Pagination key for fetching the next page.
  schemas:
    PaginatedResponseBase:
      type: object
      properties:
        pagination_key:
          type: string
          description: Pagination key for the next page.
        has_more:
          type: boolean
          description: Whether more results are available.
    AppResponse:
      type: object
      required:
        - app_id
        - org_id
        - type
        - provider
        - created_timestamp
        - user_modified_timestamp
      properties:
        app_id:
          type: string
        org_id:
          type: string
        type:
          $ref: '#/components/schemas/AppType'
        provider:
          $ref: '#/components/schemas/AppProvider'
        connection_status:
          $ref: '#/components/schemas/AppConnectionStatus'
        name:
          type: string
        tenant_url:
          type: string
          description: >-
            Per-tenant API base URL. Set by providers with per-org hosts;
            omitted by providers on a single global host.
        tenant_id:
          type: string
          description: >-
            Sub-account id, for providers that scope requests by a sub-account
            id on a shared host. Omitted by every other provider.
        auth_config:
          $ref: '#/components/schemas/AppAuthConfigResponse'
        crm_config:
          $ref: '#/components/schemas/AppCRMConfig'
        created_timestamp:
          type: number
        user_modified_timestamp:
          type: number
    AppType:
      type: string
      enum:
        - crm
        - calendar
        - knowledge_base
        - support
        - communication
      description: App integration category.
    AppProvider:
      type: string
      description: >-
        Provider name. Must be valid for the App's type; the supported providers
        per type are listed by list-app-templates.
    AppConnectionStatus:
      type: string
      enum:
        - not_connected
        - connected
        - error
      description: >-
        Connection health of the App, server-managed. `not_connected` after
        create or a credential / tenant URL change; `connected` once verified
        via OAuth connect, an auth test, or a successful live tool call; `error`
        when the provider rejects the credentials (on connect, an auth test, or
        a live tool call).
    AppAuthConfigResponse:
      oneOf:
        - $ref: '#/components/schemas/OAuthConfigResponse'
        - $ref: '#/components/schemas/ApiKeyAuthConfigResponse'
        - $ref: '#/components/schemas/AccessTokenAuthConfigResponse'
        - $ref: '#/components/schemas/BasicAuthConfigResponse'
        - $ref: '#/components/schemas/RefreshTokenAuthConfigResponse'
      description: >-
        Non-secret auth metadata. Encrypted secret fields are never returned by
        the API.
    AppCRMConfig:
      type: object
      properties:
        inbound_sync_mappings:
          type: array
          maxItems: 200
          description: >-
            Field mappings applied when syncing CRM records into Retell
            contacts. Must include phone_number, which is the field the two
            systems are matched on.
          items:
            $ref: '#/components/schemas/CRMSyncMapping'
        outbound_sync_mappings:
          type: array
          maxItems: 200
          description: >-
            Field mappings applied when writing Retell contact changes back to
            the CRM.
          items:
            $ref: '#/components/schemas/CRMSyncMapping'
        sync_conversation_activity:
          type: boolean
          description: >-
            Whether to push call/chat activity to the external CRM. Opt-in —
            defaults to false when unset.
        sync_new_contacts:
          type: boolean
          description: >-
            Whether to create a CRM record after a conversation when the contact
            is not yet linked to one.
    OAuthConfigResponse:
      type: object
      required:
        - type
        - client_id
      properties:
        type:
          type: string
          enum:
            - oauth2
        client_id:
          type: string
    ApiKeyAuthConfigResponse:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - api_key
    AccessTokenAuthConfigResponse:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - access_token
    BasicAuthConfigResponse:
      type: object
      required:
        - type
        - username
      properties:
        type:
          type: string
          enum:
            - basic
        username:
          type: string
    RefreshTokenAuthConfigResponse:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - refresh_token
    CRMSyncMapping:
      type: object
      required:
        - field_name
        - external_field_name
      properties:
        field_name:
          type: string
          description: >-
            Retell contact field, built-in or custom, to map. Types must be
            compatible with the CRM field on both sides of the sync.
        external_field_name:
          type: string
          description: >-
            Field on the CRM's contact object to map to. A name that does not
            exist there surfaces as an error on the sync job rather than at
            configuration time.
  responses:
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                enum:
                  - error
              message:
                type: string
                example: API key is missing or invalid.
    TooManyRequests:
      description: Too Many Requests
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                enum:
                  - error
              message:
                type: string
                example: Account rate limited, please throttle your requests.
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                enum:
                  - error
              message:
                type: string
                example: An unexpected server error occurred.
  securitySchemes:
    api_key:
      type: http
      scheme: bearer
      bearerFormat: string
      description: >-
        Authentication header containing API key (find it in dashboard). The
        format is "Bearer YOUR_API_KEY"

````