Skip to content

ConnectPSP API (2.2.0)

ConnectPSP is a PIX payment gateway designed for high-throughput platforms such as digital wallets, betting companies, and fintechs.

This API allows you to:

  • 💸 Receive payments via PIX (Cash-In) — standard QR Code or OpenFinance
  • 🏦 Send payments via PIX key or bank account data (Cash-Out)
  • 📊 Manage your wallet — check consolidated balances and rebalance between transactional and proprietary accounts
  • 🪝 Receive real-time events via Webhooks as transactions progress

Authentication

All endpoints (except POST /auth/token) require two headers:

HeaderDescription
AuthorizationBearer <jwt_token> — obtained from POST /auth/token
ApplicationTokenFixed GUID token that identifies your integration

For financial operations (Cash-Out, Rebalance), an additional header is required:

HeaderDescription
DigitalSignatureHMAC-SHA256 hash of your JWT + CryptoToken. See Authentication Guide

Idempotency

X-Idempotency-Key is optional on POST /cash-in and POST /cash-out, and recommended (a UUID v4 per operation). With it, a network retry returns the original response instead of creating a second transaction. Without it, the request is processed normally and externalReference still blocks duplicates with 409 DUPLICATED_EXTERNAL_REFERENCE. See the Authentication Guide for the full rules.

Recommended integration order

PhaseWhat to confirm first
SetupCredentials, environment, headers, and webhook readiness in Initial Setup
AuthenticationJWT generation and DigitalSignature rules in the Authentication Guide
TransactionsYour first Cash-In or Cash-Out flow with idempotency and webhook validation
Download OpenAPI description
Overview
ConnectPSP Support
Languages
Servers
Staging Environment (Testing)
https://api.homologacao.connectpsp.com

Obtain JWT tokens to authenticate all other requests.

Operations

Generate and manage inbound PIX payments. Supports standard QR Code and OpenFinance flows.

Operations

Request and track outbound PIX payments to any Brazilian bank account.

Operations

View consolidated wallet balances across all settlement partners and manage rebalancing between transactional and proprietary accounts.

Operations

PIX Health tells you whether PIX is working for you right now, and who is at fault when it is not.

A statistical engine compares every 5-minute window of your PIX traffic with what is normal for that weekday and time over the last four weeks, and attributes any clear deviation to the platform, to a settlement partner, to a payer bank or to your own operation — always scoped to what you actually use.

Three endpoints, all read-only and all safe to poll once a minute:

EndpointUse it for
GET /health/pixThe picture of the moment: status per block plus the incidents open right now
GET /health/pix/incidentsHistory of confirmed incidents, paginated
GET /health/pix/incidents/{id}One incident with the evidence behind the verdict

None of them require DigitalSignature or X-Idempotency-Key — only Authorization and ApplicationToken.

Confirmed incidents are also pushed as webhooks (PIX_INCIDENT_DETECTED / UPDATED / RESOLVED), so you do not have to poll to be warned; see the Webhooks guide.

Operations

Request

Returns the current picture of the PIX network as it affects your operation, in four blocks: platform (ConnectPSP), partners (the settlement partners you route through), banks (the banks your payers pay from and your payees receive at) and merchant (your own operation). Each block has a cashIn and a cashOut side with a health status and the verdict of every metric behind it — plus the confirmed incidents open right now.

The picture is produced every minute by our detection engine, which compares every metric of every 5-minute window with what is normal for that weekday and time of day over the last four weeks. Only a statistically clear deviation becomes an anomaly; the size of the drop sets the severity. It is cached for 60 seconds on our side, so polling once a minute is safe.

Scoped to you

You only see what is in your scope. A partner you do not route through does not appear, and overallStatus is computed from your partners only: if a partner you do not use is degraded, your overall status stays HEALTHY. Banks appear only when your payers or payees use them. No platform volumes or other clients' data are ever included — only statuses and verdicts.

Reading the statuses

StatusMeaning
HEALTHYWithin the normal range for this weekday and time
DEGRADEDClearly worse, still working (for example, a 20 % drop in payments)
SEVERELY_DEGRADEDMuch worse — half or more of what should be happening is not
UNAVAILABLEPractically stopped
UNKNOWNNot enough sample in this window to say anything — not a failure
ROUTED_AWAYA partner with no traffic because volume was routed elsewhere — unknown, not down

overallStatus is the worst of the ConnectPSP platform and your settlement partners, plus any confirmed incident on them. Payer banks and your own operation never downgrade it.

UNKNOWN is not a failure

It is the single most misread value here, so to be explicit: UNKNOWN means the engine does not have enough evidence to judge, never that something is wrong.

