---
title: "Get app image release"
method: GET
path: "/api/app-images/{handle}/{slug}/releases/{releaseNumber}"
---

# Get app image release

`GET /api/app-images/{handle}/{slug}/releases/{releaseNumber}`

## Request

- Base URL: `https://reduck.ai`
- URL: `https://reduck.ai/api/app-images/{handle}/{slug}/releases/{releaseNumber}`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Read one release by its number: the files it shipped, the hosts it may reach, its authored settings and its install contract.

## Path parameters

- `handle` string, required: The owner a resource is addressed under: "@username" for a personal scope, or a bare slug for a project.
- `slug` string, required: The image's identifier within its owner's scope. Chosen once and never changed.
- `releaseNumber` integer, required: The release's number, the one shown as `v3`, not an id.

## Response `200`

OK

- AppImageRelease
  - `number` number, required
  - `created_at` string, required
  - `asset_count` number, required
  - `current` boolean, required: True for the release being served, which is the one a rollback moves.
  - `published_at` string, nullable, required: When the bytes were verified. Null for a release whose upload never finished.
  - `assets` object[], required: The files this release shipped.
    - `name` string, required
    - `key` string, required
    - `size` number, required
  - `schema_sha` string, nullable, required: sha256 of the `schema.sql` this release shipped. That file is the CONSOLIDATED head, run only into an app that has no database yet; an app that already has one moves by `migrations` instead.
  - `migrations` object[], required: The ordered migrations this release ships, applied to each app as it reaches this release.
    - `name` string, required
    - `sha` string, required
  - `manifest` AppImageManifest, required
    - `secrets` AppImageSecretDeclaration[], required: Every `${VAR}` the release's grant references, declared so an install can ask for them.
      - `name` string, required
      - `label` string, required: Human label for the field. Falls back to the name when the author wrote none.
      - `description` string, required: Where to get the value, shown under the field. Empty when the author wrote none.
      - `required` boolean, required: False for a secret the app can work without; the form marks the rest as needed.
      - `page` boolean, required: Whether the page may spend this one, rather than only the app's own server-side tasks.
    - `settings` unknown, required
    - `hooks` AppImageHooks, required
      - `init` string, nullable, required: Runs once in an app's life, at its first page open.
      - `newUser` string, nullable, required: Runs once per person, the first time they open the app.
    - `scripts` string[], required: The Reduck scripts the app may run through the `reduck` door, as `[owner/]host/slug` addresses. A run naming any other script is refused. Empty for a release that declares none, and then the door runs nothing.
  - `tools` AppImageToolDeclaration[], required: The tasks this release offers an agent. Empty for a release that declares none.
    - `task` string, required: The task this calls, as in `tasks/<name>.ts`. Also the name an agent calls it by.
    - `description` string, required: What it does, in the words an agent chooses it by.
    - `inputSchema` unknown, required
    - `outputSchema` unknown, required
  - `api_grant` unknown, required
  - `config_defaults` unknown, required
  - `deployed_by` string, nullable, required: The handle of whoever ran the deploy, null once that account is gone or has no handle.

## Other responses

- `401`: Not authenticated
- `403`: Forbidden
- `404`: No such app under that handle, or it has no release with that number.

---

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