---
title: "List the apps"
method: GET
path: "/apps"
tags: ["Apps"]
---

# List the apps

`GET /apps`

## Request

- Base URL: `https://api.hypamoon.com/api/v1`
- URL: `https://api.hypamoon.com/api/v1/apps`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://app.hypamoon.com/oauth/authorize`, token URL `https://api.hypamoon.com/oauth/token`, scopes: `sites:read`)

The project's apps, newest first.

## Response `200`

The apps.

- object
  - `data` object[], required
    - `id` string, uuid, required
    - `name` string, required
    - `site_id` string, uuid, required
    - `url` string, required: The site; the app answers on url + /api.
    - `api_url` string, required: Where the app's /api starts.
    - `mode` 'live' | 'test', required
    - `status` 'active' | 'offline', required: offline: Hypamoon took the site offline; the app does not run.
    - `version` integer, required: The version that runs now.
    - `allowed_hosts` string[], required
    - `secrets` string[], required
    - `schedules` object[], required
      - `cron` string, required
    - `limits` object, required: Per request: CPU time and fetch calls. Per app: outbound requests per minute and per day.
      - `cpu_ms` integer, required
      - `subrequests` integer, required
      - `outbound_per_minute` integer, required
      - `outbound_per_day` integer, required
      - `bundle_bytes` integer, required
    - `auth` object, nullable: Sign-in for the app's users; null when it is off. login_url is where people sign in.
      - `signup` 'invite' | 'open' | 'approval' | 'domain', required
      - `roles` string[], required
      - `default_role` string, required
      - `google` boolean, required
      - `protect` 'site' | 'none'
      - `session_days` integer
      - `admin_session_days` integer
      - `allowed_domains` string[]
      - `buyers` boolean
      - `groups` boolean
      - `login_url` string, required
    - `database` object, nullable: The app's own database (env.DB); null when it has none. full: above the plan's data limit, so the app can only read and delete until there is room.
      - `bytes` integer, required
      - `full` boolean, required
      - `per_user_tables` object[]: Tables marked with set_table_owner_column: the app reads and writes them only through env.DB.mine(table), for the signed-in user.
        - `table` string, required
        - `column` string, required
        - `admin_role` string, nullable, required
    - `kept` string[]: Only in the answer to a deploy of an existing app: the settings that were left out and kept from the running version, like "allowed_hosts (20)", "vars (2)", "database", "auth".
    - `warnings` string[]: Only in the answer to a deploy: advice about the app's data, never a block. For example that export and delete per user won't cover the data (no table marked with set_table_owner_column), or tables that look like backups or copies. Tell the user in plain words and offer to fix it.
    - `created_at` string, required
    - `updated_at` string, required

## Other responses

- `401`: Unauthorized: unauthorized, missing_api_key, invalid_api_key, api_key_revoked, project_deleted.
- `403`: Forbidden: project_not_enabled, key_mode_mismatch, missing_scope, verification_required.
- `404`: Not Found: not_found.
- `429`: Too Many Requests: rate_limited.
- `500`: Internal Server Error: internal_error.
- `503`: Service Unavailable: service_unavailable.

---

[API](https://skmtc.dev/hypamoon/apis/hypamoon-api.md) · [All operations](https://skmtc.dev/hypamoon/apis/hypamoon-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hypamoon/apis/hypamoon-api/revisions/9f0b90004c06?raw)
