AeroVolt
Developer Docs External Certificate API
Markdown Text JSON
Base URL https://app.aerovolt.co.uk

Aerovolt EBC API

Create, update, search, and delete mission-backed Electric Book & Claim certificate records from another system.

Start with create Download JSON

Authentication

External endpoints require API client credentials issued from the app settings API Credentials popup.

HTTP Basic Authorization: Basic base64(CLIENT_KEY:CLIENT_SECRET)
Headers X-Carbon-Key: CLIENT_KEY
X-Carbon-Secret: CLIENT_SECRET
POST /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.

CO2 Auto/Payloadco2_used_t
EBC Optionalebc_allocated_t
Value Optionalvalue_purchased
Currencycurrency
Commissionsupplier_commission_percent
Referencerecord_reference
Paymentpayment_status
Carbon report only is supported. If no EBC allocation and no positive EBC value is supplied, the API still creates the server record with CO2/flight details, 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.

Flat ICAO departure_icao: EGLL
arrival_icao: LFMN
Flat IATA departure_iata: LHR
arrival_iata: NCE
Nested ICAO departure: { icao: EGLL }
arrival: { icao: LFMN }
Nested IATA 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.

Responses include 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.

Best Payload "aircraft": { "manufacturer": "Gulfstream Aerospace", "model": "G650" }
Per Leg Override "flights": [{ "aircraft": { "manufacturer": "Cessna", "model": "Citation CJ4" } }]
Optional Variant "aircraft": { "manufacturer": "Embraer", "model": "Phenom 300", "variant": "E" }
112 database aircraft loaded

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.

Reference record_reference: SUPPLIER-INV-7781
Payment payment_status: unpaid | pending | paid | cancelled | void | refunded
POST /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.

Use this when an external system needs to price an EBC claim before the customer confirms the certificate.

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.

Private Payload public_status: private
Lookup Rule 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.

Hours duration_hours
flight_time_hours
block_time_hours
Minutes 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.

The documentation Test Centre lets integrators paste JSON and simulate validation, CO2 calculation, quote totals, and certificate creation without API credentials.
PUT PATCH /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"}
  ]
}
DELETE /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.

Percent supplier_commission_percent: 12.5
Amount 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.

Repeated submissions return 200 OK with 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.

Public certificate GET /certificates/{certificate_number}
PDF certificate GET /certificates/{certificate_number}.pdf
API detail GET /api/external/certificates/{certificate_number}
Search GET /api/external/certificates/search?q=BOOKING-10428

Database Mapping

co2_used_tcertificates.total_co2_used_t, missions.total_co2_t
ebc_allocated_tcertificates.ebc_allocated_t, certificates.total_co2_t, missions.offset_co2_t
value_purchasedConverted to USD and stored as certificates.total_price
submitted currencycertificates.submitted_total_price, submitted_currency, fx_rate_to_usd, fx_rate_source, fx_converted_at
supplier commissioncertificates.supplier_commission_percent, supplier_commission_amount, supplier_commission_currency, submitted_supplier_commission_amount, submitted_supplier_commission_currency
payment_statuscertificates.invoice_status
record_referencecertificates.customer_reference