[email protected] · 24/7 support for customers under contract

JavaScript code on a dark screen, blue and orange syntax highlighting, seen at three-quarters.
REST, webhooks, WebRTC

Developers

Everything the console does, the API does too.

A versioned public API, real-time events and signed webhooks. This is not a marketing layer over a closed product: the Konvoice administration console consumes exactly these same endpoints.

Principles

Four commitments that matter more than the list of endpoints.

Versioned

/api/v1/ is stable. A breaking change means a new major version, never a silent modification. The old version stays served for twelve months at least.

Traceable

Every request carries a correlation identifier you find again in our logs and in your audit log. A support ticket starts with that number.

Idempotent

Every write accepts an idempotency key. Replaying a request after a network timeout does not create a second user or a second call.

Partitioned

A token belongs to one company and carries explicit scopes. It cannot read beyond them, and a read scope never becomes a write.

REST

Creating a user with their extension.

A single request creates the person, their extension, their device credentials and triggers the provisioning of their phone.

Full reference

POST /api/v1/users HTTP/1.1
Host: api.konvoice.io
Authorization: Bearer kv_live_…
Idempotency-Key: 4f1c-9a02-b7

{
  "display_name": "Amadou Diallo",
  "email": "[email protected]",
  "site_id": "site_lyon",
  "extension": "203",
  "role": "agent",
  "devices": [
    { "type": "deskphone", "mac": "805e0c1a2b3c" },
    { "type": "mobile" },
    { "type": "web" }
  ],
  "teams": ["support"]
}
Two dark screens covered in code in a dimly lit room, a person seen from behind in front of them. The sandbox

Before production

Numbers that answer wrongly, on purpose.

The worst test environment for a telephony integration is a colleague you ring twenty times. The sandbox supplies numbers whose behaviour is predictable — answered, no answer, busy, voicemail, carrier failure — and your tests stop depending on somebody.

  • Deterministic scenarios — one number per outcome, always the same.
  • Real webhooks — signed, replayable, in the same format as production.
  • A correlation identifier on every request, which support can find in our logs.
  • No billed calls — the sandbox consumes nothing.

Events

What happens, at the moment it happens.

Events are delivered by signed webhook and by real-time stream. Both carry the same payload, with the same at-least-once delivery guarantee.

EventWhenCommon use
call.ringingA call starts ringingShow the customer record before pick-up
call.answeredSomebody picked upStart a timer, open a ticket
call.endedThe call is overWrite the activity into the CRM
call.missedNobody answeredCreate a callback task
recording.readyThe recording is availableArchive it in your own storage
transcript.readyThe transcript and summary are producedFeed your analytics tool
voicemail.receivedA voicemail is leftNotify a team
device.registeredA phone registersMonitor the estate
site.link_lostA site switches to local standaloneAlert your network monitoring
site.link_restoredA site’s link is restoredClose the alert, check the sync queue
fraud.route_blockedA route was cut by the fraud engineWake somebody up

Webhooks

Signed, time-stamped, replayed.

Verify the signature before processing the payload. The timestamp protects against replay, the idempotency key protects against duplicates when we retry.

  • HMAC-SHA256 signature over the raw body, with one secret per delivery endpoint.
  • Retries with growing backoff for 24 hours, then a failure queue you can inspect.
  • Reject a timestamp older than five minutes: that is a replay.
  • Answer 2xx quickly and process in the background; we cut off at 10 seconds.
POST /your-endpoint HTTP/1.1
Konvoice-Signature: t=1743158400,
  v1=8c1f…d40a
Konvoice-Event-Id: evt_01HZ…
Konvoice-Delivery: 1

{
  "type": "call.ended",
  "created_at": "2026-03-28T09:20:00Z",
  "tenant_id": "ten_8f3c",
  "data": {
    "call_id": "call_01HZ…",
    "direction": "inbound",
    "from": "+33478XXXXXX",
    "to": "+33472XXXXXX",
    "extension": "203",
    "duration_s": 214,
    "disposition": "answered",
    "site_id": "site_lyon",
    "handled_locally": true
  }
}
Two dark screens covered in code in a dimly lit room, a person seen from behind in front of them.

Our own screens consume nothing but this API. It is the only serious guarantee that it will stay complete.

The day it is missing something, our application stops too

Test environment

Develop without ringing real customers.

A separate environment, with its own tokens, its test numbers and a set of calls you can simulate on demand.

Test numbers

Numbers that answer with a predictable scenario: answered, no answer, busy, voicemail, carrier failure. Your automated tests stop depending on a colleague.

Triggerable events

Emit any event from the list from the console, including a site losing its link, to check that your integration reacts correctly.

Delivery log

Every webhook sent, its response, its latency and its retries. Manually replaying a delivery is one button.

Developer questions

Are there rate limits?
Yes, per token and per company, with headers stating your remaining quota and the reset time. The limits are generous for normal use and negotiable for a bulk migration — tell us before importing ten thousand contacts.
Do you provide an OpenAPI specification?
Yes, published with every version and used to generate our own clients. It is the same specification we use internally, not a simplified version for the outside world.
Can calls be controlled in real time?
Yes: place a call, transfer, hold, hang up, inject a message. Control actions are subject to the same scopes as the rest, and a read token cannot hang up a call.
Is the API available on an offline site?
A local fallback API is served by the Konvoice Edge during an outage, with a subset of the endpoints: reading the directory, handset status, the local log. Configuration writes stay reserved to the cloud to avoid two sources of truth.

Test access, free of charge.

Tell us what you want to build. We open an environment with test numbers and stay reachable throughout your integration.

No commitment. No card number asked for.