Data API · v1

Probability-scored AI-infrastructure data, via REST.

Five products behind one API key: compute-price index, capacity signals, facility & fab reference data, inference economics, and an LCOE calculator. Every number ships with the source trail, methodology version, and uncertainty band that produced it.

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

Current production path. Moving to https://api.greencio.com/v1 when the subdomain split lands — DNS & Vercel config only, no contract change.

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. Should take under 60 seconds.

  1. 1. Get a test key.

    Sign up for a free test key — your gc_test_… key is issued immediately and emailed to you. Test keys run against the same endpoints as live keys but cannot bill.

  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"

    You will get back an envelope like this:

    json200 OK
    {
      "data": [
        {
          "id": "sig_01HZF8N7C3K9YR3P6Q5R2VTYBW",
          "type": "permit_filing",
          "title": "Ohio data center permit — PUCO filing detected",
          "impact": "high",
          "observed_at": "2026-05-12T14:08:00Z",
          "operator": "Meta",
          "region": "US-OH",
          "source_url": "https://puco.ohio.gov/...",
          "linked_markets": ["mkt_01HZF8K..."]
        }
      ],
      "meta": {
        "generated_at": "2026-05-16T00:00:00Z",
        "request_id": "req_01HZH5J7K4M9Q8...",
        "next_cursor": "eyJpZCI6InNpZ18wMUhaRjhONy...",
        "source_mode": "seed_reference"
      }
    }

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": "seed_reference"
  }
}
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 429 to 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

Classified, scored, source-traceable signals on permits, grid filings, financings, and policy moves — plus the raw intelligence items underneath and the facility master they reference. The flagship Insights-tier product.

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/facilitiesData-center facility master (filter: country, operator, capacity_min, stage)Insights
GET/v1/facilities/{id}Single facility with linked signalsInsights
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"

Compute Index (GCI)

Forward and spot compute-price benchmarks across SKU × region × tenor, with bands, basis to CME settlement, and a published methodology. Pro-tier.

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 vs CME forward curvePro
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"

Inference Economics

Composite calculator that answers “does this datacenter make money?”: token cost × GPU utilization × power cost × LCOE → unit economics per million tokens. The token-price reference is shipped as a signed methodology version, not a black box.

MethodPathDescriptionTier
GET/v1/inference/token-pricesInput/output token prices per provider, USD/1M tokensPro
GET/v1/inference/token-prices/historyHistorical token-price seriesPro
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

Semiconductor fab reference data and supply-chain chokepoint scores. Use these to ground capacity narratives in actual node availability.

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 have stable namespaces (/v1/index/power/*, /v1/carbon/*) and /methodology endpoints live 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
  • Facilities
  • LCOE calculator

50,000 req / month · 30 / sec burst

Pro
$4,000/ month

Trading desks, infra funds, hyperscaler corporate strategy.

Includes

  • Everything in Insights
  • Compute Index
  • Inference Economics
  • Fabs

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 — initial release. Capacity Signals, Compute Index, Inference Economics, Fabs, LCOE. Power Forecast and Carbon Trail namespaces reserved for v1.1 / v1.2.