Skip to main content
POST
/
marketing
/
v3
/
emails
/
ab-test
/
create-variation
Create an A/B test variation of a marketing email
curl --request POST \
  --url https://api.hubapi.com/marketing/v3/emails/ab-test/create-variation \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "contentId": "7",
  "variantName": "AB Test - Number 7"
}'
{
  "activeDomain": "test.hs-sites.com",
  "archived": false,
  "campaign": "1b7f51a6-33c1-44d6-ba28-fe81f655dced",
  "content": {
    "flexAreas": {
      "main": {
        "boxed": false,
        "isSingleColumnFullWidth": false,
        "sections": [
          {
            "columns": [
              {
                "id": "column_1606761806181_0",
                "widgets": [
                  "module_160676180617911"
                ],
                "width": 12
              }
            ],
            "id": "section_1606761806181",
            "style": {
              "backgroundColor": "",
              "backgroundType": "CONTENT"
            }
          },
          {
            "columns": [
              {
                "id": "column-0-1",
                "widgets": [
                  "module-0-1-1"
                ],
                "width": 12
              }
            ],
            "id": "section-0",
            "style": {
              "backgroundType": "CONTENT",
              "paddingBottom": "40px",
              "paddingTop": "40px"
            }
          },
          {
            "columns": [
              {
                "id": "column-1-1",
                "widgets": [
                  "module-1-1-1"
                ],
                "width": 12
              }
            ],
            "id": "section-1",
            "style": {
              "backgroundColor": "",
              "backgroundType": "CONTENT",
              "paddingBottom": "0px",
              "paddingTop": "0px"
            }
          }
        ]
      }
    },
    "plainTextVersion": "This is custom! View in browser ({{view_as_page_url}})\n\nHello {{ contact.firstname }},\n\nPlain text emails have minimal formatting so your reader can really focus on what you have to say. Introduce yourself and explain why you’re reaching out.\n\nEvery email should try to lead the reader to some kind of action. Use this space to describe why the reader should want to click on the link below. Put the link on its own line to really draw their eye to it.\n\nLink text\n\nNow it’s time to wrap up your email. Before your signature, thank the recipient for reading. You can also invite them to send this email to any of their colleagues who might be interested.\n\nAll the best,\n\nYour full name\n\nYour job title\n\nOther contact information\n\n{{site_settings.company_name}}, {{site_settings.company_street_address_1}}, {{site_settings.company_street_address_2}}, {{site_settings.company_city}}, {{site_settings.company_state}} {{site_settings.company_zip}}, {{site_settings.company_country}}, {{site_settings.company_phone}}\n\nUnsubscribe ({{unsubscribe_link_all}})\n\nManage preferences ({{unsubscribe_link}})",
    "styleSettings": {},
    "templatePath": "@hubspot/email/dnd/plain_text.html",
    "widgets": {
      "module-0-1-1": {
        "body": {
          "css_class": "dnd-module",
          "html": "<p style=\"margin-bottom:10px;\">Hello {{ contact.firstname }},<br><br>Plain text emails have minimal formatting so your reader can really focus on what you have to say. Introduce yourself and explain why you’re reaching out.</p><p style=\"margin-bottom:10px;\">Every email should try to lead the reader to some kind of action. Use this space to describe why the reader should want to click on the link below. Put the link on its own line to really draw their eye to it.</p><p style=\"margin-bottom:10px;\"><a target=\"_blank\" rel=\"noopener\">Link text</a></p><p style=\"margin-bottom:10px;\">Now it’s time to wrap up your email. Before your signature, thank the recipient for reading. You can also invite them to send this email to any of their colleagues who might be interested.</p><p style=\"margin-bottom:10px;\">All the best,<br>Your full name<br>Your job title<br>Other contact information</p>",
          "i18nKey": "richText.plainText",
          "path": "@hubspot/rich_text",
          "schema_version": 2
        },
        "child_css": {},
        "css": {},
        "id": "module-0-1-1",
        "module_id": 1155639,
        "name": "module-0-1-1",
        "order": 2,
        "styles": {},
        "type": "module"
      },
      "module-1-1-1": {
        "body": {
          "align": "center",
          "css_class": "dnd-module",
          "font": {
            "color": "#23496d",
            "font": "Arial, sans-serif",
            "size": {
              "units": "px",
              "value": 12
            }
          },
          "link_font": {
            "color": "#00a4bd",
            "font": "Helvetica,Arial,sans-serif",
            "size": {
              "units": "px",
              "value": 12
            },
            "styles": {
              "bold": false,
              "italic": false,
              "underline": true
            }
          },
          "path": "@hubspot/email_footer",
          "schema_version": 2,
          "unsubscribe_link_type": "both"
        },
        "child_css": {},
        "css": {},
        "id": "module-1-1-1",
        "module_id": 2869621,
        "name": "module-1-1-1",
        "order": 3,
        "styles": {},
        "type": "module"
      },
      "module_160676180617911": {
        "body": {
          "font": {
            "color": "#00a4bd",
            "font": "Arial, sans-serif",
            "size": {
              "units": "px",
              "value": 12
            },
            "styles": {
              "bold": false,
              "italic": false,
              "underline": true
            }
          },
          "hs_enable_module_padding": false,
          "hs_wrapper_css": {}
        },
        "child_css": {},
        "css": {},
        "id": "module_160676180617911",
        "module_id": 2794854,
        "name": "module_160676180617911",
        "styles": {},
        "type": "module"
      },
      "preview_text": {
        "body": {
          "value": ""
        },
        "child_css": {},
        "css": {},
        "id": "preview_text",
        "label": "Preview Text <span class=help-text>This will be used as the preview text that displays in some email clients</span>",
        "name": "preview_text",
        "order": 0,
        "styles": {},
        "type": "text"
      }
    }
  },
  "createdAt": "2020-11-30T18:43:17.136Z",
  "createdById": 3739732,
  "from": {
    "fromName": "Bruce Wayne",
    "replyTo": "test@hubspot.com"
  },
  "id": "38175169118",
  "isPublished": false,
  "isTransactional": false,
  "language": "en",
  "name": "My subject",
  "publishDate": "2020-11-30T18:44:20.387Z",
  "sendOnPublish": true,
  "state": "DRAFT",
  "subcategory": "batch",
  "subject": "My subject",
  "subscriptionDetails": {
    "officeLocationId": "5449392956"
  },
  "to": {
    "contactIds": {},
    "contactIlsLists": {
      "exclude": [
        1
      ],
      "include": [
        5
      ]
    },
    "suppressGraymail": true
  },
  "type": "BATCH_EMAIL",
  "updatedAt": "2020-11-30T18:44:20.384Z",
  "updatedById": 3739732,
  "webversion": {
    "expiresAt": "2020-11-30T18:44:20.387Z",
    "metaDescription": "",
    "redirectToPageId": 0,
    "redirectToUrl": "http://www.example.org"
  }
}

