Skip to main content
GET /admin/psp/health returns the active probe state, circuit-breaker status, and probe-enabled flag for every PSP the platform currently supports. Probes are OFF by default per PSP (each has its own env flag, e.g. STRIPE_PROBE_ENABLED, BONUM_PROBE_ENABLED). When a probe is OFF, the response still returns the breaker state (which is always tracked) and probeEnabled: false so the caller knows the probe metrics are stale.
This endpoint requires:
  • JWT with role = SUPER_ADMIN
  • IpAllowlistGuard — caller IP must be in the operator allowlist
  • GeoBlockGuard — caller geo must be permitted
Calls that miss any of the three return 403.

GET /admin/psp/health

Authentication

GuardRequirement
JWTRequired, role = SUPER_ADMIN
IP allowlistCaller IP in ADMIN_IP_ALLOWLIST
GeoCountry in ADMIN_GEO_ALLOWLIST

Query parameters

None.

Response — 200 OK

{
  "fetchedAt": "2026-06-04T12:00:00.000Z",
  "psps": {
    "stripe": {
      "probeEnabled": true,
      "probes": {
        "lastRunAt": "2026-06-04T11:59:30.000Z",
        "lastLatencyMs": 142,
        "lastStatus": "ok",
        "consecutiveFailures": 0,
        "successRate24h": 0.999
      },
      "breaker": {
        "state": "closed",
        "tripsInWindow": 0,
        "lastTripAt": null,
        "lastResetAt": "2026-06-01T03:00:00.000Z"
      }
    },
    "paypal": {
      "probeEnabled": false,
      "probes": null,
      "breaker": {
        "state": "closed",
        "tripsInWindow": 0,
        "lastTripAt": null,
        "lastResetAt": null
      }
    },
    "bonum": {
      "probeEnabled": true,
      "probes": {
        "lastRunAt": "2026-06-04T11:59:30.000Z",
        "lastLatencyMs": 318,
        "lastStatus": "ok",
        "consecutiveFailures": 0,
        "successRate24h": 0.997
      },
      "breaker": {
        "state": "closed",
        "tripsInWindow": 0,
        "lastTripAt": null,
        "lastResetAt": null
      }
    },
    "telr": {
      "probeEnabled": true,
      "probes": {
        "lastRunAt": "2026-06-04T11:59:30.000Z",
        "lastLatencyMs": 221,
        "lastStatus": "ok",
        "consecutiveFailures": 0,
        "successRate24h": 0.998
      },
      "breaker": {
        "state": "closed",
        "tripsInWindow": 0,
        "lastTripAt": null,
        "lastResetAt": null
      }
    },
    "paymob": {
      "probeEnabled": false,
      "probes": null,
      "breaker": {
        "state": "closed",
        "tripsInWindow": 0,
        "lastTripAt": null,
        "lastResetAt": null
      }
    },
    "coinbase": {
      "probeEnabled": false,
      "probes": null,
      "breaker": {
        "state": "closed",
        "tripsInWindow": 0,
        "lastTripAt": null,
        "lastResetAt": null
      }
    }
  }
}

Field reference

FieldTypeDescription
psps.<name>.probeEnabledbooleanWhether the periodic synthetic probe is running for this PSP
psps.<name>.probes.lastRunAtISO-8601Last probe execution (null when disabled)
psps.<name>.probes.lastLatencyMsintegerRound-trip latency of the most recent probe
psps.<name>.probes.lastStatusenum (ok | degraded | failing)Probe verdict
psps.<name>.probes.consecutiveFailuresintegerFailed probes in a row (resets on success)
psps.<name>.probes.successRate24hfloat (0-1)Rolling 24h success rate
psps.<name>.breaker.stateenum (closed | half-open | open)Circuit-breaker state
psps.<name>.breaker.tripsInWindowintegerBreaker trips in the current 1h sliding window
psps.<name>.breaker.lastTripAtISO-8601 | nullMost recent trip timestamp
psps.<name>.breaker.lastResetAtISO-8601 | nullMost recent manual or auto reset

Error responses

StatusWhen
403JWT / IP / geo guard failed

Example

curl https://apiv3.droplinked.com/admin/psp/health \
  -H "Authorization: Bearer <SUPER_ADMIN_JWT>"

When to use

SituationWhy this endpoint
Operator pings “is Bonum down?”Read psps.bonum.breaker.state + psps.bonum.probes.lastStatus
Before bulk-reconciling TelrConfirm psps.telr.breaker.state === "closed" to avoid wasted calls
Debugging high refund rateCross-reference with GET /admin/dashboard/refund-rate
Status-page automationPoll every 60s; raise an incident when any breaker is open
Probes are off by default for low-traffic PSPs (Paymob, Coinbase, PayPal) because the synthetic call incurs vendor-side cost or burns sandbox quota. Enable only when the PSP is in active use for the operating region.