Create a showcase entry
Create a showcase entry for the authenticated creator, as a **draft**. A draft is not public and is not listed. Call `POST /showcase/entries/{entryId}/publish` to opt in. Nothing about an entry is public until the creator says so (§6.3: "Showcase, badge, Spotlight — everyone who opts in, gate: none"), and that is why creation and publication are two calls rather than one. The `slug` is derived from the title and made unique with a numeric suffix when taken, so two creators can both make a "Coffee Shop". The slug is assigned once and never changes — including after a withdrawal — so a link that was shared can never silently resolve to a different project.
Create a showcase entry for the authenticated creator, as a draft. A draft is not public and is not listed. Call POST /showcase/entries/{entryId}/publish to opt in. Nothing about an entry is public until the creator says so (§6.3: "Showcase, badge, Spotlight — everyone who opts in, gate: none"), and that is why creation and publication are two calls rather than one. The slug is derived from the title and made unique with a numeric suffix when taken, so two creators can both make a "Coffee Shop". The slug is assigned once and never changes — including after a withdrawal — so a link that was shared can never silently resolve to a different project.
Authorization
bearerAuth A bearer token. The Account routes accept a Privy access token; the MCP transport accepts an sk- API key issued by POST /account/api-keys.
In: header
Request Body
application/json
The finished artifact to record. Supplying chain and token is what enables the Receipts and Scan links on the public page.
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/showcase/entries" \ -H "Content-Type: application/json" \ -d '{ "kit": "business", "title": "string" }'{ "id": "string", "ownerId": "string", "slug": "string", "kit": "business", "title": "string", "summary": "string", "projectUrl": "string", "chain": "ethereum", "token": "string", "status": "draft", "templateOptIn": true, "remixCount": 0, "publishedAt": "string", "createdAt": "string", "updatedAt": "string"}The caller's showcase entries GET
Every entry the authenticated creator owns, newest first, in **any** status — draft, published, and withdrawn alike. This is the only route that can see a draft, and it is scoped to the caller by an owner filter in the query. A creator's unpublished work is invisible to every other account, and the public listing has no owner dimension through which it could leak.
One of the caller's showcase entries GET
One entry the authenticated creator owns, in any status. An entry owned by another account and an entry that does not exist answer with the same 404, so this route cannot be used to confirm that a guessed id is real.