Observer

Send your game's chat

If your community lives in your own game or platform, you don't need a plugin or an SDK. Observer ingests a generic event envelope over REST: one endpoint, one API key, JSON in. Your events go through the same screening pipeline as every first-party integration.

1. Create a custom server

In the dashboard: Servers → New server, pick In-game / custom, and name your platform (a slug like my-game). You get a per-server API key, prefix tkp_, shown once — store it like a password. Rotate it any time from the server page.

2. POST events

curl -X POST https://api.observer.gg/v1/ingest \
  -H "Authorization: Bearer tkp_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "occurred_at": "2026-07-06T18:04:12Z",
    "platform": "my-game",
    "event_type": "message",
    "audience": "public",
    "actor": { "platform_id": "user-12345", "display_name": "Alice" },
    "content": { "text": "hey everyone gg",
                 "attributes": { "channel_id": "global" } }
  }'

201 accepted means stored; screening runs asynchronously in the background and typically completes within seconds. Anything flagged appears in your moderation queue.

The three fields that matter most

  • content.text — the human-readable body to screen. Events without it (joins, presence) are stored but not screened.
  • id — a UUID you mint per event; it's the idempotency key. Set it and you can retry after any network blip without double-recording.
  • attributes.channel_id (a string) — unlocks the channel-aware features: per-channel monitoring, the conversation view around a flagged message, and channel-scoped AI batching.

Batching

POST /v1/ingest/batch takes up to 500 events per request. Rate limit is 1200 requests/minute per key (single and batch combined), so a busy game should batch. See the full API reference for envelope fields, response codes, and error semantics.

REST ingest is events-in today. Flagged content from a custom platform lands in your moderation queue for human action — Observer does not call back into your platform to enforce. Decision delivery for custom platforms (webhooks / polling) is on the roadmap.