Documentation
Getting Started
- Sign in — Go to /app/login and sign in with Slack.
- Create your organization — Pick a name and URL slug (used in Slack commands).
- Connect Slack — From Settings, click "Connect Slack" to install the Yawpr bot in your workspace.
- Create a team — Teams map to your engineering squads (e.g. "backend", "infra", "mobile").
- 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 downFormat: /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>/ingestSupported 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), anddescription(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.
| Method | Path | Description |
|---|---|---|
| GET | /api/incidents | List incidents (filter: ?status=active&teamId=...) |
| GET | /api/incidents/:id | Get incident detail |
| POST | /api/incidents | Create incident |
| POST | /api/incidents/:id/acknowledge | Acknowledge |
| POST | /api/incidents/:id/resolve | Resolve |
| POST | /api/incidents/:id/comment | Add comment |
| GET | /api/teams | List teams |
| POST | /api/teams | Create team |
| GET | /api/teams/:id/members | List members |
| POST | /api/teams/:id/members | Add member |
| GET | /api/schedules/team/:teamId | List schedules |
| GET | /api/schedules/team/:teamId/current | Current on-call |
| POST | /api/schedules | Create schedule |