Connectors

Paste a URL into the service. It wakes you from then on.

A connector is a URL somebody else's service posts to. What arrives is checked, matched against a rule, and turned into a notification on your phone, your watch and your Mac. There is no handler to write and no server of your own to keep running.

Connectors are on the Solo plan and above. See the plans.

What can Acciti connect to?

App Store, Stripe, GitHub, Provisore, Sentry, Grafana, Better Stack and Custom. Each kind carries a catalogue of the events it knows about, with a priority and a sentence already written for each.

Some of them arrive alerting. A monitor going down or an alert firing is worth a noise to anybody who connected it, so those ship switched on and the connector works before anybody opens the rules screen. A sale, a merged pull request and a finished deploy are not: those are listed and left off, and you pick.

Anything not on the list posts to the Custom kind, signed with an HMAC you configure, and you write the rules for what it sends.

How does Acciti know a webhook is genuine?

Most kinds verify a signature computed over the exact bytes of the body. A correct signature proves both that the sender holds the secret and that nothing changed in transit.

Grafana and Better Stack authenticate with a bearer secret in a header instead, because Alertmanager and most uptime monitors post a plain body and sign nothing. A bearer secret travels on every request, so anything that can read the request can replay it, and a body edited on the way cannot be detected. It is the weaker of the two, and it is what makes those tools connectable at all.

Apple is the third case. App Store Server Notifications are signed with a certificate chain rooting in Apple's CA, so there is no shared secret on either side and nothing to rotate.

App Store

Signed by Apple

Apple signs each notification with a certificate chain, so there is no secret on either side and nothing to leak or rotate. The first notification that verifies records your bundle id, and everything after it has to match.

Paste the ingest URL into App Store Connect as your production server URL.

Nothing on until you turn it on

Waiting to be turned on: SUBSCRIBED, DID_FAIL_TO_RENEW, EXPIRED, REFUND.

Stripe

Signed body

Stripe signs the exact bytes it sends with a shared secret. A correct signature proves both that it came from there and that nothing changed on the way.

Stripe-Signature

Stripe issues the secret and shows it once. Paste it back here.

Add the ingest URL as a webhook endpoint in Stripe, then paste Stripe's signing secret back here.

Nothing on until you turn it on

Waiting to be turned on: invoice.payment_failed, customer.subscription.deleted, checkout.session.completed, charge.dispute.created.

GitHub

Signed body

GitHub signs the exact bytes it sends with a shared secret. A correct signature proves both that it came from there and that nothing changed on the way.

X-Hub-Signature-256

Acciti issues the secret and shows it once. Paste it into GitHub.

Add the ingest URL as a repository webhook, with the secret shown here and content type application/json.

Nothing on until you turn it on

Waiting to be turned on: workflow_run, deployment_status, issues, pull_request.

Provisore

Signed body

Provisore signs the exact bytes it sends with a shared secret. A correct signature proves both that it came from there and that nothing changed on the way.

X-Provisore-Signature

Acciti issues the secret and shows it once. Paste it into Provisore.

In Provisore, add an Acciti notification channel with this ingest URL and the secret shown here.

Alerts on arrival

monitor.downAn uptime monitor is confirmed down.
Emergency
deployment.failedA deploy failed.
Emergency
restore.failedA restore from a backup failed.
Emergency
certificate.renewal_failedA certificate did not renew before its danger window.
High
backup.failedA scheduled or manual backup failed.
High
rollback.failedA rollback to an earlier release failed.
High
server.failedProvisioning a server failed.
High
alert.triggeredA server metric alert crossed its threshold.
High
certificate.expiringA certificate is inside its expiry warning window.
Normal
monitor.upAn uptime monitor recovered.
Quiet
alert.resolvedA metric alert cleared.
Quiet

Off until you turn it on: deployment.succeeded, server.provisioned.

Sentry

Signed body

Sentry signs the exact bytes it sends with a shared secret. A correct signature proves both that it came from there and that nothing changed on the way.

Sentry-Hook-Signature

Sentry issues the secret and shows it once. Paste it back here.

Create a Sentry internal integration with this webhook URL, then paste its client secret back here.

Alerts on arrival

error_alertA Sentry issue alert fired.
High
metric_alert.criticalA Sentry metric alert went critical.
Emergency
metric_alert.warningA Sentry metric alert crossed its warning threshold.
High
metric_alert.resolvedA Sentry metric alert cleared.
Quiet
issue.createdA new issue appeared.
Normal

Off until you turn it on: issue, issue, comment.

Grafana

Bearer secret

Grafana does not sign what it posts, so this connector authenticates on a secret in a header instead. That proves the sender knows the secret. It does not prove the body arrived unaltered, and anything that can read the request can replay it.

Authorization

Acciti issues the secret and shows it once. Paste it into Grafana.

Add a webhook contact point with this URL, bearer authentication, and the secret shown here as the token.

Alerts on arrival

alert.firingAn alert group is firing.
High
alert.resolvedAn alert group cleared.
Quiet

Better Stack

Bearer secret

Better Stack does not sign what it posts, so this connector authenticates on a secret in a header instead. That proves the sender knows the secret. It does not prove the body arrived unaltered, and anything that can read the request can replay it.

Authorization

Acciti issues the secret and shows it once. Paste it into Better Stack.

Add a webhook integration with this URL and an Authorization header of Bearer plus the secret shown here.

Alerts on arrival

incident.startedA monitor started an incident.
Emergency
incident.resolvedAn incident resolved.
Quiet

Off until you turn it on: incident, monitor.

Custom

Signed body

Custom signs the exact bytes it sends with a shared secret. A correct signature proves both that it came from there and that nothing changed on the way.

X-Acciti-Signature

Acciti issues the secret and shows it once. Paste it into Custom.

POST JSON to the ingest URL with an X-Acciti-Signature header of sha256= plus the hex HMAC-SHA256 of the body.

No catalogue, because the payload is yours. You name the event types you send and write a rule for each.

What does an event become?

A rule turns one event into one notification. It carries the priority, the title and the body, and it can name an escalation policy so an unanswered alert climbs to the next person on the rota. The defaults are per kind; everything about them is editable.

A rule, as the dashboard saves it
{  "eventType": "monitor.down",  "priority": 2,  "titleTemplate": "{{resource}} is down",  "bodyTemplate": "Provisore's monitor for {{resource}} is down as of {{timestamp}}.",  "escalation": "production"}

An event no rule matches is recorded and rings nobody. The dashboard lists the types a connector has actually received and has no rule for, which is a better prompt than a catalogue guessing at what you run.

Questions

What is a connector?
A URL you paste into another service. What that service posts is verified, matched against a rule, and turned into a notification on your devices. No handler, no relay, no server of your own.
How does Acciti verify an inbound webhook?
Most kinds verify a signature computed over the exact bytes of the body, which proves both who sent it and that nothing changed in transit. Grafana and Better Stack authenticate with a bearer secret in a header instead, because Alertmanager and uptime monitors sign nothing.
What happens to an event with no matching rule?
It is recorded and nothing rings. The dashboard lists the types this connector has actually received and has no rule for, which is a better prompt than a catalogue guessing at what you run.

Wire one up.

Sign in, add a connector, paste the URL into the service, and the next thing it has to say arrives on your phone.

Make a connector

A sound when it matters.

Not when it does not. One request in, one notification on your phone, your watch and your Mac.

© 2026 Acciti

iPhone, Apple Watch and Mac

Built on Swift, Postgres and APNs.