Documentation

Getting Started

  1. Sign in — Go to /app/login and sign in with Slack.
  2. Create your organization — Pick a name and URL slug (used in Slack commands).
  3. Connect Slack — From Settings, click "Connect Slack" to install the Yawpr bot in your workspace.
  4. Create a team — Teams map to your engineering squads (e.g. "backend", "infra", "mobile").
  5. Add members — Add their Slack user ID and/or ntfy topic so they receive notifications.

Slack Bot

Slash Command

Trigger incidents from any Slack channel:

/yawp fire @backend Database is down

Format: /yawp <severity> @<team-slug> <title>

Severity levels: fire (critical), warning, info

Interactive Buttons

When an incident notification is sent via Slack DM, it includes Acknowledge and Resolve buttons. Clicking them updates the incident status and logs who took the action.

Teams & Members

Each team has a slug used in Slack commands (e.g. @backend). Members need at least one notification channel configured:

  • Slack User ID — For Slack DMs. Find it in Slack: click a user's profile → More → Copy member ID.
  • ntfy Topic — For push notifications via ntfy.sh. Fire-severity alerts bypass Do Not Disturb.

On-Call Schedules

Create time-based schedules to designate who is on-call for each team. The dashboard shows the current on-call person per team. Schedules use start/end datetime ranges.

Webhook Ingestion

Create webhook sources from the Webhooks page. Each source gets a unique ingest URL:

POST https://yawpr.dev/webhooks/<source-id>/ingest

Supported Formats

CloudWatch (via SNS)
Point an SNS topic at the ingest URL. Yawpr auto-confirms the subscription and parses alarm name, state, and metric.
Datadog
Configure a Datadog webhook integration. Yawpr extracts event title, body, and maps priority to severity.
Generic
Send JSON with title (required), severity (fire/warning/info), and description (optional).

Authentication

Each webhook source has a shared secret. Include an HMAC-SHA256 signature in the X-Signature-256 header (with optional sha256= prefix). The secret is shown when you create the source.

API Reference

All API routes require authentication (session cookie from Slack sign-in) and are scoped to your active organization.

MethodPathDescription
GET/api/incidentsList incidents (filter: ?status=active&teamId=...)
GET/api/incidents/:idGet incident detail
POST/api/incidentsCreate incident
POST/api/incidents/:id/acknowledgeAcknowledge
POST/api/incidents/:id/resolveResolve
POST/api/incidents/:id/commentAdd comment
GET/api/teamsList teams
POST/api/teamsCreate team
GET/api/teams/:id/membersList members
POST/api/teams/:id/membersAdd member
GET/api/schedules/team/:teamIdList schedules
GET/api/schedules/team/:teamId/currentCurrent on-call
POST/api/schedulesCreate schedule