Supported products

Requires one of the following products or higher.
Marketing HubMarketing Hub -Free
Sales HubSales Hub -Free
Service HubService Hub -Free
Content HubContent Hub -Free
This API requires one of the following scopes:
content

Authorizations

Authorization
string
header
required

The access token received from the authorization server in the OAuth 2.0 flow.

Body

application/json

Request body object for creating A/B tests.

variationName
string
required

Name of the variation to be created.

contentId
string
required

ID of the email to test.

Response

successful operation

A marketing email

subject
string
required

The subject of the email.

Example:

"My subject"

content
object
required

Data structure representing the content of the email.

from
object
required

Data structure representing the from fields on the email.

id
string
required

The email ID.

Example:

"38175169118"

state
enum<string>
required

The email state.

Available options:
AUTOMATED,
AUTOMATED_DRAFT,
AUTOMATED_SENDING,
AUTOMATED_FOR_FORM,
AUTOMATED_FOR_FORM_BUFFER,
AUTOMATED_FOR_FORM_DRAFT,
AUTOMATED_FOR_FORM_LEGACY,
BLOG_EMAIL_DRAFT,
BLOG_EMAIL_PUBLISHED,
DRAFT,
DRAFT_AB,
DRAFT_AB_VARIANT,
ERROR,
LOSER_AB_VARIANT,
PAGE_STUB,
PRE_PROCESSING,
PROCESSING,
PUBLISHED,
PUBLISHED_AB,
PUBLISHED_AB_VARIANT,
PUBLISHED_OR_SCHEDULED,
RSS_TO_EMAIL_DRAFT,
RSS_TO_EMAIL_PUBLISHED,
SCHEDULED,
SCHEDULED_AB,
SCHEDULED_OR_PUBLISHED,
AUTOMATED_AB,
AUTOMATED_AB_VARIANT,
AUTOMATED_DRAFT_AB,
AUTOMATED_DRAFT_ABVARIANT,
AUTOMATED_LOSER_ABVARIANT,
AGENT_GENERATED
Example:

