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

# Transaction Aggregates: Bulk

> Returns transaction blends ordered by transaction_date ascending, capped at `limit` rows without pagination — intended for retrieving a full filtered window in one call. Each row is a volume-weighted blend of settled transactions from the same (GPU model, region group, contract type, reserved tenor) bucket, adjacent by date. Only the volume-weighted price is published (no median/min/max), and rows are NOT additive: neighbouring rows can share underlying transactions, so never SUM `total_gpu_count` / `total_gpu_hours` across rows.

Transaction blends ordered by `transaction_date` ascending, capped at `limit` rows without pagination — intended for retrieving a full filtered window in one call. Same bucketing and non-additivity rules as the paginated [Blends](/pricing/endpoint/txn-aggregate) endpoint.

<Info>
  Only the volume-weighted price is published. Rows are **not additive** — neighbouring rows can share underlying transactions, so never SUM `total_gpu_count` / `total_gpu_hours` across rows.
</Info>

## Example

```bash theme={null}
# Full H100 reserved window in one call
curl -H "Authorization: Bearer $TOKEN" \
  "https://data-api.compute-index.com/v1/txn-aggregate/analytics?gpu_model=H100&contract_type=reserved&limit=1000"
```


## OpenAPI

````yaml pricing/openapi.json GET /v1/txn-aggregate/analytics
openapi: 3.1.0
info:
  title: GPU Pricing API
  description: |2-

        **GPU Pricing API** provides real-time and historical pricing data
        for GPU compute across 50+ cloud providers and GPU marketplaces.

        ## Features
        - Search current prices across vendors
        - Historical price trends
        - GPU transaction data
        - **Transaction Aggregates** — privacy-safe blends of settled GPU transactions
        - **Informational Price Index** — EWMA-smoothed composite indices by GPU family, region, and contract type
        - **Transaction Price Index** — smoothed indices derived from verified GPU transactions
        - **Custom Index** — EWMA-smoothed H100 sub-model indices by region, contract type, and vendor category
        - Global region coverage (US, EU, APAC)
        - GPU availability tracking
        - Scope-based API key access control

        ## Authentication
        Send your token as a Bearer token in the `Authorization` header on every request:
        ```
        Authorization: Bearer YOUR_TOKEN
        ```
        Example:
        ```bash
        curl -H "Authorization: Bearer $TOKEN" "https://data-api.compute-index.com/v1/vendors"
        ```
        Tokens are issued by Compute Index (david@compute-index.com); long-lived, treat as secrets.

        > The legacy `X-API-Key` header is deprecated — use the `Authorization: Bearer` header above.

        ## Rate Limits
        - **Free tier**: 10 requests/minute, 1,000/day
        - **Pro tier**: 100 requests/minute, 100,000/day
        - **Enterprise**: Custom limits

        Limits are per key, on fixed windows: the per-minute window resets at the top
        of each minute and the daily quota at 00:00 UTC.

        ## Data Coverage
        - 50+ vendors (AWS, Azure, GCP, Oracle, CoreWeave, Lambda, RunPod, Vast.AI, FluidStack, Vultr, etc.)
        - 30M+ historical pricing records
        - Updated multiple times daily

        ## Support
        - Support: david@compute-index.com
        
  contact:
    name: API Support
    email: david@compute-index.com
  license:
    name: Commercial License
    url: https://compute-desk.com/license
  version: 1.0.0
servers:
  - url: https://data-api.compute-index.com
