---
title: "Hourly time-weighted OHLC bars for one instance type."
method: GET
path: "/v1/spot/hourly"
tags: ["spot"]
---

# Hourly time-weighted OHLC bars for one instance type.

`GET /v1/spot/hourly`

## Request

- Base URL: `https://cloud.trycorpus.ai`
- URL: `https://cloud.trycorpus.ai/v1/spot/hourly`
- Auth: one of:
  - API key in header `PAYMENT-SIGNATURE`
  - API key in header `Authorization`
  - API key in header `X-Api-Key`

Per-zone series are bucketed by UTC hour with time weighting (a price counts for as long as it was in force), then collapsed across zones: open/close/avg are the median across zones, high is the max, low is the min. Window is capped at 366 days.

## Query parameters

- `provider` 'aws' | 'gcp' | 'azure', required
- `region` string, required
- `instance` string, required
- `from` string, date-time
- `to` string, date-time

## Response `200`

Hourly bars.

- HourlyBars
  - `provider` string
  - `region` string
  - `instance` string
  - `zones` integer: Number of zone series collapsed.
  - `from` string, date-time
  - `to` string, date-time
  - `count` integer
  - `bars` object[]
    - `hour` string, required: Bucket start, ISO 8601 UTC hour.
    - `open` number, required: Price in force at the start of the bucket, USD per hour (median across AZs).
    - `high` number, required: Highest price seen in any AZ during the bucket.
    - `low` number, required: Lowest price seen in any AZ during the bucket.
    - `close` number, required: Price in force at the end of the bucket (median across AZs).
    - `avg` number, required: Time-weighted average price over the bucket (median across AZs). This is the value the public dashboard shows.
    - `dur` integer: Seconds of the bucket covered by known prices (a partial value means the series starts or ends inside the bucket).

## Other responses

- `400`: Invalid or missing parameter.
- `402`: Payment required. The x402 v2 payment requirements are in the PAYMENT-REQUIRED header (base64 JSON) and repeated as the JSON body: `accepts[]` lists every offer (USDC on 13 networks: eip155:8453, eip155:143, eip155:1, eip155:43114, eip155:42161, eip155:10, eip155:137, eip155:130, eip155:146, eip155:480, eip155:1329, eip155:999, eip155:5042) with amount and payTo address. Circle Gateway offers cover every listed network; a Coinbase-facilitated offer covers Base. The same response carries an MPP challenge (WWW-Authenticate: Payment, USDC on Tempo). Retry with a PAYMENT-SIGNATURE header or an MPP credential, or let an x402 or MPP client (for example `circle services pay` or `mppx`) handle it; a prepaid key in X-Api-Key is charged instead of a 402.
- `404`: Unknown provider, region or instance type.
- `503`: The store is still warming up after a restart; retry in a minute. No payment is taken.

---

[API](https://skmtc.dev/trycorpus/apis/corpusai-cloud-pricing-api.md) · [All operations](https://skmtc.dev/trycorpus/apis/corpusai-cloud-pricing-api/llms.txt) · [OpenAPI document](https://skmtc.dev/trycorpus/apis/corpusai-cloud-pricing-api/revisions/cb0754f4d151?raw)
