Authentication
GET or HEAD /healthz on the bare base URL needs no key and returns {"status":"ok","service":"Bifrost Transaction Proxy"}. A key-prefixed /<key>/healthz returns 401. Use /healthz on a kept-alive connection to hold it open between sends; the public listener closes idle connections after about 30 seconds.
Route index
Every Bifrost-enabled location serves the same catalog.
What Bifrost checks before forwarding
Bifrost decodes each transaction in the body and rejects the request with400 when:
- the transaction count is outside the route’s bound in the table above;
- a transaction is not valid base64 or does not decode as a Solana transaction;
- a LunarLander binary batch member is outside 66–1232 bytes;
- the transaction pays no tip, or a tip below the provider’s minimum, to a recognized tip address (see each provider page).
400 body names the reason:
invalid_json, invalid_params, missing_field, unsupported_route, unsupported_method, unsupported_content_type, invalid_base64, invalid_transaction, invalid_transaction_size, invalid_binary_batch, invalid_tip_address, invalid_transaction_count, tip_too_low, priority_fee_too_low. bloXroute and BlockRazor JSON routes return the same message under a top-level error object; plain-text routes return it as text.
Errors Bifrost returns itself
Bifrost has no rate limit of its own; a
429 comes from the provider and is passed through. Bifrost never retries and never falls back to another provider.
Reading a response
A2xx means Bifrost completed the HTTP call to the provider. Parse the body: a JSON-RPC error can arrive inside a 200. A returned signature means the provider accepted the transaction, not that it landed. Track the signature through ThorEdge RPC until it reaches your commitment or its blockhash expires.