---
topic: quickstart
---

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

# Quickstart

**On this page:** Which route are you on?, Deploy, Keep it (claim), What the person asks next, Showcase, Stuck, or something missing?

Do the steps in order. Open a linked topic only when a step goes wrong.

> Plain words for non-developers; no commands or tokens unless they ask. Ask only for what only they can give (email, a secret, DNS access, a yes on something that cannot be undone). Never invent a link, name or code. Stop when their request works.

Picking up an app someone else started? Read its state first: [resume](https://embarko.ai/docs/resume).

## 0. Which route are you on?

| If | Then |
| --- | --- |
| Embarko tools (deploy_app, read_app...) are in your tool list | Use them. No token, nothing to claim: skip step 2. |
| You can run commands that reach ship.embarko.ai | Use the commands in steps 1-2. |
| You cannot reach ship.embarko.ai (chat app with no terminal, or a blocked sandbox) | Do not paste commands. Ask them to add the Embarko connector for their AI tool (https://embarko.ai/docs/connectors), then ask you again. No connector for their tool: give them a .zip with the files at its top level. They sign in at https://embarko.ai/app (signing up is free), choose Deploy an app, then Upload file, pick the zip and type an app name (lowercase letters, numbers, dashes). When it finishes, the app shows in their app list with its link; ask them to paste the link back. That app is theirs and permanent: nothing to claim. A custom domain is added in its Domain tab (see custom-domain). |

## 1. Deploy

Connector: call deploy_app with { appName, files } (binaries with encoding "base64"), then read_app { action: "status", appName } until it is final. It is already permanent: skip step 2.

Otherwise:

```bash
tar -czf /tmp/app.tar.gz --exclude=node_modules --exclude=.git --exclude='.env*' --exclude=dist --exclude=.next --exclude=venv --exclude=.venv --exclude=__pycache__ --exclude='*.db' -C /path/to/app .
curl -sS -X POST 'https://ship.embarko.ai/apps' -H 'X-App-Name: my-app' -H 'X-Agent-Name: {your-name}' -F 'source=@/tmp/app.tar.gz'
```

Poll:

```bash
curl -sS 'https://ship.embarko.ai/apps/my-app/status'   # once the app is kept, add --oauth2-bearer $DEPLOY_TOKEN
```

Poll every 10s (2s for a static site) until final: live, failed, crashed or not_deployed. Open https://my-app.embarko.app yourself, then give the person the link and app.expiresAt in their local time.

**Done when:** You opened the link and its main feature works (a 200 alone is not enough).

**If it fails:** Follow the reply's next and code. Usual causes: not reading PORT or binding 0.0.0.0; a Dockerfile; manifest not at the top of the folder; WebSockets or cron; data saved next to the code instead of DATA_DIR. Fix and deploy again, same name. 409 name taken: use a close variant (their name, or -site / -app) and mention it with the link.

**Blocked:** No reply, or 403 host_not_allowed from your sandbox: nothing was deployed, do not retry. Use the last row of step 0.

More: [deploy](https://embarko.ai/docs/deploy) (requirements and common errors) · [errors](https://embarko.ai/docs/errors) (every error code and retry rule) · [logs](https://embarko.ai/docs/logs) (why a build failed)

## 2. Keep it (claim)

**Skip if** you deployed through the connector. Otherwise the app is deleted at app.expiresAt (24 hours after the first deploy).

1. Token already in DEPLOY_TOKEN or ~/.embarko/credentials? Go to the redeploy.
2. Otherwise ask for their email and send it once (command below). They paste the token from their inbox; save it to ~/.embarko/credentials.
3. Redeploy: the step 1 command, same name, plus --oauth2-bearer {token}. The reply says claimed: true.
4. From now on send the token on every call, status included: a claimed app answers 404 without it.

body.json:

```json
{"email":"{their email}"}
```

```bash
curl -sS -X POST 'https://ship.embarko.ai/api/public/deploy-tokens/request' -H 'Content-Type: application/json' --data @body.json
```

**Done when:** claimed: true. Tell the person it is permanent.

More: [claim](https://embarko.ai/docs/claim) (rate limits and errors)

## 3. What the person asks next

Only when they ask. Check "done when" before saying it works. Over HTTP every call needs the token.

| They say | Read | Done when |
| --- | --- | --- |
| "Is it working?" | [status](https://embarko.ai/docs/status) | Status is live and the main feature works when you try it. |
| "Fix the broken form / page" | [logs](https://embarko.ai/docs/logs) | You redeployed the fix and a test submission arrives (or the page works). |
| "Keep these records" | [data](https://embarko.ai/docs/data) | A record you saved is still there after a redeploy. Tell them there are no backups. |
| "Add my API key" | [env-vars](https://embarko.ai/docs/env-vars) | The feature that uses the key works. |
| "Use my domain" | [custom-domain](https://embarko.ai/docs/custom-domain) | https://their-domain opens the app. |
| "Let my team log in" / "Make it private" | [app-login](https://embarko.ai/docs/app-login) (Not on Embarko yet: build it in the app) | The right people get in and others are refused. |
| "Undo that update" | [rollback](https://embarko.ai/docs/rollback) | The previous version is serving. |
| "How is it doing?" | [analytics](https://embarko.ai/docs/analytics) | You told them visits and errors in one sentence. |
| "Change the address" | [rename](https://embarko.ai/docs/rename) | They said yes first, and the new address opens the app. |
| "Delete it" | [delete](https://embarko.ai/docs/delete) | They said yes to the app by name, and it is gone. |

## 4. Showcase

Only if they want it public. Draft the listing, show it, publish on their yes. Over HTTP the app must be claimed; with the connector, use the dashboard (see showcase).

**Done when:** The listing page opens, or the event listing is waiting for the organiser and they know.

More: [showcase](https://embarko.ai/docs/showcase) (fields and approval)

## 5. Stuck, or something missing?

Check that step's topic first. If Embarko is wrong, a feature is missing or these docs are unclear, report it with one call (bug, feature request or docs problem): see feedback.

More: [feedback](https://embarko.ai/docs/feedback) (the call, and the report types)

---

[Guide home](https://embarko.ai/docs) · [Rules](https://embarko.ai/docs/prerequisites)