CarbonGuru Reference API
NAICS, industry sectors, emission factors, countries.
NAICS, industry sectors, emission factors, countries.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/carbonguru-io:carbonguru-io-reference-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: CarbonGuru Reference API
version: 0.1.0
summary: Carbon footprint analysis, history and reference data for a developer's own server.
description: 'One API over the CarbonGuru platform: carbon-footprint analysis of products, carts, text, structured items and files; the sessions, exports and history those analyses produce; reference data; offsets for the account itself; and, for an account with a connected store, catalog footprints, the live footprint read, offset ordering and webhooks. Authenticate with `Authorization: Bearer `. A test key, made in the same place, connects the same way and records every order it posts as a preview: nothing is bought. Errors are RFC 9457 problem documents. Every response carries `X-Request-ID`. Writes accept an `Idempotency-Key`. Lists page with an opaque `next_cursor`. No route accepts terms, saves a payment method or starts automatic offsetting: a signed-in person does those in the account.'
contact:
name: CarbonGuru
url: https://carbonguru.io
servers:
- url: https://carbonguru.io
description: Production
security:
- bearerAuth: []
tags:
- name: Reference
description: NAICS, industry sectors, emission factors, countries.
paths:
/v1/reference/naics:
get:
tags:
- Reference
operationId: searchNaics
summary: Semantic NAICS search
security:
- bearerAuth:
- carbon:reference
parameters:
- name: q
in: query
required: true
schema:
type: string
minLength: 2
- name: limit
in: query
schema:
type: integer
default: 10
minimum: 1
maximum: 25
responses:
'200':
$ref: '#/components/responses/PlatformPayload'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/UnprocessableContent'
/v1/reference/naics/{code}:
get:
tags:
- Reference
operationId: getNaicsCode
summary: A NAICS code's place in the hierarchy
security:
- bearerAuth:
- carbon:reference
parameters:
- name: code
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/PlatformPayload'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
/v1/reference/sectors:
get:
tags:
- Reference
operationId: searchSectors
summary: Industry-sector search across NAICS and Open CEDA
security:
- bearerAuth:
- carbon:reference
parameters:
- name: q
in: query
required: true
schema:
type: string
minLength: 2
- name: system
in: query
schema:
type: string
enum:
- naics
- open_ceda
- name: sector_level
in: query
schema:
type: integer
minimum: 2
maximum: 6
- name: country_code
in: query
schema:
type: string
description: ISO 3-letter code, for an Open CEDA emission factor.
- name: limit
in: query
schema:
type: integer
default: 10
minimum: 1
maximum: 25
responses:
'200':
$ref: '#/components/responses/PlatformPayload'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/UnprocessableContent'
/v1/reference/sectors/{code}:
get:
tags:
- Reference
operationId: getSector
summary: One NAICS or Open CEDA sector
security:
- bearerAuth:
- carbon:reference
parameters:
- name: code
in: path
required: true
schema:
type: string
- name: country_code
in: query
schema:
type: string
responses:
'200':
$ref: '#/components/responses/PlatformPayload'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
/v1/reference/emission-factors/{naics_code}:
get:
tags:
- Reference
operationId: getEmissionFactor
summary: The emission factor for one NAICS code
security:
- bearerAuth:
- carbon:reference
parameters:
- name: naics_code
in: path
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/PlatformPayload'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
/v1/reference/countries:
get:
tags:
- Reference
operationId: listCountries
summary: The geographic contexts available for analysis
security:
- bearerAuth:
- carbon:reference
responses:
'200':
$ref: '#/components/responses/PlatformPayload'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
components:
schemas:
Problem:
type: object
description: RFC 9457 problem document. Served as application/problem+json.
required:
- type
- title
- status
- detail
- code
- request_id
properties:
type:
type: string
description: A stable identifier for this problem kind.
title:
type: string
status:
type: integer
detail:
type: string
code:
type: string
description: The machine-readable name to branch on.
request_id:
type: string
errors:
type: array
description: Field-level problems, when the refusal is about the request's fields.
items:
type: object
required_scope:
type: string
description: Present on insufficient_scope.
retry_after:
type: string
description: Present on a 429, beside the Retry-After header.
max_size_bytes:
type: integer
description: Present on file_too_large.
min_tier:
type: string
description: Present on feature_not_entitled.
current_tier:
type: string
description: Present on feature_not_entitled.
upgrade_url:
type: string
description: Present on feature_not_entitled.
details:
type: object
description: Present on mapping_limit_exceeded.
headers:
XRequestID:
description: The request id, echoed from the caller when it is a sane token, else minted. On every response and in every log line.
schema:
type: string
responses:
Forbidden:
description: A missing scope, an exhausted analysis allowance, or an object that is not the caller's.
headers:
X-Request-ID:
$ref: '#/components/headers/XRequestID'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
NotFound:
description: No such resource.
headers:
X-Request-ID:
$ref: '#/components/headers/XRequestID'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
Unauthorized:
description: No valid credential. Every authentication failure returns this one document.
headers:
X-Request-ID:
$ref: '#/components/headers/XRequestID'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
PlatformPayload:
description: The platform's payload, passed through unchanged.
headers:
X-Request-ID:
$ref: '#/components/headers/XRequestID'
content:
application/json:
schema:
type: object
UnprocessableContent:
description: The request's fields are wrong. errors[] names them.
headers:
X-Request-ID:
$ref: '#/components/headers/XRequestID'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: An API key from /my-account/api/ (`sk_merchant_…`), or a CarbonGuru OAuth access token. A test key (`sk_merchant_test_…`) connects like a live key; every order it posts is recorded as a preview and nothing is bought. Auth runs before body validation, and every failure returns the same 401.