POST
Capture a raw WAHA webhook event

Authorizations

X-WAHA-SECRET
string
header
required

Query Parameters

userId
string
required

Body

application/json

Raw WAHA webhook envelope. It is intentionally flexible because WAHA can add event-specific top-level fields; stable fields are still documented here.

id
string
required

WAHA event ULID.

event
enum<string>
required
Available options:
session.status,
message,
message.reaction,
message.any,
message.ack,
message.ack.group,
message.waiting,
message.revoked,
message.edited,
state.change,
group.join,
group.leave,
group.v2.join,
group.v2.leave,
group.v2.update,
group.v2.participants,
presence.update,
poll.vote,
poll.vote.failed,
chat.archive,
call.received,
call.accepted,
call.rejected,
label.upsert,
label.deleted,
label.chat.added,
label.chat.deleted,
event.response,
event.response.failed,
engine.event
session
string
required
timestamp
integer<int64> | null

WAHA event creation timestamp in Unix milliseconds when present.

engine
enum<string> | null
Available options:
WEBJS,
WPP,
NOWEB,
GOWS
metadata
object | null

Free-form metadata sent by WAHA. Watchatic currently uses it only as raw evidence.

payload
object | null

Raw provider payload for the WAHA event. Common message, edit, revoke, session and group fields are documented; unknown WAHA fields are preserved.

environment
object | null

WAHA runtime environment details.

Response

Webhook accepted or duplicate accepted.

status
enum<string>
required
Available options:
accepted,
duplicate_accepted,
rejected,
conflict,
noop
event_ids
string<uuid>[]
required
request_id
string
required
resource_id
string | null