Create a nature quote
This endpoint estimates the biodiversity impact of a transaction as a Nature Footprint and locks in pricing and tax rates for sustainability contributions. The returned quote must be reused when allocating funds. For the full request and response schema, see the Create nature quote endpoint in the API reference.
Direct API integration only
This endpoint is used in direct API integrations. If you're using one of the ekko SDKs, the quote is generated automatically in the backend and you don't need to call this endpoint.
When to use this endpoint
Use this endpoint whenever you need to show a transaction's biodiversity footprint or contribution pricing to a consumer. For example:
- At checkout
- After a purchase
- In a post-purchase or confirmation flow
The nature quote is the biodiversity counterpart to the carbon quote. Each session uses one impact type, so call the endpoint that matches what you want to show.
What the quote contains
Every nature quote response includes:
- A Nature Footprint expressed in Mean Species Abundance (MSA), with a four-category breakdown and localised equivalents
- Sustainability contribution data, expressed as effective rates
Nature quotes do not return a credits block. Contributions are the payment flow for nature.
Reuse the quote
The quote locks in pricing and tax rates. You must pass the
quoteIdwhen allocating funds.
Request fields
| Field | Type | Required | Description |
|---|---|---|---|
organisationId | UUID | Yes | The organisation making the request |
locale | String | Yes | Localises footprint equivalents. Defaults to en-GB if the requested locale isn't supported. |
consumer | Object | Yes | Consumer details for tax calculation |
consumer.reference | String | Yes | Your identifier for the consumer |
consumer.countryCode | String | Yes | ISO 3166-1 alpha-3 country code |
consumer.postalCode | String | No | Consumer's postal code |
consumer.city | String | No | Consumer's city |
consumer.state | String | No | Consumer's state |
merchant | Object | No | Required if the organisation doesn't have an MCC set at organisation level |
merchant.name | String | Yes (if merchant provided) | Merchant name |
merchant.mcc | String | Yes (if merchant provided) | Merchant Category Code (4 digits) |
merchant.address | Object | Yes (if merchant provided) | Merchant address |
transaction | Object | Yes | Transaction details |
transaction.amount | Number | Yes | Transaction amount |
transaction.currencyCode | String | Yes | ISO currency code |
orderItems | Array | No | Line-item details. Not used in footprint calculation but recommended for analytics and reporting. |
projectFilters.contribution.matchConsumerLocation | Boolean | No | If true, ranks contribution impact partners by how closely their projects match the consumer's location |
projectFilters.contribution.matchTheme | Boolean | No | If true, ranks contribution impact partners whose projects match the transaction's dominant pressure category |
responseOptions.includePressurePoints | Boolean | No | If true, adds the 12-pressure-point breakdown to footprint.pressurePoints |
responseOptions.includeImpactPartnerDetails | Boolean | No | If true, includes impact partner name, short description and images in the response |
responseOptions.includeImpactPartnerRates | Boolean | No | If true, includes per-partner rate breakdowns in the partnerRates section |
Example request
{
"organisationId": "2f6d6b1f-1c6a-4e9a-9c15-7b8a0db1a2c3",
"locale": "en-GB",
"consumer": {
"reference": "consumer_123",
"postalCode": "SW1A 1AA",
"city": "London",
"countryCode": "GBR"
},
"merchant": {
"name": "Blossom & Bloom",
"mcc": "5261",
"address": {
"line1": "Ground floor",
"line2": "45 Rosewood Avenue",
"line3": "Unit 124A",
"city": "London",
"postalCode": "SW1A 1AA",
"countryCode": "GBR"
}
},
"transaction": {
"amount": 15.99,
"currencyCode": "GBP"
},
"projectFilters": {
"contribution": {
"matchConsumerLocation": true,
"matchTheme": true
}
},
"responseOptions": {
"includePressurePoints": true,
"includeImpactPartnerDetails": true,
"includeImpactPartnerRates": true
}
}Response
The response contains two main sections: footprint and contribution.
Footprint
The footprint section returns the estimated biodiversity impact of the transaction as a Nature Footprint, with localised equivalents you can display to consumers.
"footprint": {
"msa": {
"msaM2": 0.18,
"msaFt2": 1.94
},
"dominantTransactionPressure": "pollution",
"categories": {
"climateStress": { "msaM2": 0.04, "msaFt2": 0.43 },
"pollution": { "msaM2": 0.09, "msaFt2": 0.97 },
"landUse": { "msaM2": 0.04, "msaFt2": 0.43 },
"freshwaterUse": { "msaM2": 0.005, "msaFt2": 0.054 }
},
"equivalents": [
{
"key": "parking_space",
"value": 0.6,
"description": "That's about the size of a parking space"
}
]
}The footprint is returned in both square metres (msa.msaM2) and square feet (msa.msaFt2). Pick the unit that matches the consumer's locale.
categories breaks the footprint into four pressure categories: climateStress, pollution, landUse and freshwaterUse. dominantTransactionPressure names the category with the largest share, which is also what matchTheme ranks partners against.
Each equivalent has a key you can use to select an icon or layout, a numeric value and a localised description ready to display.
Pressure-point breakdown
Set
responseOptions.includePressurePointstotrueto add apressurePointsfield alongsidecategories, keyed by the 12 underlying pressure-point names. It's omitted whenfalse.
Contribution
The contribution section returns the effective rates for sustainability contributions. Contributions let consumers support verified environmental projects through fixed amounts or round-ups.
"contribution": {
"effectiveRates": {
"impact": 0.01,
"impactTax": 0.0,
"serviceFee": 0.0,
"serviceFeeTax": 0.0
},
"impactPartners": [
{
"id": "9405545f-a850-4427-ab0d-10b5b734e925",
"name": "RSPB",
"shortDescription": "Protecting nature across the UK",
"matchReason": {
"consumerLocationMatchAccuracy": "country",
"themeMatch": "pollution"
},
"images": {
"logos": [
{ "path": "logos/rspb-logo.png", "type": "default", "width": 200, "height": 200 }
]
}
}
]
}The effective rates tell you how any contribution amount will be split. For example, with impact at 0.5 and serviceFee at 0.2, a £1.00 contribution would allocate £0.50 to impact, £0.20 as a service fee and the remainder to sales tax where applicable.
The response returns up to three impact partners. When matchConsumerLocation or matchTheme is true, partners are ranked by relevance and each carries a matchReason describing why it was selected. matchReason.consumerLocationMatchAccuracy is state or country, and matchReason.themeMatch is the matched pressure category. When no filters apply, the response returns partners from the organisation's enabled set and matchReason is omitted.
As with carbon, the impactPartners array is included only when responseOptions.includeImpactPartnerDetails is true.
Partner rates
When you set responseOptions.includeImpactPartnerRates to true, the response includes a top-level partnerRates section with per-partner rate breakdowns for contributions.
"partnerRates": {
"contribution": [
{
"partnerId": "9405545f-a850-4427-ab0d-10b5b734e925",
"rates": { "impact": 0.01, "impactTax": 0.0, "serviceFee": 0.0, "serviceFeeTax": 0.0 }
}
]
}Tax handling
The correct tax jurisdiction and rates are determined by ekko based on the merchant and consumer locations. You don't need to calculate tax yourself. The breakdown fields in the response exist to support jurisdictions where sales tax must be displayed to consumers.
