Skip to content

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.

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).

Terminal window
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"
}]
}'
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
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.