Opt an entry in to the public showcase
Publish one entry the authenticated creator owns: it becomes listed at `GET /showcase`, served at `GET /showcase/{slug}`, and its "Molded with putty" badge starts resolving. This is the opt-in that makes an artifact public. Idempotent: publishing an already-published entry returns it unchanged and keeps its original `publishedAt`, so a re-publish does not rewrite the story of when it first appeared. A withdrawn entry cannot be re-published. A retirement is permanent — that is what stops a retired link from being re-pointed at different content — and the refusal answers with the same 404 as a missing entry so a caller cannot map out which slugs have been retired.
Publish one entry the authenticated creator owns: it becomes listed at GET /showcase, served at GET /showcase/{slug}, and its "Molded with putty" badge starts resolving. This is the opt-in that makes an artifact public. Idempotent: publishing an already-published entry returns it unchanged and keeps its original publishedAt, so a re-publish does not rewrite the story of when it first appeared. A withdrawn entry cannot be re-published. A retirement is permanent — that is what stops a retired link from being re-pointed at different content — and the refusal answers with the same 404 as a missing entry so a caller cannot map out which slugs have been retired.
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
Path Parameters
The entry's surrogate id, from POST /showcase or GET /showcase/entries. Not a public identity.
1 <= length <= 64Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/showcase/entries/string/publish"{ "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"}Delete one of the caller's showcase entries DELETE
Delete one entry the authenticated creator owns, along with its remix records. A foreign or missing id answers 404. If the entry was ever published, its slug stays retired rather than being freed.
Opt an entry out of the public showcase POST
Withdraw one entry the authenticated creator owns. It stops being listed, its page and badge stop resolving, and its slug is retired **permanently** — it is never handed to another entry, so a link that used to work can never resolve to different content later. This is the creator's right and needs no justification, which is why there is no second factor and no reason parameter: an opt-out that can be argued with is not an opt-out.