Products

PaymentsSmart contractsAttributionTokenizationTreasury & walletsComplianceGovernanceSecurity

Solutions

Platforms & marketplacesAgencies & service firmsEnergy & infrastructureAI agents & autonomous commerceReal-world assets

Developers

DocumentationAPI referenceNetwork statusBridge & webhooks

Company

Pricing Company Contact sales Sign in

XODIAK / Developers

Documentation

An HTTP RPC node, a signing step, and a bridge into your own database. That is the whole integration surface.

Quickstart

Four calls to a settled transaction.

Create an account, fund it, sign, submit. The node verifies the signature, the balance and the nonce before the transaction is admitted to the mempool, so a malformed transaction fails at submit rather than silently later.

  • Create an account and receive an xdk1 address
  • Sign the transaction hash with your ML-DSA-65 key
  • Submit to the mempool and get a transaction hash back
  • Read the transaction once its block is committed
Full API reference
quickstart.sh
# 1. create an account
curl -X POST "$NODE/account/create"

# 2. inspect it
curl "$NODE/account/xdk1czx..."

# 3. submit a signed transaction
curl -X POST "$NODE/tx/submit" \
  -H "content-type: application/json" \
  -d '{"type":"transfer","to":"xdk1...",
       "amount":"250000000","nonce":3,
       "signature":"..."}'

# 4. read it back
curl "$NODE/tx/0x9c41..."

Libraries.

The node speaks plain HTTP with JSON bodies, so anything that can make a request can integrate. There is no proprietary transport and no required SDK.

TypeScript and Deno

The node itself is TypeScript on Deno. The signing and address helpers it uses are the same ones you would call from a client.

Anything with HTTP

Python, Go, Rust, Java, a shell script. If you can POST JSON and hold a key, you can submit a transaction.

Postgres reads

If you would rather not poll a node, read the mirrored state out of Postgres and let the bridge keep it current.

A long data center corridor at night with rows of dark cabinets and cool blue indicator light.
Bridge

The chain is the source of truth. Your database is the read replica.

Applications should not have to talk to a node to render a screen. On every committed block the bridge writes blocks, transactions, accounts and chain state into Postgres, and your application reads normal rows with normal indexes.

The direction matters. Nothing in the replica is authoritative, so a corrupted or stale replica is a rebuild rather than a loss.

  • Chain writes forward into Postgres on every committed block
  • Application reads never block on consensus
  • Replica is disposable and rebuildable from the chain
  • Row-level security applies to the mirrored tables

Errors.

Every rejection names the check that rejected it. There is no generic failure.

ConditionWhen it firesWhat to do
invalid_signatureThe signature does not verify against the transaction hash and the account's public key.Re-derive the hash. Confirm you signed the hash, not the plaintext body.
bad_nonceThe nonce is not the account's next expected value.Read the account, use the returned nonce, resubmit.
insufficient_balanceThe account cannot cover the amount plus fees.Fund the account, or reduce the amount.
tier_insufficientThe account's verification tier does not permit this action.Raise the tier through the compliance flow.
limit_exceededThe transaction exceeds the limit configured for the tier.Split the transaction, or raise the tier.
no_proposerNo validator is currently eligible to propose a block.This is a network condition, not a client error. Check network status.

Ready to get started?

Create an account instantly, or talk to us about a settlement design for your business.

See what you'll pay

Per-settlement pricing tied to what actually moves. No seat licences, no hidden spread.

Pricing details

Start building

Open an account, sign a transaction, read a block. About ten minutes end to end.

Integration options