---
sidebar_position: 10
title: Data Partner Feed
description: Completed GPU rentals as anonymized CSV in the General Index trade-data format, for index providers and market-data partners. Access is granted by the Lium team.
---

> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lium.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Data Partner Feed

Lium gives market-data partners a feed of completed rentals: one CSV row per rental, in the [General Index trade-data format](https://docs.g-x.co/), plus a daily aggregate. A partner uses this to build GPU price indices. Renters and providers appear as salted hashes. No name, e-mail, user id, wallet key or IP address is in the files.

## Access

The feed is not self-serve. The Lium team marks a partner account as a data partner after a data-supply agreement. To ask for access, write to [support@lium.io](mailto:support@lium.io) with the account e-mail. After that, the account's normal [API key](./authentication.md) reads the feed. Any key made in the dashboard works; a key created with [scopes](/pod-users/api-keys#scopes) needs `read`. Any other account gets `403`.

## Two ways to read the same data

The rows are the same. Pick the delivery that fits your pipeline, or use both.

* **Live feed.** `trades.csv` and `daily-aggregate.csv` answer from the rental table at the time of the call. Poll as often as you like with a moving `from`, and you get a rental within minutes of its end.
* **Daily dumps.** Every day at 01:00 UTC Lium writes the previous UTC day's two files to object storage. `dumps/YYYY-MM-DD.csv` hands them back. The nightly job writes a day once and never rewrites it. If your poller was down for a week, the seven files are still there.

`?day=YYYY-MM-DD` on the live endpoints returns exactly the rows of that dump (one closed UTC day). Use it to check a dump, or to read a day before 01:00 UTC.

## Endpoints

| Resource | URL |
|----------|-----|
| Trades, live | `https://lium.io/api/data-partners/trades.csv?from=YYYY-MM-DD&to=YYYY-MM-DD` |
| Daily aggregate, live | `https://lium.io/api/data-partners/daily-aggregate.csv?from=YYYY-MM-DD&to=YYYY-MM-DD` |
| Trades, one closed day | `https://lium.io/api/data-partners/trades.csv?day=YYYY-MM-DD` (also on `daily-aggregate.csv`) |
| Trades, nightly dump | `https://lium.io/api/data-partners/dumps/YYYY-MM-DD.csv` |
| Daily aggregate, nightly dump | `https://lium.io/api/data-partners/dumps/YYYY-MM-DD.daily-aggregate.csv` |

`from` and `to` are calendar days in UTC, both inclusive. `to` defaults to today. A call covers at most 62 days. `day` is one complete UTC day, yesterday or earlier; it cannot be combined with `from` or `to`.

The end time is the only day axis. A rental belongs to the UTC day in which it ended, in the window, in `day`, in the dumps and in the `day` column of the aggregate. A rental that starts at 23:50 and ends at 00:10 the next day is in the next day's files only, and in no other. A rental that is still running is not in any file until it ends.

```bash
curl -sS -H "X-API-Key: $LIUM_API_KEY" \
  "https://lium.io/api/data-partners/trades.csv?from=2026-09-01&to=2026-09-30" -o gx-trades-2026-09.csv
```

All endpoints answer `text/csv` with LF line ends and the header on the first line. Each client IP can make 60 calls per hour.

| Status | Meaning |
|--------|---------|
| `200` | The CSV. An empty window returns the header line only. |
| `401` | No API key, or an unknown key. |
| `403` | The account is not a data partner, or the key does not have the `read` scope. |
| `404` | Dumps only: no file for that day yet. The day is not over, or the 01:00 UTC job has not run. |
| `422` | Neither `from` nor `day` was sent, `to` is before `from`, the window is longer than 62 days, `day` is today or later, or `day` was sent together with `from`. |
| `503` | The feed is switched off on this deployment. Live endpoints and dumps alike. |

## Quickstart for Compute Desk

1. Sign in to [lium.io](https://lium.io) with the partner account and create an API key under **Access, API Keys** (see [API Keys](/pod-users/api-keys)). Keep it in `LIUM_API_KEY`.
2. Pull the month so far once:

   ```bash
   curl -sS -H "X-API-Key: $LIUM_API_KEY" \
     "https://lium.io/api/data-partners/trades.csv?from=2026-09-01" -o gx-trades-2026-09.csv
   curl -sS -H "X-API-Key: $LIUM_API_KEY" \
     "https://lium.io/api/data-partners/daily-aggregate.csv?from=2026-09-01" -o daily-aggregate-2026-09.csv
   ```

3. Then, each morning after 01:00 UTC, fetch yesterday's dump:

   ```bash
   day=$(date -u -d yesterday +%F)   # macOS: date -u -v-1d +%F
   curl -sS -f -H "X-API-Key: $LIUM_API_KEY" \
     "https://lium.io/api/data-partners/dumps/$day.csv" -o "gx-trades-$day.csv"
   ```

   Or, if you prefer a live poll, call `trades.csv?from=<last day you have>` every hour and drop the rows you already hold by `TransactionRef(S)`.

The files carry the same columns and filters as the August 2026 file Lium sent by e-mail. The renter and provider hashes join to that file once Lium has set the same salt; Lium confirms this with you before your first pull.

## Trades file

The header is:

```text
Code,Reference,TransactionType,DateTime(UTC),TradingHubDetail(S),Price(DB),PricingCurrency(S),PricingType(S),PricingUnit(S),Quantity(DB),QuantityUnit(S),Buyer(S),Seller(S),DeliveryStart(D),DeliveryEnd(D),Grade(S),PricingDetails(S),TransactionRef(S),TransactionStatus(S),SourceDetails(S),ExtractTime(D),Commodity(MD-S),Source(MD-S),TimeZone(MD-S),Title(MD-S),TradingHub(MD-S),HolidayCalendar(MD-S),EarlyCloseCalendar(MD-S)
```

| Column | Value |
|--------|-------|
| `Code` | `GT0000000` until General Index issues Lium a trade series code. |
| `Reference` | Sequence number among the rows that share the same `DateTime(UTC)`, starting at 1. |
| `TransactionType`, `TransactionStatus(S)` | `Trade`, `Traded`. Every row is a completed rental. |
| `DateTime(UTC)`, `DeliveryStart(D)` | Rental start, to the second, UTC. |
| `DeliveryEnd(D)` | Rental end, to the second, UTC. |
| `TradingHubDetail(S)` | Two-letter country code of the node. Empty when the node's location is unknown. |
| `Price(DB)`, `PricingCurrency(S)`, `PricingUnit(S)` | USD per GPU-hour, four decimals. Lium has no bidding, so the posted price is the clearing price. `PricingType(S)` is `Fixed`. |
| `Quantity(DB)`, `QuantityUnit(S)` | Number of GPUs in the rental, unit `GPU`. |
| `Buyer(S)`, `Seller(S)` | `LIUM-C-` plus 16 hex characters for the renter, `LIUM-P-` plus 16 hex characters for the provider. The same renter or provider gets the same value in every file. |
| `Grade(S)` | GPU model name as the driver reports it, for example `NVIDIA H200`. |
| `PricingDetails(S)` | `tier=<tier>; hours=<hours>`, where the tier is `secure`, `spot` or `force_spot` and the hours carry four decimals. |
| `TransactionRef(S)` | Lium's rental id. Stable, and unique per row. |
| `SourceDetails(S)`, `Source(MD-S)`, `Title(MD-S)` | `Lium`, `Lium`, `Lium GPU Rentals`. |
| `ExtractTime(D)` | When the file was produced, UTC. |
| `Commodity(MD-S)`, `TimeZone(MD-S)`, `TradingHub(MD-S)` | `GPU Compute`, `UTC`, `GLOBAL`. |
| `HolidayCalendar(MD-S)`, `EarlyCloseCalendar(MD-S)` | `Null`. |

Rentals that never reach a partner: rentals by Lium staff accounts, rentals a provider made on its own node, and rentals on the few accounts Lium has marked as test or wash trading.

## Daily aggregate file

One row per end day (the UTC day the rentals ended), GPU model and country:

```text
day,gpu_type,country_code,deals,gpu_hours,vwap_usd_per_gpu_hour,min_usd_per_gpu_hour,max_usd_per_gpu_hour
```

`day` is the end day of the rentals in the row, so a row counts the same rentals as that day's trades file. `gpu_hours` is the sum of rental hours times GPU count, two decimals. `vwap_usd_per_gpu_hour` is the average price per GPU-hour weighted by GPU-hours, four decimals. `min` and `max` are the lowest and highest price per GPU-hour among the rentals that ended that day.
