POST /v2/gate/outbound extends the production gate to live-chat channels.
channel: "email" behaves identically to POST /v1/gate/outbound; use v1
directly for email-only integrations.
recipient format depends on channel: email address (email), E.164 phone
number (whatsapp/sms), @username or numeric ID (telegram), profile URL
(linkedin), user/channel ID (slack). subject and body_html are required
only when channel is email; body_text is always required.
Auto-remediation
Setauto_remediate: true for live-chat channels where review latency is
unacceptable. When every violation is WARN severity (no BLOCK), DataVibe
applies safer_alternative substitutions inline and returns APPROVED
immediately, no human queue. Any BLOCK violation still requires human
review regardless of this flag.
Response
hold_tokenis present whenstatusisQUEUEDon a non-email channel. Store it. DataVibe returns it again in the approval/rejection callback so the bot can match the hold back to the original message.ack_messageis a suggested instant reply for the bot to send while the real message waits for review. Falls back to a channel-appropriate default; configurable per workspace viaack_template.safe_fallbackis a suggested reply if the bot needs to respond without ever exposing the held content (for example, a hard timeout on the customer’s side).
Review callback
Configurecallback_url (and optionally callback_secret) in workspace
governance settings. When a reviewer approves or rejects a QUEUED
submission, DataVibe POSTs to that URL:
event is gate.review.approved or gate.review.rejected. If callback_secret
is configured, the request is HMAC-signed the same way as governance webhooks:
f"{timestamp}.{raw_body}", HMAC-SHA256 over
callback_secret. Reject the callback if the signature doesn’t match or the
timestamp is stale.
No
callback_url configured? Poll GET /v2/gate/outbound/{action_id} for
status instead of waiting for a push callback.Idempotency
Same rule as v1: a repeatedidempotency_key returns the original submission
unconditionally. DataVibe does not compare the retried payload against the
original; see Idempotency and retries.