---
topic: showcase-pages
connector: "Not in the connector yet: send the person to https://embarko.ai/app/showcase/new"
api: "PUT https://ship.embarko.ai/api/showcase-pages/{slug}"
needs_human: The person names the page and approves its content before it goes live.
requires: [claim]
---

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

# Make or change a showcase page

**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: [claim](https://embarko.ai/docs/claim) (over HTTP only).

A showcase page collects apps for a hackathon, class or demo day at embarko.ai/showcase/{slug}. The person describes it; you write the page content as HTML and create or update the page with the deploy token. Hand back two links when done.

**Connector:** Not in the connector yet: send the person to https://embarko.ai/app/showcase/new

**Done when:** The page is live and the person has both links: the manage page in their Embarko panel and the public page.

**Over HTTP**

1. You need a deploy token for the person's workspace (see claim). An existing app's token works; the page is not tied to an app.
2. To change a page: GET https://ship.embarko.ai/api/showcase-pages/{slug} first and edit what is there. Never rewrite content the person did not ask to change. The slug is the last part of the page link; ask for it, never guess.
3. To make a page: ask for the name and what the page should say. Make the slug from the name (lowercase, hyphens, 3-40 characters) and confirm it.
4. Write the content as one self-contained HTML block: markup, inline or <style> CSS, https images, links. No scripts, forms or event handlers: the page runs in a sandbox where they do nothing. Keep it under 50,000 characters.
5. Show the person the plan (name, address, what the page says), then PUT it (example below). 201 = created, 200 = updated. Only the fields you send change.
6. Reply with the two links from the response: panelUrl (manage the page, approve apps, share the code) and publicUrl (what visitors see).

**Example: Create a page for a hackathon**

body.json:

```json
{"title":"Walkover Hack 2026","intro":"Two days, one page of what everyone built.","customHtml":"<h2>Schedule</h2><p>Sat 10:00 kickoff · Sun 16:00 demos</p>","autoApprove":true}
```

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

Reply: the page with submitCode, panelUrl and publicUrl, and a one-line next. Call it again with just {customHtml} to change the content later.

**Fields**

- `title`: Required to create. Up to 80 characters. Can be changed later.
- `intro`: One or two lines under the title, up to 600 characters. "" clears it.
- `customHtml`: The page content, shown between the header and the apps. Up to 50,000 characters. "" clears it.
- `autoApprove`: true: every app sent to the page goes on at once. false (default): the organiser approves each one unless it was sent with the page's code. Ask the person.

**Errors**

| Code | Status | Retry | What to do |
| --- | --- | --- | --- |
| `SHOWCASE_SLUG_TAKEN` | 409 | No | Another workspace owns that address. Pick a different slug with the person. |
| `SHOWCASE_PAGE_NOT_FOUND` | 404 | No | No page with that slug in this workspace. Check the link; to make a new page, PUT it. |
| `validation_failed` | 400 | No | Bad slug, missing title on create, HTML over 50,000 characters, or no fields sent. |
| `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 the page: {name} at embarko.ai/showcase/{slug}, saying {summary}. Make it live?"
- done: "Your showcase page is live. Manage it: {panelUrl}. Public page: {publicUrl}."

**Next:** Ask what the page is for, draft it, confirm, PUT it, give both links.

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

---

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