---
topic: showcase
connector: "Not in the connector yet. Connector apps have no deploy token: give the person the approved draft and send them to https://embarko.ai/app/showcase/submit"
api: "PUT https://ship.embarko.ai/api/apps/{app-name}/showcase"
needs_human: The person confirms the listing before it goes public.
requires: [deploy, claim]
---

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

# List it on Showcase

**On this page:** Over HTTP, Examples, Fields, 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), [claim](https://embarko.ai/docs/claim) (over HTTP only).

Showcase is a public gallery of apps built with AI. One listing per app, reused on the public page and on event pages. Act only when the person wants it listed.

**Connector:** Not in the connector yet. Connector apps have no deploy token: give the person the approved draft and send them to https://embarko.ai/app/showcase/submit

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

**Over HTTP**

1. GET https://ship.embarko.ai/api/public/showcase/apps/{app-name} (no token). 404 means not listed yet; otherwise reuse what is there and send only changes.
2. Draft name, tagline, description, category and tags from the app itself.
3. Ask once for what only the person knows: their name or profile link, who else built it, screenshots or a video, and the event page and code if it is for an event. Never invent these.
4. No screenshot from them? A listing with an image gets far more opens than one without, so offer to make one: open the live app, take a screenshot (a browser tool, or a headless browser from your sandbox), upload it to the app's file storage (PUT https://ship.embarko.ai/storage/apps/{app-name}/files/screenshot.png with the deploy token, see files) and put the url in screenshotUrls. Do it on their yes; if you cannot take screenshots, say so and ask them for one instead. Images they give you as files go the same way: upload to file storage, send the url.
5. Show them the draft and get a yes, then send it (example below). Only the fields you send change, so a retry is safe.
6. The reply's status says what happened. approved: give them https://embarko.ai/showcase/app/{app-name}. pending: the event organiser must approve (a valid code skips this; events with auto-approve on never wait). rejected: next gives the reason.

**Example: List an app on an event page**

body.json:

```json
{"collectionSlug":"walkover-hack-2026","code":"WH26","tagline":"Live voting for hackathon demos, built in a day","creatorName":"Ravi Kumar","builtWith":"Claude","category":"Productivity","description":"What it does and who it is for.","videoUrl":"https://youtu.be/abc123"}
```

```bash
curl -sS -X PUT 'https://ship.embarko.ai/api/apps/my-app/showcase' --oauth2-bearer $DEPLOY_TOKEN -H 'Content-Type: application/json' --data @body.json
```

Leave out collectionSlug and code for the public gallery. Reply: 201 the first time, 200 after, with the listing, its status and a one-line next.

**Fields**

- `tagline`: Required on first listing. One line, 60-160 characters.
- `creatorName`: Required on first listing.
- `collectionSlug`: Event page slug: the last part of the event page link (embarko.ai/showcase/{slug}). Ask the person for that link; never guess it. Leave out for the public gallery.
- `code`: Event submit code, if the organiser gave one.
- `name`: Page title. Also changes the app's display name in the dashboard (not its address): leave it out unless the person wants that.
- `description`: Up to 4,000 characters.
- `story`: Up to 600 characters.
- `creatorProfile`: An https link.
- `contributorEmails`: Up to 10, the person listing first. Ask before sending.
- `builtWith`: Claude, Codex, Cursor, Lovable, Replit, or another.
- `category`: AI Tool, Personal, Business, Productivity, Education, Game, Developer Tool, Other.
- `tags`: Up to 8.
- `screenshotUrls`: Up to 10 https images; the first is the card image. Host them in the app's file storage (see files): upload, then send the url from the reply.
- `videoUrl`: A demo video link.
- `customHtml`: Up to 50,000 characters.

**Errors**

| Code | Status | Retry | What to do |
| --- | --- | --- | --- |
| `SHOWCASE_COLLECTION_UNKNOWN` | 404 | No | Wrong event slug. |
| `SHOWCASE_COLLECTION_PRIVATE` | 403 | No | Another company's event page. |
| `unauthorized` | 401 | No | Bad token, or the app is not claimed. |
| `permission_denied` | 403 | No | The person who made this token is not allowed to do this. The reply names the permission and their access to the app (or their role). Nothing changed. Tell the person (say_to_user.no_permission); do not try another way round it. |

**What to tell the person**

- confirm: "Here's how your app will look on Showcase: {draft}. Publish it?"
- screenshot: "Listings with a picture get opened much more. Want me to take a screenshot of your app and use it?"
- done: "Your app is on Showcase: {link}."

**Next:** Check it is live and claimed, draft the listing, confirm, publish.

**Related:** [files](https://embarko.ai/docs/files) · [rename](https://embarko.ai/docs/rename) · [feedback](https://embarko.ai/docs/feedback)

---

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