API · v1

Automate your campaigns

Count audiences, manage campaigns, retrieve statistics and access invoices from your own tools.

Base URLhttps://api.dmseurope.com/v1/

Getting started

Create a key under My account → API, store it in your server-side secret manager and use it only for server-to-server exchanges.

The key grants access to the data and operations of its account. Never place it in public JavaScript, a URL or a source-code repository.

Authentication and language

Every request requires Bearer authentication. Accept-Language accepts fr, en, es or it and controls translated error messages.

Authorization: Bearer API_KEY
Accept-Language: en

Rate limits

Limits are 120 reads, 20 mutations and 20 audience counts per minute, per account and per IP. On HTTP 429, wait for the number of seconds provided by Retry-After.

Route details

Open a route to see every accepted parameter, a complete request, the exact success response structure and its possible errors.

POST/audiences/countCount an audienceReturns current aggregate volumes without saving an audience.

Expected parameters

Headers

AuthorizationstringRequired

Active API key sent with the Bearer scheme.

Format and limitsBearer dms_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept-LanguageenumOptional

Preferred error-message language; English is used by default.

Format and limitsfr | en | es | itExample or defaulten
Content-TypestringRequired

Required JSON media type for the request body.

Format and limitsapplication/json

JSON body

channelenumRequired

Campaign product used for the count.

Format and limitsemail | sms | email_sms | email_retargeting_smsExample or defaultemail
Accepted values
  • emailEmail only
  • smsSMS only
  • email_smsEmail and SMS at their scheduled dates
  • email_retargeting_smsEmail followed by SMS retargeting
targetingobjectRequired

Nested JSON object.

Format and limitsobject
countriesarrayRequired

Selected countries: FR France, GB United Kingdom, ES Spain, IT Italy.

Format and limitsarray[1..4]<enum(FR,GB,ES,IT), unique>Example or default["FR","GB"]
Accepted values
  • FRFrance
  • GBUnited Kingdom
  • ESSpain
  • ITItaly
geographyobjectRequired

Geographic criteria grouped by selected country.

Format and limitsobject<country, geography>Example or default{"FR":{…}}
{country}objectRequired

Nested JSON object.

regionsarrayOptional

Region IDs returned by GET /targeting/geography with type=region.

Format and limitsarray[0..250]<integer≥1, unique>Example or default[11]
departmentsarrayOptional

Department or administrative-area IDs returned by GET /targeting/geography with type=department.

Format and limitsarray[0..250]<integer≥1, unique>Example or default[75]
citiesarrayOptional

City IDs returned by GET /targeting/geography with type=city. City results include their region and department to distinguish duplicate names.

Format and limitsarray[0..250]<integer≥1, unique>Example or default[1234]
postal_codesarrayOptional

Postal codes available for the country.

Format and limitsarray[0..250]<string[1..20], unique>Example or default["75001"]
profileobjectRequired

Demographic and household criteria; use an empty object for no filter.

Format and limitsobjectExample or default{}
age_minintegerOptional

Minimum inclusive age.

Format and limitsinteger 18–100Example or default30
age_maxintegerOptional

Maximum inclusive age.

Format and limitsinteger 18–100, ≥ age_minExample or default55
gender_idsarrayOptional

Choose one or more gender IDs shown below. An empty array includes all genders.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[1]
Accepted values
  • 1maleMale
  • 2femaleFemale
  • 3unknownUnknown
csp_idsarrayOptional

Choose one or more socio-professional category IDs shown below. An empty array includes every category.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[2,3]
Accepted values
  • 6csp_plusHigher socioeconomic group
  • 7csp_middleMiddle socioeconomic group
  • 8csp_minusLower socioeconomic group
  • 9unknownUnknown
housing_status_idsarrayOptional

Choose one or more housing-status IDs shown below. An empty array includes every status.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[1]
Accepted values
  • 10ownerOwner
  • 11tenantTenant
  • 12otherOther status
  • 4unknownUnknown
housing_type_idsarrayOptional

Choose one or more housing-type IDs shown below. An empty array includes every type.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[2]
Accepted values
  • 14houseHouse
  • 15apartmentApartment
  • 16otherOther housing type
  • 5unknownUnknown
