Ovianta Developers

Overview

Receive a signed POST when something happens in Ovianta.

Event webhooks tell your system what Ovianta agents did, as it happens. When a call ends or an agent leaves a note, Ovianta sends a POST with a JSON body to the URLs the clinic registered.

EventSent when
call.endedA conversation with an agent finished, by phone or on the website widget.
note.createdThe agent left a note for the clinic's staff.

Setting up an endpoint

An admin of the clinic's Ovianta account adds endpoints in Settings › Webhooks:

  1. Add the endpoint URL and choose its events. The URL must use https and point to a public address. An account can have up to 10 endpoints.
  2. Copy the endpoint's signing secret (it starts with whsec_). You need it to verify signatures.
  3. Click Send test event. Ovianta sends one webhook.test event right away, without retries.

The endpoint page also lists every request sent to it in the last 30 days, with its status and attempts.

The request

Every event is a POST with these headers:

HeaderValue
content-typeapplication/json; charset=utf-8
user-agentOvianta-Webhooks/1.0
x-signatureHex HMAC-SHA256 of the raw body, keyed with the endpoint secret. See Verifying signatures.
x-ovianta-eventThe event type, e.g. call.ended. Same as event in the body.
x-ovianta-event-idThe event id. Same as eventId in the body.
x-ovianta-delivery-attemptWhich attempt this is, 1 to 5.
x-ovianta-testtrue on a test event sent from Settings. Absent otherwise.

and a JSON body with the same envelope for every event:

Prop

Type

{
  "event": "note.created",
  "eventId": "evt_3f9c2a7d41b8e6c05a1d9e2f",
  "version": 1,
  "sentAt": "2026-09-01T11:39:31.000+02:00",
  "attempt": 1,
  "data": { "...": "depends on the event" }
}

Answering

Answer with any 2xx within 10 seconds. Ovianta ignores the response body.

Do the work after answering. If processing takes longer than the timeout, store the event, answer 200, and process it in the background.

Your answerWhat Ovianta does
2xxDelivered.
408, 429, 5xx, no answer in time, or no connectionRetries, on the schedule below.
Any other 4xx, or any 3xxRejected. Not retried. Redirects are not followed.

Retries

An event is attempted up to 5 times:

AttemptSentSince the first attempt
1Immediately0 min
21 min after the previous one1 min
35 min after the previous one6 min
415 min after the previous one21 min
540 min after the previous one61 min

A Retry-After header on a retryable answer can make a wait longer, up to 60 min.

After the last attempt the delivery is marked failed. Each attempt rebuilds the body from Ovianta's current data, so a retried event can include changes made since the first attempt.

Duplicates and order

  • Deduplicate on eventId. It is the same on every retry and for every endpoint. You may receive an event more than once.
  • Do not rely on order. Retries and parallel deliveries mean a later event can arrive first. A note.created can arrive before or after the call.ended of its call; match them with note.callId.

Versions

Each event type has a version. Ovianta adds optional fields without changing it, so ignore fields you do not know. A breaking change gets a new version.

On this page