> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sideshift.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Status

> What the Connect status page measures, the JSON it publishes, and how to watch it.

SideShift publishes a public status page for Connect at
[app.sideshift.app/status/connect](https://app.sideshift.app/status/connect), with the
same data as JSON at
[app.sideshift.app/api/status/connect](https://app.sideshift.app/api/status/connect).
Neither needs a key. Check it before opening a support ticket: an active incident on the
component you are hitting answers the question faster than a ticket does.

## What is measured

A probe runs every two minutes and records one sample per component. Three kinds of
component are tracked.

| Component           | Source                 | How it is measured                                                                                                                                                                                                                                                 |
| ------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Connect API         | Synthetic request      | An authenticated read against `/api/embed/accounts`, or the unauthenticated `401` from `/api/embed/auth/token` when no probe key is configured. A `5xx`, timeout or unexpected response is `down`; the right answer served slowly is `degraded`.                   |
| Embedded widgets    | Synthetic request      | Loads the hosted payout widget demo page.                                                                                                                                                                                                                          |
| Hosted checkout     | Synthetic request      | Reads a hosted-checkout session that does not exist and expects a well-formed `404`, which proves the route and its data store answer.                                                                                                                             |
| Transfer settlement | Real traffic           | Live transfers over the last hour. `degraded` if any provider-bound transfer has been awaiting reconciliation for more than 15 minutes; otherwise driven by the failure rate once there are at least 5 transfers (20 percent is `degraded`, 50 percent is `down`). |
| Webhook delivery    | Real traffic           | Live deliveries over the last hour. Deliveries that got no response or a `5xx` count as failed; a `4xx` from your endpoint is your rejection and does not count against SideShift. Same thresholds as transfers.                                                   |
| Payment provider    | Provider's status feed | The payout and payment processor behind Connect, read from its own public status feed. Its `minor` maps to `degraded` and `major` or `critical` to `down`.                                                                                                         |

Each component is in one of four states: `operational`, `degraded`, `down`, or
`unknown` when it has not been measured yet or the probe itself could not run. The
product-level state is the worst component state, except that `unknown` only wins when
every component is unknown.

Sandbox traffic is excluded from the traffic-derived components.

## Uptime

The page shows 90 days of history per component. Uptime counts a probe as up unless the
component was `down`; degraded time is reported beside it rather than subtracted, because
a slow API still served every request. On the daily bar a day reads as `down` only when
the outage was real: at least ten minutes, or more than one probe in twenty. The
product-wide figure is the mean of the components that have any history.

## Incidents

Incidents open and resolve automatically from the probes: a component that is degraded or
down for two consecutive probes opens an incident, and one that is healthy for three
consecutive probes resolves it. SideShift staff can also open incidents by hand, post
updates, and announce maintenance windows ahead of time.

An incident has a `status` (`investigating`, `identified`, `monitoring`, `resolved`), an
`impact` (`minor`, `major`, `critical`, `maintenance`), the component ids it affects, and
a list of timestamped updates. The page lists active incidents, scheduled maintenance, and
incidents resolved in the last 30 days.

## The JSON

`GET https://app.sideshift.app/api/status/connect` returns the report the page renders.
It is public, sends `Access-Control-Allow-Origin: *`, and is cached for about a minute.

```json theme={"system"}
{
  "product": "connect",
  "name": "SideShift Connect",
  "description": "Embedded payments: accounts, transfers, widgets, hosted checkout and webhooks.",
  "overall": "operational",
  "updatedAt": "2026-09-05T12:00:00.000Z",
  "components": [
    {
      "id": "api",
      "name": "Connect API",
      "description": "Accounts, transfers, tokens and configuration endpoints under /api/embed.",
      "source": "probe",
      "state": "operational",
      "since": "2026-08-30T07:12:00.000Z",
      "consecutiveUnhealthy": 0,
      "consecutiveHealthy": 4320,
      "latencyMs": 412,
      "detail": "Responding in 412 ms"
    },
    {
      "id": "webhooks",
      "name": "Webhook delivery",
      "description": "Event delivery to integrator endpoints, measured from real traffic.",
      "source": "traffic",
      "state": "operational",
      "since": "2026-08-30T07:12:00.000Z",
      "consecutiveUnhealthy": 0,
      "consecutiveHealthy": 4320,
      "detail": "38 deliveries in the last hour, 0 undeliverable, 1 rejected by receivers",
      "metrics": { "total": 38, "failed": 0, "receiverRejected": 1 }
    }
  ],
  "uptime": {
    "windowDays": 90,
    "uptimePercent": 99.98,
    "components": [
      {
        "id": "api",
        "uptimePercent": 99.97,
        "days": [
          { "day": "2026-09-05", "state": "operational", "samples": 360, "downMinutes": 0, "degradedMinutes": 2, "avgLatencyMs": 398 }
        ]
      }
    ]
  },
  "activeIncidents": [],
  "recentIncidents": [
    {
      "id": "…",
      "product": "connect",
      "title": "Webhook delivery is degraded",
      "status": "resolved",
      "impact": "minor",
      "componentIds": ["webhooks"],
      "origin": "auto",
      "startedAt": "2026-09-01T03:14:00.000Z",
      "resolvedAt": "2026-09-01T03:24:00.000Z",
      "scheduledFor": null,
      "scheduledUntil": null,
      "updates": [
        { "at": "2026-09-01T03:16:00.000Z", "status": "investigating", "message": "…", "author": "system" },
        { "at": "2026-09-01T03:24:00.000Z", "status": "resolved", "message": "Recovered; the component has been healthy for several consecutive checks.", "author": "system" }
      ]
    }
  ],
  "scheduledMaintenance": []
}
```

Component ids are stable: `api`, `widgets`, `checkout`, `transfers`, `webhooks`,
`provider`. `latencyMs` is present on probed components only; `metrics` on
traffic-derived ones.

`GET https://app.sideshift.app/api/status` returns a one-line summary of every product
(`overall`, `activeIncidents`, `uptimePercent`), which is what an overview dashboard
should poll.

## Watching it

There is no email or RSS subscription today. To be alerted, poll the JSON from your own
monitoring on a one- to five-minute interval and alert on `overall` leaving
`operational`, or on `activeIncidents` becoming non-empty. The payload is small and
cached, so polling at that rate is fine.

The Scraper API has its own page at
[app.sideshift.app/status/scraper](https://app.sideshift.app/status/scraper) and JSON at
`/api/status/scraper`, with the same shape.