car_owner_status_idsarrayOptional

Choose the car-owner ID shown below to target vehicle owners. An empty array applies no car-ownership filter.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[1]
Accepted values
  • 18ownerOwns a vehicle
  • 19non_ownerDoes not own a vehicle
  • 20unknownUnknown
exclusionsobjectRequired

Recent-contact and previous-campaign exclusions.

Format and limitsobjectExample or default{}
recent_daysenumOptional

0 applies no recent-contact exclusion; 15, 30 or 60 excludes contacts already reached during that many previous days.

Format and limitsenum(0,15,30,60)Example or defaultdefault 0
Accepted values
  • 0No recent-contact exclusion
  • 15Exclude contacts reached in the last 15 days
  • 30Exclude contacts reached in the last 30 days
  • 60Exclude contacts reached in the last 60 days
campaign_referencesarrayOptional

Exclude contacts from sent campaigns owned by the account during the last 12 months.

Format and limitsarray[0..100]<CMP-YYYY-0000000, unique>Example or default["CMP-2026-0000123"]
POSThttps://api.dmseurope.com/v1/audiences/count
curl -X POST 'https://api.dmseurope.com/v1/audiences/count' \
  -H 'Authorization: Bearer API_KEY' -H 'Content-Type: application/json' \
  -d '{"channel":"email","targeting":{"countries":["FR"],"geography":{"FR":{"regions":[11],"departments":[75],"cities":[],"postal_codes":["75001"]}},"profile":{"age_min":30,"age_max":55,"gender_ids":[1],"csp_ids":[],"housing_status_ids":[],"housing_type_ids":[],"car_owner_status_ids":[]},"exclusions":{"recent_days":30,"campaign_references":[]}}}'
GET/targeting/geographyFind geographic identifiersReturns the region, department or city identifiers accepted by targeting.

Expected parameters

Headers

AuthorizationstringRequired

Active API key sent with the Bearer scheme.

Format and limitsBearer dms_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept-LanguageenumOptional

Preferred error-message language; English is used by default.

Format and limitsfr | en | es | itExample or defaulten

Query parameters

countryenumRequired

Country whose geographic reference is queried.

Format and limitsFR | GB | ES | ITExample or defaultFR
Accepted values
  • FRFrance
  • GBUnited Kingdom
  • ESSpain
  • ITItaly
typeenumRequired

Reference level to return: regions, departments or cities.

Format and limitsregion | department | cityExample or defaultcity
Accepted values
  • regionRegion
  • departmentDepartment or administrative area
  • cityCity
querystringConditional

Optional for regions and departments. Required for cities, with at least 2 characters.

Format and limitsstring[0..80]Example or defaultParis
GEThttps://api.dmseurope.com/v1/targeting/geography

Success — All HTTP responses include X-Request-Id; JSON responses also include request_id.

GET/campaignsList campaignsReturns the account’s campaigns with pagination and filters.

Expected parameters

Headers

AuthorizationstringRequired

Active API key sent with the Bearer scheme.

Format and limitsBearer dms_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept-LanguageenumOptional

Preferred error-message language; English is used by default.

Format and limitsfr | en | es | itExample or defaulten

Query parameters

pageintegerOptional

Requested page number.

Format and limitsinteger[1..1000000]Example or defaultdefault 1
per_pageintegerOptional

Number of results per page.

Format and limitsinteger[1..100]Example or defaultdefault 20
statusenumOptional

Exact campaign status.

Format and limitsdraft | pending_validation | needs_changes | scheduled | sending | sent | cancelled
Accepted values
  • draftDraft
  • pending_validationPending review
  • needs_changesCorrections required
  • scheduledScheduled
  • sendingSending
  • sentSent
  • cancelledCancelled
productenumOptional

Campaign product filter.

Format and limitsemail | sms | email_sms | email_retargeting_sms
Accepted values
  • emailEmail only
  • smsSMS only
  • email_smsEmail and SMS at their scheduled dates
  • email_retargeting_smsEmail followed by SMS retargeting
countryenumOptional

Country filter.

