Skip to main content
Three endpoints handle transactions on the Sundial L2: POST /submit enqueues a signed transaction for processing, GET /tx retrieves a single transaction by hash, and GET /txs returns paginated address history. Together they cover the full lifecycle of an L2 transaction from submission through confirmation.
These endpoints are available on full (monolith) nodes. POST /submit is also served by api-role nodes in horizontally scaled deployments. If you are connecting to a public api-role endpoint, /tx and /txs may not be reachable — use the full node URL for read operations.

POST /submit — Submit an L2 Transaction

Submit a fully built and signed transaction to the Sundial L2 processing queue. The node reads the raw CBOR hex from the request body, validates it, and enqueues it for mempool insertion.
POST /submit accepts the transaction CBOR as a raw text body, not a JSON object. Send Content-Type: text/plain and place the hex string directly in the body — do not wrap it in a JSON envelope.

Request

Example

Responses

The id field is a Redis stream entry ID, not a transaction hash. Compute the transaction hash client-side from the CBOR if you need it for tracking:

Processing Pipeline

After a successful enqueue, a background worker pool picks up the transaction from the Redis stream and:
1

Batch claim

Workers claim batches from the Redis consumer group, automatically reclaiming stale-pending entries.
2

Parse

Each CBOR hex string is parsed into an L1 transaction in a worker-thread pool.
3

Validate

The transaction hash is computed, spent inputs and produced outputs are extracted, and the transaction is validated — including a minimum fee check against minFeeA: 44 and minFeeB: 155381.
4

Insert

Valid transactions are inserted into the mempool ledger and the stream entry is acknowledged. Invalid transactions are rejected and dead-lettered after the configured maximum delivery attempts — they do not affect other in-flight submissions.
Submit the same transaction twice safely — at-least-once queue semantics with nonce-UTxO anti-replay prevent double-processing. Use GET /tx to verify inclusion after submission.

Building a Transaction for Submission

The node has no transaction-building endpoint — you must build and sign the transaction yourself before calling POST /submit. Use a custom Provider that sources UTxOs from GET /utxos and routes submission to POST /submit:
Standard Lucid providers (Blockfrost, Kupmios, Maestro) talk to L1 — they are unaware of the Sundial L2 ledger. Always use a custom provider that routes UTxO lookups to GET /utxos and submission to POST /submit.

GET /tx — Look Up a Transaction

Retrieve the raw CBOR of a single transaction by its hash. The node searches the mempool first, then immutable (confirmed) storage.

Query Parameters

string
required
The 64-character hex transaction hash to look up. Must be a valid hex string of exactly 64 characters.

Example

Responses

The tx field contains the full CBOR-encoded transaction as a hex string. Decode it with any CML-compatible library.

GET /txs — Query Address Transaction History

Return a paginated list of transaction CBORs for a given address, sourced from the L2 address history database.

Query Parameters

string
required
Bech32 address. On testnet this must start with addr_test1. The address must parse successfully and carry a valid payment credential.
integer
Maximum number of results to return. Defaults to 100. Values above 500 are silently clamped to 500. Must be a non-negative integer ≥ 1 if supplied.
integer
Zero-based offset for pagination. Defaults to 0. Must be a non-negative integer if supplied.

Example

Responses

Each entry in txs is a hex-encoded CBOR transaction. The hasMore field is true when exactly limit rows were returned, indicating additional pages may exist. Fetch the next page by incrementing offset by limit.

Pagination Example