Data API · v1

Source-labeled AI-infrastructure data, via REST.

The repository implements Compute Index, capacity, facility/fab reference, token-price, inference-economics, and LCOE route families. Availability is independent by product: persisted products require their live data gates, while uncleared static datasets are quarantined from customer-serving runtimes. Every response declares its source mode; reference responses also expose freshness, evidence, and source-right limitations.

Base URL
https://www.greencio.com/api/v1

Repository route target. A key or successful render is not proof that a product's deployment, data, freshness, or source-right gate has passed. https://api.greencio.com/v1 remains a future host target.

Contract
  • JSON over HTTPS. ISO-8601 UTC throughout.
  • Bearer auth. Cursor pagination. { data, meta } envelope.
  • Additive changes only inside v1. Breaking changes get v2.

Quickstart

Three steps after a reviewed key has been issued.

  1. 1. Request a design-partner key.

    Send a reviewed access request. Self-service key issuance is closed for this launch. Approved test or live keys are delivered through an operator-controlled channel and use the same Bearer authentication path.

  2. 2. Set the Authorization header.

    bash
    export GREENCIO_API_KEY="gc_test_..."
  3. 3. Make your first request.

    curlGET /v1/capacity/signals
    curl https://www.greencio.com/api/v1/capacity/signals?limit=1 \
      -H "Authorization: Bearer $GREENCIO_API_KEY"

    In an explicit local demo/test profile, Capacity Signals returns only source-linked seed rows in a quarantined reference envelope. The example below is illustrative, not live data.

    json200 OK
    {
      "data": [
        {
          "id": "sig_01HZF8N7C3K9YR3P6Q5R2VTYBW",
          "type": "permit",
          "title": "Illustrative source-linked reference signal",
          "impact": "high",
          "observed_at": "2026-05-12T14:08:00Z",
          "source_url": "https://publisher.example/reference",
          "confidence_status": "legacy_seed_score_unverified",
          "linked_markets": []
        }
      ],
      "meta": {
        "generated_at": "2026-05-16T00:00:00Z",
        "request_id": "req_01HZH5J7K4M9Q8...",
        "next_cursor": "eyJpZCI6InNpZ18wMUhaRjhONy...",
        "source_mode": "seed_reference",
        "status": "demo_reference",
        "freshness": "breached",
        "evidence_status": "source_linked_rows_only",
        "source_rights": {
          "counsel_status": "pending_review",
          "publication_scope": "demo_only"
        }
      }
    }

That's it. Same shape across every endpoint — list responses always come with a next_cursor, single resources omit it. Continue with Authentication to understand key lifecycle, or jump to Reference for the endpoint list.

Authentication

Every request must include an Authorization header with a Bearer token. Keys come in two flavors:

PrefixEnvironmentCan billAllocation
gc_test_Test sandboxNoSelf-serve from /docs/api/keys
gc_live_Live productionYesHand-allocated — email hello@greencio.com
bash
curl https://www.greencio.com/api/v1/index/compute \
  -H "Authorization: Bearer $GREENCIO_API_KEY"
Never use a live key from browser code. The API is server-to-server. Keys belong in environment variables or your secret manager, not in client bundles or public repos. Compromised keys can be rotated by contacting support.

Key lifecycle

  • Issued: shown once at creation time. Store it immediately.
  • Active: validates on every request. last_used_at updates each call.
  • Revoked: returns 401 unauthenticated. Rotation is hand-driven today; a self-serve rotation UI lands in v1.1.

Conventions

Every endpoint in the API follows the same conventions. Once you know them you know all of v1.

Response envelope

Success responses always have data and meta. Error responses always have error. Errors never appear inside data.

jsonSuccess — collection
{
  "data": [ /* items */ ],
  "meta": {
    "generated_at": "2026-05-16T00:00:00Z",
    "request_id": "req_01HZH...",
    "next_cursor": "eyJpZCI6...",
    "source_mode": "persisted"
  }
}
jsonError — any status ≥ 400
{
  "error": {
    "code": "invalid_filter",
    "message": "since must be ISO-8601 UTC",
    "field": "since",
    "request_id": "req_01HZH..."
  }
}

