---
title: "GET /api/v1/hosting/apps/{app_id}/catalog"
method: GET
path: "/api/v1/hosting/apps/{app_id}/catalog"
tags: ["hosting"]
---

# GET /api/v1/hosting/apps/{app_id}/catalog

`GET /api/v1/hosting/apps/{app_id}/catalog`

## Request

- Base URL: `https://composal.com` (the document declares no server; this is the origin it was published from)
- URL: `https://composal.com/api/v1/hosting/apps/{app_id}/catalog`
- Auth: HTTP bearer

## Path parameters

- `app_id` string, required

## Response `200`

Hosted app configuration catalog

- object
  - `app` HostedAppCatalog, required
    - `id` string, required
    - `organization_id` string, required
    - `repository_id` string, required
    - `repository_kind` string, nullable, required
    - `slug` string, required
    - `name` string, required
    - `description` string, nullable, required
    - `root_path` string, required
    - `root_path_display` string, required
    - `framework` string, nullable, required
    - `status` 'draft' | 'active' | 'archived', required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `created_at_label` string, nullable, required
    - `updated_at_label` string, nullable, required
    - `locations` HostingLocation[], required
      - `id` string, required
      - `code` string, required
      - `name` string, required
      - `nomad_datacenter` string, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `environments` AppEnvironment[], required
      - `id` string, required
      - `hosted_app_id` string, required
      - `location_id` string, required
      - `slug` string, required
      - `name` string, required
      - `kind` 'production' | 'staging' | 'development' | 'preview' | 'ephemeral' | 'custom', required
      - `status` 'active' | 'paused' | 'archived', required
      - `location` HostingLocation, required
        - `id` string, required
        - `code` string, required
        - `name` string, required
        - `nomad_datacenter` string, required
        - `created_at` string, date-time, required
        - `updated_at` string, date-time, required
      - `branch_pattern` string, nullable, required
      - `base_domain` string, nullable, required
      - `auto_deploy` boolean, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
      - `created_at_label` string, nullable, required
      - `updated_at_label` string, nullable, required
    - `services` AppService[], required
      - `id` string, required
      - `hosted_app_id` string, required
      - `slug` string, required
      - `name` string, required
      - `kind` 'web' | 'worker' | 'cron' | 'static' | 'private', required
      - `runtime` 'docker' | 'node' | 'ruby' | 'python' | 'go' | 'rust' | 'static' | 'generic', required
      - `runtime_adapter_kind` 'nomad' | 'database', required
      - `runtime_adapter_settings_json` string, nullable, required
      - `nomad_namespace` string, nullable, required
      - `nomad_region` string, nullable, required
      - `cpu_mhz` integer, nullable, required
      - `memory_mb` integer, nullable, required
      - `memory_max_mb` integer, nullable, required: Hard memory limit in MB the task may burst to (Nomad MemoryMaxMB). memory_mb stays the reservation the scheduler places against, so raising this does not make a rollout harder to place. Must be >= memory_mb. Memory above the reservation is oversubscribed and best effort: under node pressure the kernel reclaims it and can OOM-kill the task. Null/absent renders no limit beyond the reservation.
      - `disk_mb` integer, nullable, required
      - `nomad_constraints_json` string, nullable, required
      - `nomad_update_strategy_json` string, nullable, required
      - `nomad_ulimits_json` string, nullable, required: Docker task ulimits as a JSON object of rlimit name to "soft:hard" (e.g. {"nofile":"65536:65536"}). Null/absent leaves the container on the daemon default.
      - `nomad_kill_timeout_seconds` integer, nullable, required: Seconds the task gets after SIGTERM before SIGKILL. Null/absent leaves Nomad's 5s default. Capped at 30 because a Nomad client silently clamps kill_timeout to its own max_kill_timeout (default 30s).
      - `nomad_shutdown_delay_seconds` integer, nullable, required: Seconds Nomad waits between deregistering the group's services and sending SIGTERM, so the edge stops routing new requests to the allocation before it is signalled. Null/absent leaves Nomad's 0s default.
      - `source_path` string, required
      - `repo_source_path` string, required
      - `build_command` string, nullable, required
      - `release_command` string, nullable, required
      - `prestart_command` string, nullable, required
      - `start_command` string, nullable, required
      - `healthcheck_path` string, nullable, required
      - `schedule` string, nullable, required
      - `internal_port` integer, nullable, required
      - `desired_instances` integer, required
      - `publicly_accessible` boolean, required
      - `auto_deploy` boolean, required
      - `deploy_paths` string[], required: Explicit repo-root-relative path prefixes/globs a push must touch to auto-deploy. Empty means default to the app root_path.
      - `effective_deploy_paths` string[], required: Tracked paths actually applied by the auto-deploy trigger (explicit deploy_paths, else [root_path]).
      - `bindings` AppServiceBinding[], required
        - `id` string, required
        - `hosted_app_id` string, required
        - `app_service_id` string, required
        - `bindable_type` string, required
        - `bindable_id` string, required
        - `binding_type` string, required
        - `name` string, required
        - `mount_path` string, nullable, required
        - `read_only` boolean, required
        - `required` boolean, required
        - `created_at` string, date-time, required
        - `updated_at` string, date-time, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
      - `created_at_label` string, nullable, required
      - `updated_at_label` string, nullable, required
      - `cpu_label` string, nullable, required
      - `memory_label` string, nullable, required
      - `memory_max_label` string, nullable, required
      - `disk_label` string, nullable, required
    - `deployments` AppDeployment[], required
      - `id` string, required
      - `hosted_app_id` string, required
      - `organization_id` string, required
      - `app_service_id` string, required
      - `app_environment_id` string, required
      - `location_id` string, required
      - `creator_user_id` string, nullable, required
      - `number` integer, required
      - `display_id` integer, required
      - `status` 'queued' | 'building' | 'deploying' | 'active' | 'failed' | 'rolled_back' | 'canceled', required
      - `location` HostingLocation, required
        - `id` string, required
        - `code` string, required
        - `name` string, required
        - `nomad_datacenter` string, required
        - `created_at` string, date-time, required
        - `updated_at` string, date-time, required
      - `source_ref` string, nullable, required
      - `commit_sha` string, nullable, required
      - `artifact_locator` string, nullable, required
      - `deployed_url` string, nullable, required
      - `trigger_kind` 'manual' | 'push' | 'schedule' | 'api' | 'rollback', required
      - `operation_key` string, nullable, required
      - `build_role` 'leader' | 'follower' | 'standalone', nullable, required
      - `is_rollback` boolean, required
      - `rollback_source_release_id` string, nullable, required
      - `rollback_target_release_id` string, nullable, required
      - `rollback_source_deployment_id` string, nullable, required
      - `rollback_reason` string, nullable, required
      - `idempotency_key` string, nullable, required
      - `failure_message` string, nullable, required
      - `started_at` string, date-time, nullable, required
      - `finished_at` string, date-time, nullable, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
      - `started_at_label` string, nullable, required
      - `finished_at_label` string, nullable, required
      - `created_at_label` string, nullable, required
      - `updated_at_label` string, nullable, required
    - `cdns` AppCdnDistribution[], required
      - `id` string, required
      - `hosted_app_id` string, required
      - `app_environment_id` string, nullable, required
      - `app_service_id` string, nullable, required
      - `slug` string, required
      - `name` string, required
      - `distribution_kind` 'pull_zone', required
      - `status` 'draft' | 'provisioning' | 'active' | 'degraded' | 'paused' | 'archived' | 'failed', required
      - `origin_url` string, uri, required
      - `cache_path_prefix` string, nullable
      - `edge_hostname` string, nullable, required
      - `provisioned` boolean, required
      - `cache_settings_json` string, nullable, required
      - `security_settings_json` string, nullable, required
      - `routing_settings_json` string, nullable, required
      - `failure_message` string, nullable, required
      - `last_synced_at` string, date-time, nullable, required
      - `last_deployed_at` string, date-time, nullable, required
      - `last_purged_at` string, date-time, nullable, required
      - `hostnames` AppCdnHostname[], required
        - `id` string, required
        - `app_cdn_distribution_id` string, required
        - `hostname` string, required
        - `tls_status` 'pending' | 'active' | 'failed', required
        - `dns_status` 'pending' | 'configured' | 'failed', required
        - `provider_hostname_id` string, nullable, required
        - `force_ssl` boolean, required
        - `created_at` string, date-time, required
        - `updated_at` string, date-time, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
      - `last_synced_at_label` string, nullable, required
      - `last_deployed_at_label` string, nullable, required
      - `last_purged_at_label` string, nullable, required
      - `created_at_label` string, nullable, required
      - `updated_at_label` string, nullable, required
    - `cdn_deployments` AppCdnDeployment[], required
      - `id` string, required
      - `app_cdn_distribution_id` string, required
      - `creator_user_id` string, nullable, required
      - `status` 'queued' | 'deploying' | 'active' | 'failed' | 'canceled', required
      - `action_kind` 'provision' | 'reconfigure' | 'hostname_sync' | 'purge_all' | 'purge_urls', required
      - `trigger_kind` 'manual' | 'push' | 'schedule' | 'api' | 'rollback', required
      - `source_ref` string, nullable, required
      - `commit_sha` string, nullable, required
      - `purge_urls` string[], required
      - `failure_message` string, nullable, required
      - `started_at` string, date-time, nullable, required
      - `finished_at` string, date-time, nullable, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
      - `started_at_label` string, nullable, required
      - `finished_at_label` string, nullable, required
      - `created_at_label` string, nullable, required
      - `updated_at_label` string, nullable, required
    - `data_resources` AppDataResource[], required
      - `id` string, required
      - `hosted_app_id` string, required
      - `app_environment_id` string, nullable, required
      - `slug` string, required
      - `name` string, required
      - `kind` 'database' | 'cache' | 'queue' | 'search' | 'vector', required
      - `engine` 'postgres' | 'mysql' | 'valkey', required
      - `version` string, nullable, required
      - `plan` string, nullable, required
      - `region` string, nullable, required
      - `status` 'provisioning' | 'available' | 'updating' | 'failed' | 'archived', required
      - `storage_gb` integer, nullable, required
      - `storage_label` string, nullable, required
      - `high_availability` boolean, required
      - `provider_metadata` object, required
      - `failure_message` string, nullable, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `managed_database_catalog` ManagedDatabaseCatalog, required
      - `default_provider_kind` string, required
      - `fallback_provider_kind` string, required
      - `provider_configured` boolean, required
      - `live_catalog` boolean, required
      - `engines` ManagedDatabaseEngine[], required
        - `engine` 'postgres' | 'mysql' | 'valkey', required
        - `kind` 'database' | 'cache', required
        - `label` string, required
        - `provider_kind` string, required
        - `provider_database_kind` string, nullable
        - `default_version` string, nullable
        - `default_plan` string, nullable
        - `default_cluster_size` string, nullable
        - `default_connection_mode` string, nullable
        - `sslmode` string, nullable
        - `ssl_mode` string, nullable
        - `supported_versions` string[]
        - `regions` ManagedDatabaseRegion[]
          - `slug` string, required
          - `display_name` string, nullable
          - `location` string, nullable
          - `vex_location_code` string, nullable
          - `provider` string, nullable
          - `enabled` boolean, nullable
          - `postgresql_supported` boolean, nullable
          - `mysql_supported` boolean, nullable
          - `current_default` boolean, nullable
          - `source` string, nullable
        - `cluster_sizes` ManagedDatabaseClusterSize[]
          - `name` string, required
          - `display_name` string, nullable
          - `enabled` boolean, nullable
          - `production` boolean, nullable
          - `development` boolean, nullable
          - `cpu` union
            - string
            - number
          - `ram` union
            - string
            - number
          - `storage` union
            - string
            - number
          - `metal` union
            - string
            - boolean
          - `architecture` string, nullable
    - `storage_resources` AppStorageResource[], required
      - `id` string, required
      - `hosted_app_id` string, required
      - `app_environment_id` string, nullable, required
      - `location_id` string, nullable, required: Volume datacenter pin (volume kind only)
      - `location_code` string, nullable, required
      - `slug` string, required
      - `name` string, required
      - `kind` 'bucket' | 'volume', required
      - `provider` 's3' | 'tigris' | 'nomad_csi' | 'local_nvme' | 'local_nvme_authority', required: Storage backend. `local_nvme` is a directory on the node's own NVMe, created as a Nomad dynamic host volume — fast, node-local and EPHEMERAL: the platform may delete it at any time and it does not survive the loss of its node. Use it as a cache, never as a system of record. `local_nvme_authority` is a single-node, single-writer authority volume that refuses destructive repair. Node loss requires restoration from remote replication into a new volume.
      - `region` string, nullable, required
      - `access_mode` 'private' | 'public' | 'internal', required: Object-store semantics only; ignored for volume resources
      - `mount_path` string, nullable, required
      - `capacity_gb` integer, nullable, required
      - `capacity_label` string, nullable, required
      - `status` 'provisioning' | 'available' | 'updating' | 'failed' | 'archived', required
      - `external_volume_id` string, nullable, required: Nomad/CSI volume id assigned at provisioning
      - `attachment` object, nullable, required: Attachment readback: CSI publish state for nomad_csi, or the nodes carrying the directory for local_nvme. Nil until provisioned
        - `state` 'attached' | 'detached'
        - `node_ids` string[]
        - `alloc_ids` string[]
      - `ephemeral` boolean, required: True when the contents may be deleted at any time and do not survive the loss of the underlying node. Ephemeral storage is a cache and must never hold a system of record.
      - `provider_error` string, nullable, required: Last provisioning/teardown error from the storage provider
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `domains` AppDomain[], required
      - `id` string, required
      - `hosted_app_id` string, required
      - `app_service_id` string, nullable, required
      - `app_environment_id` string, nullable, required
      - `static_site_id` string, nullable, required
      - `hostname` string, required
      - `kind` 'primary' | 'redirect' | 'preview' | 'internal', required
      - `target_kind` 'app_service' | 'static_site', required
      - `dns_mode` 'manual_cname' | 'cloudflare', required
      - `record_type` string, nullable, required
      - `record_name` string, nullable, required
      - `record_value` string, nullable, required
      - `tls_status` 'pending' | 'active' | 'failed', required
      - `dns_status` 'pending' | 'configured' | 'failed', required
      - `verification_status` string, required
      - `last_checked_at` string, date-time, nullable, required
      - `failure_message` string, nullable, required
      - `redirect_to` string, nullable, required
      - `certificate` object, nullable, required
        - `status` string, required
        - `last_error` string, nullable, required
        - `expires_at` string, date-time, nullable, required
      - `verification_record` object, nullable, required
        - `type` 'TXT', required
        - `name` string, required
        - `value` string, required
      - `path_rules` AppDomainPathRule[], required
        - `id` string, required
        - `path_prefix` string, required
        - `status` 'pending' | 'active' | 'failed' | 'disabled', required
        - `action_kind` 'proxy' | 'redirect' | 'fixed_response' | 'external', required
        - `last_error` string, nullable, required
        - `app_service_id` string, nullable, required
        - `backend_ref` string, nullable, required
        - `app_service_endpoint_id` string, nullable, required
        - `created_at` string, date-time, required
        - `updated_at` string, date-time, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `config_variables` AppConfigVariable[], required
      - `id` string, required
      - `hosted_app_id` string, required
      - `app_environment_id` string, nullable, required
      - `app_service_id` string, nullable, required
      - `scope_kind` 'app' | 'environment' | 'service', required
      - `key` string, required
      - `value` string, nullable, required
      - `has_value` boolean, required
      - `value_kind` 'plain' | 'secret' | 'reference', required
      - `description` string, nullable, required
      - `exposed_to_build` boolean, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `service_bindings` AppServiceBinding[], required
      - `id` string, required
      - `hosted_app_id` string, required
      - `app_service_id` string, required
      - `bindable_type` string, required
      - `bindable_id` string, required
      - `binding_type` string, required
      - `name` string, required
      - `mount_path` string, nullable, required
      - `read_only` boolean, required
      - `required` boolean, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `422`: Unprocessable entity
- `502`: Bad gateway

---

[API](https://skmtc.dev/composal/apis/vex-api.md) - [All operations](https://skmtc.dev/composal/apis/vex-api/llms.txt) - [OpenAPI document](https://skmtc.dev/composal/apis/vex-api/revisions/74298a24e040?raw)