Format and limitsFR | GB | ES | ITExample or defaultFR
Accepted values
  • FRFrance
  • GBUnited Kingdom
  • ESSpain
  • ITItaly
created_fromstringOptional

Inclusive minimum creation date.

Format and limitsdate YYYY-MM-DDExample or default2026-08-01
created_tostringOptional

Inclusive maximum creation date.

Format and limitsdate YYYY-MM-DDExample or default2026-08-31
scheduled_fromstringOptional

Inclusive minimum scheduled date.

Format and limitsdate YYYY-MM-DDExample or default2026-09-01
scheduled_tostringOptional

Inclusive maximum scheduled date.

Format and limitsdate YYYY-MM-DDExample or default2026-09-30
searchstringOptional

Campaign name or public reference search.

Format and limitsstring ≤ 180Example or defaultCMP-2026-0000123 | Summer launch
GEThttps://api.dmseurope.com/v1/campaigns

Success — All HTTP responses include X-Request-Id; JSON responses also include request_id.

POST/campaignsCreate a campaignCounts the audience, calculates the price, reserves credit and submits a complete campaign.

Expected parameters

Headers

AuthorizationstringRequired

Active API key sent with the Bearer scheme.

Format and limitsBearer dms_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept-LanguageenumOptional

Preferred error-message language; English is used by default.

Format and limitsfr | en | es | itExample or defaulten
Content-TypestringRequired

Required JSON media type for the request body.

Format and limitsapplication/json
Client-ReferencestringRequired

Permanent business reference unique to this campaign creation. A second creation with the same value is rejected.

Format and limitsASCII string[8..128] [A-Za-z0-9._:-]Example or defaultcrm-campaign-20260829-001

JSON body

namestringRequired

Campaign name.

Format and limitsstring[1..180]Example or defaultSummer launch 2026
productenumRequired

email: email only; sms: SMS only; email_sms: both channels; email_retargeting_sms: email followed by SMS retargeting.

Format and limitsemail | sms | email_sms | email_retargeting_sms
Accepted values
  • emailEmail only
  • smsSMS only
  • email_smsEmail and SMS at their scheduled dates
  • email_retargeting_smsEmail followed by SMS retargeting
targetingobjectRequired

Nested JSON object.

Format and limitsobject
countriesarrayRequired

Selected countries: FR France, GB United Kingdom, ES Spain, IT Italy.

Format and limitsarray[1..4]<enum(FR,GB,ES,IT), unique>Example or default["FR","GB"]
Accepted values
  • FRFrance
  • GBUnited Kingdom
  • ESSpain
  • ITItaly
geographyobjectRequired

Geographic criteria grouped by selected country.

Format and limitsobject<country, geography>Example or default{"FR":{…}}
{country}objectRequired

Nested JSON object.

regionsarrayOptional

Region IDs returned by GET /targeting/geography with type=region.

Format and limitsarray[0..250]<integer≥1, unique>Example or default[11]
departmentsarrayOptional

Department or administrative-area IDs returned by GET /targeting/geography with type=department.

Format and limitsarray[0..250]<integer≥1, unique>Example or default[75]
citiesarrayOptional

City IDs returned by GET /targeting/geography with type=city. City results include their region and department to distinguish duplicate names.

Format and limitsarray[0..250]<integer≥1, unique>Example or default[1234]
postal_codesarrayOptional

Postal codes available for the country.

Format and limitsarray[0..250]<string[1..20], unique>Example or default["75001"]
profileobjectRequired

Demographic and household criteria; use an empty object for no filter.

Format and limitsobjectExample or default{}
age_minintegerOptional

Minimum inclusive age.

Format and limitsinteger 18–100Example or default30
age_maxintegerOptional

Maximum inclusive age.

Format and limitsinteger 18–100, ≥ age_minExample or default55
gender_idsarrayOptional

Choose one or more gender IDs shown below. An empty array includes all genders.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[1]
Accepted values
  • 1maleMale
  • 2femaleFemale
  • 3unknownUnknown
csp_idsarrayOptional