The request_id appears in both the body and the X-Request-Id response header. Include it in any support email and we can trace the exact call.

Pagination

Collections are cursor-paginated. There is no offset pagination and there will never be — it does not survive data drift.

curl
# First page
curl "https://www.greencio.com/api/v1/capacity/signals?limit=50" \
  -H "Authorization: Bearer $GREENCIO_API_KEY"

# Next page — pass meta.next_cursor from the previous response
curl "https://www.greencio.com/api/v1/capacity/signals?limit=50&cursor=eyJpZCI6..." \
  -H "Authorization: Bearer $GREENCIO_API_KEY"
  • limit defaults to 50, max 500.
  • cursor is opaque base64. Don't parse it; round-trip what we sent.
  • meta.next_cursor is null when the result set is exhausted.

Time format

Every timestamp is an ISO-8601 string in UTC: 2026-05-16T00:00:00Z. No Unix epoch, no locale variation. Filters that accept a time accept the same format.

Resource IDs

IDs are opaque, stable, and prefixed by resource type. Customers store them; the prefix prevents the “is this a signal or a facility ID?” support load.

PrefixResourceExample
int_Intelligence itemint_01HZF8N7C3K9YR3P6Q5R2VTYBW
sig_Capacity signalsig_01HZF8N7C3K9YR3P6Q5R2VTYBW
fac_Data-center facilityfac_01HZF8N7C3K9YR3P6Q5R2VTYBW
fab_Semiconductor fabfab_01HZF8N7C3K9YR3P6Q5R2VTYBW
set_Index settlementset_01HZF8N7C3K9YR3P6Q5R2VTYBW
mkt_Prediction marketmkt_01HZF8N7C3K9YR3P6Q5R2VTYBW
req_Request (response only)req_01HZH5J7K4M9Q8...

Errors

Every error response uses the same shape and one of a fixed taxonomy of codes. Match on code, not on message — messages may change for clarity, codes will not.

HTTPCodeMeaning
400invalid_requestMalformed body or missing required field.
400invalid_filterFilter value rejected; the field names the offender.
401unauthenticatedMissing, malformed, expired, or revoked key.
403unauthorizedKey valid, but your tier does not include this resource.
404not_foundResource ID not recognized.
409idempotency_conflictSame Idempotency-Key with a different body.
422validation_failedBody parsed but failed semantic validation.
429rate_limitedBurst or monthly quota exceeded — check the Retry-After header.
500internal_errorBug on our side. Include request_id in any report.
503service_unavailableBacking data missing or upstream dependency down. Retry with backoff.

Rate limits

Two independent limits: a per-second burst and a monthly quota. Both are surfaced on every response, including success responses, so you don't need to hit 429to learn what's left.

httpResponse headers (every request)
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 28
X-RateLimit-Reset: 2026-05-16T00:00:01Z
X-RateLimit-Quota-Limit: 50000
X-RateLimit-Quota-Remaining: 47233
X-RateLimit-Quota-Reset: 2026-06-01T00:00:00Z

When you exceed either limit you get a 429 with a Retry-After header in seconds.

TierBurst / secQuota / month
Insights3050,000
Pro100250,000
Carbon Trail20100,000 runs
EnterpriseNegotiatedNegotiated

Test keys run at Pro-level limits so you can iterate without throttling, but their monthly counter is separate from any live key on the same account.

Idempotency

Every POST endpoint accepts an Idempotency-Key header. It is required for endpoints that compute billing-relevant results — currently /lcoe and /inference/unit-economics. Optional elsewhere. Without it, a network retry would create a duplicate.

