Skip to main content
Use this page when your receiver may have missed events: it was down past the retry window, you paused the endpoint, or a limit skipped a ledger. Coverage tells you which ledgers were not covered and why, the delivery list shows which deliveries failed, and you fill the holes from the Activity API, which holds the complete history. Set these once in your terminal. The sample values are real Testnet data, so the read examples return real results.

Check coverage

Response (200, captured on Testnet, trimmed)
Each gap is an inclusive ledger range in which this endpoint matched nothing and delivered nothing. historical_until_ledger is the first ledger covered by live delivery (activation checkpoint + 1): use it as the exclusive until_ledger when you read earlier history from Activity. The response also contains the subscription itself. It keeps up to 128 gap ranges; older ones are merged into one coverage_unknown_compacted range.

Find failed deliveries

A delivery that failed all its attempts is dead. List deliveries newest first:
Each delivery has status (pending, delivered or dead), attempts, response_code or last_error, lane (live or replay) and, on paid endpoints, the credits charged. next_attempt_at is set only while the delivery is pending. Pass next_cursor back as before for older pages (limit up to 500).

Fill gaps from Activity

The Activity API has the complete history on every plan, so it can fill any gap or dead delivery. For a gap from first_ledger F to last_ledger L, read since_ledger=F and until_ledger=L+1 with the same filter as the subscription. For the second gap above, with an account filter:
Activity events have the same id as webhook events, so store them under the same (network, id) unique key and the ones you already have are ignored. Do not add generation to the key: Activity’s read_view.generation and the webhook generation are different values (see Deduplicate). Follow _links.next until range_complete is true; see Pagination.

Replay

Replay redelivers events to your endpoint, signed, on the replay lane (X-Webhook-Replay-Id and lane: "replay" in the signed context). It comes in two kinds: stored deliveries from the last 7 days, and a short range of recent ledgers. Each replay is quoted first, then started with the quote’s quote_sha256; see Quote a redelivery and Quote a source replay for the requests. Free and paid plan endpoints get 403 on every replay request (quote or start); fill their gaps from Activity as above:
Response (403)

Next