Skip to main content
KYC (Know Your Customer) tools let your voice agents collect identity information from callers and run an automated risk-scoring verification during the conversation. Two verification types are supported: Individual (personal identity documents and address) and Business (company registration, tax ID, and beneficial owners).

How it works

When an ElevenLabs agent invokes a KYC tool, it follows a three-step pattern:
  1. Call the tool with action: get_requirements to discover which fields are required.
  2. Collect the required information through conversation.
  3. Call the tool with action: verify_individual or action: verify_business with all collected fields.
The tool stores a KycVerification record, calculates a risk score based on the configured weights, and returns a verification_status of approved, pending_review, rejected, or incomplete.

KYC types

Individual KYC

Verifies personal identity. Collects name, date of birth, nationality, country of residence, government ID type and number, address, email, phone, occupation, and source of funds.

Business KYB

Know Your Business verification. Collects business name, registration number, tax ID, business type, incorporation details, business address, authorized representative, and beneficial owners.

Creating a KYC tool

1

Navigate to KYC Tools

Open KYC Tools in the sidebar and click Create KYC Tool.
2

Name and type

Enter a name and optional description. Choose Individual KYC or Business KYB as the verification type.
3

Configure required fields

The form pre-fills with the default fields for the chosen type. For each field you can set whether it is required.Default individual fields:
FieldRequired by default
Full nameYes
Date of birthYes
ID typeYes
ID numberYes
NationalityNo
Country of residenceNo
Address (street, city, state, postal code, country)No
EmailNo
PhoneNo
OccupationNo
Source of fundsNo
Default business fields:
FieldRequired by default
Business nameYes
Registration numberYes
Tax IDYes
Business typeYes
Incorporation countryYes
Representative nameYes
Incorporation dateNo
Business addressNo
Representative title / contactNo
Beneficial ownersNo
4

Configure validation rules

Validation rules are regex patterns applied to each field value before the risk score is computed. The defaults enforce common formats:
FieldDefault patternNotes
full_name^[a-zA-Z\s\'-]{2,100}$Letters, spaces, hyphens
date_of_birth^\d{4}-\d{2}-\d{2}$ISO 8601 date
emailStandard email format
phone^\+?[\d\s\-\(\)]{7,20}$Optional country code
nationality / country_of_residence^[A-Z]{2}$ISO alpha-2 code
5

Configure risk settings

Risk settings control how the verification score is computed and how outcomes are decided:
SettingDefaultDescription
Missing field weight10Score added per missing required field
Format failure weight15Score added per field that fails its regex
Age verification weight25Score added if the subject is under the minimum age
Geographic risk weight20Score added for high-risk countries
PEP/sanctions weight30Score added if a PEP/sanctions check is triggered
Duplicate check weight20Score added for a duplicate submission
Minimum age18Minimum acceptable age
Auto-approve threshold30Risk scores at or below this value are auto-approved
Review threshold60Scores above this value are rejected; scores between approve and review thresholds go to pending_review
High-risk countries[]ISO country codes that increase the geographic risk score
PEP checkfalseEnable Politically Exposed Person check
Duplicate checktrueReject or flag duplicate submissions
6

Register with ElevenLabs (optional)

Enable Register immediately to register the tool with ElevenLabs during creation. You can also register later from the tool detail page.

Registering with ElevenLabs

1

Open the KYC tool detail page

Click the tool name from the KYC Tools index.
2

Click Register

Click Register with ElevenLabs. Sniko calls POST /convai/tools with the tool configuration:
{
  "tool_config": {
    "name": "kyc_{slug}",
    "description": "...",
    "type": "webhook",
    "response_timeout_secs": 60,
    "api_schema": {
      "url": "https://your-app.com/api/tools/kyc/{id}/{secret}",
      "method": "POST",
      "request_body_schema": {
        "type": "object",
        "required": ["action"],
        "properties": {
          "action": {
            "type": "string",
            "enum": ["verify_individual", "check_status", "get_requirements"]
          },
          "full_name": { "type": "string" },
          "date_of_birth": { "type": "string" }
        }
      }
    }
  }
}
The enum values differ for business tools: verify_business, check_status, get_requirements.
3

Confirm

On success, the ElevenLabs tool ID is stored and the tool status changes to active.
Updating a registered KYC tool automatically syncs the changes to ElevenLabs via PUT /convai/tools/{elevenlabs_tool_id}.

Assigning to agents

The KYC tool must be registered before it can be assigned to agents.
1

Open the tool detail page

Navigate to the KYC tool you want to assign.
2

Click Assign Agents

Provide one or more ElevenLabs agent IDs. The service sends POST /agents/{agentId}/tools for each agent and records the assignment in the KycToolAgent table.
Admins can view all KYC tools across all users. Regular users can only see and manage their own tools.

Webhook endpoint

ElevenLabs posts to the KYC tool webhook when the agent invokes it:
POST /api/tools/kyc/{id}/{secret}
Example get_requirements request:
{ "action": "get_requirements", "conversation_id": "conv_xyz" }
Example individual verification request:
{
  "action": "verify_individual",
  "full_name": "Jane Smith",
  "date_of_birth": "1985-03-22",
  "nationality": "US",
  "id_type": "passport",
  "id_number": "A12345678",
  "email": "jane@example.com",
  "phone": "+14155550100",
  "conversation_id": "conv_xyz"
}

Verification results

Each agent invocation of a KYC tool creates a KycVerification record. View verifications from the tool detail page.

KycVerification fields

FieldTypeDescription
kyc_tool_idintegerThe KYC tool that processed this verification
user_idintegerThe account owner of the tool
tool_call_idstringElevenLabs tool call ID for the invocation
agent_idstringElevenLabs agent ID that invoked the tool
conversation_idstringElevenLabs conversation ID
verification_typestringindividual or business
collected_dataJSONThe field values submitted by the agent
field_resultsJSONPer-field validation outcomes
risk_scoredecimalComputed numeric risk score
risk_levelstringlow, medium, high, or critical
risk_factorsJSONList of factors that contributed to the score
flagsJSONArray of flag strings raised during verification
verification_statusstringapproved, pending_review, rejected, or incomplete
reviewed_byintegerUser ID of the reviewer (if manually reviewed)
review_notesstringNotes added during manual review
reviewed_atdatetimeWhen the manual review was completed
audit_trailJSONFull audit log of actions taken on this verification
metadataJSONAdditional metadata from the conversation
verification_started_atdatetimeWhen the agent first invoked the tool
verification_completed_atdatetimeWhen the final verification decision was made

Risk levels

LevelMeaning
lowRisk score ≤ auto-approve threshold — automatically approved
mediumScore between thresholds — routed to pending_review
highScore above review threshold — rejected
criticalHighest risk — rejected and flagged

Analytics

The tool detail page shows:
  • Total verifications, approval rate, and average risk score
  • Pending review count
  • Risk distribution (low / medium / high / critical)
  • Verification status distribution (approved / pending_review / rejected / incomplete)
  • Per-field completion rates (for the last 100 processed verifications)
  • Daily verification trend for the last 30 days with approved/rejected breakdown
  • Top 10 most frequently raised flags

Build docs developers (and LLMs) love