Quickstart
Make your first API call in 30 seconds. No signup, no API key, no SDK required.
1. Get a quote
# Quote 0.1 ETH execution — returns fee + validity window
curl -X POST https://api.nano-labs.io/v1/quote \
-H "Content-Type: application/json" \
-d '{
"chain": "ETH",
"asset": "ETH",
"amount": "100000000000000000"
}'
// Response
{
"ok": true,
"quote_id": "66976b7bd9e40569b912000cfc583fd1",
"chain": "ETH",
"asset": "ETH",
"amount": "100000000000000000",
"fee_bps": 8,
"protocol_fee": "80000000000000",
"net": "99920000000000000",
"expires_at": 1771959307,
"valid_seconds": 30,
"est_execution_seconds": 12,
"finality": "~12s block, finalized in ~2 min",
"permissionless": true
}
2. Execute the quote
curl -X POST https://api.nano-labs.io/v1/execute \
-H "Content-Type: application/json" \
-d '{
"quote_id": "66976b7bd9e40569b912000cfc583fd1"
}'
3. Track the intent
curl https://api.nano-labs.io/v1/intent/<intent_id>
Authentication
NanoStack is permissionless by default. All core endpoints work without an API key.
Why get an API key?
- Higher rate limits (100/min vs 20/min)
- Intent attribution (track your executions)
- Revenue analytics
Register (self-service)
curl -X POST https://api.nano-labs.io/v1/register \
-H "Content-Type: application/json" \
-d '{"name": "my-app", "email": "[email protected]"}'
Returns a key in nano_live_{32hex} format. Pass it as:
curl -H "x-api-key: nano_live_abc123..." https://api.nano-labs.io/v1/quote ...
Pricing
Fee is 8-15 basis points, locked at quote time for 30 seconds.
| Amount | Fee (bps) | On $10,000 |
|---|---|---|
| Any amount | 10 (base) | $10.00 |
| > $10,000 equiv | 9 | $9.00 |
| > $100,000 equiv | 8 | $8.00 |
Supported Chains
Additional L2s: zkSync, Linea, Scroll, Blast, Mantle, Gnosis, Fantom, Sei
Errors
All errors return JSON with ok: false and an error field.
{
"ok": false,
"error": "quote_expired",
"message": "Quote validity window (30s) has elapsed. Request a new quote."
}
| Error | HTTP | Meaning |
|---|---|---|
quote_expired | 400 | Quote older than 30 seconds |
insufficient_balance | 400 | Wallet guard: amount exceeds available balance |
unsupported_chain | 400 | Chain not in supported list |
unsupported_asset | 400 | Asset not recognized on specified chain |
rate_limited | 429 | Too many requests (20/min without key, 100/min with key) |
signer_unavailable | 503 | Signer daemon temporarily unavailable |
execution_failed | 500 | On-chain transaction failed |
POST /v1/quote No Auth
Request Body
| Field | Type | Description | |
|---|---|---|---|
chain | string | required | Target chain: ETH, BTC, SOL, BASE, ARB, OP, etc. |
asset | string | required | Asset symbol: ETH, BTC, USDC, etc. |
amount | string | required | Amount in smallest unit (wei, satoshi, lamports) |
destination_address | string | Destination wallet address (optional) |
Response
| Field | Type | Description |
|---|---|---|
ok | boolean | Success flag |
quote_id | string | Unique quote identifier — pass to /v1/execute |
fee_bps | integer | Fee in basis points (8-15) |
protocol_fee | string | Absolute fee in smallest unit |
net | string | Amount after fee deduction |
valid_seconds | integer | Quote validity window (30) |
est_execution_seconds | integer | Estimated chain settlement time |
finality | string | Human-readable finality description |
permissionless | boolean | Always true |
Example
curl -X POST https://api.nano-labs.io/v1/quote \
-H "Content-Type: application/json" \
-d '{"chain":"ETH","asset":"ETH","amount":"100000000000000000"}'
{
"ok": true,
"quote_id": "66976b7bd9e40569b912000cfc583fd1",
"fee_bps": 8,
"protocol_fee": "80000000000000",
"net": "99920000000000000",
"valid_seconds": 30,
"est_execution_seconds": 12,
"finality": "~12s block, finalized in ~2 min",
"permissionless": true
}
POST /v1/execute No Auth
Request Body
| Field | Type | Description | |
|---|---|---|---|
quote_id | string | required | Quote ID from /v1/quote response |
chain | string | Chain (alternative to quote_id for direct execution) | |
asset | string | Asset symbol | |
amount | string | Amount in smallest unit | |
destination_address | string | Destination wallet |
Response
| Field | Type | Description |
|---|---|---|
ok | boolean | Success flag |
intent_id | string | Unique intent identifier for tracking |
txid | string | On-chain transaction hash |
path | string | Execution path taken |
fee | string | Fee charged |
status | string | provisional, settled, or failed |
GET /v1/intent/{id} No Auth
Path Parameters
| Param | Type | Description |
|---|---|---|
id | string | Intent ID from /v1/execute response |
POST /v1/register No Auth
Request Body
| Field | Type | Description | |
|---|---|---|---|
name | string | required | Your application name |
email | string | required | Contact email |
Response
{
"ok": true,
"api_key": "nano_live_a1b2c3d4e5f6...",
"tier": "standard",
"rate_limit": "100/min"
}
GET /tokens No Auth
curl https://api.nano-labs.io/tokens
{
"ok": true,
"count": 83,
"tokens": [
{"symbol":"USDC","name":"USD Coin","chain":"eth","decimals":6,"contract":"A0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},
{"symbol":"USDT","name":"Tether USD","chain":"eth","decimals":6,"contract":"dAC17F958D2ee523a2206206994597C13D831ec7"},
...
]
}
GET /v1/status No Auth
curl https://api.nano-labs.io/v1/status
{
"ok": true,
"protocol": "NanoStack",
"service": "nanolink",
"integrity_root": "0x...",
"total_fees": "1543700258367523"
}
GET /health No Auth
curl https://api.nano-labs.io/health
{"ok": true, "service": "nanolink"}
GET /v1/telemetry/head No Auth
Query Parameters
| Param | Type | Default | Description |
|---|---|---|---|
n | integer | 10 | Number of frames (max 100) |
Response (single frame)
{
"seq": 12001,
"trace_id": "1af593c6...",
"chain": 8453,
"chain_name": "base",
"asset": "USDC",
"status": "settled",
"gross": "100000000000",
"fee": "90000000",
"net": "99910000000",
"fee_bps": 9,
"txid": "0x4f8b868...",
"state_root": "acc2ed93...",
"settlement_hash": "cc7b2abb..."
}
GET /v1/telemetry/range No Auth
GET /v1/telemetry/proof_snapshot No Auth
GET /v1/revenue/summary No Auth
curl https://api.nano-labs.io/v1/revenue/summary
{
"ok": true,
"total_fees": "1543700258367523",
"integrity_root": "0x...",
"source": "wal"
}
GET /v1/integrity/root No Auth
GET /v1/ofi/venues No Auth
curl https://api.nano-labs.io/v1/ofi/venues
{
"ok": true,
"venues": [
"uniswap_v3", "aerodrome", "sushiswap_v3", "baseswap",
"pancakeswap_v3", "curve", "balancer_v2", "maverick_v2",
"woofi", "1inch", "0x", "paraswap", "odos", "kyberswap"
],
"count": 14
}
GET /v1/ofi/volume No Auth
GET /v1/ofi/fees No Auth
Bot Integration
NanoStack exposes a structured bot API for automated integrations.
| Endpoint | Description |
|---|---|
GET /v1/bots/signal | Real-time protocol state: receipts, volume, success rate, fees |
GET /v1/bots/tick | Single-frame bot poll endpoint (WS-equivalent payload) |
GET /v1/bots/schema | Full integration schema for automated discovery |
GET /v1/bots/capabilities | Protocol capabilities and supported operations |
GET /v1/bots/signals | Available signal endpoints |
GET /v1/bots/integrity | Market integrity policies |
GET /v1/bots/verifier | External verifier specification |
GET /v1/bots/schema_hash | SHA256 hash of schema for integrity checks |
Transport: Primary realtime is wss://api.nano-labs.io/ws (secondary wss://api.nano-labs.io/v1/ws). Permanent fallback is polling /v1/bots/tick + /v1/bots/signal.
Bot Signal Example
curl https://api.nano-labs.io/v1/bots/tick
{
"ok": true,
"protocol": "NanoStack",
"receipts": 12002,
"settled": 7667,
"provisional": 2243,
"failed": 2092,
"total_volume": "1929561487031326325",
"total_fees": "1543700258367523",
"success_rate": 0.8257,
"fee_bps": 10
}
Aggregator Integrations
NanoStack is integrated with major cross-chain aggregators as a settlement provider.
| Aggregator | Type | Status |
|---|---|---|
| Li.Fi | Bridge provider | Live |
| Socket | Bridge | Live |
| 1inch | Resolver | Live |
| ParaSwap | Adapter | Live |
| 0x | Integrator | Live |
| Odos | Router partner | Live |
| Jupiter | Quote provider | Live |
| Raydium | AMM | Live |
| CoW Swap | Solver | Live |
curl https://api.nano-labs.io/v1/integrations
CoW Protocol Solver
Interactive Playground
Try the API directly in your browser: Open Playground
NanoStack · api.nano-labs.io · OpenAPI · Explorer · Blockframe™