Campaigns (admin API)
Admin routes of the campaigns module. Every route needs a staff session and the permission named on it; send X-Resolve-Locale: false to receive every locale of a translatable field for editing.
GET /v1/admin/campaigns
Section titled “GET /v1/admin/campaigns”List marketing campaigns
Parameters:
kindin query ("BROADCAST","WINBACK", optional).pagein query (number, min 1, optional).pageSizein query (number, min 1, optional).statusin query ("DRAFT","SCHEDULED","SENDING","SENT","CANCELLED","FAILED", optional).
Responses:
200: Campaigns retrieved.
POST /v1/admin/campaigns
Section titled “POST /v1/admin/campaigns”Create a marketing campaign
Request body: CreateCampaignDto.
Responses:
201: Created.400: Invalid input / invalid coupon.
DELETE /v1/admin/campaigns/{id}
Section titled “DELETE /v1/admin/campaigns/{id}”Soft-delete a campaign
Parameters:
idin path (string, required).
Responses:
204: Deleted.404: Campaign not found.
GET /v1/admin/campaigns/{id}
Section titled “GET /v1/admin/campaigns/{id}”Get a campaign
Parameters:
idin path (string, required).
Responses:
200: Campaign retrieved.404: Campaign not found.
PATCH /v1/admin/campaigns/{id}
Section titled “PATCH /v1/admin/campaigns/{id}”Update a draft / scheduled campaign
Parameters:
idin path (string, required).
Request body: UpdateCampaignDto.
Responses:
200: Updated.400: Invalid input / invalid coupon.404: Campaign not found.409: Campaign is not editable.
POST /v1/admin/campaigns/{id}/preview
Section titled “POST /v1/admin/campaigns/{id}/preview”Render a draft campaign for both locales (no send, no persist)
Parameters:
idin path (string, required).
Request body: PreviewCampaignDto.
Responses:
200: Rendered preview.404: Campaign not found.
POST /v1/admin/campaigns/{id}/send
Section titled “POST /v1/admin/campaigns/{id}/send”Send / start a campaign on the isolated campaign queue
Parameters:
idin path (string, required).
Responses:
200: Sending started.404: Campaign not found.409: Campaign is not sendable.
GET /v1/admin/campaigns/{id}/stats
Section titled “GET /v1/admin/campaigns/{id}/stats”Per-status send counts for a campaign
Parameters:
idin path (string, required).
Responses:
200: Stats retrieved.
POST /v1/admin/campaigns/{id}/test
Section titled “POST /v1/admin/campaigns/{id}/test”Send a test of this campaign to your own inbox
Parameters:
idin path (string, required).
Request body: SendTestCampaignDto.
Responses:
200: Test sent.400: No recipient email on file.404: Campaign not found.
Schemas
Section titled “Schemas”CampaignTranslatableDto
Section titled “CampaignTranslatableDto”default(string, optional).fr(string, optional).en(string, optional).ar(string, optional).
CreateCampaignDto
Section titled “CreateCampaignDto”name(string, min length 1, max length 200, required).subject(CampaignTranslatableDto, required).body(CampaignTranslatableDto, required).segment("ALL_CONFIRMED","NEW","ACTIVE","LOYAL","AT_RISK","CHURNED","LAPSED", required).couponCode(string, max length 100, nullable, optional).scheduledAt(string, nullable, optional).
PreviewCampaignDto
Section titled “PreviewCampaignDto”subject(CampaignTranslatableDto, optional).body(CampaignTranslatableDto, optional).sampleVariables(object, optional).
SendTestCampaignDto
Section titled “SendTestCampaignDto”locale("fr","en","ar", optional).
UpdateCampaignDto
Section titled “UpdateCampaignDto”name(string, min length 1, max length 200, optional).subject(CampaignTranslatableDto, optional).body(CampaignTranslatableDto, optional).segment("ALL_CONFIRMED","NEW","ACTIVE","LOYAL","AT_RISK","CHURNED","LAPSED", optional).couponCode(string, max length 100, nullable, optional).scheduledAt(string, nullable, optional).