{
  "openapi": "3.0.4",
  "info": {
    "title": "TCC",
    "description": "Transport Carbon Calculator",
    "version": "1.0.2"
  },
  "servers": [
    {
      "url": "https://siemens.supplychainsuitedev.net/publicapi/master/demo/tcc/1"
    }
  ],
  "paths": {
    "/calculate": {
      "post": {
        "summary": "Calculates the web service 'TCC'.",
        "operationId": "calculate",
        "requestBody": {
          "description": "The web service input.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/input"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Returns the web service calculation result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/result"
                }
              }
            }
          },
          "404": {
            "description": "Not found."
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/errorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/data/upload": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PutDataRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PutDataResponse"
                }
              }
            }
          }
        }
      }
    },
    "/calculate/jobScheduler": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SchedulerRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SchedulerResponse"
                }
              }
            }
          }
        }
      }
    },
    "/calculate/result": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResultRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResultResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "input": {
        "required": [
          "legs",
          "parameters",
          "locations"
        ],
        "type": "object",
        "properties": {
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Input_legs"
            }
          },
          "parameters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Input_parameters"
            }
          },
          "locations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Input_locations"
            }
          }
        }
      },
      "result": {
        "required": [
          "resultMessages",
          "resultLegs",
          "resultLocations"
        ],
        "type": "object",
        "properties": {
          "resultMessages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Result_resultMessages"
            }
          },
          "resultLegs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Result_resultLegs"
            }
          },
          "resultLocations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Result_resultLocations"
            }
          }
        }
      },
      "errorResponse": {
        "required": [
          "message"
        ],
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          },
          "type": {
            "enum": [
              "CalculationError",
              "TypeMismatch",
              "MissingData",
              "MissingJobResultData",
              "RequestTrackingError",
              "Forbidden",
              "ChargingError"
            ],
            "type": "string"
          },
          "path": {
            "type": "string"
          }
        }
      },
      "Input_legs": {
        "required": [
          "shipmentId",
          "legId",
          "senderLocationId",
          "recipientLocationId",
          "transportMode",
          "shipmentDate",
          "distanceKm",
          "weightKg",
          "volumeCbm",
          "loadingMeterM",
          "equipment",
          "fuelType",
          "fuelConsumption",
          "fuelConsumptionUnit"
        ],
        "type": "object",
        "properties": {
          "shipmentId": {
            "type": "string",
            "nullable": true
          },
          "legId": {
            "type": "string",
            "nullable": true
          },
          "senderLocationId": {
            "type": "string",
            "nullable": true
          },
          "recipientLocationId": {
            "type": "string",
            "nullable": true
          },
          "transportMode": {
            "type": "string",
            "nullable": true
          },
          "shipmentDate": {
            "type": "string",
            "description": "Should ideally include a time zone.",
            "format": "date-time",
            "nullable": true,
            "example": "2007-12-24T18:21:45Z"
          },
          "distanceKm": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "weightKg": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "volumeCbm": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "loadingMeterM": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "equipment": {
            "type": "string",
            "nullable": true
          },
          "fuelType": {
            "type": "string",
            "nullable": true
          },
          "fuelConsumption": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "fuelConsumptionUnit": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "Input_parameters": {
        "required": [
          "key",
          "value"
        ],
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "nullable": true
          },
          "value": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "Input_locations": {
        "required": [
          "id",
          "country",
          "postalCode",
          "city",
          "street",
          "houseNumber",
          "latitude",
          "longitude"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "type": "string",
            "nullable": true
          },
          "postalCode": {
            "type": "string",
            "nullable": true
          },
          "city": {
            "type": "string",
            "nullable": true
          },
          "street": {
            "type": "string",
            "nullable": true
          },
          "houseNumber": {
            "type": "string",
            "nullable": true
          },
          "latitude": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "longitude": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        }
      },
      "Result_resultMessages": {
        "required": [
          "table",
          "causer",
          "message",
          "severity",
          "code"
        ],
        "type": "object",
        "properties": {
          "table": {
            "type": "string",
            "nullable": true
          },
          "causer": {
            "type": "string",
            "nullable": true
          },
          "message": {
            "type": "string",
            "nullable": true
          },
          "severity": {
            "type": "string",
            "nullable": true
          },
          "code": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "Result_resultLegs": {
        "required": [
          "shipmentId",
          "legId",
          "co2eKg",
          "wttCo2eKg",
          "ttwCo2eKg",
          "errorSeverity"
        ],
        "type": "object",
        "properties": {
          "shipmentId": {
            "type": "string",
            "nullable": true
          },
          "legId": {
            "type": "string",
            "nullable": true
          },
          "co2eKg": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "wttCo2eKg": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "ttwCo2eKg": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "errorSeverity": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "Result_resultLocations": {
        "required": [
          "id",
          "latitude",
          "longitude",
          "errorSeverity"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "latitude": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "longitude": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "errorSeverity": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "SchedulerRequest": {
        "type": "object",
        "properties": {
          "From": {
            "type": "string",
            "description": "Date in ISO 8601 (yyyy-mm-ddThh:mm:ss±hh)",
            "format": "date-time",
            "example": "2020-12-31T22:59:59+00:00"
          },
          "To": {
            "type": "string",
            "description": "Date in ISO 8601 (yyyy-mm-ddThh:mm:ss±hh)",
            "format": "date-time",
            "example": "2020-12-31T22:59:59+00:00"
          },
          "Tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "SchedulerResponse": {
        "type": "object",
        "properties": {
          "JobId": {
            "type": "string"
          },
          "Count": {
            "type": "integer",
            "format": "int64"
          },
          "Items": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "PutDataRequest": {
        "type": "object",
        "properties": {
          "Tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "Data": {
            "$ref": "#/components/schemas/input"
          }
        }
      },
      "PutDataResponse": {
        "type": "object",
        "properties": {
          "Tables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PutDataResultTable"
            }
          }
        }
      },
      "PutDataResultTable": {
        "type": "object",
        "properties": {
          "TableName": {
            "type": "string"
          },
          "Rows": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "ResultRequest": {
        "type": "object",
        "properties": {
          "JobId": {
            "type": "string"
          },
          "Page": {
            "type": "integer",
            "format": "int64"
          },
          "Rows": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "ResultResponse": {
        "type": "object",
        "properties": {
          "State": {
            "type": "string"
          },
          "ResultData": {
            "$ref": "#/components/schemas/result"
          },
          "Pages": {
            "type": "integer",
            "format": "int64"
          },
          "Error": {
            "type": "string"
          }
        }
      }
    },
    "securitySchemes": {
      "Api-Key": {
        "type": "apiKey",
        "name": "x-api-key",
        "in": "header"
      }
    }
  },
  "security": [
    {
      "Api-Key": []
    }
  ]
}