Skip to content

eConsent Voice

eConsent Voice is the TCPA compliance API for outbound calling. It covers the entire call lifecycle: pre-dial consent verification, in-call verbal consent capture, real-time revocation propagation, and post-call evidence packaging.

https://voice.econsent.org/v1

All endpoints (except /v1/register and /v1/health) require a Bearer token:

Authorization: Bearer ec_voice_YOUR_KEY

Get a free API key by calling POST /v1/register or signing up at econsent.org/voice.

POST /v1/precall

Verify a call is allowed before dialing. Returns the consent status, disclosure script, and a decision ID. Read more

POST /v1/capture-verbal

Capture verbal consent during a call. The classifier verifies the consent is genuine and non-coerced. Read more

POST /v1/revoke

Revoke consent when a consumer opts out. Propagates across the network and starts the FCC honor window. Read more

POST /v1/post-call

Store the call evidence bundle after the call ends. Signed, tamper-proof, court-ready. Read more

Terminal window
curl -X POST https://voice.econsent.org/v1/register \
-H "Content-Type: application/json" \
-d '{"email":"you@company.com","name":"Your Name","company":"Your Company"}'

Response:

{
"api_key": "ec_voice_a1b2c3d4e5f6...",
"tier": "free",
"monthly_precall_quota": 5000,
"note": "Store this key securely. It will not be shown again."
}
Terminal window
curl -X POST https://voice.econsent.org/v1/precall \
-H "Authorization: Bearer ec_voice_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"phone": "+15551234567",
"calling_entity": "Acme Insurance LLC",
"calling_number": "+18005550100",
"purpose": "telemarketing",
"call_type": "ai_voice"
}'

If allowed: true, the response includes the FCC-required disclosure script your agent should read at the start of the call. If allowed: false, the response tells you why (no consent, revoked, DNC, AI consent missing).

Terminal window
curl -X POST https://voice.econsent.org/v1/revoke \
-H "Authorization: Bearer ec_voice_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"phone": "+15551234567",
"calling_entity": "Acme Insurance LLC",
"trigger": "verbal_stop_during_call"
}'

Future precall checks for this consumer will return allowed: false until fresh consent is captured.

LanguagePackageInstall
Node.js / TypeScript@econsent/voicenpm install @econsent/voice
Pythoneconsent-voicepip install econsent-voice
import { EConsentVoice } from '@econsent/voice';
const voice = new EConsentVoice({ apiKey: process.env.ECONSENT_VOICE_KEY });
const { allowed, disclosure } = await voice.precall({
phone: '+15551234567',
callingEntity: 'Acme Insurance LLC',
callingNumber: '+18005550100',
purpose: 'telemarketing',
callType: 'ai_voice',
});
if (!allowed) return; // blocked
agent.dial(phone, { disclosure: disclosure.script });
TierPricePrecall checksVerbal captures
Free$0/mo5,0000
Starter$499/mo50,0005,000
Call Center$999/mo per location100,00010,000
Growth$1,999/mo250,00025,000
Scale$4,999/mo1,000,000100,000
PlatformCustomUnlimitedUnlimited

POST /v1/revoke and POST /v1/post-call are always free.

HTTPCodeMeaning
400missing_fieldRequired field not provided
400invalid_emailEmail format invalid
401invalid_api_keyKey missing, malformed, or inactive
402quota_exceededMonthly quota reached, upgrade required
503classifier_unavailableClassifier service unreachable (retry safe)
500internal_errorServer error (retry safe)

All errors return JSON:

{
"error": {
"code": "invalid_api_key",
"message": "Missing or malformed Bearer token."
}
}