Schnellstart
Tätigen Sie Ihren ersten Kauf mit einem Testschlüssel und wechseln Sie dann in den Echtbetrieb.
1. Zugang erhalten
Beantragen Sie API-Zugang auf der Entwicklerseite. Bevor wir einen Antrag genehmigen, muss das Konto die Zwei-Faktor-Authentifizierung oder einen Passkey nutzen. Wir senden Ihnen eine E-Mail, sobald das Konto aktiv ist.
2. Testschlüssel erstellen
Erstellen Sie auf der Entwicklerseite einen Schlüssel im Modus Test mit dem Zugriff Lesen und kaufen. Kopieren Sie ihn sofort, denn wir zeigen ihn nur einmal an.
Testschlüssel verbrauchen ein simuliertes Guthaben von 1.000 $. Es wird nichts abgerechnet und es werden keine CO₂-Zertifikate stillgelegt. So können Sie Ihre Integration gefahrlos entwickeln.
3. Angebot einholen
Ein Angebot zeigt Ihnen, was ein Kauf umfassen und kosten würde, ohne dass etwas gekauft wird:
curl https://trimcarbon.com/api/v1/quotes \
-H "Authorization: Bearer $TRIMCARBON_KEY" \
-H "Content-Type: application/json" \
-d '{"kg": 100}'
4. Kompensationen kaufen
Senden Sie bei jedem Kauf einen eindeutigen Idempotency-Key mit. Wenn bei der Anfrage eine Zeitüberschreitung auftritt, wiederholen Sie sie mit demselben Schlüssel. Sie erhalten dann den ersten Kauf als Antwort, statt doppelt zu kaufen.
curl https://trimcarbon.com/api/v1/offsets \
-H "Authorization: Bearer $TRIMCARBON_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"kg": 100, "reference": "fleet-2026-09"}'
/offsetsAuthorizationBearer token · headerrequiredAn API key from the developer page: tc_live_… for real purchases, tc_test_… for tests. Keep it on your server.
Idempotency-KeystringrequiredA unique value per purchase, such as a UUID. Retrying with the same key and body returns the first purchase (with Idempotent-Replayed: true) instead of buying again. The same key with a different body is refused with 409.
application/jsonExactly one of kg (whole kg, up to 1,000,000) and amount_cents, and an optional reference.
kgintegerrequiredkg of CO₂ to offset.
referencestringYour own label, such as a trip or invoice ID. Returned as you sent it; never public, never sent to the credit supplier.
amount_centsintegerrequiredUS cents to spend. Buys the most whole kg whose charge fits in this amount.
referencestringYour own label, such as a trip or invoice ID. Returned as you sent it; never public, never sent to the credit supplier.
{
"kg": 1000,
"reference": "fleet-2026-09"
}{
"amount_cents": 5000
}The purchase (or, on a retry, the first one).
objectstringrequiredidstringrequiredlivemodebooleanrequiredFalse for test keys: nothing was charged or retired.
statusstringrequiredprocessing until the credits are bought and retired; placed once they are; refunded if we could not place the order and returned the charge to your balance.
processingplacedrefundedkgintegerrequiredkg of CO₂ offset.
amount_centsintegerrequiredWhat the purchase took from your balance.
currencystringrequiredrate_millicents_per_kgintegerrequiredYour rate in thousandths of a cent per kg: 4000 is $0.04/kg ($40 per tonne).
requestedobjectrequiredWhat you asked for: kg, or an amount to spend.
Show propertiesHide properties
kginteger | nullrequiredShow propertiesHide properties
integernullamount_centsinteger | nullrequiredShow propertiesHide properties
integernullreferencestring | nullrequiredcertificate_urlstring<uri> | nullrequiredThe public certificate on trimcarbon.com, once the order is placed. Null for test offsets.
createdstring<date-time>requiredplacedstring<date-time> | nullrequiredShow propertiesHide properties
string<date-time>nullBad JSON, or a missing or invalid Idempotency-Key.
errorobjectrequiredShow propertiesHide properties
typestringrequiredauthentication_errorpermission_errorinvalid_request_errorrate_limit_errorapi_errorcodestringrequiredmessagestringrequiredparamstringThe request field that is wrong.
balance_centsintegerWith insufficient_balance: your balance now.
required_centsintegerWith insufficient_balance: what the purchase costs.
Missing, unknown or revoked API key.
errorobjectrequiredShow propertiesHide properties
typestringrequiredauthentication_errorpermission_errorinvalid_request_errorrate_limit_errorapi_errorcodestringrequiredmessagestringrequiredparamstringThe request field that is wrong.
balance_centsintegerWith insufficient_balance: your balance now.
required_centsintegerWith insufficient_balance: what the purchase costs.
insufficient_balance: the balance doesn’t cover the purchase. The error has balance_cents and required_cents.
errorobjectrequiredShow propertiesHide properties
typestringrequiredauthentication_errorpermission_errorinvalid_request_errorrate_limit_errorapi_errorcodestringrequiredmessagestringrequiredparamstringThe request field that is wrong.
balance_centsintegerWith insufficient_balance: your balance now.
required_centsintegerWith insufficient_balance: what the purchase costs.
api_access_inactive (the account is suspended or not approved) or insufficient_permissions (a read-only key).
errorobjectrequiredShow propertiesHide properties
typestringrequiredauthentication_errorpermission_errorinvalid_request_errorrate_limit_errorapi_errorcodestringrequiredmessagestringrequiredparamstringThe request field that is wrong.
balance_centsintegerWith insufficient_balance: your balance now.
required_centsintegerWith insufficient_balance: what the purchase costs.
idempotency_key_reused: the key was used for a different request.
errorobjectrequiredShow propertiesHide properties
typestringrequiredauthentication_errorpermission_errorinvalid_request_errorrate_limit_errorapi_errorcodestringrequiredmessagestringrequiredparamstringThe request field that is wrong.
balance_centsintegerWith insufficient_balance: your balance now.
required_centsintegerWith insufficient_balance: what the purchase costs.
validation_error (with param) or amount_too_small.
errorobjectrequiredShow propertiesHide properties
typestringrequiredauthentication_errorpermission_errorinvalid_request_errorrate_limit_errorapi_errorcodestringrequiredmessagestringrequiredparamstringThe request field that is wrong.
balance_centsintegerWith insufficient_balance: your balance now.
required_centsintegerWith insufficient_balance: what the purchase costs.
rate_limited: wait for the Retry-After seconds.
errorobjectrequiredShow propertiesHide properties
typestringrequiredauthentication_errorpermission_errorinvalid_request_errorrate_limit_errorapi_errorcodestringrequiredmessagestringrequiredparamstringThe request field that is wrong.
balance_centsintegerWith insufficient_balance: your balance now.
required_centsintegerWith insufficient_balance: what the purchase costs.
5. Bestellung verfolgen
Eine Kompensation hat zunächst den Status processing. Fragen Sie sie regelmäßig ab, bis sie den Status placed hat:
curl https://trimcarbon.com/api/v1/offsets/off_8Hq2kP0aZr4mXc1vB7nT3yLw \
-H "Authorization: Bearer $TRIMCARBON_KEY"
Eine Testkompensation erreicht den Status placed nach wenigen Sekunden. Bei einer echten Kompensation dauert das meist einige Minuten. Danach verweist certificate_url auf ihr öffentliches TrimCarbon-Zertifikat.
6. Echtbetrieb starten
- Laden Sie Ihr Guthaben auf der Entwicklerseite auf.
- Erstellen Sie einen Schlüssel im Modus Echt und speichern Sie ihn als Secret auf Ihrem Server.
- Ersetzen Sie den Testschlüssel durch den echten Schlüssel. Sonst ändert sich nichts.