Getting started

Quickstart

The API serves indexed Uniswap v4 liquidity-position and pool data for Ethereum and Avalanche. Responses are JSON over HTTPS. There is no SDK to install.

1. Get a key

Create an account, verify your email, then issue a key from API keys. The Free plan needs no payment details.

The secret is shown once. It is stored hashed, so nobody — including us — can read it back; if you lose it, revoke it and issue another.

2. Call an endpoint

Every metered request carries your key in the KC-APIKey header. Not a bearer token, and not a query parameter — a key in a URL ends up in browser history, proxy logs and Referer headers.

bash
curl -s https://api.tickwise.xyz/v1/positions?limit=5 \
  -H "KC-APIKey: $TICKWISE_API_KEY"

3. Read the limit headers

Every metered response tells you exactly where you stand. Read these rather than guessing:

http
X-RateLimit-Limit: 300      # requests per minute, per key
X-RateLimit-Remaining: 299
X-RateLimit-Reset: 47       # seconds until the burst window rolls
X-Quota-Limit: 5000000      # units per month, per account
X-Quota-Remaining: 4999998
X-Quota-Reset: 1738368000   # seconds until 00:00 UTC on the 1st

What you can ask for

EndpointUnitsWhat it returns
GET /v1/positions2A ranked, filterable page of positions. Filter by owner, poolId, positionId, status, range, minimum value; sort by APR, PnL, ROI, age or value.
GET /v1/positions/:chainId/:protocol/:positionId1One position in full.
GET /v1/positions/:chainId/:protocol/:positionId/charts10Time series for one position. ?range=30d|60d|90d|180d|all.
GET /v1/pools2Ranked pools with TVL, volume, fee APR, open-position and holder counts.
GET /v1/pools/:chainId/:protocol/:poolId1One pool in full.
GET /v1/pools/:chainId/:protocol/:poolId/charts10Time series for one pool.
GET /v1/chains, /v1/protocols0Metadata. Free and unmetered, but still needs a valid key.

Two things that catch people out

Omitting chainId means every chain, not Ethereum. The list endpoints scatter-gather across all enabled chains and merge the results. Pass ?chainId=1 or ?chainId=43114 when you want one.

A request that we refuse does not spend units. Any 4xx is refunded automatically, so a malformed filter costs you nothing. A 429 is not refunded, because it never consumed anything in the first place.

Next

Authentication — server keys, browser keys and origin binding. Units and limits — what each call costs and when the quota resets. Errors — every status code we return and what to do about it.