Skip to content

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.

CallPurpose
GET/PUT me/campaigns/settingsLegal 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/allowancegranted / 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}/previewSubject, 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}/cancelUntil sending starts; the sends go back.
GET me/campaigns/{id}/statssent / delivered / opened / clicked / unsubscribed / bounced / complained / suppressed / failed, complaintRate, bounceRate.
GET me/campaigns/reputationThe 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.