Every verdict is a comparison against what is normal for that entity, on that weekday, at that time of day. Two things produce UNKNOWN:

  • Too few operations in the window. Common on a quiet bank overnight, or on a low-volume one at any hour. Nothing is broken — there is simply not enough to measure.
  • No baseline yet. The engine needs about four weeks of history for an entity before it can say what "normal" looks like. A bank it started watching recently reads UNKNOWN until that history builds up.

Our own screens label this state "Calibrando" (calibrating) rather than "unknown", for the same reason. Treat it as "no reading", not as a red flag — and never as an outage.

Signals

Every cashIn / cashOut carries signals: the metric name and its verdict — NORMAL, LOW (below expected), HIGH (above expected) or UNKNOWN (no sample). For counts and success rates LOW is the bad side; for error rates and latencies HIGH is the bad side.

Two different clocks

Do not confuse the two age fields — they answer different questions:

FieldQuestion it answers
generatedAt / staleIs the picture itself fresh? stale: true means it is older than 3 minutes — the engine is late or stopped and we are still serving the last known payload
dataFreshnessSecondsHow old is the newest traffic window behind it? Normally several minutes, because some metrics (such as CONVERSION_MATURED) only make sense after a QR code has had time to be paid

So dataFreshnessSeconds: 480 together with stale: false is the normal case, not a contradiction: a fresh picture about a window that closed 8 minutes ago. Alert on stale, not on dataFreshnessSeconds.

This endpoint does not require DigitalSignature or X-Idempotency-Key.

Security
bearerAuth
Headers
ApplicationTokenstringrequired

Fixed GUID that uniquely identifies your integration. Provided during ConnectPSP onboarding.

Example: {{ApplicationToken}}
curl https://api.homologacao.connectpsp.com/health/pix \
  -H "Authorization: Bearer <token>" \
  -H "ApplicationToken: <app-token>"

Responses

Picture returned successfully.

Bodyapplication/json
schemaVersioninteger

Contract version of this payload. Additive changes never bump it.

Example: 1
generatedAtstring(date-time)

When the engine produced this picture (UTC).

Example: "2026-09-08T16:53:00Z"
dataFreshnessSecondsinteger

Age of the newest 5-minute window the engine evaluated, in seconds.

Example: 480
staleboolean

true when the picture is older than 3 minutes — the engine is late or stopped, and the last known payload is still being served.

Example: false
overallStatusstring(PixHealthStatus)

Health status. UNKNOWN means not enough sample to judge — never a failure. ROUTED_AWAY (partners only) means the partner has no traffic because volume was routed elsewhere.

Enum"HEALTHY""DEGRADED""SEVERELY_DEGRADED""UNAVAILABLE""UNKNOWN""ROUTED_AWAY"
platformobject(PixHealthPlatform)

The ConnectPSP platform as a whole. An operation is null when there is no data for it in the window.

platform.​cashInPixHealthOperationHealth (object) or null
One of:

The health of one operation (cash-in or cash-out) of one entity.

platform.​cashIn.​statusstring(PixHealthStatus)

Health status. UNKNOWN means not enough sample to judge — never a failure. ROUTED_AWAY (partners only) means the partner has no traffic because volume was routed elsewhere.

Enum"HEALTHY""DEGRADED""SEVERELY_DEGRADED""UNAVAILABLE""UNKNOWN""ROUTED_AWAY"
platform.​cashIn.​coveragenumber(double)[ 0 .. 1 ]

Fraction of the metrics the engine could actually judge in this window (1 = all of them).

Example: 1
platform.​cashIn.​signalsArray of objects(PixHealthSignal)

The metrics behind the status and their verdicts.

platform.​cashOutPixHealthOperationHealth (object) or null
One of:

The health of one operation (cash-in or cash-out) of one entity.

platform.​cashOut.​statusstring(PixHealthStatus)

Health status. UNKNOWN means not enough sample to judge — never a failure. ROUTED_AWAY (partners only) means the partner has no traffic because volume was routed elsewhere.

Enum"HEALTHY""DEGRADED""SEVERELY_DEGRADED""UNAVAILABLE""UNKNOWN""ROUTED_AWAY"
platform.​cashOut.​coveragenumber(double)[ 0 .. 1 ]

Fraction of the metrics the engine could actually judge in this window (1 = all of them).

Example: 1
platform.​cashOut.​signalsArray of objects(PixHealthSignal)

The metrics behind the status and their verdicts.

partnersArray of objects(PixHealthPartner)

