Providers
The Providers API gives you real-time visibility into the health and performance of all payment providers connected to POPFAB.
List Provider Health
GET
/v1/providersReturns the current health snapshot for all providers, updated every 60 seconds.
Get provider healthbash
curl https://api.popfab.io/v1/providers \
-H "Authorization: Bearer sk_test_YOUR_API_KEY"Responsejson
[
{
"provider_id": "paystack",
"circuit_state": "CLOSED",
"success_rate": 0.974,
"avg_latency_ms": 312,
"p95_latency_ms": 680,
"requests_in_window": 1423,
"last_updated": "2025-03-19T10:25:00.000Z"
},
{
"provider_id": "flutterwave",
"circuit_state": "CLOSED",
"success_rate": 0.961,
"avg_latency_ms": 428,
"p95_latency_ms": 892,
"requests_in_window": 876,
"last_updated": "2025-03-19T10:25:00.000Z"
},
{
"provider_id": "monnify",
"circuit_state": "OPEN",
"success_rate": 0.52,
"avg_latency_ms": 2100,
"p95_latency_ms": 4800,
"requests_in_window": 34,
"last_updated": "2025-03-19T10:25:00.000Z"
}
]Response Fields
| Field | Type | Description |
|---|---|---|
provider_id | string | Provider identifier: paystack, flutterwave, monnify, squad, interswitch, payaza. |
circuit_state | string | Current circuit breaker state. See circuit breaker reference below. |
success_rate | float (0–1) | Rolling 15-minute success rate for this provider. |
avg_latency_ms | integer | Average response time in milliseconds over the last 15 minutes. |
p95_latency_ms | integer | 95th percentile response time — the latency 95% of requests are faster than. |
requests_in_window | integer | Total request count in the current 60-second monitoring window. |
last_updated | ISO 8601 | Timestamp of the last health snapshot computation. |
Circuit Breaker States
POPFAB automatically monitors each provider's failure rate and manages traffic routing through a circuit breaker pattern. You do not need to take any action — this happens automatically. The provider health API lets you observe the current state.
| State | Meaning | Traffic |
|---|---|---|
| CLOSED | Provider is healthy. Normal operation. | Full traffic routed normally. |
| OPEN | Failure rate exceeded 30% in the last 60s, or 3+ consecutive timeouts detected. | Zero traffic. All requests fail over to other providers immediately. |
| HALF_OPEN | Recovery probe active. A single test request is sent every 30 seconds. | Single probe transaction only. Success → CLOSED. Failure → OPEN. |
Default circuit breaker thresholds
| Parameter | Default | Range |
|---|---|---|
| Error rate threshold | 30% | 10–60% |
| Monitoring window | 60 seconds | 30–300s |
| Consecutive timeout threshold | 3 | 1–10 |
| Minimum requests to open | 5 in window | Configurable |
| Half-open probe interval | 30 seconds | Fixed |
Supported Providers
| ID | Name | Methods | Markets | Status |
|---|---|---|---|---|
paystack | Paystack | Card, Bank Transfer, USSD, QR | NG, GH, KE, ZA | Live |
flutterwave | Flutterwave | Card, Mobile Money, Bank Transfer, USSD | NG + 30 markets | Live |
monnify | Monnify | Bank Transfer, Card | NG | Live |
squad | Squad (GTBank) | Card, Bank Transfer, USSD | NG | Coming soon |
interswitch | Interswitch | Card, USSD | NG | Coming soon |
payaza | Payaza | Card, Bank Transfer | NG, GH | Planned |
Capability Matrix
| Provider | Payments | Transfers | Virtual Accounts | Subaccounts | Identity (BVN) |
|---|---|---|---|---|---|
| Paystack | ✓ | ✓ | ✓ | ✓ | ✓ |
| Flutterwave | ✓ | ✓ | — | ✓ | — |
| Monnify | ✓ | ✓ | ✓ | — | — |
| Squad | ✓ | ✓ | ✓ | — | — |
| Interswitch | ✓ | ✓ | — | — | — |
| Payaza | ✓ | — | — | — | — |