Skip to main content

Transport Tools

Query upstream and downstream transport records — goods transportation with routes, distances, and CO₂e emissions. This covers Scope 3 Category 4 (upstream transportation) and Category 9 (downstream transportation).

list_transports

List upstream/downstream transport records with routes, distances, and CO₂e emissions. Use transport_direction to separate inbound raw materials (upstream) from outbound product distribution (downstream). Parameters:
ParameterTypeRequiredDefaultDescription
organization_idstringNodefault orgOrganization UUID
searchstringNoSearch by description
statusstringNoStatus filter: active, deleted
transport_directionstringNoDirection: upstream or downstream
from_datestringNoFilter from this date (YYYY-MM-DD)
to_datestringNoFilter until this date (YYYY-MM-DD)
pageintegerNo1Page number
sizeintegerNo50Results per page
Example response:
{
  "items": [
    {
      "id": "a3f1b2c4-...",
      "name": "Raw materials from supplier",
      "transport_date": "2024-06-15",
      "transport_direction": "upstream",
      "transport_frequency": "once",
      "quantity_transported": 2500.0,
      "supplier": "Acme Logistics",
      "status": "active",
      "co2e": 145.3,
      "unit": {
        "id": "61743a63-...",
        "name": "kilogram_(kg)",
        "type": "weight"
      },
      "sections": [
        {
          "id": "sec-1a2b3c4d-...",
          "part": 1,
          "origin": "Barcelona, Spain",
          "origin_geocode": {
            "country_code": "ES",
            "place_id": "ChIJ5TCOcRaYpBIRCmZHTz37sEQ",
            "address_formatted": "Barcelona, Spain",
            "latitude": 41.3874,
            "longitude": 2.1686
          },
          "destination": "Madrid, Spain",
          "destination_geocode": {
            "country_code": "ES",
            "place_id": "ChIJgTwKgJcpQg0RaSKMYcHeNsQ",
            "address_formatted": "Madrid, Spain",
            "latitude": 40.4168,
            "longitude": -3.7038
          },
          "transport_type": "road",
          "electric": false,
          "refrigerated": false,
          "kms": 620.0,
          "kms_source": "google_maps",
          "status": "active",
          "reference_product": null,
          "emissions": [
            { "value": 145.3, "gas": "co2e", "unit_name": "kgCO2e" }
          ]
        }
      ],
      "created_at": "2024-06-10T08:00:00Z"
    }
  ],
  "total": 156,
  "page": 1,
  "size": 50,
  "pages": 4
}
Key response fields:
FieldDescription
transport_directionupstream (suppliers → you) or downstream (you → customers)
transport_frequencyonce, weekly, or monthly
quantity_transportedAmount transported in the unit specified by unit.name
supplierSupplier or carrier name
co2eTotal CO₂e emissions in kg across all sections
sectionsRoute legs with origin/destination, geocodes, distance (kms), and per-section emissions
sections[].transport_typeroad, air, rail, maritime, or do_not_know
sections[].kmsCalculated or user-provided distance in kilometers
sections[].origin_geocodeGeocoded origin with lat/lon and country code (null if not geocoded)
Example prompts:
"Show our upstream transport records for 2024"
"List downstream transports to Madrid"
"What are our transport emissions from Barcelona routes?"
"Show all transports from supplier Acme"
"List one-time transports in Q1 2025"

Write Operations

create_transport

