Request

GET or POST https://www.symnexconsulting.com/api/calculate, with mode set to network-authentication or voice-biometrics. Send the inputs as query parameters, as a JSON object (Content-Type: application/json) or as a form. Every input is optional: a missing one takes the calculator's starting value. A value out of range is refused with a 400 and the reason, rather than replaced, so you know your number was used.

curl 'https://www.symnexconsulting.com/api/calculate?mode=voice-biometrics&calls=500000&vbEnroll=60'

curl -X POST https://www.symnexconsulting.com/api/calculate \
  -H 'Content-Type: application/json' \
  -d '{"mode": "network-authentication", "calls": 500000, "costPerCall": 6}'

The input names are the calculator pages' own URL parameters, so a result links straight back to the page with the same numbers (calculator_url). Cross-origin GET and POST are allowed.

Inputs

NameWhat it isRangeDefault
callsCalls. Calls in the period you choose. A year’s calls give a yearly saving.1000 to 1000000001000000
averageHandleTimeAverage handle time. Average agent handling time per call, including after-call work.30 to 1200300
costPerCallCost per call. Average cost of a call handled by an agent.0.5 to 205
autoIdAutomated identification rate. Percentage of calls identified by automation (IVR).0 to 10050
autoAuthAutomated authentication rate. Percentage of identified calls authenticated in automation (IVR).0 to 10040
autoContainAutomated containment rate. Percentage of authenticated calls that can be contained in automation (IVR).0 to 10050
manIdManual identification rate. Percentage of calls identified by an agent.0 to 10095
manAuthManual authentication rate. Percentage of identified calls authenticated by an agent.0 to 10095
manIdHandleTimeManual identification time. Average duration of manual identification when it is needed.1 to 12020
manAuthHandleTimeManual authentication time. Average duration of manual authentication when it is needed.1 to 12040
netNumberAvailabilityNetwork authentication only. Number availability rate. Percentage of calls presenting a number you can check.0 to 10080
netNumberIdNetwork authentication only. Number identification rate. Percentage of those numbers that match a record you hold for a single customer.0 to 10080
netNumberAuthNetwork authentication only. Network authentication rate. Percentage of matched calls the network check confirms are not spoofed.0 to 10095
vbEnrollVoice biometrics only. Enrolled calls. Percentage of calls from customers enrolled in voice biometrics.0 to 10085
vbIVRAuthVoice biometrics only. IVR authentication rate. Percentage of enrolled, identified callers matched by voice biometrics in the IVR. Use 0 if you will not use it in the IVR.0 to 10075
vbAgentAuthVoice biometrics only. Agent authentication rate. Percentage of enrolled, identified callers matched by voice biometrics with an agent. Use 0 if you will not use it with agents.0 to 10095
currencyISO 4217 code for the formatted money figures. The maths does not convert anything: give costs in this currency.GBP, EUR, USD and othersGBP

Response

headline is the estimated saving; split divides it between calls that now finish in self-service and seconds taken off the calls that still reach an agent; key_insight is the sentence the calculator page shows; metrics are its result figures; assumptions_used lists every input with the value used and whether it was the default. This is the response to the second example above:

