Outbound
Events Hijinks sends to your bridge. Every one is a signed POST to the one bridge URL you set in the dashboard; the type field in the body says which event it is. Answer any 2xx within 5 seconds.
Post a message to a channel
Post message in channel and remember the mapping from
message.id to your chat's own message id: a later
message.update names the same message.id.
Retried at +1 s and +4 s when the bridge does not answer 2xx within
5 seconds, then dropped. A retry carries the same id.
Headers
Hijinks-Signature^t=\d+(,v1=[0-9a-fA-… · requiredt=<unix seconds>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>.
Several v1= entries are allowed; any one matching is enough.
Hijinks-Event-Id^evt_[0-9A-HJKMNP-TV… · requiredThe envelope's id. Unchanged across retries; dedupe on it.
Unique per event and unchanged across its retries; dedupe on it.
Hijinks-WorkspaceThe envelope's workspace, for routing before the body is parsed.
The Hijinks workspace, as shown in the dashboard.
Post a message to a channel › Request Body
id^evt_[0-9A-HJKMNP-TV… · requiredUnique per event and unchanged across its retries; dedupe on it.
typeworkspaceThe Hijinks workspace, as shown in the dashboard.
sequenceStrictly increasing per workspace, so events that arrive out of order
can be put back in order (an older message.update than one already
applied can be skipped). Not contiguous. Taken from Hijinks' clock in
microseconds, so it keeps increasing across Hijinks restarts and
deploys. Below 2^53, so it fits a JSON number in every language.
createdAtWhen Hijinks created the event (ISO 8601, UTC).
expiresAtWhen the event goes stale (ISO 8601, UTC): past it, drop the event
unapplied. 60 seconds after createdAt for message.ephemeral and
ping; 10 minutes for a live game's messages and the answers to
commands; null — never stale — for prompts and results that stay
valid for hours (self-paced rounds, word games with their own end,
icebreakers, digests). Compare it with your own clock.
channelA channel id your bridge sent in an inbound event — or dm:<user id>
on a message.update of a message first sent by dm.create.
Post a message to a channel › Responses
Delivered. Any other answer, or none within 5 seconds, is a failure.
Replace a message Hijinks created
Replace the text, buttons and image of the message you posted for
message.id. channel is the channel of the original
message.create — or dm:<user id> when the original was a
dm.create.
A live game keeps one message: the game_start card is created, and
every question, answer count, reveal and the final board arrive as
updates of it. So an update can be the only copy of a question —
handle kind: question here, not only on create.
An update that starts a phase (question, gotcha_bait,
gotcha_reveal, time_up, game_end) is retried at +1 s and +4 s
like a create, with the same id. Any other update (an answer count, a
tally) is never retried: the next one supersedes it. Apply updates in
sequence order, skipping one older than the last you applied. An
update for an id you have not mapped may have overtaken its create's
retry: hold it for up to 5 seconds, then ignore it (its create was
dropped).
Headers
Hijinks-Signature^t=\d+(,v1=[0-9a-fA-… · requiredt=<unix seconds>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>.
Several v1= entries are allowed; any one matching is enough.
Hijinks-Event-Id^evt_[0-9A-HJKMNP-TV… · requiredThe envelope's id. Unchanged across retries; dedupe on it.
Unique per event and unchanged across its retries; dedupe on it.
Hijinks-WorkspaceThe envelope's workspace, for routing before the body is parsed.
The Hijinks workspace, as shown in the dashboard.
Replace a message Hijinks created › Request Body
id^evt_[0-9A-HJKMNP-TV… · requiredUnique per event and unchanged across its retries; dedupe on it.
typeworkspaceThe Hijinks workspace, as shown in the dashboard.
sequenceStrictly increasing per workspace, so events that arrive out of order
can be put back in order (an older message.update than one already
applied can be skipped). Not contiguous. Taken from Hijinks' clock in
microseconds, so it keeps increasing across Hijinks restarts and
deploys. Below 2^53, so it fits a JSON number in every language.
createdAtWhen Hijinks created the event (ISO 8601, UTC).
expiresAtWhen the event goes stale (ISO 8601, UTC): past it, drop the event
unapplied. 60 seconds after createdAt for message.ephemeral and
ping; 10 minutes for a live game's messages and the answers to
commands; null — never stale — for prompts and results that stay
valid for hours (self-paced rounds, word games with their own end,
icebreakers, digests). Compare it with your own clock.
channelA channel id your bridge sent in an inbound event — or dm:<user id>
on a message.update of a message first sent by dm.create.
Replace a message Hijinks created › Responses
Delivered.
Reply that only one member should see
A reply to the member who ran a command (help, settings, a
leaderboard) or pressed a button — or a note for one member alone
that no request asked for: their recap when a game ends, whether
their guess-who guess was right. Show it to user alone in
channel if your chat can; otherwise DM it, or post it.
message.id is minted for the reply but never updated.
Retried at +1 s and +4 s, then dropped.
Headers
Hijinks-Signature^t=\d+(,v1=[0-9a-fA-… · requiredt=<unix seconds>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>.
Several v1= entries are allowed; any one matching is enough.
Hijinks-Event-Id^evt_[0-9A-HJKMNP-TV… · requiredThe envelope's id. Unchanged across retries; dedupe on it.
Unique per event and unchanged across its retries; dedupe on it.
Hijinks-WorkspaceThe envelope's workspace, for routing before the body is parsed.
The Hijinks workspace, as shown in the dashboard.
Reply that only one member should see › Request Body
id^evt_[0-9A-HJKMNP-TV… · requiredUnique per event and unchanged across its retries; dedupe on it.
typeworkspaceThe Hijinks workspace, as shown in the dashboard.
sequenceStrictly increasing per workspace, so events that arrive out of order
can be put back in order (an older message.update than one already
applied can be skipped). Not contiguous. Taken from Hijinks' clock in
microseconds, so it keeps increasing across Hijinks restarts and
deploys. Below 2^53, so it fits a JSON number in every language.
createdAtWhen Hijinks created the event (ISO 8601, UTC).
expiresAtWhen the event goes stale (ISO 8601, UTC): past it, drop the event
unapplied. 60 seconds after createdAt for message.ephemeral and
ping; 10 minutes for a live game's messages and the answers to
commands; null — never stale — for prompts and results that stay
valid for hours (self-paced rounds, word games with their own end,
icebreakers, digests). Compare it with your own clock.
channelA channel id your bridge sent in an inbound event — or dm:<user id>
on a message.update of a message first sent by dm.create.
userA member's user.id, as your bridge sent it.
Reply that only one member should see › Responses
Delivered.
Send a member a private message
Open (or reuse) a direct conversation with user and post message
there: async rounds, Know Your Team prompts, reminders. Map
message.id as for message.create; a later message.update for
it arrives with channel: "dm:<user id>". Send button presses and
typed messages in the DM back as action and message events with
that same channel: "dm:<user id>" (the member's own user.id), so
Hijinks knows they came from the DM: replies go back to the DM, and a
typed message there answers the prompt waiting in it, with or without
replyTo.
Retried at +1 s and +4 s, then dropped.
Headers
Hijinks-Signature^t=\d+(,v1=[0-9a-fA-… · requiredt=<unix seconds>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>.
Several v1= entries are allowed; any one matching is enough.
Hijinks-Event-Id^evt_[0-9A-HJKMNP-TV… · requiredThe envelope's id. Unchanged across retries; dedupe on it.
Unique per event and unchanged across its retries; dedupe on it.
Hijinks-WorkspaceThe envelope's workspace, for routing before the body is parsed.
The Hijinks workspace, as shown in the dashboard.
Send a member a private message › Request Body
id^evt_[0-9A-HJKMNP-TV… · requiredUnique per event and unchanged across its retries; dedupe on it.
typeworkspaceThe Hijinks workspace, as shown in the dashboard.
sequenceStrictly increasing per workspace, so events that arrive out of order
can be put back in order (an older message.update than one already
applied can be skipped). Not contiguous. Taken from Hijinks' clock in
microseconds, so it keeps increasing across Hijinks restarts and
deploys. Below 2^53, so it fits a JSON number in every language.
createdAtWhen Hijinks created the event (ISO 8601, UTC).
expiresAtWhen the event goes stale (ISO 8601, UTC): past it, drop the event
unapplied. 60 seconds after createdAt for message.ephemeral and
ping; 10 minutes for a live game's messages and the answers to
commands; null — never stale — for prompts and results that stay
valid for hours (self-paced rounds, word games with their own end,
icebreakers, digests). Compare it with your own clock.
userA member's user.id, as your bridge sent it.
Send a member a private message › Responses
Delivered.
Test event
Sent when someone presses "Send test event" in the dashboard. Answer 2xx; the dashboard shows the status code and latency. Never retried.
Headers
Hijinks-Signature^t=\d+(,v1=[0-9a-fA-… · requiredt=<unix seconds>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>.
Several v1= entries are allowed; any one matching is enough.
Hijinks-Event-Id^evt_[0-9A-HJKMNP-TV… · requiredThe envelope's id. Unchanged across retries; dedupe on it.
Unique per event and unchanged across its retries; dedupe on it.
Hijinks-WorkspaceThe envelope's workspace, for routing before the body is parsed.
The Hijinks workspace, as shown in the dashboard.
Test event › Request Body
id^evt_[0-9A-HJKMNP-TV… · requiredUnique per event and unchanged across its retries; dedupe on it.
typeworkspaceThe Hijinks workspace, as shown in the dashboard.
sequenceStrictly increasing per workspace, so events that arrive out of order
can be put back in order (an older message.update than one already
applied can be skipped). Not contiguous. Taken from Hijinks' clock in
microseconds, so it keeps increasing across Hijinks restarts and
deploys. Below 2^53, so it fits a JSON number in every language.
createdAtWhen Hijinks created the event (ISO 8601, UTC).
expiresAtWhen the event goes stale (ISO 8601, UTC): past it, drop the event
unapplied. 60 seconds after createdAt for message.ephemeral and
ping; 10 minutes for a live game's messages and the answers to
commands; null — never stale — for prompts and results that stay
valid for hours (self-paced rounds, word games with their own end,
icebreakers, digests). Compare it with your own clock.
Test event › Responses
Reachable.