Change a campaign: its settings, its pool, or its steps (the whole ordered list; a changed step gets a new revision for messages not yet created).
/v1/campaigns/{id}AuthorizationBearer token · headerrequiredAn API key (nb_live_…, nb_test_…), a workspace token (nbs_…) or a CLI token (nbc_…).
idId_CampaignrequiredThe campaign id (cmp_…).
If-MatchstringThe version the change applies to, quoted as the ETag that carried it ("1790000000000000"), or *. A version that is no longer current answers 412 precondition_failed and changes nothing; without the header the change applies to whatever version is current.
Idempotency-KeystringA stable key for this logical request; reuse it when retrying.
application/jsonnamestring | nullscheduleScheduleInput | nullShow propertiesHide properties
send_windowSendWindow | nullShow propertiesHide properties
daysinteger<int32>[]requiredThe days of the week, 1 (Monday) to 7 (Sunday), each once, in order.
endstringrequiredThe closing time, HH:MM, after the opening; 24:00 closes at midnight.
startstringrequiredThe opening time, HH:MM.
nullstart_atstring | nullNo step runs before this instant; null removes it.
timezonestring | nullAn IANA time zone, such as Europe/Madrid (default UTC).
nullsendersSendersInput | nullShow propertiesHide properties
identity_idsstring[] | nullThe identities the campaign names (sid_…), at most 500; replaces the list.
on_sender_removedOnSenderRemoved | nullShow propertiesHide properties
stringnulltagsstring[] | nullTags whose enabled identities join the pool, at most 20, each 1 to 50 characters.
nullstepsStepInput[] | nullThe whole ordered list: a step by id alone stays unchanged, by id with fields takes
them, without id is new, and one left out is removed (refused once it has sent).
Show propertiesHide properties
StepInputallocationAllocation | nullShow propertiesHide properties
stringnulldelay_secondsinteger<int32> | null0 to 31,536,000 seconds after the previous step's message was sent (default 0).
idId_Step | nullShow propertiesHide properties
stringnullnamestring | null1 to 200 characters; required for a new step.
personalisation_promptstring | nullWhat the AI writes each message's snippets from, 1 to 4,000 characters; null removes
it.
same_threadboolean | nullContinue the conversation's thread (default true).
variantsVariantInput[] | null1 to 10 variants; required for a new step.
Show propertiesHide properties
VariantInputbccstring[] | nullBlind-copied on every message of the variant, at most 20.
ccstring[] | nullCopied on every message of the variant, at most 20.
htmlstring | nullThe HTML body template, at most 256 KiB; required for a new variant.
idId_Variant | nullShow propertiesHide properties
stringnullnamestring | null1 to 200 characters (default: a letter by position).
preheaderstring | nullThe hidden preview text template, at most 1,000 characters; null removes it.
subjectstring | nullThe subject template, 1 to 1,000 characters; required for a new variant.
textstring | nullThe plain-text body template, at most 256 KiB; null removes it.
weightinteger<int32> | nullThe share under weighted allocation, 1 to 100 (default: the current weight, else 1).
winner_ruleWinnerRuleInput | nullShow propertiesHide properties
minimum_sampleinteger<int32> | null1 to 1,000,000 messages per variant.
objectiveObjective | nullShow propertiesHide properties
stringnullobservation_window_secondsinteger<int32> | null1 to 31,536,000 seconds.
nullwinner_variant_idstring | nullThe variant the step now sends to everyone (var_…), one of its variants; null clears
it.
stop_rulesStopRulesInput | nullShow propertiesHide properties
company_on_replyboolean | nullcooldown_hoursinteger<int32> | null0 to 8,760 hours (default 72).
on_replyStopOnReply | nullShow propertiesHide properties
stringnullnulltrackingTrackingInput | nullShow propertiesHide properties
clicksboolean | nulldomain_idstring | nullA sending domain whose tracking host the links use (dom_…); null: the platform's.
opensboolean | nullnullThe campaign.
created_atTimestamprequiredidId_Campaignrequiredlast_errorCampaignLastError | nullShow propertiesHide properties
atTimestamprequiredcodestringrequiredno_sender or invalid. New codes may be added.
detailstringrequirednullnamestringrequiredscheduleScheduleObjectrequiredWhen the campaign sends.
Show propertiesHide properties
send_windowSendWindow | nullShow propertiesHide properties
daysinteger<int32>[]requiredThe days of the week, 1 (Monday) to 7 (Sunday), each once, in order.
endstringrequiredThe closing time, HH:MM, after the opening; 24:00 closes at midnight.
startstringrequiredThe opening time, HH:MM.
nullstart_atTimestamp | nullShow propertiesHide properties
string<date-time>nulltimezonestringrequiredThe IANA time zone of the send window.
sendersSendersObjectrequiredThe campaign's pool of senders.
Show propertiesHide properties
identity_idsId_SenderIdentity[]requiredThe identities the campaign names (sid_…).
on_sender_removedOnSenderRemovedrequiredWhat a campaign does with a conversation whose sender left its pool
(campaigns.on_sender_removed).
reassignstoptagsstring[]requiredEvery enabled identity carrying one of these tags joins the pool, as it is when a sender is assigned.
statsStatsObjectrequiredThe campaign's counters, from the analytics rollup.
Show propertiesHide properties
bouncedinteger<int64>requiredclickedinteger<int64>requiredcomputed_atTimestamp | nullShow propertiesHide properties
string<date-time>nullopenedinteger<int64>requiredrepliedinteger<int64>requiredsentinteger<int64>requiredunsubscribedinteger<int64>requiredstatusCampaignStatusrequiredA campaign's lifecycle (campaigns.status).
draftmaterialisingactivepausedcompletedarchivedstepsStepObject[]requiredThe steps in order, with their variants (a list leaves out the variants' bodies).
Show propertiesHide properties
StepObjectallocationAllocationrequiredHow a step revision assigns its variants (step_revisions.allocation).
balancedweightedautomaticdelay_secondsinteger<int32>requiredHow long after the previous step's message was sent this step is due; the first step runs when a person is enrolled, so its delay is not used.
idId_Steprequirednamestringrequiredpersonalisation_promptstring | nullWhat the AI writes each message's snippets from (the variables namespace); null: the
templates alone.
positioninteger<int32>required1 for the first step.
revisioninteger<int32>requiredThe current revision: what messages created now are made from.
same_threadbooleanrequiredWhether the step's message continues the conversation's thread (a reply to the previous message) or starts a new one.
variantsVariantObject[]requiredThe variants this revision offers.
Show propertiesHide properties
VariantObjectbccstring[]requiredccstring[]requiredidId_Variantrequirednamestringrequiredpreheaderstring | nullThe hidden preview text template.
subjectstringrequiredThe subject template.
versioninteger<int32>requiredThe version of its content the step's revision offers.
weightinteger<int32>requiredIts share under weighted allocation, 1 to 100.
winnerWinnerObject | nullShow propertiesHide properties
selected_atTimestamprequiredselected_bystringrequiredautomatic, or the user who chose it (usr_…).
variant_idId_Variantrequirednullwinner_ruleWinnerRuleObjectrequiredWhen an automatic step names its winner.
Show propertiesHide properties
minimum_sampleinteger<int32>requiredThe messages every variant must have sent first.
objectiveObjectiverequiredWhat a test of variants is decided by (step_revisions.ranking_objective).
opensclicksrepliesobservation_window_secondsinteger<int32>requiredHow long after the revision was published the results are read.
stop_rulesStopRulesObjectrequiredWhen an enrollment stops before its last step.
Show propertiesHide properties
company_on_replybooleanrequiredWhether a reply also stops this campaign's enrollments of people at the same email domain (the same company).
cooldown_hoursinteger<int32>requiredA new enrollment's first step waits until this many hours have passed since the person's last campaign message from the workspace.
on_replyStopOnReplyrequiredWhich enrollments a person's reply stops (campaigns.stop_on_reply).
allcampaignnonetrackingTrackingObjectrequiredWhat the campaign's messages track.
Show propertiesHide properties
clicksbooleanrequireddomain_idId_SendingDomain | nullShow propertiesHide properties
stringnullopensbooleanrequiredupdated_atTimestamprequiredversioninteger<int64>requiredThe version an update's If-Match names.
The body is not JSON, or If-Match is malformed (invalid_request).
codestringrequiredThe code from the closed registry; programs branch on it, never on the text. New codes may be added.
detailstringrequiredWhat went wrong, for a person; never an internal cause.
errorsFieldError[]With validation_failed only: every invalid field.
Show propertiesHide properties
FieldErrorcodestringrequiredWhat is wrong (required, range, length, format, invalid, …).
detailstringrequiredA safe, human-readable explanation.
pointerstringrequiredRFC 6901 pointer into the body, or ?name for a query parameter.
instancestringrequiredThe request's path.
request_idstringrequiredThe request's id, also in X-Request-Id: what support needs to find the request.
retry_afterinteger<int64> | nullWith 429 and 503: the seconds to wait, as in Retry-After.
statusinteger<int32>requiredThe HTTP status.
titlestringrequiredFixed per code.
typestringrequiredhttps://docs.norbelys.com/errors/<code>, a page that explains the code.
No valid credential.
codestringrequiredThe code from the closed registry; programs branch on it, never on the text. New codes may be added.
detailstringrequiredWhat went wrong, for a person; never an internal cause.
errorsFieldError[]With validation_failed only: every invalid field.
Show propertiesHide properties
FieldErrorcodestringrequiredWhat is wrong (required, range, length, format, invalid, …).
detailstringrequiredA safe, human-readable explanation.
pointerstringrequiredRFC 6901 pointer into the body, or ?name for a query parameter.
instancestringrequiredThe request's path.
request_idstringrequiredThe request's id, also in X-Request-Id: what support needs to find the request.
retry_afterinteger<int64> | nullWith 429 and 503: the seconds to wait, as in Retry-After.
statusinteger<int32>requiredThe HTTP status.
titlestringrequiredFixed per code.
typestringrequiredhttps://docs.norbelys.com/errors/<code>, a page that explains the code.
The credential lacks campaigns:write.
codestringrequiredThe code from the closed registry; programs branch on it, never on the text. New codes may be added.
detailstringrequiredWhat went wrong, for a person; never an internal cause.
errorsFieldError[]With validation_failed only: every invalid field.
Show propertiesHide properties
FieldErrorcodestringrequiredWhat is wrong (required, range, length, format, invalid, …).
detailstringrequiredA safe, human-readable explanation.
pointerstringrequiredRFC 6901 pointer into the body, or ?name for a query parameter.
instancestringrequiredThe request's path.
request_idstringrequiredThe request's id, also in X-Request-Id: what support needs to find the request.
retry_afterinteger<int64> | nullWith 429 and 503: the seconds to wait, as in Retry-After.
statusinteger<int32>requiredThe HTTP status.
titlestringrequiredFixed per code.
typestringrequiredhttps://docs.norbelys.com/errors/<code>, a page that explains the code.
No such campaign, sender identity or tracking domain in this workspace.
codestringrequiredThe code from the closed registry; programs branch on it, never on the text. New codes may be added.
detailstringrequiredWhat went wrong, for a person; never an internal cause.
errorsFieldError[]With validation_failed only: every invalid field.
Show propertiesHide properties
FieldErrorcodestringrequiredWhat is wrong (required, range, length, format, invalid, …).
detailstringrequiredA safe, human-readable explanation.
pointerstringrequiredRFC 6901 pointer into the body, or ?name for a query parameter.
instancestringrequiredThe request's path.
request_idstringrequiredThe request's id, also in X-Request-Id: what support needs to find the request.
retry_afterinteger<int64> | nullWith 429 and 503: the seconds to wait, as in Retry-After.
statusinteger<int32>requiredThe HTTP status.
titlestringrequiredFixed per code.
typestringrequiredhttps://docs.norbelys.com/errors/<code>, a page that explains the code.
The campaign is archived, or a removed step has sent mail (invalid_state).
codestringrequiredThe code from the closed registry; programs branch on it, never on the text. New codes may be added.
detailstringrequiredWhat went wrong, for a person; never an internal cause.
errorsFieldError[]With validation_failed only: every invalid field.
Show propertiesHide properties
FieldErrorcodestringrequiredWhat is wrong (required, range, length, format, invalid, …).
detailstringrequiredA safe, human-readable explanation.
pointerstringrequiredRFC 6901 pointer into the body, or ?name for a query parameter.
instancestringrequiredThe request's path.
request_idstringrequiredThe request's id, also in X-Request-Id: what support needs to find the request.
retry_afterinteger<int64> | nullWith 429 and 503: the seconds to wait, as in Retry-After.
statusinteger<int32>requiredThe HTTP status.
titlestringrequiredFixed per code.
typestringrequiredhttps://docs.norbelys.com/errors/<code>, a page that explains the code.
If-Match names a version that is no longer current (precondition_failed); nothing changed.
codestringrequiredThe code from the closed registry; programs branch on it, never on the text. New codes may be added.
detailstringrequiredWhat went wrong, for a person; never an internal cause.
errorsFieldError[]With validation_failed only: every invalid field.
Show propertiesHide properties
FieldErrorcodestringrequiredWhat is wrong (required, range, length, format, invalid, …).
detailstringrequiredA safe, human-readable explanation.
pointerstringrequiredRFC 6901 pointer into the body, or ?name for a query parameter.
instancestringrequiredThe request's path.
request_idstringrequiredThe request's id, also in X-Request-Id: what support needs to find the request.
retry_afterinteger<int64> | nullWith 429 and 503: the seconds to wait, as in Retry-After.
statusinteger<int32>requiredThe HTTP status.
titlestringrequiredFixed per code.
typestringrequiredhttps://docs.norbelys.com/errors/<code>, a page that explains the code.
The body is invalid, or a template does not parse.
codestringrequiredThe code from the closed registry; programs branch on it, never on the text. New codes may be added.
detailstringrequiredWhat went wrong, for a person; never an internal cause.
errorsFieldError[]With validation_failed only: every invalid field.
Show propertiesHide properties
FieldErrorcodestringrequiredWhat is wrong (required, range, length, format, invalid, …).
detailstringrequiredA safe, human-readable explanation.
pointerstringrequiredRFC 6901 pointer into the body, or ?name for a query parameter.
instancestringrequiredThe request's path.
request_idstringrequiredThe request's id, also in X-Request-Id: what support needs to find the request.
retry_afterinteger<int64> | nullWith 429 and 503: the seconds to wait, as in Retry-After.
statusinteger<int32>requiredThe HTTP status.
titlestringrequiredFixed per code.
typestringrequiredhttps://docs.norbelys.com/errors/<code>, a page that explains the code.