---
topic: status
connector: "read_app · action \"status\""
api: "GET https://ship.embarko.ai/apps/{app-name}/status"
requires: [deploy]
---

[← Guide home](https://embarko.ai/docs)

# Is it live?

**On this page:** Statuses, With the connector, Over HTTP, Examples, Polling, Errors, What to tell the person

> Plain words unless the person is a developer. Never invent a link, name or code. [Rules](https://embarko.ai/docs/prerequisites) Needs first: [deploy](https://embarko.ai/docs/deploy).

One call tells you where the app stands. Only "live" means live: a 202 from the deploy does not.

**Connector:** read_app · action "status"

**Done when:** The status is final: live, failed, crashed or not_deployed.

**Statuses**

- `building`: Being built. Keep waiting.
- `publishing`: A static site being published. Keep waiting.
- `starting`: Built, starting up. Keep waiting.
- `live`: Final. Serving: open the link to confirm, then tell the person.
- `failed`: Final. The build failed: read logs, fix, redeploy.
- `crashed`: Final. It built but stopped running: read logs with stream=stderr, fix, redeploy.
- `not_deployed`: Final. Nothing deployed under that name.
- `unknown`: Not final. Keep polling; report it if it lasts 2 minutes.

**With the connector**

1. Call read_app { action: "status", appName }. Add deploymentId to check one deploy.

**Over HTTP**

1. GET https://ship.embarko.ai/apps/{app-name}/status, with Authorization: Bearer {token} once the app is claimed.

**Example: Live**

```bash
curl -sS 'https://ship.embarko.ai/apps/my-app/status'
```

Reply 200:

```json
{"status":"live","app":{"name":"my-app","kind":"service","claimed":false,"expiresAt":"2026-10-10T06:50:46.326Z"},"next":"Live: give the user links.app and tell them it will be deleted at 2026-10-10T06:50:46.326Z unless claimed. To claim it, follow links.help.","links":{"app":"https://my-app.embarko.app","feedback":"https://ship.embarko.ai/apps/my-app/customer-query","help":"https://embarko.ai/docs/claim"}}
```

**Example: Failed**

Reply 200:

```json
{"status":"failed","app":{"name":"my-app","kind":"service","claimed":true},"error":"Exit code 127 means a command in the build script was not found while building your app.","next":"Build failed: read links.logs, fix the cause, and redeploy with the same name.","links":{"logs":"https://ship.embarko.ai/apps/my-app/logs?stream=stderr","feedback":"https://ship.embarko.ai/apps/my-app/customer-query","help":"https://embarko.ai/docs/feedback"}}
```

**Polling**

- GET https://ship.embarko.ai/apps/{app-name}/status
- Every 10 seconds for a server app, every 2 seconds for a static site.
- Keep waiting on: `building`, `publishing`, `starting`.
- Final: `live` (Done. Open the link, then tell the person.); `failed` (Read the logs, fix, redeploy.); `crashed` (Read the logs with stream=stderr, fix, redeploy.); `not_deployed` (Nothing under that name. Check the name, or deploy.)
- `unknown`: Not final. Keep polling; if it stays unknown for 2 minutes, report it with the feedback topic.
- Give up after 15 minutes: Stop polling, read the logs, tell the person it is taking unusually long, and report it. Embarko sets no build timeout; the 15-minute limit is yours, so you do not wait forever. Older replies may name only live and failed: crashed and not_deployed are final too.
- Send the same Authorization header you deployed with. A claimed app answers 404 without it.

**Errors**

| Code | Status | Retry | What to do |
| --- | --- | --- | --- |
| `not_found` | 404 | No | No such app, or it is claimed and you sent no token. Check the name and the token. |
| `app_renamed` | 404 | No | The app moved. Use newName from the reply from now on. |
| `unauthorized` | 401 | No | The token was rejected. |

**What to tell the person**

- still_building: "Still building. Nothing needed from you."
- live: "Your app is live: {link}."

**Next:** Poll until the status is final.

**Related:** [logs](https://embarko.ai/docs/logs) · [rollback](https://embarko.ai/docs/rollback)

---

[Guide home](https://embarko.ai/docs) · JSON: add .json