Overview#
Pluggy's status page at status.pluggy.ai shows the live health of every connector, payment product and infrastructure component, plus incident history. Everything the page renders is public JSON you can consume directly — no authentication required, no API key.
Three endpoints, from largest to smallest:
| Endpoint | Use it when |
|---|---|
/api/status | You want everything: connectors, 90 days of history, every incident with its timeline |
/api/connectors-incidents | You only want what is broken right now, keyed by connector id |
/api/summary | You only want one overall status, for a badge or a health check |
If you already call GET /connectors, you may not need any of them — see On the connector object.
If you just want notifications, you don't need this API: subscribe by email on the status page, add the Pluggy Status Slack app to a channel, or use the RSS feed.
The snapshot endpoint#
GET https://status.pluggy.ai/api/status
- No authentication. CORS is open, so you can call it from a browser app.
- Cached for ~30 seconds. Poll at 60 seconds or slower — faster polling only re-reads the cache.
The response contains four collections:
| Field | What it holds |
|---|---|
institutions | Every connector with its current status, 90-day history and product support flags |
incidents | Open incidents and everything resolved in the last 90 days, with their update timelines |
components | Infrastructure components (API, Webhooks, Connect Widget, …) and their current status |
productStatus | Manual per-institution status overrides for payment products |
Institutions#
{
"pluggy_id": "601",
"name": "Itaú",
"type": "PERSONAL_BANK",
"logo_url": "https://cdn.pluggy.ai/assets/connector-icons/201.svg",
"status": "online",
"bars": "ooooooo…dxo",
"uptime": 99.51,
"supports_data": true,
"supports_pis": true,
"supports_pis_scheduled": true,
"supports_pix_auto": true,
"supports_smart_transfer": true
}pluggy_idis the same connectoridyou use everywhere else in the Pluggy API — match on it directly.statusis one ofonline,degraded,offline,maintenance.barsencodes the last 90 days as one character per day, oldest first:oonline,ddegraded,ppartial outage,xoffline,mmaintenance.uptimeis a weighted 90-day percentage (degraded days count 25% downtime, partial 50%, offline 100%).- The
supports_*flags tell you which products the institution offers (data, payment initiation, scheduled payments, automatic PIX, smart transfers).
Example — check one connector's health:
curl -s https://status.pluggy.ai/api/status \
| jq '.institutions[] | select(.pluggy_id == "601") | {name, status, uptime}'Incidents#
{
"id": "4a8f1e80-…",
"kind": "incident",
"product": "pis",
"pluggy_id": "612",
"institution_name": "PagBank",
"severity": "degraded",
"state": "identified",
"apis": ["Criação de pagamento"],
"started_at": "2026-07-07T14:28:21Z",
"resolved_at": null,
"postmortem": null,
"updates": [{ "state": "identified", "body": "…", "created_at": "…" }]
}- An incident is open while
state != "resolved". productis one ofdados,pis,pis-agendado,pixauto,smart,infra(legacy incidents may carrypagamentos, which maps topis).kindisincidentormaintenance; maintenances carrywindow_starts_at/window_ends_at.- Connector-scoped incidents include
pluggy_id, so you can join them against your own connector list. - Every incident has a shareable page at
https://status.pluggy.ai/incident/<id>.
Example — open incidents affecting a connector you use:
curl -s https://status.pluggy.ai/api/status \
| jq '.incidents[] | select(.state != "resolved" and .pluggy_id == "612") | {title, state, severity}'Active incidents by connector#
The snapshot carries everything, which makes it large. If all you want is "what is wrong with each connector right now" — to flag an affected bank on your own connector-selection screen before a user picks it — poll this instead. It is a few kilobytes rather than a few hundred, because it carries no history, no resolved incidents and no timelines.
GET https://status.pluggy.ai/api/connectors-incidents
{
"generatedAt": "2026-09-05T10:11:25.059Z",
"connectors": {
"602": [
{
"id": "78624c2c-bf55-466a-ba99-6b57e9bd9223",
"title": "XP Banking - Compras parceladas não sendo retornadas",
"description": null,
"type": "TRANSACTIONS_INSTALLMENTS_ISSUE",
"product": "dados",
"kind": "INCIDENT",
"severity": "DEGRADED",
"state": "IDENTIFIED",
"startedAt": "2026-07-23T13:40:41Z",
"updatedAt": "2026-08-18T16:30:09Z",
"url": "https://status.pluggy.ai/incident/78624c2c-bf55-466a-ba99-6b57e9bd9223"
}
]
}
}Keys are the same connector id you get from GET https://api.pluggy.ai/connectors, so joining is a lookup. Only connectors with at least one active incident appear, and each list is ordered worst-first.
Only incidents affecting a connector at this moment are listed. A scheduled maintenance is published days ahead but appears here only once its window opens, and disappears when it closes. An incident affecting several institutions appears under each of their connector ids. Infrastructure-wide incidents belong to no connector and are not listed here — use the snapshot for those.
The type field#
severity says how bad it is and state says how far along we are. type says what is broken, which is the part you cannot infer from anything else:
| Group | Values |
|---|---|
| Availability | CONNECTOR_UNAVAILABLE, CONNECTOR_DEGRADED, INSTITUTION_OUTAGE, SCHEDULED_MAINTENANCE |
| Connection lifecycle | CONSENT_ERROR, CONNECTION_NOT_UPDATING, PARTIAL_SUCCESS |
| Data quality | ACCOUNTS_MISSING, BALANCE_INCORRECT, TRANSACTIONS_MISSING, TRANSACTIONS_INCORRECT, TRANSACTIONS_INSTALLMENTS_ISSUE, INVESTMENTS_MISSING, INVESTMENTS_INCORRECT, IDENTITY_MISSING, HISTORICAL_DATA_MISSING |
| Pluggy platform | WEBHOOK_DELAY, PAYMENT_FAILURE |
| Unclassified | OTHER |
Use it to group the same problem across institutions, and to decide which incidents are worth putting in front of a user: a SCHEDULED_MAINTENANCE and a TRANSACTIONS_MISSING both read as "degraded" otherwise. OTHER means Pluggy has not classified the incident, not that nothing is wrong.
On the connector object#
You do not have to call the status API at all. The same incidents ride on the health object of every connector returned by GET /connectors, so a listing you already make carries them:
{
"id": 602,
"name": "XP Banking",
"health": {
"status": "ONLINE",
"stage": null,
"incidents": [
{
"title": "XP Banking - Compras parceladas não sendo retornadas",
"type": "TRANSACTIONS_INSTALLMENTS_ISSUE",
"product": "dados",
"severity": "DEGRADED",
"state": "IDENTIFIED",
"url": "https://status.pluggy.ai/incident/78624c2c-…"
}
]
}
}health.incidents is absent when the connector has no active incident, so its presence is the signal itself.
Two different questions
Note the status: "ONLINE" in that example. health.status answers can I connect at all; health.incidents answers what is wrong. A bank can be perfectly reachable and still be failing to return instalments, and only the second field can tell you that. They are different questions — read both.
health.details is a third, unrelated thing: request it with ?healthDetails=true and it describes how your own connections to that institution have been doing, rather than the institution itself.
Embeddable widget#
Show Pluggy's live status inside your own app or internal dashboard.
Floating badge — one script tag, renders a small pill (status dot + label) in the corner of the page, linking to the status page. Refreshes every 60 seconds.
<script
src="https://status.pluggy.ai/widget.js"
defer
data-lang="en"
data-position="bottom-right"
></script>data-lang:pt(default),esoren.data-position:bottom-right(default) orbottom-left.data-target: a CSS selector — renders the badge inline inside that element instead of floating.
Iframe panel — a compact panel with overall status, infrastructure components and open incidents:
<iframe
src="https://status.pluggy.ai/embed?lang=en"
width="360"
height="240"
style="border: 0"
title="Pluggy Status"
></iframe>Summary endpoint — both are backed by a tiny JSON summary you can also consume directly (CORS open, cached ~30s). \/api\/widget serves the same body and keeps working for embeds already pointing at it:
GET https://status.pluggy.ai/api/summary
{
"status": "op",
"labels": { "pt": "…", "es": "…", "en": "All systems operational" },
"openIncidents": 0,
"updatedAt": "2026-07-10T12:00:00.000Z"
}status is op (operational), mn (maintenance), dg (degraded), pt (partial outage) or mj (major outage) — the worst across connectors, payment products and infrastructure.
Other channels#
| Channel | How |
|---|---|
| Subscribe on the status page — pick specific products or everything; double opt-in, one-click unsubscribe | |
| Slack | Install the Pluggy Status app from the page's subscribe dialog, or invite @Pluggy Status to a channel and enable it |
| RSS | https://status.pluggy.ai/rss — last 50 incidents with their timelines |
| Webhooks | For connector status changes affecting your items, prefer the standard Pluggy webhooks (connector/status_updated) |