curl
curl -X POST https://www.greencio.com/api/v1/lcoe \
  -H "Authorization: Bearer $GREENCIO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "capex_usd": 1200000000,
    "annual_generation_mwh": 2400000,
    "project_lifetime_years": 20,
    "discount_rate": 0.08,
    "annual_opex_usd": 40000000
  }'
  • Send the same key with the same body → original response is replayed. Safe to retry.
  • Send the same key with a different body409 idempotency_conflict. Pick a new key.
  • Keys are valid for 24 hours. After that, the slot is reusable.
  • Use UUID v4, a request hash, or any 8–200 char string. We don't parse it; we match it.

Reference

Five products. Endpoint tier indicates which subscription plan grants access — see Pricing.

Capacity Signals

The seed-signal routes are preview fixtures: they return only rows with a canonical external source URL, label legacy confidence as unverified, and never synthesize linked-market probabilities. They are unavailable to live keys and customer-serving runtimes. The separate intelligence routes require fresh persisted GCS data and approved news-publication rights. The facility CSV is also quarantined: it has prose source notes but no canonical row URLs, approved rights record, or source observation date; filesystem mtime is not freshness evidence.

MethodPathDescriptionTier
GET/v1/capacity/signalsList classified signals (filter: type, impact, since, operator, region)Insights
GET/v1/capacity/signals/{id}Single signal with full source chain and linked marketsInsights
GET/v1/capacity/intelligenceUnderlying news items (titles + GreenCIO summaries; no third-party article bodies)Insights
GET/v1/capacity/intelligence/{id}Single intelligence itemInsights
GET/v1/facilitiesQuarantined facility CSV fixture (demo/test only)Insights
GET/v1/facilities/{id}Single unverified facility fixture rowInsights
curlGET /v1/capacity/signals?impact=high&operator=meta
curl "https://www.greencio.com/api/v1/capacity/signals?impact=high&operator=meta&limit=2" \
  -H "Authorization: Bearer $GREENCIO_API_KEY"

GreenCIO Compute Index

Forward and spot compute-price benchmarks across SKU × region × tenor, with uncertainty bands, regional/SKU basis spreads, and a published methodology, administered independently of any exchange or clearing house. Pro-tier.

Live keys receive methodology-cleared settlements by default. Provisional rows are reserved for review/sandbox workflows and require include_provisional=true with a non-live key.

MethodPathDescriptionTier
GET/v1/index/computeCurrent settlements with bands and 24h movePro
GET/v1/index/compute/{index_name}Single settlement detailPro
GET/v1/index/compute/historyHistorical settlements, cursor-paginatedPro
GET/v1/index/compute/basisBasis spreads versus the headline GCI settlementPro
GET/v1/index/compute/methodologyMethodology version metadataPro
curlGET /v1/index/compute
curl https://www.greencio.com/api/v1/index/compute \
  -H "Authorization: Bearer $GREENCIO_API_KEY"
json200 OK · persisted Compute Index
{
  "data": [
    {
      "id": "set_01KRVW...",
      "index_name": "GCI-H100-USE-SPOT",
      "sku": "H100",
      "region": "US_EAST",
      "tenor": "SPOT",
      "as_of": "2026-05-17T12:00:00.000Z",
      "currency": "USD",
      "value": 5,
      "band_low": 4.8,
      "band_high": 5.2,
      "n_inputs": 5,
      "n_venues": 5,
      "provisional": false,
      "source_mode": "persisted",
      "audit": {
        "included_input_ids": [
          "aws-price-list-api:aws:aws-ec2:p5-48xlarge:h100:us-east-1:on-demand:gpu-hour"
        ],
        "source_weight_shares": {
          "aws-price-list-api": 0.2,
          "azure-retail-prices-api": 0.2,
          "google-cloud-billing-catalog": 0.2,
          "coreweave-gpu-pricing": 0.2,
          "lambda-gpu-cloud-pricing": 0.2
        }
      }
    }
  ],
  "meta": {
    "generated_at": "2026-05-17T12:05:00.000Z",
    "request_id": "req_01KRVW...",
    "next_cursor": null,
    "source_mode": "persisted",
    "methodology_version": "gci-v0.1.1",
    "audit_hash": "b7f3...",
    "provisional_policy": "excluded_by_default",
    "provisional_filtered_count": 0
  }
}

