Here Not There Labs · AsyncAPI Specification

Here Not There Labs Bot Events

Version

View Spec View on GitHub CompanyMessagingDecentralizedWeb3BlockchainProtocolChatBotsEncryptionSDKAsyncAPIEvents

AsyncAPI Specification

here-not-there-labs-bot-events.yml Raw ↑
generated: '2026-07-19'
method: searched
source: >-
  docs.towns.com/build/bots/events + getting-started + protocol/apps.proto
  (AppRegistryService.RegisterWebhook). Towns Protocol bot/app webhook event
  catalog. This is a webhook (server-push) surface, not a published AsyncAPI
  document; captured as a Webhooks catalog.
type: Webhooks
provider: Here Not There Labs
product: Towns Protocol
transport:
  style: webhook
  description: >-
    Towns servers deliver events to a bot's registered webhook URL. The bot's
    webhook URL is registered via the developer portal (app.towns.com/developer)
    and, at the protocol level, via AppRegistryService.RegisterWebhook.
  verification: >-
    Incoming webhook requests are verified using the bot's JWT_SECRET (issued at
    bot creation). The bot decrypts message content using its APP_PRIVATE_DATA
    encryption device.
  forwarding_modes:
  - name: All Messages
    description: Bot receives every event in channels it is in; enables onTip, onChannelJoin, onChannelLeave, onEventRevoke.
  - name: Mentions, Commands, Replies & Reactions
    default: true
    description: Bot receives mentions, replies to its messages, reactions, and slash commands.
  - name: No Messages
    description: Bot receives no message events; for external-only bots driven by custom webhooks or timers.
base_payload:
  description: All events share a common BasePayload structure.
  fields:
  - name: userId
    description: The user who triggered the event.
  - name: spaceId
    description: The space the event occurred in (null for DM channels).
  - name: channelId
    description: The channel the event occurred in.
  - name: eventId
    description: The unique event ID.
  - name: createdAt
    description: The date and time the event occurred.
  - name: isDm
    description: Flag indicating whether the event occurred in a DM channel.
events:
- handler: onMessage
  description: Fires when a message is sent in a channel the bot is in.
  fields: [message, replyId, threadId, mentions, isMentioned]
- handler: onSlashCommand
  description: Fires when a user invokes one of the bot's slash commands.
  fields: [command, args, mentions]
- handler: onReaction
  description: Fires when a reaction is added.
- handler: onMessageEdit
  description: Fires when a message is edited.
- handler: onRedaction
  description: Fires when a message is redacted/deleted.
- handler: onReply
  description: Fires when a user replies to one of the bot's messages.
- handler: onTip
  description: Fires when a tip is sent (requires All Messages forwarding mode).
- handler: onChannelJoin
  description: Fires when a user joins a channel (requires All Messages forwarding mode).
- handler: onChannelLeave
  description: Fires when a user leaves a channel (requires All Messages forwarding mode).
- handler: onEventRevoke
  description: Fires when an event is revoked (requires All Messages forwarding mode).
docs: https://docs.towns.com/build/bots/events

Work with this as data

Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/here-not-there-labs-bot-events"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.