Marketing campaigns (Clientele)
Partner brands (and Pro subscribers) may send marketing e-mail to their clients. The gateway surface is
/api/clientele/v1/me/campaigns… with the acting profile = the brand; the brand must hold the
PARTNER_CAMPAIGNS entitlement (403 Clientele_Campaign_VL_Partner_RJ otherwise). Everything below is what the
Dashboard uses; nothing is Dashboard-only.
| Call | Purpose |
|---|---|
GET/PUT me/campaigns/settings | Legal name + mailing address (required in every footer — schedule refuses without them: 422 Clientele_Campaign_VL_Identification_RJ), From name, Reply-To, logo, brand colour, default layout `SIMPLE |
GET me/campaigns/allowance | granted / available / reserved / used / nextResetAtUtc of the monthly CAMPAIGN_EMAIL_SENDS allowance and the last reconciliation’s inputs. |
GET me/campaigns/audience?segmentId= | Who would receive it: total, candidates, noEmail, noValidConsent, impliedExpired, suppressed, duplicates, expressCount, impliedCount, a sample. Consent = express, or implied from a completed visit in the last 24 months; suppressed = this brand’s unsubscribes / bounces / complaints + the platform’s global list. |
POST me/campaigns, PUT/DELETE me/campaigns/{id} | Drafts: name, subject, preheader, segmentId (null = everyone with a valid consent), layout, fromDisplayName, replyToEmail, and the body as bodyOreooJson (the studio document) plus bodyHtml / bodyText (its e-mail export — sanitized server-side; {{firstName}} and {{displayName}} are substituted per recipient, the footer with the identification and the {{unsubscribeUrl}} link is appended for you). |
POST me/campaigns/{id}/preview | Subject, HTML, text and the footer with sample data. |
POST me/campaigns/{id}/schedule { scheduledAtUtc? } | Locks the audience and holds its sends from the allowance. 409 Clientele_Campaign_AD_AllowanceExceeded_RJ with data = { audienceCount, available, shortfall, nextResetAtUtc, topUpPath }, 422 …_VL_Audience_RJ with the breakdown, 409 …_VL_Paused_RJ when the tenant’s sending is paused. |
POST me/campaigns/{id}/cancel | Until sending starts; the sends go back. |
GET me/campaigns/{id}/stats | sent / delivered / opened / clicked / unsubscribed / bounced / complained / suppressed / failed, complaintRate, bounceRate. |
GET me/campaigns/reputation | The brand’s 30-day complaint / bounce rates and whether sending is paused (thresholds 0.3 % / 5 %). |
Consent is recorded on the client (PUT me/clients/{id}/consents, purpose MARKETING_EMAIL, channel EMAIL,
isGranted, evidence required for a grant — what the client signed, when). Imports
(POST me/imports) require consentAttested: true; a truthy opt-in column gives express consent, a
lastVisitDate within 24 months implied consent, otherwise none. Transactional mail (confirmations, reminders)
never needs this and never counts. Prospecting to non-clients is a separate product.