Create a transport (shipment) record for Scope 3 upstream or downstream transportation. A transport consists of a route-level record (date, quantity, direction) and one or more sections (legs), each with its own transport mode, origin/destination, and distance. CO₂e is calculated asynchronously after creation — the response will initially show co2e as null. Route parameters:
ParameterTypeRequiredDefaultDescription
transport_datestringYesDate of shipment (YYYY-MM-DD)
quantity_transportednumberYesWeight of goods (must be > 0)
unit_idstringYesUUID of the weight unit (e.g. kg, tonne)
sectionsarrayYesList of transport sections (at least one)
namestringNoDescription or label (e.g. “Raw materials from supplier A”)
supplierstringNoSupplier or carrier name
transport_directionstringNoupstream (Scope 3 Cat 4) or downstream (Scope 3 Cat 9)
organization_idstringNodefault orgOrganization UUID
Section parameters (each item in sections):
ParameterTypeRequiredDefaultDescription
transport_typestringYesroad, rail, air, maritime, or do_not_know
electricbooleanYesWhether the vehicle is electric-powered
refrigeratedbooleanYesWhether the transport is refrigerated
distance_manualbooleanYestrue = provide kms_manual; false = auto-calculate from origin/destination
originstringNoOrigin address (e.g. “Barcelona, Spain”). Required when distance_manual=false
destinationstringNoDestination address. Required when distance_manual=false
kms_manualnumberNoManual distance in km (required when distance_manual=true, must be > 0)
travel_methodstringNoFor road: truck, car, motorbike, bicycle, electric_kick_scooter
detailstringNoVehicle size/distance detail for emission factor selection
Each section requires either origin + destination (for automatic distance calculation via geocoding) or kms_manual with distance_manual=true (for known distances). You can mix modes in a multi-section route — e.g. road from factory to port, then maritime to destination port.
CO₂e emissions are calculated in the background after creation. The initial response will show co2e: null. Call list_transports after a few seconds to see the calculated value.
Example response:
{
  "id": "a3f1b2c4-...",
  "name": "Raw materials from supplier A",
  "transport_date": "2025-06-15",
  "transport_direction": "upstream",
  "transport_frequency": "once",
  "quantity_transported": 1500.0,
  "status": "active",
  "co2e": null,
  "sections": [
    {
      "id": "sec-1a2b...",
      "part": 1,
      "transport_type": "road",
      "origin": "Barcelona, Spain",
      "destination": "Madrid, Spain",
      "electric": false,
      "refrigerated": false,
      "distance_manual": false,
      "status": "pending"
    }
  ],
  "created_at": "2025-06-15T10:30:00Z"
}
Example prompts:
"Log a truck shipment of 2000 kg from Barcelona to Madrid, upstream"
"Create a rail transport of 500 tonnes from Hamburg to Munich"
"Record a maritime shipment, 10000 kg, 8500 km manual distance, downstream"
"Add a multi-leg transport: truck Madrid→Valencia port, then ship to Genoa"
Common errors:
ErrorCause
422: “sections must contain at least one section”Empty sections array
422: “unit_id not found”Invalid weight unit UUID
422: “quantity_transported must be > 0”Zero or negative quantity

update_transport

Update an existing transport (shipment) record. This is a full replacement — you must re-send all sections, even if only changing top-level fields like name or date.
Unlike other update tools, update_transport requires the full sections array every time. To modify a transport: first retrieve it with list_transports, then change the fields you need, and pass the complete sections back.
Parameters:
ParameterTypeRequiredDefaultDescription
transport_idstringYesUUID of the transport. Use list_transports to find it
sectionsarrayYesFull list of transport sections (same format as create_transport)
transport_datestringNoNew shipment date (YYYY-MM-DD)
quantity_transportednumberNoNew weight of goods (> 0)
unit_idstringNoNew weight unit UUID
namestringNoNew description or label
supplierstringNoNew supplier name
transport_frequencystringNoonce, monthly, or weekly
organization_idstringNodefault orgOrganization UUID
Example prompts:
"Update transport abc-123 to use rail instead of road"
"Change the quantity to 3000 kg on transport xyz"
"Fix the supplier name on transport abc to 'Acme Logistics'"
Common errors:
ErrorCause
404: “Transport not found”Invalid transport UUID
422: “sections must contain at least one section”Empty sections array

Workflows

Querying transport records

  1. List transportslist_transports filtered by direction, date range, or search
  2. View emissionsget_greenhouse_gas_emissions with category=transport_distribution_upstream or category=transport_distribution_downstream for aggregated totals
  3. View logisticslist_logistics_requests for GLEC-framework logistics calculations

Logging a new shipment

  1. Find weight unit — Use list_facilities or get_organization_metrics to find the unit_id for kg or tonne
  2. Create transportcreate_transport with route details and at least one section
  3. Verifylist_transports to confirm it appears and check CO₂e calculation status

Logistics

GLEC-framework logistics calculations

Emissions

Aggregated Scope 3 transport emissions

API Reference

REST API endpoints for transport records