{
  "swagger": "2.0",
  "info": {
    "description": "This is the ONAP Optimization Engine (Generic Solver) API",
    "version": "1.0.0",
    "title": "ONAP Optimization ENGINE API",
    "contact": {
      "email": "vikas.varma@att.com"
    },
    "license": {
      "name": "Apache 2.0",
      "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
    }
  },
  "securityDefinitions": {
    "basicAuth": {
      "type": "basic",
      "description": "HTTP Basic Auth"
    }
  },
  "security": [
    {
      "basicAuth": []
    }
  ],
  "paths": {
    "/optengine/v1": {
      "post": {
        "tags": [
          "Generic Solver Optimization"
        ],
        "summary": "Call the Generic Optimization engine",
        "operationId": "optimizationRequest",
        "description": "call optimization engine",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "optimizationRequest",
            "description": "optimization request",
            "schema": {
              "$ref": "#/definitions/OptimizationRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OptimizationResponse"
            }
          },
          "202": {
            "description": "An optimization request is accepted"
          },
          "400": {
            "description": "bad request"
          },
          "401": {
            "description": "Request body is not compliant with the API definition"
          },
          "404": {
            "description": "The server cannot find the requested URI"
          },
          "405": {
            "description": "The requested method is not supported by a server."
          },
          "500": {
            "description": "The server encountered an internal server error or timed out"
          }
        }
      }
    },
    "/optmodel/v1": {
      "post": {
        "tags": [
          "Request to add the Optimizer model, metadata"
        ],
        "summary": "Add/Insert the optimization models in the database",
        "operationId": "optimModelRequestAPI",
        "description": "Request to add update the Optimizer model, metadata",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "optimModelRequest",
            "description": "optimization model request",
            "schema": {
              "$ref": "#/definitions/OptimModelRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OptimModelResponse"
            }
          },
          "400": {
            "description": "bad request"
          },
          "401": {
            "description": "Request body is not compliant with the API definition"
          },
          "404": {
            "description": "The server cannot find the requested URI"
          },
          "405": {
            "description": "The requested method is not supported by a server."
          },
          "500": {
            "description": "The server encountered an internal server error or timed out"
          }
        }
      },
      "put": {
        "tags": [
          "Request to update the Optimizer model, metadata"
        ],
        "summary": "Add/update the optimization models in the database",
        "operationId": "updateModelRequestAPI",
        "description": "Request to add update the Optimizer model, metadata",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "optimModelRequest",
            "description": "optimization model request",
            "schema": {
              "$ref": "#/definitions/OptimModelRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OptimModelResponse"
            }
          },
          "400": {
            "description": "bad request"
          },
          "401": {
            "description": "Request body is not compliant with the API definition"
          },
          "404": {
            "description": "The server cannot find the requested URI"
          },
          "405": {
            "description": "The requested method is not supported by a server."
          },
          "500": {
            "description": "The server encountered an internal server error or timed out"
          }
        }
      },
      "get": {
        "tags": [
          "Retrieve all models"
        ],
        "summary": "Gets all Optim Model data",
        "description": "Retrieves all Optim Models",
        "operationId": "getAllOptModelData",
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/ArrayOfOptimModelResponse"
            }
          },
          "400": {
            "description": "bad request"
          },
          "401": {
            "description": "Request body is not compliant with the API definition"
          },
          "404": {
            "description": "The server cannot find the requested URI"
          },
          "405": {
            "description": "The requested method is not supported by a server."
          },
          "500": {
            "description": "The server encountered an internal server error or timed out"
          }
        }
      }
    },
    "/optmodel/v1/{model_id}": {
      "get": {
        "tags": [
          "Retrieve Model Data"
        ],
        "summary": "Gets the Optim Model data",
        "description": "Retrieves the Optim Model data given modelId",
        "operationId": "getOptModelById",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "description": "Model ID",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/OptimModelResponse"
            }
          },
          "400": {
            "description": "bad request"
          },
          "401": {
            "description": "Request body is not compliant with the API definition"
          },
          "404": {
            "description": "The server cannot find the requested URI"
          },
          "405": {
            "description": "The requested method is not supported by a server."
          },
          "500": {
            "description": "The server encountered an internal server error or timed out"
          }
        }
      },
      "delete": {
        "tags": [
          "Delete Model Data"
        ],
        "summary": "Delete the Optim Model data",
        "description": "Deletes the Optim Model data given modelId",
        "operationId": "deleteOptModelById",
        "parameters": [
          {
            "in": "path",
            "name": "model_id",
            "description": "Model ID",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/DeleteModelResponse"
            }
          },
          "400": {
            "description": "bad request"
          },
          "401": {
            "description": "Request body is not compliant with the API definition"
          },
          "404": {
            "description": "The server cannot find the requested URI"
          },
          "405": {
            "description": "The requested method is not supported by a server."
          },
          "500": {
            "description": "The server encountered an internal server error or timed out"
          }
        }
      }
    }
  },
  "definitions": {
    "OptimizationResponse": {
      "type": "object",
      "required": [
        "transactionId",
        "requestID",
        "requestStatus"
      ],
      "properties": {
        "transactionId": {
          "type": "string",
          "format": "uuid",
          "description": "unique ID to track an ONAP transaction",
          "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
        },
        "requestID": {
          "type": "string",
          "format": "uuid",
          "description": "A unique ID to track multiple requests associated with a transaction",
          "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
        },
        "requestStatus": {
          "type": "string",
          "description": "request status (accepted, done, completed,failed)",
          "example": "done"
        },
        "statusMessage": {
          "type": "string",
          "description": "Status message (incomplete, complete, unsatisfiable, unknown, unbounded, unsat_or_unbounded, error)",
          "example": "complete"
        },
        "solutions": {
          "additionalProperties": {
            "type": "object"
          },
          "example": {
            "SCHEDULED": [
              [
                0,
                1
              ],
              [
                0,
                1
              ]
            ],
            "OPTIMIZED": 2
          }
        }
      }
    },
    "OptimizationRequest": {
      "type": "object",
      "required": [
        "requestInfo",
        "optimInfo"
      ],
      "properties": {
        "requestInfo": {
          "$ref": "#/definitions/RequestInfo"
        },
        "optimInfo": {
          "$ref": "#/definitions/OptimInfo"
        }
      }
    },
    "RequestInfo": {
      "type": "object",
      "required": [
        "transactionId",
        "requestID",
        "sourceId"
      ],
      "properties": {
        "transactionId": {
          "type": "string",
          "format": "uuid",
          "description": "unique ID to track an ONAP transaction",
          "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
        },
        "requestID": {
          "type": "string",
          "format": "uuid",
          "description": "A unique ID to track multiple requests associated with a transaction",
          "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
        },
        "callbackUrl": {
          "type": "string",
          "format": "url",
          "description": "The end point of a callback service where recommendations are posted.",
          "example": "myDomain.com/myCallback"
        },
        "sourceId": {
          "type": "string",
          "description": "The unique ID of a client making an optimization call.",
          "example": "son-handler"
        },
        "timeout": {
          "type": "integer",
          "description": "A tolerance window (in second) for expecting solutions",
          "example": 5
        }
      }
    },
    "OptimInfo": {
      "type": "object",
      "properties": {
        "modelId": {
          "type": "string",
          "description": "ModelId from the database, if its not populated,  assume that solverModel will be populated",
          "example": "pci_model1"
        },
        "solver": {
          "type": "string",
          "description": "type of solver (mzn, py, etc.)",
          "example": "mzn"
        },
        "solverArgs": {
          "type": "object",
          "description": "Arguments for solver",
          "additionalProperties": {
            "type": "object"
          },
          "example": {
            "solver": "cbc",
            "timeout": 5
          }
        },
        "modelContent": {
          "type": "string",
          "description": "a large blob string containing the model (which is not that problematic since models are fairly small)."
        },
        "optData": {
          "$ref": "#/definitions/DataInfo"
        }
      }
    },
    "DataInfo": {
      "type": "object",
      "description": "Data Payload, input data for the solver, either text or json",
      "properties": {
        "text": {
          "type": "string",
          "description": "Solver data as a string",
          "example": "flour = 8000; \r\nbanana = 11;\r\n "
        },
        "json": {
          "type": "object",
          "description": "Solver data as a json",
          "additionalProperties": {
            "type": "object"
          },
          "example": {
            "flour": 8000,
            "banana": 11
          }
        }
      }
    },
    "OptimModelRequest": {
      "type": "object",
      "required": [
        "requestInfo",
        "modelInfo"
      ],
      "properties": {
        "requestInfo": {
          "$ref": "#/definitions/ModelRequestInfo"
        },
        "modelInfo": {
          "$ref": "#/definitions/OptimModelInfo"
        }
      }
    },
    "ModelRequestInfo": {
      "type": "object",
      "required": [
        "transactionId",
        "requestID",
        "sourceId"
      ],
      "properties": {
        "transactionId": {
          "type": "string",
          "format": "uuid",
          "description": "unique ID to track an ONAP transaction",
          "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
        },
        "requestID": {
          "type": "string",
          "format": "uuid",
          "description": "A unique ID to track multiple requests associated with a transaction",
          "example": "d290f1ee-6c54-4b01-90e6-d701748f0851"
        },
        "sourceId": {
          "type": "string",
          "description": "The unique ID of a client making an optimization call.",
          "example": "optf-osdf"
        }
      }
    },
    "OptimModelInfo": {
      "type": "object",
      "required": [
        "modelId",
        "solver",
        "description",
        "modelContent"
      ],
      "properties": {
        "modelId": {
          "type": "string",
          "description": "ModelId from the database",
          "example": "pci_anr_model1"
        },
        "solver": {
          "type": "string",
          "description": "type of solver (mzn, py, etc.)",
          "example": "mzn"
        },
        "description": {
          "type": "string",
          "description": "Description of the model",
          "example": "mzn model to optimize pci/anr models"
        },
        "modelContent": {
          "type": "string",
          "description": "a large blob string containing the model (which is not that problematic since models are fairly small).",
          "example": "mzn content"
        }
      }
    },
    "ArrayOfOptimModelResponse": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/OptimModelResponse"
      }
    },
    "OptimModelResponse": {
      "type": "object",
      "required": [
        "modelId",
        "solver",
        "modelContent"
      ],
      "properties": {
        "modelId": {
          "type": "string",
          "description": "ModelId from the database",
          "example": "pci_anr_model1"
        },
        "solver": {
          "type": "string",
          "description": "type of solver (mzn, py, etc.)",
          "example": "mzn"
        },
        "description": {
          "type": "string",
          "description": "Description of the model",
          "example": "mzn model to optimize pci/anr models"
        },
        "modelContent": {
          "type": "string",
          "description": "a large blob string containing the model (which is not that problematic since models are fairly small).",
          "example": "mzn content"
        },
        "statusMessage": {
          "type": "string",
          "description": "status message.",
          "example": "mzn content"
        }
      }
    },
    "DeleteModelResponse": {
      "type": "object",
      "required": [
        "statusMessage"
      ],
      "properties": {
        "statusMessage": {
          "type": "string",
          "description": "status message.",
          "example": "model data for modelId pci_anr_model1 deleted"
        }
      }
    }
  },
  "schemes": [
    "https"
  ],
  "host": "virtserver.swaggerhub.com",
  "basePath": "/api/oof/"
}
