---
title: "Re-fetch a hosted app's manifest URL (human workspace owner only)"
method: POST
path: "/v1/apps/{id}/refresh"
tags: ["Apps"]
---

# Re-fetch a hosted app's manifest URL (human workspace owner only)

`POST /v1/apps/{id}/refresh`

## Request

- Base URL: `https://api.talonic.com`
- URL: `https://api.talonic.com/v1/apps/{id}/refresh`
- Auth: HTTP bearer

Consults the vendor's URL for a new document. A changed document is stored as a `fetched` candidate and NOTHING else moves — `active_version`, every install's `pending_approval_version`, and subscription rows are untouched; the approved claim keeps running until an owner approves the candidate (`POST .../install/approve`). A fetch or validation failure is RECORDED on the app (`last_fetch_error`) and answered as a 422 whose message starts `refresh_failed:` — the app stays live on its last-approved version either way.

## Path parameters

- `id` string, uuid, required

## Response `200`

The vendor's document was read.

- object
  - `changed` boolean: True when a new candidate version was stored.
  - `version` integer: The candidate version number when changed, else the version already on file.

## Other responses

- `403`: The API key does not have the required scope.
- `404`: The requested resource was not found.
- `409`: The app is not hosted (source is pushed) — there is no manifest URL to refresh.
- `422`: The fetch or the validation of the served document failed. `message` starts `refresh_failed:` followed by the reason (for example `refresh_failed: invalid_manifest: /subscriptions_endpoint must lie in an origin the manifest vouches for (...)`); `details` carries `{ changed: false, error }`; the same reason is recorded on the app as `last_fetch_error`.

---

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