Logo
Search
API Docs

Recording Consent Plan

Security & Compliance

Recording Consent Plan

Overview

The Recording Consent Plan is an enterprise feature that automatically manages call-recording consent before a caller reaches your main assistant. It helps you meet privacy regulations such as GDPR and CCPA by only beginning to record after consent has actually been granted.

When enabled, a dedicated consent assistant is placed first in the call flow. The caller hears (or is asked) about recording, and only once consent is resolved does the call proceed to your main assistant.

  1. A consent assistant runs first, before your main assistant.
  2. The caller grants or declines recording permission.
  3. If consent is granted, the call transfers to your original assistant.
  4. If consent is declined, the call ends or is redirected according to your configuration.

Recording consent plans are an enterprise-only feature. Contact your account team to enable it.



Configuration

The plan is configured inside the assistant's compliancePlan.recordingConsentPlan field.

Stay-on-line example

{
  "compliancePlan": {
    "recordingConsentPlan": {
      "type": "stay-on-line",
      "message": "For quality and training purposes, this call may be recorded. Please stay on the line if you agree to being recorded, or hang up if you do not consent.",
      "voice": {
        "provider": "sulus",
        "version": 2,
        "voiceId": "Elliot"
      },
      "waitSeconds": 3
    }
  }
}

Verbal consent example

{
  "compliancePlan": {
    "recordingConsentPlan": {
      "type": "verbal",
      "message": "This call may be recorded for quality and training purposes. Do you agree to being recorded? Please say 'yes' if you agree or 'no' if you decline.",
      "voice": {
        "provider": "sulus",
        "version": 2,
        "voiceId": "Elliot"
      },
      "declineToolId": "09dd39cc-75f0-45eb-ace3-796ee3aa9c1e"
    }
  }
}

Server SDK example

import { SulusClient } from "@core-system/server-sdk";

const client = new SulusClient({ token: process.env.SULUS_API_KEY });

const assistant = await client.assistants.create({
  name: "Customer Support Assistant",
  model: { provider: "openai", model: "gpt-4o" },
  voice: { provider: "11labs", voiceId: "sarah" },
  compliancePlan: {
    recordingConsentPlan: {
      type: "verbal",
      message: "This call may be recorded for quality and training purposes. Do you agree to being recorded? Please say 'yes' if you agree or 'no' if you decline.",
      declineTool: { type: "endCall" }
    }
  }
});

Decline Handling

When a caller declines, you decide what happens next by configuring the declineTool (or declineToolId):

  • End Call – use when you cannot provide service without recording.
  • Transfer – use when you have an alternative, non-recorded service path to offer.
  • Handoff – use when you have other assistants available that don't require recording.

Compliance Audit Trail

Consent outcomes are recorded on the call object and surfaced in the end-of-call webhook under compliance.recordingConsent:

  • type – the consent type used (verbal or stay-on-line).
  • grantedAt – a timestamp when consent was granted; absent if the caller declined or hung up before resolving consent.
const call = await client.calls.get(callId);

if (call.compliance?.recordingConsent?.grantedAt) {
  console.log("Consent granted at:", call.compliance.recordingConsent.grantedAt);
} else {
  console.log("No consent was granted for this call");
}

Because this data lands in both the call record and the end-of-call webhook payload, it gives you a durable audit trail you can retain alongside call recordings for compliance review.