Skip to Content
IntegrationsCustom API & Webhooks

Custom API & Webhooks

When the integration you need isn’t in the catalog, the answer is HTTP. Omniflow supports outbound webhooks for events, inbound webhooks for triggers, and a public REST API for anything else.

Outbound webhooks (Omniflow β†’ you)

Subscribe to events; Omniflow POSTs JSON to your endpoint when they happen.

Available events

EventTriggered by
conversation.createdA new conversation lands in the inbox.
conversation.resolvedA conversation is marked resolved.
ticket.createdA new ticket is opened.
ticket.status_changedA ticket changes status.
scorecard.createdA QA grader scores a conversation.
agent.publishedAn AI agent is published or republished.
training_attempt.completedA trainee finishes a practice call.
automation.triggeredA routing rule fires.

Configure

  1. Settings β†’ Integrations β†’ Webhooks β†’ New endpoint.
  2. Paste your URL.
  3. Pick events to subscribe to.
  4. Optional: set a shared secret. Omniflow signs every request with X-Omniflow-Signature.

Delivery semantics

  • At-least-once. Retries on 5xx with exponential backoff up to 24 hours.
  • Ordered per-resource. Events for the same conversation arrive in order.
  • Signed. Verify X-Omniflow-Signature to confirm authenticity.
  • Replay. Replay any failed delivery from the Webhooks β†’ Deliveries log.
# Verify a signature echo -n "$BODY" | openssl dgst -sha256 -hmac "$WEBHOOK_SECRET" \ | awk '{print $2}' | xxd -r -p | base64

Don’t trust the source IP for authentication β€” verify the signature. Source IPs change; signatures don’t lie.

Inbound webhooks (you β†’ Omniflow)

Trigger Omniflow workflows from external events:

Use caseHow
External system marked an order shipped β†’ tag the conversationPOST to a webhook URL, configure tag rule.
Vendor’s incident page paged β†’ escalate all related ticketsPOST + custom rule.
Form submission on your site β†’ create a contact + assignPOST + create-contact rule.

Configure

  1. Settings β†’ Integrations β†’ Inbound webhooks β†’ New trigger.
  2. Pick the resource (conversation, ticket, contact, custom event).
  3. Define the JSON shape you’ll POST.
  4. Save and copy the URL β€” it’s signed and unique to your workspace.

Custom agent tools

If your system has APIs you want the AI agent to call directly, expose them as agent tools instead of webhooks. See Tools & Actions.

The trade-off:

Use webhooks if…Use agent tools if…
Async β€” fire-and-forgetSync β€” agent waits for the response
Reacting to Omniflow eventsDriving Omniflow behavior from the agent’s reasoning
One workflow trigger per eventMany possible calls per conversation

Public REST API

The full API covers everything in the UI. Common starting points:

EndpointUse
POST /api/v1/conversationsIngest external transcripts.
GET /api/v1/conversations/{id}/tracePull a full trace for one conversation.
POST /api/v1/contactsCreate or upsert a contact.
POST /api/v1/ticketsCreate a ticket.
GET /api/v1/scorecardsPull QA scores in bulk.

See API Reference.

Authentication

API requests use a workspace API key:

Authorization: Bearer omf_live_xxxxxxxxxxxxxx

Manage keys under Settings β†’ API Keys. Keys can be scoped to specific resource types and rate-limited per key.

Use a separate API key per integration β€” easier to rotate, easier to audit when something goes wrong.

Rate limits

TierDefault
Default60 requests / minute / key
Burstable120 / minute, 1000 / hour
CustomSet per-key in Settings β†’ API Keys

Hitting the limit returns 429; the Retry-After header tells you how long to back off.

Open in Omniflow

If you want to…Go to
Read the full APIAPI Reference
Use webhooks for telephony recordingTelephony
Build an agent tool from your APITools & Actions