ShredReplay

ShredReplay captures raw Solana shred packets and lets you replay them to any UDP target with precise timing control. The service retains approximately the last 24 hours of shred data, so you can replay any slot or time window from the past day.

Use it to replay historical network data for testing validators, debugging slot behavior, or analyzing shred propagation.

Authentication

All API endpoints (except health check) require an API key.

Include your key in every request:

X-API-Key: YOUR_API_KEY

Your API key is provided by the service administrator. Keep it secret.


Browsing Available Data

List Available Slots

# List slots (default: first 100)
curl https://API_HOST/v1/slots \
  -H 'X-API-Key: YOUR_KEY'

# Filter by slot range
curl 'https://API_HOST/v1/slots?from=405445570&to=405445600' \
  -H 'X-API-Key: YOUR_KEY'

# Increase limit (max 1000)
curl 'https://API_HOST/v1/slots?from=405445570&limit=500' \
  -H 'X-API-Key: YOUR_KEY'

Inspect a Slot

Field
Description

packet_count

Total shred packets captured for this slot

variant_histogram

Breakdown by shred type

first_recv_ns / last_recv_ns

Capture time window (unix nanoseconds)


Replaying Shreds

Creating a Replay Job

Packet Selection

Use the selector object to choose which packets to replay.

By Slot Range

By Specific Slots

By Time (Last N Seconds)

Replays the last 5 minutes of captured data.

By Exact Time Range

Time values are unix nanoseconds. You can find these from the slot inspect or stats endpoints.

With Slot Padding

Include neighboring slots around your selection:

Selects slots 405445595 through 405445605.

Filter by Shred Type

Value
Description

"all"

All shred types (default)

"data_only"

Only data shreds

"coding_only"

Only coding/FEC shreds

Only Valid Shreds

Excludes packets that failed shred header parsing.

Timing Modes

Original Timing

Preserves the original inter-packet delays. Gaps larger than 1ms are accurate within 10%. Use this to simulate real network conditions.

Scaled Timing

Speed
Effect

2.0

2x faster than original

0.5

Half speed (slow motion)

10.0

10x faster

Max Speed

Sends all packets as fast as possible while preserving order. No inter-packet delay.

Dry Run

Preview how many packets would be replayed without sending anything:

Checking Job Status

Status
Meaning

queued

Waiting to start

running

Sending packets

completed

All packets sent

failed

Error occurred (see error field)

cancelled

Cancelled by user

Cancelling a Job


Ordering Guarantees

  • Packets are sent in the exact order they were originally captured (sorted by receive timestamp, then sequence number)

  • Payloads are byte-identical to the original UDP packets — no modification


Typical Workflow

1

Browse available slots

GET /v1/slots?from=X&to=Y → see what's captured

2

Inspect the slots you care about

GET /v1/slots/405445570 → packet count, variant breakdown

3

Dry run to preview

POST /v1/replay/jobs → dry_run: true, see selected_count

4

Replay for real

POST /v1/replay/jobs → dry_run: false, packets sent to your target

5

Monitor progress

GET /v1/replay/jobs/{id} → watch sent_count increase


Rate Limits

API requests are rate-limited per key. If you exceed the limit, you'll receive a 429 Too Many Requests response. Wait briefly and retry.

Health Check

Returns {"ok": true} — no authentication required.


API Reference

Method
Path
Auth
Description

GET

/healthz

No

Health check

GET

/v1/slots

API Key

List available slots (?from=X&to=Y&limit=N)

GET

/v1/slots/{slot}

API Key

Inspect a specific slot

POST

/v1/replay/jobs

API Key

Create a replay job

GET

/v1/replay/jobs/{id}

API Key

Get job status

POST

/v1/replay/jobs/{id}/cancel

API Key

Cancel a job

Last updated