SimpleVoIP CDR API

Call detail record (CDR) notification webhook, fired when a call completes.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/simplevoip:simplevoip-cdr-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

simplevoip-cdr-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Simplevoip CDR API
  version: 1.6.0
  license:
    name: Proprietary
  description: 'Operations tagged CDR across 2 of this provider''s published API definitions: simplevoip.json, simplevoip-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://public.simplevoip.us
tags:
- name: CDR
  description: Call detail record (CDR) notification webhook, fired when a call completes.
paths: {}
webhooks:
  cdrNotification:
    post:
      tags:
      - CDR
      operationId: cdrNotificationWebhook
      summary: CDR Notification Webhook
      security: []
      description: 'Configured per account (optionally including sub-accounts) to trigger a webhook notification each time a call completes. This webhook is POSTed to the URL you specify, using the JSON format shown below.


        No response body is expected back from your endpoint; only the HTTP status code is used for delivery bookkeeping. Delivery is queued and retried on failure, and no signature/HMAC header is sent with these requests — treat the source URL as the only verification available today.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CdrWebhookPayload'
            examples:
              answeredInbound:
                summary: Answered inbound call
                value:
                  call_id: 8675309-abcd@10.10.10.1
                  account_id: 1a2b3c4d5e6f1a2b3c4d5e6f
                  timestamp: 1704326400
                  datetime_local: '2024-01-03T12:00:00-06:00'
                  site_name: Downtown Store
                  site_number: '4321'
                  total_duration_secs: 95
                  total_billing_secs: 80
                  hangup_cause: NORMAL_CLEARING
                  direction: inbound
                  caller_id_number: '+12025557979'
                  caller_id_name: JOHN DOE
                  callee_id_number: '+15555555556'
                  callee_id_name: Front Desk
                  total_user_talk_time: 80
                  max_user_ring_time: 12
                  first_answered_user: 2b3c4d5e6f1a2b3c4d5e6f1a
                  first_answered_device: 3c4d5e6f1a2b3c4d5e6f1a2b
                  attempted_users:
                  - 2b3c4d5e6f1a2b3c4d5e6f1a
                  attempted_devices:
                  - 3c4d5e6f1a2b3c4d5e6f1a2b
                  menu_selections: []
                  recording_ids:
                  - 4d5e6f1a2b3c4d5e6f1a2b3c
                  was_park_abandoned: false
                  was_missed: false
                  custom_application_vars: {}
      responses:
        '200':
          description: Any 2xx response is treated as successful delivery for bookkeeping purposes; the response body itself is not read.
    servers:
    - url: https://public.simplevoip.us
components:
  schemas:
    CdrWebhookPayload:
      type: object
      required:
      - call_id
      - account_id
      - timestamp
      - datetime_local
      - site_name
      - site_number
      - total_duration_secs
      - total_billing_secs
      - hangup_cause
      - direction
      - caller_id_number
      - caller_id_name
      - callee_id_number
      - callee_id_name
      - total_user_talk_time
      - max_user_ring_time
      - first_answered_user
      - first_answered_device
      - attempted_users
      - attempted_devices
      - menu_selections
      - recording_ids
      - was_park_abandoned
      - was_missed
      - custom_application_vars
      properties:
        call_id:
          type: string
          description: Call-ID of the call's initiating leg.
        account_id:
          type: string
          description: Kazoo account ID the call belongs to.
        timestamp:
          type: integer
          description: UNIX timestamp at which the call started.
        datetime_local:
          type: string
          description: ISO-8601 timestamp with a colon-delimited UTC offset (e.g. `-06:00`), in the call's site's local timezone.
        site_name:
          type:
          - string
          - 'null'
          description: Name of the location associated with the call, or `null` if no linked location was found.
        site_number:
          type:
          - string
          - 'null'
          description: Site number of the location associated with the call, or `null` if no linked location was found.
        total_duration_secs:
          type: integer
          description: Total duration of the call in seconds, including ring time.
        total_billing_secs:
          type: integer
          description: Length of time media was active on the call, in seconds.
        hangup_cause:
          type: string
          description: Reason the call ended (e.g. `NORMAL_CLEARING`, `NO_ANSWER`).
        direction:
          type: string
          enum:
          - inbound
          - outbound
          description: '`outbound` if an SV user initiated the call, `inbound` otherwise.'
        caller_id_number:
          type: string
          description: Caller ID number of the call, in E.164 format where available.
        caller_id_name:
          type: string
          description: Caller ID name of the call, with any trailing STIR/SHAKEN attestation info stripped.
        callee_id_number:
          type: string
          description: Callee ID number of the call, in E.164 format where available.
        callee_id_name:
          type: string
          description: Callee ID name of the call.
        total_user_talk_time:
          type: integer
          description: Total number of seconds any SV user spent talking on the call.
        max_user_ring_time:
          type:
          - integer
          - 'null'
          description: Longest number of seconds any single SV user's device rang. `null` for outbound calls.
        first_answered_user:
          type:
          - string
          - 'null'
          description: Kazoo user ID of the first SV user to answer the call. `null` for outbound calls or if the call was never answered.
        first_answered_device:
          type:
          - string
          - 'null'
          description: Kazoo device ID of the first device used to answer the call. `null` for outbound calls or if the call was never answered.
        attempted_users:
          type: array
          items:
            type: string
          description: Kazoo user IDs of every SV user the call rang. Always an empty array for outbound calls.
        attempted_devices:
          type: array
          items:
            type: string
          description: Kazoo device IDs of every device the call rang. Always an empty array for outbound calls.
        menu_selections:
          type: array
          items:
            type: string
          description: Caller ID name fragments recorded as the call moved through IVR menus, with the base caller ID name subtracted out. Always an empty array for outbound calls.
        recording_ids:
          type: array
          items:
            type: string
          description: IDs of any call recordings captured for this call.
        was_park_abandoned:
          type: boolean
          description: '`true` if the call was terminated while on hold in a parking slot.'
        was_missed:
          type: boolean
          description: '`true` if the call was inbound, no SV user answered, and at least one user''s device rang.'
        custom_application_vars:
          type: object
          additionalProperties: true
          description: Custom key/value data attached to the call by a callflow action. Values are typically strings but this is not guaranteed. Empty object if none were set.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Send an `Authorization: Bearer <token>` header. As a fallback for accounts without a bearer token configured, requests from an IP address on the account''s SimpleVoIP-managed allowlist are also accepted — bearer token is the recommended method for new integrations.'
x-refined-from:
- simplevoip.json
- simplevoip-openapi.json