"DRAFT"

name
string
required

The name of the email, as displayed on the email dashboard.

Example:

"My subject"

to
object
required

Data structure representing the to fields of the email.

subcategory
string
required

The email subcategory.

Example:

"batch"

sendOnPublish
boolean
required

Determines whether the email will be sent immediately on publish.

Example:

true

feedbackSurveyId
string

The ID of the feedback survey linked to the email.

publishedByEmail
string

Email of the user who published/sent the email.

publishDate
string<date-time>

The date and time the email is scheduled for, in ISO8601 representation. This is only used in local time or scheduled emails.

Example:

"2020-11-30T18:44:20.387+00:00"

isTransactional
boolean

Returns whether the email is a transactional email or not. This is read only.

Example:

false

language
enum<string>
Available options:
af,
af-na,
af-za,
agq,
agq-cm,
ak,
ak-gh,
am,
am-et,
ann,
ann-ng,
ar,
ar-001,
ar-ae,
ar-bh,
ar-dj,
ar-dz,
ar-eg,
ar-eh,
ar-er,
ar-il,
ar-iq,
ar-jo,
ar-km,
ar-kw,
ar-lb,
ar-ly,
ar-ma,
ar-mr,
ar-om,
ar-ps,
ar-qa,
ar-sa,
ar-sd,
ar-so,
ar-ss,
ar-sy,
ar-td,
ar-tn,
ar-ye,
as,
asa,
asa-tz,
ast,
ast-es,
as-in,
az,
az-az,
bas,
bas-cm,
be,
bem,
bem-zm,
bez,
bez-tz,
be-by,
bg,
bgc,
bgc-in,
bg-bg,
bho,
bho-in,
bm,
bm-ml,
bn,
bn-bd,
bn-in,
bo,
bo-cn,
bo-in,
br,
brx,
brx-in,
br-fr,
bs,
bs-ba,
ca,
ca-ad,
ca-es,
ca-fr,
ca-it,
ccp,
ccp-bd,
ccp-in,
ce,
ceb,
ceb-ph,
ce-ru,
cgg,
cgg-ug,
chr,
chr-us,
ckb,
ckb-iq,
ckb-ir,
cs,
cs-cz,
cu,
cu-ru,
cv,
cv-ru,
cy,
cy-gb,
da,
dav,
dav-ke,
da-dk,
da-gl,
de,
de-at,
de-be,
de-ch,
de-de,
de-gr,
de-it,
de-li,
de-lu,
dje,
dje-ne,
doi,
doi-in,
dsb,
dsb-de,
dua,
dua-cm,
dyo,
dyo-sn,
dz,
dz-bt,
ebu,
ebu-ke,
ee,
ee-gh,
ee-tg,
el,
el-cy,
el-gr,
en,
en-001,
en-150,
en-ae,
en-ag,
en-ai,
en-as,
en-at,
en-au,
en-bb,
en-be,
en-bi,
en-bm,
en-bs,
en-bw,
en-bz,
en-ca,
en-cc,
en-ch,
en-ck,
en-cm,
en-cn,
en-cx,
en-cy,
en-de,
en-dg,
en-dk,
en-dm,
en-ee,
en-eg,
en-er,
en-es,
en-fi,
en-fj,
en-fk,
en-fm,
en-fr,
en-gb,
en-gd,
en-gg,
en-gh,
en-gi,
en-gm,
en-gu,
en-gy,
en-hk,
en-ie,
en-il,
en-im,
en-in,
en-io,
en-je,
en-jm,
en-ke,
en-ki,
en-kn,
en-ky,
en-lc,
en-lr,
en-ls,
en-lu,
en-mg,
en-mh,
en-mo,
en-mp,
en-ms,
en-mt,
en-mu,
en-mv,
en-mw,
en-mx,
en-my,
en-na,
en-nf,
en-ng,
en-nl,
en-nr,
en-nu,
en-nz,
en-pg,
en-ph,
en-pk,
en-pn,
en-pr,
en-pw,
en-rw,
en-sb,
en-sc,
en-sd,
en-se,
en-sg,
en-sh,
en-si,
en-sl,
en-ss,
en-sx,
en-sz,
en-tc,
en-tk,
en-tn,
en-to,
en-tt,
en-tv,
en-tz,
en-ug,
en-um,
en-us,
en-vc,
en-vg,
en-vi,
en-vu,
en-ws,
en-za,
en-zm,
en-zw,
eo,
eo-001,
es,
es-419,
es-ar,
es-bo,
es-br,
es-bz,
es-cl,
es-co,
es-cr,
es-cu,
es-do,
es-ea,
es-ec,
es-es,
es-gq,
es-gt,
es-hn,
es-ic,
es-mx,
es-ni,
es-pa,
es-pe,
es-ph,
es-pr,
es-py,
es-sv,
es-us,
es-uy,
es-ve,
et,
et-ee,
eu,
eu-es,
ewo,
ewo-cm,
fa,
fa-af,
fa-ir,
ff,
ff-bf,
ff-cm,
ff-gh,
ff-gm,
ff-gn,
ff-gw,
ff-lr,
ff-mr,
ff-ne,
ff-ng,
ff-sl,
ff-sn,
fi,
fil,
fil-ph,
fi-fi,
fo,
fo-dk,
fo-fo,
fr,
frr,
frr-de,
fr-be,
fr-bf,
fr-bi,
fr-bj,
fr-bl,
fr-ca,
fr-cd,
fr-cf,
fr-cg,
fr-ch,
fr-ci,
fr-cm,
fr-dj,
fr-dz,
fr-fr,
fr-ga,
fr-gf,
fr-gn,
fr-gp,
fr-gq,
fr-ht,
fr-km,
fr-lu,
fr-ma,
fr-mc,
fr-mf,
fr-mg,
fr-ml,
fr-mq,
fr-mr,
fr-mu,
fr-nc,
fr-ne,
fr-pf,
fr-pm,
fr-re,
fr-rw,
fr-sc,
fr-sn,
fr-sy,
fr-td,
fr-tg,
fr-tn,
fr-vu,
fr-wf,
fr-yt,
fur,
fur-it,
fy,
fy-nl,
ga,
ga-gb,
ga-ie,
gd,
gd-gb,
gl,
gl-es,
gsw,
gsw-ch,
gsw-fr,
gsw-li,
gu,
guz,
guz-ke,
gu-in,
gv,
gv-im,
ha,
haw,
haw-us,
ha-gh,
ha-ne,
ha-ng,
he,
he-il,
hi,
hi-in,
hr,
hr-ba,
hr-hr,
hsb,
hsb-de,
hu,
hu-hu,
hy,
hy-am,
ia,
ia-001,
id,
ig,
ig-ng,
ii,
ii-cn,
id-id,
is,
is-is,
it,
it-ch,
it-it,
it-sm,
it-va,
ja,
ja-jp,
jgo,
jgo-cm,
yi,
yi-001,
jmc,
jmc-tz,
jv,
jv-id,
ka,
kab,
kab-dz,
kam,
kam-ke,
ka-ge,
kde,
kde-tz,
kea,
kea-cv,
kgp,
kgp-br,
khq,
khq-ml,
ki,
ki-ke,
kk,
kkj,
kkj-cm,
kk-kz,
kl,
kln,
kln-ke,
kl-gl,
km,
km-kh,
kn,
kn-in,
ko,
kok,
kok-in,
ko-kp,
ko-kr,
ks,
ksb,
ksb-tz,
ksf,
ksf-cm,
ksh,
ksh-de,
ks-in,
ku,
ku-tr,
kw,
kw-gb,
ky,
ky-kg,
lag,
lag-tz,
lb,
lb-lu,
lg,
lg-ug,
lkt,
lkt-us,
ln,
ln-ao,
ln-cd,
ln-cf,
ln-cg,
lo,
lo-la,
lrc,
lrc-iq,
lrc-ir,
lt,
lt-lt,
lu,
luo,
luo-ke,
luy,
luy-ke,
lu-cd,
lv,
lv-lv,
mai,
mai-in,
mas,
mas-ke,
mas-tz,
mdf,
mdf-ru,
mer,
mer-ke,
mfe,
mfe-mu,
mg,
mgh,
mgh-mz,
mgo,
mgo-cm,
mg-mg,
mi,
mi-nz,
mk,
mk-mk,
ml,
ml-in,
mn,
mni,
mni-in,
mn-mn,
mr,
mr-in,
ms,
ms-bn,
ms-id,
ms-my,
ms-sg,
mt,
mt-mt,
mua,
mua-cm,
my,
my-mm,
mzn,
mzn-ir,
naq,
naq-na,
nb,
nb-no,
nb-sj,
nd,
nds,
nds-de,
nds-nl,
nd-zw,
ne,
ne-in,
ne-np,
nl,
nl-aw,
nl-be,
nl-bq,
nl-ch,
nl-cw,
nl-lu,
nl-nl,
nl-sr,
nl-sx,
nmg,
nmg-cm,
nn,
nnh,
nnh-cm,
nn-no,
no,
no-no,
nus,
nus-ss,
nyn,
nyn-ug,
oc,
oc-es,
oc-fr,
om,
om-et,
om-ke,
or,
or-in,
os,
os-ge,
os-ru,
pa,
pa-in,
pa-pk,
pcm,
pcm-ng,
pis,
pis-sb,
pl,
pl-pl,
prg,
prg-001,
ps,
ps-af,
ps-pk,
pt,
pt-ao,
pt-br,
pt-ch,
pt-cv,
pt-gq,
pt-gw,
pt-lu,
pt-mo,
pt-mz,
pt-pt,
pt-st,
pt-tl,
qu,
qu-bo,
qu-ec,
qu-pe,
raj,
raj-in,
rm,
rm-ch,
rn,
rn-bi,
ro,
rof,
rof-tz,
ro-md,
ro-ro,
ru,
ru-by,
ru-kg,
ru-kz,
ru-md,
ru-ru,
ru-ua,
rw,
rwk,
rwk-tz,
rw-rw,
sa,
sah,
sah-ru,
saq,
saq-ke,
sat,
sat-in,
sa-in,
sbp,
sbp-tz,
sc,
sc-it,
sd,
sd-in,
sd-pk,
se,
seh,
seh-mz,
ses,
ses-ml,
se-fi,
se-no,
se-se,
sg,
sg-cf,
shi,
shi-ma,
si,
si-lk,
sk,
sk-sk,
sl,
sl-si,
smn,
smn-fi,
sms,
sms-fi,
sn,
sn-zw,
so,
so-dj,
so-et,
so-ke,
so-so,
sq,
sq-al,
sq-mk,
sq-xk,
sr,
sr-ba,
sr-cs,
sr-me,
sr-rs,
sr-xk,
su,
su-id,
sv,
sv-ax,
sv-fi,
sv-se,
sw,
sw-cd,
sw-ke,
sw-tz,
sw-ug,
sy,
ta,
ta-in,
ta-lk,
ta-my,
ta-sg,
te,
teo,
teo-ke,
teo-ug,
te-in,
tg,
tg-tj,
th,
th-th,
ti,
ti-er,
ti-et,
tk,
tk-tm,
tl,
to,
tok,
tok-001,
to-to,
tr,
tr-cy,
tr-tr,
tt,
tt-ru,
twq,
twq-ne,
tzm,
tzm-ma,
ug,
ug-cn,
uk,
uk-ua,
ur,
ur-in,
ur-pk,
uz,
uz-af,
uz-uz,
vai,
vai-lr,
vi,
vi-vn,
vo,
vo-001,
vun,
vun-tz,
wae,
wae-ch,
wo,
wo-sn,
xh,
xh-za,
xog,
xog-ug,
yav,
yav-cm,
yo,
yo-bj,
yo-ng,
yrl,
yrl-br,
yrl-co,
yrl-ve,
yue,
yue-cn,
yue-hk,
zgh,
zgh-ma,
zh,
zh-cn,
zh-hans,
zh-hant,
zh-hk,
zh-mo,
zh-sg,
zh-tw,
zu,
zu-za
Example:

