AI-First API Documentation

X24 LABS - ADMIN API

Centralized administration API for all X24 Labs applications.

> Tell your AI agent: "Learn https://api.x24labs.io"
117
Endpoints
19
Categories
v1.0.0
Version

Auth

Back Office authentication

4 endpoints

Users

Admin user management

6 endpoints

Apps

Application management

8 endpoints

API Keys

API key management for backend-to-backend authentication

8 endpoints

Tickets

Support tickets management

15 endpoints

Health

Health checks

1 endpoints

Magic Link

Passwordless end-user authentication

2 endpoints

Wants

Feature request board with voting and roadmap

11 endpoints

Feedback

Quick anonymous feedback submission

8 endpoints

Joinlist

2 endpoints

Email Tracking

2 endpoints

Webhooks

2 endpoints

Contacts

6 endpoints

Slack Routing

4 endpoints

Templates

9 endpoints

Email Jobs

3 endpoints

Email Events

3 endpoints

Email Analytics

4 endpoints

Newsletter

19 endpoints

Available formats

Machine-readable

No separate URL to discover. Your AI agent hits this page directly and receives the token-optimized format — no /llms.txt convention required.

curl -H "Accept: text/markdown" https://api.x24labs.io/

Authentication

This API supports the following authentication methods:

MethodHeaderUse case
JWT Bearer TokenAuthorization: Bearer <token>Obtain via POST /auth/login.
API Key (apiKeyAuth)X-API-Key: <key>Key in header.

Auth

Back Office authentication

  • POST /auth/login Back Office team login None required
    200 application/json
    {
      "success": true,
      "token": "string",
      "user": {
        "id": "string",
        "email": "string",
        "name": "string",
        "role": "admin"
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /auth/refresh Refresh JWT token Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "token": "string",
      "user": {}
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /auth/hash-password [DEV] Generate password hash None required
    200 application/json
    {
      "hash": "string"
    }
  • GET /auth/me Current user information Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "user": {
        "id": "string",
        "email": "string",
        "name": "string",
        "role": "string"
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }

Users

Admin user management

  • GET /users/ List users Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": [
        {
          "_id": "string",
          "email": "string",
          "firstName": "string",
          "lastName": "string",
          "role": "string",
          "isActive": false,
          "profile": {
            "avatar": "string",
            "bio": "string",
            "phone": "string",
            "timezone": "string",
            "language": "string"
          },
          "settings": {
            "notifications": {
              "email": ...,
              "push": ...
            },
            "theme": "string",
            "defaultApp": "string"
          },
          "lastLoginAt": "string",
          "loginCount": 0,
          "createdAt": "string",
          "updatedAt": "string"
        }
      ]
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /users/ Create user Bearer Token (JWT)
    201 application/json
    {
      "success": true,
      "data": {},
      "message": "string"
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    409 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /users/{id} Get user by ID Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {}
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /users/{id} Update user Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {},
      "message": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • DELETE /users/{id} Delete user Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "message": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /users/{id}/password Update user password Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "message": "string"
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }

Apps

Application management

  • GET /apps List of available applications Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": [
        {
          "id": "app1",
          "name": "App 1",
          "features": {
            "canEditTemplates": false,
            "canEditUsers": false,
            "canViewMetrics": false
          }
        }
      ]
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/apps/ List apps (admin) Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": [
        {
          "_id": "string",
          "id": "string",
          "name": "string",
          "description": "string",
          "features": {},
          "slackChannels": {},
          "allowedOrigins": ["string"],
          "publicKey": "string",
          "active": false,
          "createdAt": "string",
          "updatedAt": "string"
        }
      ]
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /admin/apps/ Create app Bearer Token (JWT)
    201 application/json
    {
      "success": false,
      "data": {
        "_id": "string",
        "id": "string",
        "name": "string",
        "description": "string",
        "features": {},
        "slackChannels": {},
        "allowedOrigins": ["string"],
        "publicKey": "string",
        "active": false,
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    409 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/apps/{id} Get app by id Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "_id": "string",
        "id": "string",
        "name": "string",
        "description": "string",
        "features": {},
        "slackChannels": {},
        "allowedOrigins": ["string"],
        "publicKey": "string",
        "active": false,
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /admin/apps/{id} Update app Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "_id": "string",
        "id": "string",
        "name": "string",
        "description": "string",
        "features": {},
        "slackChannels": {},
        "allowedOrigins": ["string"],
        "publicKey": "string",
        "active": false,
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • DELETE /admin/apps/{id} Delete app Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "message": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /admin/apps/{id}/rotate-key Rotate app publicKey Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "id": "string",
        "publicKey": "string"
      }
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /admin/apps/{id}/toggle Toggle app active flag Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "_id": "string",
        "id": "string",
        "name": "string",
        "description": "string",
        "features": {},
        "slackChannels": {},
        "allowedOrigins": ["string"],
        "publicKey": "string",
        "active": false,
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }

