client_id and client_secret, exchanges them for a short-lived access token, and passes that token on every API request alongside an organisation context header.
Obtaining credentials
Credentials are issued by the Cula team. Each credential set represents a single consumer — typically an integration partner or system. Contact your Cula representative to receive yourclient_id and client_secret.
Credentials are managed by Cula. They cannot be created or rotated via the API.
Getting an access token
Exchange your credentials for an access token by calling the token endpoint with theclient_credentials grant type. Authenticate using HTTP Basic auth with your client_id as username and client_secret as password.
| Field | Description |
|---|---|
access_token | The Bearer token to use in API requests |
expires_in | Token lifetime in seconds |
token_type | Always bearer |
Making authenticated requests
Every request requires two headers:Authorization— the access token as a Bearer token.Cula-Organisation-Id— the organisation to scope this request to.
Access model
Each consumer is authorized to access one or more organisations. How many depends on your role:- Tracking data providers (e.g. biochar producers, project operators) typically access their own organisation only. They write process tracking data — sourcing steps, deliveries, emission logs — into their org.
- Tracking data consumers (e.g. credit marketplaces, registry platforms) typically have read access to multiple organisations whose tracking data they need to query. A marketplace that sells credits on behalf of several producers would use a single consumer with access to each producer’s organisation.
Cula-Organisation-Id header on each request determines which organisation is being accessed.
Organisation context (Cula-Organisation-Id)
The Cula-Organisation-Id header tells the server which organisation to scope each request to.
- The header is required on every request. There is no default organisation.
- Omitting the header returns
400:
- Passing an organisation your consumer is not authorized for returns
403:
Token lifecycle
Access tokens are short-lived. When a token expires, request a new one from the token endpoint — the client credentials flow does not use refresh tokens. Your application should handle401 responses by requesting a fresh token and retrying the request.
Credential rotation
Cula can issue a newclient_secret for your consumer. The previous secret remains valid until explicitly revoked, allowing zero-downtime rotation:
- Request a new secret from your Cula representative.
- Update your systems to use the new secret.
- Confirm the old secret can be revoked.