Changelog

What shipped

  1. 2026-08-19
    Arbitrum One positions and pools indexed

    Uniswap v4 positions and pools on Arbitrum One (chainId 42161) join Ethereum (1) and Avalanche C-Chain (43114), on every positions and pools route.

  2. 2026-08-19
    GET /v1/chains lists only chains with a live source

    The free chains endpoint previously returned every chain in our registry, including ones with an empty protocols array that could not answer a query. It now lists only chains that actually have data behind them, so the response is safe to drive a chain picker from.

  3. 2026-08-15
    A settled payment is never lost or counted twice

    A USDC transfer that lands against an invoice already voided by a plan change, or after a checkout was abandoned, is credited to your account balance and spent on the next invoice instead of leaving you on Free and asked to pay again. Money diverted to balance is no longer also summed as having paid its invoice.

  4. 2026-08-15
    Cancel a pending plan change, and see confirmations

    A started-but-unpaid plan change can be called off with POST /account/billing/cancel-change, returning the proration credit it consumed — previously the only control ended the plan you were paying for. While a payment confirms, the portal shows confirmations against the required minimum with the transaction hash and an explorer link.

  5. 2026-08-14
    CopyPools is now Tickwise

    The product has a new name and new branding, and documentation examples now show the Tickwise host. No client change is required: the KC-APIKey header and the kc_live_ key prefix are unchanged, your keys keep working, and existing portal sessions survive the rename.

  6. 2026-08-14
    API playground in the portal

    Pick an endpoint at /portal/playground, fill in the parameters, send the call with your own key and see the status, timing, response body and units spent. The key is never stored, logged or echoed back.

  7. 2026-08-14
    GET /v1/stats gained per-chain totals

    The free stats endpoint added activePositions (open positions only), tvlUsd and a byChain array carrying chainId, protocol, pools, positions, activePositions, tvlUsd and indexedUpToTimestamp. Purely additive. tvlUsd counts only TVL that passed our valuation checks, so treat it as a lower bound.

  8. 2026-08-14
    Public documentation, pricing and status pages

    Quickstart, authentication, per-endpoint references for positions, pools and metadata, a units-and-limits page, an error reference and a coverage matrix generated from the same registry the API answers from. Plus public pricing and a status page showing how far each chain is indexed.

  9. 2026-08-13
    Self-serve plans, paid in USDC

    Choose a plan in the portal and pay in USDC by signing an EIP-3009 transfer authorization; your entitlement follows the invoice. Renewals are raised ahead of the period end with a grace window and a downgrade to Free — nothing is ever charged automatically.

  10. 2026-08-06
    Self-serve signup and customer portal

    Sign up, get a Free plan and issue your own keys with no operator involvement. The portal covers overview, keys, usage and settings, with key creation by type and allowed origins, revoke and delete. Sign in with a password, Google, GitHub or a wallet; email addresses are proved by a six-digit code, and password reset runs on a single-use 30-minute token.

  11. 2026-08-06
    Unit costs re-tiered by what a call really costs

    Metered routes no longer cost a flat 1 unit each: metadata routes cost 0, detail routes 1, list routes 2 and chart routes 10. The meter and the published price now resolve through a single lookup, so /pricing and your bill cannot disagree. Read GET /v1/pricing/units for the live table.

  12. 2026-08-06
    Refused requests no longer consume quota

    Units are credited back on every 4xx as well as every 5xx, so a request the API rejected — a malformed protocol value returning 400, for example — no longer decrements X-Quota-Remaining. 429s were never charged.

  13. 2026-08-06
    Public /v1/plans, /v1/pricing/units and /v1/stats

    Three unauthenticated, unmetered endpoints: plans with monthlyUnits, rateLimitPerMin, maxApiKeys, allowBrowserKeys and prices in integer minor units; the per-route unit cost table; and index counts with pools, positions and indexedTo.

  14. 2026-07-18
    owner filter on the positions endpoints

    GET /v1/positions accepts owner=0x… (case-insensitive) to fetch every indexed position held by one wallet. It composes with the other filters, so pass status=all&minValueUsd=0&minPoolTvl=0&includeRisky=true for a wallet's complete set.

  15. 2026-07-03
    Avalanche C-Chain positions and pools indexed

    Uniswap v4 on Avalanche C-Chain (chainId 43114, native AVAX) is served on every positions and pools route alongside Ethereum.

  16. 2026-07-03
    Breaking: omitting chainId now returns every chain

    chainId became optional on /v1/positions and /v1/pools. A request that omits it previously defaulted to Ethereum; it now returns a merged, re-sorted result across every enabled chain with summed pagination totals. If you relied on the old implicit default, pass chainId=1 explicitly.

  17. 2026-06-24
    GET /health reports indexed block vs chain head

    The free health route returns indexedBlock, chainHeadBlock, lagBlocks, synced and status per integration, so you can show data freshness rather than guessing at it. The older indexedUpToTimestamp field is retained.

  18. 2026-06-17
    Breaking: keyless /api/* routes closed to third parties

    In production the open /api/top-* dashboard routes now require a request Origin in our allowlist; any other or missing Origin is refused with 403. Server-side and scripted callers must use /v1 with a KC-APIKey header, which is a documented, versioned surface with quota headers.

  19. 2026-06-16
    Server and browser API keys, with origin binding

    Every key now has a type. A server key is refused with 403 on any request carrying an Origin header, so a key pasted into frontend JavaScript stops working. A browser key must be issued with at least one allowed origin and works only from those origins, making a leaked key useless on another site.

  20. 2026-06-16
    Metered pool and chart endpoints

    GET /v1/pools, GET /v1/pools/{chainId}/{protocol}/{poolId} and the charts routes for both pools and positions, each metered under its own route key. range accepts 30d, 60d, 90d, 180d or all and defaults to 30d. Pool responses also carry positionsCount and holdersCount, both counting open positions only.

  21. 2026-06-12
    Valuations gated on real market activity

    A token leg that is neither an anchor nor allowlisted is only valued when an independent DEX source corroborates it with real 24h volume and counter-side liquidity. Fabricated and dead-pool positions that previously reported large figures now return $0 or drop out of the default lists. Responses gained priceConfidence, nominalValueUsd, unrealizableLeg and priceUnavailable so you can see why.

  22. 2026-06-01
    Metered /v1 API with keys, plans and quota headers

    The versioned API launched: /v1/positions list and detail behind a KC-APIKey header, with /v1/chains and /v1/protocols free. Four plans from Free to Enterprise with monthly unit quotas and per-minute rate limits. Every metered response carries X-RateLimit-Limit, -Remaining, -Reset and X-Quota-Limit, -Remaining, -Reset; exceeding either returns 429 with Retry-After.

  23. 2026-05-13
    Uniswap v4 positions on Ethereum

    The first release: ranked Uniswap v4 liquidity positions on Ethereum, sortable by APR, fee APR, ROI, age, PnL or underlying value, with filters for status, range, minimum value and pool TVL, and a detail view carrying per-position amounts, fees, PnL and transaction history.