Inference Economics

The deterministic unit-economics and LCOE calculators use submitted assumptions and returnsubmitted_model; they do not silently consume provider token prices. The token-price routes expose a separately sourced snapshot with observation date, freshness, methodology, and approved public-pricing rights metadata. The history path currently returns one labeled snapshot, not a time series.

MethodPathDescriptionTier
GET/v1/inference/token-pricesInput/output token prices per provider, USD/1M tokensPro
GET/v1/inference/token-prices/historySingle token-price snapshot; history_available=falsePro
POST/v1/inference/unit-economicsComposite calculation. Idempotency-Key required.Pro
POST/v1/lcoeLevelized cost of energy. Idempotency-Key required.Insights
curlPOST /v1/inference/unit-economics
curl -X POST https://www.greencio.com/api/v1/inference/unit-economics \
  -H "Authorization: Bearer $GREENCIO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: ue-2026-05-16-001" \
  -d '{
    "facility_capacity_mw": 120,
    "gpu_count": 8192,
    "gpu_type": "H100",
    "capex_usd": 2500000000,
    "power_cost_usd_per_mwh": 68,
    "utilization_rate": 0.72
  }'

Fabs

The current fab and chokepoint fixture has no row-level citations or approved redistribution policy. It is retained for explicit local demo/test UI work, labeled unverified and stale, and returns unavailable for live keys or customer-serving runtimes. Do not use it as node-capacity evidence.

MethodPathDescriptionTier
GET/v1/fabsFab master (filter: region, node, operator)Pro
GET/v1/fabs/{id}Single fabPro
GET/v1/fabs/chokepointsSupply-chain chokepoint scores by nodePro

Power Forecast & Carbon Trail

Two products are spec'd but deliberately not yet returning numbers. Power Forecast (v1.1) needs prediction-market integration to back its probability bands; shipping numbers before that would be theatre. Carbon Trail (v1.2) is targeted at corporate sustainability teams running CSRD/CDP filings — it requires a Big Four assurance partnership we are mid-conversation on.

Both namespaces are specified in the OpenAPI contract for later releases, but they are not published as live customer endpoints today. Email hello@greencio.com if you want design-partner access.

Pricing

Pricing below is a hypothesis we are validating with the first design partners. Don't expect it to be on a buy-now button quite yet — talk to us if you want to lock in.

Insights
$1,500/ month

Sell-side research, climate-tech VCs, IPP strategy.

Includes

  • Capacity Signals (gated; seed demo quarantined)
  • Facilities (quarantined fixture)
  • LCOE calculator

50,000 req / month · 30 / sec burst

Pro
$4,000/ month

Trading desks, infra funds, hyperscaler corporate strategy.

Includes

  • Everything in Insights
  • GreenCIO Compute Index (gated)
  • Inference Economics
  • Fabs (quarantined fixture)

250,000 req / month · 100 / sec burst

Carbon Trail
$2,500/ month

Corporate sustainability teams running CSRD/CDP filings.

Includes

  • Carbon Trail endpoints (v1.2)
  • Audit-grade methodology export

100,000 attribution runs / month

Enterprise plans (custom SLAs, dedicated support, EU data residency on roadmap) are negotiated. Email hello@greencio.com.

Status & changelog

  • OpenAPI spec: docs/api/openapi.yaml in the repo. The contract.
  • Have a regression or a question? Email hello@greencio.com with the failing request's request_id.

Changelog

  • v1.0.0 contract — route families implemented for Capacity Signals, GreenCIO Compute Index, Inference Economics, Fabs, and LCOE. Product availability remains subject to the source-mode, deployment, freshness, and rights gates described above. Power Forecast and Carbon Trail namespaces are reserved for later versions.