Skip to main content
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

Set auto_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_token is present when status is QUEUED on 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_message is 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 via ack_template.
  • safe_fallback is 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

Configure callback_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:
The signed message is 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 repeated idempotency_key returns the original submission unconditionally. DataVibe does not compare the retried payload against the original; see Idempotency and retries.
Last modified on July 24, 2026