https://app.aerovolt.co.uk
Aerovolt EBC API
Create, update, search, and delete mission-backed Electric Book & Claim certificate records from another system.
Authentication
External endpoints require API client credentials issued from the app settings API Credentials popup.
Authorization: Basic base64(CLIENT_KEY:CLIENT_SECRET)
X-Carbon-Key: CLIENT_KEY
X-Carbon-Secret: CLIENT_SECRET
/api/external/certificates/create
Create Certificate
Creates the mission, flight legs, certificate record, public certificate URL, and PDF URL when the record is public. Each flight endpoint accepts an ICAO/IATA code or latitude/longitude. If CO2 is not supplied, the API calculates it from the aircraft database and route distance.
ebc_purchased_t: 0, total_price: 0, and carbon_report_only: true.{
"external_reference": "BOOKING-10428",
"record_reference": "SUPPLIER-INV-7781",
"customer_reference": "BOOKING-10428",
"mission_number": "API-10428",
"reference_number": "OPS-10428",
"public_status": "public",
"co2_used_t": 12.42,
"ebc_allocated_t": 10,
"value_purchased": 2400,
"currency": "GBP",
"supplier_commission_percent": 12.5,
"payment_status": "unpaid",
"upsert": true,
"aircraft": {
"manufacturer": "Gulfstream Aerospace",
"model": "Gulfstream IV",
"variant": "C-20F/G/H/J"
},
"flights": [
{
"flight_number": "AV001",
"departure": {
"iata": "LHR"
},
"arrival": {
"iata": "NCE"
},
"departure_time": "2026-06-03 08:00:00",
"arrival_time": "2026-06-03 10:05:00"
},
{
"flight_number": "AV002",
"departure": {
"iata": "NCE"
},
"arrival": {
"iata": "LCY"
},
"departure_time": "2026-06-04 09:00:00",
"arrival_time": "2026-06-04 10:45:00",
"aircraft": {
"manufacturer": "Gulfstream Aerospace",
"model": "G650",
"variant": "G650ER"
}
}
]
}
Airport Codes
Each departure and arrival accepts an ICAO/IATA code or a latitude/longitude pair. These formats can be mixed across sectors. Coordinate locations do not need an airport code or an airport-reference entry.
Use departure: { name, latitude, longitude } and arrival: { name, latitude, longitude }. Names are optional. Latitude must be -90 to 90 and longitude -180 to 180 decimal degrees. Both values are required together; zero and numeric strings are valid. Nested lat, lng and lon aliases are accepted.
Flat fields are departure_latitude, departure_longitude, arrival_latitude and arrival_longitude, optionally with departure_name / arrival_name. Short _lat, _lng, _lon suffixes and from_, to_, origin_, destination_ prefixes also work.
Explicit coordinates take precedence over codes and are stored with a null ICAO field. Responses retain names and coordinates, with departure_location_type / arrival_location_type set to coordinates or airport. The shared airport catalogue is not changed. Calculate, quote, create, sandbox and update use the same endpoint formats; saved coordinates remain available in maps and PDFs. No SQL migration is required.
Identical coordinates require positive flight duration or valid departure/arrival times. Departure date/time is still required; EBC does not invent a noon placeholder. Flight updates replace the submitted collection, so include all sectors to retain. A sending CRM must also allow coordinates through its own pre-send validation.
departure_icao: EGLL
arrival_icao: LFMN
departure_iata: LHR
arrival_iata: NCE
departure: { icao: EGLL }
arrival: { icao: LFMN }
departure: { iata: LHR }
arrival: { iata: NCE }
CO2 Calculation
If co2_used_t is missing, the API resolves the aircraft from manufacturer/model/variant values or the closest matching aircraft label, then calculates distance from the route airports and estimates CO2 using aircraft fuel burn or electric CO2-per-hour data. A top-level aircraft is used as the default, and each item in flights, legs, or sectors can include its own aircraft object when different aircraft operate different sectors.
co2_source: payload when CO2 was supplied, or aircraft_database when the API calculated it. The API also returns point-to-point distance as totals.point_to_point_distance_nm and per-leg point_to_point_distance_nm, even when CO2 was supplied by the API user. Aircraft range data is advisory only and does not block certificate creation.Aircraft Glossary
Eurocopter EC155, EC 155, EC155B1 and Airbus Helicopters H155 resolve within the same helicopter family, ignoring case, spaces and hyphens. An unspecified EC155 uses B1 when available; an explicit B variant remains distinct. Performance comes from the matched database row. Missing helicopter catalogue data is reported rather than substituted with an Airbus jet.
For the best CO2 and flight-time calculations, send manufacturer, model, and optional variant values from the app.aircraft_models table. Uppercase/lowercase and camelCase/snake_case variants are accepted. make, aircraft_make, and aircraft_manufacturer are accepted aliases for manufacturer; type, aircraft_type, and aircraft_model are accepted aliases for model. Combined labels such as aircraft, name, label, full_name, aircraft_name, aircraft_details, selected_aircraft, and make_model are closest-matched against the database.
"aircraft": { "manufacturer": "Gulfstream Aerospace", "model": "G650" }
"flights": [{ "aircraft": { "manufacturer": "Cessna", "model": "Citation CJ4" } }]
"aircraft": { "manufacturer": "Embraer", "model": "Phenom 300", "variant": "E" }
Record Reference & Payment Status
Use record_reference for the supplier or booking-side reference. Use payment_status to track commercial settlement. New API certificates default to unpaid, allowing AeroVolt to remove or void records that are not ultimately paid for.
record_reference: SUPPLIER-INV-7781
payment_status: unpaid | pending | paid | cancelled | void | refunded
/api/external/quote
Quote
Returns a commercial EBC quote without creating a mission or certificate. The API calculates CO2 when it is not supplied, applies the company EBC price per tonne, and records the supplier commission rate submitted by the API user in the response.
Private Record Mode
Set public_status to private when a certificate should not appear in the Public Registry or partial public search results. Private records can only be found by entering the full certificate number. When viewed, the aircraft registration is always shown as PRIVATE, including the certificate page and PDF.
public_status: private
Full certificate number only
A-A Flights
A-A flights are supported with the same airport or identical coordinates. Supply positive flight/block duration or valid departure/arrival times. A-B flights can calculate flight time from aircraft cruise speed and the distance between airports or coordinate locations.
duration_hours
flight_time_hours
block_time_hours
duration_minutes
flight_time_minutes
block_time_minutes
Sandbox
The app settings API Credentials popup now includes an API Sandbox. Create or reset a client, paste the one-time secret into the sandbox, choose Quote, Calculate CO2, or Create Certificate, and run a live JSON payload against the API.
/api/external/certificates/{certificate_number}
Update Certificate
Patch any editable certificate detail. Omitted fields stay unchanged. Send partial flights, legs, or sectors entries by position or 1-based leg_sequence to update airport codes, coordinates, times, flight numbers, or per-leg aircraft. Flat airport/time fields update leg 1. Route or aircraft edits recalculate distance and CO2 unless CO2 is explicitly supplied.
To replace every leg, send replace_flights: true with the full flight list. You can also update references, issued date, customer/location, charger, payment/public status, CO2/EBC, value/currency, and commission. Invoiced certificates can be corrected, but the existing invoice and PDF keep their original line-item snapshot. The response includes created.invoice_ids and created.invoice_snapshot_unchanged; reset and recreate an invoice if it must reflect a correction. The certificate number and database/FX audit fields are server-managed.
{
"customer_reference": "BOOKING-10428-UPDATED",
"co2_used_t": 12.8,
"ebc_allocated_t": 10.5,
"value_purchased": 2520.0,
"currency": "GBP",
"payment_status": "paid",
"public_status": "public"
}
{
"flights": [
{"leg_sequence": 1, "arrival_icao": "LPFR", "off_block_time": "2026-10-23 08:00:00"},
{"leg_sequence": 2, "departure_icao": "LPFR", "on_block_time": "2026-10-23 16:30:00"}
]
}
/api/external/certificates/{certificate_number}
Delete Certificate
Deletes the authenticated company certificate. The linked API-created mission is also deleted when it is not linked to any other certificate.
Currency Conversion
certificates.total_price is stored in USD. When a non-USD currency is submitted, the API fetches a live rate and stores audit fields for the submitted currency and FX conversion.
{
"total_price": 3048,
"total_price_currency": "USD",
"submitted_total_price": 2400,
"submitted_currency": "GBP",
"fx_rate_to_usd": 1.27,
"fx_rate_source": "frankfurter",
"supplier_commission_amount": 381,
"supplier_commission_currency": "USD",
"supplier_commission_percent": 12.5
}
Supplier Commission
The API can accept supplier commission as either a percentage of the USD EBC value or as a submitted amount. Submitted commission amounts are converted to USD and stored with submitted-currency audit fields.
supplier_commission_percent: 12.5
supplier_commission_amount: 300
supplier_commission_currency: GBP
Duplicate Prevention
The create endpoint checks external_reference, idempotency_key, certificate_number, record_reference, record_id, reference, booking_reference, and customer_reference before inserting.
already_exists: true. Add upsert: true to update the existing record instead.PDF & Public Certificate Pages
Create and detail responses include browser-ready certificate and PDF links. Public records appear in the Public Registry. Private records only resolve when the full certificate number is entered and show aircraft registration as PRIVATE.
GET /certificates/{certificate_number}
GET /certificates/{certificate_number}.pdf
GET /api/external/certificates/{certificate_number}
GET /api/external/certificates/search?q=BOOKING-10428
Database Mapping
| co2_used_t | certificates.total_co2_used_t, missions.total_co2_t |
|---|---|
| ebc_allocated_t | certificates.ebc_allocated_t, certificates.total_co2_t, missions.offset_co2_t |
| value_purchased | Converted to USD and stored as certificates.total_price |
| submitted currency | certificates.submitted_total_price, submitted_currency, fx_rate_to_usd, fx_rate_source, fx_converted_at |
| supplier commission | certificates.supplier_commission_percent, supplier_commission_amount, supplier_commission_currency, submitted_supplier_commission_amount, submitted_supplier_commission_currency |
| payment_status | certificates.invoice_status |
| record_reference | certificates.customer_reference |