<!-- x-generated: Generated by the Hyperscale artifact pipeline; do not edit by hand -->

# Hyperscale GraphQL API documentation

> Tenant GraphQL is a read-only Product API projection. It is generated from the same tenant callable contract as the OpenAPI and SDK surfaces.

## Endpoint

`POST /v1/graphql` executes GraphQL queries over Product data. The endpoint accepts a standard GraphQL request body with `query`, optional `variables`, and optional `operationName`.

Only contract GET operations become root `Query` fields. This contract currently exposes 153 read fields. Mutations stay on REST operations because state changing calls use explicit HTTP routes, scopes, receipts, and idempotency keys.

The generated SDL is written to `generated/graphql/hyperscale.tenant-sdk.v1.graphql`. Host root discovery serves the same SDL at `/graphql/hyperscale.tenant-sdk.v1.graphql`.

## Access

GraphQL is included for every Product, sandbox and live alike; access follows the same API-key scopes and environment binding as the REST surface.

## Cost and rate limits

The GraphQL endpoint uses a fixed 60-second discovery budget of 120 requests per source IP. Because GraphQL consumes that discovery budget, it does not also consume the general 1,200-request IP budget.

After authentication, each root `Query` field costs one credential unit. The default credential budget is 600 units per 60 seconds and deployments may tune it, so clients must read `x-ratelimit-limit`, `x-ratelimit-remaining`, and `x-ratelimit-reset` from responses. A throttled request returns HTTP 429 with `retry-after`; wait until the stated reset before retrying the unchanged query.

## Idempotency

GraphQL is read-only, so clients do not send `Idempotency-Key` for GraphQL requests. Any state changing operation remains a REST mutation. Required idempotency mutations keep the same replay key on retries and return the original terminal result for the same key and request.

## Retries

Automatic retries are opt in for generated clients. Retry only unchanged GraphQL requests after transient 502, 503, or 504 responses, or network reachability failures. Per attempt timeouts fail the whole call and should not be retried by a hidden fallback.
