> ## Documentation Index
> Fetch the complete documentation index at: https://docs.datavibe.cc/llms.txt
> Use this file to discover all available pages before exploring further.

# Sequencers and CRMs

> Gate completed outbound before Apollo, Outreach, Salesloft, HubSpot, or another sender.

Call the gate immediately before your sequencer enqueue operation:

```text theme={null}
Draft ready → DataVibe gate → final release → Apollo / Outreach / CRM
```

Map the message recipient, subject, text/HTML body, model name, and a stable
campaign/send identifier to `POST /v1/gate/outbound`.

```javascript theme={null}
const gate = await submitToDataVibe({
  recipient: message.to,
  subject: message.subject,
  body_text: message.text,
  body_html: message.html,
  source_model: message.model,
  idempotency_key: message.sendId,
});

if (gate.status === "APPROVED") {
  await sequencer.enqueue(message);
} else if (gate.status === "SENT") {
  console.log("DataVibe already dispatched this message");
} else {
  await hold(message, gate);
}
```

<Warning>
  Do not use `status !== "BLOCKED"` as the condition for sequencer enqueue.
  `QUEUED` must remain on hold until a reviewer approves it.
</Warning>

Use `metadata.source_records` for CRM or enrichment facts and
`metadata.planned_crm_actions` to audit downstream writes that would occur after
release. DataVibe records these planned actions; it does not execute arbitrary
CRM mutations.

For HubSpot specifically, DataVibe also has an OAuth connection that pulls
`source_records` directly from contact properties and a signed inbound
webhook. See [HubSpot](/integrations/hubspot).