"en"

type
enum<string>

The email type, this is derived from other properties on the email such as subcategory.

Available options:
AB_EMAIL,
BATCH_EMAIL,
LOCALTIME_EMAIL,
AUTOMATED_AB_EMAIL,
BLOG_EMAIL,
BLOG_EMAIL_CHILD,
RSS_EMAIL,
RSS_EMAIL_CHILD,
RESUBSCRIBE_EMAIL,
OPTIN_EMAIL,
OPTIN_FOLLOWUP_EMAIL,
AUTOMATED_EMAIL,
FEEDBACK_CES_EMAIL,
FEEDBACK_CUSTOM_EMAIL,
FEEDBACK_CUSTOM_SURVEY_EMAIL,
FEEDBACK_NPS_EMAIL,
FOLLOWUP_EMAIL,
LEADFLOW_EMAIL,
SINGLE_SEND_API,
MARKETING_SINGLE_SEND_API,
SMTP_TOKEN,
TICKET_EMAIL,
MEMBERSHIP_REGISTRATION_EMAIL,
MEMBERSHIP_PASSWORD_SAVED_EMAIL,
MEMBERSHIP_PASSWORD_RESET_EMAIL,
MEMBERSHIP_EMAIL_VERIFICATION_EMAIL,
MEMBERSHIP_PASSWORDLESS_AUTH_EMAIL,
MEMBERSHIP_REGISTRATION_FOLLOW_UP_EMAIL,
MEMBERSHIP_OTP_LOGIN_EMAIL,
MEMBERSHIP_FOLLOW_UP_EMAIL,
MEMBERSHIP_VERIFICATION_EMAIL
Example:

