Platform admin
These endpoints were removed from the public OpenAPI spec (openapi/portrait.yaml) and the public API
reference. A public consumer never calls them. Documented here for staff only.
All endpoints are on api.portrait.intrasys.ai, session-gated, and require the caller to be a
platform admin.
GET /platform/admins — List Platform Admins
Returns { admins: [...] }. 403 if the caller is not an admin.
POST /platform/admins — Grant Platform Admin
Body: { "email": "..." }. The address must already be a verified claim on some account (Portrait
creates no stub rows). 404 if there's no verified account for that address; 429 if rate limited.
DELETE /platform/admins/{userId} — Revoke Platform Admin
Revokes admin from userId. 400 if you attempt to revoke yourself.
GET /platform/metrics — Platform metrics
Aggregate-only by construction — counts over data the service already stores. Portrait keeps no per-hash request log, which is what lets the privacy policy say so. Returns:
{
"totals": {
"accounts": 0,
"verified_emails": 0,
"accounts_with_avatar": 0,
"adoption_pct": 0,
"multi_email_accounts": 0
},
"by_kind": [],
"by_style": [],
"generated_at": "…"
}