Ingest endpoints
After this page you can submit SDK envelopes directly — useful for custom SDKs or non-JS clients — and understand exactly what the official SDK sends on your behalf.
POST /v1/ingest
Section titled “POST /v1/ingest”Submit a batch of client envelopes. Requires an API key (in the x-api-key header, or in the
request body as apiKey — the SDK sends it in the body).
curl -X POST http://127.0.0.1:8790/v1/ingest \ -H "x-api-key: wt_…" \ -H "Content-Type: application/json" \ -d '{ "envelopes": [{ "sig": "4h2K…", "program": "DemoAMM…", "blockhash": "9WzD…", "lastValidBlockHeight": 312441950, "sentAt": 1767225600000, "rpcHash": "a1b2c3d4e5f60718", "rpcLabel": "public", "walletAdapter": "phantom", "kind": "send", "preflightError": null, "simulationLogs": [], "payer": "9xQe…", "sdkVersion": "0.1.0" }] }'Envelope fields
Section titled “Envelope fields”| Field | Type | Notes |
|---|---|---|
sig |
string | null |
null when preflight failed before send |
program |
string |
Tracked program the attempt targeted |
blockhash |
string |
Blockhash the tx was built against |
lastValidBlockHeight |
number |
Expiry point — powers expired_blockhash classification |
sentAt |
number |
Client Unix millis of the attempt |
rpcHash |
string |
SHA-256 (hex, first 16 chars) of the RPC origin — never the URL |
rpcLabel |
string |
Coarse label when derivable: "helius", "quicknode", "public"… |
walletAdapter |
string |
Adapter name |
kind |
"send" | "preflight" |
"preflight" = failed simulation, never sent |
preflightError |
string | null |
Error text when kind = "preflight" |
simulationLogs |
string[] |
Logs on preflight/simulation failure |
payer |
string |
Pubkey, or salted hash under privacy: "hash" |
sdkVersion |
string |
Reporting SDK version |
Responses
Section titled “Responses”| Status | Meaning |
|---|---|
202 |
Batch accepted ({ "accepted": n }) — ingestion is async |
400 |
Schema violation; body pinpoints the field |
401 |
Missing/invalid key |
429 |
Over rate limit — the SDK backs off automatically |
Each accepted envelope is one event — the unit behind every rate. Events are not a billing meter; plans are a flat per-program subscription.