Choose one or more socio-professional category IDs shown below. An empty array includes every category.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[2,3]
Accepted values
  • 6csp_plusHigher socioeconomic group
  • 7csp_middleMiddle socioeconomic group
  • 8csp_minusLower socioeconomic group
  • 9unknownUnknown
housing_status_idsarrayOptional

Choose one or more housing-status IDs shown below. An empty array includes every status.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[1]
Accepted values
  • 10ownerOwner
  • 11tenantTenant
  • 12otherOther status
  • 4unknownUnknown
housing_type_idsarrayOptional

Choose one or more housing-type IDs shown below. An empty array includes every type.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[2]
Accepted values
  • 14houseHouse
  • 15apartmentApartment
  • 16otherOther housing type
  • 5unknownUnknown
car_owner_status_idsarrayOptional

Choose the car-owner ID shown below to target vehicle owners. An empty array applies no car-ownership filter.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[1]
Accepted values
  • 18ownerOwns a vehicle
  • 19non_ownerDoes not own a vehicle
  • 20unknownUnknown
exclusionsobjectRequired

Recent-contact and previous-campaign exclusions.

Format and limitsobjectExample or default{}
recent_daysenumOptional

0 applies no recent-contact exclusion; 15, 30 or 60 excludes contacts already reached during that many previous days.

Format and limitsenum(0,15,30,60)Example or defaultdefault 0
Accepted values
  • 0No recent-contact exclusion
  • 15Exclude contacts reached in the last 15 days
  • 30Exclude contacts reached in the last 30 days
  • 60Exclude contacts reached in the last 60 days
campaign_referencesarrayOptional

Exclude contacts from sent campaigns owned by the account during the last 12 months.

Format and limitsarray[0..100]<CMP-YYYY-0000000, unique>Example or default["CMP-2026-0000123"]
volumesobjectRequired

Requested volumes by country; keys must exactly match targeting.countries.

Format and limitsobject<country, integer[1..1000000]>Example or default{"FR":4000,"GB":1500}
{country}integerRequired

Requested contact volume for this country.

Format and limitsinteger 1–1 000 000Example or default4000
contentsobjectRequired

Content by country; keys must exactly match targeting.countries.

Format and limitsobject<country, content>
{country}objectRequired

Content object for each selected country; its exact keys depend on product.

Format and limitsobject<email | sms | email+sms>
emailobjectConditional

Required for every selected country when the product includes email.

Format and limitsobject<email>
sender_namestringConditional

Email sender name.

Format and limitsstring[1..120]Example or defaultMy brand
subjectstringConditional

Email subject line.

Format and limitsstring[1..255]Example or defaultSummer offer
preheaderstringOptional

Optional email preheader.

Format and limitsstring[0..255]Example or defaultDiscover our offer
htmlstringConditional

Complete email HTML.

Format and limitsHTML string[1..5242880]Example or default<p>Hello</p>
smsobjectConditional

Required for every selected country when the product includes SMS.

Format and limitsobject<sms>
sender_namestringConditional

1 to 11 ASCII letters or digits, with at least one letter; a value resembling a telephone number is rejected.

Format and limitsASCII alphanumeric string[1..11]Example or defaultMyBrand
messagestringConditional

Message body without the automatic STOP suffix. Maximum 4 SMS segments including the country STOP suffix, personalization reserves and the 20-character short link.

Format and limitsstringExample or defaultmaximum 4 SMS segments · Discover the offer: {{short_url}}
destination_urlstringOptional

Optional public HTTP(S) URL, maximum 2,048 characters. It is required exactly when the message contains one {{short_url}} tag; raw URLs in the message are rejected.

Format and limitspublic HTTP(S) URL[1..2048] | nullExample or defaulthttps://example.com/offer
scheduleobjectRequired

IANA timezone and required dispatch dates. Every dispatch must be at least 48 business hours in the future.

Format and limitsobject
timezonestringRequired

IANA timezone used to validate the date offsets.

Format and limitsIANA timezone string[1..64]Example or defaultEurope/Paris
email_atstringConditional

Required when the product includes email; forbidden for sms. For email_sms, it must be no more than 48 hours from sms_at.

Format and limitsRFC 3339 date-timeExample or default2026-09-15T10:00:00+02:00
sms_atstringConditional