The settlement partners in your scope: the ones you route through plus the ones you hold an active account with, even with no traffic of yours in the window. Use routing to tell them apart.

A partner you only hold an account with is reported with its real health, but it never affects your overallStatus and never raises an incident or a webhook for you.

"Active account" means an account seen in the last 30 days. Accounts are never deleted from our records, so a partner you stopped using more than 30 days ago drops off this list.

partners[].​ispbstring

8-digit ISPB of the partner.

Example: "20018183"
partners[].​namestring

Official bank name.

Example: "STARK BANK"
partners[].​routingboolean

Are you routing through this partner in the current window?

true — your PIX traffic goes through it. It counts towards your overallStatus and can raise incidents and webhooks for you.

false — you hold an active account with it, but none of your PIX went through it in this window. The health reported here is the partner's real health, measured across the whole platform, so you can watch a partner you may switch back to at any time. It does not count towards your overallStatus, and it raises no incident and no webhook for you.

A partner you have not held an account with for over 30 days is not reported at all.

Default true
Example: true
partners[].​sharenumber(double)[ 0 .. 1 ]

How much of your own PIX traffic was routed through this partner over the last 30 days, as a fraction between 0 and 1. Your number, not the platform's. 0 when there is no reading — the normal value for a partner with routing: false.

Example: 1
partners[].​cashInPixHealthOperationHealth (object) or null
One of:

The health of one operation (cash-in or cash-out) of one entity.

partners[].​cashIn.​statusstring(PixHealthStatus)

Health status. UNKNOWN means not enough sample to judge — never a failure. ROUTED_AWAY (partners only) means the partner has no traffic because volume was routed elsewhere.

Enum"HEALTHY""DEGRADED""SEVERELY_DEGRADED""UNAVAILABLE""UNKNOWN""ROUTED_AWAY"
partners[].​cashIn.​coveragenumber(double)[ 0 .. 1 ]

Fraction of the metrics the engine could actually judge in this window (1 = all of them).

Example: 1
partners[].​cashIn.​signalsArray of objects(PixHealthSignal)

The metrics behind the status and their verdicts.

partners[].​cashOutPixHealthOperationHealth (object) or null
One of:

The health of one operation (cash-in or cash-out) of one entity.

partners[].​cashOut.​statusstring(PixHealthStatus)

Health status. UNKNOWN means not enough sample to judge — never a failure. ROUTED_AWAY (partners only) means the partner has no traffic because volume was routed elsewhere.

Enum"HEALTHY""DEGRADED""SEVERELY_DEGRADED""UNAVAILABLE""UNKNOWN""ROUTED_AWAY"
partners[].​cashOut.​coveragenumber(double)[ 0 .. 1 ]

Fraction of the metrics the engine could actually judge in this window (1 = all of them).

Example: 1
partners[].​cashOut.​signalsArray of objects(PixHealthSignal)

The metrics behind the status and their verdicts.

banksArray of objects(PixHealthBank)

The banks your payers paid from, or your payees received at, over the last 30 days — crossed with the ones the engine watches. A bank you have not transacted with in 30 days is not listed.

The engine watches the 20 largest institutions by platform volume. Below that, an institution sends too few operations for any verdict to be meaningful, so it is left out rather than reported as permanently UNKNOWN.

Sorted worst-first, then by your own share, then by name.

banks[].​ispbstring
Example: "18236120"
banks[].​namestring

Official bank name.

Example: "NU PAGAMENTOS S.A."
banks[].​sharenumber(double)[ 0 .. 1 ]

How much of your own PIX traffic went through this bank over the last 30 days, as a fraction between 0 and 1. It is your number, not the platform's — we never report other merchants' volume.

Used to sort the list, and useful to weigh how much a given bank's health matters to you. 0 when there is no reading.

Example: 0.2814
banks[].​cashInPixHealthOperationHealth (object) or null
One of:

The health of one operation (cash-in or cash-out) of one entity.

banks[].​cashIn.​statusstring(PixHealthStatus)

Health status. UNKNOWN means not enough sample to judge — never a failure. ROUTED_AWAY (partners only) means the partner has no traffic because volume was routed elsewhere.

Enum"HEALTHY""DEGRADED""SEVERELY_DEGRADED""UNAVAILABLE""UNKNOWN""ROUTED_AWAY"
banks[].​cashIn.​coveragenumber(double)[ 0 .. 1 ]

Fraction of the metrics the engine could actually judge in this window (1 = all of them).

Example: 1
banks[].​cashIn.​signalsArray of objects(PixHealthSignal)

The metrics behind the status and their verdicts.

banks[].​cashOutPixHealthOperationHealth (object) or null
One of:

