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

# Offtake

Offtake is where providers list capacity and buyers take it. A listing is one basis for one delivery month: so many GPUs, at an asking price per GPU-hour or open to offers. When your purchase is approved, the contracts are **minted** into your exchange account on two books: the basis's BASIS contract for that month, and the GPU contract for the same GPU and month, so the pair is ready to [deploy](https://docs.capital.ai/compute/deployments.md). They show in your activity as a purchase from the provider.

A priced request is approved and minted at once. A free-text offer waits for the team, who agree the deal with you and approve it. Your exchange balance is not charged for a purchase; the commercial terms with the provider are settled outside the app. See [Transaction flow](https://docs.capital.ai/compute/transaction-flow.md).

Buying is done in the app for now ([guide](https://docs.capital.ai/app/offtake.md)); the endpoints below are what it calls, documented so you know the shapes. They take the app's session, not an API key, today.

## Listings

`GET /api/v1/offtake/listings` · session

Every listing open for purchase. An array of:

| Field | Type | Description |
| - | - | - |
| `id` | string | Listing ID. |
| `identifier` | string | `BBA-11-2026`: the basis code and the delivery month. |
| `code` | string | The basis, `BBA`. |
| `delivery_month` | string | `2026-11-01`, the first day of the month. |
| `gpu_model` | string | `H100 SXM`. |
| `gpu_count` | integer | GPUs listed. |
| `nodes`, `gpus_per_node` | integer \| null | The configuration when stated: nodes × GPUs per node. |
| `location`, `provider` | string | Where and whose. |
| `asking_price_usd` | string \| null | USD per GPU-hour. `null`: the seller takes offers only. |
| `specs` | object \| null | Per-node `cpu`, `memory`, `storage`, `network`. |
| `basis_description`, `details` | string \| null | The configuration in words, and the seller's notes. |
| `gpu_symbol` | string \| null | The GPU contract a purchase also mints, `H100SXM-11-26`. |
| `available` | integer | Contracts still open for purchase. |
| `status` | string | `listed`. |
| `created_at` | string | When it was listed. |

## Buy or make an offer

`POST /api/v1/offtake/listings/{id}/offers` · session

Two forms. A **purchase request** buys the whole listing, at the asking price or, optionally, your own:

| Field | Type | Description |
| - | - | - |
| `quantity` | integer | Every contract the listing has `available`; a listing is never bought in part. |
| `price_usd` | string | Optional. Your price per GPU-hour, up to four decimals. Absent: the listing's asking price. Required when the listing takes offers only. |
| `note` | string | Optional, up to 500 characters. |

A **free-text offer** is just `{ "offer": "…" }`, up to 500 characters, and is read by a person.

A **purchase request** answers `200` with [your purchase](#your-purchases), already `minted`: the request is recorded, approved and minted in one step, and the team is notified. A **free-text offer** answers `202`: the request is recorded and the team is emailed; they reach out, agree the deal with you, and approve it, which mints every contract the listing has left.

| Status | Meaning |
| - | - |
| `400` `invalid_quantity` / `invalid_price` / `invalid_note` / `invalid_offer` | Out of range. |
| `400` `listing_takes_offers` | No `price_usd`, and the listing has no asking price. |
| `404` | Not an open listing. |
| `409` | Not every contract the listing has left; the message says how many. |

## Your purchases

`GET /api/v1/offtake/purchases` · session

Your requests, newest first:

| Field | Type | Description |
| - | - | - |
| `id`, `listing_id` | string | |
| `listing` | string | `BBA-11-2026`. |
| `status` | `requested` \| `approved` \| `rejected` \| `minted` | `approved` means minting is under way. |
| `offer` | string | Your request as one line. |
| `requested_quantity`, `price_usd`, `note` | | What you asked for; absent on a free-text offer. |
| `quantity` | integer \| null | Contracts approved. |
| `symbol` | string \| null | The BASIS book they were minted on, `BBA-11-26`. The same number of contracts is minted on the listing's GPU market (`gpu_symbol` on the listing). |
| `created_at` | string | |

Once `minted`, the contracts are yours: they show on Home under **Balance**, on Compute, and on the app's Transactions page as a Deposit on the Mint rail.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.