| path | docs/api/User_Token_Management_API.mdx | |||||
|---|---|---|---|---|---|---|
| title | User & Token Management API | |||||
| description | Complete API reference for user and token management endpoints in SveltyCMS. | |||||
| order | 3 | |||||
| icon | mdi:account-key | |||||
| author | admin | |||||
| created | 2025-07-11 | |||||
| updated | 2025-10-05 | |||||
| tags |
|
This document covers the REST API endpoints for managing users and invitation tokens in SveltyCMS. All endpoints require appropriate authentication and permissions.
All API endpoints require authentication. Include the session cookie or bearer token in your requests.
Cookie: session=your-session-id
# or
Authorization: Bearer your-api-tokenGET /api/userPermission Required: user:read or admin role
Response:
{
"success": true,
"users": [
{
"_id": "user123",
"username": "johndoe",
"email": "john@example.com",
"role": "user",
"blocked": false,
"activeSessions": 2,
"lastAccess": "2025-07-11T10:30:00Z",
"createdAt": "2025-01-15T09:00:00Z",
"updatedAt": "2025-07-11T10:30:00Z"
}
]
}POST /api/user/batchPermission Required: user:manage or admin role
Request Body:
{
"action": "block" | "unblock" | "delete",
"ids": ["user1", "user2", "user3"]
}Response:
{
"success": true,
"message": "Users blocked successfully",
"results": [
{
"id": "user1",
"success": true,
"message": "User blocked"
},
{
"id": "user2",
"success": false,
"message": "User not found"
}
]
}PUT /api/user/[userId]Permission Required: user:edit or admin role (or own user)
Request Body:
{
"username": "newusername",
"email": "newemail@example.com",
"role": "editor",
"blocked": false
}Response:
{
"success": true,
"message": "User updated successfully",
"user": {
"_id": "user123",
"username": "newusername",
"email": "newemail@example.com",
"role": "editor",
"blocked": false,
"updatedAt": "2025-07-11T10:30:00Z"
}
}GET /api/tokenPermission Required: token:read or admin role
Query Parameters:
includeExpired=true- Include expired tokens (default: false)type=user-invite- Filter by token typeemail=user@example.com- Filter by email
Response:
{
"success": true,
"tokens": [
{
"_id": "token123",
"token": "abc123def456...",
"email": "newuser@example.com",
"username": "newuser",
"role": "user",
"type": "user-invite",
"blocked": false,
"expires": "2025-07-18T23:59:59Z",
"createdAt": "2025-07-11T10:00:00Z",
"updatedAt": "2025-07-11T10:00:00Z"
}
]
}POST /api/tokenPermission Required: token:create or admin role
Request Body:
{
"email": "newuser@example.com",
"username": "newuser",
"role": "user",
"type": "user-invite",
"expires": "7d"
}Expiration Options:
"1h"- 1 hour"1d"- 1 day"7d"- 7 days (default)"30d"- 30 days"90d"- 90 days
Response:
{
"success": true,
"message": "Token created and email sent",
"token": {
"_id": "token123",
"token": "abc123def456...",
"email": "newuser@example.com",
"expires": "2025-07-18T23:59:59Z"
}
}PUT /api/token/[tokenId]Permission Required: token:edit or admin role
Request Body:
{
"email": "updated@example.com",
"username": "updateduser",
"role": "editor",
"expires": "2025-08-11T23:59:59Z",
"blocked": false
}Response:
{
"success": true,
"message": "Token updated successfully",
"token": {
"_id": "token123",
"email": "updated@example.com",
"username": "updateduser",
"role": "editor",
"blocked": false,
"expires": "2025-08-11T23:59:59Z",
"updatedAt": "2025-07-11T10:30:00Z"
}
}POST /api/token/batchPermission Required: token:manage or admin role
Request Body:
{
"action": "block" | "unblock" | "delete",
"ids": ["token1", "token2", "token3"]
}Actions:
block- Temporarily disable tokens (reversible)unblock- Re-enable blocked tokensdelete- Permanently delete tokens (irreversible)
Response:
{
"success": true,
"message": "Tokens blocked successfully",
"results": [
{
"id": "token1",
"success": true,
"message": "Token blocked"
},
{
"id": "token2",
"success": true,
"message": "Token blocked"
}
]
}POST /api/token/validatePublic endpoint (no authentication required)
Request Body:
{
"token": "abc123def456...",
"type": "user-invite"
}Response (Valid):
{
"isValid": true,
"message": "Token is valid",
"details": {
"_id": "token123",
"email": "user@example.com",
"username": "username",
"role": "user",
"expires": "2025-07-18T23:59:59Z"
}
}Response (Invalid):
{
"isValid": false,
"message": "Token is expired, blocked, or invalid"
}POST /api/token/consumePublic endpoint (used during registration)
Request Body:
{
"token": "abc123def456...",
"userId": "user123"
}Response:
{
"success": true,
"message": "Token consumed successfully"
}POST /api/auth/signupPublic endpoint
Request Body:
{
"username": "newuser",
"email": "newuser@example.com",
"password": "securepassword123",
"confirm_password": "securepassword123",
"token": "abc123def456..."
}Response:
{
"success": true,
"message": "User created successfully",
"user": {
"_id": "user123",
"username": "newuser",
"email": "newuser@example.com",
"role": "user"
}
}POST /api/auth/oauth?invite_token=abc123def456...Public endpoint
Initiates OAuth flow with invitation token attached.
{
"success": false,
"message": "Error description",
"code": "ERROR_CODE",
"details": {
"field": "validation error message"
}
}Authentication Errors:
AUTH_REQUIRED(401) - Authentication requiredINSUFFICIENT_PERMISSIONS(403) - Missing required permissionsINVALID_SESSION(401) - Session expired or invalid
Validation Errors:
VALIDATION_FAILED(400) - Request validation failedINVALID_TOKEN(400) - Token is invalid, expired, or blockedEMAIL_EXISTS(409) - Email already registeredUSERNAME_EXISTS(409) - Username already taken
Resource Errors:
USER_NOT_FOUND(404) - User does not existTOKEN_NOT_FOUND(404) - Token does not existRESOURCE_BLOCKED(403) - Resource is blocked
Server Errors:
INTERNAL_ERROR(500) - Internal server errorDATABASE_ERROR(500) - Database operation failedEMAIL_SEND_FAILED(500) - Failed to send invitation email
API endpoints are rate-limited to prevent abuse:
- Token Creation: 10 tokens per hour per user
- User Operations: 100 requests per hour per user
- Registration: 5 attempts per hour per IP
- Token Validation: 20 requests per minute per IP
Rate limit headers are included in responses:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1625097600user:read- View user informationuser:edit- Edit user profilesuser:manage- Full user management (block, delete, etc.)user:create- Create new users
token:read- View token informationtoken:create- Create invitation tokenstoken:edit- Edit existing tokenstoken:manage- Full token management (block, delete, etc.)
system:admin- Full system administration accesssystem:audit- Access to audit logs and reports
import { SveltyCMSClient } from '@svelty/cms-client';
const client = new SveltyCMSClient({
baseURL: 'https://your-cms.com',
sessionToken: 'your-session-token'
});
// Create invitation token
const token = await client.tokens.create({
email: 'newuser@example.com',
role: 'user',
expires: '7d'
});
// Block multiple users
const result = await client.users.batchOperation({
action: 'block',
ids: ['user1', 'user2']
});Create Token:
curl -X POST https://your-cms.com/api/token \
-H "Content-Type: application/json" \
-H "Cookie: session=your-session" \
-d '{
"email": "newuser@example.com",
"role": "user",
"expires": "7d"
}'Block Users:
curl -X POST https://your-cms.com/api/user/batch \
-H "Content-Type: application/json" \
-H "Cookie: session=your-session" \
-d '{
"action": "block",
"ids": ["user1", "user2"]
}'Configure webhooks to receive notifications about user and token events:
user.created- New user registereduser.updated- User profile updateduser.blocked- User account blockedtoken.created- Invitation token createdtoken.consumed- Token used for registrationtoken.expired- Token has expired
{
"event": "user.created",
"timestamp": "2025-07-11T10:30:00Z",
"data": {
"user": {
"_id": "user123",
"username": "newuser",
"email": "newuser@example.com",
"role": "user"
},
"token": {
"_id": "token123",
"consumed": true
}
}
}