The health of one operation (cash-in or cash-out) of one entity.

banks[].​cashOut.​statusstring(PixHealthStatus)

Health status. UNKNOWN means not enough sample to judge — never a failure. ROUTED_AWAY (partners only) means the partner has no traffic because volume was routed elsewhere.

Enum"HEALTHY""DEGRADED""SEVERELY_DEGRADED""UNAVAILABLE""UNKNOWN""ROUTED_AWAY"
banks[].​cashOut.​coveragenumber(double)[ 0 .. 1 ]

Fraction of the metrics the engine could actually judge in this window (1 = all of them).

Example: 1
banks[].​cashOut.​signalsArray of objects(PixHealthSignal)

The metrics behind the status and their verdicts.

merchantPixHealthMerchant (object) or null

Your own operation, judged against your own history. null when you had no traffic in the window.

One of:

Your own operation, judged against your own history. null when you had no traffic in the window.

merchant.​idstring

Your customer id — the same one ConnectPSP gave you at onboarding.

Example: "42"
merchant.​namestring

Your own registered name, as ConnectPSP knows it.

Example: "Your operation"
merchant.​cashInPixHealthOperationHealth (object) or null
One of:

The health of one operation (cash-in or cash-out) of one entity.

merchant.​cashIn.​statusstring(PixHealthStatus)

Health status. UNKNOWN means not enough sample to judge — never a failure. ROUTED_AWAY (partners only) means the partner has no traffic because volume was routed elsewhere.

Enum"HEALTHY""DEGRADED""SEVERELY_DEGRADED""UNAVAILABLE""UNKNOWN""ROUTED_AWAY"
merchant.​cashIn.​coveragenumber(double)[ 0 .. 1 ]

Fraction of the metrics the engine could actually judge in this window (1 = all of them).

Example: 1
merchant.​cashIn.​signalsArray of objects(PixHealthSignal)

The metrics behind the status and their verdicts.

merchant.​cashOutPixHealthOperationHealth (object) or null
One of:

The health of one operation (cash-in or cash-out) of one entity.

merchant.​cashOut.​statusstring(PixHealthStatus)

Health status. UNKNOWN means not enough sample to judge — never a failure. ROUTED_AWAY (partners only) means the partner has no traffic because volume was routed elsewhere.

Enum"HEALTHY""DEGRADED""SEVERELY_DEGRADED""UNAVAILABLE""UNKNOWN""ROUTED_AWAY"
merchant.​cashOut.​coveragenumber(double)[ 0 .. 1 ]

Fraction of the metrics the engine could actually judge in this window (1 = all of them).

Example: 1
merchant.​cashOut.​signalsArray of objects(PixHealthSignal)

The metrics behind the status and their verdicts.

incidentsArray of objects(PixHealthIncident)

Confirmed incidents open right now on ConnectPSP or on your settlement partners.

incidents[].​incidentIdstring

Stable id. Use it to correlate the webhooks and the detail endpoint.

Example: "LIVE-202609081530-PAYER_INSTITUTION-00360305"
incidents[].​originobject(PixHealthOrigin)

Who the incident is attributed to.

incidents[].​origin.​typestring(PixHealthEntityType)
  • CONNECTPSP — the platform as a whole.
  • BANKING_PARTNER — a settlement partner you route through (id = ISPB).
  • PAYER_INSTITUTION — a bank your payers pay from / your payees receive at (id = ISPB).
  • PAYER_COHORT — a group of payer banks with the same behaviour.
  • MERCHANT — your own operation (id = your customer id).
  • PIX_SYSTEMIC — the PIX system itself (DICT, SPI).
Enum"CONNECTPSP""BANKING_PARTNER""PAYER_INSTITUTION""PAYER_COHORT""MERCHANT""PIX_SYSTEMIC"
incidents[].​origin.​idstring
Example: "00360305"
incidents[].​origin.​displayNamestring
Example: "CAIXA ECONOMICA FEDERAL"
incidents[].​operationstring(PixHealthOperation)

CASH_IN = payments you receive; CASH_OUT = withdrawals you send.

Enum"CASH_IN""CASH_OUT"
incidents[].​statusstring

ACTIVE = confirmed and ongoing. WORSENING = severity went up. RECOVERING = metrics back to normal, waiting 3 windows to close. RESOLVED = closed.

Enum"ACTIVE""WORSENING""RECOVERING""RESOLVED"
Example: "ACTIVE"
incidents[].​severitystring

How bad it is (never HEALTHY on an incident).

Enum"DEGRADED""SEVERELY_DEGRADED""UNAVAILABLE"
Example: "DEGRADED"
incidents[].​confidencestring

