Entitled pool network
How 0Pools exposes only the liquidity lanes a partner is approved to see and use.
The entitled pool network is the partner-specific view of 0Pools. It is not a global order book and it is not a public list of all possible liquidity. Each partner sees the pools 0Bit has approved for that organization, environment, tier, and product use case.
Network model
What entitlement includes
| Entitlement field | Meaning |
|---|---|
partnerId | The organization identity behind the verified key. |
status | Active/suspended account state. |
kycStatus | Whether the organization is approved to transact. |
tier | Pricing tier and commercial controls. |
allowedPools | Exact pool ids the partner can use. |
| webhook settings | Optional terminal event delivery configuration. |
Why not show every pool?
Showing every theoretical pool would create bad user experiences and compliance risk. A pool can be technically possible but not approved for a partner, country, product, side, asset, network, limit, or funding model.
0Pools deliberately makes discovery partner-scoped:
- A partner sees only allowed pools.
- A cross-tenant object should not reveal another partner's resource.
- Runtime availability is separate from entitlement.
- A pool can be entitled but temporarily unavailable.
Before and after
| Before entitlement-driven pools | With 0Pools entitlement |
|---|---|
| UI lists corridors from a static config file. | UI lists corridors returned for that partner. |
| Unsupported pairs reach execution and fail late. | Unsupported pools are never displayed. |
| Support cannot tell whether failure is product or market. | Entitlement and availability are separate states. |
| Partner branches logic by region manually. | Account configuration controls approved lanes. |
Implementation pattern
- Call discovery when the user starts a flow.
- Cache briefly, but revalidate before quote.
- Hide absent pools.
- Disable unavailable pools with a clear message.
- Store the pool id used for every quote and trade.
Example UI copy
Use account-safe wording:
- "This route is not enabled for your account."
- "This pool is temporarily unavailable."
- "Refresh to check current liquidity."
Avoid:
- "0Bit has no inventory."
- "Provider X is down."
- "Treasury rebalance pending."
Those statements expose internal operations and may be wrong by the time the user reads them.
Network slice example
The network can support multiple products and partners, but each integration sees only its approved slice. That is what makes 0Pools infrastructure instead of a public liquidity marketplace.
Example discovery result shape
{
"environment": "live",
"partner_id": "partner_123",
"pools": [
{
"pool_id": "EUR-USDT",
"status": "enabled",
"capabilities_url": "/v1/pools/EUR-USDT/capabilities"
},
{
"pool_id": "EUR-USDC",
"status": "enabled",
"capabilities_url": "/v1/pools/EUR-USDC/capabilities"
}
]
}Use the API reference for exact field names. The important product rule is that discovery is partner-scoped and environment-scoped.
Why entitlement is social infrastructure
Open-ended access to liquidity can create bad outcomes: unsupported corridors, unclear compliance responsibilities, stale rates, and users receiving confusing errors. Entitlement gives 0Bit a way to expose shared liquidity responsibly:
- Partners see only reviewed lanes.
- Product teams can launch a corridor deliberately.
- Support knows whether a problem is access, capability, or runtime availability.
- Finance can reconcile each movement against the pool that was actually used.
- 0Bit can expand the network without making every lane visible to every account.
Developer checklist
- Never hard-code a pool just because it exists in documentation.
- Store the environment with every quote and trade.
- Re-run discovery when switching between sandbox and live.
- Treat missing pools as configuration state, not user error.
- Escalate unexpected pool visibility immediately.
Entitlement implementation contract
Entitlement is not just a UI filter. It is an authorization boundary that decides which pools the partner can discover, quote, execute, monitor, and reconcile.
| Entitlement field | Product use | Failure if missing |
|---|---|---|
pool_id | Shows the lane and joins quote/trade records. | Partner cannot safely request a quote. |
side | Controls buy/sell rendering. | UI may offer unsupported actions. |
networks | Controls destination address and chain selection. | User may submit an unreachable destination. |
min_amount / max_amount | Validates before quote. | Backend creates avoidable quote failures. |
status | Enables or disables the lane. | Disabled lanes appear available. |
review_required | Gates production launch. | Partner assumes sandbox access equals live access. |
Entitlement snapshot example
{
"partner_id": "partner_01H",
"environment": "live",
"pool_id": "EUR-USDT",
"status": "active",
"sides": ["buy"],
"networks": ["ethereum", "polygon"],
"limits": {
"min_source_amount": "50.00",
"max_source_amount": "25000.00"
},
"funding_required": true,
"webhook_required": true
}Entitlement tests
| Test | Expected behavior |
|---|---|
| Use test key against live pool. | Mode mismatch or denied access. |
| Request a pool not returned by discovery. | Backend rejects before showing user a quote. |
| Request unsupported side. | UI hides action; server returns controlled error if forced. |
| Entitlement becomes suspended. | Cached UI disables lane after refresh and support sees reason. |
Implementation depth
This page is about using entitlements as the shape of the liquidity network. For developers, the durable boundary is simple: your product should depend on only the pools, sides, limits, and networks approved for the account; it should not depend on the full universe of available liquidity and how it is sourced. That boundary is what lets 0Pools improve liquidity operations without forcing every partner to rebuild product code.
Product scenario
Two partners log in on the same day. One sees EUR-USDT buy only, another sees EUR-USDT and EUR-USDC with different limits. Both products render from discovery instead of assuming a global catalog.
Before and after in practice
| Before 0Pools | With 0Pools |
|---|---|
| A static asset list makes every partner think every corridor is live, creating failed orders and support tickets. | Each product reads the account-specific pool graph at runtime and only displays valid actions. |
| Product teams infer liquidity behavior from provider-specific screens or manual notes. | Product teams branch on 0Pools objects: pool, quote, trade, balance, webhook, and ledger. |
| Support asks engineering to reconstruct state from logs. | Support starts from request id, quote id, trade id, event id, and ledger id. |
System flow
Records to keep
| Record | Why it matters | Example |
|---|---|---|
allowed_pools | The pool ids this account can use. | [EUR-USDT] |
kyc_state | Whether the account is allowed to transact. | approved |
tier | Pricing and limit context. | pay_as_you_go |
capability_version | Lets you compare UI state to discovery time. | 2026-06-28T... |
A useful implementation stores these records before adding optional analytics. Analytics can be rebuilt from durable state; missing ids usually cannot be reconstructed after a customer-impacting failure.
Example product record
{
"product_area": "entitled-pool-network",
"partner_reference": "partner_order_123",
"pool_id": "EUR-USDT",
"quote_id": "pq_test_123",
"transact_id": "pt_test_456",
"status": "reserved",
"request_id": "req_01HZY0POOLS",
"reconciliation_state": "open"
}This record is intentionally partner-facing. It references 0Pools objects and your own product ids, but it does not include private liquidity routes, treasury balances, raw provider payloads, or customer secrets.
Failure modes and recovery
| Failure mode | Product response |
|---|---|
| Cross-tenant pool id | Treat as denied or not found; never guess. |
| Suspended account | Hide quote actions and show account-level state. |
| Tier mismatch | Refresh capabilities before quote. |
| Environment mismatch | Use test keys in sandbox and live keys in production only. |
Use-case patterns
| Pattern | How 0Pools helps |
|---|---|
| Partner dashboard | Render only entitled lanes. |
| Mobile app config | Fetch capabilities on app start. |
| Risk gating | Disable flows before a quote is attempted. |
Developer checklist
- Read runtime discovery and capabilities before rendering enabled actions.
- Create firm quotes only when the user is ready to accept the terms.
- Execute from your server with an idempotency key.
- Treat webhooks and status reads as the source of truth for settlement state.
- Reconcile by durable ids first, then by amount and timestamp.
- Do not branch product behavior on provider names, route names, reserve balances, or treasury assumptions.