API reference

Support

Open in-app tickets, browse the knowledge base, and manage workspace notifications. These routes are for logged-in dashboard users (JWT), not API keys.

Support tickets require the support-tickets feature flag to be enabled for the platform. Notifications always exist: session disconnects, trial conversion, campaign events, and inbox assignments can all appear in the bell.

Tickets and knowledge base

Create a ticket with a subject, description, optional category, and priority. Categories: ticket, feature_request, bug_report, feedback. Priorities: low, normal, high, urgent (default normal).

Reply to keep the thread going. Platform staff reply from the admin console. Public knowledge-base articles are listed without extra permissions once you are authenticated.

In-app notifications

GET /api/notifications returns rows plus unreadCount. Mark one or all as read. The same events are pushed over Socket.io as notification_new so the dashboard badge updates live.

GET/api/support/tickets

List my tickets

Tickets created by the current user.

URL: https://api.actiwapi.com/api/support/tickets

Auth: JWT Bearer

Headers

HeaderValueRequired
AuthorizationBearer {accessToken}Yes
Content-Typeapplication/jsonYes*

Query parameters

  • category — ticket, feature_request, bug_report, feedback
  • status — Filter by ticket status

Code examples

curl -X GET "https://api.actiwapi.com/api/support/tickets" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {accessToken}"

Response example200

{
  "success": true,
  "data": [{ "id": "uuid", "subject": "Session keeps dropping", "status": "open", "priority": "normal" }]
}

Try in Swagger UI

POST/api/support/tickets

Create a ticket

Open a support request for the platform team.

URL: https://api.actiwapi.com/api/support/tickets

Auth: JWT Bearer

Headers

HeaderValueRequired
AuthorizationBearer {accessToken}Yes
Content-Typeapplication/jsonYes*

Request example

{
  "subject": "Cannot reconnect session",
  "description": "QR succeeds then disconnects after 30 seconds.",
  "category": "ticket",
  "priority": "normal"
}

Code examples

curl -X POST "https://api.actiwapi.com/api/support/tickets" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {accessToken}"
  -d '{  "subject": "Cannot reconnect session",  "description": "QR succeeds then disconnects after 30 seconds.",  "category": "ticket",  "priority": "normal"}'

Response example201

{ "success": true, "data": { "id": "uuid", "status": "open" } }

Try in Swagger UI

GET/api/support/tickets/{ticketId}

Get a ticket

Single ticket with replies, if it belongs to you.

URL: https://api.actiwapi.com/api/support/tickets/{ticketId}

Auth: JWT Bearer

Headers

HeaderValueRequired
AuthorizationBearer {accessToken}Yes
Content-Typeapplication/jsonYes*

Path parameters

  • ticketId — Ticket UUID

Code examples

curl -X GET "https://api.actiwapi.com/api/support/tickets/{ticketId}" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {accessToken}"

Response example200

{
  "success": true,
  "data": { "id": "uuid", "subject": "Cannot reconnect session", "replies": [] }
}

Try in Swagger UI

POST/api/support/tickets/{ticketId}/replies

Reply to a ticket

Add a customer reply on your ticket.

URL: https://api.actiwapi.com/api/support/tickets/{ticketId}/replies

Auth: JWT Bearer

Headers

HeaderValueRequired
AuthorizationBearer {accessToken}Yes
Content-Typeapplication/jsonYes*

Path parameters

  • ticketId — Ticket UUID

Request example

{ "body": "Still happening after reconnect." }

Code examples

curl -X POST "https://api.actiwapi.com/api/support/tickets/{ticketId}/replies" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {accessToken}"
  -d '{ "body": "Still happening after reconnect." }'

Response example201

{ "success": true, "data": { "id": "uuid", "body": "Still happening after reconnect." } }

Try in Swagger UI

GET/api/support/knowledge-base

List knowledge base

Published help articles.

URL: https://api.actiwapi.com/api/support/knowledge-base

