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. Flight airports can be supplied as ICAO or IATA codes. 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": "Bombardier",
        "model": "Challenger 604",
        "variant": "C-143A"
    },
    "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": "Gulfstream  II",
                "variant": "G  II"
            }
        }
    ]
}

Airport Codes

The API accepts ICAO and IATA airport codes. ICAO examples are EGLL and LFMN; IATA examples are LHR and NCE. IATA codes are resolved to the stored ICAO airport record before the mission leg is saved.

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 exact manufacturer/model/variant values, 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 Glossary

For exact CO2 and flight-time calculations, send manufacturer, model, and optional variant values from the app.aircraft_models table. Uppercase/lowercase 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. Misspelled aircraft names are rejected with suggested matches.

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" }
110 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 by setting the same departure and arrival airport. Because there is no route distance to derive flight time, the payload must include a flight/block duration or both departure and arrival times. A-B flights can still calculate flight time automatically from aircraft cruise speed and airport distance.

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

Updates customer fields, public/status fields, CO2/EBC amounts, value, currency, and linked API mission totals when flight legs are supplied.

{
  "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"
}
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