Skip to content

Crypto Data API ​

Surf was withdrawn on 2026-09-06

The Surf crypto-data service that this page used to document was retired by its upstream on 2026-09-06. Every /v1/marketplace/surf/* path now answers 404 service no longer available: surf. Nothing under that prefix can be called or paid for.

The capabilities people used it for are served by three live services, documented below: DeFi (TVL, yields, chains), DEX swap quotes, and spot prices. For prediction markets see the dedicated Prediction Markets API.

NeedServiceBase URLPrice
DeFi TVL, chains, yields, protocol detail, token pricesDeFi (DefiLlama)/v1/marketplace/defi$0.0055/call
DEX swap price and quote, gasless swapsDEX (0x)/v1/marketplace/dex$0.0011/call
Spot price and history for crypto, FX and commoditiesMarkets/v1/marketplace/markets$0.0011/call
Polymarket, Kalshi and morePrediction Markets/v1/marketplace/prediction$0.00935/call

Prices are the live x402 quotes measured 2026-09-29. The exact charge for a call is in the 402 challenge (accepts[].amount, in micro-USDC) and in price.amount on the response.

All three services on this page are GET-only.

Authentication ​

Both methods are supported — all requests settle via x402 on-chain:

MethodHeaderDescription
API KeyAuthorization: Bearer sk-...Platform signs x402 from your HD wallet automatically
Private Key (x402)Automatic via SDKAgent signs x402 directly from its own wallet

See Agent Payments (x402) for full details on how both methods work.

DeFi (DefiLlama) ​

Base URL: https://api.jarvisclaw.ai/v1/marketplace/defi

MethodPathReturns
GET/protocolsEvery tracked protocol with TVL and chain breakdown
GET/protocol/{slug}One protocol's TVL history and metadata
GET/chainsTVL per chain
GET/yieldsPool yields (APY, TVL) across protocols — large response
GET/prices/{coins}Token prices, e.g. coingecko:ethereum,coingecko:bitcoin

An unknown path answers 404 with the list of available endpoints in the body.

DEX (0x) ​

Base URL: https://api.jarvisclaw.ai/v1/marketplace/dex

MethodPathReturns
GET/priceIndicative swap price (no commitment)
GET/quoteFirm, executable swap quote
GET/gasless/priceIndicative gasless swap price
GET/gasless/quoteFirm gasless swap quote
GET/gasless/status/{trade_hash}Status of a submitted gasless trade
GET/gasless/approval-tokensTokens eligible for gasless approval
GET/gasless/chainsChains that support gasless swaps

/price and /quote take chainId, sellToken, buyToken and sellAmount (in the sell token's base units).

Markets (spot prices) ​

Base URL: https://api.jarvisclaw.ai/v1/marketplace/markets

MethodPathReturns
GET/crypto/listSupported crypto symbols
GET/crypto/price/{symbol}Latest price, e.g. BTC-USD
GET/crypto/history/{symbol}Price history
GET/fx/list, /fx/price/{pair}, /fx/history/{pair}The same for FX, e.g. EUR-USD
GET/commodity/list, /commodity/price/{symbol}, /commodity/history/{symbol}The same for commodities, e.g. XAU-USD

Code Examples ​

bash
# BTC spot price
curl "https://api.jarvisclaw.ai/v1/marketplace/markets/crypto/price/BTC-USD" \
  -H "Authorization: Bearer sk-..."

# TVL per chain
curl "https://api.jarvisclaw.ai/v1/marketplace/defi/chains" \
  -H "Authorization: Bearer sk-..."

# Swap price: 1 USDC -> WETH on Base
curl "https://api.jarvisclaw.ai/v1/marketplace/dex/price?chainId=8453&sellToken=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&buyToken=0x4200000000000000000000000000000000000006&sellAmount=1000000" \
  -H "Authorization: Bearer sk-..."
python
from jarvisclaw import MarketplaceClient

# Hex private key -> USDC on Base; a base58 keypair -> USDC on Solana.
client = MarketplaceClient(private_key="0x<evm-private-key>")

btc = client.call("markets", "/crypto/price/BTC-USD")
print(btc["price"])

chains = client.call("defi", "/chains")
print(chains[0]["name"], chains[0]["tvl"])

quote = client.call("dex", "/price", params={
    "chainId": "8453",
    "sellToken": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",  # USDC
    "buyToken": "0x4200000000000000000000000000000000000006",   # WETH
    "sellAmount": "1000000",
})
print(quote["buyAmount"])
go
package main

import (
    "context"
    "fmt"
    jc "github.com/api-jarvisclaw/go-sdk/v2"
)

func main() {
    ctx := context.Background()
    mc, _ := jc.NewMarketplaceClient(jc.WithPrivateKey("0x<evm-private-key>"))

    btc, _ := mc.Call(ctx, "markets", "/crypto/price/BTC-USD", nil)
    fmt.Println(btc["price"])

    quote, _ := mc.Call(ctx, "dex", "/price", jc.WithParams(map[string]string{
        "chainId":    "8453",
        "sellToken":  "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "buyToken":   "0x4200000000000000000000000000000000000006",
        "sellAmount": "1000000",
    }))
    fmt.Println(quote["buyAmount"])
}

What Surf covered that has no replacement yet ​

On-chain SQL, wallet labels, social/CT mindshare, VC fund data and the Surf news feed have no live equivalent on the platform. The upstream said it is looking for a new vendor. Until one is published, calls under /v1/marketplace/surf/* return 404 and are never charged.

Errors ​

CodeMeaningResolution
402x402 payment requiredPay the challenge, or call with an API key backed by USDC
404Unknown path, or a withdrawn service (surf)Use a path from the tables above
429Rate limitedBack off and retry with exponential delay