"BATCH_EMAIL"

campaignUtm
string
businessUnitId
string
webversion
object
workflowNames
string[]

Names of workflows in which the email is used within a "send email" action.

archived
boolean

Determines if the email is archived or not.

Example:

false

publishedByName
string

Name of the user who published the email.

createdAt
string<date-time>

The date and time of the email's creation, in ISO8601 representation.

Example:

"2020-11-30T18:43:17.136+00:00"

unpublishedAt
string<date-time>
stats
object
folderIdV2
integer
jitterSendTime
boolean
allEmailCampaignIds
string[]

List of emailCampaignIds.

isAb
boolean
primaryEmailCampaignId
string
createdById
string

The id of the user who created the email.

Example:

"3739732"

updatedAt
string<date-time>

The date and time of the last update to the email, in ISO8601 representation.

Example:

"2020-11-30T18:44:20.384+00:00"

clonedFrom
string

The ID of the email this email was cloned from.

Example:

"3817552341"

rssData
object

RSS related data if it is a blog or rss email.

emailTemplateMode
enum<string>
Available options:
DESIGN_MANAGER,
DRAG_AND_DROP
publishedAt
string<date-time>

The date and time the email was published at, in ISO8601 representation.

publishedById
string

The ID of the user who published the email.

isPublished
boolean

Returns the published status of the email. This is read only.

Example:

false

testing
object

AB testing related data. This property is only returned for AB type emails.

updatedById
string

The ID of the user who last updated the email.

Example:

"3739732"

folderId
integer
emailCampaignGroupId
string
subscriptionDetails
object

Data structure representing the subscription fields of the email.

deletedAt
string<date-time>

The date and time the email was deleted at, in ISO8601 representation.

previewKey
string
activeDomain
string

The active domain of the email.

Example:

"test.hs-sites.com"

campaign
string

The campaign GUID on the email.

Example:

"1b7f51a6-33c1-44d6-ba28-fe81f655dced"

campaignName
string

The name of the campaign.