How sure the engine is about who is at fault — not about how bad it is.

Enum"LOW""MEDIUM""HIGH"
Example: "MEDIUM"
incidents[].​originClassstring

How the engine knows. OBSERVED = it saw the error itself. INFERRED = deduced from the absence of what should have happened. CORROBORATED / CONFIRMED = backed by a second independent signal.

Enum"OBSERVED""INFERRED""CORROBORATED""CONFIRMED""UNKNOWN"
Example: "INFERRED"
incidents[].​startedAtstring(date-time)

Start of the first anomalous window (UTC).

Example: "2026-09-08T15:30:00Z"
incidents[].​detectedAtstring(date-time)

When the engine confirmed it (UTC).

Example: "2026-09-08T15:37:59Z"
incidents[].​recoveredAtstring or null(date-time)

When metrics returned to normal; null while ongoing.

Example: null
incidents[].​resolvedAtstring or null(date-time)

When the incident was closed; null while open.

Example: null
incidents[].​updatedAtstring or null(date-time)
Example: "2026-09-08T16:52:00Z"
incidents[].​affectedPartnersinteger

How many settlement partners the incident reached.

Example: 2
incidents[].​summarystring

Diagnosis in Portuguese, written for you. Never contains other clients' data.

Example: "Forte evidência de degradação em cobranças pagas por clientes da CAIXA ECONOMICA FEDERAL: a conversão desses pagadores ficou em 78,5%, contra 93,0% esperados, enquanto 9 instituições de controle seguem normais."
externalIncidentsArray of objects(PixHealthIncident)

Confirmed incidents open right now on payer banks or on the PIX system itself. These are outside ConnectPSP's control and never downgrade overallStatus.

externalIncidents[].​incidentIdstring

Stable id. Use it to correlate the webhooks and the detail endpoint.

Example: "LIVE-202609081530-PAYER_INSTITUTION-00360305"
externalIncidents[].​originobject(PixHealthOrigin)

Who the incident is attributed to.

externalIncidents[].​origin.​typestring(PixHealthEntityType)
  • CONNECTPSP — the platform as a whole.
  • BANKING_PARTNER — a settlement partner you route through (id = ISPB).
  • PAYER_INSTITUTION — a bank your payers pay from / your payees receive at (id = ISPB).
  • PAYER_COHORT — a group of payer banks with the same behaviour.
  • MERCHANT — your own operation (id = your customer id).
  • PIX_SYSTEMIC — the PIX system itself (DICT, SPI).
Enum"CONNECTPSP""BANKING_PARTNER""PAYER_INSTITUTION""PAYER_COHORT""MERCHANT""PIX_SYSTEMIC"
externalIncidents[].​origin.​idstring
Example: "00360305"
externalIncidents[].​origin.​displayNamestring
Example: "CAIXA ECONOMICA FEDERAL"
externalIncidents[].​operationstring(PixHealthOperation)

CASH_IN = payments you receive; CASH_OUT = withdrawals you send.

Enum"CASH_IN""CASH_OUT"
externalIncidents[].​statusstring

ACTIVE = confirmed and ongoing. WORSENING = severity went up. RECOVERING = metrics back to normal, waiting 3 windows to close. RESOLVED = closed.

Enum"ACTIVE""WORSENING""RECOVERING""RESOLVED"
Example: "ACTIVE"
externalIncidents[].​severitystring

How bad it is (never HEALTHY on an incident).

Enum"DEGRADED""SEVERELY_DEGRADED""UNAVAILABLE"
Example: "DEGRADED"
externalIncidents[].​confidencestring

How sure the engine is about who is at fault — not about how bad it is.

Enum"LOW""MEDIUM""HIGH"
Example: "MEDIUM"
externalIncidents[].​originClassstring

How the engine knows. OBSERVED = it saw the error itself. INFERRED = deduced from the absence of what should have happened. CORROBORATED / CONFIRMED = backed by a second independent signal.

Enum"OBSERVED""INFERRED""CORROBORATED""CONFIRMED""UNKNOWN"
Example: "INFERRED"
externalIncidents[].​startedAtstring(date-time)

Start of the first anomalous window (UTC).

Example: "2026-09-08T15:30:00Z"
externalIncidents[].​detectedAtstring(date-time)

When the engine confirmed it (UTC).

Example: "2026-09-08T15:37:59Z"
externalIncidents[].​recoveredAtstring or null(date-time)

When metrics returned to normal; null while ongoing.

Example: null
externalIncidents[].​resolvedAtstring or null(date-time)

When the incident was closed; null while open.

