API Reference
All API endpoints for programmatic access. Endpoints that require authentication use an admin token passed as a query parameter.
POST
/api/linksCreate a new anonymous message link
Request Body
{
"slug": "my-group",
"title": "Send me anonymous messages",
"description": "Optional description",
"pin": "optional-pin",
"expiresAt": "2026-12-31T23:59:59Z",
"startsAt": "2026-01-01T00:00:00Z",
"maxMessages": 100
}Response
{
"link": { "id": "uuid", "slug": "my-group", ... },
"shareUrl": "https://domain/my-group",
"adminUrl": "https://domain/my-group/admin?token=...",
"adminToken": "64-char-hex-token"
}GET
/api/links/[slug]Get public link information including computed status (active, expired, scheduled, paused)
Response
{
"link": {
"id": "uuid",
"slug": "my-group",
"title": "Send me anonymous messages",
"is_active": true,
"has_pin": false,
"status": "active",
"expires_at": null,
"starts_at": null,
"max_messages": null
}
}POST
/api/links/[slug]/messagesSubmit an anonymous message. Rate limited to 5 per minute. Checks expiry, scheduling, and max messages.
Request Body
{ "content": "Your anonymous message here" }Response
{ "success": true }GET
/api/links/[slug]/messages?token=ADMIN_TOKENGet all messages for a link (admin only)
Response
{
"link": { ... },
"messages": [
{ "id": "uuid", "content": "...", "share_token": "...", "created_at": "..." }
]
}DELETE
/api/links/[slug]/messages/[id]?token=ADMIN_TOKENDelete a specific message (admin only)
Response
{ "success": true }PATCH
/api/links/[slug]?token=ADMIN_TOKENUpdate link settings - toggle active state, change title or description (admin only)
Request Body
{ "isActive": false, "title": "New title" }Response
{ "success": true }GET
/api/messages/[shareToken]Get a single shared message card by its share token
Response
{
"message": {
"content": "...",
"link_title": "...",
"created_at": "..."
}
}POST
/api/cards/uploadUpload a card image to Vercel Blob (requires BLOB_READ_WRITE_TOKEN)
Request Body
FormData: file (PNG), shareToken (string)Response
{
"url": "https://....public.blob.vercel-storage.com/wishpr-cards/token.png",
"filename": "wishpr-cards/token.png"
}