{
  "ok": true,
  "mode": "network-authentication",
  "currency": "GBP",
  "headline": {
    "label": "Estimated saving with network authentication",
    "value": 868088.8888888892,
    "formatted": "£868,089"
  },
  "split": {
    "automation": {
      "label": "From calls that now finish in self-service",
      "value": 729600.0000000003,
      "formatted": "£729,600",
      "calls_moved_to_self_service": 121600
    },
    "handle_time": {
      "label": "From seconds taken off the calls that still reach an agent",
      "value": 138488.88888888885,
      "formatted": "£138,489",
      "seconds_saved_per_agent_call": 21.085397212071996
    }
  },
  "key_insight": "Most of the saving, £729,600 of £868,089, comes from 121,600 more calls finishing in self-service; the rest comes from agents spending 21 fewer seconds on security per call.",
  "metrics": [
    {
      "key": "total_cost_saving",
      "title": "Total cost savings",
      "definition": "Combined savings from automation and handle time improvements.",
      "value": 868088.8888888892,
      "formatted": "£868,089"
    },
    {
      "key": "callers_no_longer_turned_away",
      "title": "Callers no longer turned away",
      "definition": "Callers who fail security today and would be authenticated.",
      "value": 19380,
      "formatted": "19,380"
    },
    {
      "key": "net_auto_auth_success_calls",
      "title": "Zero-friction calls",
      "definition": "Number of calls with instant, seamless authentication.",
      "value": 304000,
      "formatted": "304,000"
    },
    {
      "key": "handle_time_reduction_seconds",
      "title": "Average handle time reduction",
      "definition": "Average seconds saved per call through automated network authentication.",
      "value": 21.085397212071996,
      "formatted": "21 seconds"
    },
    {
      "key": "handle_time_reduction_percentage",
      "title": "Manual call efficiency improvement",
      "definition": "Percentage improvement in average handle time.",
      "value": 7,
      "formatted": "7%"
    },
    {
      "key": "handle_time_cost_saving",
      "title": "Handle time cost savings",
      "definition": "Cost savings from reduced handle time on the remaining manual calls.",
      "value": 138488.88888888885,
      "formatted": "£138,489"
    },
    {
      "key": "calls_avoided_through_automation",
      "title": "Calls moved to automation",
      "definition": "Number of calls moved from manual handling to automated processing.",
      "value": 121600,
      "formatted": "121,600"
    },
    {
      "key": "manual_call_reduction_rate",
      "title": "Manual call reduction",
      "definition": "Percentage reduction in calls needing any manual handling.",
      "value": 27,
      "formatted": "27%"
    },
    {
      "key": "automation_cost_saving",
      "title": "Automation cost savings",
      "definition": "Cost savings from calls moved to automated processing.",
      "value": 729600.0000000003,
      "formatted": "£729,600"
    }
  ],
  "assumptions_used": [
    {
      "key": "calls",
      "label": "Calls",
      "value": 500000,
      "unit": "calls in the period",
      "default": 1000000,
      "is_default": false
    },
    {
      "key": "averageHandleTime",
      "label": "Average handle time",
      "value": 300,
      "unit": "seconds",
      "default": 300,
      "is_default": true
    },
    {
      "key": "costPerCall",
      "label": "Cost per call",
      "value": 6,
      "unit": "currency units per call",
      "default": 5,
      "is_default": false
    },
    {
      "key": "netNumberAvailability",
      "label": "Number availability rate",
      "value": 80,
      "unit": "percent (0 to 100)",
      "default": 80,
      "is_default": true
    },
    {
      "key": "netNumberId",
      "label": "Number identification rate",
      "value": 80,
      "unit": "percent (0 to 100)",
      "default": 80,
      "is_default": true
    },
    {
      "key": "netNumberAuth",
      "label": "Network authentication rate",
      "value": 95,
      "unit": "percent (0 to 100)",
      "default": 95,
      "is_default": true
    },
    {
      "key": "autoId",
      "label": "Automated identification rate",
      "value": 50,
      "unit": "percent (0 to 100)",
      "default": 50,
      "is_default": true
    },
    {
      "key": "autoAuth",
      "label": "Automated authentication rate",
      "value": 40,
      "unit": "percent (0 to 100)",
      "default": 40,
      "is_default": true
    },
    {
      "key": "autoContain",
      "label": "Automated containment rate",
      "value": 50,
      "unit": "percent (0 to 100)",
      "default": 50,
      "is_default": true
    },
    {
      "key": "manId",
      "label": "Manual identification rate",
      "value": 95,
      "unit": "percent (0 to 100)",
      "default": 95,
      "is_default": true
    },
    {
      "key": "manAuth",
      "label": "Manual authentication rate",
      "value": 95,
      "unit": "percent (0 to 100)",
      "default": 95,
      "is_default": true
    },
    {
      "key": "manIdHandleTime",
      "label": "Manual identification time",
      "value": 20,
      "unit": "seconds",
      "default": 20,
      "is_default": true
    },
    {
      "key": "manAuthHandleTime",
      "label": "Manual authentication time",
      "value": 40,
      "unit": "seconds",
      "default": 40,
      "is_default": true
    }
  ],
  "calculator_url": "https://www.symnexconsulting.com/tools/network-authentication-calculator?calls=500000&costPerCall=6",
  "method": "SymNex security-path model: the same calculation as the calculator page, from the PHP SecurityPathCalculator. The saving is the gross fall in agent cost, before technology costs. Figures are per period of the calls you give (a year if calls is annual volume)."
}

Errors are {"ok": false, "error": …}, with errors by input name for values out of range (HTTP 400), and HTTP 422 when the inputs leave no calls for an agent to handle.

