| GET | /api/users | admin / domain | List users |
| POST | /api/users | admin / domain | Create user (domain-scoped key also creates a profile) |
| GET | /api/users/:id | admin | Get user details |
| PUT | /api/users/:id | admin | Update user details |
| DELETE | /api/users/:id | admin | Delete user and all profiles |
| POST | /api/users/:id/password | admin | Set or test password. Body: {"password","test_only":bool} |
| GET | /api/domains | admin | List domains |
| POST | /api/domains | admin | Create domain |
| GET | /api/domains/:id | admin | Get domain details |
| PUT | /api/domains/:id | admin | Update domain |
| DELETE | /api/domains/:id | admin | Delete domain and associated profiles/keys |
| GET | /api/domains/:id/keys | admin | List API keys for a domain |
| POST | /api/domains/:id/keys | admin | Create a new API key for a domain |
| GET | /api/profiles | admin / domain | List profiles (domain-scoped keys see only their domain) |
| POST | /api/profiles | admin | Create a profile for any domain |
| PUT | /api/profiles/:id | admin | Update profile status |
| DELETE | /api/profiles/:id | admin / domain | Remove profile (domain-scoped: only own domain) |
| GET | /api/admin/keys | admin | List admin API keys |
| POST | /api/admin/keys | admin | Create admin API key. Body: {"user_id":int} (optional) |
| DELETE | /api/admin/keys/:id | admin | Retire an admin key |
| GET | /api/userdata | admin / domain | Get userdata. Query: ?user_id=X&domain_id=Y |
| PUT | /api/userdata | admin / domain | Upsert userdata. Body: {"user_id","domain_id","data":{…}} |