Required for sms and email_sms; forbidden for email and email_retargeting_sms. Local time must be between 08:00 and 19:45 and no more than 48 hours from email_at for email_sms.

Format and limitsRFC 3339 date-timeExample or default2026-09-15T12:00:00+02:00
retargeting_delay_hoursintegerOptional

Only used for email_retargeting_sms: integer from 6 to 72 hours after the email; default 24.

Format and limitsinteger[6..72]Example or defaultdefault 24
promo_codestringOptional

Optional promotion code: 1 to 64 uppercase letters, digits, underscores or hyphens; first character must be a letter or digit.

Format and limitsstring[0..64] | nullExample or defaultWELCOME10
POSThttps://api.dmseurope.com/v1/campaigns
curl -X POST 'https://api.dmseurope.com/v1/campaigns' \
  -H 'Authorization: Bearer API_KEY' \
  -H 'Client-Reference: crm-campaign-20260829-001' \
  -H 'Content-Type: application/json' \
  -d '{
    "name":"Summer launch 2026",
    "product":"email_sms",
    "targeting":{
      "countries":["FR"],
      "geography":{"FR":{"regions":[11],"departments":[75],"cities":[],"postal_codes":["75001"]}},
      "profile":{"age_min":30,"age_max":55,"gender_ids":[1],"csp_ids":[2],"housing_status_ids":[],"housing_type_ids":[],"car_owner_status_ids":[]},
      "exclusions":{"recent_days":30,"campaign_references":[]}
    },
    "volumes":{"FR":4000},
    "contents":{"FR":{
      "email":{"sender_name":"My brand","subject":"Summer offer","preheader":"Discover our offer","html":"<p>Hello</p>"},
      "sms":{"sender_name":"MyBrand","message":"Discover the offer: {{short_url}}","destination_url":"https://example.com/offer"}
    }},
    "schedule":{"timezone":"Europe/Paris","email_at":"2026-09-15T10:00:00+02:00","sms_at":"2026-09-15T12:00:00+02:00"},
    "promo_code":null
  }'
GET/campaigns/{reference}Get a campaignReturns targeting, content, schedule, pricing, moderation and production information.

Expected parameters

Headers

AuthorizationstringRequired

Active API key sent with the Bearer scheme.

Format and limitsBearer dms_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept-LanguageenumOptional

Preferred error-message language; English is used by default.

Format and limitsfr | en | es | itExample or defaulten

Path parameters

referencestringRequired

Public campaign reference.

Format and limitsCMP-AAAA-0000000Example or defaultCMP-2026-0000123
GEThttps://api.dmseurope.com/v1/campaigns/{reference}

Success — All HTTP responses include X-Request-Id; JSON responses also include request_id.

PUT/campaigns/{reference}Replace a campaignFully replaces an editable campaign. The same Client-Reference may be reused with new content.

Expected parameters

Headers

AuthorizationstringRequired

Active API key sent with the Bearer scheme.

Format and limitsBearer dms_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept-LanguageenumOptional

Preferred error-message language; English is used by default.

Format and limitsfr | en | es | itExample or defaulten
Content-TypestringRequired

Required JSON media type for the request body.

Format and limitsapplication/json
Client-ReferencestringRequired

Business reference for the update. It may be reused for later updates, with identical or different JSON.

Format and limitsASCII string[8..128] [A-Za-z0-9._:-]Example or defaultcrm-campaign-20260829-001

Path parameters

referencestringRequired

Public campaign reference.

Format and limitsCMP-AAAA-0000000Example or defaultCMP-2026-0000123

JSON body

namestringRequired

Campaign name.

Format and limitsstring[1..180]Example or defaultSummer launch 2026
productenumRequired

email: email only; sms: SMS only; email_sms: both channels; email_retargeting_sms: email followed by SMS retargeting.

Format and limitsemail | sms | email_sms | email_retargeting_sms
Accepted values
  • emailEmail only
  • smsSMS only
  • email_smsEmail and SMS at their scheduled dates
  • email_retargeting_smsEmail followed by SMS retargeting
targetingobjectRequired

