Skip to main content
An anomaly time series record represents a discrepancy detected by the TSO between your submitted schedule values and the counterparty’s values. The TSO sends these as ANO (anomaly report) documents after the schedule matching process. Each anomaly record includes per-interval deltas and reason codes explaining the mismatch.

Business types

The business_type field uses ESS business type codes to classify the series:
CodeLabelDescription
A01productionOwn generation injected into the grid
A02internalTrade within the same TSO control area
A03externalCross-border trade between two TSO areas
A04consumptionOwn load withdrawn from the grid
A06externalAlternative code for cross-border trade (used interchangeably with A03 in ANO documents)
A28counterpartSeries received from counterparty with no matching series in your submission
A85systemSystem-level balancing series

Reason codes

The reason_codes array contains TSO-specific codes explaining why the anomaly was raised. Common codes include:
CodeMeaning
A09Counterpart schedule missing — no matching series from the other party
B45Values adjusted for DST transition
A54Values do not match counterparty submission

Reconciliation

Use the Reconciliation endpoint to get a side-by-side comparison of your values versus the counterparty’s values, including per-interval deltas and exchange priority flags.

A single ANO (anomaly) time series record received from the TSO, indicating discrepancies between submitted and expected values.

business_type
string
required

ESS business type code: A01 (production), A02 (internal), A03/A06 (external), A04 (consumption), A85 (system).

Examples:

"A01"

"A02"

"A03"

business_type_label
string
required

Human-readable label for the business type.

Examples:

"production"

"internal"

"external"

"consumption"

created_ts
string
required

ISO 8601 datetime when this anomaly record was received.

Example:

"2026-03-26T08:00:00+00:00"

in_area
string
required

EIC Y code of the receiving control area.

Example:

"10YDE-VE-------2"

in_party
string
required

EIC X code of the receiving party.

Example:

"11XDE-EXAMPLE--A"

incoming_message_uid
string
required

Identifier of the incoming ANO message that contained this record.

intervals
Intervals · object[]
required

Interval-level anomaly data. Each entry contains pos (1-based position) and qty (MW delta).

Example:
[
{ "pos": 1, "qty": 0.1 },
{ "pos": 2, "qty": -0.05 }
]
message_sender_id
string
required

EIC X code of the entity that sent the anomaly message (typically the TSO).

Example:

"10XDE-VE-TRANSMK"

out_area
string
required

EIC Y code of the sending control area.

Example:

"10YDE-VE-------2"

out_party
string
required

EIC X code of the sending party.

Example:

"11XDE-EXAMPLE--B"

reason_codes
Reason Codes · object[]
required

Reason codes explaining the anomaly.

Example:
[
{
"code": "A09",
"text": "Counterpart schedule missing"
}
]
series_id
string
required

Time series identifier within the ANO document.

Example:

"TS-ANO-001"

uid
string
required

Unique identifier for this anomaly record.

Example:

"b4c5d6e7-f8a9-4b0c-8d1e-2f3a4b5c6d7e"

schedule_series_uid
string | null

Matched Schedule Series identifier, if the anomaly could be correlated to a submitted series.