Enroll people into a campaign.
Up to 100 at once (201), more through a job (202). Unknown people, suppressed addresses and
people already enrolled are skipped.
/v1/enrollmentsAuthorizationBearer token · headerrequiredAn API key (nb_live_…, nb_test_…), a workspace token (nbs_…) or a CLI token (nbc_…).
Idempotency-KeystringrequiredA stable key for this logical request; reuse it when retrying.
application/jsoncampaign_idstringrequiredThe campaign (cmp_…).
emailsstring[] | nullPeople by address, at most 1,000; an address that is no person of the workspace is skipped.
group_idstring | nullA group's members (grp_…).
person_idsstring[] | nullPeople by id (per_…), at most 1,000.
segment_idstring | nullThe people a segment matches (seg_…).
Up to 100 people: the enrollments made and the people skipped.
dataEnrollmentObject[]requiredThe enrollments created.
Show propertiesHide properties
EnrollmentObjectcampaign_idId_Campaignrequiredcreated_atTimestamprequiredidId_Enrollmentrequiredmessage_idId_Message | nullShow propertiesHide properties
stringnullnext_run_atTimestamp | nullShow propertiesHide properties
string<date-time>nullpersonPersonRefrequiredThe person an enrollment is for.
Show propertiesHide properties
emailstringrequiredidId_Personrequirednamestring | nullThe given and family names, when the person has either.
positioninteger<int32>requiredThe step it is at, 1 for the first.
sender_identity_idId_SenderIdentity | nullShow propertiesHide properties
stringnullstatusEnrollmentStatusrequiredAn enrollment's lifecycle (enrollments.status).
activepausedcompletedrepliedstoppedfailedstatus_detailstring | nullWhy it ended, when it ended early.
updated_atTimestamprequiredwaiting_forId_SenderIdentity | nullShow propertiesHide properties
stringnullskippedSkipped[]requiredThe people that were not enrolled, and why.
Show propertiesHide properties
Skippedemailstring | nullThe address, when the request named the person by it.
person_idId_Person | nullShow propertiesHide properties
stringnullreasonSkipReasonrequiredWhy a person was not enrolled.
not_foundsuppressedalready_enrolledMore than 100 people: the enrollment.add job; Location names it.
attemptsinteger<int32>requiredFailed runs so far; a yield is not a failure.
cancel_requested_atTimestamp | nullShow propertiesHide properties
string<date-time>nullcreated_atTimestamprequiredfinished_atTimestamp | nullShow propertiesHide properties
string<date-time>nullidId_JobrequiredkindstringrequiredThe kind of work, such as enrollment.add. New kinds may be added.
last_errorLastError | nullShow propertiesHide properties
atTimestamprequiredWhen the job's row last changed: the moment of the error for a job that ended, and at or after it while the job is still waiting or running (the row keeps no separate time for its error).
codestringrequiredA short machine-readable code (error, lease_expired, unknown_kind, cancelled, …).
detailstringrequiredA human-readable explanation.
nullprogressanyWhat the job has done so far, as its last checkpoint recorded it.
resultanyThe job's bounded result, once it completed (at most 64 KiB).
stateJobStaterequiredWhere a job is (jobs.state): available while it waits for its run, running, then
completed, failed or cancelled; needs_review when an operator decides whether an
ambiguous external effect happened.
availablerunningcompletedfailedcancelledneeds_reviewupdated_atTimestamprequiredNo valid credential.
codeProblemCoderequiredThe closed registry of problem codes: programs branch on a problem's code, never on its
text. A code may be added, never repurposed.
invalid_requestunauthorizedforbiddensession_requirednot_foundarchivedmethod_not_allowedconflictinvalid_stateidempotency_in_progressprecondition_failedpayload_too_largeunsupported_media_typevalidation_failedidempotency_mismatchsuppressedcaptcha_failedinsufficient_scoperate_limitedquota_exceededinternal_errorservice_unavailabletimeoutdetailstringrequiredWhat 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.
codeProblemCoderequiredThe closed registry of problem codes: programs branch on a problem's code, never on its
text. A code may be added, never repurposed.
invalid_requestunauthorizedforbiddensession_requirednot_foundarchivedmethod_not_allowedconflictinvalid_stateidempotency_in_progressprecondition_failedpayload_too_largeunsupported_media_typevalidation_failedidempotency_mismatchsuppressedcaptcha_failedinsufficient_scoperate_limitedquota_exceededinternal_errorservice_unavailabletimeoutdetailstringrequiredWhat 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, group or segment in this workspace.
codeProblemCoderequiredThe closed registry of problem codes: programs branch on a problem's code, never on its
text. A code may be added, never repurposed.
invalid_requestunauthorizedforbiddensession_requirednot_foundarchivedmethod_not_allowedconflictinvalid_stateidempotency_in_progressprecondition_failedpayload_too_largeunsupported_media_typevalidation_failedidempotency_mismatchsuppressedcaptcha_failedinsufficient_scoperate_limitedquota_exceededinternal_errorservice_unavailabletimeoutdetailstringrequiredWhat 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 (invalid_state).
codeProblemCoderequiredThe closed registry of problem codes: programs branch on a problem's code, never on its
text. A code may be added, never repurposed.
invalid_requestunauthorizedforbiddensession_requirednot_foundarchivedmethod_not_allowedconflictinvalid_stateidempotency_in_progressprecondition_failedpayload_too_largeunsupported_media_typevalidation_failedidempotency_mismatchsuppressedcaptcha_failedinsufficient_scoperate_limitedquota_exceededinternal_errorservice_unavailabletimeoutdetailstringrequiredWhat 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 names no source of people or more than one.
codeProblemCoderequiredThe closed registry of problem codes: programs branch on a problem's code, never on its
text. A code may be added, never repurposed.
invalid_requestunauthorizedforbiddensession_requirednot_foundarchivedmethod_not_allowedconflictinvalid_stateidempotency_in_progressprecondition_failedpayload_too_largeunsupported_media_typevalidation_failedidempotency_mismatchsuppressedcaptcha_failedinsufficient_scoperate_limitedquota_exceededinternal_errorservice_unavailabletimeoutdetailstringrequiredWhat 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.