Nested JSON object.

Format and limitsobject
countriesarrayRequired

Selected countries: FR France, GB United Kingdom, ES Spain, IT Italy.

Format and limitsarray[1..4]<enum(FR,GB,ES,IT), unique>Example or default["FR","GB"]
Accepted values
  • FRFrance
  • GBUnited Kingdom
  • ESSpain
  • ITItaly
geographyobjectRequired

Geographic criteria grouped by selected country.

Format and limitsobject<country, geography>Example or default{"FR":{…}}
{country}objectRequired

Nested JSON object.

regionsarrayOptional

Region IDs returned by GET /targeting/geography with type=region.

Format and limitsarray[0..250]<integer≥1, unique>Example or default[11]
departmentsarrayOptional

Department or administrative-area IDs returned by GET /targeting/geography with type=department.

Format and limitsarray[0..250]<integer≥1, unique>Example or default[75]
citiesarrayOptional

City IDs returned by GET /targeting/geography with type=city. City results include their region and department to distinguish duplicate names.

Format and limitsarray[0..250]<integer≥1, unique>Example or default[1234]
postal_codesarrayOptional

Postal codes available for the country.

Format and limitsarray[0..250]<string[1..20], unique>Example or default["75001"]
profileobjectRequired

Demographic and household criteria; use an empty object for no filter.

Format and limitsobjectExample or default{}
age_minintegerOptional

Minimum inclusive age.

Format and limitsinteger 18–100Example or default30
age_maxintegerOptional

Maximum inclusive age.

Format and limitsinteger 18–100, ≥ age_minExample or default55
gender_idsarrayOptional

Choose one or more gender IDs shown below. An empty array includes all genders.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[1]
Accepted values
  • 1maleMale
  • 2femaleFemale
  • 3unknownUnknown
csp_idsarrayOptional

Choose one or more socio-professional category IDs shown below. An empty array includes every category.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[2,3]
Accepted values
  • 6csp_plusHigher socioeconomic group
  • 7csp_middleMiddle socioeconomic group
  • 8csp_minusLower socioeconomic group
  • 9unknownUnknown
housing_status_idsarrayOptional

Choose one or more housing-status IDs shown below. An empty array includes every status.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[1]
Accepted values
  • 10ownerOwner
  • 11tenantTenant
  • 12otherOther status
  • 4unknownUnknown
housing_type_idsarrayOptional

Choose one or more housing-type IDs shown below. An empty array includes every type.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[2]
Accepted values
  • 14houseHouse
  • 15apartmentApartment
  • 16otherOther housing type
  • 5unknownUnknown
car_owner_status_idsarrayOptional

Choose the car-owner ID shown below to target vehicle owners. An empty array applies no car-ownership filter.

Format and limitsarray[0..50]<integer≥1, unique>Example or default[1]
Accepted values
  • 18ownerOwns a vehicle
  • 19non_ownerDoes not own a vehicle
  • 20unknownUnknown
exclusionsobjectRequired

Recent-contact and previous-campaign exclusions.

Format and limitsobjectExample or default{}
recent_daysenumOptional

0 applies no recent-contact exclusion; 15, 30 or 60 excludes contacts already reached during that many previous days.

Format and limitsenum(0,15,30,60)Example or defaultdefault 0
Accepted values
  • 0No recent-contact exclusion
  • 15Exclude contacts reached in the last 15 days
  • 30Exclude contacts reached in the last 30 days
  • 60Exclude contacts reached in the last 60 days
campaign_referencesarrayOptional

Exclude contacts from sent campaigns owned by the account during the last 12 months.

Format and limitsarray[0..100]<CMP-YYYY-0000000, unique>Example or default["CMP-2026-0000123"]
volumesobjectRequired

Requested volumes by country; keys must exactly match targeting.countries.

Format and limitsobject<country, integer[1..1000000]>Example or default{"FR":4000,"GB":1500}
{country}integerRequired

Requested contact volume for this country.

Format and limitsinteger 1–1 000 000Example or default4000
contentsobjectRequired

Content by country; keys must exactly match targeting.countries.

Format and limitsobject<country, content>
{country}objectRequired