Example: null
externalIncidents[].​updatedAtstring or null(date-time)
Example: "2026-09-08T16:52:00Z"
externalIncidents[].​affectedPartnersinteger

How many settlement partners the incident reached.

Example: 2
externalIncidents[].​summarystring

Diagnosis in Portuguese, written for you. Never contains other clients' data.

Example: "Forte evidência de degradação em cobranças pagas por clientes da CAIXA ECONOMICA FEDERAL: a conversão desses pagadores ficou em 78,5%, contra 93,0% esperados, enquanto 9 instituições de controle seguem normais."
Response
application/json
{ "schemaVersion": 1, "generatedAt": "2026-09-08T16:53:00Z", "dataFreshnessSeconds": 480, "stale": false, "overallStatus": "HEALTHY", "platform": { "cashIn": { … }, "cashOut": { … } }, "partners": [ { … }, { … } ], "banks": [ { … }, { … } ], "merchant": { "id": "42", "name": "Your operation", "cashIn": { … }, "cashOut": { … } }, "incidents": [], "externalIncidents": [ { … } ] }

Request

Confirmed PIX incidents in your scope, most recent first, paginated. An incident is confirmed when the engine saw the same pattern in two consecutive 5-minute windows; a one-window blip never appears here. Defaults to the last 7 days; the window between from and to cannot exceed 92 days.

Each incident tells you who (origin), how bad (severity), how sure we are about the culprit (confidence) and how we know (originClass: OBSERVED = we saw the error, INFERRED = deduced from the absence of what should have happened). summary is a diagnosis in Portuguese written for you — never internal counts of other clients.

One flat list

Unlike GET /health/pix, which splits the open incidents into incidents and externalIncidents, this list is flat. Use origin.type to tell the two apart: CONNECTPSP and BANKING_PARTNER are ours to fix, PAYER_INSTITUTION / PAYER_COHORT / PIX_SYSTEMIC are outside our control, and MERCHANT is your own operation.

status is matched case-insensitively, so active,worsening works too. The response echoes back the from and to actually applied, so you can log the window you really got.

This endpoint does not require DigitalSignature or X-Idempotency-Key.

Security
bearerAuth
Query
fromstring(date-time)

Start of the window (ISO 8601, UTC). Default is to minus 7 days.

tostring(date-time)

End of the window (ISO 8601, UTC). Default is now.

statusstring

Comma-separated list. Accepted values: ACTIVE, WORSENING, RECOVERING, RESOLVED.

Example: status=ACTIVE,WORSENING
pageinteger>= 1
Default 1
pageSizeinteger[ 1 .. 200 ]
Default 50
Headers
ApplicationTokenstringrequired

Fixed GUID that uniquely identifies your integration. Provided during ConnectPSP onboarding.

Example: {{ApplicationToken}}
curl "https://api.homologacao.connectpsp.com/health/pix/incidents?status=ACTIVE,WORSENING&pageSize=20" \
  -H "Authorization: Bearer <token>" \
  -H "ApplicationToken: <app-token>"

Responses

Page of incidents. items is an empty array when nothing matched — that is a normal, healthy answer, not an error.

Bodyapplication/json
itemsArray of objects(PixHealthIncident)
items[].​incidentIdstring

Stable id. Use it to correlate the webhooks and the detail endpoint.

Example: "LIVE-202609081530-PAYER_INSTITUTION-00360305"
items[].​originobject(PixHealthOrigin)

Who the incident is attributed to.

items[].​origin.​typestring(PixHealthEntityType)
  • CONNECTPSP — the platform as a whole.
  • BANKING_PARTNER — a settlement partner you route through (id = ISPB).
  • PAYER_INSTITUTION — a bank your payers pay from / your payees receive at (id = ISPB).
  • PAYER_COHORT — a group of payer banks with the same behaviour.
  • MERCHANT — your own operation (id = your customer id).
  • PIX_SYSTEMIC — the PIX system itself (DICT, SPI).
Enum"CONNECTPSP""BANKING_PARTNER""PAYER_INSTITUTION""PAYER_COHORT""MERCHANT""PIX_SYSTEMIC"
items[].​origin.​idstring
Example: "00360305"
items[].​origin.​displayNamestring
Example: "CAIXA ECONOMICA FEDERAL"
items[].​operationstring(PixHealthOperation)

CASH_IN = payments you receive; CASH_OUT = withdrawals you send.

Enum"CASH_IN""CASH_OUT"
items[].​statusstring

ACTIVE = confirmed and ongoing. WORSENING = severity went up. RECOVERING = metrics back to normal, waiting 3 windows to close. RESOLVED = closed.

