Version 1.0

OpenECU Specification & API

YAML-based specifications for ECU adapters and CAN protocols, accessible via public REST API.

Public API Endpoints

Access specs programmatically via REST API. All endpoints return JSON by default, with raw YAML available via *-raw endpoints.

MethodEndpointDescriptionResponse
GET/api/specs/adaptersList all available adapters with summary infoArray of adapter objects (JSON)
GET/api/specs/adapters/:vendor/:idGet full adapter specification with all channelsComplete adapter object (JSON)
GET/api/specs/adapters-raw/:vendor/:idDownload raw YAML adapter fileRaw YAML file
GET/api/specs/protocolsList all available CAN protocols with summary infoArray of protocol objects (JSON)
GET/api/specs/protocols/:vendor/:idGet full CAN protocol specificationComplete protocol object (JSON)
GET/api/specs/protocols-raw/:vendor/:idDownload raw YAML protocol fileRaw YAML file

API Usage Examples

JavaScript / TypeScript

javascript
// Fetch all adapters
const response = await fetch('https://openecualliance.org/api/specs/adapters');
const adapters = await response.json();

// Fetch specific adapter
const adapter = await fetch('https://openecualliance.org/api/specs/adapters/haltech/haltech-nsp');
const haltechSpec = await adapter.json();

// Download raw YAML
const yaml = await fetch('https://openecualliance.org/api/specs/adapters-raw/haltech/haltech-nsp');
const yamlText = await yaml.text();

cURL

bash
# List all adapters
curl https://openecualliance.org/api/specs/adapters

# Get specific adapter (parsed JSON)
curl https://openecualliance.org/api/specs/adapters/haltech/haltech-nsp

# Download raw YAML
curl https://openecualliance.org/api/specs/adapters-raw/haltech/haltech-nsp

Content Types

Adapters

.adapter.yaml

Log file format definitions that map vendor-specific channels to canonical identifiers.

Protocols

.protocol.yaml

CAN Bus message and signal definitions with DBC export support.

Common Structure

All content types share these root-level fields:

FieldDescriptionRequired
openecuallianceSpec version (currently "1.0")
typeContent type: adapter or protocol
idUnique identifier (lowercase, hyphens)
nameHuman-readable display name
versionSemantic version (e.g., 1.0.0)
vendorECU vendor or manufacturer
descriptionDetailed description
websiteURL for more information
brandingLogo, icon, colors
metadataAuthor, license, changelog

Example Adapter

yaml
openecualliance: "1.0"
type: adapter
id: haltech-nsp
name: "Haltech NSP"
version: "1.0.0"
vendor: haltech
description: "Haltech NSP CSV log format"
website: "https://haltech.com"

branding:
  logo: haltech-logo.svg
  color_primary: "#FFBE1A"

file_format:
  type: csv
  delimiter: ","
  header_row: 0
  data_start_row: 1

channels:
  - id: rpm
    name: "Engine RPM"
    category: engine
    data_type: float
    unit: rpm
    source_names:
      - "Engine RPM"
      - "RPM"

Canonical Channel IDs

Standardized identifiers for common ECU channels. Use these in adapters for cross-format compatibility.

rpmEngine RPM
tpsThrottle Position
mapManifold Absolute Pressure
coolant_tempCoolant Temperature
iatIntake Air Temperature
afrAir-Fuel Ratio
lambdaLambda
boostBoost Pressure
battery_voltageBattery Voltage
vehicle_speedVehicle Speed
ignition_advanceIgnition Timing
duty_cycleInjector Duty Cycle

View full list

Units Reference

Temperature

celsiusfahrenheitkelvin

Pressure

kpapsibarmbar

Speed

rpmkphmph

Ratio

afrlambdapercent

Time

secondsmilliseconds

Electrical

voltsamps

Validation

Validate your YAML files against the JSON Schema:

bash
# Using ajv-cli (Node.js)
npx ajv-cli validate -s schema/adapter.schema.json -d your-adapter.yaml

# Using check-jsonschema (Python)
check-jsonschema --schemafile schema/adapter.schema.json your-adapter.yaml