HOME QUICKSTART AGENT API ADMIN API ERRORS WEBHOOKS REFERENCE
GITHUB

ViciJS — TypeScript SDK for ViciDial

The definitive integration library for ViciDial. Type-safe, zero-dependency, battle-tested against the official API documentation.

Install via npm

npm install @thornebridge/vicijs
92
API Functions
80
Response Schemas
214
Tests
0
Dependencies

Why ViciJS

ViciDial's API returns pipe-delimited plaintext over HTTP GET with credentials in query strings. Every integration today is raw fetch calls, manual string splitting, and zero type safety. ViciJS fixes all of that.

Full Type SafetyEvery parameter, response field, and enum value is typed. Your IDE knows what's valid before you hit send.
Structured ErrorsCatch ViciAuthError, ViciPermissionError, ViciNotFoundError, ViciValidationError, ViciTimeoutError individually.
Response SchemasBuilt-in field schemas map pipe-delimited output to named properties. No more counting pipes.
IsomorphicWorks in Node.js 18+ and browsers. Uses native fetch. ESM + CJS dual build with full .d.ts declarations.

Two Clients, Full Coverage

ClientEndpointFunctionsUse Case
ViciAgent/agc/api.php31Agent session control — dial, pause, transfer, park, record, hangup
ViciAdmin/vicidial/non_agent_api.php60Administration — leads, users, campaigns, lists, DIDs, DNC, monitoring, reporting

Verified Against Documentation

Every parameter, enum value, and function name has been cross-referenced against the official ViciDial documentation through 5 automated audit passes.

DocumentWhat We VerifiedResult
Agent API (51KB)31 functions, 136 typed fields0 mismatches
Non-Agent API (168KB)61 functions, 51 response schemas0 mismatches
Status Codes86 disposition codes86/86 match
Agent Events49 push event types49/49 match
Custom Fields8 field types8/8 match

Quickstart

Installation

npm install @thornebridge/vicijs

Agent API — Control Agent Sessions

import { ViciAgent } from 'vicijs';

const agent = new ViciAgent({
  baseUrl: 'https://dialer.example.com',
  user: 'apiuser',
  pass: 'apipass',
  agentUser: '1001',
});

// Dial a number
await agent.dial({ value: '5551234567', search: 'YES' });

// Pause / resume
await agent.pause('PAUSE');
await agent.pause('RESUME');

// Transfer to another group
await agent.transferConference({
  value: 'LOCAL_CLOSER',
  ingroupChoices: 'SALESLINE',
});

// Hangup and disposition
await agent.hangup();
await agent.setStatus({ value: 'SALE' });

Admin API — Manage Everything Else

import { ViciAdmin } from 'vicijs';

const admin = new ViciAdmin({
  baseUrl: 'https://dialer.example.com',
  user: 'apiuser',
  pass: 'apipass',
});

// Add a lead
await admin.leads.add({
  phoneNumber: '5551234567',
  listId: 101,
  firstName: 'John',
  lastName: 'Doe',
});

// Monitor an agent in real-time
const status = await admin.monitoring.agentStatus({
  agentUser: '1001',
});

Configuration

OptionTypeDefaultDescription
baseUrlstringViciDial server URL (required)
userstringAPI username (required)
passstringAPI password (required)
agentUserstringAgent user (ViciAgent only, required)
sourcestring'vicijs'API call source identifier (max 20 chars)
timeoutnumber30000Request timeout in milliseconds
fetchfunctionglobal fetchCustom fetch for testing/proxying

Agent API Reference

The ViciAgent class wraps all 31 functions of the ViciDial Agent API at /agc/api.php. Every method requires the agent to be logged into a ViciDial session.

Call Control