In the browser: WebMCP

On the voice biometrics and network authentication calculator pages, a browser that supports WebMCP (navigator.modelContext) is offered one tool each, calculate_voice_biometrics_saving and calculate_network_authentication_saving, with the same inputs and the same response, run on the page without a network request. The input schema, for voice biometrics:

{
  "type": "object",
  "properties": {
    "calls": {
      "type": "integer",
      "title": "Calls",
      "description": "Calls in the period you choose. A year’s calls give a yearly saving. Unit: calls in the period.",
      "minimum": 1000,
      "maximum": 100000000,
      "default": 1000000
    },
    "averageHandleTime": {
      "type": "integer",
      "title": "Average handle time",
      "description": "Average agent handling time per call, including after-call work. Unit: seconds.",
      "minimum": 30,
      "maximum": 1200,
      "default": 300
    },
    "costPerCall": {
      "type": "number",
      "title": "Cost per call",
      "description": "Average cost of a call handled by an agent. Unit: currency units per call.",
      "minimum": 0.5,
      "maximum": 20,
      "default": 5
    },
    "vbEnroll": {
      "type": "number",
      "title": "Enrolled calls",
      "description": "Percentage of calls from customers enrolled in voice biometrics. Unit: percent (0 to 100).",
      "minimum": 0,
      "maximum": 100,
      "default": 85
    },
    "vbIVRAuth": {
      "type": "number",
      "title": "IVR authentication rate",
      "description": "Percentage of enrolled, identified callers matched by voice biometrics in the IVR. Use 0 if you will not use it in the IVR. Unit: percent (0 to 100).",
      "minimum": 0,
      "maximum": 100,
      "default": 75
    },
    "vbAgentAuth": {
      "type": "number",
      "title": "Agent authentication rate",
      "description": "Percentage of enrolled, identified callers matched by voice biometrics with an agent. Use 0 if you will not use it with agents. Unit: percent (0 to 100).",
      "minimum": 0,
      "maximum": 100,
      "default": 95
    },
    "autoId": {
      "type": "number",
      "title": "Automated identification rate",
      "description": "Percentage of calls identified by automation (IVR). Unit: percent (0 to 100).",
      "minimum": 0,
      "maximum": 100,
      "default": 50
    },
    "autoAuth": {
      "type": "number",
      "title": "Automated authentication rate",
      "description": "Percentage of identified calls authenticated in automation (IVR). Unit: percent (0 to 100).",
      "minimum": 0,
      "maximum": 100,
      "default": 40
    },
    "autoContain": {
      "type": "number",
      "title": "Automated containment rate",
      "description": "Percentage of authenticated calls that can be contained in automation (IVR). Unit: percent (0 to 100).",
      "minimum": 0,
      "maximum": 100,
      "default": 50
    },
    "manId": {
      "type": "number",
      "title": "Manual identification rate",
      "description": "Percentage of calls identified by an agent. Unit: percent (0 to 100).",
      "minimum": 0,
      "maximum": 100,
      "default": 95
    },
    "manAuth": {
      "type": "number",
      "title": "Manual authentication rate",
      "description": "Percentage of identified calls authenticated by an agent. Unit: percent (0 to 100).",
      "minimum": 0,
      "maximum": 100,
      "default": 95
    },
    "manIdHandleTime": {
      "type": "integer",
      "title": "Manual identification time",
      "description": "Average duration of manual identification when it is needed. Unit: seconds.",
      "minimum": 1,
      "maximum": 120,
      "default": 20
    },
    "manAuthHandleTime": {
      "type": "integer",
      "title": "Manual authentication time",
      "description": "Average duration of manual authentication when it is needed. Unit: seconds.",
      "minimum": 1,
      "maximum": 120,
      "default": 40
    },
    "currency": {
      "type": "string",
      "enum": [
        "GBP",
        "EUR",
        "USD",
        "AUD",
        "CAD",
        "NZD",
        "CHF",
        "SEK",
        "NOK",
        "DKK",
        "ZAR",
        "SGD",
        "INR"
      ],
      "default": "GBP",
      "description": "ISO 4217 code used to format money in the key insight and the formatted figures."
    }
  },
  "additionalProperties": false
}

Use and limits

Use it freely, and please link to the calculator page when you quote a figure. The model is a starting point for a business case, not a forecast: the figures are only as good as the assumptions. If you want to work through your own numbers properly, book a call.