FOR KIRO CREW AND OTHER CLIENTS
JSON API
A versioned JSON interface over the same catalog, accounts, submissions, claims, moderation and content as the website.
Authentication
Public reads need no authentication. Sign in with POST https://kirocrewapps.com/api/v1/auth/login (email and password) or register with POST https://kirocrewapps.com/api/v1/auth/register. Both return a bearer token:
curl -X POST https://kirocrewapps.com/api/v1/auth/login \
-H 'Content-Type: application/json' \
-d '{"email":"you@example.com","password":"your-password"}'
Send the token on later requests:
curl https://kirocrewapps.com/api/v1/auth/me \
-H 'Authorization: Bearer TOKEN'
The API never signs in from a cookie, so cross-site forms cannot act with your session. Tokens are server-side sessions: they expire, are revoked by logout/password changes/access changes, and honour email-verification and role gates.
The full endpoint list is in the OpenAPI document. Mutations accept JSON (Content-Type: application/json); form-encoded bodies also work for the public action endpoints.
Public catalog
Account actions
Votes are -1, 0 (clear) or 1. Reviews are one per account per listing. Reports and account closure keep the same moderation and audit rules as the website.
Developer and administration
These endpoints require the same permissions as the corresponding pages. The first administrator is still granted with the operator CLI; there is no API bootstrap bypass.
Response shape
Successful responses use {"data": ...}. Collections add meta with page, per_page, total and pages. Errors use an HTTP status plus:
{"error": {"code": "invalid_request", "message": "...", "status": 400}}
The API never exposes internal dedupe keys, account hashes, session digests or SMTP credentials.