{
  "openapi": "3.1.1",
  "info": {
    "title": "EuroRing Market API",
    "description": "REST + JSON. Machine access uses an API key sent as `X-EuroRing-Key: <key>` or `Authorization: Bearer <key>`. Scopes: market:read, trade, control. POSTs accept an Idempotency-Key; errors are RFC-7807 ProblemDetails with a `code`.",
    "version": "v1"
  },
  "servers": [
    {
      "url": "http://euroring.twinscrollgridbalancer.co.uk/"
    }
  ],
  "paths": {
    "/api/v1/capacity": {
      "post": {
        "tags": [
          "ControlApi"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CapacityPublishDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CapacityPublishDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CapacityPublishDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/api/v1/schedule": {
      "get": {
        "tags": [
          "ControlApi"
        ],
        "parameters": [
          {
            "name": "deliveryTick",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ScheduleFlowDto"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ScheduleFlowDto"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ScheduleFlowDto"
                  }
                }
              }
            }
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/api/v1/flows": {
      "get": {
        "tags": [
          "ControlApi"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/FlowsDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlowsDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlowsDto"
                }
              }
            }
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/api/v1/metering": {
      "post": {
        "tags": [
          "ControlApi"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MeteringDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MeteringDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MeteringDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/api/v1/events": {
      "post": {
        "tags": [
          "ControlApi"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ControlEventDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ControlEventDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ControlEventDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/api/v1/metering/trueup": {
      "get": {
        "tags": [
          "ControlApi"
        ],
        "parameters": [
          {
            "name": "dayKey",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          {
            "name": "days",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 7
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/api/v1/health": {
      "get": {
        "tags": [
          "ControlApi"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/api/v1/market/snapshot": {
      "get": {
        "tags": [
          "MarketApi"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/MarketFrameDto"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketFrameDto"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketFrameDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/market/prices": {
      "get": {
        "tags": [
          "MarketApi"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/NodePriceDto"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/NodePriceDto"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/NodePriceDto"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/market/trades": {
      "get": {
        "tags": [
          "MarketApi"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TradeDto"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TradeDto"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TradeDto"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/market/orderbook": {
      "get": {
        "tags": [
          "MarketApi"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/market/capacity": {
      "get": {
        "tags": [
          "MarketApi"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LinkFlowDto"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LinkFlowDto"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LinkFlowDto"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/market/history": {
      "get": {
        "tags": [
          "MarketApi"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "size",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/market/history/cursor": {
      "get": {
        "tags": [
          "MarketApi"
        ],
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int64"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/metrics": {
      "get": {
        "tags": [
          "MetricsApi"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": { }
            }
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/api/v1/trade/orders": {
      "post": {
        "tags": [
          "TradingApi"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PlaceOrderDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PlaceOrderDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PlaceOrderDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/api/v1/trade/cancel-all": {
      "post": {
        "tags": [
          "TradingApi"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/api/v1/trade/account": {
      "get": {
        "tags": [
          "TradingApi"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/api/v1/trade/trades": {
      "get": {
        "tags": [
          "TradingApi"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          { }
        ]
      }
    },
    "/api/v1/transparency": {
      "get": {
        "tags": [
          "TransparencyApi"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "BookLevelDto": {
        "required": [
          "side",
          "participant",
          "guarantee",
          "priceEur",
          "mw"
        ],
        "type": "object",
        "properties": {
          "side": {
            "type": "string"
          },
          "participant": {
            "type": "string"
          },
          "guarantee": {
            "type": "string"
          },
          "priceEur": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "mw": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "CapacityLinkDto": {
        "required": [
          "index",
          "firmTradableMw"
        ],
        "type": "object",
        "properties": {
          "index": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "firmTradableMw": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "status": {
            "type": [
              "null",
              "string"
            ]
          },
          "reason": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "CapacityPublishDto": {
        "required": [
          "deliveryTick",
          "links"
        ],
        "type": "object",
        "properties": {
          "deliveryTick": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CapacityLinkDto"
            }
          }
        }
      },
      "ControlEventDto": {
        "required": [
          "seq",
          "tick",
          "kind",
          "severity",
          "link",
          "title",
          "commander",
          "newStatus"
        ],
        "type": "object",
        "properties": {
          "seq": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          },
          "tick": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          },
          "kind": {
            "type": "string"
          },
          "severity": {
            "type": [
              "null",
              "string"
            ]
          },
          "link": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "title": {
            "type": [
              "null",
              "string"
            ]
          },
          "commander": {
            "type": [
              "null",
              "string"
            ]
          },
          "newStatus": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "FlowsDto": {
        "required": [
          "tick",
          "links",
          "prices",
          "metrics"
        ],
        "type": "object",
        "properties": {
          "tick": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LinkFlowDto"
            }
          },
          "prices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NodePriceDto"
            }
          },
          "metrics": {
            "$ref": "#/components/schemas/MetricsDto"
          }
        }
      },
      "LinkFlowDto": {
        "required": [
          "index",
          "firmReservedMw",
          "forecastNominalMw",
          "firmTradableMw",
          "loadingFrac",
          "netFlowMw",
          "flowDir",
          "congested"
        ],
        "type": "object",
        "properties": {
          "index": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "firmReservedMw": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "forecastNominalMw": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "firmTradableMw": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "loadingFrac": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "netFlowMw": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "flowDir": {
            "type": "string"
          },
          "congested": {
            "type": "boolean"
          }
        }
      },
      "MarketFrameDto": {
        "required": [
          "type",
          "tick",
          "clockLabel",
          "playing",
          "fps",
          "nodes",
          "links",
          "recentTrades",
          "bids",
          "asks",
          "lastSettlement",
          "standings",
          "windows",
          "metrics",
          "blackStartPriceEur"
        ],
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "tick": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          },
          "clockLabel": {
            "type": "string"
          },
          "playing": {
            "type": "boolean"
          },
          "fps": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "nodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NodePriceDto"
            }
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LinkFlowDto"
            }
          },
          "recentTrades": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TradeDto"
            }
          },
          "bids": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BookLevelDto"
            }
          },
          "asks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BookLevelDto"
            }
          },
          "lastSettlement": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/SettlementDto"
              }
            ]
          },
          "standings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StandingDto"
            }
          },
          "windows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WindowDto"
            }
          },
          "metrics": {
            "$ref": "#/components/schemas/MetricsDto"
          },
          "blackStartPriceEur": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "MeteredMatchDto": {
        "required": [
          "matchId",
          "expectedMwh",
          "deliveredMwh"
        ],
        "type": "object",
        "properties": {
          "matchId": {
            "type": "string"
          },
          "expectedMwh": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "deliveredMwh": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "MeteringDto": {
        "required": [
          "cycleId",
          "fromTick",
          "toTick",
          "meteredMatches"
        ],
        "type": "object",
        "properties": {
          "cycleId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          },
          "fromTick": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          },
          "toTick": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          },
          "meteredMatches": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MeteredMatchDto"
            }
          }
        }
      },
      "MetricsDto": {
        "required": [
          "totalMatches",
          "congestionEvents",
          "peakFirmLoadingPct",
          "ringLoadingPct",
          "lastTickCongested"
        ],
        "type": "object",
        "properties": {
          "totalMatches": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          },
          "congestionEvents": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          },
          "peakFirmLoadingPct": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "ringLoadingPct": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "lastTickCongested": {
            "type": "boolean"
          }
        }
      },
      "NodePriceDto": {
        "required": [
          "id",
          "priceEur",
          "priceLocal",
          "currency"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "priceEur": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "priceLocal": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "currency": {
            "type": "string"
          }
        }
      },
      "PlaceOrderDto": {
        "required": [
          "side",
          "guarantee",
          "price",
          "mw"
        ],
        "type": "object",
        "properties": {
          "side": {
            "type": "string"
          },
          "guarantee": {
            "type": "string"
          },
          "price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "mw": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "hub": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "ScheduleFlowDto": {
        "required": [
          "matchId",
          "seller",
          "buyer",
          "guarantee",
          "mw",
          "priceEur",
          "path",
          "direction"
        ],
        "type": "object",
        "properties": {
          "matchId": {
            "type": "string"
          },
          "seller": {
            "type": "string"
          },
          "buyer": {
            "type": "string"
          },
          "guarantee": {
            "type": "string"
          },
          "mw": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "priceEur": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "path": {
            "type": "array",
            "items": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          "direction": {
            "type": "string"
          }
        }
      },
      "SettlementDto": {
        "required": [
          "cycleId",
          "totalDeliveredMwh",
          "totalEnergyValueEur",
          "marketFeesEur",
          "transitFeesEur",
          "euroRingTakeEur",
          "tradeCount",
          "shortfallCount"
        ],
        "type": "object",
        "properties": {
          "cycleId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          },
          "totalDeliveredMwh": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "totalEnergyValueEur": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "marketFeesEur": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "transitFeesEur": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "euroRingTakeEur": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "tradeCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "shortfallCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "StandingDto": {
        "required": [
          "nation",
          "level",
          "canPlaceGuaranteedSell",
          "canTrade",
          "sanctionCount"
        ],
        "type": "object",
        "properties": {
          "nation": {
            "type": "string"
          },
          "level": {
            "type": "string"
          },
          "canPlaceGuaranteedSell": {
            "type": "boolean"
          },
          "canTrade": {
            "type": "boolean"
          },
          "sanctionCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "TradeDto": {
        "required": [
          "tick",
          "seller",
          "buyer",
          "guarantee",
          "priceEur",
          "mw",
          "path",
          "human"
        ],
        "type": "object",
        "properties": {
          "tick": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          },
          "seller": {
            "type": "string"
          },
          "buyer": {
            "type": "string"
          },
          "guarantee": {
            "type": "string"
          },
          "priceEur": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "mw": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "path": {
            "type": "array",
            "items": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          "human": {
            "type": "boolean"
          }
        }
      },
      "WindowDto": {
        "required": [
          "deliveryTick",
          "deliveryLabel",
          "state",
          "matchCount",
          "clearedMw",
          "restingOrders"
        ],
        "type": "object",
        "properties": {
          "deliveryTick": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          },
          "deliveryLabel": {
            "type": "string"
          },
          "state": {
            "type": "string"
          },
          "matchCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "clearedMw": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "restingOrders": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      }
    },
    "securitySchemes": {
      "EuroRingApiKey": {
        "type": "apiKey",
        "description": "A EuroRing API key (also accepted as `Authorization: Bearer <key>`).",
        "name": "X-EuroRing-Key",
        "in": "header"
      }
    }
  },
  "tags": [
    {
      "name": "ControlApi"
    },
    {
      "name": "MarketApi"
    },
    {
      "name": "MetricsApi"
    },
    {
      "name": "TradingApi"
    },
    {
      "name": "TransparencyApi"
    }
  ]
}