Enum"ACTIVE""WORSENING""RECOVERING""RESOLVED"
Example: "ACTIVE"
items[].​severitystring

How bad it is (never HEALTHY on an incident).

Enum"DEGRADED""SEVERELY_DEGRADED""UNAVAILABLE"
Example: "DEGRADED"
items[].​confidencestring

How sure the engine is about who is at fault — not about how bad it is.

Enum"LOW""MEDIUM""HIGH"
Example: "MEDIUM"
items[].​originClassstring

How the engine knows. OBSERVED = it saw the error itself. INFERRED = deduced from the absence of what should have happened. CORROBORATED / CONFIRMED = backed by a second independent signal.

Enum"OBSERVED""INFERRED""CORROBORATED""CONFIRMED""UNKNOWN"
Example: "INFERRED"
items[].​startedAtstring(date-time)

Start of the first anomalous window (UTC).

Example: "2026-09-08T15:30:00Z"
items[].​detectedAtstring(date-time)

When the engine confirmed it (UTC).

Example: "2026-09-08T15:37:59Z"
items[].​recoveredAtstring or null(date-time)

When metrics returned to normal; null while ongoing.

Example: null
items[].​resolvedAtstring or null(date-time)

When the incident was closed; null while open.

Example: null
items[].​updatedAtstring or null(date-time)
Example: "2026-09-08T16:52:00Z"
items[].​affectedPartnersinteger

How many settlement partners the incident reached.

Example: 2
items[].​summarystring

Diagnosis in Portuguese, written for you. Never contains other clients' data.

Example: "Forte evidência de degradação em cobranças pagas por clientes da CAIXA ECONOMICA FEDERAL: a conversão desses pagadores ficou em 78,5%, contra 93,0% esperados, enquanto 9 instituições de controle seguem normais."
totalinteger(int64)

Total incidents matching the filter (all pages).

Example: 3
pageinteger
Example: 1
pageSizeinteger
Example: 50
fromstring(date-time)

Effective start of the window (UTC).

Example: "2026-09-01T16:53:00Z"
tostring(date-time)

Effective end of the window (UTC).

Example: "2026-09-08T16:53:00Z"
Response
application/json
{ "items": [ { … }, { … } ], "total": 2, "page": 1, "pageSize": 50, "from": "2026-09-01T16:53:00Z", "to": "2026-09-08T16:53:00Z" }

Request

One incident with the evidence behind the verdict. Each piece of evidence names the metric, the entity, the relative deviation from expected and the Z-score — never raw platform volumes.

Returns 404 when the incident does not exist or is outside your scope; the two cases are deliberately indistinguishable.

This endpoint does not require DigitalSignature or X-Idempotency-Key.

Security
bearerAuth
Path
idstringrequired

The incidentId from the picture or from the list.

Example: LIVE-202609081530-PAYER_INSTITUTION-00360305
Headers
ApplicationTokenstringrequired

Fixed GUID that uniquely identifies your integration. Provided during ConnectPSP onboarding.

Example: {{ApplicationToken}}
curl https://api.homologacao.connectpsp.com/health/pix/incidents/LIVE-202609081530-PAYER_INSTITUTION-00360305 \
  -H "Authorization: Bearer <token>" \
  -H "ApplicationToken: <app-token>"

Responses

Incident and evidence.

Bodyapplication/json
incidentobject(PixHealthIncident)
incident.​incidentIdstring

Stable id. Use it to correlate the webhooks and the detail endpoint.

Example: "LIVE-202609081530-PAYER_INSTITUTION-00360305"
incident.​originobject(PixHealthOrigin)

Who the incident is attributed to.

incident.​origin.​typestring(PixHealthEntityType)
  • CONNECTPSP — the platform as a whole.
  • BANKING_PARTNER — a settlement partner you route through (id = ISPB).
  • PAYER_INSTITUTION — a bank your payers pay from / your payees receive at (id = ISPB).
  • PAYER_COHORT — a group of payer banks with the same behaviour.
  • MERCHANT — your own operation (id = your customer id).
  • PIX_SYSTEMIC — the PIX system itself (DICT, SPI).
Enum"CONNECTPSP""BANKING_PARTNER""PAYER_INSTITUTION""PAYER_COHORT""MERCHANT""PIX_SYSTEMIC"
incident.​origin.​idstring
Example: "00360305"
incident.​origin.​displayNamestring
Example: "CAIXA ECONOMICA FEDERAL"
incident.​operationstring(PixHealthOperation)

CASH_IN = payments you receive; CASH_OUT = withdrawals you send.

