{
  "components": {
    "responses": {
      "Error": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        },
        "description": "Error"
      }
    },
    "schemas": {
      "Error": {
        "description": "Error information from a response.",
        "properties": {
          "error_code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "request_id": {
            "type": "string"
          }
        },
        "required": [
          "message",
          "request_id"
        ],
        "type": "object"
      },
      "ExtraMachineInfoResponse": {
        "description": "Extra machine-specific information regarding a connected machine.",
        "oneOf": [
          {
            "additionalProperties": false,
            "properties": {
              "Moonraker": {
                "type": "object"
              }
            },
            "required": [
              "Moonraker"
            ],
            "type": "object"
          },
          {
            "additionalProperties": false,
            "properties": {
              "Usb": {
                "type": "object"
              }
            },
            "required": [
              "Usb"
            ],
            "type": "object"
          },
          {
            "additionalProperties": false,
            "properties": {
              "Bambu": {
                "type": "object"
              }
            },
            "required": [
              "Bambu"
            ],
            "type": "object"
          }
        ]
      },
      "MachineInfoResponse": {
        "description": "Information regarding a connected machine.",
        "properties": {
          "extra": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ExtraMachineInfoResponse"
              }
            ],
            "description": "Additional, per-machine information which is specific to the underlying machine type.",
            "nullable": true
          },
          "id": {
            "description": "Machine Identifier (ID) for the specific Machine.",
            "type": "string"
          },
          "machine_type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MachineType"
              }
            ],
            "description": "Information regarding the method of manufacture."
          },
          "make_model": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MachineMakeModel"
              }
            ],
            "description": "Information regarding the make and model of the attached Machine."
          },
          "max_part_volume": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Volume"
              }
            ],
            "description": "Maximum part size that can be manufactured by this device. This may be some sort of theoretical upper bound, getting close to this limit seems like maybe a bad idea.\n\nThis may be `None` if the maximum size is not knowable by the Machine API.\n\nWhat \"close\" means is up to you!",
            "nullable": true
          }
        },
        "required": [
          "id",
          "machine_type",
          "make_model"
        ],
        "type": "object"
      },
      "MachineMakeModel": {
        "description": "Information regarding the make/model of a discovered endpoint.",
        "properties": {
          "manufacturer": {
            "description": "The manufacturer that built the connected Machine.",
            "nullable": true,
            "type": "string"
          },
          "model": {
            "description": "The model of the connected Machine.",
            "nullable": true,
            "type": "string"
          },
          "serial": {
            "description": "The unique serial number of the connected Machine.",
            "nullable": true,
            "type": "string"
          }
        },
        "type": "object"
      },
      "MachineType": {
        "description": "Specific technique by which this Machine takes a design, and produces a real-world 3D object.",
        "oneOf": [
          {
            "description": "Use light to cure a resin to build up layers.",
            "enum": [
              "Stereolithography"
            ],
            "type": "string"
          },
          {
            "description": "Fused Deposition Modeling, layers of melted plastic.",
            "enum": [
              "FusedDeposition"
            ],
            "type": "string"
          },
          {
            "description": "\"Computer numerical control\" - machine that grinds away material from a hunk of material to construct a part.",
            "enum": [
              "Cnc"
            ],
            "type": "string"
          }
        ]
      },
      "Pong": {
        "description": "The response from the `/ping` endpoint.",
        "properties": {
          "message": {
            "description": "The pong response.",
            "type": "string"
          }
        },
        "required": [
          "message"
        ],
        "type": "object"
      },
      "PrintJobResponse": {
        "description": "The response from the `/print` endpoint.",
        "properties": {
          "job_id": {
            "description": "The job id used for this print.",
            "type": "string"
          },
          "parameters": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PrintParameters"
              }
            ],
            "description": "The parameters used for this print."
          }
        },
        "required": [
          "job_id",
          "parameters"
        ],
        "type": "object"
      },
      "PrintParameters": {
        "description": "Parameters for printing.",
        "properties": {
          "job_name": {
            "description": "The name for the job.",
            "type": "string"
          },
          "machine_id": {
            "description": "The machine id to print to.",
            "type": "string"
          }
        },
        "required": [
          "job_name",
          "machine_id"
        ],
        "type": "object"
      },
      "Volume": {
        "description": "Set of three values to represent the extent of a 3-D Volume. This contains the width, depth, and height values, generally used to represent some maximum or minimum.\n\nAll measurements are in millimeters.",
        "properties": {
          "depth": {
            "description": "Depth of the volume (\"front to back\"), in millimeters.",
            "format": "double",
            "type": "number"
          },
          "height": {
            "description": "Height of the volume (\"up and down\"), in millimeters.",
            "format": "double",
            "type": "number"
          },
          "width": {
            "description": "Width of the volume (\"left and right\"), in millimeters.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "depth",
          "height",
          "width"
        ],
        "type": "object"
      }
    }
  },
  "info": {
    "contact": {
      "email": "machine-api@zoo.dev",
      "url": "https://zoo.dev"
    },
    "description": "",
    "title": "machine-api",
    "version": "0.1.0"
  },
  "openapi": "3.0.3",
  "paths": {
    "/": {
      "get": {
        "operationId": "api_get_schema",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "successful operation"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        },
        "summary": "Return the OpenAPI schema in JSON format.",
        "tags": [
          "meta"
        ]
      }
    },
    "/machines": {
      "get": {
        "operationId": "get_machines",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/MachineInfoResponse"
                  },
                  "title": "Array_of_MachineInfoResponse",
                  "type": "array"
                }
              }
            },
            "description": "successful operation"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        },
        "summary": "List available machines and their statuses",
        "tags": [
          "machines"
        ]
      }
    },
    "/machines/{id}": {
      "get": {
        "operationId": "get_machine",
        "parameters": [
          {
            "description": "The machine ID.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MachineInfoResponse"
                }
              }
            },
            "description": "successful operation"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        },
        "summary": "Get the status of a specific machine",
        "tags": [
          "machines"
        ]
      }
    },
    "/ping": {
      "get": {
        "operationId": "ping",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Pong"
                }
              }
            },
            "description": "successful operation"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        },
        "summary": "Return pong.",
        "tags": [
          "meta"
        ]
      }
    },
    "/print": {
      "post": {
        "operationId": "print_file",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "format": "binary",
                "type": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrintJobResponse"
                }
              }
            },
            "description": "successful operation"
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "5XX": {
            "$ref": "#/components/responses/Error"
          }
        },
        "summary": "Print a given file. File must be a sliceable 3D model.",
        "tags": [
          "machines"
        ]
      }
    }
  },
  "tags": [
    {
      "description": "Utilities for making parts and discovering machines.",
      "externalDocs": {
        "url": "https://docs.zoo.dev/api/machines"
      },
      "name": "machines"
    },
    {
      "description": "Meta information about the API.",
      "externalDocs": {
        "url": "https://docs.zoo.dev/api/meta"
      },
      "name": "meta"
    }
  ]
}