Skip to content

POST /v1/capture-verbal

When a consumer gives verbal consent during a call, submit the audio segment and transcript to this endpoint. eConsent’s classifier analyzes the transcript for affirmative consent, coercion, and sentiment, then generates a signed consent record if the consent meets the TCPA standard.

This endpoint bills 1 verbal capture unit per request.

POST https://voice.econsent.org/v1/capture-verbal
Authorization: Bearer ec_voice_YOUR_KEY
Content-Type: application/json
{
"call_id": "call_xyz789",
"phone": "+15551234567",
"calling_entity": "Acme Insurance LLC",
"captured_at": "2026-04-10T15:42:33Z",
"audio_segment_url": "https://storage.yourplatform.com/segments/consent.wav",
"transcript": "Yes I authorize Acme Insurance to call and text me about insurance quotes using AI assistants",
"agent_disclosure_text": "Do you authorize Acme Insurance to contact you using AI assistants for quote follow-ups?",
"consent_scope": ["ai_voice", "ai_sms", "telemarketing"],
"language": "en-US"
}
FieldTypeRequiredDescription
call_idstringNoYour internal call identifier
phonestringYesConsumer phone in E.164
calling_entitystringYesLegal entity name
captured_atstringNoISO 8601 timestamp (defaults to now)
audio_segment_urlstringYesURL to the audio segment (eConsent fetches and stores the SHA-256 hash)
transcriptstringYesText transcript of what the consumer said
agent_disclosure_textstringNoWhat the agent said before the consent prompt
consent_scopearrayYesScopes: ai_voice, ai_sms, telemarketing, transactional
languagestringNoBCP 47 code, defaults to en-US
{
"consent_id": "cst_lx8ka1b2c3d4e5f6",
"signature": "9c2f3a8b4d5e6f7a8b9c0d1e2f3a4b5c...",
"evidence_url": "https://verify.econsent.org/c/cst_lx8ka1b2c3d4e5f6",
"audio_attestation": {
"stored": true,
"sha256": "e3b0c44298fc1c149afbf4c8996fb924..."
},
"valid": true,
"classifier_result": {
"verdict": "accept_consent",
"affirmative_consent_score": 1.0,
"coercion_score": 0.0,
"sentiment": "positive",
"backend": "rules"
},
"warnings": []
}
{
"consent_id": null,
"valid": false,
"rejected_reason": "consent_phrase_too_weak_or_coerced",
"classifier_result": {
"verdict": "no_signal",
"affirmative_consent_score": 0.2,
"coercion_score": 0.95,
"sentiment": "negative",
"backend": "rules"
},
"warnings": [
"Classifier verdict: no_signal",
"High coercion score detected",
"Affirmative score: 0.20"
]
}
VerdictMeaningAction
accept_consentStrong, genuine affirmative consentConsent record created and signed
review_consentAffirmative phrase detected but flagged (coercion, negative sentiment)Consent NOT created. Re-prompt the consumer with clearer language.
accept_revocationConsumer expressed an opt-outConsent NOT created. Call POST /v1/revoke instead.
no_signalNo consent or opt-out phrase detectedConsent NOT created. The transcript did not contain a recognizable consent phrase.
ambiguousConflicting signalsConsent NOT created. Needs human review.
const result = await voice.captureVerbal({
callId: 'call_xyz',
phone: '+15551234567',
callingEntity: 'Acme Insurance LLC',
audioSegmentUrl: 's3://bucket/segment.wav',
transcript: 'Yes I authorize Acme to call me about insurance',
agentDisclosureText: 'Do you authorize Acme to contact you?',
consentScope: ['ai_voice'],
});
if (result.valid) {
console.log(`Consent captured: ${result.evidenceUrl}`);
} else {
console.log(`Rejected: ${result.rejectedReason}`);
}