Content object for each selected country; its exact keys depend on product.

Format and limitsobject<email | sms | email+sms>
emailobjectConditional

Required for every selected country when the product includes email.

Format and limitsobject<email>
sender_namestringConditional

Email sender name.

Format and limitsstring[1..120]Example or defaultMy brand
subjectstringConditional

Email subject line.

Format and limitsstring[1..255]Example or defaultSummer offer
preheaderstringOptional

Optional email preheader.

Format and limitsstring[0..255]Example or defaultDiscover our offer
htmlstringConditional

Complete email HTML.

Format and limitsHTML string[1..5242880]Example or default<p>Hello</p>
smsobjectConditional

Required for every selected country when the product includes SMS.

Format and limitsobject<sms>
sender_namestringConditional

1 to 11 ASCII letters or digits, with at least one letter; a value resembling a telephone number is rejected.

Format and limitsASCII alphanumeric string[1..11]Example or defaultMyBrand
messagestringConditional

Message body without the automatic STOP suffix. Maximum 4 SMS segments including the country STOP suffix, personalization reserves and the 20-character short link.

Format and limitsstringExample or defaultmaximum 4 SMS segments · Discover the offer: {{short_url}}
destination_urlstringOptional

Optional public HTTP(S) URL, maximum 2,048 characters. It is required exactly when the message contains one {{short_url}} tag; raw URLs in the message are rejected.

Format and limitspublic HTTP(S) URL[1..2048] | nullExample or defaulthttps://example.com/offer
scheduleobjectRequired

IANA timezone and required dispatch dates. Every dispatch must be at least 48 business hours in the future.

Format and limitsobject
timezonestringRequired

IANA timezone used to validate the date offsets.

Format and limitsIANA timezone string[1..64]Example or defaultEurope/Paris
email_atstringConditional

Required when the product includes email; forbidden for sms. For email_sms, it must be no more than 48 hours from sms_at.

Format and limitsRFC 3339 date-timeExample or default2026-09-15T10:00:00+02:00
sms_atstringConditional

Required for sms and email_sms; forbidden for email and email_retargeting_sms. Local time must be between 08:00 and 19:45 and no more than 48 hours from email_at for email_sms.

Format and limitsRFC 3339 date-timeExample or default2026-09-15T12:00:00+02:00
retargeting_delay_hoursintegerOptional

Only used for email_retargeting_sms: integer from 6 to 72 hours after the email; default 24.

Format and limitsinteger[6..72]Example or defaultdefault 24
promo_codestringOptional

Optional promotion code: 1 to 64 uppercase letters, digits, underscores or hyphens; first character must be a letter or digit.

Format and limitsstring[0..64] | nullExample or defaultWELCOME10
PUThttps://api.dmseurope.com/v1/campaigns/{reference}
curl -X PUT 'https://api.dmseurope.com/v1/campaigns/CMP-2026-0000123' \
  -H 'Authorization: Bearer API_KEY' \
  -H 'Client-Reference: crm-update-20260829-001' \
  -H 'Content-Type: application/json' \
  -d '{
    "name":"Summer launch 2026",
    "product":"email_sms",
    "targeting":{
      "countries":["FR"],
      "geography":{"FR":{"regions":[11],"departments":[75],"cities":[],"postal_codes":["75001"]}},
      "profile":{"age_min":30,"age_max":55,"gender_ids":[1],"csp_ids":[2],"housing_status_ids":[],"housing_type_ids":[],"car_owner_status_ids":[]},
      "exclusions":{"recent_days":30,"campaign_references":[]}
    },
    "volumes":{"FR":4000},
    "contents":{"FR":{
      "email":{"sender_name":"My brand","subject":"Summer offer","preheader":"Discover our offer","html":"<p>Hello</p>"},
      "sms":{"sender_name":"MyBrand","message":"Discover the offer: {{short_url}}","destination_url":"https://example.com/offer"}
    }},
    "schedule":{"timezone":"Europe/Paris","email_at":"2026-09-15T10:00:00+02:00","sms_at":"2026-09-15T12:00:00+02:00"},
    "promo_code":null
  }'