MethodAPI FunctionDescription
agent.hangup()external_hangupHang up the current customer call
agent.dial(params)external_dialPlace a manual dial call (14 params: phone, lead_id, search, preview, etc.)
agent.previewDialAction(action)preview_dial_actionSKIP, DIALONLY, ALTDIAL, ADR3DIAL, FINISH
agent.sendDtmf(value)send_dtmfSend DTMF tones (P=#, S=*, Q=silence)
agent.transferConference(params)transfer_conferenceHANGUP_XFER, BLIND_TRANSFER, LOCAL_CLOSER, DIAL_WITH_CUSTOMER, etc.
agent.parkCall(action)park_callPARK_CUSTOMER, GRAB_CUSTOMER, PARK_IVR_CUSTOMER, etc. (9 actions)
agent.raCallControl(params)ra_call_controlRemote agent: HANGUP, EXTENSIONTRANSFER, INGROUPTRANSFER
agent.switchLead(params)switch_leadSwitch lead_id on a live inbound call
agent.callsInQueueCount()calls_in_queue_countCalls waiting that could route to this agent
agent.callAgent()call_agentCall the agent's registered phone

Agent State

MethodAPI FunctionDescription
agent.pause(action)external_pausePAUSE or RESUME
agent.setStatus(params)external_statusSet disposition (with optional callback scheduling)
agent.logout()logoutLog the agent out
agent.pauseCode(code)pause_codeAssign a pause code (agent must be paused)
agent.changeIngroups(params)change_ingroupsCHANGE, REMOVE, or ADD inbound groups
agent.setTimerAction(params)set_timer_actionTrigger action after N seconds (WEBFORM, D1_DIAL, etc.)

Lead Management

MethodAPI FunctionDescription
agent.addLead(params)external_add_leadAdd lead to agent's manual dial queue (26 fields)
agent.updateFields(params)update_fieldsUpdate customer fields on agent screen (25+ fields)
agent.refreshPanel(params)refresh_panelReload form/script/email/chat/callback panels

Recording

MethodAPI FunctionDescription
agent.recording(params)recordingSTART, STOP, or STATUS
agent.stereoRecording(params)stereo_recordingBEGIN, END, or STATUS
agent.audioPlayback(params)audio_playbackPLAY, STOP, PAUSE, RESUME, RESTART

Notifications & Misc

MethodAPI FunctionDescription
agent.sendNotification(params)send_notificationText alerts + confetti effects to agent screens
agent.vmMessage(params)vm_messageCustom voicemail message for VM button
agent.forceFronterLeave3Way(params)force_fronter_leave_3wayForce fronter to exit 3-way call
agent.forceFronterAudioStop(params)force_fronter_audio_stopForce fronter to stop audio playback
agent.webphoneUrl(action)webphone_urlDISPLAY or LAUNCH the webphone URL
agent.version()versionAPI version, build, date
agent.webserver()webserverServer config, timezone, specs

Admin API Reference

The ViciAdmin class wraps all 61 functions of the ViciDial Non-Agent API at /vicidial/non_agent_api.php, organized into 10 domain sub-clients.

admin.leads — Lead Management (11 functions)

MethodAPI FunctionDescription
leads.add(params)add_leadAdd a new lead (45+ params including DNC check, hopper, callbacks)
leads.update(params)update_leadUpdate a lead (50+ params with search, callbacks, hopper)
leads.batchUpdate(params)batch_update_leadUpdate multiple leads at once (max 100)
leads.fieldInfo(params)lead_field_infoGet a single field value
leads.allInfo(params)lead_all_infoGet all lead data with optional custom fields
leads.callbackInfo(params)lead_callback_infoScheduled callback data
leads.search(params)lead_searchSearch by phone number
leads.statusSearch(params)lead_status_searchSearch by status and date
leads.cccInfo(params)ccc_lead_infoCross-cluster call lead data
leads.callidInfo(params)callid_infoCall info by call ID
leads.dearchive(leadId)lead_dearchiveMove from archive to active

admin.users — User Management (6 functions)

MethodAPI FunctionDescription
users.add(params)add_userAdd user account (20 params)
users.update(params)update_userUpdate user settings (28 params)
users.copy(params)copy_userDuplicate an existing user
users.updateRemoteAgent(params)update_remote_agentConfigure remote agent
users.details(params)user_detailsGet user account info
users.agentCampaigns(params)agent_campaignsAllowed campaigns/ingroups

admin.monitoring — Real-Time (6 functions)

MethodAPI FunctionDescription
monitoring.blindMonitor(params)blind_monitorMONITOR, BARGE, BARGESWAP, HIJACK, WHISPER
monitoring.agentIngroupInfo(params)agent_ingroup_infoIn-group and outbound info for agent
monitoring.agentStatus(params)agent_statusReal-time status for one agent
monitoring.userGroupStatus(params)user_group_statusStatus for user groups
monitoring.inGroupStatus(params)in_group_statusStatus for inbound groups
monitoring.loggedInAgents(params)logged_in_agentsAll logged-in agents

admin.reporting — Data Export (6 functions)

MethodAPI FunctionDescription
reporting.recordingLookup(params)recording_lookupSearch call recordings
reporting.didLogExport(params)did_log_exportInbound calls to a DID
reporting.agentStatsExport(params)agent_stats_exportAgent activity statistics
reporting.callStatusStats(params)call_status_statsCall counts by campaign/ingroup
reporting.callDispoReport(params)call_dispo_reportDisposition breakdown
reporting.phoneNumberLog(params)phone_number_logCall history for phone numbers

Other Domains

DomainFunctionsMethods
admin.campaigns4update, list, hopperList, hopperBulkInsert
admin.lists4add, update, info, customFields
admin.phones4add, update, addAlias, updateAlias
admin.dids3add, copy, update
admin.dnc4addPhone, deletePhone, addFpgPhone, deleteFpgPhone
admin.system12version, soundsList, mohList, vmList, serverRefresh, checkPhoneNumber, addGroupAlias, updateCidGroupEntry, updateAltUrl, updatePresets, updateLogEntry, containerList

Error Handling

ViciJS throws typed errors for every failure mode. All errors extend ViciError and include the raw ViciDial response.

Error Hierarchy

ClassWhen ThrownProperties
ViciErrorBase class — catches all API errorsfunction, details, raw
ViciAuthErrorInvalid user/pass, "no user found"function, details, raw
ViciPermissionErrorInsufficient user_level or feature flagfunction, details, raw
ViciNotFoundErrorLead, user, campaign doesn't existfunction, details, raw
ViciValidationErrorDuplicates, invalid params, disabled featuresfunction, details, raw
ViciHttpErrorNon-2xx HTTP responsestatusCode
ViciTimeoutErrorRequest exceeded configured timeouttimeoutMs

Usage

import {
  ViciValidationError,
  ViciAuthError,
  ViciTimeoutError,
} from 'vicijs';

try {
  await admin.leads.add({ phoneNumber: '5551234567', listId: 101 });
} catch (err) {
  if (err instanceof ViciTimeoutError) {
    console.log(`Timed out after ${err.timeoutMs}ms`);
  } else if (err instanceof ViciValidationError) {
    console.log('Validation:', err.details);
    console.log('Raw:', err.raw);
  } else if (err instanceof ViciAuthError) {
    console.log('Check credentials');
  }
}

Error Classification

ViciDial errors are automatically classified by message pattern:

Pattern in MessageError Class
"no user found", "auth "ViciAuthError
"PERMISSION", "NOT ALLOWED", "ACCESS"ViciPermissionError
"NOT FOUND", "DOES NOT EXIST", "NOT LOGGED IN", "NO MATCHES"ViciNotFoundError
"DUPLICATE", "ALREADY EXISTS", "INVALID", "NOT VALID", "DISABLED"ViciValidationError

Webhooks & Callbacks

ViciDial can send HTTP requests to your server when events occur — calls answered, dispositions set, agents paused, leads created. ViciJS provides typed parsers, URL builders, and an event router for all 7 webhook types.

Webhook Types (7)

TypeTriggerReqConfigured In
agent_eventAgent screen AJAX push (49 event types)Campaign → Agent Events Push URL
dispo_callbackAgent submits a dispositionCampaign → Dispo Call URL
start_callCall routes to agentCampaign → Start Call URL
no_agentDrop, timeout, busy — no agent availableCampaign → No Agent Call URL
add_leadInbound lead created (In-Groups only)In-Group → Add Lead URL
dead_callCustomer hangs up mid-callCampaign → Dead Call Trigger URL
pause_maxAgent exceeds max pause timeCampaign → Pause Max URL

Building Callback URLs

Use buildCallbackUrl() to construct URLs with ViciDial's --A--variable--B-- template syntax. Paste the output into your ViciDial campaign settings.

import { buildCallbackUrl, CallbackVariable } from '@thornebridge/vicijs';

const url = buildCallbackUrl({
  baseUrl: 'https://hooks.example.com/vici/dispo',
  variables: [
    CallbackVariable.LEAD_ID,
    CallbackVariable.DISPO,
    CallbackVariable.PHONE_NUMBER,
    CallbackVariable.TALK_TIME,
    CallbackVariable.RECORDING_FILENAME,
  ],
  staticParams: { type: 'dispo_callback' },
});
// → "https://hooks.example.com/vici/dispo?type=dispo_callback&lead_id=--A--lead_id--B--&..."

For Agent Events Push, use the convenience function:

import { buildEventPushUrl } from '@thornebridge/vicijs';

const eventUrl = buildEventPushUrl(
  'https://hooks.example.com/vici/events',
  { type: 'agent_event' },
);
// Includes: user, event, message, lead_id, counter, epoch, agent_log_id

For cross-origin requests from the agent screen, wrap with wrapWithGet2Post():

import { wrapWithGet2Post } from '@thornebridge/vicijs';

const proxied = wrapWithGet2Post({
  externalUrl: eventUrl,
  type: 'event',
});
// → "get2post.php?uniqueid=--A--epoch--B--.--A--agent_log_id--B--&type=event&HTTPURLTOPOST=..."

Webhook Router

The ViciWebhookRouter parses incoming requests and dispatches to typed handlers.

import { ViciWebhookRouter, AgentEvent } from '@thornebridge/vicijs';

const router = new ViciWebhookRouter();

// Handle by webhook type
router.on('dispo_callback', (payload) => {
  console.log(`Lead ${payload.lead_id} dispo: ${payload.dispo}`);
  console.log(`Talk time: ${payload.talk_time}s`);
});

router.on('start_call', (payload) => {
  console.log(`Call started: ${payload.phone_number}`);
});

router.on('dead_call', (payload) => {
  console.log(`Customer hung up: ${payload.lead_id}`);
});

// Handle specific agent events
router.onEvent(AgentEvent.CALL_ANSWERED, (payload) => {
  console.log(`Agent ${payload.user} answered a call`);
});

router.onEvent(AgentEvent.DISPO_SET, (payload) => {
  console.log(`Agent ${payload.user} set disposition`);
});

// Express integration
app.get('/vici/webhook', (req, res) => {
  router.handle(req.url);  // auto-detects type from ?type= param
  res.send('OK');
});

// Or use separate routes with explicit types
app.get('/vici/dispo', (req, res) => {
  router.handleAs('dispo_callback', req.url);
  res.send('OK');
});

Direct Parsing

Parse webhooks without a router using the individual parsers:

import {
  parseDispoCallback,
  parseAgentEvent,
  parseStartCallback,
  parseNoAgentCallback,
  parseAddLeadCallback,
  parseDeadCallCallback,
  parsePauseMaxCallback,
} from '@thornebridge/vicijs';

// Parse from URL, query string, or URLSearchParams
const payload = parseDispoCallback(req.url);
console.log(payload.dispo);            // 'SALE'
console.log(payload.phone_number);     // '5551234567'
console.log(payload.recording_filename); // '20250115-103000_1001'

Callback Variables (103)

All 103 ViciDial callback URL template variables are available via the CallbackVariable enum, organized by category:

CategoryVariablesReqCount
Lead Datalead_id, vendor_lead_code, phone_number, first_name, last_name, email, + 21 more27
Call/Sessioncampaign, uniqueid, call_id, epoch, session_id, server_ip, + 14 more20
Useruser, fullname, user_group, agent_email, user_custom_one–five9
Dispositiondispo, talk_time, call_notes, callback_lead_status, callback_datetime, term_reason, status7
Recordingrecording_filename, recording_id2
Scripts/Presetscamp_script, in_script, script_width/height, preset_number_a–f, preset_dtmf_a–b12
DID Fieldsdid_id, did_pattern, did_description, did_custom_one–five, did_carrier_description10
In-Group Customig_custom_one–five5
Campaign Customcamp_custom_one–five5
List Metadatalist_description, list_name2
Agent Event Pushevent, message, counter3

Full API Reference

Every interface, every parameter, every type. 80 response schemas, 103 callback variables. Generated from source.

Table of Contents

Agent API
DialParams — external_dial ExternalStatusParams — external_status ChangeIngroupsParams — change_ingroups UpdateFieldsParams — update_fields SetTimerActionParams — set_timer_action RaCallControlParams — ra_call_control TransferConferenceParams — transfer_conference RecordingParams — recording StereoRecordingParams — stereo_recording AudioPlaybackParams — audio_playback SwitchLeadParams — switch_lead ForceFronterParams — force_fronter_leave_3way SendNotificationParams — send_notification VmMessageParams — vm_message RefreshPanelParams — refresh_panel ExternalAddLeadParams — external_add_lead StLoginLogParams — st_login_log
Admin — Leads
AddLeadParams — add_lead UpdateLeadParams — update_lead BatchUpdateLeadParams — batch_update_lead LeadFieldInfoParams — lead_field_info LeadAllInfoParams — lead_all_info LeadCallbackInfoParams — lead_callback_info LeadSearchParams — lead_search LeadStatusSearchParams — lead_status_search CccLeadInfoParams — ccc_lead_info CallidInfoParams — callid_info
Admin — Users
AddUserParams — add_user UpdateUserParams — update_user CopyUserParams — copy_user UpdateRemoteAgentParams — update_remote_agent UserDetailsParams — user_details AgentCampaignsParams — agent_campaigns
Admin — Monitoring
BlindMonitorParams — blind_monitor AgentIngroupInfoParams — agent_ingroup_info AgentStatusParams — agent_status UserGroupStatusParams — user_group_status InGroupStatusParams — in_group_status LoggedInAgentsParams — logged_in_agents
Admin — Reporting
RecordingLookupParams — recording_lookup DidLogExportParams — did_log_export AgentStatsExportParams — agent_stats_export CallStatusStatsParams — call_status_stats CallDispoReportParams — call_dispo_report PhoneNumberLogParams — phone_number_log
Admin — Campaigns, Lists, Phones
UpdateCampaignParams — update_campaign CampaignsListParams — campaigns_list HopperListParams — hopper_list HopperBulkInsertParams — hopper_bulk_insert AddListParams — add_list UpdateListParams — update_list ListInfoParams — list_info ListCustomFieldsParams — list_custom_fields AddPhoneParams — add_phone UpdatePhoneParams — update_phone AddPhoneAliasParams — add_phone_alias UpdatePhoneAliasParams — update_phone_alias
Admin — DIDs, DNC, System
AddDidParams — add_did CopyDidParams — copy_did UpdateDidParams — update_did DncPhoneParams — add_dnc_phone FpgPhoneParams — add_fpg_phone CheckPhoneNumberParams — check_phone_number AddGroupAliasParams — add_group_alias UpdateCidGroupEntryParams — update_cid_group_entry UpdateAltUrlParams — update_alt_url UpdatePresetsParams — update_presets UpdateLogEntryParams — update_log_entry

Response Parsing

ViciDial returns pipe-delimited text. Use built-in schemas to map fields:

import { mapFields, ADMIN_SCHEMAS } from 'vicijs';

const result = await admin.leads.allInfo({ leadId: 12345 });
const lead = mapFields(result.rawData, ADMIN_SCHEMAS.lead_all_info);

lead.first_name;     // 'John'
lead.phone_number;   // '5551234567'
lead.status;          // 'SALE'

Agent API — ViciAgent

Endpoint: /agc/api.php — All methods require agentUser in config.

VersionResponse VersionResponse

ParameterTypeReqDescription
versionstring
buildstring
datestring
epochstring

WebserverResponse WebserverResponse

ParameterTypeReqDescription
timezonestring
nowstring
activeExtstring
agentSessionstring
webProtocolstring
phpVersionstring
serverGmtstring

DialParams external_dial

ParameterTypeReqDescription
valuestringPhone number to dial, or "MANUALNEXT"
leadIdnumberLead ID to dial (overrides value)
phoneCodestring
search"YES", "NO"
preview"YES", "NO"
focus"YES", "NO"
vendorIdstring
dialPrefixstring
groupAliasstring
vtigerCallback"YES", "NO"
altUserstring
altDialAltDialValue
dialIngroupstring
outboundCidstring

ExternalStatusParams external_status

ParameterTypeReqDescription
valuestringYesDisposition status code
callbackDatetimestring
callbackTypeCallbackType
callbackCommentsstring
qmDispoCodestring

ChangeIngroupsParams change_ingroups

ParameterTypeReqDescription
valueInGroupChangeModeYes
blendedBlendedModeYes
ingroupChoicesstring
setAsDefault"YES", "NO"

UpdateFieldsParams update_fields

ParameterTypeReqDescription
firstNamestring
lastNamestring
middleInitialstring
titlestring
phoneNumberstring
phoneCodestring
address1string
address2string
address3string
altPhonestring
citystring
statestring
provincestring
postalCodestring
countryCodestring
emailstring
genderstring
dateOfBirthstring
commentsstring
securityPhrasestring
sourceIdstring
vendorLeadCodestring
gmtOffsetNowstring
ranknumber
ownerstring
formreload1
scriptreload1
script2reload1
emailreload1
chatreload1

SetTimerActionParams set_timer_action

ParameterTypeReqDescription
valueTimerActionYes
notesstring
ranknumberSeconds elapsed before action triggers

RaCallControlParams ra_call_control

ParameterTypeReqDescription
valuestringYesCall ID from CallerIDname or SIP header
stageRaCallControlStageYes
ingroupChoicesstring
phoneNumberstring
statusstring

TransferConferenceParams transfer_conference

ParameterTypeReqDescription
valueTransferConferenceActionYes
phoneNumberstring
ingroupChoicesstring
consultative"YES", "NO"
dialOverride"YES", "NO"
groupAliasstring
cidChoiceCidChoice
multiDialPhonesstring
mdCheck"YES", "NO"
twCheck"YES", "NO"

RecordingParams recording

ParameterTypeReqDescription
valueRecordingActionYes
stagestringText appended to filename (max 14 chars)

StereoRecordingParams stereo_recording

ParameterTypeReqDescription
valueStereoRecordingActionYes
stagestringText appended to filename (max 14 chars)

AudioPlaybackParams audio_playback

ParameterTypeReqDescription
stageAudioPlaybackStageYes
valuestringAudio filename without extension (required for PLAY)
dialOverride"Y", "N"

SwitchLeadParams switch_lead

ParameterTypeReqDescription
leadIdnumber
vendorLeadCodestring

ForceFronterParams force_fronter_leave_3way

ParameterTypeReqDescription
valueFronterSearchScopeYes
leadIdnumber

SendNotificationParams send_notification

ParameterTypeReqDescription
recipientTypeNotificationRecipientTypeYes
recipientstringYes
notificationDatestring
notificationTextstring
textSizenumber
textFontstring
textWeightstring
textColorstring
showConfetti"Y", "N"
durationnumber
maxParticleCountnumber
particleSpeednumber

VmMessageParams vm_message

ParameterTypeReqDescription
valuestringYesAudio file(s) — single filename or pipe-separated list
leadIdnumber

RefreshPanelParams refresh_panel

ParameterTypeReqDescription
formreload1
scriptreload1
script2reload1
emailreload1
chatreload1
callbacksreload1

ExternalAddLeadParams external_add_lead

ParameterTypeReqDescription
phoneNumberstring
phoneCodestring
dncCheck"YES", "NO"
campaignDncCheck"YES", "NO"
firstNamestring
lastNamestring
address1string
address2string
address3string
altPhonestring
citystring
commentsstring
countryCodestring
dateOfBirthstring
emailstring
genderstring
gmtOffsetNowstring
middleInitialstring
postalCodestring
provincestring
securityPhrasestring
sourceIdstring
statestring
titlestring
vendorLeadCodestring
ranknumber
ownerstring

WebphoneUrlResponse WebphoneUrlResponse

ParameterTypeReqDescription
urlstringYes

StLoginLogParams st_login_log

ParameterTypeReqDescription
valuestringYesCRM AgentID to lookup
vendorIdstringYesCRM TeamID to associate

Admin API — ViciAdmin

Endpoint: /vicidial/non_agent_api.php

Leads (admin.leads)

AddLeadParams add_lead

ParameterTypeReqDescription
phoneNumberstringYes
phoneCodestring
listIdnumber
dncCheckDNCCheck
campaignDncCheckDNCCheck
campaignIdstring
addToHopper"Y", "N"
hopperPrioritynumber
hopperLocalCallTimeCheck"Y", "N"
duplicateCheckDuplicateCheck | string
usacanPrefixCheck"Y", "N"
usacanAreacodeCheck"Y", "N"
nanpaAcPrefixCheck"Y", "N"
customFields"Y", "N"
tzMethodTZMethod
lookupState"Y", "N"
callback"Y", "N"
callbackStatusstring
callbackDatetimestring
callbackTypeCallbackType
callbackUserstring
callbackCommentsstring
listExistsCheck"Y", "N"
vendorLeadCodestring
sourceIdstring
gmtOffsetNowstring
titlestring
firstNamestring
middleInitialstring
lastNamestring
address1string
address2string
address3string
citystring
statestring
provincestring
postalCodestring
countryCodestring
genderGender
dateOfBirthstring
altPhonestring
emailstring
securityPhrasestring
commentsstring
multiAltPhonesstring
ranknumber
ownerstring
entryListIdnumber

UpdateLeadParams update_lead

ParameterTypeReqDescription
leadIdnumber
vendorLeadCodestring
phoneNumberstring
searchMethodSearchMethod | string
searchLocationSearchLocation
listIdnumberList to search in when search_location=LIST, or list for insert_if_not_found
campaignIdstringCampaign ID, required for callbacks
insertIfNotFound"Y", "N"
recordsnumber
noUpdate"Y", "N"
customFields"Y", "N"
deleteLead"Y", "N"
deleteCfData"Y", "N"
resetLead"Y", "N"
updatePhoneNumber"Y", "N"
listExistsCheck"Y", "N"
archivedLead"Y", "N"
callback"Y", "N", "REMOVE"
callbackStatusstring
callbackDatetimestring
callbackTypeCallbackType
callbackUserstring
callbackCommentsstring
addToHopper"Y", "N"
removeFromHopper"Y", "N"
hopperPrioritynumber
hopperLocalCallTimeCheck"Y", "N"
userFieldstring
listIdFieldnumber
statusstring
sourceIdstring
gmtOffsetNowstring
titlestring
firstNamestring
middleInitialstring
lastNamestring
address1string
address2string
address3string
citystring
statestring
provincestring
postalCodestring
countryCodestring
genderGender
dateOfBirthstring
altPhonestring
emailstring
securityPhrasestring
commentsstring
ranknumber
ownerstring
calledCountnumber
phoneCodestring
entryListIdnumber
forceEntryListIdnumber
multiAltPhonesstring

BatchUpdateLeadParams batch_update_lead

ParameterTypeReqDescription
leadIdsstringYesComma-separated lead IDs (max 100)
recordsnumber
listExistsCheck"Y", "N"
resetLead"Y", "N"
archivedLead"Y", "N"
userFieldstring
listIdFieldnumber
statusstring
vendorLeadCodestring
sourceIdstring
gmtOffsetNowstring
titlestring
firstNamestring
middleInitialstring
lastNamestring
address1string
address2string
address3string
citystring
statestring
provincestring
postalCodestring
countryCodestring
genderGender
dateOfBirthstring
altPhonestring
emailstring
securityPhrasestring
commentsstring
ranknumber
ownerstring
calledCountnumber
phoneCodestring

LeadFieldInfoParams lead_field_info

ParameterTypeReqDescription
leadIdnumberYes
fieldNamestringYes
customFields"Y", "N"
listIdnumber
archivedLead"Y", "N"

LeadAllInfoParams lead_all_info extends OutputParams

ParameterTypeReqDescription
leadIdnumber
phoneNumberstring
customFields"Y", "N"
forceEntryListIdnumber
archivedLead"Y", "N"

LeadCallbackInfoParams lead_callback_info extends OutputParams

ParameterTypeReqDescription
leadIdnumberYes
searchLocationCallbackSearchLocation
ParameterTypeReqDescription
phoneNumberstringYes
recordsnumber
archivedLead"Y", "N"
header"YES", "NO"
ParameterTypeReqDescription
statusstring
datestring
leadIdnumber
customFields"Y", "N"
listIdnumber
archivedLead"Y", "N"

CccLeadInfoParams ccc_lead_info extends OutputParams

ParameterTypeReqDescription
callIdstringYes

CallidInfoParams callid_info extends OutputParams

ParameterTypeReqDescription
callIdstringYes
detail"YES", "NO"

Users (admin.users)

AddUserParams add_user

ParameterTypeReqDescription
agentUserstringYes
agentPassstringYes
agentUserLevelnumberYes
agentFullNamestringYes
agentUserGroupstringYes
phoneLoginstring
phonePassstring
hotkeysActive0 | 1
voicemailIdstring
emailstring
customOnestring
customTwostring
customThreestring
customFourstring
customFivestring
wrapupSecondsOverridenumber
agentChooseIngroups0 | 1
agentChooseBlended0 | 1
closerDefaultBlended0 | 1
inGroupsstringPipe-delimited ingroup list

UpdateUserParams update_user

ParameterTypeReqDescription
agentUserstringYes
agentPassstring
agentUserLevelnumber
agentFullNamestring
agentUserGroupstring
phoneLoginstring
phonePassstring
hotkeysActive0 | 1
voicemailIdstring
emailstring
customOnestring
customTwostring
customThreestring
customFourstring
customFivestring
active"Y", "N"
wrapupSecondsOverridenumber
campaignRanknumber
campaignGradenumber
ingroupRanknumber
ingroupGradenumber
campRgOnly0 | 1
campaignIdstring
ingrpRgOnly0 | 1
groupIdstring
resetPasswordnumber
inGroupsstring
deleteUser"Y"Undocumented in official API but functional — triggers user deletion

CopyUserParams copy_user

ParameterTypeReqDescription
agentUserstringYes
agentPassstringYes
agentFullNamestringYes
sourceUserstringYes

UpdateRemoteAgentParams update_remote_agent

ParameterTypeReqDescription
agentUserstringYes
statusRemoteAgentStatus
campaignIdstring
numberOfLinesnumber

UserDetailsParams user_details extends OutputParams

ParameterTypeReqDescription
agentUserstringYes

AgentCampaignsParams agent_campaigns extends OutputParams

ParameterTypeReqDescription
agentUserstringYes
campaignIdstring
ignoreAgentdirect"Y", "N"

Monitoring (admin.monitoring)

BlindMonitorParams blind_monitor

ParameterTypeReqDescription
phoneLoginstringYes
sessionIdstringYes
serverIpstringYes
stageBlindMonitorStage

AgentIngroupInfoParams agent_ingroup_info

ParameterTypeReqDescription
agentUserstringYes
stage"info", "change", "text"

AgentStatusParams agent_status extends OutputParams

ParameterTypeReqDescription
agentUserstringYes
includeIp"YES", "NO"

UserGroupStatusParams user_group_status extends OutputParams

ParameterTypeReqDescription
userGroupsstringYesPipe-delimited group list (e.g., "ADMIN|AGENTS")

InGroupStatusParams in_group_status extends OutputParams

ParameterTypeReqDescription
inGroupsstringYesPipe-delimited group list

LoggedInAgentsParams logged_in_agents extends OutputParams

ParameterTypeReqDescription
campaignsstringPipe-delimited campaign list (e.g. "TESTCAMP|INBOUND"), default is all
userGroupsstringPipe-delimited user group list (e.g. "ADMIN|AGENTS"), default is all
showSubStatus"YES", "NO"Show agent sub-status and pause_code

Reporting (admin.reporting)

RecordingLookupParams recording_lookup extends OutputParams

ParameterTypeReqDescription
agentUserstring
leadIdnumber
datestring
uniqueidstring
extensionstring
duration"Y", "N"

DidLogExportParams did_log_export extends OutputParams

ParameterTypeReqDescription
phoneNumberstringYes
datestringYes

AgentStatsExportParams agent_stats_export extends OutputParams

ParameterTypeReqDescription
datetimeStartstringYes
datetimeEndstringYes
agentUserstring
campaignIdstring
timeFormatTimeFormat
groupByCampaign"YES", "NO"

CallStatusStatsParams call_status_stats extends OutputParams

ParameterTypeReqDescription
campaignsstringYesDash-delimited campaign IDs, or "---ALL---" / "ALLCAMPAIGNS"
queryDatestringYYYY-MM-DD format, defaults to today
ingroupsstringDash-delimited in-group IDs
statusesstringDash-delimited status codes

CallDispoReportParams call_dispo_report extends OutputParams

ParameterTypeReqDescription
campaignsstringDash-delimited campaign IDs (at least one of campaigns/ingroups/didPatterns required)
ingroupsstringDash-delimited in-group IDs
didsstringDash-delimited DID numbers. Note: ViciDial docs also reference this as "did_patterns" in examples.
queryDatestringYYYY-MM-DD format, defaults to today
endDatestringYYYY-MM-DD format, defaults to today
statusesstringDash-delimited status codes
categoriesstringDash-delimited status categories
usersstringDash-delimited user list
statusBreakdown"0", "1"Show breakdown of all statuses
showPercentages"0", "1"Show percentages (requires statusBreakdown=1)
fileDownload"0", "1"Download as CSV file

PhoneNumberLogParams phone_number_log extends OutputParams

ParameterTypeReqDescription
phoneNumberstringYesComma-separated phone numbers
detailPhoneNumberLogDetail
typePhoneNumberLogType
archivedLead"Y", "N"

Campaigns (admin.campaigns)

UpdateCampaignParams update_campaign

ParameterTypeReqDescription
campaignIdstringYes
campaignNamestring6-40 characters
active"Y", "N"
autoDialLevelstring2-5 characters, e.g. "3.0"
adaptiveMaximumLevelstring3-20 digits
campaignVdadExtenstring3-20 characters
hopperLevelnumber1-2000
resetHopper"Y", "N"Reset the campaign hopper
dialMethod"MANUAL", "RATIO", "INBOUND_MAN", "ADAPT_AVERAGE", "ADAPT_HARD_LIMIT", "ADAPT_TAPERED"
dialTimeoutnumber1-120 seconds
listOrderstringLead ordering — e.g. "UP", "DOWN", "RANDOM 2nd NEW", "DOWN COUNT"
listOrderRandomize"Y", "N"Randomize hopper loading within list order
listOrderSecondarystringe.g. "LEAD_ASCEND", "CALLTIME_DESCEND", "VENDOR_ASCEND"
outboundCidstring1-20 digits
dialStatusAddstring1-6 character status code to add to dial statuses
dialStatusRemovestring1-6 character status code to remove from dial statuses
leadFilterIdstringValid filter ID or "---NONE---"
xferconfOnestringTransfer - Conf Number 1 (1-50 characters)
xferconfTwostringTransfer - Conf Number 2 (1-50 characters)
xferconfThreestringTransfer - Conf Number 3 (1-50 characters)
xferconfFourstringTransfer - Conf Number 4 (1-50 characters)
xferconfFivestringTransfer - Conf Number 5 (1-50 characters)
dispoCallUrlstringDisposition URL — must be URL-encoded. Set to "ALT" to use alt URLs
webformOnestringAgent Screen Webform 1 URL — must be URL-encoded
webformTwostringAgent Screen Webform 2 URL — must be URL-encoded
webformThreestringAgent Screen Webform 3 URL — must be URL-encoded

CampaignsListParams campaigns_list extends OutputParams

ParameterTypeReqDescription
campaignIdstring

HopperListParams hopper_list extends OutputParams

ParameterTypeReqDescription
campaignIdstringYes
searchMethod"BLOCK"

HopperBulkInsertParams hopper_bulk_insert

ParameterTypeReqDescription
leadIdsstringYesComma-separated lead IDs (max 1000)
hopperPrioritynumber
hopperLocalCallTimeCheck"Y", "N"

Lists (admin.lists)

AddListParams add_list

ParameterTypeReqDescription
listIdnumberYes2-14 digits
listNamestringYes2-30 characters
campaignIdstringYes2-8 characters, must be valid
active"Y", "N"
listDescriptionstringUp to 255 chars. Use "--BLANK--" to empty.
outboundCidstring6-20 digits
scriptstring1-10 chars, must be valid script
amMessagestring2-100 characters
dropInboundGroupstring1-10 chars, must be valid in-group
webFormAddressstring6-100 chars, URL-encodable
webFormAddressTwostring6-100 chars, URL-encodable
webFormAddressThreestring6-100 chars, URL-encodable
resetTimestring4-100 chars, valid 4-digit groups of 24-hour time (e.g. "0900-1700-2359")
tzMethodTZMethod
localCallTimestringValid call time ID or "campaign" (default)
expirationDatestringYYYY-MM-DD format
xferconfOnestringTransfer - Conf Number 1 (1-50 characters)
xferconfTwostringTransfer - Conf Number 2 (1-50 characters)
xferconfThreestringTransfer - Conf Number 3 (1-50 characters)
xferconfFourstringTransfer - Conf Number 4 (1-50 characters)
xferconfFivestringTransfer - Conf Number 5 (1-50 characters)
customFieldsCopynumber2-14 digits, valid list ID with custom fields. Requires "Custom Fields Modify" permission.
customCopyMethod"APPEND", "UPDATE", "REPLACE"

UpdateListParams update_list

ParameterTypeReqDescription
listIdnumberYes2-14 digits
insertIfNotFound"Y", "N"Attempt insert as new list if no match
resetList"Y", "N"Reset Called-Since-Last-Reset flag for all leads
deleteList"Y", "N"Delete the list
deleteLeads"Y", "N"Delete all leads with this list_id
archivedLead"Y", "N"Affect only vicidial_list_archive leads
listNamestring
campaignIdstring
active"Y", "N"
listDescriptionstring
outboundCidstring
scriptstring
amMessagestring
dropInboundGroupstring
webFormAddressstring
webFormAddressTwostring
webFormAddressThreestring
resetTimestring
tzMethodTZMethod
localCallTimestring
expirationDatestring
xferconfOnestring
xferconfTwostring
xferconfThreestring
xferconfFourstring
xferconfFivestring
customFieldsCopynumber
customCopyMethod"APPEND", "UPDATE", "REPLACE"
customFieldsAdd"Y"
customFieldsUpdate"Y"
customFieldsDelete"Y"
fieldLabelstringRequired for custom field add/update/delete
fieldNamestring
fieldSizenumber
fieldType"TEXT", "SELECT", "AREA", "MULTI", "RADIO", "CHECKBOX", "DATE", "TIME"
fieldRanknumber
fieldOrdernumber
fieldRerank"YES", "NO"
fieldMaxnumber
fieldDefaultstring
fieldOptionsstringUse %0A for newline, %7C for pipe
fieldDuplicate"Y", "N"
fieldDescriptionstring
fieldHelpstring
fieldRequired"Y", "N"
multiPosition"HORIZONTAL", "VERTICAL"
namePosition"TOP", "LEFT"
fieldEncrypt"Y", "N"
fieldShowHide"DISABLED", "X_OUT_ALL", "LAST_1", "LAST_2", "LAST_3", "LAST_4", "FIRST_1_LAST_4"

ListInfoParams list_info extends OutputParams

ParameterTypeReqDescription
listIdnumberYes
dialableCount"Y", "N"
leadsCounts"Y", "N"Include counts of all leads and NEW status leads
archivedLead"Y", "N"Query only vicidial_list_archive leads

ListCustomFieldsParams list_custom_fields extends OutputParams

ParameterTypeReqDescription
listIdnumber | stringList ID, or "---ALL---" for all lists
customOrder"table_order", "alpha_up", "alpha_down"Field ordering: table_order (default), alpha_up, alpha_down

Phones (admin.phones)

AddPhoneParams add_phone

ParameterTypeReqDescription
extensionstringYes
dialplanNumberstringYes
voicemailIdstringYes
phoneLoginstringYes
phonePassstringYes
serverIpstringYes
protocolPhoneProtocolYes
registrationPasswordstringYes
phoneFullNamestringYes
localGmtstring
outboundCidstringYes
phoneContextstring
emailstring
adminUserGroupstring
isWebphoneWebphoneType
webphoneAutoAnswer"Y", "N"
useExternalServerIp"Y", "N"
templateIdstring
onHookAgent"Y", "N"

UpdatePhoneParams update_phone

ParameterTypeReqDescription
extensionstringYes
serverIpstringYes
deletePhone"Y"
dialplanNumberstring
voicemailIdstring
phoneLoginstring
phonePassstring
protocolPhoneProtocol
registrationPasswordstring
phoneFullNamestring
localGmtstring
outboundCidstring
outboundAltCidstring
phoneContextstring
emailstring
adminUserGroupstring
phoneRingTimeoutnumber
deleteVmAfterEmail"Y", "N"
isWebphoneWebphoneType
webphoneAutoAnswer"Y", "N"
useExternalServerIp"Y", "N"
templateIdstring
onHookAgent"Y", "N"

AddPhoneAliasParams add_phone_alias

ParameterTypeReqDescription
aliasIdstringYes2-20 characters
phoneLoginsstringYesComma-separated phone logins (2-255 characters)
aliasNamestringYes1-50 characters

UpdatePhoneAliasParams update_phone_alias

ParameterTypeReqDescription
aliasIdstringYes2-20 characters
phoneLoginsstringYesComma-separated phone logins (2-255 characters)
aliasNamestringYes1-50 characters
deleteAlias"Y", "N"Delete the phone alias

DIDs (admin.dids)

AddDidParams add_did

ParameterTypeReqDescription
didPatternstringYes2-50 characters. URL-encode special chars (e.g. + as %2B)
didDescriptionstring
active"Y", "N"
didRoute"EXTEN", "VOICEMAIL", "AGENT", "PHONE", "IN_GROUP", "CALLMENU", "VMAIL_NO_INST"
recordCall"Y", "N", "Y_QUEUESTOP"
extensionstring
extenContextstring
voicemailExtstring
phoneExtensionstring
serverIpstring
groupstringValid in-group group_id
menuIdstringValid call menu menu_id
filterCleanCidNumberstring
callHandleMethodstring
agentSearchMethod"LO", "LB", "SO"
listIdnumber
entryListIdnumber
campaignIdstring
phoneCodestring

CopyDidParams copy_did

ParameterTypeReqDescription
sourceDidPatternstringYes2-50 characters, must be an existing DID
newDidsstringYes2-2000 characters, comma-separated for multiple DIDs
didDescriptionstring

UpdateDidParams update_did

ParameterTypeReqDescription
didPatternstringYes2-50 characters, must be an existing DID
didDescriptionstring
active"Y", "N"
didRoute"EXTEN", "VOICEMAIL", "AGENT", "PHONE", "IN_GROUP", "CALLMENU", "VMAIL_NO_INST"
recordCall"Y", "N", "Y_QUEUESTOP"
extensionstring
extenContextstring
voicemailExtstring
phoneExtensionstring
serverIpstring
groupstring
menuIdstring
filterCleanCidNumberstring
callHandleMethodstring
agentSearchMethod"LO", "LB", "SO"
listIdnumber
entryListIdnumber
campaignIdstring
phoneCodestring
deleteDid"Y"

DNC (admin.dnc)

DncPhoneParams add_dnc_phone

ParameterTypeReqDescription
phoneNumberstringYes
campaignIdstringYes

FpgPhoneParams add_fpg_phone

ParameterTypeReqDescription
phoneNumberstringYes
groupstringYes

System (admin.system)

CheckPhoneNumberParams check_phone_number

ParameterTypeReqDescription
phoneNumberstringYes6-16 digits
phoneCodestring1-4 digits, defaults to 1
localCallTimestringYesMust be a valid call time ID in the system
dncCheckDNCCheck
campaignDncCheckDNCCheck
campaignIdstring
usacanPrefixCheck"Y", "N"
usacanAreacodeCheck"Y", "N"
nanpaAcPrefixCheck"Y", "N"
tzMethodTZMethod
postalCodestring5 digits, USA zipcodes only. Needed for POSTAL_CODE tz_method
statestring2 letters. Needed if state call time rules enabled
ownerstring2-5 letters. Needed for TZCODE tz_method

AddGroupAliasParams add_group_alias

ParameterTypeReqDescription
callerIdNumberstringYes
groupAliasIdstring
groupAliasNamestring
callerIdNamestring
active"Y", "N"
adminUserGroupstring

UpdateCidGroupEntryParams update_cid_group_entry

ParameterTypeReqDescription
cidGroupIdstringYes2-20 characters, must be a valid CID Group ID or Campaign ID
areacodestringYesAreacode (e.g. "312"), state (e.g. "FL"), or "---ALL---"
stage"UPDATE", "ADD", "DELETE", "INFO"YesAction to perform
outboundCidstring1-20 digits, or "---ALL---"
cidDescriptionstring6-50 characters
active"Y", "N"

UpdateAltUrlParams update_alt_url

ParameterTypeReqDescription
campaignIdstringYes
entryType"campaign"Yes
urlType"dispo", "start", "addlead", "noagent"Yes
altUrlId"NEW", "LIST"Existing alt URL ID, "NEW" to create, or "LIST" to list all
active"Y", "N"
urlRanknumber
urlStatusesstringSpace-separated status codes, or "---ALL---"
urlDescriptionstring
urlListsstringSpace-separated list IDs, or blank for all
urlCallLengthnumberMinimum call length in seconds (default: 0)
urlAddressstringMust be URL-encoded

UpdatePresetsParams update_presets

ParameterTypeReqDescription
campaignIdstringYes
presetNamestringPreset name — can be omitted if only one preset exists for this campaign
action"UPDATE", "NEW", "DELETE", "LIST""UPDATE" (default), "NEW", "DELETE", or "LIST"
presetNumberstring1-50 digits
presetHideNumber"Y", "N"
presetDtmfstringDTMF digits (0-9, P=#, S=*, Q=half-second quiet)
stageOutputFormatOutput format for LIST action
header"YES", "NO"Include header for LIST action

UpdateLogEntryParams update_log_entry

ParameterTypeReqDescription
callIdstringYes
groupstringYes
statusstringYes

Status Code Enums (86 codes)

EnumCodesReqDescription
AgentStatusA, B, DC, DEC, DNC, N, NI, NP, SALE, ALTNUMAgent-selectable dispositions
SystemStatusNEW, QUEUE, INCALL, DROP, XDROP, NA, CALLBK, CBHOLD, INBNDCore call flow
AMDStatusAA, AM, AL, AMDXFR, ADAIRAnswering machine detection
AutoDetectStatusAFAX, AB, ADC, ADCT, ADCCARCarrier auto-detection
DNCStatusDNCL, DNCC, DNCCARDo Not Call system
TransferStatusPU, PM, XFER, HXFER, RQXFER, RAXFER, IVRXFR, UNKXFRTransfer/routing
CPDStatusCPDATB, CPDB, CPDNA + 10 moreSangoma call progress (13 codes)
ErrorStatusERI, DONEM, DISPO, LRERRSystem error states
SurveyStatusSVYEXT, SVYVM, SVYHU, SVYREC, SVYCLMSurvey campaign
InboundStatusHOLDTO, QVMAIL, TIMEOT + 9 moreInbound-specific (12 codes)
QCStatusQCFAIL, QCCANC, QCPASSQuality control
MiscStatusMLINAT, LSMERG, DISMX + 6 moreMiscellaneous (9 codes)

Agent Events (49 events)

CategoryEventsReqCount
Sessionlogged_in, logged_out, logged_out_complete, login_invalid, session_disabled, session_empty, session_channels7
Agent Statestate_ready, state_paused2
Callcall_dialed, call_answered, call_dead, call_script, agent_hangup5
Dead Triggerdead_trigger_audio, dead_trigger_url, dead_trigger_url_sent3
Dispositiondispo_screen_open, dispo_set, dispo_set_twice3
3-Way3way_start, 3way_answered, 3way_agent_hangup, 3way_agent_leave4
Transfertransfer_local_closer, transfer_blind, transfer_vmail, transfer_panel_open, transfer_panel_closed5
Parkpark_started, park_retrieved, park_ivr_started, park_ivr_retrieved4
Screen/UImanual_dial_open, callback_select_open, ingroup_screen_open/closed, territory_screen_open/closed, contact_search_open, lead_search_open, pause_code_open, customer_gone, blind_monitor_alert11
Systemagent_alert, time_sync, none_in_session, update_fields, other_answered5

Browser / CORS

Configure CORS on your ViciDial server via agc/options.php and vicidial/options.php. See official CORS docs. Never set to '*'.

Links

ResourceURLReqDescription
Source CodeGitHubIssues, PRs, source
npmnpmjs.com/package/@thornebridge/vicijsnpm install @thornebridge/vicijs
Agent APIAGENT_API.txtOfficial reference (51KB)
Admin APINON-AGENT_API.txtOfficial reference (168KB)