Connect an OMS with API Keys and Event Destinations
Let an external system (booking tool / OMS) upsert contacts and post inbound events. Kazenly maps those events to Contact Fields and can optionally send an approved Utility template.
Admins and managers only. This is not the bot Send to Webhook path (Integrations).
Detail: API Keys · Event Destinations · Contact Fields.
Before you start
| Need | Where |
|---|---|
| WhatsApp connected (if you will auto-send Utility) | Connect WhatsApp |
| Contact fields defined | Contact Fields |
| Optional Utility template | Approved Utility — G2 |
| Someone who can store secrets securely | API key and signing secret are shown once |
Path at a glance
- Define Contact Fields
- Create an API key
- Copy secrets and Quick start
- Add an Event Destination
- Optional Utility auto-send
- Send a test event from your OMS
- Check Inbound events and Contact #N
1. Define Contact Fields
- Open Settings → Data & CRM → Contact Fields.
- Add field for every value your OMS will send (guest name pieces, booking id, dates, and so on).
You will map Data path → Contact field on the destination.
2. Create an API key
- Open Settings → Data & CRM → API Keys.
- Click Create key.
- Enter a Name.
- Choose Scopes (at least one):
| Scope | Typical use |
|---|---|
| contacts.write | Create/update contacts and field values |
| events.inbound | Accept booking / OMS events (required for destinations) |
| messages.send_template | Needed if a destination sends Utility |
| flows.trigger | Reserved for later |
| consent.write | Only if the OMS must change campaign addressability |
- Leave Include signing secret on if your OMS will sign inbound events.
- Click Create key.
Empty state before any keys: No API keys yet.
3. Copy secrets and Quick start
After create, Copy your secrets now:
- API key (shown once)
- Signing secret (when included)
Tick I have copied the secret(s). Do not show them again. — Kazenly cannot show the full secret again.
On the API Keys page, Quick start helpers:
- Copy /me curl
- Copy /contacts curl (needs contacts.write)
- Copy /events curl (needs events.inbound and a destination)
Your OMS team uses those samples against your Public API base (from the inbox / bootstrap URL shown in product). Prefer storing secrets in the OMS vault — never in chat or git.
Revoke if a key leaks — Revoke this API key? → Revoke key.
4. Add an Event Destination
Without a destination, inbound events are rejected (Without a destination, inbound events are rejected until you add one.).
- Open Settings → Data & CRM → Event Destinations.
- Click Add destination, or Stampede preset / Apply Stampede preset for a booking-oriented start.
- In New destination / Edit destination:
- Event type (for example booking.created — must match what the OMS sends)
- Display name
- Guest name path (optional)
- Active
- Under Field map, Add mapping rows: Data path → Contact field.
- Click Save destination.
Optional Advanced JSON → Apply JSON to editor.
List rows show field-map count and either a Utility name or upsert only (no send).
5. Optional Utility auto-send
On the same destination:
- Set Utility template name and Language (must be an Approved Utility — not Marketing).
- Add Template body parameters (Add body parameter) as needed.
- Leave template blank for upsert only (contact/fields update, no WhatsApp send).
- Scope messages.send_template must be on the API key if you send.
6. Send a test event from your OMS
- Use Copy /events curl (or your OMS integration) with the new key.
- Post an event whose type matches the destination Event type.
- Prefer a non-production contact for the first test.
7. Check Inbound events and Contact #N
On Event Destinations, open Inbound events (last 20):
- Filters: All types / All outcomes (accepted · duplicate · rejected · send_failed)
- Refresh
- Empty: No inbound events yet.
- Payloads are not stored or shown — outcomes only
- When a contact was resolved, Contact #N opens Find Contacts / the profile
Confirm field values on the contact Fields tab — Contact Profile.
Quick paths
| Path | Setup |
|---|---|
| A. Upsert only | Contact Fields → key with contacts.write + events.inbound → destination field map · no Utility |
| B. Booking + Utility | Same as A + Approved Utility on destination + messages.send_template |
| C. Stampede-style | Apply Stampede preset → adjust paths/fields → Save → test event |
| D. Contacts without events | Key with contacts.write only → Copy /contacts curl (no destination required) |
Common problems
| Symptom | What to try |
|---|---|
| Events rejected | Add/activate a destination for that Event type |
| No Contact #N | Event did not resolve a contact — check field map / guest paths |
| Utility not sent | Template must be Approved Utility · key needs messages.send_template · check send_failed in the log |
| Lost API secret | Create key again; old secret cannot be revealed |
| Agent cannot open settings | Admin/manager only |
Related
- API Keys
- Event Destinations
- Contact Fields
- Create and Approve a WhatsApp Template
- Find Contacts
- Integrations — bot webhooks (different feature)