Skip to main content
GET
List Custom Emission Groups
Retrieve the custom emission groups available to your organization, with the units each one accepts. This is where you resolve the custom_emission_factor_id that invoices, purchases, wastes and vehicles expect when a record is calculated with your own emission factors instead of one from a public database.
The field is called custom_emission_factor_id, but it takes a GROUP id — the one returned by this endpoint. There is no custom_emission_group_id field anywhere: invoices, purchases, wastes and vehicles all name it custom_emission_factor_id while the foreign key points at custom_emission_group.id. Sending a factor id instead of a group id is the most common mistake here, and the name is why.
Organization-scoped, not a global catalog. Unlike units or waste codes, these groups belong to your organization — the ids are yours and differ between organizations. Fetch them per organization rather than hardcoding them.
This route carries no version prefix. It is /custom_emission_groups/…, not /v1/… or /v2/…. Only the LCA endpoints share that shape; everything else in this reference is versioned. Documented as it is today.

Request

Headers

string
required
UUID of the organization whose groups you want. The response is scoped to it.Format: UUID
string
Your API key.Unlike the rest of the API, this endpoint does not validate it today — it is the only header the route does not declare. Send it anyway: it keeps your client consistent with every other call and will keep working when the endpoint is brought in line.

Query Parameters

string
Return only the groups of one category. Omit it to get all of them.The eight accepted values: purchases, electricity, waste, heat, vehicles, recharge, process, water
waste is singular, and the filter is free text rather than a closed list — so a value that is not in the eight above does not return 422, it returns an empty array. ?category=wastes gives you zero groups on an organization that has dozens of them.That makes “no groups in that category” and “I misspelled the category” look identical. Check the spelling against the list above before concluding there is nothing there.

Response

array[object]
Array of custom emission group objects. Not paginated — it returns every matching group, and on a subsidiary of a large holding that can be thousands of objects in a single response. Use category to keep it small.
Listed is not the same as usable, and the two differ per category.For purchases, the calculation requires the group to belong to the same organization as the record (ceg.organization_id = p.organization_id) and to have a factor for the unit you send. So a group with a non-null parent appears in this response and will not calculate a purchase — pick one whose parent is null, and take the unit from its own units.For vehicles, invoices and wastes the calculation does not check the unit at all: it matches on the group and the date. A unit the group has no factor for does not fail there — it calculates against whatever factor the date selects, which is worse than an error because the number looks fine.

Example

Successful Response

Returns 200 OK with the array of groups.
The group id above is illustrative: groups belong to your organization, so yours will differ. The unit ids, in contrast, come from the shared unit catalog.

Common Errors

422 Unprocessable Entity

Cause: x-organization-id is missing.
Cause: x-organization-id is present but is not a valid UUID.
A misspelled category produces neither of these — it returns an empty array. See the warning above.

Use Cases

Create a purchase calculated with your own factors

A purchase carries a monetary amount (quantity + the currency in unit_id) and/or a physical one (non_currency_quantity + non_currency_unit_id). Custom emission groups for purchases almost always carry physical units, so the group’s unit goes in the physical pair — putting it in unit_id would declare kilograms as a currency:
Add quantity and unit_id on top when you also want to record what it cost. The calculation matches the factor on COALESCE(non_currency_unit_id, unit_id), so with a physical group the physical pair is what selects the factor.

Offer only the groups that apply

When your integration lets users choose, call this endpoint with the category of the record being created and show only those groups — filtering out inherited ones for purchases. The response also tells you which units to offer for each group.

Create Purchase

Accepts custom_emission_factor_id to calculate with your own factors

Create Invoice

Same field, for energy and utility invoices

Create Waste

Same field, for waste records

List Units

The shared unit catalog the units ids come from