Integrations
Route feedback to email, chat, your own services and issue trackers — as background jobs that never block a report.
Pinwren sends what happens in your workspace to the tools you already use:
SMTP for team notifications, invitations and replies to reporters.
Webhooks
Signed JSON to any HTTPS endpoint, with retries and a delivery log.
Slack
Cards with buttons, a /pinwren command and feedback from any message, or a plain incoming webhook.
Discord
Embeds in a channel through a Discord webhook.
Microsoft Teams
Adaptive Cards in a channel through a Teams workflow.
Telegram
Messages from your own bot in a group, channel or chat.
ntfy
Push notifications to phones and desktops through ntfy.sh or your own server.
GitHub
One issue per item, closed and reopened in both directions.
GitLab
The same, for gitlab.com and self-managed GitLab.
Linear
One Linear issue per item; completing it resolves the item.
Jira Cloud
One Jira issue per item, synced through Done (Enterprise).
Trello
One card per item; the done list resolves it.
Asana
One task per item; completing it resolves the item.
ClickUp
One task per item; a closed status resolves it.
Notion
A database as your tracker: one page per item.
Write an adapter
Connect another tracker to the same sync.
For everything else — an AI agent, your own dashboard — use webhooks, the REST API, panel actions or the MCP server.
How delivery works
Every change — a new report, a status change, an assignment, a comment — becomes an event in a queue (pg-boss on your Postgres; no Redis or broker). A background job fans it out to webhooks, issue trackers, in-app notifications and email, in that order, so a broken mail server never holds back a webhook.
- Nothing blocks ingest. The widget's request returns as soon as the report is stored; integrations run afterwards. A tracker or chat outage never loses or delays a report.
- Everything retries. Webhooks retry six times over about 21 hours; issue sync and email retry with backoff.
- Failures are visible. Each webhook has a delivery log with every attempt, its status code, error category and duration (never the receiver's response body); an issue tracker integration shows its last error. A webhook that keeps failing for three days is switched off, and every workspace Admin is notified in the bell and by email.
- Only public targets. Webhooks, chat channels and custom tracker URLs can't reach private or internal
addresses unless the operator allows them with
PINWREN_OUTBOUND_ALLOWLIST, and redirects are never followed. - Jobs run where you want. By default every server process also runs jobs. With several instances, run the
web servers with
PINWREN_ROLE=weband onePINWREN_ROLE=worker— see scaling.
Events
| Event | When |
|---|---|
feedback.created | A comment or bug report arrives |
feedback.updated | Status, priority, title, assignees, labels, due date or round |
feedback.status_changed | The status changes (sent alongside feedback.updated) |
feedback.assigned | The assignees change (sent alongside feedback.updated) |
feedback.priority_changed | The priority changes (sent alongside feedback.updated) |
feedback.labels_changed | Labels are added or removed (sent alongside feedback.updated) |
feedback.deleted | An item is moved to the trash |
feedback.regression_detected | A new bug report looks like a resolved item coming back |
comment.created | Someone comments — a visitor, a teammate or the API |
comment.updated | A comment is edited |
comment.deleted | A comment is deleted |
Webhooks and chat channels (Slack, Discord, Teams, Telegram, ntfy) subscribe to any of these, for every project or
for one. Each event has one id, shared by every endpoint and every retry, so receivers can de-duplicate on it.
Who can set them up
Webhooks, chat channels and issue trackers are configured by workspace Admins (Settings › Integrations and the project's Issue trackers tab). Admins and Editors can then send an item to a connected tracker from the inbox; Viewers can't. SMTP is set by the instance admin (the first account on the instance) under Settings › Email, or by environment variables.