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.
https://www.greencio.com/api/v1Current production path. Moving to https://api.greencio.com/v1 when the subdomain split lands — DNS & Vercel config only, no contract change.
- JSON over HTTPS. ISO-8601 UTC throughout.
- Bearer auth. Cursor pagination.
{ data, meta }envelope. - Additive changes only inside
v1. Breaking changes getv2.
Quickstart
Three steps. Should take under 60 seconds.
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. Set the Authorization header.
bashexport GREENCIO_API_KEY="gc_test_..."3. Make your first request.
curlGET /v1/capacity/signalscurl 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:
| Prefix | Environment | Can bill | Allocation |
|---|---|---|---|
gc_test_ | Test sandbox | No | Self-serve from /docs/api/keys |
gc_live_ | Live production | Yes | Hand-allocated — email hello@greencio.com |
curl https://www.greencio.com/api/v1/index/compute \
-H "Authorization: Bearer $GREENCIO_API_KEY"Key lifecycle
- Issued: shown once at creation time. Store it immediately.
- Active: validates on every request.
last_used_atupdates 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.
{
"data": [ /* items */ ],
"meta": {
"generated_at": "2026-05-16T00:00:00Z",
"request_id": "req_01HZH...",
"next_cursor": "eyJpZCI6...",
"source_mode": "seed_reference"
}
}{
"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.
# 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"limitdefaults to 50, max 500.cursoris opaque base64. Don't parse it; round-trip what we sent.meta.next_cursorisnullwhen 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.
| Prefix | Resource | Example |
|---|---|---|
| int_ | Intelligence item | int_01HZF8N7C3K9YR3P6Q5R2VTYBW |
| sig_ | Capacity signal | sig_01HZF8N7C3K9YR3P6Q5R2VTYBW |
| fac_ | Data-center facility | fac_01HZF8N7C3K9YR3P6Q5R2VTYBW |
| fab_ | Semiconductor fab | fab_01HZF8N7C3K9YR3P6Q5R2VTYBW |
| set_ | Index settlement | set_01HZF8N7C3K9YR3P6Q5R2VTYBW |
| mkt_ | Prediction market | mkt_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.
| HTTP | Code | Meaning |
|---|---|---|
| 400 | invalid_request | Malformed body or missing required field. |
| 400 | invalid_filter | Filter value rejected; the field names the offender. |
| 401 | unauthenticated | Missing, malformed, expired, or revoked key. |
| 403 | unauthorized | Key valid, but your tier does not include this resource. |
| 404 | not_found | Resource ID not recognized. |
| 409 | idempotency_conflict | Same Idempotency-Key with a different body. |
| 422 | validation_failed | Body parsed but failed semantic validation. |
| 429 | rate_limited | Burst or monthly quota exceeded — check the Retry-After header. |
| 500 | internal_error | Bug on our side. Include request_id in any report. |
| 503 | service_unavailable | Backing 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.
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:00ZWhen you exceed either limit you get a 429 with a Retry-After header in seconds.
| Tier | Burst / sec | Quota / month |
|---|---|---|
| Insights | 30 | 50,000 |
| Pro | 100 | 250,000 |
| Carbon Trail | 20 | 100,000 runs |
| Enterprise | Negotiated | Negotiated |
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 -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 body →
409 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.
| Method | Path | Description | Tier |
|---|---|---|---|
| GET | /v1/capacity/signals | List classified signals (filter: type, impact, since, operator, region) | Insights |
| GET | /v1/capacity/signals/{id} | Single signal with full source chain and linked markets | Insights |
| GET | /v1/capacity/intelligence | Underlying news items (titles + GreenCIO summaries; no third-party article bodies) | Insights |
| GET | /v1/capacity/intelligence/{id} | Single intelligence item | Insights |
| GET | /v1/facilities | Data-center facility master (filter: country, operator, capacity_min, stage) | Insights |
| GET | /v1/facilities/{id} | Single facility with linked signals | Insights |
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.
| Method | Path | Description | Tier |
|---|---|---|---|
| GET | /v1/index/compute | Current settlements with bands and 24h move | Pro |
| GET | /v1/index/compute/{index_name} | Single settlement detail | Pro |
| GET | /v1/index/compute/history | Historical settlements, cursor-paginated | Pro |
| GET | /v1/index/compute/basis | Basis vs CME forward curve | Pro |
| GET | /v1/index/compute/methodology | Methodology version metadata | Pro |
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.
| Method | Path | Description | Tier |
|---|---|---|---|
| GET | /v1/inference/token-prices | Input/output token prices per provider, USD/1M tokens | Pro |
| GET | /v1/inference/token-prices/history | Historical token-price series | Pro |
| POST | /v1/inference/unit-economics | Composite calculation. Idempotency-Key required. | Pro |
| POST | /v1/lcoe | Levelized cost of energy. Idempotency-Key required. | Insights |
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.
| Method | Path | Description | Tier |
|---|---|---|---|
| GET | /v1/fabs | Fab master (filter: region, node, operator) | Pro |
| GET | /v1/fabs/{id} | Single fab | Pro |
| GET | /v1/fabs/chokepoints | Supply-chain chokepoint scores by node | Pro |
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.
Sell-side research, climate-tech VCs, IPP strategy.
Includes
- Capacity Signals
- Facilities
- LCOE calculator
50,000 req / month · 30 / sec burst
Trading desks, infra funds, hyperscaler corporate strategy.
Includes
- Everything in Insights
- Compute Index
- Inference Economics
- Fabs
250,000 req / month · 100 / sec burst
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.yamlin 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.