POST/campaigns/{reference}/cancelCancel a campaignCancels an eligible campaign and releases reserved credit when applicable. Client-Reference is not required.

Expected parameters

Headers

AuthorizationstringRequired

Active API key sent with the Bearer scheme.

Format and limitsBearer dms_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept-LanguageenumOptional

Preferred error-message language; English is used by default.

Format and limitsfr | en | es | itExample or defaulten
Content-TypestringConditional

Required only when a JSON cancellation body is sent.

Format and limitsapplication/json

Path parameters

referencestringRequired

Public campaign reference.

Format and limitsCMP-AAAA-0000000Example or defaultCMP-2026-0000123

JSON body

reasonstringOptional

Optional cancellation reason.

Format and limitsstring[0..1000]Example or defaultCancelled by CRM operator
POSThttps://api.dmseurope.com/v1/campaigns/{reference}/cancel
curl -X POST 'https://api.dmseurope.com/v1/campaigns/CMP-2026-0000123/cancel' \
  -H 'Authorization: Bearer API_KEY' -H 'Content-Type: application/json' \
  -d '{"reason":"Cancelled by CRM operator"}'
GET/campaigns/{reference}/statisticsGet campaign statisticsReturns current totals and breakdowns by country, language and channel.

Expected parameters

Headers

AuthorizationstringRequired

Active API key sent with the Bearer scheme.

Format and limitsBearer dms_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept-LanguageenumOptional

Preferred error-message language; English is used by default.

Format and limitsfr | en | es | itExample or defaulten

Path parameters

referencestringRequired

Public campaign reference.

Format and limitsCMP-AAAA-0000000Example or defaultCMP-2026-0000123
GEThttps://api.dmseurope.com/v1/campaigns/{reference}/statistics

Success — All HTTP responses include X-Request-Id; JSON responses also include request_id.

GET/invoicesList invoicesReturns invoices and credit notes. Each item contains pdf_url, whose path includes opaque_reference.

Expected parameters

Headers

AuthorizationstringRequired

Active API key sent with the Bearer scheme.

Format and limitsBearer dms_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept-LanguageenumOptional

Preferred error-message language; English is used by default.

Format and limitsfr | en | es | itExample or defaulten

Query parameters

pageintegerOptional

Requested page number.

Format and limitsinteger[1..1000000]Example or defaultdefault 1
per_pageintegerOptional

Number of results per page.

Format and limitsinteger[1..100]Example or defaultdefault 20
typeenumOptional

Document type filter.

Format and limitsinvoice | credit_noteExample or defaultinvoice
Accepted values
  • invoiceInvoice
  • credit_noteCredit note
statusstringOptional

Exact invoice lifecycle status.

Format and limitsstring [A-Za-z0-9._:-] ≤ 40Example or defaultissued
payment_statusstringOptional

Exact payment status.

Format and limitsstring [A-Za-z0-9._:-] ≤ 40Example or defaultpaid
issued_fromstringOptional

Inclusive minimum issue date.

Format and limitsdate YYYY-MM-DDExample or default2026-08-01
issued_tostringOptional

Inclusive maximum issue date.

Format and limitsdate YYYY-MM-DDExample or default2026-08-31
campaign_referencestringOptional

Public campaign reference filter.

Format and limitsCMP-AAAA-0000000Example or defaultCMP-2026-0000123
GEThttps://api.dmseurope.com/v1/invoices

Success — All HTTP responses include X-Request-Id; JSON responses also include request_id.

GET/invoices/{number}Get an invoiceReturns the structured legal document and pdf_url containing opaque_reference.

Expected parameters

Headers

AuthorizationstringRequired

Active API key sent with the Bearer scheme.

Format and limitsBearer dms_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Accept-LanguageenumOptional

Preferred error-message language; English is used by default.

Format and limitsfr | en | es | itExample or defaulten

Path parameters

numberstringRequired

Legal invoice or credit-note number.

Format and limitsstring[1..80]Example or defaultINV-2026-000123
GEThttps://api.dmseurope.com/v1/invoices/{number}

Success — All HTTP responses include X-Request-Id; JSON responses also include request_id.