API Keys

API key management for backend-to-backend authentication

  • GET /api-keys/stats API key statistics Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {
        "total": 0,
        "active": 0,
        "inactive": 0,
        "expired": 0,
        "byApp": {}
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /api-keys/ List API keys Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": [
        {
          "_id": "string",
          "appId": "string",
          "name": "string",
          "description": "string",
          "allowedOrigins": ["string"],
          "isActive": false,
          "lastUsed": "string",
          "expiresAt": "string",
          "createdBy": "string",
          "createdAt": "string",
          "updatedAt": "string"
        }
      ],
      "pagination": {
        "page": 0,
        "limit": 0,
        "total": 0,
        "pages": 0
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /api-keys/ Create API key Bearer Token (JWT)
    201 application/json
    {
      "success": true,
      "data": {
        "_id": "string",
        "key": "string",
        "appId": "string",
        "name": "string",
        "description": "string",
        "allowedOrigins": ["string"],
        "isActive": false,
        "expiresAt": "string",
        "createdBy": "string",
        "createdAt": "string"
      },
      "message": "string"
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /api-keys/{keyId} Get API key Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {
        "_id": "string",
        "key": "string",
        "appId": "string",
        "name": "string",
        "description": "string",
        "allowedOrigins": ["string"],
        "isActive": false,
        "lastUsed": "string",
        "expiresAt": "string",
        "createdBy": "string",
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /api-keys/{keyId} Update API key Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {},
      "message": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • DELETE /api-keys/{keyId} Delete API key Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "message": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /api-keys/{keyId}/revoke Revoke API key Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {},
      "message": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /api-keys/{keyId}/regenerate Regenerate API key Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {
        "_id": "string",
        "key": "string",
        "appId": "string",
        "name": "string",
        "isActive": false,
        "createdAt": "string"
      },
      "message": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }

Tickets

Support tickets management

  • GET /tickets/ List all tickets Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": [
        {}
      ],
      "pagination": {
        "page": 0,
        "limit": 0,
        "total": 0,
        "pages": 0
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /tickets/{messageId} Get ticket by ID Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {}
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /tickets/{messageId} Update ticket Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {},
      "message": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • DELETE /tickets/{messageId} Delete ticket Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "message": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /tickets/{messageId}/status Update ticket status Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {},
      "message": "string"
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /{appId}/tickets/stats Ticket statistics Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {
        "total": 0,
        "byStatus": {},
        "byTopic": {},
        "byPriority": {},
        "recentActivity": [
          {
            "_id": "string",
            "subject": "string",
            "email": "string",
            "status": "string",
            "priority": "string",
            "createdAt": "string"
          }
        ],
        "volumeOverTime": [
          {
            "date": "string",
            "count": 0
          }
        ],
        "averageResolutionTime": 0
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /{appId}/tickets/ Create ticket with attachments Bearer Token (JWT)
    201 application/json
    {
      "success": true,
      "data": {
        "_id": "string",
        "appId": "string",
        "shopId": "string",
        "topic": "string",
        "email": "string",
        "subject": "string",
        "message": "string",
        "status": "string",
        "priority": "string",
        "attachments": [
          {
            "url": "string",
            "key": "string",
            "filename": "string",
            "mimetype": "string",
            "size": 0,
            "uploadedAt": "string"
          }
        ],
        "createdAt": "string",
        "updatedAt": "string"
      },
      "message": "string"
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /{appId}/tickets/ List tickets Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": [
        {}
      ],
      "pagination": {
        "page": 0,
        "limit": 0,
        "total": 0,
        "pages": 0
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • DELETE /{appId}/tickets/ Bulk delete tickets Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "message": "string",
      "deletedCount": 0
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /{appId}/tickets/{messageId} Get ticket by ID Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {}
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /{appId}/tickets/{messageId} Update ticket Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {},
      "message": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • DELETE /{appId}/tickets/{messageId} Delete ticket Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "message": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /{appId}/tickets/{messageId}/status Update ticket status Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {},
      "message": "string"
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /{appId}/tickets/{messageId}/messages Add message to ticket Bearer Token (JWT)
    201 application/json
    {
      "success": true,
      "data": {},
      "message": "string"
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /{appId}/tickets/{messageId}/messages Get ticket messages Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": [
        {
          "_id": "string",
          "content": "string",
          "isCustomer": false,
          "authorEmail": "string",
          "authorName": "string",
          "createdAt": "string"
        }
      ]
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }

Health

Health checks

  • GET /health Server health check None required
    200 application/json
    {
      "status": "ok",
      "timestamp": "string",
      "uptime": 0,
      "memory": {
        "rss": "string",
        "heapUsed": "string",
        "heapTotal": "string"
      },
      "database": {
        "connected": false,
        "modelsCount": 0
      }
    }

Wants

Feature request board with voting and roadmap

  • GET /{appId}/wants/ List wants API Key (header: X-API-Key)
    200 application/json
    {
      "success": true,
      "data": [
        {
          "_id": "string",
          "appId": "string",
          "title": "string",
          "description": "string",
          "category": "string",
          "status": "string",
          "voteCount": 0,
          "hasVoted": false,
          "authorEmail": "string",
          "createdAt": "string",
          "updatedAt": "string"
        }
      ],
      "pagination": {
        "page": 0,
        "limit": 0,
        "total": 0,
        "pages": 0
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /{appId}/wants/ Submit a want API Key (header: X-API-Key)
    201 application/json
    {
      "success": true,
      "data": {
        "_id": "string",
        "appId": "string",
        "title": "string",
        "description": "string",
        "category": "string",
        "status": "string",
        "voteCount": 0,
        "hasVoted": false,
        "authorEmail": "string",
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    429 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /{appId}/wants/{id} Get want by ID API Key (header: X-API-Key)
    200 application/json
    {
      "success": true,
      "data": {
        "_id": "string",
        "appId": "string",
        "title": "string",
        "description": "string",
        "category": "string",
        "status": "string",
        "voteCount": 0,
        "hasVoted": false,
        "authorEmail": "string",
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /{appId}/wants/{id}/vote Vote on a want API Key (header: X-API-Key)
    200 application/json
    {
      "success": true,
      "data": {
        "voteCount": 0,
        "hasVoted": false
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
    429 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/{appId}/wants/stats Feature request statistics Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {
        "total": 0,
        "byStatus": {},
        "byCategory": {},
        "byPriority": {}
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/{appId}/wants/ List wants (admin) Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": [
        {
          "_id": "string",
          "appId": "string",
          "title": "string",
          "description": "string",
          "category": "string",
          "status": "string",
          "priority": "string",
          "voteCount": 0,
          "authorEmail": "string",
          "createdAt": "string",
          "updatedAt": "string"
        }
      ],
      "pagination": {
        "page": 0,
        "limit": 0,
        "total": 0,
        "pages": 0
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/{appId}/wants/{id} Get want by ID (admin) Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {
        "_id": "string",
        "appId": "string",
        "title": "string",
        "description": "string",
        "category": "string",
        "status": "string",
        "priority": "string",
        "voteCount": 0,
        "authorEmail": "string",
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /admin/{appId}/wants/{id} Update want Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {
        "_id": "string",
        "appId": "string",
        "title": "string",
        "description": "string",
        "category": "string",
        "status": "string",
        "priority": "string",
        "voteCount": 0,
        "authorEmail": "string",
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • DELETE /admin/{appId}/wants/{id} Delete want Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "message": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /admin/{appId}/wants/{id}/status Update want status Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {
        "_id": "string",
        "appId": "string",
        "title": "string",
        "description": "string",
        "category": "string",
        "status": "string",
        "priority": "string",
        "voteCount": 0,
        "authorEmail": "string",
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /admin/{appId}/wants/{id}/priority Update want priority Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {
        "_id": "string",
        "appId": "string",
        "title": "string",
        "description": "string",
        "category": "string",
        "status": "string",
        "priority": "string",
        "voteCount": 0,
        "authorEmail": "string",
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }

Feedback

Quick anonymous feedback submission

  • POST /{appId}/feedback/ Submit feedback None required
    201 application/json
    {
      "success": true,
      "data": {
        "_id": "string",
        "appId": "string",
        "type": "string",
        "subject": "string",
        "message": "string",
        "email": "string",
        "status": "string",
        "priority": "string",
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    429 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/{appId}/feedback/stats Feedback statistics Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {
        "total": 0,
        "byType": {},
        "byStatus": {}
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/{appId}/feedback/ List feedback Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": [
        {}
      ],
      "pagination": {
        "page": 0,
        "limit": 0,
        "total": 0,
        "pages": 0
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/{appId}/feedback/{id} Get feedback by ID Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {}
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /admin/{appId}/feedback/{id} Update feedback Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {}
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • DELETE /admin/{appId}/feedback/{id} Delete feedback Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "message": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /admin/{appId}/feedback/{id}/status Update feedback status Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {}
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /admin/{appId}/feedback/{id}/priority Update feedback priority Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {}
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }

Joinlist

  • POST /joinlist Public newsletter signup None required
    200 application/json
    {
      "success": false,
      "alreadySubscribed": false,
      "unsubscribeUrl": "string"
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    403 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
    429 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /unsubscribe/{token} Public unsubscribe confirmation None required
    200 application/json
    "string"

Email Tracking

  • GET /o/{token} Open tracking pixel None required
    200 application/json
    "string"
  • GET /c/{token} Click tracking redirect None required
    302 application/json
    "string"

Webhooks

  • POST /email-events/resend Resend email webhook receiver None required
    200 application/json
    {
      "success": false,
      "processed": false,
      "eventId": "string"
    }
  • POST /email-events/cold-provider Cold email provider webhook (stub) None required
    200 application/json
    {
      "success": true,
      "message": "string"
    }

Contacts

  • GET /admin/contacts/ List contacts Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": [
        {}
      ],
      "pagination": {
        "page": 0,
        "limit": 0,
        "total": 0,
        "pages": 0
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/contacts/{id} Get contact by ID Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {}
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • DELETE /admin/contacts/{id} GDPR delete contact Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "message": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /admin/contacts/{id}/consent Update consent for a category Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {},
      "message": "string"
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /admin/contacts/{id}/opt-out Global opt-out Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {},
      "message": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/contacts/{id}/export GDPR data export Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {}
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }

Slack Routing

  • GET /admin/slack-routing/ List routing rules Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": [
        {
          "_id": "string",
          "appId": "string",
          "channel": "string",
          "webhookUrl": "string",
          "active": false,
          "createdAt": "string"
        }
      ]
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /admin/slack-routing/ Create routing rule Bearer Token (JWT)
    201 application/json
    {
      "success": false,
      "data": {}
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    409 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /admin/slack-routing/{id} Update routing rule Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {}
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • DELETE /admin/slack-routing/{id} Delete routing rule Bearer Token (JWT)
    200 application/json
    {
      "success": false
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }

Templates

  • GET /admin/templates/categories Template languages Bearer Token (JWT)
    No response body
  • GET /admin/templates/ List templates Bearer Token (JWT)
    No response body
  • POST /admin/templates/ Create template Bearer Token (JWT)
    No response body
  • GET /admin/templates/{templateId} Get template by ID Bearer Token (JWT)
    No response body
  • PUT /admin/templates/{templateId} Update template (full) Bearer Token (JWT)
    No response body
  • PATCH /admin/templates/{templateId} Update template (partial) Bearer Token (JWT)
    No response body
  • DELETE /admin/templates/{templateId} Delete template Bearer Token (JWT)
    No response body
  • PATCH /admin/templates/{templateId}/toggle Toggle template active status Bearer Token (JWT)
    No response body
  • POST /admin/templates/{templateId}/duplicate Duplicate template Bearer Token (JWT)
    No response body

Email Jobs

  • GET /admin/email-jobs/ List email jobs Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": [
        {
          "_id": "string",
          "type": "string",
          "status": "string",
          "priority": 0,
          "payload": {},
          "result": {},
          "attempts": 0,
          "maxAttempts": 0,
          "lastError": "string",
          "scheduledAt": "string",
          "startedAt": "string",
          "completedAt": "string",
          "createdAt": "string"
        }
      ],
      "pagination": {
        "page": 0,
        "limit": 0,
        "total": 0,
        "pages": 0
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/email-jobs/stats Email job statistics Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "pending": 0,
        "processing": 0,
        "completed": 0,
        "failed": 0,
        "dead": 0,
        "total": 0,
        "progress": {
          "total": 0,
          "completed": 0,
          "failed": 0,
          "pending": 0,
          "processing": 0,
          "dead": 0,
          "percentage": 0
        }
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/email-jobs/{id} Get email job details Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "_id": "string",
        "type": "string",
        "status": "string",
        "priority": 0,
        "payload": {},
        "result": {},
        "attempts": 0,
        "maxAttempts": 0,
        "lastError": "string",
        "scheduledAt": "string",
        "startedAt": "string",
        "completedAt": "string",
        "createdAt": "string"
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }

Email Events

  • GET /admin/email-events/ List email events Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": [
        {
          "_id": "string",
          "contactId": "string",
          "messageId": "string",
          "campaignId": "string",
          "provider": "string",
          "type": "string",
          "createdAt": "string"
        }
      ],
      "pagination": {
        "page": 0,
        "limit": 0,
        "total": 0,
        "pages": 0
      }
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/email-events/message/{messageId} Get events for a message Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": [
        {
          "_id": "string",
          "type": "string",
          "provider": "string",
          "createdAt": "string"
        }
      ]
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/email-events/campaign/{campaignId}/stats Campaign event statistics Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "sent": 0,
        "delivered": 0,
        "opened": 0,
        "clicked": 0,
        "bounced": 0,
        "openRate": 0,
        "clickRate": 0
      }
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }

Email Analytics

  • GET /admin/email-events/analytics/campaigns/{campaignId} Campaign analytics Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "campaignId": "string",
        "sent": 0,
        "delivered": 0,
        "opened": 0,
        "uniqueOpens": 0,
        "clicked": 0,
        "uniqueClicks": 0,
        "bounced": 0,
        "complained": 0,
        "unsubscribed": 0,
        "openRate": 0,
        "clickThroughRate": 0,
        "topLinks": [
          {
            "url": "string",
            "clicks": 0
          }
        ],
        "timeline": [
          {
            "date": "string",
            "type": "string",
            "count": 0
          }
        ]
      }
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/email-events/analytics/campaigns/{campaignId}/recipients Campaign recipients breakdown Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": [
        {
          "contactId": "string",
          "events": ["string"],
          "lastEvent": "string"
        }
      ],
      "pagination": {
        "page": 0,
        "limit": 0,
        "total": 0,
        "pages": 0
      }
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/email-events/analytics/contacts/{contactId} Contact engagement history Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "contactId": "string",
        "totalSent": 0,
        "totalOpened": 0,
        "totalClicked": 0,
        "totalBounced": 0,
        "totalComplained": 0,
        "events": [
          {
            "_id": "string",
            "campaignId": "string",
            "messageId": "string",
            "type": "string",
            "createdAt": "string"
          }
        ]
      }
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/email-events/analytics/overview Global email analytics overview Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "totalSent": 0,
        "totalDelivered": 0,
        "totalOpened": 0,
        "totalUniqueOpens": 0,
        "totalClicked": 0,
        "totalUniqueClicks": 0,
        "totalBounced": 0,
        "totalComplained": 0,
        "totalUnsubscribed": 0,
        "openRate": 0,
        "clickThroughRate": 0,
        "bounceRate": 0,
        "complaintRate": 0,
        "timeline": [
          {
            "date": "string",
            "sent": 0,
            "delivered": 0,
            "opened": 0,
            "clicked": 0
          }
        ]
      }
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }

Newsletter

  • POST /{appId}/newsletter/subscribe Subscribe to newsletter API Key (header: X-API-Key)
    201 application/json
    {
      "success": true,
      "data": {
        "email": "string",
        "firstName": "string"
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    429 application/json
    {
      "success": false,
      "error": "string"
    }
    500 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /{appId}/newsletter/unsubscribe/{token} Unsubscribe from newsletter API Key (header: X-API-Key)
    200 application/json
    "string"
  • POST /{appId}/newsletter/unsubscribe/{token} Unsubscribe from newsletter (POST) API Key (header: X-API-Key)
    200 application/json
    "string"
  • GET /admin/{appId}/newsletter/subscribers/stats Subscriber statistics Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": {
        "total": 0,
        "active": 0,
        "unsubscribed": 0,
        "bounced": 0,
        "bySource": {}
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/{appId}/newsletter/subscribers List subscribers Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": [
        {
          "_id": "string",
          "email": "string",
          "firstName": "string",
          "lastName": "string",
          "locale": "string",
          "subscriptions": [
            {
              "appId": ...,
              "status": ...,
              "source": ...,
              "referralUrl": ...,
              "subscribedAt": ...,
              "unsubscribedAt": ...
            }
          ],
          "createdAt": "string"
        }
      ],
      "pagination": {
        "page": 0,
        "limit": 0,
        "total": 0,
        "pages": 0
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /admin/{appId}/newsletter/subscribers Add subscriber manually Bearer Token (JWT)
    201 application/json
    {
      "success": false,
      "data": {
        "_id": "string",
        "email": "string",
        "firstName": "string",
        "lastName": "string",
        "locale": "string",
        "subscriptions": [
          {
            "appId": "string",
            "status": "string",
            "source": "string",
            "referralUrl": "string",
            "subscribedAt": "string",
            "unsubscribedAt": "string"
          }
        ],
        "createdAt": "string"
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /admin/{appId}/newsletter/subscribers/import Import subscribers Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "imported": 0,
        "skipped": 0
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • DELETE /admin/{appId}/newsletter/subscribers/{id} Delete subscriber Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "message": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/{appId}/newsletter/campaigns List campaigns Bearer Token (JWT)
    200 application/json
    {
      "success": true,
      "data": [
        {
          "_id": "string",
          "appId": "string",
          "name": "string",
          "subject": "string",
          "status": "string",
          "stats": {
            "total": 0,
            "sent": 0,
            "failed": 0
          },
          "sentAt": "string",
          "completedAt": "string",
          "createdBy": "string",
          "createdAt": "string",
          "updatedAt": "string"
        }
      ],
      "pagination": {
        "page": 0,
        "limit": 0,
        "total": 0,
        "pages": 0
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /admin/{appId}/newsletter/campaigns Create campaign Bearer Token (JWT)
    201 application/json
    {
      "success": false,
      "data": {
        "_id": "string",
        "appId": "string",
        "name": "string",
        "subject": "string",
        "status": "string",
        "stats": {
          "total": 0,
          "sent": 0,
          "failed": 0
        },
        "sentAt": "string",
        "completedAt": "string",
        "createdBy": "string",
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/{appId}/newsletter/campaigns/{id} Get campaign Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "_id": "string",
        "appId": "string",
        "name": "string",
        "subject": "string",
        "status": "string",
        "stats": {
          "total": 0,
          "sent": 0,
          "failed": 0
        },
        "sentAt": "string",
        "completedAt": "string",
        "createdBy": "string",
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /admin/{appId}/newsletter/campaigns/{id} Update campaign Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "_id": "string",
        "appId": "string",
        "name": "string",
        "subject": "string",
        "status": "string",
        "stats": {
          "total": 0,
          "sent": 0,
          "failed": 0
        },
        "sentAt": "string",
        "completedAt": "string",
        "createdBy": "string",
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • DELETE /admin/{appId}/newsletter/campaigns/{id} Delete campaign Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "message": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /admin/{appId}/newsletter/campaigns/{id}/send Send campaign Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "status": "queued",
        "jobId": "string"
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    409 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /admin/{appId}/newsletter/campaigns/{id}/test Send test email Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "message": "string",
      "data": {
        "jobId": "string"
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • GET /admin/{appId}/newsletter/templates List newsletter templates Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": [
        {
          "_id": "string",
          "name": "string",
          "subject": "string",
          "htmlContent": "string",
          "textContent": "string",
          "isActive": false,
          "createdBy": "string",
          "createdAt": "string",
          "updatedAt": "string"
        }
      ]
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • POST /admin/{appId}/newsletter/templates Create newsletter template Bearer Token (JWT)
    201 application/json
    {
      "success": false,
      "data": {
        "_id": "string",
        "name": "string",
        "subject": "string",
        "htmlContent": "string",
        "textContent": "string",
        "isActive": false,
        "createdBy": "string",
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    400 application/json
    {
      "success": false,
      "error": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
  • PATCH /admin/{appId}/newsletter/templates/{id} Update newsletter template Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "data": {
        "_id": "string",
        "name": "string",
        "subject": "string",
        "htmlContent": "string",
        "textContent": "string",
        "isActive": false,
        "createdBy": "string",
        "createdAt": "string",
        "updatedAt": "string"
      }
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }
  • DELETE /admin/{appId}/newsletter/templates/{id} Delete newsletter template Bearer Token (JWT)
    200 application/json
    {
      "success": false,
      "message": "string"
    }
    401 application/json
    {
      "success": false,
      "error": "string"
    }
    404 application/json
    {
      "success": false,
      "error": "string"
    }