MeterCall Offset — dev docs

Embedded renewable energy credit retirement on every API + RPC call. Fractional cents per call, verifiable receipts, enterprise-grade ESG compliance — from the same tollbooth your traffic already passes through.

Overview

Every call your agent, backend, or smart-contract client makes through MeterCall consumes real electricity — server compute, network transit, and (for chain calls) downstream gas. We publish the per-call energy numbers, price them at grid REC cost, mark them up transparently 2×, and retire a proportional renewable energy credit on your behalf. Opt-in. No subscription. One toggle.

Competitors like Watershed, Persefoni, and Sweep help you account for carbon. They can't retire RECs on every API call your software makes. We can — because the calls already pass through us.

Energy model

All figures are published. Sources cited below. Numbers are intentionally conservative (we'd rather over-retire than under).

Call typeWh / callkWh / callWholesale REC costRetail (2×)
api_call0.40.0004$0.00005$0.0001 (0.01¢)
router_quote1.20.0012$0.00015$0.0003 (0.03¢)
bridge2.50.0025$0.0003125$0.000625 (0.0625¢)

Sources

Pricing & markup

We charge exactly 2× the wholesale REC price. Here's the split:

No hidden fees. If wholesale REC prices drop, retail drops with them at the next monthly re-peg. The source-of-truth number is rec_usd_per_wh_retail on /v1/offset/stats.

Endpoints

GET/v1/offset/estimate
Quote the offset cost for a hypothetical usage volume. No auth required.
curl "https://metercall.ai/v1/offset/estimate?api_calls=1000000&bridge_calls=5000&router_quotes=20000"
# →
{
  "ok": true,
  "total_wh": 418000.0,
  "total_usd": 104.5,
  "breakdown": {
    "api":    { "wh": 400000, "usd": 100.0 },
    "bridge": { "wh":  12500, "usd":   3.125 },
    "router": { "wh":  24000, "usd":   6.0 }
  },
  "rec_units": 0.418,
  "energy_model": { "api_call": 0.4, "bridge": 2.5, "router_quote": 1.2 }
}
POST/v1/offset/purchase
Retire RECs equivalent to a USD amount, once. Returns a receipt with REC id + registry.
curl -X POST https://metercall.ai/v1/offset/purchase \
  -H "content-type: application/json" \
  -d '{"amount_usd": 50, "wallet_or_stripe_ref": "acme-corp"}'
# →
{
  "ok": true,
  "offset_id": "a3c1f9e0b7a4",
  "rec_id": "REC-PATCH-4F91A0C2EE",
  "provider": "Patch.io",
  "registry": "patch.io",
  "wh_offset": 200000,
  "co2_kg_avoided": 78,
  "usd": 50,
  "retired_at": "2026-04-17T18:22:10.000Z",
  "receipt_url": "/v1/offset/receipt/a3c1f9e0b7a4"
}
POST/v1/offset/per-call
Offset a single call by call_id. Set auto=true to charge + retire; auto=false returns the estimate only.
curl -X POST https://metercall.ai/v1/offset/per-call \
  -H "content-type: application/json" \
  -d '{"call_id":"req_abc","endpoint":"/v1/bridge/swap","auto":true}'
GET/v1/offset/receipts?limit=50
Recent retirements, most recent first. Ring buffer capped at 5,000.
GET/v1/offset/stats
Aggregate counters: 24h Wh, 24h USD, YTD USD, retirement count, tree-equivalent, car-miles-equivalent.
POST/v1/offset/subscribe
Enable auto-offset for a wallet or user. A server-side bot aggregates pending usage every 60 minutes and retires a batch REC (caps at daily_cap_usd).
curl -X POST https://metercall.ai/v1/offset/subscribe \
  -H "content-type: application/json" \
  -d '{"wallet_or_user":"0xabc...","auto_offset":true,"daily_cap_usd":5}'
GET/v1/offset/providers/status
Live reachability + integration status for each REC provider. Fail-soft: if a registry's public endpoint is down we mark reachable=false and route to the next provider in the round-robin.

Provider integrations

Round-robin across the public registries and carbon-removal APIs. Each provider flips from stub to live the moment its env var is present. Zero code changes.

ProviderRegistryEnv varStatus
Patch.iopatch.ioPATCH_API_KEYpublic API — wire-ready
CNaughtcnaught.comCNAUGHT_KEYpublic API — wire-ready
Watershedwatershed.comWATERSHED_API_KEYenterprise only
Climate Impact Partnersclimateimpact.comCIP_API_KEYenterprise / legacy
Puro.earthpuro.earthPURO_API_KEYcarbon-removal registry
Regen Networkregen.networkREGEN_API_KEYon-chain REC tokens
KlimaDAOklimadao.financeKLIMA_API_KEYon-chain carbon market
Verra / Gold Standardregistry(verification only)cross-check of retired IDs

BYO REC portfolio

Enterprise customers with an existing REC pool (from Watershed, CIP, etc.) can point MeterCall at it. We'll retire against your portfolio instead of buying spot. Set OFFSET_PORTFOLIO_ID and OFFSET_PORTFOLIO_PROVIDER and the gateway will route retirements to your registry account directly.

Auto-offset subscription

Instead of retiring on every single call (which would add a network hop), subscribe once:

POST /v1/offset/subscribe
{
  "wallet_or_user": "acme-corp",
  "auto_offset": true,
  "daily_cap_usd": 10
}

A server-side bot (internally Bot #26) runs every 60 minutes, sums each subscriber's pending energy, and retires one batch REC up to the daily cap. Receipts are still per-subscriber.

Retirement receipts

Each receipt has:

On-chain attestation (optional)

For crypto-native teams: every retirement receipt can be anchored on-chain through /v1/bridge/attest, which writes to Arweave or creates an EAS attestation on Base. One call; the attestation transaction hash is appended to the receipt.

POST /v1/bridge/attest
{
  "kind": "rec_retirement",
  "offset_id": "a3c1f9e0b7a4",
  "chain": "base"
}

Enterprise invoicing

Monthly invoice rolls every retirement into one line item: "MeterCall REC retirement — N kWh — $X.XX". Attach ?invoice=2026-04 to /v1/offset/receipts for a filterable feed. Audit-ready CSV export planned for May.

SDK

Drop /sdks/offset.js anywhere — UMD, no deps, browser + Node:

<script src="/sdks/offset.js"></script>
<script>
MeterCallOffset.estimate({ api_calls: 1e6, bridge_calls: 5000, router_quotes: 20000 })
  .then(q => console.log(q.total_usd));
</script>