The API
Three calls: read the fee, send the transaction, read the result. Quickslot accepts legacy, v0 and v1 transactions, and it only ever receives them signed.
Delivery routes are not connected yet, so /v1/send answers 503 delivery_not_open for now. Keys and fee data work today.
Read the fee
curl "$QUICKSLOT_URL/v1/fees?accounts=$WRITABLE_ACCOUNTS"
accounts is optional: up to 128 base58 keys, comma separated. Pass the accounts your transaction writes to, because fees are set per account when those accounts are busy.
| Field | Meaning |
|---|---|
microLamportsPerUnit | p50, p75 and p90 of recent prices: the higher of your accounts’ market and the network sample. |
recommended | The price to sign at. Currently p75. |
blocksSampled | Recent blocks behind the network sample. |
slot | Latest confirmed slot, or null if not known. |
Legacy and v0 transactions set this price with a Compute Budget instruction. A v1 transaction states a total fee in lamports instead, so multiply the price by your compute unit limit and divide by 1,000,000.
Send a transaction
curl $QUICKSLOT_URL/v1/send \
-H "Authorization: Bearer $QUICKSLOT_KEY" \
-H "Content-Type: application/json" \
-d '{
"tx": "'$SIGNED_TX'",
"maxFeeLamports": '$FEE_CAP',
"deadlineSeconds": '$DEADLINE'
}'
| Field | Meaning |
|---|---|
tx | A signed transaction, base64. Send this or ladder. |
ladder | Up to five signed versions of one transaction at different fees, base64. |
maxFeeLamports | The most the network may charge. Anything that could pay more is refused before sending. |
deadlineSeconds | How long to keep trying, 1 to 120. |
wait | Optional. false answers 202 at once; read the result from /v1/deliveries/{id}. |
skipSimulation | Optional. true skips the check that the transaction would succeed as signed, for one that depends on another still in flight. |
Sending the same transaction again on the same key returns the same delivery, so retrying a dropped request is safe.
Ladders
Every version must advance the same durable nonce, which is what stops two versions from both landing. Versions may differ only in their fee settings. Quickslot starts at the lowest version that meets recent prices, moves up as the deadline nears, and never moves back down. Each version has to fit under maxFeeLamports.
Read the result
/v1/send answers when the delivery ends. GET /v1/deliveries/{id} returns the same fields at any time, and GET /v1/deliveries lists recent ones.
| Field | Meaning |
|---|---|
status | pending, landed, failed (in a block, but failed there) or expired. |
signature | The signature that reached a block, or null. |
signatures | Every signature Quickslot may send for this delivery. |
slot | The slot it reached, or null. |
feePaidLamports | What the network charged, read from the chain. Null if the chain had not reported it yet. |
serviceFeeLamports | Quickslot’s fee. Zero unless status is landed. |
attempts | Times it was sent across the routes. |
landedInMs | Time from accepting the request to seeing it confirmed. |
mayStillLand | true on an expired delivery whose transaction is still valid. Quickslot has stopped sending, but copies already sent can land. Check signatures before you send a replacement. |
error | Why it did not land, or null. |
Landed means confirmed commitment. Wait for finalized yourself if your app needs it.
Refusals
A refused request is never sent and never charged. It answers { "error": { "code", "message" } }.
| Code | Meaning |
|---|---|
invalid_key | Missing or revoked API key. |
invalid_transaction | The bytes are not a readable transaction. |
invalid_signature | A required signature is missing or wrong. |
over_fee_cap | This transaction could pay more than maxFeeLamports. |
simulation_failed | It would fail as signed. detail holds the error and logs. |
ladder_needs_durable_nonce | The versions do not share one durable nonce. |
ladder_mismatch | The versions differ in more than their fee, or two share a price. |
too_many_in_flight | This key has too many deliveries running. Wait for one to end. |
delivery_not_open | Delivery routes are not connected yet. |
Keys and usage
Create a key in the console or with POST /api/keys. It is shown once and stored only as a hash. GET /v1/usage returns your counts and fee totals.