Campaign API

Create and manage bulk messaging campaigns.

GET/api/campaigns

List campaigns

Returns paginated campaigns for your tenant.

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

Auth: JWT Bearer

Headers

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

Query parameters

  • pagePage number
  • statusFilter by status: draft, running, paused, completed

Code examples

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

Response example200

{
  "success": true,
  "data": [{ "id": "uuid", "name": "March Promo", "status": "running", "sentCount": 120 }],
  "pagination": { "page": 1, "total": 5 }
}

Try in Swagger UI

POST/api/campaigns

Create campaign

Create a draft campaign with message content and target contacts or groups.

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

Auth: JWT Bearer

Headers

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

Request example

{
  "name": "March Promo",
  "sessionId": "uuid",
  "message": "Hello {{name}}, check out our offer!",
  "contactIds": ["uuid-1", "uuid-2"],
  "contactGroupIds": []
}

Code examples

curl -X POST "https://api.actiwapi.com/api/campaigns" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {accessToken}"
  -d '{  "name": "March Promo",  "sessionId": "uuid",  "message": "Hello {{name}}, check out our offer!",  "contactIds": ["uuid-1", "uuid-2"],  "contactGroupIds": []}'

Response example201

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

Try in Swagger UI

POST/api/campaigns/{id}/start

Start campaign

Start sending messages immediately.

URL: https://api.actiwapi.com/api/campaigns/{id}/start

Auth: JWT Bearer

Headers

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

Path parameters

  • idCampaign UUID

Code examples

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

Response example200

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

Try in Swagger UI

POST/api/campaigns/{id}/pause

Pause campaign

Pause a running campaign.

URL: https://api.actiwapi.com/api/campaigns/{id}/pause

Auth: JWT Bearer

Headers

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

Path parameters

  • idCampaign UUID

Code examples

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

Response example200

{ "success": true, "data": { "status": "paused" } }

Try in Swagger UI

POST/api/campaigns/{id}/schedule

Schedule campaign

Schedule a campaign for future delivery.

URL: https://api.actiwapi.com/api/campaigns/{id}/schedule

Auth: JWT Bearer

Headers

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

Path parameters

  • idCampaign UUID

Request example

{ "scheduledAt": "2026-06-01T10:00:00.000Z" }

Code examples

curl -X POST "https://api.actiwapi.com/api/campaigns/{id}/schedule" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {accessToken}"
  -d '{ "scheduledAt": "2026-06-01T10:00:00.000Z" }'

Response example200

{ "success": true, "data": { "status": "scheduled" } }

Try in Swagger UI

GET/api/campaigns/{id}/analytics

Campaign analytics

Delivery statistics for a campaign.

URL: https://api.actiwapi.com/api/campaigns/{id}/analytics

Auth: JWT Bearer

Headers

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

Path parameters

  • idCampaign UUID

Code examples

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

Response example200

{
  "success": true,
  "data": {
    "totalRecipients": 500,
    "sentCount": 320,
    "failedCount": 2,
    "deliveredCount": 300
  }
}

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_INACTIVETrial expired or subscription not active.
403LIMIT_EXCEEDEDPlan limit reached (sessions, messages, API requests, etc.).
404NOT_FOUNDResource does not exist or is not in your tenant.
409CONFLICTDuplicate resource or invalid state transition.
429RATE_LIMITEDToo many requests; retry after backoff.
500INTERNAL_ERRORUnexpected server error.
502WHATSAPP_UNAVAILABLEWhatsApp session disconnected or provider error.

← Back to Getting Started