Concise discovery index
Start with the compact XferAPI context
A focused product and documentation map for answer engines, AI assistants, crawlers, and retrieval pipelines that need authoritative orientation without the complete API reference.
What it contains
- Product boundaries and core facts
- Canonical documentation URLs
- Retry and idempotency rules
- A link to the complete machine reference
Preview the exact source
# XferAPI
> XferAPI is a hosted HTTPS balance API for points, usage credits, virtual currency, and other app-defined value. It provides ledgers, accounts, balanced N-to-M transfers, durable records, time-aware balances, and whole-transfer reversal.
## Canonical product facts
- A **workspace** is the collaboration, membership, permissions, billing, quota, and shared API rate-limit boundary.
- A **ledger** is an isolated accounting boundary for accounts, assets, actions, scenes, platform accounts, transfers, records, and API keys.
- A **transfer** moves one or more assets from `from_accounts` to `to_accounts`. Totals must balance independently for every asset.
- A ledger-scoped API key selects the ledger for every public `/v1` request. Public API paths and request bodies do not include an internal ledger ID.
- Every `/v1` response has a semantic string code. Business outcomes use HTTP 200; protocol and infrastructure failures may use non-2xx. Only `ok` is success, and errors use `data: null`. Stable codes are listed in the API reference and `llms-full.txt`.
- The idempotency identity is the caller-owned, case-sensitive `(transfer_id, scene)` pair within one ledger.
- `transfer_id` has one syntax for every operation. Prefixes such as `adj_` and `sys_` are generation conventions only; they reserve no namespace and change no behavior.
- Asset, action, and scene codes are lowercase `snake_case` values configured on the ledger before a transfer is sent.
- The exact scene `sys_expire` is reserved for XferAPI-generated expiration recycling and cannot be configured or submitted by public create or reversal requests. Generated expiration history remains visible and filterable.
- Public request input rejects only the exact system account ID `0` in addition to ordinary account-ID syntax rules. Generated expiration Transfer and Record responses may contain account `0`.