---
title: "Canonical earn products & variants"
method: GET
path: "/api/v1/earn/products"
tags: ["earn"]
---

# Canonical earn products & variants

`GET /api/v1/earn/products`

## Request

- Base URL: `https://api.bitcompare.net`
- URL: `https://api.bitcompare.net/api/v1/earn/products`
- Auth: HTTP bearer

The canonical earn product graph: products (provider × asset × category) with their term variants — lockups, tiers, minimum deposits, payout schedules, withdrawal notice, TVL, promo flags — each carrying collection method, confidence (0-100 with bands), verification timestamps, and geo eligibility resolved from variant overrides or provider defaults. Use for "what are the actual terms behind this rate?"

## Query parameters

- `provider` string
- `symbol` string
- `category` 'lending' | 'borrowing' | 'staking'

## Response `200`

Successful response

- object
  - `data` object, required
    - `products` object[], required
      - `id` integer, required
      - `provider` string, required
      - `symbol` string, required
      - `category` 'lending' | 'borrowing' | 'staking', required
      - `status` string, required
      - `variants` object[]
        - `variantKey` string, required
    - `pagination` object, required
      - `total` integer, required
      - `limit` integer, required
      - `offset` integer, required
      - `hasMore` boolean, required

## Other responses

- `401`: Missing or invalid API key
- `403`: API key is valid but your plan does not grant access to this endpoint (e.g. Intelligence or bulk tier required)
- `429`: Plan rate limit exceeded — see X-RateLimit-* headers and Retry-After

---

[API](https://skmtc.dev/bitcompare/apis/bitcompare-api.md) · [All operations](https://skmtc.dev/bitcompare/apis/bitcompare-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bitcompare/apis/bitcompare-api/revisions/936dfbf752d2?raw)
