Inicio rápido
Haga su primera compra con una clave de prueba y luego pase a producción.
1. Obtenga acceso
Solicite acceso a la API en la página Desarrolladores. Antes de aprobar una solicitud, la cuenta necesita autenticación de dos factores o una llave de acceso. Le enviaremos un correo electrónico cuando la cuenta esté activa.
2. Cree una clave de prueba
En la página Desarrolladores, cree una clave en modo Prueba con acceso de Lectura y compra. Cópiela: solo la mostramos una vez.
Las claves de prueba gastan un saldo simulado de 1000 US$. No se cobra nada y no se retiran créditos, así que puede crear su integración de forma segura.
3. Obtenga una cotización
Una cotización le indica qué obtendría con una compra y cuánto costaría, sin comprar nada:
curl https://trimcarbon.com/api/v1/quotes \
-H "Authorization: Bearer $TRIMCARBON_KEY" \
-H "Content-Type: application/json" \
-d '{"kg": 100}'
4. Compre compensaciones
Envíe una Idempotency-Key única con cada compra. Si se agota el tiempo de espera de la solicitud, reinténtela con la misma clave: recibirá la primera compra en lugar de comprar dos veces.
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. Haga seguimiento del pedido
La compensación comienza en estado processing. Consúltela periódicamente hasta que esté en placed:
curl https://trimcarbon.com/api/v1/offsets/off_8Hq2kP0aZr4mXc1vB7nT3yLw \
-H "Authorization: Bearer $TRIMCARBON_KEY"
Una compensación de prueba se realiza al cabo de unos segundos. Una real suele tardar unos minutos; después, certificate_url enlaza a su certificado público.
6. Pase a producción
- Recargue su saldo en la página Desarrolladores.
- Cree una clave Real y guárdela como secreto en su servidor.
- Reemplace la clave de prueba por la clave real. No cambia nada más.