---
title: "Get app details"
method: GET
path: "/apps/{appRef}"
tags: ["Apps"]
---

# Get app details

`GET /apps/{appRef}`

## Request

- Base URL: `https://api.percher.run`
- URL: `https://api.percher.run/apps/{appRef}`
- Auth: HTTP bearer

## Path parameters

- `appRef` string, required

## Response `200`

App details. Carries the caller's effective `access` ('owner' | 'admin' | 'viewer') so dashboards can render role-aware UI without a second roundtrip.

- App
  - `id` string
  - `name` string
  - `runtime` string
  - `framework` string, nullable
  - `status` 'provisioning' | 'live' | 'crashed' | 'suspended'
  - `url` string, uri
  - `dataMode` 'none' | 'pocketbase' | 'postgres' | 'sqlite' | 'convex' | 'supabase' | 'external'
  - `createdAt` string, date-time
  - `access` 'owner' | 'admin' | 'viewer': Caller's effective role. 'admin' grants the operational write surface (deploy, env, domains, KV, logs, PocketBase ops); 'viewer' is read-only; 'owner' is everything including delete / transfer / rename / share management.

## Other responses

- `404`: App not found OR not visible to the caller (pending invites and expired shares 404 here, matching resolveWithRole semantics).

---

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