Skip to main contentSkip to navigation

Integrations

Console connects the account. This is what each product does with it.

Connections

One ConnectionCard each. Status, health and expiry are resolved into a single verdict — reading any one field alone puts a green badge on a connection that stopped working.

WordPress · steigerwald-news.de

Connected and working.

usableconnected

Data is stored in eu-central-1.

  • posts:write
  • media:write

WordPress · archive.steigerwald-news.de

Connected and working.

usableconnected
  • posts:read
  • posts:write — not granted

Reconnect in Console to grant this scope. Scopes are granted at the provider, so nothing here can add them.

GitHub · acme-gmbh

Updates from the provider are not arriving. Data may be out of date.

degradedconnected
  • repo:read
  • repo:write

Webhooks: 7 delivered, 1 retrying, 2 dead-lettered — updates from the provider may be missing.

Stripe · acct_1QxAcme

Access was revoked at the provider. Reconnect to restore it.

unusablerevoked

Data is stored in us-east-1.

  • charges:read

Slack · acme.slack.com

This connection expires in 6 days. Reconnect before then.

degradedconnected
  • chat:write

A gated surface

Publishing needs a WordPress connection with posts:write, shared with LD3. The panel below is the real §13 resolver's answer.

Publishing is available. The connection is healthy and carries every required scope.

No product writes its own “connect WordPress first” panel — an unusable connection becomes missing_connection, which every gated surface already knows how to render.

Connection picker

An unusable connection is listed and disabled, never hidden — a customer who cannot see that the one they expected is broken has no way to fix it.

Connections that cannot be used are shown but not selectable, so a connection you expected to find is never simply missing.

Binding allowed. LD3 may publish through this connection.

A provider with no connection at all

ConnectionRequiredState distinguishes 'never connected' from 'connected and broken' — one 'connect this' message for both sends someone to set up a connection they already have.

Cloudflare is not connected

Managing DNS zones needs a Cloudflare connection. Connections are made in Console, where the credentials stay.

Connect Cloudflare

Stripe is not working

Access was revoked at the provider. Reconnect to restore it.

Fix it in Console

Webhook delivery

A retry is not a failure — retrying usually works. A dead letter is: an event was dropped, and anything derived from it is wrong in a way no refresh fixes.

7 delivered1 retrying2 dead-lettereddegraded

2 of 10 recent updates were dropped. Some data may be out of date.

Duplicate event ids: evt_d1. Surfaced rather than silently collapsed — a provider redelivering the same id usually means our acknowledgement is not reaching it.

Deliveries are failing badly enough that data from this provider may be out of date.

Webhook delivery history
ReceivedEventStateAttempts
8/3/2026, 10:00:00 AMevt_2delivered1
8/3/2026, 10:00:00 AMevt_5delivered1
8/2/2026, 9:00:00 PMevt_d1dead_letter8
8/2/2026, 8:00:00 PMevt_d1dead_letter8
8/2/2026, 7:00:00 PMevt_rretrying3
8/2/2026, 10:00:00 AMevt_1delivered1
8/2/2026, 10:00:00 AMevt_4delivered1
8/1/2026, 10:00:00 AMevt_0delivered1
8/1/2026, 10:00:00 AMevt_3delivered1
8/1/2026, 10:00:00 AMevt_6delivered1

Secret containment

SoT §26.2 — secrets are never returned to the frontend.

no credential-shaped keys

`assertNoSecrets` walks the payload for credential-shaped keys — refresh_token, clientSecret, apiKey and friends. That turns a backend promise into something a test can fail on: a regression that started including a token would be caught here rather than in a breach report.