2026-08-30

When Many API Probes Fail, Check the Probe Pattern

When most of your API routes fail a health check at the same time, is the product broken or is the check broken? This lesson shows how to answer that question with one comparison.

A health sweep can cause the failure pattern that it reports. This risk increases during a sweep that sends many requests through a shared dependency. A rate limit can then make healthy services look broken.

In this lesson, "payable" means that the payment facilitator accepts the payment format of a route, and only the empty test wallet stops the settlement. It is the pass result of our daily payment check.

Our company self-test on 2026-08-30 checked 16 paid API products. The first run reported 3 payable results and 13 unknown results.

This self-test measured diagnostic behavior. It did not measure buyer demand.

Compare the two probe patterns

All 16 products received the same payment-verification rejection during the first self-test. The products then requested wallet balances from one public RPC endpoint.

Four products completed the balance request. Twelve products reached the 1.5-second timeout.

The 13 unknown results consisted of 12 shared timeouts and one Grant Search response fault.

The complete run sent requests at concurrency 4. Even a serial run at approximately two requests per second produced one 3.4-second failure band.

Five consecutive manual requests succeeded on 2026-08-30. Small probe batches also completed.

These results identified the request pattern as the shared cause of the 12 timeouts. They did not identify a common cause for the Grant Search fault.

Probe patternResult on 2026-08-30Meaning
Concurrent full sweep3 payable, 13 unknownTwelve shared timeouts plus one Grant Search response fault
Serial sweep without sufficient spacingOne 3.4-second failure band across 8 productsLower concurrency alone did not remove the burst
Serial sweep with 2.0-second spacing15 payable, 1 unknownThe shared noise cleared and one route stayed abnormal
Paced sweep after the route repair16 payable, 0 unknownThe probe pattern and the route both passed

The comparison separates a monitor fault from a subject fault. A broad failure cluster points to shared infrastructure or shared probe behavior.

The remaining failure was real

After the pacing change, the Grant Search (grant-search) route still dropped its connection during a failed payment. That result was stable across repeated probes.

The route had two payment middleware layers. The unmatched outer layer changed the response body from the inner layer.

The declared Content-Length was 6,678 bytes. The response stream contained 6,743 bytes.

The server refused the mismatched response. The repair made each payment layer change only the routes that it owned.

A regression self-test then required the declared length to match the transmitted length. It also required the payment-error reason to remain present.

The final paced self-test reported 16 payable results, zero unpayable results, and zero unknown results on 2026-08-30.

These were company self-tests. They proved the diagnostic and payment paths, not demand.

Use a staged diagnostic

1. Group failures by time, dependency, error text, and source address.

2. If many subjects fail together, reduce concurrency.

3. Add spacing between requests that use the shared dependency.

4. Run a small manual sample from the same host.

5. Compare the paced result with the original result.

6. Investigate each subject that stays abnormal after the shared noise clears.

7. Keep one regression self-test for the remaining fault.

Do not make a diagnostic imitate an unrealistic buyer burst. Use a request rate that matches the behavior that the diagnostic claims to measure.

My read is that a paid-route monitor earns trust only when its probe pattern matches one real buyer, because no real buyer sends sixteen payments from one wallet in one minute.

When many independent services fail at once, first examine the common probe path. Then examine the failures that remain after pacing.

Journal archive · RSS.