Auth: JWT Bearer

Headers

HeaderValueRequired
AuthorizationBearer {accessToken}Yes
Content-Typeapplication/jsonYes*

Code examples

curl -X GET "https://api.actiwapi.com/api/support/knowledge-base" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {accessToken}"

Response example200

{
  "success": true,
  "data": [{ "slug": "scan-qr-code", "title": "How to scan the WhatsApp QR code" }]
}

Try in Swagger UI

GET/api/support/knowledge-base/{slug}

Get knowledge base article

Full article by slug.

URL: https://api.actiwapi.com/api/support/knowledge-base/{slug}

Auth: JWT Bearer

Headers

HeaderValueRequired
AuthorizationBearer {accessToken}Yes
Content-Typeapplication/jsonYes*

Path parameters

  • slug — Article slug

Code examples

curl -X GET "https://api.actiwapi.com/api/support/knowledge-base/{slug}" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {accessToken}"

Response example200

{
  "success": true,
  "data": { "slug": "scan-qr-code", "title": "How to scan the WhatsApp QR code", "body": "..." }
}

Try in Swagger UI

GET/api/notifications

List notifications

In-app notifications plus unreadCount.

URL: https://api.actiwapi.com/api/notifications

Auth: JWT Bearer

Headers

HeaderValueRequired
AuthorizationBearer {accessToken}Yes
Content-Typeapplication/jsonYes*

Query parameters

  • page — Page number
  • limit — Default 20
  • isRead — true or false to filter

Code examples

curl -X GET "https://api.actiwapi.com/api/notifications" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {accessToken}"

Response example200

{
  "success": true,
  "data": [{ "id": "uuid", "title": "Session disconnected", "isRead": false }],
  "unreadCount": 3,
  "pagination": { "page": 1, "limit": 20, "total": 3 }
}

Try in Swagger UI

POST/api/notifications/{id}/read

Mark one read

Mark a single notification as read.

URL: https://api.actiwapi.com/api/notifications/{id}/read

Auth: JWT Bearer

Headers

HeaderValueRequired
AuthorizationBearer {accessToken}Yes
Content-Typeapplication/jsonYes*

Path parameters

  • id — Notification UUID

Code examples

curl -X POST "https://api.actiwapi.com/api/notifications/{id}/read" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {accessToken}"

Response example200

{ "success": true, "message": "Notification marked as read" }

Try in Swagger UI

POST/api/notifications/read-all

Mark all read

Clear the unread badge for the current user.

URL: https://api.actiwapi.com/api/notifications/read-all

Auth: JWT Bearer

Headers

HeaderValueRequired
AuthorizationBearer {accessToken}Yes
Content-Typeapplication/jsonYes*

Code examples

curl -X POST "https://api.actiwapi.com/api/notifications/read-all" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {accessToken}"

Response example200

{ "success": true, "message": "All notifications marked as read" }

Try in Swagger UI

Error codes

Failed requests return a JSON envelope with success: false and a human-readable message.

{
  "success": false,
  "message": "Validation failed",
  "errors": {
    "phone": "Valid phone number is required"
  }
}
HTTPCodeDescription
400VALIDATION_ERRORRequest body or query failed validation.
401UNAUTHORIZEDMissing or invalid JWT / API key.
403FORBIDDENAuthenticated but lacking permission or entitlement.
403SUBSCRIPTION_INACTIVEAction not allowed on the current plan (including Free after trial). Upgrade or wait for entitlements.
403LIMIT_EXCEEDEDPlan limit reached (sessions, messages, API requests, etc.).
404NOT_FOUNDResource does not exist or is not in your account.
409CONFLICTDuplicate resource or invalid state transition.
429RATE_LIMITEDToo many requests; retry after backoff.
500INTERNAL_ERRORUnexpected server error.
502WHATSAPP_UNAVAILABLEWhatsApp session disconnected or provider error.