MultiLegShippingEmissionEstimate
An emission estimate result for a transport involving multiple legs. Lune's API returns both the total emissions and per-leg emissions (in the `legs` property). The ordering of the legs in the estimate is the same as the ordering of the inputs. An error with estimating any of the legs will result in the whole estimation process failing completely (we don't provide partial estimates in light of a failure).
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/lune/json-schema/lune-multi-leg-shipping-emission-estimate-schema.json",
"title": "MultiLegShippingEmissionEstimate",
"description": "An emission estimate result for a transport involving multiple legs.\n\nLune's API returns both the total emissions and per-leg emissions (in the `legs`\nproperty).\n\nThe ordering of the legs in the estimate is the same as the ordering of the inputs.\n\nAn error with estimating any of the legs will result in the whole estimation process\nfailing completely (we don't provide partial estimates in light of a failure).\n",
"x-generated": "2026-10-29",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/lune-openapi.yml#/components/schemas/MultiLegShippingEmissionEstimate",
"x-lune-name": "Multi-leg shipping estimate",
"allOf": [
{
"type": "object",
"required": [
"is_shipment",
"shipped_at",
"legs",
"raw_distance",
"distance",
"adjusted_distance",
"request",
"external_estimate_url",
"data_quality_score",
"created_at",
"filename",
"user_fullname"
],
"properties": {
"is_shipment": {
"$ref": "#/$defs/IsShipment"
},
"shipped_at": {
"$ref": "#/$defs/ShippedAt"
},
"data_quality_score": {
"description": "Represents the average data quality score for each leg.\n",
"oneOf": [
{
"type": "object",
"required": [
"score"
],
"properties": {
"score": {
"$ref": "#/$defs/DataQualityGrade"
}
}
},
{
"$ref": "#/$defs/NullEnum"
}
]
},
"legs": {
"type": "array",
"description": "An array representing a leg's emission estimate.\n\nReturned in the same order as the request.\n",
"items": {
"$ref": "#/$defs/ShippingLegEmissionEstimate"
}
},
"raw_distance": {
"$ref": "#/$defs/RawDistance"
},
"distance": {
"$ref": "#/$defs/Distance"
},
"adjusted_distance": {
"$ref": "#/$defs/AdjustedDistance"
},
"request": {
"$ref": "#/$defs/MultiLegShippingEstimateRequest"
},
"external_estimate_url": {
"description": "An external accessible URL linking to a detailed page that provides complete information about the estimate.",
"oneOf": [
{
"$ref": "#/$defs/Url"
},
{
"$ref": "#/$defs/NullEnum"
}
]
},
"source": {
"type": "string",
"description": "Identifies the source used to create the estimate.",
"enum": [
"api",
"dashboard",
"csv",
"chain_io",
"ecotransit_csv",
"widget",
"ecotransit",
"blue_yonder",
"rfq"
]
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "The date and time when the estimate was created."
},
"filename": {
"description": "Name of the uploaded data sheet.",
"oneOf": [
{
"type": "string"
},
{
"$ref": "#/$defs/NullEnum"
}
]
},
"user_fullname": {
"description": "Full name of the user that uploaded the data sheet.",
"oneOf": [
{
"type": "string"
},
{
"$ref": "#/$defs/NullEnum"
}
]
}
}
},
{
"$ref": "#/$defs/ShippingEmissionEstimateResponse"
}
],
"$defs": {
"AccountCurrencyCode": {
"type": "string",
"description": "The account's currency.\n\nISO 4217 3 character currency code.\n\nNote: Lune does not support all currency codes.\n",
"enum": [
"GBP",
"EUR",
"USD",
"SEK",
"CHF",
"PLN",
"DKK",
"NOK",
"BGN",
"INR",
"SGD",
"AED",
"AUD",
"HUF",
"ISK",
"CZK",
"CAD"
]
},
"AccountExternalPagesVisibility": {
"description": "Controls the visibility of external pages such as sustainability and analytics pages.\n\n`public` pages are visible to everyone.\n`private` pages are only visible through a verified JWT.\n`hidden` pages not visible.\n\nDefaults to `hidden`.\n",
"type": "string",
"enum": [
"public",
"hidden",
"private"
]
},
"AccountHandle": {
"type": "string",
"pattern": "^[a-z0-9-_]+$",
"description": "`handle` is a client defined URL-friendly string that identifies the account.\n\nThe `handle` is unique per organisation and account type.\n"
},
"AccountIdempotencyKey": {
"type": "string",
"maxLength": 100,
"description": "A unique identifier provided by the client.\n\n`idempotency_key` is unique per account type.\n\nIf an account with the same `idempotency_key` already exists, the API returns\nHTTP 409 Conflict with error code `account_idempotency_already_exists`.\n"
},
"Address": {
"x-lune-name": "Address",
"description": "Detailed information about an address.\n\nEven though though `street_line1`, `postcode`, `city` are optional properties, the more details\nyou provide, the more likely we are able to resolve the address to its intended location.\n\nNote: only `postcode` is guaranteed to be unique for a country.\n\n`country_code` is optional, but it is strongly recommended to provide it for\nbetter accuracy if possible.\n",
"type": "object",
"additionalProperties": false,
"properties": {
"street_line1": {
"type": "string",
"description": "A street and house number (or equivalent)."
},
"street_line2": {
"type": "string",
"description": "An address component more precise than a street and house number."
},
"postcode": {
"type": "string",
"description": "The postal code in the format specific to the country it's in"
},
"city": {
"type": "string"
},
"country_code": {
"type": "string",
"description": "A three-letter country code."
}
}
},
"AdjustedDistance": {
"description": "Deprecated. This value is the same as Distance.\n",
"type": "object",
"required": [
"amount",
"unit"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^[0-9]+(\\.[0-9]+)?$"
},
"unit": {
"type": "string",
"enum": [
"km",
"mi",
"nm"
]
}
}
},
"AirShippingMethod": {
"x-lune-name": "Air freight",
"oneOf": [
{
"$ref": "#/$defs/FlightNumberMethod"
},
{
"$ref": "#/$defs/AircraftTypeMethod"
}
]
},
"AircraftConfiguration": {
"type": "string",
"description": "For air transport, Lune supports one of three values:\n\n* `cargo_plane`: Indicating a full freighter plane.\n* `passenger_plane`: Indicating the plane only contains belly freight.\n* `plane`: When the freight capacity of the plane is unknown. This value uses a weighted average of cargo and passenger planes.\n\nWhen `aircraft_configuration` is omitted, it defaults to `plane`.\n",
"enum": [
"cargo_plane",
"passenger_plane",
"plane"
]
},
"AircraftTypeMethod": {
"x-lune-name": "Aircraft type",
"type": "object",
"required": [
"aircraft_type"
],
"properties": {
"aircraft_type": {
"type": "string",
"description": "Aircraft type ICAO code",
"enum": [
"A140",
"A148",
"A158",
"A306",
"A30B",
"A310",
"A318",
"A319",
"A320",
"A321",
"A332",
"A333",
"A342",
"A343",
"A345",
"A346",
"A359",
"A380",
"AN12",
"B703",
"B712",
"B722",
"B732",
"B733",
"B734",
"B735",
"B738",
"B739",
"B742",
"B744",
"B748",
"B752",
"B762",
"B763",
"B77L",
"B773",
"B77W",
"B788",
"B789",
"MD11"
]
}
}
},
"AirportCode": {
"type": "object",
"oneOf": [
{
"$ref": "#/$defs/IATACode"
},
{
"$ref": "#/$defs/ICAOCode"
}
]
},
"BaseShippingLegEmissionEstimate": {
"allOf": [
{
"$ref": "#/$defs/EmissionEstimateWithWTWBreakdown"
},
{
"type": "object",
"required": [
"methodology",
"distance_calculation_method",
"distance_calculation_details",
"route",
"emission_factor",
"methodology_details",
"data_quality_score",
"activity",
"intensity"
],
"properties": {
"vessel_inference_details": {
"description": "The method we used to infer a vessel from client provided input.\n\n`null` when vessel identifier provided by client or no vessel inference not relevant to estimation.\n",
"oneOf": [
{
"$ref": "#/$defs/VesselInferenceMethod"
},
{
"$ref": "#/$defs/NullEnum"
}
]
},
"raw_distance": {
"$ref": "#/$defs/RawDistance"
},
"distance": {
"$ref": "#/$defs/Distance"
},
"adjusted_distance": {
"$ref": "#/$defs/AdjustedDistance"
},
"distance_calculation_method": {
"description": "The method we used to determine the shipping distance.\n\n`null` in case of logistics sites or when resolved_legs is set.\n",
"oneOf": [
{
"$ref": "#/$defs/DistanceCalculationMethod"
},
{
"$ref": "#/$defs/NullEnum"
}
]
},
"activity": {
"oneOf": [
{
"$ref": "#/$defs/LogisticsActivity"
},
{
"$ref": "#/$defs/NullEnum"
}
]
},
"intensity": {
"oneOf": [
{
"$ref": "#/$defs/LogisticsIntensityBreakdown"
},
{
"$ref": "#/$defs/NullEnum"
}
]
},
"route": {
"description": "The shipping route.\n\n`null` in case of logistics sites and situations where the concept of\na route doesn't make sense or we're unable to return the route. That\nincludes the following situations at the moment:\n\n* Routes where source or destination is an address (or both are).\n* Most land and inland waterways routes.\n* The actual distance value was provided by the user.\n* The emission estimate was created before 2023-09-22.\n",
"oneOf": [
{
"$ref": "#/$defs/CalculatedRoute"
},
{
"$ref": "#/$defs/NullEnum"
}
]
},
"emission_factor": {
"$ref": "#/$defs/EmissionFactorWithGasEmissions"
},
"methodology": {
"type": "array",
"description": "Summary of the methodology used to calculate emissions or any value which is a prerequisite.\n\n`imo_unavailable_container_ship_fallback`: the vessel IMO was not found, therefore a generic container ship emission factor has been used.\n`flight_number_unavailable_fallback`: the flight number could not be found or the aircraft is currently not supported, therefore a generic plane method has been used.\n",
"items": {
"type": "string",
"enum": [
"imo_unavailable_container_ship_fallback",
"imo_unavailable_container_ship_trade_lane_fallback",
"flight_number_unavailable_fallback",
"invalid_flight_route_fallback"
]
}
},
"distance_calculation_details": {
"description": "Information regarding why an alternative distance calculation method was used.\n`null` in case several resolved legs are presented.\n",
"oneOf": [
{
"$ref": "#/$defs/DistanceCalculationDetails"
},
{
"$ref": "#/$defs/NullEnum"
}
]
},
"methodology_details": {
"oneOf": [
{
"$ref": "#/$defs/MethodologyDetails"
},
{
"$ref": "#/$defs/RoadMethodologyDetails"
},
{
"$ref": "#/$defs/ElectricMethodMethodologyDetails"
},
{
"$ref": "#/$defs/RouteInferenceDetails"
},
{
"$ref": "#/$defs/SeaMethodologyDetails"
},
{
"$ref": "#/$defs/NullEnum"
}
]
},
"data_quality_score": {
"description": "Represents the quality of the emission estimation for a particular shipping leg.\n",
"oneOf": [
{
"$ref": "#/$defs/DataQualityScore"
},
{
"$ref": "#/$defs/NullEnum"
}
]
},
"inference_details": {
"description": "Lune infers certain properties to improve estimation accuracy.\nAny inferences made will be described in this property.\n",
"oneOf": [
{
"$ref": "#/$defs/InferenceDetails"
},
{
"$ref": "#/$defs/NullEnum"
}
]
}
}
}
]
},
"BundlePercentageRequest": {
"type": "object",
"description": "Maps a bundle id to an allocation ratio",
"required": [
"bundle_id"
],
"properties": {
"bundle_id": {
"type": "string",
"description": "The bundle's unique identifier"
},
"percentage": {
"oneOf": [
{
"type": "integer",
"x-lune-name": "Selection percentage as integer",
"description": "Selection percentage"
},
{
"type": "string",
"pattern": "^[0-9]+(\\.\\d{1,2})?$",
"x-lune-name": "Selection percentage in decimals",
"description": "Selection percentage in decimals"
}
]
}
}
},
"BundleSelectionRequest": {
"type": "array",
"description": "Bundle selection percentages.\n\nThe sum of all percentages must equal 100.\n\nIf not specified, the preconfigured allocation ratios are going to be used.\n\nIf, for each selection, `percentage` is not provided, the selection is divided equally (best effort) between bundles. `percentage` must be provided for all or none of the bundles.\n",
"items": {
"$ref": "#/$defs/BundlePercentageRequest"
}
},
"CalculatedRoute": {
"description": "A list of locations and distances betwen them.\n\nAt least one leg will always exist.\n\nThe last leg contains the final location (destination) of the route.\n",
"type": "object",
"required": [
"source",
"legs",
"attribution"
],
"properties": {
"source": {
"$ref": "#/$defs/CalculatedRouteLocation"
},
"legs": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/$defs/CalculatedRouteLeg"
}
},
"attribution": {
"type": [
"string",
"null"
],
"description": "Attribution for the route provider, if applicable."
}
}
},
"CalculatedRouteLeg": {
"description": "A location and a distance from the previous location (or `source`, if this is the\nfirst leg).\n\nIf this is the last leg then the location is the final location (destination) of\nthe route.\n",
"type": "object",
"required": [
"location",
"distance"
],
"properties": {
"location": {
"$ref": "#/$defs/CalculatedRouteLocation"
},
"raw_distance": {
"$ref": "#/$defs/RawDistance"
},
"distance": {
"$ref": "#/$defs/Distance"
}
}
},
"CalculatedRouteLocation": {
"type": "object",
"required": [
"label",
"coordinates"
],
"properties": {
"label": {
"type": [
"string",
"null"
]
},
"coordinates": {
"$ref": "#/$defs/GeographicCoordinates"
}
}
},
"CargoType": {
"type": "string",
"description": "Specify the mass of cargo in the container. If omitted, `average` is used by default.\n\nEach type applies a different conversion to mass for emissions estimation. See [TEU conversion table](https://docs.lune.co/general-concepts/logistics-methodology#13-cargo-weight) for details.\n",
"enum": [
"lightweight",
"average",
"heavyweight",
"container_only"
]
},
"ContainerShippingMethod": {
"x-lune-name": "Container sea transport",
"type": "object",
"additionalProperties": false,
"required": [
"vessel_type"
],
"properties": {
"vessel_type": {
"type": "string",
"enum": [
"container_ship"
]
},
"refrigerated": {
"description": "A container transport is either refrigerated or \"dry\" (not refrigerated). Dry transports\nresult in lower emissions.\n",
"type": "boolean",
"default": false
},
"load_factor": {
"description": "Measure of how fully a vessel is utilising its cargo capacity.\n",
"type": "number",
"format": "float",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": true
},
"trade_lane": {
"type": "string",
"description": "Container transport emissions vary per trade lane. When a trade lane is not provided,\nLune will attempt to infer it from the shipment's source and destination locations.\nIf inference is not possible (e.g. no route provided or locations fall outside mapped\nregions), an industry-wide average will be used. Any inferred trade lane is reported in\nthe response's `inference_details.trade_lane_from_route` field.\n\nProviding an `aggregated_*` trade lane group will result in a more accurate estimate.\nProviding a `disaggregated_*` trade lane will result in the best estimate precision.\n\nThe identifiers are kept relatively short for brevity: Mediterranean includes Black Sea and\nSouth America includes Central America.\n\nThe trade lanes are bidirectional, for example `disaggregated_asia_to_africa` covers both\nAsia to Africa and Africa to Asia.\n",
"enum": [
"aggregated_panama_trade",
"aggregated_transatlantic",
"aggregated_transsuez",
"aggregated_transpacific",
"aggregated_other",
"disaggregated_asia_to_africa",
"disaggregated_asia_to_mediterranean",
"disaggregated_asia_to_middle_east",
"disaggregated_asia_to_north_america_east",
"disaggregated_asia_to_north_america_west",
"disaggregated_asia_to_north_europe",
"disaggregated_asia_to_oceania",
"disaggregated_asia_to_south_america",
"disaggregated_europe_to_africa",
"disaggregated_europe_to_south_america",
"disaggregated_europe_to_middle_east",
"disaggregated_europe_to_oceania",
"disaggregated_mediterranean_to_north_america_east",
"disaggregated_mediterranean_to_north_america_west",
"disaggregated_north_america_to_africa",
"disaggregated_north_america_to_oceania",
"disaggregated_north_america_to_south_america",
"disaggregated_north_america_to_middle_east",
"disaggregated_north_europe_to_north_america_east",
"disaggregated_north_europe_to_north_america_west",
"disaggregated_south_america_to_africa",
"disaggregated_intra_africa",
"disaggregated_intra_north_america",
"disaggregated_intra_south_america",
"disaggregated_se_asia_to_ne_asia",
"disaggregated_intra_ne_asia",
"disaggregated_intra_se_asia",
"disaggregated_north_europe_to_mediterranean",
"disaggregated_intra_mediterranean",
"disaggregated_intra_north_europe",
"disaggregated_intra_middle_east",
"disaggregated_other"
]
}
}
},
"ContainerShippingMethodWithExtraProperties": {
"x-lune-name": "Container sea transport",
"type": "object",
"required": [
"vessel_type"
],
"properties": {
"vessel_type": {
"type": "string",
"enum": [
"container_ship"
]
},
"refrigerated": {
"description": "A container transport is either refrigerated or \"dry\" (not refrigerated). Dry transports\nresult in lower emissions.\n",
"type": "boolean",
"default": false
},
"load_factor": {
"description": "Measure of how fully a vessel is utilising its cargo capacity.\n",
"type": "number",
"format": "float",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": true
},
"trade_lane": {
"type": "string",
"description": "Container transport emissions vary per trade lane. When a trade lane is not provided,\nLune will attempt to infer it from the shipment's source and destination locations.\nIf inference is not possible (e.g. no route provided or locations fall outside mapped\nregions), an industry-wide average will be used. Any inferred trade lane is reported in\nthe response's `inference_details.trade_lane_from_route` field.\n\nProviding an `aggregated_*` trade lane group will result in a more accurate estimate.\nProviding a `disaggregated_*` trade lane will result in the best estimate precision.\n\nThe identifiers are kept relatively short for brevity: Mediterranean includes Black Sea and\nSouth America includes Central America.\n\nThe trade lanes are bidirectional, for example `disaggregated_asia_to_africa` covers both\nAsia to Africa and Africa to Asia.\n",
"enum": [
"aggregated_panama_trade",
"aggregated_transatlantic",
"aggregated_transsuez",
"aggregated_transpacific",
"aggregated_other",
"disaggregated_asia_to_africa",
"disaggregated_asia_to_mediterranean",
"disaggregated_asia_to_middle_east",
"disaggregated_asia_to_north_america_east",
"disaggregated_asia_to_north_america_west",
"disaggregated_asia_to_north_europe",
"disaggregated_asia_to_oceania",
"disaggregated_asia_to_south_america",
"disaggregated_europe_to_africa",
"disaggregated_europe_to_south_america",
"disaggregated_europe_to_middle_east",
"disaggregated_europe_to_oceania",
"disaggregated_mediterranean_to_north_america_east",
"disaggregated_mediterranean_to_north_america_west",
"disaggregated_north_america_to_africa",
"disaggregated_north_america_to_oceania",
"disaggregated_north_america_to_south_america",
"disaggregated_north_america_to_middle_east",
"disaggregated_north_europe_to_north_america_east",
"disaggregated_north_europe_to_north_america_west",
"disaggregated_south_america_to_africa",
"disaggregated_intra_africa",
"disaggregated_intra_north_america",
"disaggregated_intra_south_america",
"disaggregated_se_asia_to_ne_asia",
"disaggregated_intra_ne_asia",
"disaggregated_intra_se_asia",
"disaggregated_north_europe_to_mediterranean",
"disaggregated_intra_mediterranean",
"disaggregated_intra_north_europe",
"disaggregated_intra_middle_east",
"disaggregated_other"
]
}
}
},
"ConvertedShipment": {
"type": "object",
"required": [
"amount",
"unit"
],
"properties": {
"amount": {
"type": "string"
},
"unit": {
"oneOf": [
{
"$ref": "#/$defs/MassUnit"
},
{
"x-lune-name": "Containers",
"type": "string",
"enum": [
"TEU"
]
}
]
}
}
},
"CurrencyCode": {
"x-lune-name": "Currency code",
"type": "string",
"description": "ISO 4217 3 character currency code.\n\nNote: Lune supports most but not all currency codes.\n",
"enum": [
"AED",
"AFN",
"ALL",
"AMD",
"ANG",
"AOA",
"ARS",
"AUD",
"AWG",
"AZN",
"BAM",
"BBD",
"BDT",
"BGN",
"BHD",
"BIF",
"BMD",
"BND",
"BOB",
"BRL",
"BSD",
"BTC",
"BTN",
"BWP",
"BYN",
"BYR",
"BZD",
"CAD",
"CDF",
"CHF",
"CLF",
"CLP",
"CNY",
"CNH",
"COP",
"CRC",
"CUC",
"CUP",
"CVE",
"CZK",
"DJF",
"DKK",
"DOP",
"DZD",
"EGP",
"ERN",
"ETB",
"EUR",
"FJD",
"FKP",
"GBP",
"GEL",
"GGP",
"GHS",
"GIP",
"GMD",
"GNF",
"GTQ",
"GYD",
"HKD",
"HNL",
"HRK",
"HTG",
"HUF",
"IDR",
"ILS",
"IMP",
"INR",
"IQD",
"IRR",
"ISK",
"JEP",
"JMD",
"JOD",
"JPY",
"KES",
"KGS",
"KHR",
"KMF",
"KPW",
"KRW",
"KWD",
"KYD",
"KZT",
"LAK",
"LBP",
"LKR",
"LRD",
"LSL",
"LTL",
"LVL",
"LYD",
"MAD",
"MDL",
"MGA",
"MKD",
"MMK",
"MNT",
"MOP",
"MRU",
"MUR",
"MVR",
"MWK",
"MXN",
"MYR",
"MZN",
"NAD",
"NGN",
"NIO",
"NOK",
"NPR",
"NZD",
"OMR",
"PAB",
"PEN",
"PGK",
"PHP",
"PKR",
"PLN",
"PYG",
"QAR",
"RON",
"RSD",
"RUB",
"RWF",
"SAR",
"SBD",
"SCR",
"SDG",
"SEK",
"SGD",
"SHP",
"SLE",
"SLL",
"SOS",
"SRD",
"STD",
"SVC",
"SYP",
"SZL",
"THB",
"TJS",
"TMT",
"TND",
"TOP",
"TRY",
"TTD",
"TWD",
"TZS",
"UAH",
"UGX",
"USD",
"UYU",
"UZS",
"VES",
"VND",
"VUV",
"WST",
"XAF",
"XAG",
"XAU",
"XCD",
"XDR",
"XOF",
"XPF",
"YER",
"ZAR",
"ZMK",
"ZMW",
"ZWL"
]
},
"DataQualityGrade": {
"type": "string",
"description": "A quality grade ranging from \"A_plus\" (excellent) to \"D\" (unsatisfactory).\n",
"enum": [
"A_plus",
"A",
"A_minus",
"B_plus",
"B",
"B_minus",
"C_plus",
"C",
"C_minus",
"D"
]
},
"DataQualityScore": {
"type": "object",
"required": [
"score",
"components"
],
"properties": {
"score": {
"$ref": "#/$defs/DataQualityGrade"
},
"components": {
"type": "object",
"required": [
"emission_factor_score",
"route_score",
"shipment_score"
],
"properties": {
"emission_factor_score": {
"$ref": "#/$defs/DataQualityGrade"
},
"route_score": {
"oneOf": [
{
"$ref": "#/$defs/DataQualityGrade"
},
{
"$ref": "#/$defs/NullEnum"
}
]
},
"shipment_score": {
"$ref": "#/$defs/DataQualityGrade"
}
}
}
}
},
"Distance": {
"x-lune-name": "Distance",
"type": "object",
"required": [
"amount",
"unit"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^[0-9]+(\\.[0-9]+)?$"
},
"unit": {
"type": "string",
"enum": [
"km",
"mi",
"nm"
],
"description": "The estimated distance. Unit, `km` for kilometers, `mi` for miles\n"
}
}
},
"DistanceCalculationDetails": {
"type": "object",
"required": [
"vessel_tracking",
"carrier_schedule_stops"
],
"properties": {
"vessel_tracking": {
"oneOf": [
{
"type": "object",
"x-lune-name": "Vessel tracking details",
"required": [
"message"
],
"properties": {
"message": {
"type": "string"
}
}
},
{
"type": "object",
"x-lune-name": "Vessel tracking adjustments",
"required": [
"adjustments"
],
"properties": {
"adjustments": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
{
"$ref": "#/$defs/NullEnum"
}
]
},
"carrier_schedule_stops": {
"oneOf": [
{
"type": "object",
"x-lune-name": "Carrier schedule stops details",
"required": [
"message"
],
"properties": {
"message": {
"description": "The human-readable message describing the details of how we used or failed to use\ncarrier schedule stops to calculate the route.\n\nThe property is meant only for informational purposes and its exact format can\nchange.\n",
"type": "string"
# --- truncated at 32 KB (126 KB total) ---
# Full source: https://artifacts.apis.io/lune/json-schema/lune-multi-leg-shipping-emission-estimate-schema.json
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
curl "https://apis.io/api/v1/json-schemas/lune-multi-leg-shipping-emission-estimate"
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.