TCPP 1.3.0
Specification 1.3.0 · open Draft

TCPP

Trusted Charge & Process Protocol

An open protocol that records charging, metering and energy processes as signed JSON records, so that what a charge point, a meter or a backend states about a process can be verified later by anyone holding the record, without trusting the system it came from.

Open
Schemas, examples and documentation are free to use and to build on.
JSON Schema
Draft 2020-12, 27 request/response pairs, one shared envelope.
ES384
Every record travels as a compact JWS over ECDSA P-384.
Auditable
Records reference the records they answer, so a process reconstructs.

What TCPP is

TCPP describes how devices and services in the energy sector talk about a process: a charging session, a meter's own configuration, a tariff enquiry, a status change, an archived document. Each message is a JSON object with the same envelope (who sent it, to whom, about which process, at which moment, with which outcome) and a record body defined by the endpoint's schema.

Messages are signed. A TCPP frame is a compact JWS over the exact bytes of the JSON, so a record can be handed on, stored and re-checked years later against the public key of the party that issued it. Records carry references to the records they answer, which is what turns a pile of individual messages back into a traceable process.

The specification is a draft. Version 1.3.0 is complete enough to implement against, with the schema set, worked examples and a working reference node published here, and is being developed further within the “Reform Ladeinfrastruktur Germany & EU” working group in consultation with the federal authorities.

Who it is for

European manufacturers, software developers, operators and users of:

What it is meant to achieve

TCPP applies ordinary, current computing practice (JSON Schema, JWS signatures, HTTP) to problems the energy sector has so far solved proprietarily, if at all:

TCPP is an open protocol and intended as a future standard. Schemas, sample data and documentation are available at no cost, base libraries and a reference implementation come with them, and companies taking part can help shape where the specification goes next.

What a message looks like

The smallest endpoint in the set, ping, shows the envelope every other endpoint shares. Only the record object changes from endpoint to endpoint.

ping_request · example ping_request.json
{
  "tcpp": "https://tcpp.digital/schema/1.3.0/",
  "head": {
    "record_type": "ping",
    "record_direction": "request",
    "record_udt": "2018-07-27T14:30:07+01:00",
    "record_pagination": 45330,
    "record_version": "1.3.0",
    "origin_type": "CSU",          // a charge switch unit …
    "origin_id": "E:DE*PID*E*IWS*00100017",
    "target_type": "TMH",          // … asking a trusted management host
    "target_id": "P:ECS-HOST",
    "context_type": "INF",
    "context_id": "G:90676293-fa28-49bd-81ba-1b58a0f62abd",
    "error_code": "000000"
  },
  "record": { "ping": "Check alive" },
  "participants": [],
  "references": []
}

The schema documentation walks through the envelope field by field, the three-letter module types, the identifier prefixes and the error code scheme.

Getting started

Run it

Reference node

One binary, no dependencies. It serves a schema-driven web application for composing and validating TCPP messages, signs them and exchanges them with other nodes over TLS. Published for Windows x86-64; other platforms on request.

Downloads
Read it

Operator manual

Every screen and workflow of the node, with figures taken from a running two-node lab, plus the command line, the files it writes and its HTTP interface.

English · Deutsch
Implement it

Schema 1.3.0

All 55 schema files, browsable here and downloadable as one archive. Each file is served at the URL its $id names, so references resolve as they stand.

Schema documentation