Files
modeling-app/openapi/machine-api.json
Paul Tagliamonte 1162ff3b03 Update machine-api for modified api schema (#3572)
update to new machine-api format
2024-08-28 15:15:37 -04:00

440 lines
12 KiB
JSON

{
"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"
}
]
}