security: []
paths:
  /v1/txn-aggregate/analytics:
    get:
      tags:
        - Transaction Aggregates
      summary: Get transaction blends in bulk
      description: >-
        Returns transaction blends ordered by transaction_date ascending, capped
        at `limit` rows without pagination — intended for retrieving a full
        filtered window in one call. Each row is a volume-weighted blend of
        settled transactions from the same (GPU model, region group, contract
        type, reserved tenor) bucket, adjacent by date. Only the volume-weighted
        price is published (no median/min/max), and rows are NOT additive:
        neighbouring rows can share underlying transactions, so never SUM
        `total_gpu_count` / `total_gpu_hours` across rows.
      operationId: get_transaction_aggregates_analytics_v1_txn_aggregate_analytics_get
      parameters:
        - name: gpu_model
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: 'Filter by GPU model (comma-separated). Example: H100,H200'
            title: Gpu Model
          description: 'Filter by GPU model (comma-separated). Example: H100,H200'
        - name: gpu_canonical_name
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Filter by GPU canonical name (comma-separated). Example:
              nvidia-h100-sxm5-80gb
            title: Gpu Canonical Name
          description: >-
            Filter by GPU canonical name (comma-separated). Example:
            nvidia-h100-sxm5-80gb
        - name: region_group
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Filter by region group (comma-separated). Options: us, eu, apac,
              other
            title: Region Group
          description: >-
            Filter by region group (comma-separated). Options: us, eu, apac,
            other
        - name: contract_type
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Filter by contract type (comma-separated). Options: ondemand,
              spot, reserved
            title: Contract Type
          description: >-
            Filter by contract type (comma-separated). Options: ondemand, spot,
            reserved
        - name: start_date
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                format: date
              - type: 'null'
            description: Include transactions on/after this date (YYYY-MM-DD)
            title: Start Date
          description: Include transactions on/after this date (YYYY-MM-DD)
        - name: end_date
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                format: date
              - type: 'null'
            description: Include transactions on/before this date (YYYY-MM-DD)
            title: End Date
          description: Include transactions on/before this date (YYYY-MM-DD)
        - name: gpu_count_min
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: 'null'
            description: Filter txn rows by GPU quantity (pre-aggregation)
            title: Gpu Count Min
          description: Filter txn rows by GPU quantity (pre-aggregation)
        - name: gpu_count_max
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: 'null'
            description: Filter txn rows by GPU quantity (pre-aggregation)
            title: Gpu Count Max
          description: Filter txn rows by GPU quantity (pre-aggregation)
        - name: commitment_days_min
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: Filter txn rows by commitment days (pre-aggregation)
            title: Commitment Days Min
          description: Filter txn rows by commitment days (pre-aggregation)
        - name: commitment_days_max
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: Filter txn rows by commitment days (pre-aggregation)
            title: Commitment Days Max
          description: Filter txn rows by commitment days (pre-aggregation)
        - name: discount_percentage_min
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: 'null'
            description: >-
              Filter aggregate rows by volume-weighted discount percentage
              (post-aggregation)
            title: Discount Percentage Min
          description: >-
            Filter aggregate rows by volume-weighted discount percentage
            (post-aggregation)
        - name: discount_percentage_max
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: 'null'
            description: >-
              Filter aggregate rows by volume-weighted discount percentage
              (post-aggregation)
            title: Discount Percentage Max
          description: >-
            Filter aggregate rows by volume-weighted discount percentage
            (post-aggregation)
        - name: price_difference_min
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: 'null'
            description: >-
              Filter aggregate rows by reference_price - price
              (post-aggregation)
            title: Price Difference Min
          description: Filter aggregate rows by reference_price - price (post-aggregation)
        - name: price_difference_max
          in: query
          required: false
          schema:
            anyOf:
              - type: number
              - type: 'null'
            description: >-
              Filter aggregate rows by reference_price - price
              (post-aggregation)
            title: Price Difference Max
          description: Filter aggregate rows by reference_price - price (post-aggregation)
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            maximum: 10000
            minimum: 1
            description: Maximum number of rows returned (max 10000)
            default: 2000
            title: Limit
          description: Maximum number of rows returned (max 10000)
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionAggregateAnalyticsResponse'
              example:
                count: 2
                data:
                  - blend_axis: null
                    blend_region_group: null
                    blend_tenor_days: null
                    contract_type: reserved
                    discount_percentage: 59.1
                    gpu_canonical_name: nvidia-h100-sxm5-80gb
                    gpu_model: H100
                    is_rolling: false
                    price: 2.9
                    region_group: other
                    tenor_days: 60
                    total_gpu_count: 64
                    total_gpu_hours: null
                    transaction_date: '2024-09-10'
                  - blend_axis: null
                    blend_region_group: null
                    blend_tenor_days: null
                    contract_type: reserved
                    discount_percentage: 71.5
                    gpu_canonical_name: nvidia-h100-sxm5-80gb
                    gpu_model: H100
                    is_rolling: false
                    price: 1.92
                    region_group: apac
                    tenor_days: 360
                    total_gpu_count: 8
                    total_gpu_hours: 288
                    transaction_date: '2024-12-16'
                filters:
                  commitment_days_max: null
                  commitment_days_min: null
                  contract_type: reserved
                  discount_percentage_max: null
                  discount_percentage_min: null
                  end_date: null
                  gpu_canonical_name: null
                  gpu_count_max: null
                  gpu_count_min: null
                  gpu_model: H100
                  limit: 2
                  price_difference_max: null
                  price_difference_min: null
                  region_group: null
                  start_date: null
        '401':
          description: Unauthorized — missing or invalid credentials
          content:
            application/json:
              schema:
                title: ErrorResponse
                type: object
                properties:
                  detail:
                    type: string
                required:
                  - detail
              examples:
                missing_credentials:
                  summary: No credentials supplied
                  value:
                    detail: >-
                      Authentication required. Provide an X-API-Key header or an
                      Authorization: Bearer token.
                invalid_token:
                  summary: Invalid or expired token
                  value:
                    detail: Invalid or expired token
        '403':
          description: Forbidden — key lacks the required scope
          content:
            application/json:
              schema:
                title: ErrorResponse
                type: object
                properties:
                  detail:
                    type: string
                required:
                  - detail
              examples:
                missing_scope:
                  summary: Key lacks the required scope
                  value:
                    detail: >-
                      Access denied. Your API key does not have permission to
                      access this resource.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: >-
            Too Many Requests — limit and reset are returned in X-RateLimit-*
            headers; the limit reflects your key's tier
          content:
            application/json:
              schema:
                title: ErrorResponse
                type: object
                properties:
                  detail:
                    type: string
                required:
                  - detail
              examples:
                minute_limit:
                  summary: Per-minute limit exceeded (figure reflects your key's tier)
                  value:
                    detail: 'Rate limit exceeded: 100 requests per minute'
      security:
        - HTTPBearer: []
components:
  schemas:
    TransactionAggregateAnalyticsResponse:
      properties:
        data:
          items:
            $ref: '#/components/schemas/TransactionAggregateResponse'
          type: array
          title: Data
        count:
          type: integer
          title: Count
        filters:
          additionalProperties: true
          type: object
          title: Filters
      type: object
      required:
        - data
        - count
        - filters
      title: TransactionAggregateAnalyticsResponse
      description: Transaction-aggregate rows (capped, ordered by transaction_date ASC)
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    TransactionAggregateResponse:
      properties:
        gpu_model:
          type: string
          title: Gpu Model
          description: GPU model as displayed (e.g. H100, H200)
        gpu_canonical_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Gpu Canonical Name
          description: GPU canonical name
        region_group:
          type: string
          title: Region Group
          description: 'Region group: us, eu, apac, or other'
        contract_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Contract Type
          description: Contract type (ondemand, spot, reserved)
        tenor_days:
          anyOf:
            - type: integer
            - type: 'null'
          title: Tenor Days
          description: Reserved contract length in days; null for ondemand/spot
        price:
          type: number
          title: Price
          description: Volume-weighted mean $/GPU-hr across the underlying transactions
        total_gpu_count:
          type: number
          title: Total Gpu Count
          description: >-
            Combined GPU count of the underlying transactions; NOT additive
            across rows
        total_gpu_hours:
          anyOf:
            - type: number
            - type: 'null'
          title: Total Gpu Hours
          description: Combined GPU-hours; NOT additive across rows
        transaction_date:
          type: string
          format: date
          title: Transaction Date
          description: Date of the most recent underlying transaction (YYYY-MM-DD)
        discount_percentage:
          anyOf:
            - type: number
            - type: 'null'
          title: Discount Percentage
          description: Volume-weighted discount vs public reference price
        is_rolling:
          type: boolean
          title: Is Rolling
          description: >-
            True when this row shares an underlying transaction with the
            previous row
        blend_axis:
          anyOf:
            - type: string
            - type: 'null'
          title: Blend Axis
          description: >-
            Null when the row is blended entirely within its own bucket. For
            sparse buckets blended with the nearest neighbour bucket of the same
            GPU + contract: 'tenor' (blended with a different reserved term,
            region exact) or 'region' (blended with a different region, term
            exact)
        blend_tenor_days:
          anyOf:
            - type: integer
            - type: 'null'
          title: Blend Tenor Days
          description: Neighbour's tenor in days when blend_axis is 'tenor'
        blend_region_group:
          anyOf:
            - type: string
            - type: 'null'
          title: Blend Region Group
          description: Neighbour's region group when blend_axis is 'region'
      type: object
      required:
        - gpu_model
        - region_group
        - price
        - total_gpu_count
        - transaction_date
        - is_rolling
      title: TransactionAggregateResponse
      description: >-
        One transaction-aggregate row: a volume-weighted blend of settled txns

        from the same (gpu, region, contract_type, reserved-tenor) bucket,
        adjacent by date.


        Only the volume-weighted `price` is published. Rows are NOT additive —

        neighbouring rows can share underlying transactions — so callers must
        never

        SUM total_gpu_count / total_gpu_hours.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer

````