> For the complete documentation index, see [llms.txt](https://tri.gitbook.io/tri-doc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tri.gitbook.io/tri-doc/liquidity-pool/reserve-pool-price-qty.md).

# Reserve Pool Price QTY

### Liquidity Pool

<mark style="color:green;">`POST`</mark> <https://sandbox.triangle.digital/api/v2/liquidity\\_pool/clients/{client\\_id}/reservations/pool\\_price>

Holds the entered quantity of the selected carbon pool records for 10 minutes, so the purchase that follows cannot lose it to another buyer. While the hold lasts, that quantity is not available to anyone else — including the same client in another purchase window — and it is not counted as available by [Get Pool List](/tri-doc/liquidity-pool/get-pool-list.md).

The answer carries the `reservation_group` to call [Buy Carbon Pool](/tri-doc/liquidity-pool/buy-carbon-pool.md) with, and when the hold runs out — as an absolute time and as the remaining seconds, so a countdown can be shown without relying on the caller's own clock.

The hold is all-or-nothing: if any record cannot be held in full, nothing is reserved and the call is refused with `pool_changed`.

An unused hold disappears by itself when it expires; a completed purchase releases its hold on the way out. To free it earlier — when the client cancels or closes the purchase flow — call [Release Reservation](/tri-doc/liquidity-pool/release-reservation.md).

**Path parameters**

<table data-full-width="true" data-search="false"><thead><tr><th width="230">Name</th><th width="110">Type</th><th>Description</th><th width="210">Where to take it from</th></tr></thead><tbody><tr><td><code>client_id</code></td><td>integer</td><td><strong>Required.</strong> The client the quantity is held for.</td><td><a href="/tri-doc/liquidity-pool/get-clients.md">Get Clients</a> — <code>client_id</code></td></tr></tbody></table>

**Headers**

<table data-full-width="true"><thead><tr><th>Name</th><th>Value</th></tr></thead><tbody><tr><td>Content-Type</td><td><code>application/json</code></td></tr></tbody></table>

**Body**

<table data-full-width="true" data-search="false"><thead><tr><th width="200">Name</th><th width="110">Type</th><th>Description</th><th width="260">Example</th></tr></thead><tbody><tr><td><code>hash</code></td><td>string</td><td><strong>Required.</strong> API key.</td><td>fk5f0iuy-rr06-j4x3-i75b-fy2s67s4ilo1</td></tr><tr><td><code>pools</code></td><td>array</td><td><strong>Required.</strong> The quantity to hold, one entry per expense type — the same entries the purchase is then made with: <code>record_id</code> and <code>carbon_type</code> (Expense Type), one of AI Compute, Air Travel, Vehicle, Lodging or Food, come from <a href="/tri-doc/liquidity-pool/get-pool-list.md">Get Pool List</a>; <code>qty</code> is a number greater than 0, in tons of CO2e. Duplicate <code>record_id</code>/<code>carbon_type</code> pairs are refused. Several expense types of one record are held together, as their sum.</td><td><pre class="language-json"><code class="lang-json">[
  { "record_id": 5115, "carbon_type": "Air Travel", "qty": 1.0 },
  { "record_id": 5241, "carbon_type": "Vehicle", "qty": 4.0 }
]
</code></pre></td></tr></tbody></table>

```json
{
    "hash": "fk5f0iuy-rr06-j4x3-i75b-fy2s67s4ilo1",
    "pools": [
        { "record_id": 5115, "carbon_type": "Air Travel", "qty": 1.0 },
        { "record_id": 5241, "carbon_type": "Vehicle", "qty": 4.0 }
    ]
}
```

**Response fields**

<table data-full-width="true" data-search="false"><thead><tr><th width="360">Field</th><th width="110">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>message</code></td><td>string</td><td>Human-readable result of the call.</td></tr><tr><td><code>success</code></td><td>boolean</td><td>Whether the call succeeded; a refused call answers HTTP 400.</td></tr><tr><td><code>data.reservation_group</code></td><td>uuid</td><td>Identifier of the hold. Pass it to <a href="/tri-doc/liquidity-pool/buy-carbon-pool.md">Buy Carbon Pool</a> as <code>reservation_group</code> — a purchase made without it competes with this hold and can be refused with <code>pool_changed</code>.</td></tr><tr><td><code>data.expires_at</code></td><td>string</td><td>When the hold runs out, ISO 8601 in UTC.</td></tr><tr><td><code>data.expires_in_seconds</code></td><td>integer</td><td>Seconds left until the hold runs out, counted at the moment of the answer.</td></tr><tr><td><code>data.ttl_minutes</code></td><td>integer</td><td>How long a hold lasts, in minutes.</td></tr><tr><td><code>data.error_code</code></td><td>string</td><td>Present on a refusal by availability. One of: <code>pool_changed</code> — the records no longer cover the requested quantity, nothing is reserved; <code>invalid_request</code> — the entries carry no quantity to hold.</td></tr><tr><td><code>operations_count</code></td><td>integer</td><td>Always <code>1</code>.</td></tr></tbody></table>

**Response**

{% tabs %}
{% tab title="200" %}
The quantity is held. Buy it within `expires_in_seconds`, passing `reservation_group`.

{% code fullWidth="false" %}

```json
{
    "message": "QTY reserved successfully.",
    "success": true,
    "data": {
        "reservation_group": "6f7d2a41-8c3e-4b90-9a55-2f0c1de7b834",
        "expires_at": "2026-08-14T11:07:55Z",
        "expires_in_seconds": 600,
        "ttl_minutes": 10
    },
    "operations_count": 1
}
```

{% endcode %}
{% endtab %}

{% tab title="400" %}
Nothing is reserved. A refusal by availability carries `error_code` to branch on; a request that does not pass validation answers with the problem in `message` and an empty `data` (for example `Parameter 'pools' is required and must be a non-empty array.`, `pools[0]: 'qty' must be a number greater than 0.`, `pools contains a duplicate record_id/carbon_type pair.`).

```json
{
    "message": "Pool availability has changed. Please refresh the list and try again.",
    "success": false,
    "data": {
        "error_code": "pool_changed"
    },
    "operations_count": 1
}
```

{% endtab %}
{% endtabs %}
