update to providers

This commit is contained in:
2026-05-21 05:35:43 +02:00
parent e8fb9f92e4
commit 8795b872f9
4 changed files with 702 additions and 101 deletions

View File

@@ -1,40 +1,137 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<providers xmlns="https://calco2la.to/schema/providers/v1"> <providers xmlns="https://calco2la.to/schema/providers/v1">
<provider id="atmosfair">
<name>Atmosfair Webservice 5</name>
<baseUrl>https://api.atmosfair.de</baseUrl>
<auth type="bodyCredentials" />
<operations>
<operation id="travel.flight.estimate_emissions">
<http method="POST" path="/api/emission/flight" />
<requestBody format="json">
{
"accountId": "${env.ATMOSFAIR_ACCOUNT_ID}",
"password": "${env.ATMOSFAIR_PASSWORD}",
"calculationMethod": "${request.calculation_method}",
"flights": [
#for leg in request.legs
{
"departure": "${leg.origin_iata}",
"arrival": "${leg.destination_iata}",
"flightNumber": "${leg.flight_number}",
"departureDate": "${leg.departure_date}",
"passengerCount": ${leg.passenger_count},
"flightCount": ${leg.flight_count},
"travelClass": "${leg.travel_class}",
"charter": ${leg.charter},
"aircraftType": "${leg.aircraft_type}"
}#sep,
#end
]
}
</requestBody>
<responseMapping mode="single" rootType="EmissionCalculationResult">
<constant target="EmissionCalculationResult.provider" value="atmosfair" />
<constant target="EmissionCalculationResult.domain" value="travel.flight" />
<field source="$.status" target="EmissionCalculationResult.status" />
<field source="$.co2" target="EmissionCalculationResult.total.co2eKg" />
<field source="$.co2WithoutRfi" target="EmissionCalculationResult.total.co2Kg" />
<field source="$.offsetInEUR" target="EmissionCalculationResult.offset.amount" />
<constant target="EmissionCalculationResult.offset.currency" value="EUR" />
<field source="$.distance" target="EmissionCalculationResult.distance.value" />
<constant target="EmissionCalculationResult.distance.unit" value="km" />
<field source="$.fuelInLiter" target="EmissionCalculationResult.fuel.liters" />
<field source="$.errors" target="EmissionCalculationResult.errors" />
<field source="$" target="EmissionCalculationResult.vendorRaw" />
<list source="$.flights[*]" target="EmissionCalculationResult.segments" itemType="SegmentEmissionResult">
<field source="$.departure" target="SegmentEmissionResult.origin.iata" />
<field source="$.arrival" target="SegmentEmissionResult.destination.iata" />
<field source="$.flightNumber" target="SegmentEmissionResult.flightNumber" />
<field source="$.departureDate" target="SegmentEmissionResult.flightDate" />
<field source="$.passengerCount" target="SegmentEmissionResult.passengerCount" />
<field source="$.flightCount" target="SegmentEmissionResult.flightCount" />
<field source="$.travelClass" target="SegmentEmissionResult.travelClass" />
<field source="$.charter" target="SegmentEmissionResult.charter" />
<field source="$.aircraftType" target="SegmentEmissionResult.aircraftType" />
<field source="$.co2" target="SegmentEmissionResult.emissions.co2eKg" />
<field source="$.co2WithoutRfi" target="SegmentEmissionResult.emissions.co2Kg" />
<field source="$.distance" target="SegmentEmissionResult.distance.value" />
<constant target="SegmentEmissionResult.distance.unit" value="km" />
<field source="$.fuelInLiter" target="SegmentEmissionResult.fuel.liters" />
<field source="$.cruiseAltitude" target="SegmentEmissionResult.cruiseAltitude" />
<field source="$.distanceInCriticalAltitudes" target="SegmentEmissionResult.distanceInCriticalAltitudes" />
<field source="$" target="SegmentEmissionResult.vendorRaw" />
</list>
</responseMapping>
</operation>
</operations>
</provider>
<provider id="calco2lato"> <provider id="calco2lato">
<name>calco2la.to</name> <name>calco2la.to</name>
<baseUrl>https://api.calco2la.to</baseUrl> <baseUrl>https://api.calco2la.to</baseUrl>
<auth type="apiKey"> <auth type="apiKey">
<header>Authorization</header> <header>Authorization</header>
<format>Bearer ${API_KEY}</format> <format>Bearer ${API_KEY}</format>
<envKey>CALCO2LATO_API_KEY</envKey>
</auth> </auth>
<operations> <operations>
<operation id="travel.flight.estimate_emissions"> <operation id="travel.flight.estimate_emissions">
<http method="POST" path="/v1/flight/estimate" /> <http method="POST" path="/api/flight" />
<requestBody format="json"> <requestBody format="json">
{ {
"legs": [ "api_key": "${env.CALCO2LATO_API_KEY}",
"departureDate": "${request.departure_date}",
"rfi": ${request.rfi},
"pricePerTon": ${request.price_per_ton},
"flights": [
#for leg in request.legs #for leg in request.legs
{ {
"origin": "${leg.origin_iata}", "departure": "${leg.origin_iata}",
"destination": "${leg.destination_iata}", "arrival": "${leg.destination_iata}",
"departure_time": "${leg.departure_time}" "passengerCount": ${leg.passenger_count},
"flightCount": ${leg.flight_count},
"travelClass": "${leg.travel_class}",
"charter": ${leg.charter},
"aircraftType": "${leg.aircraft_type}",
"departureDate": "${leg.departure_date}",
"calculationMethod": "${request.calculation_method}",
"via": ${leg.via},
"rfi": ${request.rfi},
"pricePerTon": ${request.price_per_ton}
}#sep, }#sep,
#end #end
], ]
"cabin_class": "${request.cabin_class}",
"passengers": ${request.passengers},
"include_non_co2": ${request.include_non_co2}
} }
</requestBody> </requestBody>
<responseMapping> <responseMapping mode="single" rootType="EmissionCalculationResult">
<map source="$.co2_kg" target="EmissionEstimate.co2_kg" /> <constant target="EmissionCalculationResult.provider" value="calco2lato" />
<map source="$.co2e_kg" target="EmissionEstimate.co2e_kg" /> <constant target="EmissionCalculationResult.domain" value="travel.flight" />
<map source="$.non_co2_mult" target="EmissionEstimate.non_co2_multiplier" /> <field source="$.status" target="EmissionCalculationResult.status" />
<map source="$.method.name" target="EmissionEstimate.method_name" /> <field source="$.co2" target="EmissionCalculationResult.total.co2eKg" />
<map source="$.method.version" target="EmissionEstimate.method_version" /> <field source="$.co2WithoutRfi" target="EmissionCalculationResult.total.co2Kg" />
<map source="$.standard" target="EmissionEstimate.standard" /> <field source="$.rfi" target="EmissionCalculationResult.total.nonCo2Multiplier" />
<map source="$.documentation_url" target="EmissionEstimate.documentation_url" /> <field source="$.offsetInEUR" target="EmissionCalculationResult.offset.amount" />
<map source="$" target="EmissionEstimate.vendor_raw" /> <constant target="EmissionCalculationResult.offset.currency" value="EUR" />
<field source="$.distance" target="EmissionCalculationResult.distance.value" />
<constant target="EmissionCalculationResult.distance.unit" value="km" />
<field source="$.fuelInLiter" target="EmissionCalculationResult.fuel.liters" />
<field source="$.errors" target="EmissionCalculationResult.errors" />
<field source="$" target="EmissionCalculationResult.vendorRaw" />
<list source="$.flights[*]" target="EmissionCalculationResult.segments" itemType="SegmentEmissionResult">
<field source="$.departure.iata" target="SegmentEmissionResult.origin.iata" />
<field source="$.arrival.iata" target="SegmentEmissionResult.destination.iata" />
<field source="$.passengerCount" target="SegmentEmissionResult.passengerCount" />
<field source="$.flightCount" target="SegmentEmissionResult.flightCount" />
<field source="$.travelClass" target="SegmentEmissionResult.travelClass" />
<field source="$.charter" target="SegmentEmissionResult.charter" />
<field source="$.departureDate" target="SegmentEmissionResult.flightDate" />
<field source="$.distance" target="SegmentEmissionResult.distance.value" />
<constant target="SegmentEmissionResult.distance.unit" value="km" />
<field source="$.co2" target="SegmentEmissionResult.emissions.co2eKg" />
<field source="$.co2WithoutRfi" target="SegmentEmissionResult.emissions.co2Kg" />
<field source="$.offsetInEUR" target="SegmentEmissionResult.offset.amount" />
<constant target="SegmentEmissionResult.offset.currency" value="EUR" />
<field source="$" target="SegmentEmissionResult.vendorRaw" />
</list>
</responseMapping> </responseMapping>
</operation> </operation>
<operation id="travel.airport.search"> <operation id="travel.airport.search">
@@ -59,37 +156,538 @@
</operation> </operation>
</operations> </operations>
</provider> </provider>
<provider id="google_tim"> <provider id="clevel">
<name>Google Travel Impact Model</name> <name>C-Level Carbon Balance API</name>
<baseUrl>https://travelimpactmodel.googleapis.com/v1</baseUrl> <baseUrl>https://api.c-level.earth</baseUrl>
<auth type="apiKey"> <auth type="apiKey">
<header>X-Goog-Api-Key</header> <header>Authorization</header>
<format>${API_KEY}</format> <format>Bearer ${API_KEY}</format>
<envKey>CLEVEL_API_KEY</envKey>
</auth> </auth>
<operations> <operations>
<operation id="travel.flight.estimate_emissions"> <operation id="travel.flight.estimate_emissions">
<http method="POST" path="/flights:computeFlightEmissions" /> <http method="POST" path="/v1/calculate/flight" />
<requestBody format="json"> <requestBody format="json">
{ {
"flightSegments": [ "IataCodes":[
#for waypoint in request.iata_path
"${waypoint}"#sep,
#end
],
"IsReturn":${request.roundtrip},
"Passengers":${request.passengers},
"Class":"${request.vendor_options.clevel_class}",
"Type":"${request.vendor_options.clevel_type}",
"AircraftModel":"${request.vendor_options.aircraft_model}",
"Reference":"${request.reference}",
"CurrencyCode":"${request.currency}"
}
</requestBody>
<responseMapping mode="single" rootType="EmissionCalculationResult">
<constant target="EmissionCalculationResult.provider" value="clevel" />
<field source="$.Co2Total_Kg" target="EmissionCalculationResult.total.co2eKg" />
<field source="$.Co2Total_Tonne" target="EmissionCalculationResult.total.co2eTonnes" />
<field source="$.Co2PerPerson_kg" target="EmissionCalculationResult.perPassenger.co2eKg" />
<field source="$.Passengers" target="EmissionCalculationResult.passengerCount" />
<field source="$.FlightClass" target="EmissionCalculationResult.travelClass" />
<field source="$.TotalDistance_Km" target="EmissionCalculationResult.distance.value" />
<constant target="EmissionCalculationResult.distance.unit" value="km" />
<field source="$.TotalDistance_Miles" target="EmissionCalculationResult.distance.miles" />
<field source="$.PerPersonPrice" target="EmissionCalculationResult.perPassengerPrice.amount" />
<field source="$.TotalPrice" target="EmissionCalculationResult.offset.amount" />
<field source="$.CurrencyCode" target="EmissionCalculationResult.offset.currency" />
<field source="$.QuoteId" target="EmissionCalculationResult.quote.id" />
<field source="$.QuoteExpiry" target="EmissionCalculationResult.quote.expiresAt" />
<field source="$.ShortDescription" target="EmissionCalculationResult.description" />
<field source="$.MetaData" target="EmissionCalculationResult.metadata" />
<field source="$" target="EmissionCalculationResult.vendorRaw" />
</responseMapping>
</operation>
</operations>
</provider>
<provider id="goclimate">
<name>GoClimate Flight Footprint</name>
<baseUrl>https://api.goclimate.com</baseUrl>
<auth type="basic">
<usernameIsApiKey>true</usernameIsApiKey>
<envKey>GOCLIMATE_API_KEY</envKey>
</auth>
<operations>
<operation id="travel.flight.estimate_emissions">
<http method="GET" path="/v1/flight_footprint" />
<requestQuery>
#for leg in request.legs
<param name="segments[${index}][origin]" value="${leg.origin_iata}" />
<param name="segments[${index}][destination]" value="${leg.destination_iata}" />
#end
<param name="cabin_class" value="${request.cabin_class}" />
#for currency in request.currencies
<param name="currencies[]" value="${currency}" />
#end
</requestQuery>
<responseMapping mode="single" rootType="EmissionCalculationResult">
<constant target="EmissionCalculationResult.provider" value="goclimate" />
<field source="$.footprint" target="EmissionCalculationResult.total.co2eKg" />
<list source="$.offset_prices[*]" target="EmissionCalculationResult.prices" itemType="MoneyAmount">
<field source="$.amount" target="MoneyAmount.amountMinor" />
<field source="$.currency" target="MoneyAmount.currency" />
<field source="$.offset_url" target="MoneyAmount.url" />
<field source="$.locale" target="MoneyAmount.locale" />
</list>
<field source="$" target="EmissionCalculationResult.vendorRaw" />
</responseMapping>
</operation>
</operations>
</provider>
<provider id="google_tim">
<name>Google Travel Impact Model</name>
<baseUrl>https://travelimpactmodel.googleapis.com</baseUrl>
<auth type="apiKey">
<header>X-Goog-Api-Key</header>
<format>${API_KEY}</format>
<envKey>GOOGLE_TIM_API_KEY</envKey>
</auth>
<operations>
<operation id="travel.flight.estimate_emissions">
<http method="POST" path="/v1/flights:computeFlightEmissions" />
<requestBody format="json">
{
"flights": [
#for leg in request.legs #for leg in request.legs
{ {
"departureAirport": { "code": "${leg.origin_iata}" }, "origin":"${leg.origin_iata}",
"arrivalAirport": { "code": "${leg.destination_iata}" } "destination":"${leg.destination_iata}",
"operatingCarrierCode":"${leg.operating_carrier}",
"flightNumber":${leg.flight_number},
"departureDate":{
"year":${leg.departure_date.year},
"month":${leg.departure_date.month},
"day":${leg.departure_date.day}
}
}#sep,
#end
]
}
</requestBody>
<responseMapping mode="single" rootType="EmissionCalculationResult">
<constant target="EmissionCalculationResult.provider" value="google_tim" />
<field source="$.modelVersion.major" target="EmissionCalculationResult.methodology.methodVersion" />
<list source="$.flightEmissions[*]" target="EmissionCalculationResult.segments" itemType="SegmentEmissionResult">
<field source="$.flight.origin" target="SegmentEmissionResult.origin.iata" />
<field source="$.flight.destination" target="SegmentEmissionResult.destination.iata" />
<field source="$.flight.operatingCarrierCode" target="SegmentEmissionResult.airline" />
<field source="$.flight.flightNumber" target="SegmentEmissionResult.flightNumber" />
<field source="$.source" target="SegmentEmissionResult.source" />
<field source="$.emissionsGramsPerPax.economy" target="SegmentEmissionResult.classEmissions.economyKg" transform="divideBy1000" />
<field source="$.emissionsGramsPerPax.premiumEconomy" target="SegmentEmissionResult.classEmissions.premiumEconomyKg" transform="divideBy1000" />
<field source="$.emissionsGramsPerPax.business" target="SegmentEmissionResult.classEmissions.businessKg" transform="divideBy1000" />
<field source="$.emissionsGramsPerPax.first" target="SegmentEmissionResult.classEmissions.firstKg" transform="divideBy1000" />
<field source="$" target="SegmentEmissionResult.vendorRaw" />
</list>
<field source="$" target="EmissionCalculationResult.vendorRaw" />
</responseMapping>
</operation>
</operations>
</provider>
<provider id="klimalink">
<name>KlimaLink API</name>
<baseUrl>https://api.dev.klimalink.org</baseUrl>
<auth type="bearer">
<envKey>KLIMALINK_TOKEN</envKey>
</auth>
<operations>
<operation id="travel.flight.estimate_emissions">
<http method="POST" path="/api/v1/calculateEmission" />
<requestBody format="json">
{
"flightActivities": [
#for leg in request.legs
{
"index":${index},
"departure":"${leg.origin_iata}",
"arrival":"${leg.destination_iata}",
"flightNumber":"${leg.flight_number}",
"flightDate":"${leg.departure_date}",
"aircraftType":"${leg.aircraft_type}",
"airline":"${leg.airline}",
"passengerCount":${leg.passenger_count},
"flightCount":${leg.flight_count},
"travelClass":"${leg.travel_class}"
}#sep,
#end
]
}
</requestBody>
<responseMapping mode="single" rootType="EmissionCalculationResult">
<constant target="EmissionCalculationResult.provider" value="klimalink" />
<field source="$.status" target="EmissionCalculationResult.status" />
<field source="$.emissionKgCO2eTotal" target="EmissionCalculationResult.total.co2eKg" />
<list source="$.flightActivities[*]" target="EmissionCalculationResult.segments" itemType="SegmentEmissionResult">
<field source="$.index" target="SegmentEmissionResult.index" />
<field source="$.type" target="SegmentEmissionResult.type" />
<field source="$.status" target="SegmentEmissionResult.status" />
<field source="$.emissionKgCO2e" target="SegmentEmissionResult.emissions.co2eKg" />
<field source="$.errors" target="SegmentEmissionResult.errors" />
<field source="$" target="SegmentEmissionResult.vendorRaw" />
</list>
<field source="$" target="EmissionCalculationResult.vendorRaw" />
</responseMapping>
</operation>
</operations>
</provider>
<provider id="klimapi_v1">
<name>KlimAPI v1</name>
<baseUrl>https://api.klimapi.com/v1</baseUrl>
<auth type="apiKey">
<header>X-API-KEY</header>
<format>${API_KEY}</format>
<envKey>KLIMAPI_V1_API_KEY</envKey>
</auth>
<operations>
<operation id="travel.flight.estimate_emissions">
<http method="POST" path="/calculate" />
<requestBody format="json">
{
"calculation_options": [
#for leg in request.legs
{
"type": "flight",
"departure": "${leg.origin_iata}",
"destination": "${leg.destination_iata}",
"travel_class": "${leg.travel_class}",
"passengers": ${leg.passenger_count},
"return_trip": ${request.roundtrip}
}#sep, }#sep,
#end #end
], ],
"cabinClass": "${request.cabin_class}", "fractional_digits": ${request.fractional_digits}
"passengerCount": ${request.passengers}
} }
</requestBody> </requestBody>
<responseMapping> <responseMapping mode="single" rootType="EmissionCalculationResult">
<map source="$.flightEmissions[0].co2Grams" target="EmissionEstimate.co2_kg" transform="divideBy1000" /> <constant target="EmissionCalculationResult.provider" value="klimapi_v1" />
<map source="$.flightEmissions[0].co2eGrams" target="EmissionEstimate.co2e_kg" transform="divideBy1000" /> <constant target="EmissionCalculationResult.domain" value="travel.flight" />
<map source="$.modelVersion" target="EmissionEstimate.method_version" /> <constant target="EmissionCalculationResult.operation" value="travel.flight.estimate_emissions" />
<constant target="EmissionEstimate.method_name" value="Travel Impact Model" /> <field source="$.kg_amount" target="EmissionCalculationResult.total.co2eKg" />
<constant target="EmissionEstimate.vendor" value="google_tim" /> <constant target="EmissionCalculationResult.total.unit" value="kg" />
<map source="$" target="EmissionEstimate.vendor_raw" /> <constant target="EmissionCalculationResult.total.per" value="request" />
<field source="$.calculation_id" target="EmissionCalculationResult.quote.id" />
<constant target="EmissionCalculationResult.methodology.vendor" value="KlimAPI" />
<constant target="EmissionCalculationResult.methodology.methodName" value="KlimAPI v1 calculation_options" />
<constant target="EmissionCalculationResult.methodology.documentationUrl" value="https://klimapi.com/resources/docs?version=v1" />
<list source="$.results[*]" target="EmissionCalculationResult.segments" itemType="SegmentEmissionResult">
<field source="$.result" target="SegmentEmissionResult.emissions.co2eKg" />
<field source="$.type" target="SegmentEmissionResult.type" />
<field source="$.departure" target="SegmentEmissionResult.origin.iata" />
<field source="$.destination" target="SegmentEmissionResult.destination.iata" />
<field source="$.travel_class" target="SegmentEmissionResult.travelClass" />
<field source="$.passengers" target="SegmentEmissionResult.passengerCount" />
<field source="$.return_trip" target="SegmentEmissionResult.vendorRaw.returnTrip" />
<field source="$" target="SegmentEmissionResult.vendorRaw" />
</list>
<field source="$" target="EmissionCalculationResult.vendorRaw" />
</responseMapping>
</operation>
<operation id="travel.flight.estimate_emissions.flight_number">
<http method="POST" path="/calculate" />
<requestBody format="json">
{
"calculation_options": [
#for leg in request.legs
{
"type": "flight",
"carrier_code": "${leg.operating_carrier}",
"flight_number": ${leg.flight_number},
"departure_date": "${leg.departure_date}",
"departure": "${leg.origin_iata}",
"destination": "${leg.destination_iata}",
"travel_class": "${leg.travel_class}",
"passengers": ${leg.passenger_count}
}#sep,
#end
],
"fractional_digits": ${request.fractional_digits}
}
</requestBody>
<responseMapping mode="single" rootType="EmissionCalculationResult">
<constant target="EmissionCalculationResult.provider" value="klimapi_v1" />
<constant target="EmissionCalculationResult.domain" value="travel.flight" />
<constant target="EmissionCalculationResult.operation" value="travel.flight.estimate_emissions.flight_number" />
<field source="$.kg_amount" target="EmissionCalculationResult.total.co2eKg" />
<constant target="EmissionCalculationResult.total.unit" value="kg" />
<constant target="EmissionCalculationResult.total.per" value="request" />
<field source="$.calculation_id" target="EmissionCalculationResult.quote.id" />
<constant target="EmissionCalculationResult.methodology.vendor" value="KlimAPI" />
<constant target="EmissionCalculationResult.methodology.methodName" value="KlimAPI v1 flight-number calculation" />
<constant target="EmissionCalculationResult.methodology.documentationUrl" value="https://klimapi.com/resources/docs?version=v1" />
<list source="$.results[*]" target="EmissionCalculationResult.segments" itemType="SegmentEmissionResult">
<field source="$.result" target="SegmentEmissionResult.emissions.co2eKg" />
<field source="$.type" target="SegmentEmissionResult.type" />
<field source="$.carrier_code" target="SegmentEmissionResult.airline" />
<field source="$.flight_number" target="SegmentEmissionResult.flightNumber" />
<field source="$.departure_date" target="SegmentEmissionResult.flightDate" />
<field source="$.departure" target="SegmentEmissionResult.origin.iata" />
<field source="$.destination" target="SegmentEmissionResult.destination.iata" />
<field source="$.travel_class" target="SegmentEmissionResult.travelClass" />
<field source="$.passengers" target="SegmentEmissionResult.passengerCount" />
<field source="$" target="SegmentEmissionResult.vendorRaw" />
</list>
<field source="$" target="EmissionCalculationResult.vendorRaw" />
</responseMapping>
</operation>
<operation id="travel.flight.estimate_emissions.distance">
<http method="POST" path="/calculate" />
<requestBody format="json">
{
"calculation_options": [
#for leg in request.legs
{
"type": "flight",
"distance": ${leg.distance_km},
"unit": "kilometers",
"travel_class": "${leg.travel_class}",
"passengers": ${leg.passenger_count},
"return_trip": ${request.roundtrip}
}#sep,
#end
],
"fractional_digits": ${request.fractional_digits}
}
</requestBody>
<responseMapping mode="single" rootType="EmissionCalculationResult">
<constant target="EmissionCalculationResult.provider" value="klimapi_v1" />
<constant target="EmissionCalculationResult.domain" value="travel.flight" />
<constant target="EmissionCalculationResult.operation" value="travel.flight.estimate_emissions.distance" />
<field source="$.kg_amount" target="EmissionCalculationResult.total.co2eKg" />
<constant target="EmissionCalculationResult.total.unit" value="kg" />
<constant target="EmissionCalculationResult.total.per" value="request" />
<field source="$.calculation_id" target="EmissionCalculationResult.quote.id" />
<constant target="EmissionCalculationResult.methodology.vendor" value="KlimAPI" />
<constant target="EmissionCalculationResult.methodology.methodName" value="KlimAPI v1 distance calculation" />
<constant target="EmissionCalculationResult.methodology.documentationUrl" value="https://klimapi.com/resources/docs?version=v1" />
<list source="$.results[*]" target="EmissionCalculationResult.segments" itemType="SegmentEmissionResult">
<field source="$.result" target="SegmentEmissionResult.emissions.co2eKg" />
<field source="$.type" target="SegmentEmissionResult.type" />
<field source="$.distance" target="SegmentEmissionResult.distance.value" />
<field source="$.unit" target="SegmentEmissionResult.distance.unit" />
<field source="$.travel_class" target="SegmentEmissionResult.travelClass" />
<field source="$.passengers" target="SegmentEmissionResult.passengerCount" />
<field source="$.return_trip" target="SegmentEmissionResult.vendorRaw.returnTrip" />
<field source="$" target="SegmentEmissionResult.vendorRaw" />
</list>
<field source="$" target="EmissionCalculationResult.vendorRaw" />
</responseMapping>
</operation>
</operations>
</provider>
<provider id="klimapi_v2">
<name>KlimAPI v2</name>
<baseUrl>https://api.klimapi.com/v2</baseUrl>
<auth type="apiKey">
<header>X-API-KEY</header>
<format>${API_KEY}</format>
<envKey>KLIMAPI_V2_API_KEY</envKey>
</auth>
<operations>
<operation id="travel.flight.estimate_emissions">
<http method="POST" path="/calculate" />
<requestBody format="json">
{
"calculation_options": [
#for leg in request.legs
{
"type": "travel-air",
"activity": "flights",
"specification": "${request.vendor_options.klimapi_specification}",
"detail": "${request.vendor_options.klimapi_detail}",
"departure": "${leg.origin_iata}",
"destination": "${leg.destination_iata}",
"return_trip": ${request.roundtrip},
"passengers": ${leg.passenger_count}
}#sep,
#end
],
"fractional_digits": ${request.fractional_digits}
}
</requestBody>
<responseMapping mode="single" rootType="EmissionCalculationResult">
<constant target="EmissionCalculationResult.provider" value="klimapi_v2" />
<constant target="EmissionCalculationResult.domain" value="travel.flight" />
<constant target="EmissionCalculationResult.operation" value="travel.flight.estimate_emissions" />
<field source="$.kgCO2e" target="EmissionCalculationResult.total.co2eKg" />
<constant target="EmissionCalculationResult.total.unit" value="kg" />
<constant target="EmissionCalculationResult.total.per" value="request" />
<field source="$.calculation_id" target="EmissionCalculationResult.quote.id" />
<constant target="EmissionCalculationResult.methodology.vendor" value="KlimAPI" />
<constant target="EmissionCalculationResult.methodology.methodName" value="KlimAPI v2 calculation_options" />
<constant target="EmissionCalculationResult.methodology.documentationUrl" value="https://klimapi.com/resources/docs" />
<list source="$.results[*]" target="EmissionCalculationResult.segments" itemType="SegmentEmissionResult">
<field source="$.type" target="SegmentEmissionResult.type" />
<field source="$.activity" target="SegmentEmissionResult.vendorRaw.activity" />
<field source="$.specification" target="SegmentEmissionResult.vendorRaw.specification" />
<field source="$.detail" target="SegmentEmissionResult.travelClass" />
<field source="$.value" target="SegmentEmissionResult.distance.value" />
<field source="$.unit" target="SegmentEmissionResult.distance.unit" />
<field source="$.kgCO2e" target="SegmentEmissionResult.emissions.co2eKg" />
<field source="$.emission_factor_id" target="SegmentEmissionResult.vendorRaw.emissionFactorId" />
<field source="$.emission_factor_last_updated" target="SegmentEmissionResult.vendorRaw.emissionFactorLastUpdated" />
<field source="$" target="SegmentEmissionResult.vendorRaw" />
</list>
<field source="$" target="EmissionCalculationResult.vendorRaw" />
</responseMapping>
</operation>
<operation id="travel.flight.estimate_emissions.distance">
<http method="POST" path="/calculate" />
<requestBody format="json">
{
"calculation_options": [
#for leg in request.legs
{
"type": "travel-air",
"activity": "flights",
"specification": "${request.vendor_options.klimapi_specification}",
"detail": "${request.vendor_options.klimapi_detail}",
"value": ${leg.vendor_options.klimapi_passenger_distance},
"unit": "${request.vendor_options.klimapi_unit}"
}#sep,
#end
],
"fractional_digits": ${request.fractional_digits}
}
</requestBody>
<responseMapping mode="single" rootType="EmissionCalculationResult">
<constant target="EmissionCalculationResult.provider" value="klimapi_v2" />
<constant target="EmissionCalculationResult.domain" value="travel.flight" />
<constant target="EmissionCalculationResult.operation" value="travel.flight.estimate_emissions.distance" />
<field source="$.kgCO2e" target="EmissionCalculationResult.total.co2eKg" />
<constant target="EmissionCalculationResult.total.unit" value="kg" />
<constant target="EmissionCalculationResult.total.per" value="request" />
<field source="$.calculation_id" target="EmissionCalculationResult.quote.id" />
<constant target="EmissionCalculationResult.methodology.vendor" value="KlimAPI" />
<constant target="EmissionCalculationResult.methodology.methodName" value="KlimAPI v2 passenger-distance calculation" />
<constant target="EmissionCalculationResult.methodology.documentationUrl" value="https://klimapi.com/resources/docs" />
<list source="$.results[*]" target="EmissionCalculationResult.segments" itemType="SegmentEmissionResult">
<field source="$.type" target="SegmentEmissionResult.type" />
<field source="$.activity" target="SegmentEmissionResult.vendorRaw.activity" />
<field source="$.specification" target="SegmentEmissionResult.vendorRaw.specification" />
<field source="$.detail" target="SegmentEmissionResult.travelClass" />
<field source="$.value" target="SegmentEmissionResult.distance.value" />
<field source="$.unit" target="SegmentEmissionResult.distance.unit" />
<field source="$.kgCO2e" target="SegmentEmissionResult.emissions.co2eKg" />
<field source="$.emission_factor_id" target="SegmentEmissionResult.vendorRaw.emissionFactorId" />
<field source="$.emission_factor_last_updated" target="SegmentEmissionResult.vendorRaw.emissionFactorLastUpdated" />
<field source="$" target="SegmentEmissionResult.vendorRaw" />
</list>
<field source="$" target="EmissionCalculationResult.vendorRaw" />
</responseMapping>
</operation>
</operations>
</provider>
<provider id="myclimate_bulk">
<name>myclimate Bulk Flight Calculator</name>
<baseUrl>https://api.myclimate.org</baseUrl>
<auth type="basic">
<usernameEnvKey>MYCLIMATE_USERNAME</usernameEnvKey>
<passwordEnvKey>MYCLIMATE_PASSWORD</passwordEnvKey>
</auth>
<operations>
<operation id="travel.flight.estimate_emissions">
<http method="POST" path="/v1/bulk_flight_calculators.json" />
<requestBody format="json">
{
"flights": [
#for leg in request.legs
{
"id":"${leg.id}",
"from":"${leg.origin_iata}",
"to":"${leg.destination_iata}",
"aircraft_type":"${leg.aircraft_type}",
"flight_class":"${leg.travel_class}"
}#sep,
#end
]
}
</requestBody>
<responseMapping mode="single" rootType="EmissionCalculationResult">
<constant target="EmissionCalculationResult.provider" value="myclimate_bulk" />
<field source="$.sum_co2eq_kg" target="EmissionCalculationResult.total.co2eKg" />
<field source="$.sum_km" target="EmissionCalculationResult.distance.value" />
<list source="$.flights[*]" target="EmissionCalculationResult.segments" itemType="SegmentEmissionResult">
<field source="$.id" target="SegmentEmissionResult.id" />
<field source="$.from" target="SegmentEmissionResult.origin.iata" />
<field source="$.to" target="SegmentEmissionResult.destination.iata" />
<field source="$.co2eq_kg" target="SegmentEmissionResult.emissions.co2eKg" />
<field source="$.km" target="SegmentEmissionResult.distance.value" />
<field source="$.status" target="SegmentEmissionResult.status" />
<field source="$" target="SegmentEmissionResult.vendorRaw" />
</list>
</responseMapping>
</operation>
</operations>
</provider>
<provider id="myclimate_v1">
<name>myclimate Flight Calculator V1</name>
<baseUrl>https://api.myclimate.org</baseUrl>
<auth type="basic">
<usernameEnvKey>MYCLIMATE_USERNAME</usernameEnvKey>
<passwordEnvKey>MYCLIMATE_PASSWORD</passwordEnvKey>
</auth>
<operations>
<operation id="travel.flight.estimate_emissions">
<http method="POST" path="/v1/flight_calculators.json" />
<requestBody format="json">
{
"from":"${request.legs[0].origin_iata}",
"to":"${request.legs[last].destination_iata}",
"via":"${request.vendor_options.via}",
"passengers":${request.passengers},
"roundtrip":${request.roundtrip},
"flight_class":"${request.cabin_class}"
}
</requestBody>
<responseMapping mode="single" rootType="EmissionCalculationResult">
<constant target="EmissionCalculationResult.provider" value="myclimate_v1" />
<field source="$.kg" target="EmissionCalculationResult.total.co2eKg" />
<field source="$.km" target="EmissionCalculationResult.distance.value" />
<constant target="EmissionCalculationResult.distance.unit" value="km" />
<field source="$.fuel_kg_per_passenger" target="EmissionCalculationResult.fuel.kg" />
<field source="$.price_in_eur_cents" target="EmissionCalculationResult.offset.amountMinor" />
<constant target="EmissionCalculationResult.offset.currency" value="EUR" />
<field source="$.errors" target="EmissionCalculationResult.errors" />
<field source="$.input_params" target="EmissionCalculationResult.inputEcho" />
<field source="$" target="EmissionCalculationResult.vendorRaw" />
</responseMapping>
</operation>
</operations>
</provider>
<provider id="myclimate_v2">
<name>myclimate Flight Calculator V2</name>
<baseUrl>https://api.myclimate.org</baseUrl>
<auth type="basic">
<usernameEnvKey>MYCLIMATE_USERNAME</usernameEnvKey>
<passwordEnvKey>MYCLIMATE_PASSWORD</passwordEnvKey>
</auth>
<operations>
<operation id="travel.flight.estimate_emissions">
<http method="POST" path="/v2/flight_calculators.json" />
<requestBody format="json">
{
"from":"${request.legs[0].origin_iata}",
"to":"${request.legs[last].destination_iata}",
"via":"${request.vendor_options.via}",
"aircraft_type_leg_1":"${request.legs[0].aircraft_type}",
"aircraft_type_leg_2":"${request.legs[1].aircraft_type}",
"passengers":${request.passengers},
"roundtrip":${request.roundtrip},
"flight_class":"${request.cabin_class}"
}
</requestBody>
<responseMapping mode="single" rootType="EmissionCalculationResult">
<constant target="EmissionCalculationResult.provider" value="myclimate_v2" />
<field source="$.kg" target="EmissionCalculationResult.total.co2eKg" />
<field source="$.km" target="EmissionCalculationResult.distance.value" />
<field source="$.fuel_kg_per_passenger" target="EmissionCalculationResult.fuel.kg" />
<field source="$.errors" target="EmissionCalculationResult.errors" />
<field source="$" target="EmissionCalculationResult.vendorRaw" />
</responseMapping> </responseMapping>
</operation> </operation>
</operations> </operations>

View File

@@ -1,33 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<provider id="goclimate"> <providers xmlns="https://calco2la.to/schema/providers/v1">
<name>GoClimate Flight Footprint</name> <provider id="clevel">
<baseUrl>https://api.goclimate.com</baseUrl> <name>C-Level Carbon Balance API</name>
<auth type="basic"> <baseUrl>https://api.c-level.earth</baseUrl>
<usernameIsApiKey>true</usernameIsApiKey> <auth type="apiKey">
<envKey>GOCLIMATE_API_KEY</envKey> <header>Authorization</header>
<format>Bearer ${API_KEY}</format>
<envKey>CLEVEL_API_KEY</envKey>
</auth> </auth>
<operations> <operations>
<operation id="travel.flight.estimate_emissions"> <operation id="travel.flight.estimate_emissions">
<http method="GET" path="/v1/flight_footprint"/> <http method="POST" path="/v1/calculate/flight"/>
<requestQuery> <requestBody format="json">
#for leg in request.legs {
<param name="segments[${index}][origin]" value="${leg.origin_iata}"/> "IataCodes":[
<param name="segments[${index}][destination]" value="${leg.destination_iata}"/> #for waypoint in request.iata_path
"${waypoint}"#sep,
#end #end
<param name="cabin_class" value="${request.cabin_class}"/> ],
#for currency in request.currencies "IsReturn":${request.roundtrip},
<param name="currencies[]" value="${currency}"/> "Passengers":${request.passengers},
#end "Class":"${request.vendor_options.clevel_class}",
</requestQuery> "Type":"${request.vendor_options.clevel_type}",
"AircraftModel":"${request.vendor_options.aircraft_model}",
"Reference":"${request.reference}",
"CurrencyCode":"${request.currency}"
}
</requestBody>
<responseMapping mode="single" rootType="EmissionCalculationResult"> <responseMapping mode="single" rootType="EmissionCalculationResult">
<constant target="EmissionCalculationResult.provider" value="goclimate"/> <constant target="EmissionCalculationResult.provider" value="clevel"/>
<field source="$.footprint" target="EmissionCalculationResult.total.co2eKg"/> <field source="$.Co2Total_Kg" target="EmissionCalculationResult.total.co2eKg"/>
<list source="$.offset_prices[*]" target="EmissionCalculationResult.prices" itemType="MoneyAmount"> <field source="$.Co2Total_Tonne" target="EmissionCalculationResult.total.co2eTonnes"/>
<field source="$.amount" target="MoneyAmount.amountMinor"/> <field source="$.Co2PerPerson_kg" target="EmissionCalculationResult.perPassenger.co2eKg"/>
<field source="$.currency" target="MoneyAmount.currency"/> <field source="$.Passengers" target="EmissionCalculationResult.passengerCount"/>
<field source="$.offset_url" target="MoneyAmount.url"/> <field source="$.FlightClass" target="EmissionCalculationResult.travelClass"/>
<field source="$.locale" target="MoneyAmount.locale"/> <field source="$.TotalDistance_Km" target="EmissionCalculationResult.distance.value"/>
</list> <constant target="EmissionCalculationResult.distance.unit" value="km"/>
<field source="$.TotalDistance_Miles" target="EmissionCalculationResult.distance.miles"/>
<field source="$.PerPersonPrice" target="EmissionCalculationResult.perPassengerPrice.amount"/>
<field source="$.TotalPrice" target="EmissionCalculationResult.offset.amount"/>
<field source="$.CurrencyCode" target="EmissionCalculationResult.offset.currency"/>
<field source="$.QuoteId" target="EmissionCalculationResult.quote.id"/>
<field source="$.QuoteExpiry" target="EmissionCalculationResult.quote.expiresAt"/>
<field source="$.ShortDescription" target="EmissionCalculationResult.description"/>
<field source="$.MetaData" target="EmissionCalculationResult.metadata"/>
<field source="$" target="EmissionCalculationResult.vendorRaw"/> <field source="$" target="EmissionCalculationResult.vendorRaw"/>
</responseMapping> </responseMapping>
</operation> </operation>

View File

@@ -1,48 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<provider id="clevel"> <providers xmlns="https://calco2la.to/schema/providers/v1">
<name>C-Level Carbon Balance API</name> <provider id="goclimate">
<baseUrl>https://api.c-level.earth</baseUrl> <name>GoClimate Flight Footprint</name>
<auth type="apiKey"> <baseUrl>https://api.goclimate.com</baseUrl>
<header>Authorization</header> <auth type="basic">
<format>Bearer ${API_KEY}</format> <usernameIsApiKey>true</usernameIsApiKey>
<envKey>CLEVEL_API_KEY</envKey> <envKey>GOCLIMATE_API_KEY</envKey>
</auth> </auth>
<operations> <operations>
<operation id="travel.flight.estimate_emissions"> <operation id="travel.flight.estimate_emissions">
<http method="POST" path="/v1/calculate/flight"/> <http method="GET" path="/v1/flight_footprint"/>
<requestBody format="json"> <requestQuery>
{ #for leg in request.legs
"IataCodes":[ <param name="segments[${index}][origin]" value="${leg.origin_iata}"/>
#for waypoint in request.iata_path <param name="segments[${index}][destination]" value="${leg.destination_iata}"/>
"${waypoint}"#sep,
#end #end
], <param name="cabin_class" value="${request.cabin_class}"/>
"IsReturn":${request.roundtrip}, #for currency in request.currencies
"Passengers":${request.passengers}, <param name="currencies[]" value="${currency}"/>
"Class":"${request.vendor_options.clevel_class}", #end
"Type":"${request.vendor_options.clevel_type}", </requestQuery>
"AircraftModel":"${request.vendor_options.aircraft_model}",
"Reference":"${request.reference}",
"CurrencyCode":"${request.currency}"
}
</requestBody>
<responseMapping mode="single" rootType="EmissionCalculationResult"> <responseMapping mode="single" rootType="EmissionCalculationResult">
<constant target="EmissionCalculationResult.provider" value="clevel"/> <constant target="EmissionCalculationResult.provider" value="goclimate"/>
<field source="$.Co2Total_Kg" target="EmissionCalculationResult.total.co2eKg"/> <field source="$.footprint" target="EmissionCalculationResult.total.co2eKg"/>
<field source="$.Co2Total_Tonne" target="EmissionCalculationResult.total.co2eTonnes"/> <list source="$.offset_prices[*]" target="EmissionCalculationResult.prices" itemType="MoneyAmount">
<field source="$.Co2PerPerson_kg" target="EmissionCalculationResult.perPassenger.co2eKg"/> <field source="$.amount" target="MoneyAmount.amountMinor"/>
<field source="$.Passengers" target="EmissionCalculationResult.passengerCount"/> <field source="$.currency" target="MoneyAmount.currency"/>
<field source="$.FlightClass" target="EmissionCalculationResult.travelClass"/> <field source="$.offset_url" target="MoneyAmount.url"/>
<field source="$.TotalDistance_Km" target="EmissionCalculationResult.distance.value"/> <field source="$.locale" target="MoneyAmount.locale"/>
<constant target="EmissionCalculationResult.distance.unit" value="km"/> </list>
<field source="$.TotalDistance_Miles" target="EmissionCalculationResult.distance.miles"/>
<field source="$.PerPersonPrice" target="EmissionCalculationResult.perPassengerPrice.amount"/>
<field source="$.TotalPrice" target="EmissionCalculationResult.offset.amount"/>
<field source="$.CurrencyCode" target="EmissionCalculationResult.offset.currency"/>
<field source="$.QuoteId" target="EmissionCalculationResult.quote.id"/>
<field source="$.QuoteExpiry" target="EmissionCalculationResult.quote.expiresAt"/>
<field source="$.ShortDescription" target="EmissionCalculationResult.description"/>
<field source="$.MetaData" target="EmissionCalculationResult.metadata"/>
<field source="$" target="EmissionCalculationResult.vendorRaw"/> <field source="$" target="EmissionCalculationResult.vendorRaw"/>
</responseMapping> </responseMapping>
</operation> </operation>

View File

@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<providers xmlns="https://calco2la.to/schema/providers/v1">
<provider id="klimalink"> <provider id="klimalink">
<name>KlimaLink API</name> <name>KlimaLink API</name>
<baseUrl>https://api.dev.klimalink.org</baseUrl> <baseUrl>https://api.dev.klimalink.org</baseUrl>