---
title: "Retrieve an instant quote"
description: "GET /quotes/{quote_uuid}: Returns an instant quote by id, in the same shape as POST /request-instant-quote."
url: https://docs.tryflume.ai/api/get-quote
updated: 2026-11-11
---

# Retrieve an instant quote

> GET /quotes/{quote_uuid}: Returns an instant quote by id, in the same shape as POST /request-instant-quote.

Returns an instant quote by id, in the same shape as `POST /request-instant-quote`.

```http
GET https://sandbox-api.tryflume.ai/partner/v1/quotes/{quote_uuid}
```

- Use it to poll a quote that is still pricing.
- Poll every 12 seconds for 2 minutes, then every 30 seconds until 5 minutes, then stop.
- No daily limit is used.

## Request

### Headers

| Header | Required | Description |
|---|---|---|
| `X-Flume-Partner-Key` | Yes | Your partner key. |
| `X-Flume-User-Token` | Yes | The access token of the user you call for. |

### Path parameters

| Parameter | Type | Description |
|---|---|---|
| `quote_uuid` | string | The quote's id, from `POST /request-instant-quote`. |

### Sample

**curl**

```sh
curl -X GET "https://sandbox-api.tryflume.ai/partner/v1/quotes/9c1e4b7a-2f3d-4e5b-8a6c-7d8e9f0a1b2c" \
  -H "X-Flume-Partner-Key: $FLUME_PARTNER_KEY" \
  -H "X-Flume-User-Token: $FLUME_USER_TOKEN"
```

**Python**

```python
import os

import requests

headers = {
    "X-Flume-Partner-Key": os.environ["FLUME_PARTNER_KEY"],
    "X-Flume-User-Token": os.environ["FLUME_USER_TOKEN"],
}

response = requests.get(
    "https://sandbox-api.tryflume.ai/partner/v1/quotes/9c1e4b7a-2f3d-4e5b-8a6c-7d8e9f0a1b2c",
    headers=headers,
    timeout=30,
)
response.raise_for_status()
print(response.json())
```

**Node.js**

```js
const response = await fetch("https://sandbox-api.tryflume.ai/partner/v1/quotes/9c1e4b7a-2f3d-4e5b-8a6c-7d8e9f0a1b2c", {
  method: "GET",
  headers: {
    "X-Flume-Partner-Key": process.env.FLUME_PARTNER_KEY,
    "X-Flume-User-Token": process.env.FLUME_USER_TOKEN,
  },
});
if (!response.ok) throw new Error(`${response.status} ${await response.text()}`);
console.log(await response.json());
```

## Returns (200)

Every field is always present. A field with no value is `null`.

| Field | Type | Description |
|---|---|---|
| `status` | enum | `READY` or `FAILED`. |
| `failure_reason` | enum or null | With `FAILED`: why there are no prices. `TEMPORARILY_UNAVAILABLE` can mean the quote is still pricing. One of: `NOT_QUOTABLE`, `TEMPORARILY_UNAVAILABLE`, `REGION_RESTRICTED`, `INCORRECT_DESTINATION`. |
| `quote_uuid` | string (UUID) or null | The id to poll with. Send it to `GET /quotes/{quote_uuid}` while the quote is still pricing. Every response has it. |
| `quote` | object or null | The prices, with `READY`. Otherwise `null`. |
| `quote.quote_uuid` | string (UUID) | The quote's id in the user's Flume account. |
| `quote.quote_number` | string | The quote's number, as the user sees it in Flume. |
| `quote.sku_uuid` | string (UUID) | The product priced. |
| `quote.destination_zip` | string | The delivery ZIP code. |
| `quote.currency` | string | Always `USD`. Default `"USD"`. |
| `quote.created_at` | string | When the quote was priced, in UTC. |
| `quote.valid_until` | string | The prices hold until this time, in UTC. |
| `quote.options` | array of objects | One entry per shipping option, cheapest `total` first. |
| `quote.options[].source` | enum | How this option ships: `US_WAREHOUSE` or `OVERSEAS_DIRECT`. |
| `quote.options[].ships_from_country` | string or null | The 2-letter code of the country the option ships from, or `null`. |
| `quote.options[].lead_time_min_days` | integer | The shortest delivery time, in days. |
| `quote.options[].lead_time_max_days` | integer | The longest delivery time, in days. |
| `quote.options[].quantity_sqft` | string | The quantity priced, in square feet. |
| `quote.options[].price_per_sqft` | string | The delivered price per square foot, before tax. |
| `quote.options[].subtotal` | string | The delivered price, before tax. |
| `quote.options[].sales_tax` | string or null | The sales tax, or `null`. |
| `quote.options[].total` | string | The delivered price, including sales tax. |

**Response (200)**

```json
{
  "status": "READY",
  "failure_reason": null,
  "quote_uuid": "9c1e4b7a-2f3d-4e5b-8a6c-7d8e9f0a1b2c",
  "quote": {
    "quote_uuid": "9c1e4b7a-2f3d-4e5b-8a6c-7d8e9f0a1b2c",
    "quote_number": "Q-7KD2-M4PA",
    "sku_uuid": "7f3c2a91-4b0e-4c8d-9a21-1f6b2d5e7c30",
    "destination_zip": "22102",
    "currency": "USD",
    "created_at": "2026-10-16T09:14:22Z",
    "valid_until": "2026-10-23T09:14:22Z",
    "options": [
      {
        "source": "OVERSEAS_DIRECT",
        "lead_time_min_days": 90,
        "lead_time_max_days": 120,
        "ships_from_country": "ES",
        "quantity_sqft": "6000.00",
        "price_per_sqft": "6.40",
        "subtotal": "38400.00",
        "sales_tax": "3168.00",
        "total": "41568.00"
      },
      {
        "source": "US_WAREHOUSE",
        "lead_time_min_days": 14,
        "lead_time_max_days": 30,
        "ships_from_country": "US",
        "quantity_sqft": "6000.00",
        "price_per_sqft": "8.10",
        "subtotal": "48600.00",
        "sales_tax": "4009.50",
        "total": "52609.50"
      }
    ]
  }
}
```

## Errors

| Status | Code | Meaning |
|---|---|---|
| 401 | `EMBED_TOKEN_INVALID` | You sent an `Authorization` header and no `X-Flume-Partner-Key`. Flume read the call as one from its own iframe. |
| 401 | `PARTNER_KEY_INVALID` | The partner key is missing, unknown, revoked, expired, or from the other environment. On live, also a platform Flume has not enabled yet. |
| 401 | `USER_TOKEN_INVALID` | The user access token is unknown, revoked, another partner's, or replaced by a later verification. A verification in the iframe replaces it too. |
| 403 | `USER_ACCOUNT_CLOSED` | The user's email belongs to a Flume account that Flume has closed. |
| 403 | `USER_NOT_CONNECTED` | No `X-Flume-User-Token` header was sent. |
| 404 | `NOT_FOUND` | The thing does not exist, or is not this user's. A search id that is not a UUID also returns this code. |
| 422 | `VALIDATION_FAILED` | A field is missing, unknown or has an unusable value. `field` names it as a dotted path. Some refusals carry the detail in `details` and leave `field` empty. |
| 500 | `INTERNAL` | Something failed on Flume's side. |

Every code, with its fix: [API error codes](https://docs.tryflume.ai/api/errors.md).

Guide: [Get an instant quote](https://docs.tryflume.ai/guides/get-an-instant-quote.md).
