---
title: "Get demo prices (No authentication required)"
method: GET
path: "/v1/demo/prices"
tags: ["Demo (No Auth)"]
---

# Get demo prices (No authentication required)

`GET /v1/demo/prices`

## Request

- Base URL: `https://api.oilpriceapi.com`
- URL: `https://api.oilpriceapi.com/v1/demo/prices`
- Auth: none required

**Start here - no API key needed!**

Returns the latest prices for free-tier commodities. Perfect for testing the API
before signing up or for embedding in documentation examples.

**Available commodities:**
- Brent Crude Oil (BRENT_CRUDE_USD)
- WTI Crude Oil (WTI_USD)
- Natural Gas Henry Hub (NATURAL_GAS_USD)
- Gold (GOLD_USD)
- Gold AM/PM Fix (GOLD_AM_USD, GOLD_AM_GBP, GOLD_AM_EUR, GOLD_PM_USD, GOLD_PM_GBP, GOLD_PM_EUR)
- Silver (SILVER_USD)
- Silver Fix (SILVER_FIX_USD, SILVER_FIX_GBP, SILVER_FIX_EUR)
- EUR/USD (EUR_USD)
- USD/NOK (USD_NOK)
- EUR/NOK (EUR_NOK)
- GBP/USD (GBP_USD)
- Heating Oil (HEATING_OIL_USD)
- Gasoline RBOB (GASOLINE_USD)
- Diesel (DIESEL_USD)

**Rate limit:** 25 requests per day, per IP (no key required). The count resets at 00:00 UTC.

**Batch size:** up to 20 codes per request (`?codes=A,B,C`), counted as a single
request — the same cap the authenticated `/v1/prices/latest` enforces. More than
20 returns `400`. With no parameters the endpoint returns the first 20 free codes.

**Need more?** [Get a free API key](https://www.oilpriceapi.com/signup) for full access.

## Response `200`

Demo price data with code examples

- DemoPricesResponse: Response from demo API endpoint (no authentication required)
  - `status` string
  - `data` object
    - `prices` DemoPrice[]
      - `code` string: Commodity code
      - `name` string: Human-readable commodity name
      - `price` number, float, nullable: Selected price, or null when unavailable
      - `currency` string: Price currency
      - `updated_at` string, date-time, nullable: Collection time, or null when unavailable. See benchmark.observed_at for source market time.
      - `benchmark` PriceBenchmark: Semantic identity and provenance for WTI or Brent benchmark prices. Explicit contract identity is included only when known. WTI retains its early-roll policy; the selected delivery month may differ from the earliest unexpired contract. Compare contract_month and observed_at when comparing quotes.
        - `id` string: Stable benchmark identifier
        - `name` string: Benchmark instrument name
        - `instrument_type` string
        - `quote_type` string
        - `unit` string
        - `contract_month` string: Selected delivery month when explicitly known; omitted for an unidentified publisher-managed contract
        - `roll_method` string: How the selected observation identifies its contract
        - `roll_signal` string: Stored signal used in contract selection, when available. A signal does not by itself mean a roll occurred.
        - `observed_at` string, date-time, nullable: Source market observation time; null when unavailable, never substituted with collection time
        - `observation_time_basis` 'upstream_market' | 'unavailable'
        - `collected_at` string, date-time: Time the selected price row was collected
        - `source_tier` string: Selection tier of the observation
      - `stale` boolean: Whether the selected observation is stale under the commodity's freshness policy
      - `data_status` string: Freshness verdict when evaluated, or unavailable when no benchmark can be selected
      - `message` string: Recovery guidance when the price is unavailable
      - `source` string: Data source
    - `meta` object
      - `demo_mode` boolean
      - `rate_limit` string
      - `signup_url` string
      - `documentation_url` string
    - `examples` object
      - `curl` string
      - `python` string
      - `javascript` string

## Other responses

- `429`: Rate limit exceeded
- `500`: Unexpected server error. Retry transient failures with bounded backoff and retain the request ID when contacting support.

## Changes

- **2026-10-20** `b987321524a8`: 2 breaking, 4 info
  - the response property `data/prices/items/price` became nullable for the status `200`
  - the response property `data/prices/items/updated_at` became nullable for the status `200`
  - added the optional property `data/prices/items/benchmark` to the response with the `200` status
  - added the optional property `data/prices/items/data_status` to the response with the `200` status
  - …2 more

[Operation history](https://skmtc.dev/oilpriceapi/apis/oil-price-api-v1/changes/v1/demo/prices/get.md)

---

[API](https://skmtc.dev/oilpriceapi/apis/oil-price-api-v1.md) - [All operations](https://skmtc.dev/oilpriceapi/apis/oil-price-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/oilpriceapi/apis/oil-price-api-v1/revisions/7f8b4d763210?raw)
