---
sidebar_position: 9
title: Partners
description: How a directory, price index, reseller or creator lists Lium's GPU marketplace, which link attributes their traffic, and what they earn through Refer & Earn.
---

> ## 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.

# Partners

Anyone can list the GPUs on the Lium marketplace, send visitors with a link that names them, and earn on the top-ups of the accounts they refer. Nothing on this page needs an agreement or a key.

## What you earn

Partners use the [Refer & Earn](https://lium.io/refer-earn) program every Lium account has: **5% for 3 months, then 2.5% for 3 months** of each referred account's top-ups. Commission accrues on your Refer & Earn page, where you withdraw it to your Lium balance or a crypto wallet and see your code, your link and every referral.

A held referral earns no commission. Lium holds a referral when the new account is on your own network or was flagged high-risk at signup. It also holds every referral past ten from your code in 24 hours. The daily-cap hold lifts on its own once that account has been billed $5 of rentals. The other two holds are lifted only by Lium after a review.

Referral and partner programs, including their rates, eligibility and payouts, may be changed or ended at any time without advance notice ([Terms of Service](https://lium.io/terms), section 9).
Referral rewards apply to first-time accounts only: an e-mail address that already had a Lium account, deleted or not, cannot open a second one. (Google and GitHub sign-in simply signs that person back into the account they already have.)

## What you can list

| Feed | One row per | Link to |
|------|-------------|---------|
| [`https://lium.io/pricing.json`](https://lium.io/pricing.json) | GPU model: lowest and highest live price per GPU-hour, available nodes and GPUs | the model page in its `url` field, `https://lium.io/gpu/<slug>` |
| [`https://lium.io/api/public/v1/nodes`](https://lium.io/api/public/v1/nodes) | rentable node: GPU model and count, price, location, CPU, RAM and disk | the node in its `rent_url` field — fields on [Public Nodes Feed](./public-nodes-feed.md) |

For a hand-written listing, [lium.io/pricing](https://lium.io/pricing) has every model and its current range.

## Links that name you

Add three UTM parameters to any Lium link, with your own name as `utm_source`. They are kept in the visitor's browser for 90 days (in the EEA, the UK and Switzerland, or wherever the country is unknown, from the moment the visitor accepts analytics and advertising cookies) and stored on the account when they sign up, so Lium can count the signups, funded accounts and first rentals that came from your listing.

```text
https://lium.io/gpu/h200?utm_source=your-site&utm_medium=referral&utm_campaign=gpu-listing
```

The link that pays carries your code and the same three UTMs, so the signup is both credited to you and counted. `?ref=YOURCODE` is your Refer & Earn code: the register form reads it, and so do the Google and GitHub sign-in buttons on the register and login pages; a model page or a node page does not. Put it on the register link, and use the UTM form on deep links. The named partner codes below are the ones that work on any page.

```text
https://lium.io/register?ref=YOURCODE&utm_source=your-site&utm_medium=referral&utm_campaign=gpu-listing
```

### Named partner links

Partners we work with directly get a named link of their own: `https://lium.io/?ref=<code>`, with a code Lium assigns (for example `compute.exchange` and `cex` both name Compute Exchange). It works on any page, in upper or lower case. The first partner code a visitor's browser sees is kept for 90 days, as a strictly necessary item of the partner program (it does not wait for the cookie choice), and stored on the account when they sign up, so Lium can report the signups, first rentals and spend behind your link.

A named code can be attached to your Lium account when Lium creates it. From then on a signup that carries it is a Refer & Earn referral of that account — the same 5% for 3 months, then 2.5% for 3 months as your own code, paid to the same balance and listed on your [Refer & Earn](https://lium.io/refer-earn) page — so a named link both reports and pays. A visitor can still carry both a named code and a person's Refer & Earn code (the register link they sign up through); the person's code wins, and the named code is still reported. A code Lium created without an account attached only reports. To get a code, or to have one attached to your account, write to the address below.

```text
https://lium.io/?ref=compute.exchange
https://lium.io/gpu/h200?ref=CEX
```

## Resell through the API: tag every rental with your end customer

If your platform rents Lium GPUs for its own users, you run one Lium account with its API keys, and your users never see Lium. Rentals are billed to your account per second from its prepaid balance, at the same rates as on lium.io. To see later which rental belonged to which of your customers, tag them in one of two ways:

- Set `customer_ref` on an API key when the key serves one customer. Every rental the key opens is recorded with that value.
- Send an `X-Customer-Ref` header on the rent call when one key serves many customers. The rental is recorded with the header's value. If you leave the header out, the key's `customer_ref` is used.

You pick the value. It can be 1 to 64 characters: letters, digits, `.`, `_`, `:` and `-`. Use a customer id rather than a name or an e-mail address. Lium only stores the value and returns it to you.

### One key per end customer

Create the key with `customer_ref` in the request body. You need a logged-in session for this: send the `token` from `POST /users/login` as `Authorization: Bearer`, because an API key cannot create other keys. The key needs only the `rent` scope.

```bash
API=https://lium.io/api
curl -sS $API/keys -H "Authorization: Bearer $SESSION_TOKEN" -H "Content-Type: application/json" \
  -d '{"name": "acme-eu", "scopes": ["rent"], "customer_ref": "acme:eu-1"}'
# → 200 {"id": "…", "name": "acme-eu", "scopes": ["rent"], "customer_ref": "acme:eu-1", …}
```

Every rental this key opens through `POST /executors/{id}/rent`, `POST /executors/rent-by-spec` or `POST /executors/cluster/rent` is recorded with the key's id and `acme:eu-1`. You can change or clear the value later. Rentals that are already recorded keep the value they had when they were opened.

```bash
API=https://lium.io/api
curl -sS -X PATCH $API/keys/$KEY_ID -H "Authorization: Bearer $SESSION_TOKEN" -H "Content-Type: application/json" \
  -d '{"customer_ref": "acme:eu-2"}'      # set
curl -sS -X PATCH $API/keys/$KEY_ID -H "Authorization: Bearer $SESSION_TOKEN" -H "Content-Type: application/json" \
  -d '{"customer_ref": null}'             # clear
```

`GET /keys` lists every key with its `customer_ref`.

### One key, many end customers

Put the customer in the `X-Customer-Ref` header of each rent call. For that rental, the header overrides the key's `customer_ref`. Without the header, the key's `customer_ref` is used.

```bash
API=https://lium.io/api
curl -sS $API/executors/$EXECUTOR_ID/rent -H "X-API-Key: $LIUM_API_KEY" \
  -H "X-Customer-Ref: acme:eu-7" -H "Content-Type: application/json" \
  -d '{"pod_name": "acme-eu-7", "template_id": "'$TEMPLATE_ID'", "user_public_key": ["ssh-ed25519 AAAA…"]}'
```

If the header has characters outside the allowed set or is too long, the call returns 422 (`header -> X-Customer-Ref`) and nothing is rented. The header also works on rentals made from a browser session; those are recorded with the value and no key.

### What is recorded

Each rental is recorded with the key that opened it and the customer value it was opened with. If you delete or rotate a key, its past rentals keep the key's id and the value, so you can still split a month's rentals by customer. A rental made without a key and without the header has neither.

The report below is built from these records, so you can total your rentals per end customer. While a key exists, the pods it opened also carry its id as `created_by_api_key_id` in `GET /pods`.

### Your report: rentals, GPU-hours and USD billed

`GET /partners/me/rentals` totals your account's rentals over a window of whole UTC days. You can group the totals by day, by GPU model or by end customer. It counts every key and workspace of the account, and the dollar amounts come from the same billing rows as your statement, so you can check your own invoices against it. A `read` key is enough. Lium has to mark your account as a reseller first: write to [support@lium.io](mailto:support@lium.io) and we will ask a few questions about your company and your end customers.

```bash
curl -sS "https://lium.io/api/partners/me/rentals?since=2026-09-01&until=2026-09-30&group_by=customer_ref" \
  -H "X-API-Key: $LIUM_API_KEY"
```

```json
{
  "since": "2026-09-01",
  "until": "2026-09-30",
  "group_by": "customer_ref",
  "rows": [
    {"bucket": "acme:eu-1", "rentals": 14, "gpu_hours": 611.5, "usd_billed": 1284.15, "fault_closes": 1},
    {"bucket": "acme:eu-7", "rentals": 3, "gpu_hours": 48.0, "usd_billed": 100.8, "fault_closes": 0},
    {"bucket": "untagged", "rentals": 1, "gpu_hours": 2.0, "usd_billed": 4.2, "fault_closes": 0}
  ]
}
```

| Parameter | Meaning | Default |
|-----------|---------|---------|
| `since` | first UTC day of the window, inclusive — an ISO date, or a date-time whose UTC day is taken | 30 days ending at `until` |
| `until` | last UTC day, inclusive | today |
| `group_by` | `day` (one row per UTC day), `gpu` (one row per GPU model), `customer_ref` (one row per end-customer tag) | `day` |

The window can be at most 366 days. A longer window, or an `until` before `since`, returns 422. An account that is not marked as a reseller gets 403.

Each row:

- **`bucket`**: the day, the GPU model or the `customer_ref`. Rentals with no tag (a key without a `customer_ref` and no header, or a browser rental) go in `untagged`, so do not use `untagged` as your own tag. Under `customer_ref`, storage charges are also in `untagged`. Under `gpu`, storage charges are in `volume`, and a charge that cannot be tied to a GPU model is in `unknown`.
- **`rentals`**: rentals opened in this window and bucket, including ones that failed to start. If Lium moved a rental to another node after a failed start, it counts as two, and the first is a fault close. A price change does not count as a new rental.
- **`gpu_hours`**: rental hours × GPU count, for rentals you are billed for. A rental that failed to start is never billed and adds no hours, but it still counts in `rentals` and `fault_closes`. A rental that is still running is counted up to the moment of the call. Hours are placed on the UTC day the rental opened, even if it runs into the next day. After a price change, the hours from then on are placed on the day of the change. So under `group_by=day` a day can show hours with `rentals` at 0, including when the rental opened before the window.
- **`usd_billed`**: what the account was charged, from the same billing rows as your statement: every row whose billing day is in the window, at the standard per-second rates, including storage. The total over all rows is the same for every `group_by` and equals the account's ledger total for those days. A charge is placed under the `gpu` or `customer_ref` of the rental it belongs to. A rental that runs past midnight has a billing row on each day, so under `group_by=day` its hours are on the day it opened (or the day of its last price change) and its charges are on the days it ran.
- **`fault_closes`**: rentals in the bucket that ended because of a provider or platform fault: the node went offline, the provider broke the pod, or the rental failed to start or to shut down. These are not faults: a close you asked for, or one caused by a price change, a low balance, a scheduled stop, an API key budget, or the provider taking the node back after its notice period. A fault close after a price change is placed on the day of the change, like its hours. A price change is not a new rental, so a row can show more `fault_closes` than `rentals`.

The response can be cached for five minutes (`Cache-Control: private, max-age=300`), and charges are added every few minutes, so two calls within five minutes may return the same numbers. Call it once per report, not on every page view.

:::note Availability
The report is opening to reseller accounts one at a time. Write to [support@lium.io](mailto:support@lium.io) to be flagged as a reseller; we tell you when the report is ready for your account.
:::

## How to start

1. [Sign up](https://lium.io/register) for a Lium account.
2. Open [Refer & Earn](https://lium.io/refer-earn) and copy your referral code.
3. Link `https://lium.io/register?ref=<code>&utm_source=<your-name>&utm_medium=referral&utm_campaign=gpu-listing` where you want to be paid, and tag every other link with `utm_source=<your-name>&utm_medium=referral&utm_campaign=gpu-listing` so your traffic is reported.

## Contact

Feed questions, a listing to correct, or a partnership this page does not cover: [support@lium.io](mailto:support@lium.io).
