Release a message's holds.
A recipient is held when evidence about this message said its mailbox was full, its server
asked to come back later, or its domain had no mail route: mail to the address waits until a
later success of the message lifts the hold, the hold’s time runs out, or a person who knows
better releases it here. Every open hold of the message is resolved as manual, so mail to
those addresses flows again, and the evidence is kept in the workspace’s audit log. A message
without open holds is answered as it is.
/v1/messages/{id}/release_holdsAuthorizationBearer token · headerrequiredAn API key (nb_live_…, nb_test_…), a workspace token (nbs_…) or a CLI token (nbc_…).
idId_MessagerequiredThe message id (msg_…).
Idempotency-KeystringrequiredA stable key for this logical request; reuse it when retrying.
application/jsonevidencestringrequiredWhat shows the holds no longer apply, for the record: what the person checked. At most 2,000 characters.
The message, its holds released.
attemptsMessageAttemptsrequiredA message's latest attempts.
Show propertiesHide properties
dataAttemptObject[]requiredAt most 20, newest first.
Show propertiesHide properties
AttemptObjectcategoryEvidenceCategory | nullShow propertiesHide properties
stringnullclaimed_atTimestamprequiredconnection_idId_Connectionrequireddiagnosticstring | nullThe provider's words, bounded and redacted.
enhanced_statusstring | nullfinished_atTimestamp | nullShow propertiesHide properties
TimestampnullidId_Attemptrequirednumberinteger<int32>required1 for the message's first attempt.
outcomeAttemptOutcome | nullShow propertiesHide properties
stringnullphaseSubmissionPhase | nullShow propertiesHide properties
stringnullprovider_message_idstring | nullThe provider's id of the accepted message, when it returns one.
recipient_countinteger<int32>requiredsmtp_codeinteger<int32> | nullstarted_atTimestamp | nullShow propertiesHide properties
Timestampnullhas_morebooleanrequiredMore attempts exist than data shows; read them through an export.
attempts_countinteger<int64>requiredEvery attempt it had.
bccstring[]requiredcampaign_idId_Campaign | nullShow propertiesHide properties
stringnullccstring[]requiredconnection_idId_Connectionrequiredcreated_atTimestamprequiredenrollment_idId_Enrollment | nullShow propertiesHide properties
stringnulleventsMessageEventsrequiredA message's first delivery events.
Show propertiesHide properties
dataDeliveryEventObject[]requiredAt most 20, in the order they were observed.
Show propertiesHide properties
DeliveryEventObjectactionDsnAction | nullShow propertiesHide properties
stringnullattempt_numberinteger<int32> | nullThe attempt it comes from, when its source is an attempt.
categoryEvidenceCategoryrequiredWhy an outcome happened, in a closed vocabulary (attempts.category,
delivery_events.category).
acceptedinvalid_recipientmailbox_fullno_routeinvalid_addresscontent_rejectedpolicythrottledunauthorizedforbiddenconnection_faileddeadlineunsupportedtransientrejecteduncertaindeliveredcomplaintunsubscribedaddress_changedexpiredsuppressedsender_archivedrender_failedworkspace_deletedconfidenceEvidenceConfidencerequiredHow much a delivery event can be trusted (delivery_events.confidence).
authenticatedcorroboratedinferredhuman_textdiagnosticstring | nullenhanced_statusstring | nullidId_DeliveryEventrequiredkindDeliveryEventKindrequiredWhat kind of observation a delivery event is (delivery_events.kind).
accepteddeferreddeliveredbouncedrejectedcomplaintunsubscribedaddress_changedreportedmessage_idId_Message | nullShow propertiesHide properties
stringnullobserved_atTimestamprequiredWhen the source observed it.
phaseSubmissionPhase | nullShow propertiesHide properties
SubmissionPhasenullprocessed_atTimestamprequiredWhen Norbelys recorded it.
provider_codestring | nullAn exact provider-specific rejection code found in diagnostic, when any; it does not
change the event's kind, recipient effect, or retry decision.
received_atTimestamprequiredWhen Norbelys received it.
recipientstring | nullThe recipient it concerns; null when the evidence names none.
recipient_refRecipientRefrequiredWhy an event's recipient is known (delivery_events.recipient_ref).
namedsingle_envelopeunknownsourceEvidenceSourcerequiredWhere a delivery event came from (delivery_events.source).
smtpprovider_apiprovider_webhookdsnarfinbound_noticepreflightunsubscribemanualsent_folderthread_idId_Thread | nullShow propertiesHide properties
Id_Threadnullhas_morebooleanrequiredMore events exist; url lists them all.
urlstringrequiredThe delivery event list of this message.
expires_atTimestamp | nullShow propertiesHide properties
string<date-time>nullfromAddressrequiredAn address and its display name.
Show propertiesHide properties
emailstringrequirednamestring | nullholdsHoldObject[]requiredOne per held recipient: at most the 150 addresses of the envelope.
Show propertiesHide properties
HoldObjectemailstringrequiredobserved_atTimestamprequiredreasonHoldReasonrequiredWhy an address is held (recipient_holds.reason).
mailbox_fullgreylistedno_routeinvalid_recipientresolutionHoldResolution | nullShow propertiesHide properties
stringnullresolved_atTimestamp | nullShow propertiesHide properties
string<date-time>nullreview_afterTimestamprequiredWhen the hold is checked again.
idId_Messagerequiredin_reply_tostring | nullThe Message-ID it answers.
internet_message_idstringrequiredThe Message-ID header.
kindMessageKindrequiredWhat a message is, as messages.kind stores it.
campaigndirectreplytransactionalperson_idId_Person | nullShow propertiesHide properties
stringnullreply_tostring | nullsend_atTimestamprequiredWhen it is due.
sender_identity_idId_SenderIdentityrequiredsent_atTimestamp | nullShow propertiesHide properties
string<date-time>nullsnippets_fallbackSnippetsFallback | nullShow propertiesHide properties
stringnullstateMessageStaterequiredWhere a message is in its life, as messages.state stores it. queued, claimed and
in_flight are live (the message has a row in the delivery queue); the others are final.
queuedclaimedin_flightsentfailedcancelleduncertainsuppressedstatus_detailstring | nullWhy it is in its state, when that needs words.
step_idId_Step | nullShow propertiesHide properties
stringnullsubjectstringrequiredThe subject as sent.
thread_idId_Thread | nullShow propertiesHide properties
stringnulltostring[]requiredtrackingTrackingrequiredWhat a message tracks, frozen when it was created.
Show propertiesHide properties
clicksbooleanrequiredIts links lead through click links.
hostnamestring | nullThe campaign's own tracking host, when it has one; the platform's otherwise.
opensbooleanrequiredAn open pixel is added to its HTML.
updated_atTimestamprequiredvariant_idId_Variant | nullShow propertiesHide properties
stringnullNo Idempotency-Key, or malformed JSON.
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 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 messages:send.
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 message 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 body is invalid (validation_failed).
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.