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

# List Apps

> List all Apps for this organization.

The response includes ``max_apps`` (the tier's Canvas App limit, ``null`` =
unlimited) so the UI can render usage ("X of N apps used") and gate the
create action without a second round-trip.



## OpenAPI

````yaml get /v1/apps
openapi: 3.1.0
info:
  title: Mixpeek API
  description: >-
    This is the Mixpeek API, providing access to various endpoints for data
    processing and retrieval.
  termsOfService: https://mixpeek.com/terms
  contact:
    name: Mixpeek Support
    url: https://mixpeek.com/contact
    email: info@mixpeek.com
  version: '0.82'
servers:
  - url: https://api.mixpeek.com
    description: Production
security: []
paths:
  /v1/apps:
    get:
      tags:
        - Apps
      summary: List Apps
      description: >-
        List all Apps for this organization.


        The response includes ``max_apps`` (the tier's Canvas App limit,
        ``null`` =

        unlimited) so the UI can render usage ("X of N apps used") and gate the

        create action without a second round-trip.
      operationId: list_apps_v1_apps_get
      parameters:
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            maximum: 1000
            minimum: 1
            default: 100
            title: Limit
        - name: offset
          in: query
          required: false
          schema:
            type: integer
            minimum: 0
            default: 0
            title: Offset
        - name: template
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Filter by template type
            title: Template
          description: Filter by template type
        - name: slug
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Exact match on app slug
            title: Slug
          description: Exact match on app slug
        - name: search
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Case-insensitive partial match on app name
            title: Search
          description: Case-insensitive partial match on app name
      responses:
        '200':
          description: Paginated list of Apps for this organization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListAppsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    ListAppsResponse:
      properties:
        results:
          items:
            $ref: '#/components/schemas/AppListItem'
          type: array
          title: Results
        total_count:
          type: integer
          title: Total Count
        limit:
          type: integer
          title: Limit
        offset:
          type: integer
          title: Offset
        max_apps:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Apps
          description: >-
            Maximum Canvas Apps allowed on the caller's tier (Free=1, Pro=10,
            Enterprise=unlimited). null means unlimited.
      type: object
      required:
        - results
        - total_count
        - limit
        - offset
      title: ListAppsResponse
      description: Paginated list of apps.
    ErrorResponse:
      properties:
        success:
          type: boolean
          title: Success
          description: Always false for error responses
          default: false
        status:
          type: integer
          title: Status
          description: HTTP status code for this error
        error:
          $ref: '#/components/schemas/ErrorDetail'
          description: Error details payload
      type: object
      required:
        - status
        - error
      title: ErrorResponse
      description: Error response model.
      examples:
        - error:
            details:
              id: ns_123
              resource: namespace
            message: Namespace not found
            type: NotFoundError
          status: 404
          success: false
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    AppListItem:
      properties:
        app_id:
          type: string
          title: App Id
        slug:
          type: string
          title: Slug
        url:
          type: string
          title: Url
        meta:
          $ref: '#/components/schemas/PageMeta'
        is_active:
          type: boolean
          title: Is Active
        version:
          type: integer
          title: Version
        has_unpublished_changes:
          type: boolean
          title: Has Unpublished Changes
          default: false
        template:
          type: string
          title: Template
        custom_domains:
          items:
            $ref: '#/components/schemas/CustomDomainConfig'
          type: array
          title: Custom Domains
        auth_config:
          anyOf:
            - $ref: '#/components/schemas/AuthConfig-Output'
            - type: 'null'
        build_config:
          anyOf:
            - $ref: '#/components/schemas/BuildConfig'
            - type: 'null'
        monitoring_config:
          anyOf:
            - $ref: '#/components/schemas/MonitoringConfig'
            - type: 'null'
        repo_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Repo Url
        repo_branch:
          anyOf:
            - type: string
            - type: 'null'
          title: Repo Branch
        environments:
          additionalProperties: true
          type: object
          title: Environments
        created_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Created At
        updated_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Updated At
      type: object
      required:
        - app_id
        - slug
        - url
        - meta
        - is_active
        - version
        - template
        - custom_domains
      title: AppListItem
      description: |-
        Lightweight app summary for list endpoints.

        Excludes heavy fields (sections, custom_html, tabs, versions,
        featured_gallery) that can make the full list response 10-30 MB.
        Use GET /apps/{app_id} for the complete record.
    ErrorDetail:
      properties:
        message:
          type: string
          title: Message
          description: Human-readable error message
        type:
          type: string
          title: Type
          description: Stable error type identifier (machine-readable)
        code:
          anyOf:
            - type: string
            - type: 'null'
          title: Code
          description: >-
            Fine-grained error code for programmatic handling (e.g.,
            namespace_name_taken, feature_extractor_not_found). Present only
            when consumers may need to branch on a specific error condition.
        details:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Details
          description: >-
            Optional structured details to help debugging (validation errors,
            IDs, etc.)
      type: object
      required:
        - message
        - type
      title: ErrorDetail
      description: Error detail model.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    PageMeta:
      properties:
        title:
          type: string
          title: Title
          description: Page title displayed in the browser tab and page header.
          examples:
            - My Product Search
            - Brand Compliance Dashboard
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
          description: Short page description shown in the page header or subtitle area.
          examples:
            - Search across 10k+ product images
        logo_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Logo Url
          description: URL of the logo displayed in the page header.
          examples:
            - https://cdn.example.com/logo.png
        favicon_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Favicon Url
          description: URL of the favicon for the browser tab.
          examples:
            - https://cdn.example.com/favicon.ico
        indexable:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Indexable
          description: >-
            When true, opts the app in to search-engine and AI crawler indexing.
            Canvas serves an Allow robots.txt and omits X-Robots-Tag/noindex.
            Defaults to false (noindex) for all apps.
          examples:
            - false
            - true
      type: object
      required:
        - title
      title: PageMeta
      description: >-
        Page-level metadata (REQUIRED when creating a page).


        This object is separate from the optional ``seo`` field.

        ``meta`` controls the visible page chrome (browser tab title, logo,
        favicon),

        while ``seo`` controls search-engine tags (og:title, og:description,
        etc.).
    CustomDomainConfig:
      properties:
        domain:
          type: string
          title: Domain
          description: Customer domain (e.g. 'search.acme.com')
        status:
          type: string
          enum:
            - pending
            - verifying
            - provisioning_tls
            - active
          title: Status
          description: Domain verification and TLS lifecycle state
          default: pending
        verification_token:
          anyOf:
            - type: string
            - type: 'null'
          title: Verification Token
          description: TXT record value for DNS ownership verification
        cname_target:
          anyOf:
            - type: string
            - type: 'null'
          title: Cname Target
          description: CNAME target (e.g. '{slug}.mxp.co')
        tls_cert_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Tls Cert Id
          description: TLS certificate reference
        tls_expires_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Tls Expires At
          description: TLS cert expiry
        verified_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Verified At
          description: When domain was verified
        is_primary:
          type: boolean
          title: Is Primary
          description: Whether this is the primary domain
          default: false
      type: object
      required:
        - domain
      title: CustomDomainConfig
      description: A single custom domain attached to an App.
    AuthConfig-Output:
      properties:
        mode:
          type: string
          enum:
            - public
            - clerk
            - password
            - api_key
            - jwt
            - sso_oidc
            - sso_saml
          title: Mode
          description: Authentication mode
          default: public
        clerk_org_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Clerk Org Id
          description: Clerk Organization ID for this app (auto-provisioned)
        clerk_allowed_providers:
          items:
            type: string
          type: array
          title: Clerk Allowed Providers
          description: 'Enabled auth providers: google, github, email'
        password_hash:
          anyOf:
            - type: string
            - type: 'null'
          title: Password Hash
          description: >-
            Bcrypt hash of the password (internal — never exposed in API
            responses)
        saml_idp_metadata_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Saml Idp Metadata Url
        saml_sp_entity_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Saml Sp Entity Id
        saml_acs_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Saml Acs Url
        oidc_issuer:
          anyOf:
            - type: string
            - type: 'null'
          title: Oidc Issuer
        oidc_client_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Oidc Client Id
        oidc_client_secret_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Oidc Client Secret Name
          description: Secrets vault key name (never stored inline)
        oidc_scopes:
          items:
            type: string
          type: array
          title: Oidc Scopes
        jwt_jwks_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Jwt Jwks Url
        jwt_audience:
          anyOf:
            - type: string
            - type: 'null'
          title: Jwt Audience
        jwt_issuer:
          anyOf:
            - type: string
            - type: 'null'
          title: Jwt Issuer
        api_keys:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Api Keys
      type: object
      title: AuthConfig
      description: >-
        End-user authentication configuration for an App.


        Supported modes:

        - ``public``: No authentication required (default)

        - ``clerk``: Managed auth via Clerk Organizations — handles Google,
        GitHub,
          email/password signup/login. Each canvas app maps to a Clerk Organization.
          Users are synced to canvas_users via Clerk webhooks.
        - ``password``: Simple password gate — visitors must enter a password to
          access the app. The password is hashed (bcrypt) before storage.
        - ``api_key``, ``jwt``, ``sso_oidc``, ``sso_saml``: Advanced modes
          retained for future use.
    BuildConfig:
      properties:
        entry:
          type: string
          title: Entry
          description: Build entry point
          default: src/layout.jsx
        framework:
          type: string
          const: react
          title: Framework
          default: react
        tailwind:
          type: boolean
          title: Tailwind
          default: true
        env_vars:
          additionalProperties:
            type: string
          type: object
          title: Env Vars
          description: >-
            Build-time environment variables injected into the app. Set
            MIXPEEK_API_KEY here to enable the /_api server-side proxy — without
            it the proxy falls back to the canvas server's default key. NOTE:
            every key here EXCEPT MIXPEEK_API_KEY is injected into the browser's
            window.__MIXPEEK__. For third-party secrets that must stay
            server-side (e.g. SERPAPI_KEY for a /functions/* handler), use
            ``secrets`` below, not ``env_vars``.
        secrets:
          additionalProperties:
            type: string
          type: object
          title: Secrets
          description: >-
            Server-only secrets for the app's /functions/* server-side handlers,
            exposed to them as ``ctx.env``. NEVER injected into the browser
            window.__MIXPEEK__ and masked ('***') in API responses. Use for
            third-party API keys (e.g. SERPAPI_KEY).
        asset_prefix:
          anyOf:
            - type: string
            - type: 'null'
          title: Asset Prefix
          description: CDN asset prefix once deployed
      type: object
      title: BuildConfig
      description: |-
        JSX build configuration for an App.

        Phase 1: schema only. Phase 3: used by the build pipeline Celery task.
    MonitoringConfig:
      properties:
        enabled:
          type: boolean
          title: Enabled
          description: Master switch — must be true for any monitoring to activate
          default: true
        error_boundary_enabled:
          type: boolean
          title: Error Boundary Enabled
          description: >-
            Wrap app in a React Error Boundary that shows a fallback UI on
            crash. Client-side only — no data is sent externally. Enabled by
            default.
          default: true
        sentry_enabled:
          type: boolean
          title: Sentry Enabled
          description: >-
            Capture unhandled exceptions to Mixpeek-internal Sentry. No PII is
            captured (beforeSend strips it).
          default: true
        posthog_enabled:
          type: boolean
          title: Posthog Enabled
          description: >-
            Capture pageviews and error counts to Mixpeek-internal PostHog. No
            text content, no session recordings.
          default: true
        custom_error_message:
          anyOf:
            - type: string
            - type: 'null'
          title: Custom Error Message
          description: Custom message shown in the Error Boundary fallback UI
        auto_fix_enabled:
          type: boolean
          title: Auto Fix Enabled
          description: >-
            When true, error spikes trigger the Claude-powered auto-fix
            pipeline. Requires source_files on the latest version or a connected
            GitHub repo.
          default: true
      type: object
      title: MonitoringConfig
      description: >-
        Opt-in monitoring configuration for a Canvas app.


        All monitoring is off by default except ``error_boundary_enabled``,
        which

        is a client-side UX safety net (shows fallback UI instead of blank page)

        and sends no data externally.


        When ``sentry_enabled`` or ``posthog_enabled`` are turned on, monitoring

        data is sent to **Mixpeek-internal** Sentry/PostHog — never to the

        customer's own observability stack. PII is stripped via ``beforeSend`` /

        ``mask_all_text``, and session replay is always off.

````