Enum"CASH_IN""CASH_OUT"
incident.​statusstring

ACTIVE = confirmed and ongoing. WORSENING = severity went up. RECOVERING = metrics back to normal, waiting 3 windows to close. RESOLVED = closed.

Enum"ACTIVE""WORSENING""RECOVERING""RESOLVED"
Example: "ACTIVE"
incident.​severitystring

How bad it is (never HEALTHY on an incident).

Enum"DEGRADED""SEVERELY_DEGRADED""UNAVAILABLE"
Example: "DEGRADED"
incident.​confidencestring

How sure the engine is about who is at fault — not about how bad it is.

Enum"LOW""MEDIUM""HIGH"
Example: "MEDIUM"
incident.​originClassstring

How the engine knows. OBSERVED = it saw the error itself. INFERRED = deduced from the absence of what should have happened. CORROBORATED / CONFIRMED = backed by a second independent signal.

Enum"OBSERVED""INFERRED""CORROBORATED""CONFIRMED""UNKNOWN"
Example: "INFERRED"
incident.​startedAtstring(date-time)

Start of the first anomalous window (UTC).

Example: "2026-09-08T15:30:00Z"
incident.​detectedAtstring(date-time)

When the engine confirmed it (UTC).

Example: "2026-09-08T15:37:59Z"
incident.​recoveredAtstring or null(date-time)

When metrics returned to normal; null while ongoing.

Example: null
incident.​resolvedAtstring or null(date-time)

When the incident was closed; null while open.

Example: null
incident.​updatedAtstring or null(date-time)
Example: "2026-09-08T16:52:00Z"
incident.​affectedPartnersinteger

How many settlement partners the incident reached.

Example: 2
incident.​summarystring

Diagnosis in Portuguese, written for you. Never contains other clients' data.

Example: "Forte evidência de degradação em cobranças pagas por clientes da CAIXA ECONOMICA FEDERAL: a conversão desses pagadores ficou em 78,5%, contra 93,0% esperados, enquanto 9 instituições de controle seguem normais."
evidenceArray of objects(PixHealthEvidence)

The anomalous points behind the verdict, newest first.

evidence[].​observedAtstring(date-time)

Start of the 5-minute window (UTC).

Example: "2026-09-08T15:35:00Z"
evidence[].​metricstring
Example: "CONVERSION_MATURED"
evidence[].​operationstring(PixHealthOperation)

CASH_IN = payments you receive; CASH_OUT = withdrawals you send.

Enum"CASH_IN""CASH_OUT"
evidence[].​entityobject(PixHealthOrigin)

Who the incident is attributed to.

evidence[].​entity.​typestring(PixHealthEntityType)
  • CONNECTPSP — the platform as a whole.
  • BANKING_PARTNER — a settlement partner you route through (id = ISPB).
  • PAYER_INSTITUTION — a bank your payers pay from / your payees receive at (id = ISPB).
  • PAYER_COHORT — a group of payer banks with the same behaviour.
  • MERCHANT — your own operation (id = your customer id).
  • PIX_SYSTEMIC — the PIX system itself (DICT, SPI).
Enum"CONNECTPSP""BANKING_PARTNER""PAYER_INSTITUTION""PAYER_COHORT""MERCHANT""PIX_SYSTEMIC"
evidence[].​entity.​idstring
Example: "00360305"
evidence[].​entity.​displayNamestring
Example: "CAIXA ECONOMICA FEDERAL"
evidence[].​deviationPercentnumber or null(double)

(observed − expected) ÷ expected. -0.16 means 16 % below expected. null when there is no expectation.

Example: -0.16
evidence[].​znumber(double)

Robust Z-score of the deviation. |Z| ≥ 3 is an anomaly; the farther from 0, the clearer.

Example: -4.2
Response
application/json
{ "incident": { "incidentId": "LIVE-202609081530-PAYER_INSTITUTION-00360305", "origin": { … }, "operation": "CASH_IN", "status": "ACTIVE", "severity": "DEGRADED", "confidence": "MEDIUM", "originClass": "INFERRED", "startedAt": "2026-09-08T15:30:00Z", "detectedAt": "2026-09-08T15:37:59Z", "recoveredAt": null, "resolvedAt": null, "updatedAt": "2026-09-08T16:52:00Z", "affectedPartners": 2, "summary": "Forte evidência de degradação em cobranças pagas por clientes da CAIXA ECONOMICA FEDERAL: a conversão desses pagadores ficou em 78,5%, contra 93,0% esperados, enquanto 9 instituições de controle seguem normais." }, "evidence": [ { … }, { … } ] }