0Bit Documentation

Changelog

Version history and versioning policy for the gated early-access 0Pools partner API.

0Pools API pages are for approved headless partners. They cover the partner-visible quote, transact, status, trade, and balance lifecycle only.

The 0Pools partner API is versioned by a single date, carried in the spec's version field. This page records what each version exposes and how changes are made. The current version is 2026-05-25.

Gated early access

The 0Pools partner liquidity API is gated early access, provisioned per partner by 0Bit. It is not generally available and not self-serve. The surface may change before general availability. Read limits, fees, networks, and order sizes at runtime from GET /pools/{id}/capabilities rather than hard-coding them.

Early access — 2026-05-25

The first partner-facing version of the 0Pools API. It provides the full on-ramp quote-to-settlement lifecycle plus partner-scoped reads. For field-level contracts, follow the linked endpoint pages — this entry is a summary, not a re-doc.

Discovery and capabilities

  • List entitled poolsGET /pools. Publishable-key discovery of the pools this partner is entitled to; pool ids are pair-shaped (for example EUR-USDT).
  • Pool capabilitiesGET /pools/{id}/capabilities. Per-pool supported networks, sides, tier, draw fee, spread cap, and order limits. Read this instead of hard-coding values.

Quote lifecycle

  • Create a quotePOST /pools/{id}/quote. Firm (executable, quoteId + ~15s expiresAt) or indicative (price-only, no quoteId) quotes. Fail-soft: an unquotable pool returns HTTP 200 with available: false and an unavailableReason, never a quoteId.
  • Retrieve a quoteGET /pools/quotes/{quoteId}. Read a quote's current state (active, consumed, expired, rejected).
  • Reject a quotePOST /pools/quotes/{quoteId}/reject. Release an unused firm quote. Not idempotent — a second reject conflicts.

Transact and settlement

  • Execute against a quotePOST /pools/{id}/transact. Idempotent: an Idempotency-Key header is required and execution is also idempotent on the quoteId.
  • Get transaction statusGET /pools/transactions/{quoteId}. The status poll advances settlement (idempotently). The terminal returned status surfaces here.
  • On-ramp EVM delivery — purchased crypto is delivered to a locked EVM address captured on the quote; the customer needs only a single EVM wallet address.

Reconciliation reads

Balance and funding

  • Read balanceGET /pools/{id}/balance. Partner-visible availability, tier, allowed pools, and balance.
  • Get fundingGET /pools/funding. Funding instructions for a partner balance.
  • Read ledgerGET /pools/ledger. Cursor-paginated balance entries (payin_credit, buy_debit, buy_refund).

Cross-cutting behavior

  • Unified error envelope — every error carries { type, code, message, request_id, doc_url, statusCode } and an X-Request-Id response header. Branch on code/type/statusCode, never on the free-form message. See Errors.
  • Denial codes403 responses carry a machine-readable code: pools_not_enabled, pool_access_suspended, kyc_not_approved, pool_not_allowed, or key_mode_mismatch. Cross-tenant access is 404, never 403.
  • Cursor pagination — list reads return nextCursor / hasMore; page by passing the last id as cursor.
  • The returned status — a settled trade whose downstream payout or delivery could not complete is automatically and idempotently refunded to your partner balance. It surfaces via the status poll and the ledger only — there is no returned webhook.
  • Webhooks — three terminal events (pool.transaction.settled, pool.transaction.failed, pool.transaction.released), signed with a Gate-Signature header, deduped on eventId, delivered at least once with backoff and a dead-letter store. See 0Pools webhooks.

On-ramp first; off-ramp gated

The on-ramp (buy) path is the supported flow in this version. The off-ramp (sell) path is gated — POST /pools/{id}/transact for an off_ramp quote deny-closes with 501 until your account is enabled for it.

Versioning

The API version is the date in the spec's version field (currently 2026-05-25). The model below tells you what to expect from future changes and how to build defensively.

Additive vs breaking

Change typeExamplesHow it ships
AdditiveNew optional response fields, new enum members on documented types, new endpoints.May appear at any time without a version bump. Clients must tolerate them.
BreakingRemoving or renaming a field, changing a field's type, narrowing existing behavior.Tied to a version change and communicated ahead of the switch.

Build forward-compatible clients

Treat unknown fields as a normal, expected condition: ignore fields you do not recognize, and branch only on the documented type / code / status values. Do not fail a parse, reject a payload, or block a flow because a new field or a new enum member appeared. This keeps your integration working across additive changes with no code change.

How changes are announced

  • Additive changes are reflected in these reference pages as the surface evolves; the linked endpoint pages remain the field-level source of truth.
  • Breaking changes are coordinated with approved partners during account review before they take effect — they are not made silently.
  • This changelog records the partner-facing surface per version.

Stability posture

The 0Pools partner API is early access: per-partner, operator-provisioned, not generally available, and not self-serve. The surface may change before general availability. Limits, economics, corridors, assets, and rails are confirmed during account review rather than fixed here — read them at runtime from pool capabilities.

Public boundary

This reference covers partner-visible discovery, quote, transact, status, trade, and balance behavior. Liquidity operations, routing internals, provider details, reserve logic, and runbooks are outside the public API contract.

On this page