api.dev.zoo.dev
Open in
urlscan Pro
2606:4700::6812:82c
Public Scan
URL:
https://api.dev.zoo.dev/
Submission: On December 14 via api from US — Scanned from US
Submission: On December 14 via api from US — Scanned from US
Form analysis
0 forms found in the DOMText Content
{"components":{"responses":{"Error":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error"}},"schemas":{"AccountProvider":{"description":"An account provider.","oneOf":[{"description":"The Discord account provider.","enum":["discord"],"type":"string"},{"description":"The Google account provider.","enum":["google"],"type":"string"},{"description":"The GitHub account provider.","enum":["github"],"type":"string"}]},"AiFeedback":{"description":"Human feedback on an AI response.","oneOf":[{"description":"Thumbs up.","enum":["thumbs_up"],"type":"string"},{"description":"Thumbs down.","enum":["thumbs_down"],"type":"string"}]},"AiPluginApi":{"description":"AI plugin api information.","properties":{"is_user_authenticated":{"default":false,"description":"If the API is authenticated.","type":"boolean"},"type":{"allOf":[{"$ref":"#/components/schemas/AiPluginApiType"}],"default":"openapi","description":"The type of API."},"url":{"description":"The url to the API's schema.","format":"uri","type":"string"}},"required":["url"],"type":"object"},"AiPluginApiType":{"description":"AI plugin api type.","oneOf":[{"description":"An OpenAPI specification.","enum":["openapi"],"type":"string"}]},"AiPluginAuth":{"description":"AI plugin auth information.","properties":{"authorization_type":{"allOf":[{"$ref":"#/components/schemas/AiPluginHttpAuthType"}],"description":"The type of http authorization.","nullable":true},"type":{"allOf":[{"$ref":"#/components/schemas/AiPluginAuthType"}],"default":"none","description":"The type of authentication."}},"type":"object"},"AiPluginAuthType":{"description":"AI plugin auth type.","oneOf":[{"description":"None.","enum":["none"],"type":"string"},{"description":"User http.","enum":["user_http"],"type":"string"},{"description":"Service http.","enum":["service_http"],"type":"string"},{"description":"OAuth.","enum":["oauth"],"type":"string"}]},"AiPluginHttpAuthType":{"description":"AI plugin http auth type.","oneOf":[{"description":"Basic.","enum":["basic"],"type":"string"},{"description":"Bearer.","enum":["bearer"],"type":"string"}]},"AiPluginManifest":{"description":"AI plugin manifest.\n\nThis is used for OpenAI's ChatGPT plugins. You can read more about them [here](https://platform.openai.com/docs/plugins/getting-started/plugin-manifest).","properties":{"api":{"allOf":[{"$ref":"#/components/schemas/AiPluginApi"}],"description":"API specification."},"auth":{"allOf":[{"$ref":"#/components/schemas/AiPluginAuth"}],"description":"Authentication schema."},"contact_email":{"description":"Email contact for safety/moderation reachout, support, and deactivation.","format":"email","type":"string"},"description_for_human":{"description":"Human-readable description of the plugin.","type":"string"},"description_for_model":{"description":"Description better tailored to the model, such as token context length considerations or keyword usage for improved plugin prompting.","type":"string"},"legal_info_url":{"description":"Redirect URL for users to view plugin information.","format":"uri","type":"string"},"logo_url":{"description":"URL used to fetch the plugin's logo.","format":"uri","type":"string"},"name_for_human":{"description":"Human-readable name, such as the full company name.","type":"string"},"name_for_model":{"description":"Name the model will used to target the plugin.","type":"string"},"schema_version":{"description":"Manifest schema version.","type":"string"}},"required":["api","auth","legal_info_url","logo_url"],"type":"object"},"AiPrompt":{"description":"An AI prompt.","properties":{"completed_at":{"description":"When the prompt was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The date and time the AI prompt was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error message if the prompt failed.","nullable":true,"type":"string"},"feedback":{"allOf":[{"$ref":"#/components/schemas/AiFeedback"}],"description":"Feedback from the user, if any.","nullable":true},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the AI Prompt."},"metadata":{"description":"The metadata for the prompt.","nullable":true},"model_version":{"description":"The version of the model.","type":"string"},"output_file":{"description":"The output file. In the case of TextToCad this is a link to a file in a GCP bucket.","nullable":true,"type":"string"},"prompt":{"description":"The prompt.","type":"string"},"started_at":{"description":"When the prompt was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the prompt."},"type":{"allOf":[{"$ref":"#/components/schemas/AiPromptType"}],"description":"The type of prompt."},"updated_at":{"description":"The date and time the AI prompt was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the AI Prompt."}},"required":["created_at","id","model_version","prompt","status","type","updated_at","user_id"],"type":"object"},"AiPromptResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/AiPrompt"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"AiPromptType":{"description":"A type of AI prompt.","oneOf":[{"description":"Text to CAD.","enum":["text_to_cad"],"type":"string"}]},"Angle":{"description":"An angle, with a specific unit.","properties":{"unit":{"allOf":[{"$ref":"#/components/schemas/UnitAngle"}],"description":"What unit is the measurement?"},"value":{"description":"The size of the angle, measured in the chosen unit.","format":"double","type":"number"}},"required":["unit","value"],"type":"object"},"AnnotationLineEnd":{"description":"Annotation line end type","enum":["none","arrow"],"type":"string"},"AnnotationLineEndOptions":{"description":"Options for annotation text","properties":{"end":{"allOf":[{"$ref":"#/components/schemas/AnnotationLineEnd"}],"description":"How to style the end of the annotation line."},"start":{"allOf":[{"$ref":"#/components/schemas/AnnotationLineEnd"}],"description":"How to style the start of the annotation line."}},"required":["end","start"],"type":"object"},"AnnotationOptions":{"description":"Options for annotations","properties":{"color":{"allOf":[{"$ref":"#/components/schemas/Color"}],"description":"Color to render the annotation","nullable":true},"line_ends":{"allOf":[{"$ref":"#/components/schemas/AnnotationLineEndOptions"}],"description":"How to style the start and end of the line","nullable":true},"line_width":{"description":"Width of the annotation's line","format":"float","nullable":true,"type":"number"},"position":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Position to put the annotation","nullable":true},"text":{"allOf":[{"$ref":"#/components/schemas/AnnotationTextOptions"}],"description":"Text displayed on the annotation","nullable":true}},"type":"object"},"AnnotationTextAlignmentX":{"description":"Horizontal Text alignment","enum":["left","center","right"],"type":"string"},"AnnotationTextAlignmentY":{"description":"Vertical Text alignment","enum":["bottom","center","top"],"type":"string"},"AnnotationTextOptions":{"description":"Options for annotation text","properties":{"point_size":{"description":"Text font's point size","format":"uint32","minimum":0,"type":"integer"},"text":{"description":"Text displayed on the annotation","type":"string"},"x":{"allOf":[{"$ref":"#/components/schemas/AnnotationTextAlignmentX"}],"description":"Alignment along the X axis"},"y":{"allOf":[{"$ref":"#/components/schemas/AnnotationTextAlignmentY"}],"description":"Alignment along the Y axis"}},"required":["point_size","text","x","y"],"type":"object"},"AnnotationType":{"description":"The type of annotation","oneOf":[{"description":"2D annotation type (screen or planar space)","enum":["t2d"],"type":"string"},{"description":"3D annotation type","enum":["t3d"],"type":"string"}]},"ApiCallQueryGroup":{"description":"A response for a query on the API call table that is grouped by something.","properties":{"count":{"format":"int64","type":"integer"},"query":{"type":"string"}},"required":["count","query"],"type":"object"},"ApiCallQueryGroupBy":{"description":"The field of an API call to group by.","oneOf":[{"description":"The email of the user that requested the API call.","enum":["email"],"type":"string"},{"description":"The HTTP method of the API call.","enum":["method"],"type":"string"},{"description":"The endpoint of the API call.","enum":["endpoint"],"type":"string"},{"description":"The user ID of the user that requested the API call.","enum":["user_id"],"type":"string"},{"description":"The origin of the API call. This is parsed from the `Origin` header.","enum":["origin"],"type":"string"},{"description":"The IP address of the user making the API call.","enum":["ip_address"],"type":"string"}]},"ApiCallStatus":{"description":"The status of an async API call.","oneOf":[{"description":"The async API call is queued.","enum":["queued"],"type":"string"},{"description":"The async API call was uploaded to be converted.","enum":["uploaded"],"type":"string"},{"description":"The async API call is in progress.","enum":["in_progress"],"type":"string"},{"description":"The async API call has completed.","enum":["completed"],"type":"string"},{"description":"The async API call has failed.","enum":["failed"],"type":"string"}]},"ApiCallWithPrice":{"description":"An API call with the price.\n\nThis is a join of the `ApiCall` and `ApiCallPrice` tables.","properties":{"completed_at":{"description":"The date and time the API call completed billing.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The date and time the API call was created.","format":"date-time","title":"DateTime","type":"string"},"duration":{"description":"The duration of the API call.","format":"duration","nullable":true,"title":"int64","type":"integer"},"email":{"description":"The user's email address.","format":"email","type":"string"},"endpoint":{"description":"The endpoint requested by the API call.","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the API call."},"ip_address":{"default":"","description":"The ip address of the origin.","format":"ip","title":"String","type":"string"},"litterbox":{"description":"If the API call was spawned from the litterbox or not.","nullable":true,"type":"boolean"},"method":{"allOf":[{"$ref":"#/components/schemas/Method"}],"description":"The HTTP method requested by the API call."},"minutes":{"description":"The number of minutes the API call was billed for.","format":"int32","nullable":true,"type":"integer"},"origin":{"description":"The origin of the API call.","type":"string"},"price":{"description":"The price of the API call.","format":"money-usd","nullable":true,"title":"double","type":"number"},"request_body":{"description":"The request body sent by the API call.","nullable":true,"type":"string"},"request_query_params":{"description":"The request query params sent by the API call.","type":"string"},"response_body":{"description":"The response body returned by the API call. We do not store this information if it is above a certain size.","nullable":true,"type":"string"},"started_at":{"description":"The date and time the API call started billing.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status_code":{"description":"The status code returned by the API call.","format":"int32","nullable":true,"title":"int32","type":"integer"},"stripe_invoice_item_id":{"description":"The Stripe invoice item ID of the API call if it is billable.","type":"string"},"token":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The API token that made the API call."},"updated_at":{"description":"The date and time the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_agent":{"description":"The user agent of the request.","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The ID of the user that made the API call."}},"required":["created_at","id","method","token","updated_at","user_agent","user_id"],"type":"object"},"ApiCallWithPriceResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/ApiCallWithPrice"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"ApiError":{"description":"An error.","properties":{"error_code":{"allOf":[{"$ref":"#/components/schemas/ErrorCode"}],"description":"The error code."},"message":{"description":"The error message.","type":"string"}},"required":["error_code","message"],"type":"object"},"ApiToken":{"description":"An API token.\n\nThese are used to authenticate users with Bearer authentication.","properties":{"created_at":{"description":"The date and time the API token was created.","format":"date-time","title":"DateTime","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the API token."},"is_valid":{"description":"If the token is valid. We never delete API tokens, but we can mark them as invalid. We save them for ever to preserve the history of the API token.","type":"boolean"},"token":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The API token itself."},"updated_at":{"description":"The date and time the API token was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The ID of the user that owns the API token."}},"required":["created_at","id","is_valid","token","updated_at","user_id"],"type":"object"},"ApiTokenResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/ApiToken"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"AppClientInfo":{"description":"Information about a third party app client.","properties":{"url":{"description":"The URL for consent.","type":"string"}},"type":"object"},"AsyncApiCall":{"description":"An async API call.","properties":{"completed_at":{"description":"The time and date the async API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the async API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the async API call.\n\nThis is the same as the API call ID."},"input":{"default":null,"description":"The JSON input for the API call. These are determined by the endpoint that is run."},"output":{"description":"The JSON output for the API call. These are determined by the endpoint that is run.","nullable":true},"started_at":{"description":"The time and date the async API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the async API call."},"type":{"allOf":[{"$ref":"#/components/schemas/AsyncApiCallType"}],"description":"The type of async API call."},"updated_at":{"description":"The time and date the async API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the async API call."},"worker":{"description":"The worker node that is performing or performed the async API call.","type":"string"}},"required":["created_at","id","status","type","updated_at","user_id"],"type":"object"},"AsyncApiCallOutput":{"description":"The output from the async API call.","oneOf":[{"description":"A file conversion.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"output_format":{"allOf":[{"$ref":"#/components/schemas/FileExportFormat"}],"description":"The output format of the file conversion."},"output_format_options":{"allOf":[{"$ref":"#/components/schemas/OutputFormat"}],"description":"The output format options of the file conversion.","nullable":true},"outputs":{"additionalProperties":{"format":"byte","title":"String","type":"string"},"description":"The converted files (if multiple file conversion), if completed, base64 encoded. The key of the map is the path of the output file.","type":"object"},"src_format":{"allOf":[{"$ref":"#/components/schemas/FileImportFormat"}],"description":"The source format of the file conversion."},"src_format_options":{"allOf":[{"$ref":"#/components/schemas/InputFormat"}],"description":"The source format options of the file conversion.","nullable":true},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"type":{"enum":["file_conversion"],"type":"string"},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","output_format","src_format","status","type","updated_at","user_id"],"type":"object"},{"description":"File center of mass.","properties":{"center_of_mass":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The resulting center of mass.","nullable":true},"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"The output unit for the center of mass."},"src_format":{"allOf":[{"$ref":"#/components/schemas/FileImportFormat"}],"description":"The source format of the file."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"type":{"enum":["file_center_of_mass"],"type":"string"},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","output_unit","src_format","status","type","updated_at","user_id"],"type":"object"},{"description":"A file mass.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"mass":{"description":"The resulting mass.","format":"double","nullable":true,"type":"number"},"material_density":{"default":0.0,"description":"The material density as denoted by the user.","format":"double","type":"number"},"material_density_unit":{"allOf":[{"$ref":"#/components/schemas/UnitDensity"}],"description":"The material density unit."},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitMass"}],"description":"The output unit for the mass."},"src_format":{"allOf":[{"$ref":"#/components/schemas/FileImportFormat"}],"description":"The source format of the file."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"type":{"enum":["file_mass"],"type":"string"},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","material_density_unit","output_unit","src_format","status","type","updated_at","user_id"],"type":"object"},{"description":"A file volume.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitVolume"}],"description":"The output unit for the volume."},"src_format":{"allOf":[{"$ref":"#/components/schemas/FileImportFormat"}],"description":"The source format of the file."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"type":{"enum":["file_volume"],"type":"string"},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."},"volume":{"description":"The resulting volume.","format":"double","nullable":true,"type":"number"}},"required":["created_at","id","output_unit","src_format","status","type","updated_at","user_id"],"type":"object"},{"description":"A file density.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"density":{"description":"The resulting density.","format":"double","nullable":true,"type":"number"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"material_mass":{"default":0.0,"description":"The material mass as denoted by the user.","format":"double","type":"number"},"material_mass_unit":{"allOf":[{"$ref":"#/components/schemas/UnitMass"}],"description":"The material mass unit."},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitDensity"}],"description":"The output unit for the density."},"src_format":{"allOf":[{"$ref":"#/components/schemas/FileImportFormat"}],"description":"The source format of the file."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"type":{"enum":["file_density"],"type":"string"},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","material_mass_unit","output_unit","src_format","status","type","updated_at","user_id"],"type":"object"},{"description":"A file surface area.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitArea"}],"description":"The output unit for the surface area."},"src_format":{"allOf":[{"$ref":"#/components/schemas/FileImportFormat"}],"description":"The source format of the file."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"surface_area":{"description":"The resulting surface area.","format":"double","nullable":true,"type":"number"},"type":{"enum":["file_surface_area"],"type":"string"},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","output_unit","src_format","status","type","updated_at","user_id"],"type":"object"},{"description":"Text to CAD.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"feedback":{"allOf":[{"$ref":"#/components/schemas/AiFeedback"}],"description":"Feedback from the user, if any.","nullable":true},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"model_version":{"description":"The version of the model.","type":"string"},"output_format":{"allOf":[{"$ref":"#/components/schemas/FileExportFormat"}],"description":"The output format of the model."},"outputs":{"additionalProperties":{"format":"byte","title":"String","type":"string"},"description":"The output of the model in the given file format the user requested, base64 encoded. The key of the map is the path of the output file.","type":"object"},"prompt":{"description":"The prompt.","type":"string"},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"type":{"enum":["text_to_cad"],"type":"string"},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","model_version","output_format","prompt","status","type","updated_at","user_id"],"type":"object"}]},"AsyncApiCallResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/AsyncApiCall"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"AsyncApiCallType":{"description":"The type of async API call.","oneOf":[{"description":"File conversion.","enum":["file_conversion"],"type":"string"},{"description":"File volume.","enum":["file_volume"],"type":"string"},{"description":"File center of mass.","enum":["file_center_of_mass"],"type":"string"},{"description":"File mass.","enum":["file_mass"],"type":"string"},{"description":"File density.","enum":["file_density"],"type":"string"},{"description":"File surface area.","enum":["file_surface_area"],"type":"string"},{"description":"Text to CAD.","enum":["text_to_cad"],"type":"string"}]},"Axis":{"description":"Co-ordinate axis specifier.\n\nSee [cglearn.eu] for background reading.\n\n[cglearn.eu]: https://cglearn.eu/pub/computer-graphics/introduction-to-geometry#material-coordinate-systems-1","oneOf":[{"description":"'Y' axis.","enum":["y"],"type":"string"},{"description":"'Z' axis.","enum":["z"],"type":"string"}]},"AxisDirectionPair":{"description":"An [`Axis`] paired with a [`Direction`].","properties":{"axis":{"allOf":[{"$ref":"#/components/schemas/Axis"}],"description":"Axis specifier."},"direction":{"allOf":[{"$ref":"#/components/schemas/Direction"}],"description":"Specifies which direction the axis is pointing."}},"required":["axis","direction"],"type":"object"},"BillingInfo":{"description":"The billing information for payments.","properties":{"address":{"allOf":[{"$ref":"#/components/schemas/NewAddress"}],"description":"The address of the customer.","nullable":true},"name":{"description":"The name of the customer.","type":"string"},"phone":{"default":"","description":"The phone for the customer.","format":"phone","title":"String","type":"string"}},"type":"object"},"CacheMetadata":{"description":"Metadata about our cache.\n\nThis is mostly used for internal purposes and debugging.","properties":{"ok":{"description":"If the cache returned an ok response from ping.","type":"boolean"}},"required":["ok"],"type":"object"},"CameraDragInteractionType":{"description":"The type of camera drag interaction.","oneOf":[{"description":"Camera pan","enum":["pan"],"type":"string"},{"description":"Camera rotate (revolve/orbit)","enum":["rotate"],"type":"string"},{"description":"Camera zoom (increase or decrease distance to reference point center)","enum":["zoom"],"type":"string"}]},"CardDetails":{"description":"The card details of a payment method.","properties":{"brand":{"description":"Card brand.\n\nCan be `amex`, `diners`, `discover`, `jcb`, `mastercard`, `unionpay`, `visa`, or `unknown`.","type":"string"},"checks":{"allOf":[{"$ref":"#/components/schemas/PaymentMethodCardChecks"}],"default":{},"description":"Checks on Card address and CVC if provided."},"country":{"description":"Two-letter ISO code representing the country of the card.","type":"string"},"exp_month":{"default":0,"description":"Two-digit number representing the card's expiration month.","format":"int64","type":"integer"},"exp_year":{"default":0,"description":"Four-digit number representing the card's expiration year.","format":"int64","type":"integer"},"fingerprint":{"description":"Uniquely identifies this particular card number.","type":"string"},"funding":{"description":"Card funding type.\n\nCan be `credit`, `debit`, `prepaid`, or `unknown`.","type":"string"},"last4":{"description":"The last four digits of the card.","type":"string"}},"type":"object"},"CenterOfMass":{"description":"The center of mass response.","properties":{"center_of_mass":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The center of mass."},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"The output unit for the center of mass."}},"required":["center_of_mass","output_unit"],"type":"object"},"ClientMetrics":{"description":"ClientMetrics contains information regarding the state of the peer.","properties":{"rtc_frames_decoded":{"description":"Counter of the number of WebRTC frames that the client has decoded during this session.","format":"uint64","minimum":0,"type":"integer"},"rtc_frames_dropped":{"description":"Counter of the number of WebRTC frames the client has dropped during this session.","format":"uint32","minimum":0,"type":"integer"},"rtc_frames_per_second":{"description":"Current number of frames being rendered per second. A good target is 60 frames per second, but it can fluctuate depending on network conditions.","format":"uint8","minimum":0,"type":"integer"},"rtc_frames_received":{"description":"Counter of the number of WebRTC frames that the client has received during this session.","format":"uint64","minimum":0,"type":"integer"},"rtc_freeze_count":{"description":"Number of times the WebRTC playback has frozen. This is usually due to network conditions.","format":"uint32","minimum":0,"type":"integer"},"rtc_jitter_sec":{"description":"Amount of \"jitter\" in the WebRTC session. Network latency is the time it takes a packet to traverse the network. The amount that the latency varies is the jitter. Video latency is the time it takes to render a frame sent by the server (including network latency). A low jitter means the video latency can be reduced without impacting smooth playback. High jitter means clients will increase video latency to ensure smooth playback.","format":"float","type":"number"},"rtc_keyframes_decoded":{"description":"Number of \"key frames\" decoded in the underlying h.264 stream. A key frame is an expensive (bandwidth-wise) \"full image\" of the video frame. Data after the keyframe become -- effectively -- \"diff\" operations on that key frame. The Engine will only send a keyframe if required, which is an indication that some of the \"diffs\" have been lost, usually an indication of poor network conditions. We like this metric to understand times when the connection has had to recover.","format":"uint32","minimum":0,"type":"integer"},"rtc_total_freezes_duration_sec":{"description":"Number of seconds of frozen video the user has been subjected to.","format":"float","type":"number"}},"required":["rtc_frames_decoded","rtc_frames_dropped","rtc_frames_per_second","rtc_frames_received","rtc_freeze_count","rtc_jitter_sec","rtc_keyframes_decoded","rtc_total_freezes_duration_sec"],"type":"object"},"Cluster":{"description":"Cluster information.","properties":{"addr":{"default":null,"description":"The IP address of the cluster.","nullable":true,"type":"string"},"auth_timeout":{"default":0,"description":"The auth timeout of the cluster.","format":"int64","type":"integer"},"cluster_port":{"default":0,"description":"The port of the cluster.","format":"int64","type":"integer"},"name":{"default":"","description":"The name of the cluster.","type":"string"},"tls_timeout":{"default":0,"description":"The TLS timeout for the cluster.","format":"int64","type":"integer"},"urls":{"default":[],"description":"The urls of the cluster.","items":{"type":"string"},"type":"array"}},"type":"object"},"CodeLanguage":{"description":"The language code is written in.","oneOf":[{"description":"The `go` programming language.","enum":["go"],"type":"string"},{"description":"The `python` programming language.","enum":["python"],"type":"string"},{"description":"The `node` programming language.","enum":["node"],"type":"string"}]},"CodeOutput":{"description":"Output of the code being executed.","properties":{"output_files":{"description":"The contents of the files requested if they were passed.","items":{"$ref":"#/components/schemas/OutputFile"},"type":"array"},"stderr":{"default":"","description":"The stderr of the code.","type":"string"},"stdout":{"default":"","description":"The stdout of the code.","type":"string"}},"type":"object"},"Color":{"description":"An RGBA color","properties":{"a":{"description":"Alpha","format":"float","type":"number"},"b":{"description":"Blue","format":"float","type":"number"},"g":{"description":"Green","format":"float","type":"number"},"r":{"description":"Red","format":"float","type":"number"}},"required":["a","b","g","r"],"type":"object"},"Connection":{"description":"Metadata about a pub-sub connection.\n\nThis is mostly used for internal purposes and debugging.","properties":{"auth_timeout":{"default":0,"description":"The auth timeout of the server.","format":"int64","type":"integer"},"cluster":{"allOf":[{"$ref":"#/components/schemas/Cluster"}],"default":{"addr":null,"auth_timeout":0,"cluster_port":0,"name":"","tls_timeout":0,"urls":[]},"description":"Information about the cluster."},"config_load_time":{"description":"The time the configuration was loaded.","format":"date-time","type":"string"},"connections":{"default":0,"description":"The number of connections to the server.","format":"int64","type":"integer"},"cores":{"default":0,"description":"The CPU core usage of the server.","format":"int64","type":"integer"},"cpu":{"default":0.0,"description":"The CPU usage of the server.","format":"double","type":"number"},"gateway":{"allOf":[{"$ref":"#/components/schemas/Gateway"}],"default":{"auth_timeout":0,"host":"","name":"","port":0,"tls_timeout":0},"description":"Information about the gateway."},"git_commit":{"default":"","description":"The git commit.","type":"string"},"go":{"default":"","description":"The go version.","type":"string"},"gomaxprocs":{"default":0,"description":"`GOMAXPROCS` of the server.","format":"int64","type":"integer"},"host":{"description":"The host of the server.","format":"ip","type":"string"},"http_base_path":{"default":"","description":"The http base path of the server.","type":"string"},"http_host":{"default":"","description":"The http host of the server.","type":"string"},"http_port":{"default":0,"description":"The http port of the server.","format":"int64","type":"integer"},"http_req_stats":{"additionalProperties":{"format":"int64","type":"integer"},"description":"HTTP request statistics.","type":"object"},"https_port":{"default":0,"description":"The https port of the server.","format":"int64","type":"integer"},"in_bytes":{"default":0,"description":"The count of inbound bytes for the server.","format":"int64","type":"integer"},"in_msgs":{"default":0,"description":"The number of inbound messages for the server.","format":"int64","type":"integer"},"jetstream":{"allOf":[{"$ref":"#/components/schemas/Jetstream"}],"default":{"config":{"domain":"","max_memory":0,"max_storage":0,"store_dir":""},"meta":{"cluster_size":0,"leader":"","name":""},"stats":{"accounts":0,"api":{"errors":0,"inflight":0,"total":0},"ha_assets":0,"memory":0,"reserved_memory":0,"reserved_store":0,"store":0}},"description":"Jetstream information."},"leaf":{"allOf":[{"$ref":"#/components/schemas/LeafNode"}],"default":{"auth_timeout":0,"host":"","port":0,"tls_timeout":0},"description":"Information about leaf nodes."},"leafnodes":{"default":0,"description":"The number of leaf nodes for the server.","format":"int64","type":"integer"},"max_connections":{"default":0,"description":"The max connections of the server.","format":"int64","type":"integer"},"max_control_line":{"default":0,"description":"The max control line of the server.","format":"int64","type":"integer"},"max_payload":{"default":0,"description":"The max payload of the server.","format":"int64","type":"integer"},"max_pending":{"default":0,"description":"The max pending of the server.","format":"int64","type":"integer"},"mem":{"default":0,"description":"The memory usage of the server.","format":"int64","type":"integer"},"now":{"description":"The time now.","format":"date-time","type":"string"},"out_bytes":{"default":0,"description":"The count of outbound bytes for the server.","format":"int64","type":"integer"},"out_msgs":{"default":0,"description":"The number of outbound messages for the server.","format":"int64","type":"integer"},"ping_interval":{"default":0,"description":"The ping interval of the server.","format":"int64","type":"integer"},"ping_max":{"default":0,"description":"The ping max of the server.","format":"int64","type":"integer"},"port":{"default":0,"description":"The port of the server.","format":"int64","type":"integer"},"proto":{"default":0,"description":"The protocol version.","format":"int64","type":"integer"},"remotes":{"default":0,"description":"The number of remotes for the server.","format":"int64","type":"integer"},"routes":{"default":0,"description":"The number of routes for the server.","format":"int64","type":"integer"},"server_id":{"default":"","description":"The server ID.","type":"string"},"server_name":{"default":"","description":"The server name.","type":"string"},"slow_consumers":{"default":0,"description":"The number of slow consumers for the server.","format":"int64","type":"integer"},"start":{"description":"When the server was started.","format":"date-time","type":"string"},"subscriptions":{"default":0,"description":"The number of subscriptions for the server.","format":"int64","type":"integer"},"system_account":{"default":"","description":"The system account.","type":"string"},"tls_timeout":{"default":0,"description":"The TLS timeout of the server.","format":"int64","type":"integer"},"total_connections":{"default":0,"description":"The total number of connections to the server.","format":"int64","type":"integer"},"uptime":{"default":"","description":"The uptime of the server.","type":"string"},"version":{"default":"","description":"The version of the service.","type":"string"},"write_deadline":{"default":0,"description":"The write deadline of the server.","format":"int64","type":"integer"}},"required":["config_load_time","host","http_req_stats","now","start"],"type":"object"},"CountryCode":{"description":"An ISO-3166 alpha-2 country code. Always uppercase.","type":"string"},"Coupon":{"description":"The resource representing a Coupon.","properties":{"amount_off":{"description":"Amount (in the `currency` specified) that will be taken off the subtotal of any invoices for this customer.","format":"money-usd","nullable":true,"title":"double","type":"number"},"deleted":{"default":false,"description":"Always true for a deleted object.","type":"boolean"},"id":{"description":"Unique identifier for the object.","type":"string"},"percent_off":{"description":"Percent that will be taken off the subtotal of any invoices for this customer for the duration of the coupon.\n\nFor example, a coupon with percent_off of 50 will make a %s100 invoice %s50 instead.","format":"double","nullable":true,"type":"number"}},"type":"object"},"CreatedAtSortMode":{"description":"Supported set of sort modes for scanning by created_at only.\n\nCurrently, we only support scanning in ascending order.","oneOf":[{"description":"Sort in increasing order of \"created_at\".","enum":["created_at_ascending"],"type":"string"},{"description":"Sort in decreasing order of \"created_at\".","enum":["created_at_descending"],"type":"string"}]},"Currency":{"description":"Currency is the list of supported currencies. Always lowercase.\n\nThis comes from the Stripe API docs: For more details see <https://support.stripe.com/questions/which-currencies-does-stripe-support>.","type":"string"},"CurveGetControlPoints":{"description":"The response from the `CurveGetControlPoints` command.","properties":{"control_points":{"description":"Control points in the curve.","items":{"$ref":"#/components/schemas/Point3d"},"type":"array"}},"required":["control_points"],"type":"object"},"CurveGetEndPoints":{"description":"Endpoints of a curve","properties":{"end":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"End"},"start":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Start"}},"required":["end","start"],"type":"object"},"CurveGetType":{"description":"The response from the `CurveGetType` command.","properties":{"curve_type":{"allOf":[{"$ref":"#/components/schemas/CurveType"}],"description":"Curve type"}},"required":["curve_type"],"type":"object"},"CurveType":{"description":"The type of Curve (embedded within path)","enum":["line","arc","nurbs"],"type":"string"},"Customer":{"description":"The resource representing a payment \"Customer\".","properties":{"address":{"allOf":[{"$ref":"#/components/schemas/NewAddress"}],"description":"The customer's address.","nullable":true},"balance":{"default":0.0,"description":"Current balance, if any, being stored on the customer in the payments service.\n\nIf negative, the customer has credit to apply to their next invoice. If positive, the customer has an amount owed that will be added to their next invoice. The balance does not refer to any unpaid invoices; it solely takes into account amounts that have yet to be successfully applied to any invoice. This balance is only taken into account as invoices are finalized.","format":"money-usd","title":"double","type":"number"},"created_at":{"description":"Time at which the object was created.","format":"date-time","type":"string"},"currency":{"allOf":[{"$ref":"#/components/schemas/Currency"}],"default":"usd","description":"Three-letter ISO code for the currency the customer can be charged in for recurring billing purposes."},"delinquent":{"default":false,"description":"When the customer's latest invoice is billed by charging automatically, `delinquent` is `true` if the invoice's latest charge failed.\n\nWhen the customer's latest invoice is billed by sending an invoice, `delinquent` is `true` if the invoice isn't paid by its due date. If an invoice is marked uncollectible by dunning, `delinquent` doesn't get reset to `false`.","type":"boolean"},"email":{"description":"The customer's email address.","format":"email","type":"string"},"id":{"description":"Unique identifier for the object.","type":"string"},"metadata":{"additionalProperties":{"type":"string"},"default":{},"description":"Set of key-value pairs.","type":"object"},"name":{"description":"The customer's full name or business name.","type":"string"},"phone":{"default":"","description":"The customer's phone number.","format":"phone","title":"String","type":"string"}},"required":["created_at"],"type":"object"},"CustomerBalance":{"description":"A balance for a user.\n\nThis holds information about the financial balance for the user.","properties":{"created_at":{"description":"The date and time the balance was created.","format":"date-time","title":"DateTime","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the balance."},"monthly_credits_remaining":{"description":"The monthy credits remaining in the balance. This gets re-upped every month, but if the credits are not used for a month they do not carry over to the next month. It is a stable amount granted to the user per month.","format":"money-usd","title":"double","type":"number"},"pre_pay_cash_remaining":{"description":"The amount of pre-pay cash remaining in the balance. This number goes down as the user uses their pre-paid credits. The reason we track this amount is if a user ever wants to withdraw their pre-pay cash, we can use this amount to determine how much to give them. Say a user has $100 in pre-paid cash, their bill is worth, $50 after subtracting any other credits (like monthly etc.) Their bill is $50, their pre-pay cash remaining will be subtracted by 50 to pay the bill and their `pre_pay_credits_remaining` will be subtracted by 50 to pay the bill. This way if they want to withdraw money after, they can only withdraw $50 since that is the amount of cash they have remaining.","format":"money-usd","title":"double","type":"number"},"pre_pay_credits_remaining":{"description":"The amount of credits remaining in the balance. This is typically the amount of cash * some multiplier they get for pre-paying their account. This number lowers every time a bill is paid with the balance. This number increases every time a user adds funds to their balance. This may be through a subscription or a one off payment.","format":"money-usd","title":"double","type":"number"},"total_due":{"description":"This includes any outstanding, draft, or open invoices and any pending invoice items. This does not include any credits the user has on their account.","format":"money-usd","title":"double","type":"number"},"updated_at":{"description":"The date and time the balance was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID the balance belongs to."}},"required":["created_at","id","monthly_credits_remaining","pre_pay_cash_remaining","pre_pay_credits_remaining","total_due","updated_at","user_id"],"type":"object"},"Density":{"description":"The density response.","properties":{"density":{"description":"The density.","format":"double","type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitDensity"}],"description":"The output unit for the density."}},"required":["density","output_unit"],"type":"object"},"DeviceAccessTokenRequestForm":{"description":"The form for a device access token request.","properties":{"client_id":{"description":"The client ID.","format":"uuid","type":"string"},"device_code":{"description":"The device code.","format":"uuid","type":"string"},"grant_type":{"allOf":[{"$ref":"#/components/schemas/OAuth2GrantType"}],"description":"The grant type."}},"required":["client_id","device_code","grant_type"],"type":"object"},"DeviceAuthRequestForm":{"description":"The request parameters for the OAuth 2.0 Device Authorization Grant flow.","properties":{"client_id":{"description":"The client ID.","format":"uuid","type":"string"}},"required":["client_id"],"type":"object"},"DeviceAuthVerifyParams":{"description":"The request parameters to verify the `user_code` for the OAuth 2.0 Device Authorization Grant.","properties":{"user_code":{"description":"The user code.","type":"string"}},"required":["user_code"],"type":"object"},"Direction":{"description":"Specifies the sign of a co-ordinate axis.","oneOf":[{"description":"Increasing numbers.","enum":["positive"],"type":"string"},{"description":"Decreasing numbers.","enum":["negative"],"type":"string"}]},"Discount":{"description":"The resource representing a Discount.","properties":{"coupon":{"allOf":[{"$ref":"#/components/schemas/Coupon"}],"description":"The coupon that applied to create this discount."}},"required":["coupon"],"type":"object"},"DistanceType":{"description":"The type of distance Distances can vary depending on the objects used as input.","oneOf":[{"description":"Euclidean Distance.","properties":{"type":{"enum":["euclidean"],"type":"string"}},"required":["type"],"type":"object"},{"description":"The distance between objects along the specified axis","properties":{"axis":{"allOf":[{"$ref":"#/components/schemas/GlobalAxis"}],"description":"Global axis"},"type":{"enum":["on_axis"],"type":"string"}},"required":["axis","type"],"type":"object"}]},"EmailAuthenticationForm":{"description":"The body of the form for email authentication.","properties":{"callback_url":{"description":"The URL to redirect back to after we have authenticated.","format":"uri","nullable":true,"type":"string"},"email":{"description":"The user's email.","format":"email","type":"string"}},"required":["email"],"type":"object"},"EntityGetAllChildUuids":{"description":"The response from the `EntityGetAllChildUuids` command.","properties":{"entity_ids":{"description":"The UUIDs of the child entities.","items":{"format":"uuid","type":"string"},"type":"array"}},"required":["entity_ids"],"type":"object"},"EntityGetChildUuid":{"description":"The response from the `EntityGetChildUuid` command.","properties":{"entity_id":{"description":"The UUID of the child entity.","format":"uuid","type":"string"}},"required":["entity_id"],"type":"object"},"EntityGetDistance":{"description":"The response from the `EntitiesGetDistance` command.","properties":{"max_distance":{"description":"The maximum distance between the input entities.","format":"double","type":"number"},"min_distance":{"description":"The minimum distance between the input entities.","format":"double","type":"number"}},"required":["max_distance","min_distance"],"type":"object"},"EntityGetNumChildren":{"description":"The response from the `EntityGetNumChildren` command.","properties":{"num":{"description":"The number of children the entity has.","format":"uint32","minimum":0,"type":"integer"}},"required":["num"],"type":"object"},"EntityGetParentId":{"description":"The response from the `EntityGetParentId` command.","properties":{"entity_id":{"description":"The UUID of the parent entity.","format":"uuid","type":"string"}},"required":["entity_id"],"type":"object"},"EntityType":{"description":"The type of entity","enum":["entity","object","path","curve","solid2d","solid3d","edge","face","plane"],"type":"string"},"Environment":{"description":"The environment the server is running in.","oneOf":[{"description":"The development environment. This is for running locally.","enum":["DEVELOPMENT"],"type":"string"},{"description":"The preview environment. This is when PRs are created and a service is deployed for testing.","enum":["PREVIEW"],"type":"string"},{"description":"The production environment.","enum":["PRODUCTION"],"type":"string"}]},"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"},"ErrorCode":{"description":"The type of error sent by the KittyCAD API.","oneOf":[{"description":"Graphics engine failed to complete request, consider retrying","enum":["internal_engine"],"type":"string"},{"description":"API failed to complete request, consider retrying","enum":["internal_api"],"type":"string"},{"description":"User requested something geometrically or graphically impossible. Don't retry this request, as it's inherently impossible. Instead, read the error message and change your request.","enum":["bad_request"],"type":"string"},{"description":"Client sent invalid JSON.","enum":["invalid_json"],"type":"string"},{"description":"Client sent invalid BSON.","enum":["invalid_bson"],"type":"string"},{"description":"Client sent a message which is not accepted over this protocol.","enum":["wrong_protocol"],"type":"string"},{"description":"Problem sending data between client and KittyCAD API.","enum":["connection_problem"],"type":"string"},{"description":"Client sent a Websocket message type which the KittyCAD API does not handle.","enum":["message_type_not_accepted"],"type":"string"},{"description":"Client sent a Websocket message intended for WebRTC but it was configured as a WebRTC connection.","enum":["message_type_not_accepted_for_web_r_t_c"],"type":"string"}]},"Export":{"description":"The response from the `Export` endpoint.","properties":{"files":{"description":"The files that were exported.","items":{"$ref":"#/components/schemas/ExportFile"},"type":"array"}},"required":["files"],"type":"object"},"ExportFile":{"description":"A file to be exported to the client.","properties":{"contents":{"description":"The contents of the file, base64 encoded.","format":"byte","title":"String","type":"string"},"name":{"description":"The name of the file.","type":"string"}},"required":["contents","name"],"type":"object"},"ExtendedUser":{"description":"Extended user information.\n\nThis is mostly used for internal purposes. It returns a mapping of the user's information, including that of our third party services we use for users: MailChimp, Stripe, and Front","properties":{"company":{"description":"The user's company.","type":"string"},"created_at":{"description":"The date and time the user was created.","format":"date-time","title":"DateTime","type":"string"},"discord":{"description":"The user's Discord handle.","type":"string"},"email":{"description":"The email address of the user.","format":"email","type":"string"},"email_verified":{"description":"The date and time the email address was verified.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"first_name":{"description":"The user's first name.","type":"string"},"front_id":{"description":"The user's Front ID. This is mostly used for internal mapping.","nullable":true,"type":"string"},"github":{"description":"The user's GitHub handle.","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the user."},"image":{"description":"The image avatar for the user. This is a URL.","format":"uri","title":"String","type":"string"},"last_name":{"description":"The user's last name.","type":"string"},"mailchimp_id":{"description":"The user's MailChimp ID. This is mostly used for internal mapping.","nullable":true,"type":"string"},"name":{"description":"The name of the user. This is auto populated at first from the authentication provider (if there was a name). It can be updated by the user by updating their `first_name` and `last_name` fields.","type":"string"},"phone":{"default":"","description":"The user's phone number.","format":"phone","title":"String","type":"string"},"stripe_id":{"description":"The user's Stripe ID. This is mostly used for internal mapping.","nullable":true,"type":"string"},"updated_at":{"description":"The date and time the user was last updated.","format":"date-time","title":"DateTime","type":"string"}},"required":["created_at","id","image","updated_at"],"type":"object"},"ExtendedUserResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/ExtendedUser"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"FailureWebSocketResponse":{"description":"Unsuccessful Websocket response.","properties":{"errors":{"description":"The errors that occurred.","items":{"$ref":"#/components/schemas/ApiError"},"type":"array"},"request_id":{"description":"Which request this is a response to. If the request was a modeling command, this is the modeling command ID. If no request ID was sent, this will be null.","format":"uuid","nullable":true,"type":"string"},"success":{"description":"Always false","type":"boolean"}},"required":["errors","success"],"type":"object"},"FbxStorage":{"description":"Describes the storage format of an FBX file.","oneOf":[{"description":"ASCII FBX encoding.","enum":["ascii"],"type":"string"},{"description":"Binary FBX encoding.","enum":["binary"],"type":"string"}]},"FileCenterOfMass":{"description":"A file center of mass result.","properties":{"center_of_mass":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The resulting center of mass.","nullable":true},"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"The output unit for the center of mass."},"src_format":{"allOf":[{"$ref":"#/components/schemas/FileImportFormat"}],"description":"The source format of the file."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","output_unit","src_format","status","updated_at","user_id"],"type":"object"},"FileConversion":{"description":"A file conversion.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"output_format":{"allOf":[{"$ref":"#/components/schemas/FileExportFormat"}],"description":"The output format of the file conversion."},"output_format_options":{"allOf":[{"$ref":"#/components/schemas/OutputFormat"}],"description":"The output format options of the file conversion.","nullable":true},"outputs":{"additionalProperties":{"format":"byte","title":"String","type":"string"},"description":"The converted files (if multiple file conversion), if completed, base64 encoded. The key of the map is the path of the output file.","type":"object"},"src_format":{"allOf":[{"$ref":"#/components/schemas/FileImportFormat"}],"description":"The source format of the file conversion."},"src_format_options":{"allOf":[{"$ref":"#/components/schemas/InputFormat"}],"description":"The source format options of the file conversion.","nullable":true},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","output_format","src_format","status","updated_at","user_id"],"type":"object"},"FileDensity":{"description":"A file density result.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"density":{"description":"The resulting density.","format":"double","nullable":true,"type":"number"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"material_mass":{"default":0.0,"description":"The material mass as denoted by the user.","format":"double","type":"number"},"material_mass_unit":{"allOf":[{"$ref":"#/components/schemas/UnitMass"}],"description":"The material mass unit."},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitDensity"}],"description":"The output unit for the density."},"src_format":{"allOf":[{"$ref":"#/components/schemas/FileImportFormat"}],"description":"The source format of the file."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","material_mass_unit","output_unit","src_format","status","updated_at","user_id"],"type":"object"},"FileExportFormat":{"description":"The valid types of output file formats.","oneOf":[{"description":"Autodesk Filmbox (FBX) format. <https://en.wikipedia.org/wiki/FBX>","enum":["fbx"],"type":"string"},{"description":"Binary glTF 2.0.\n\nThis is a single binary with .glb extension.\n\nThis is better if you want a compressed format as opposed to the human readable glTF that lacks compression.","enum":["glb"],"type":"string"},{"description":"glTF 2.0. Embedded glTF 2.0 (pretty printed).\n\nSingle JSON file with .gltf extension binary data encoded as base64 data URIs.\n\nThe JSON contents are pretty printed.\n\nIt is human readable, single file, and you can view the diff easily in a git commit.","enum":["gltf"],"type":"string"},{"description":"The OBJ file format. <https://en.wikipedia.org/wiki/Wavefront_.obj_file> It may or may not have an an attached material (mtl // mtllib) within the file, but we interact with it as if it does not.","enum":["obj"],"type":"string"},{"description":"The PLY file format. <https://en.wikipedia.org/wiki/PLY_(file_format)>","enum":["ply"],"type":"string"},{"description":"The STEP file format. <https://en.wikipedia.org/wiki/ISO_10303-21>","enum":["step"],"type":"string"},{"description":"The STL file format. <https://en.wikipedia.org/wiki/STL_(file_format)>","enum":["stl"],"type":"string"}]},"FileImportFormat":{"description":"The valid types of source file formats.","oneOf":[{"description":"Autodesk Filmbox (FBX) format. <https://en.wikipedia.org/wiki/FBX>","enum":["fbx"],"type":"string"},{"description":"glTF 2.0.","enum":["gltf"],"type":"string"},{"description":"The OBJ file format. <https://en.wikipedia.org/wiki/Wavefront_.obj_file> It may or may not have an an attached material (mtl // mtllib) within the file, but we interact with it as if it does not.","enum":["obj"],"type":"string"},{"description":"The PLY file format. <https://en.wikipedia.org/wiki/PLY_(file_format)>","enum":["ply"],"type":"string"},{"description":"SolidWorks part (SLDPRT) format.","enum":["sldprt"],"type":"string"},{"description":"The STEP file format. <https://en.wikipedia.org/wiki/ISO_10303-21>","enum":["step"],"type":"string"},{"description":"The STL file format. <https://en.wikipedia.org/wiki/STL_(file_format)>","enum":["stl"],"type":"string"}]},"FileMass":{"description":"A file mass result.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"mass":{"description":"The resulting mass.","format":"double","nullable":true,"type":"number"},"material_density":{"default":0.0,"description":"The material density as denoted by the user.","format":"double","type":"number"},"material_density_unit":{"allOf":[{"$ref":"#/components/schemas/UnitDensity"}],"description":"The material density unit."},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitMass"}],"description":"The output unit for the mass."},"src_format":{"allOf":[{"$ref":"#/components/schemas/FileImportFormat"}],"description":"The source format of the file."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","material_density_unit","output_unit","src_format","status","updated_at","user_id"],"type":"object"},"FileSurfaceArea":{"description":"A file surface area result.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitArea"}],"description":"The output unit for the surface area."},"src_format":{"allOf":[{"$ref":"#/components/schemas/FileImportFormat"}],"description":"The source format of the file."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"surface_area":{"description":"The resulting surface area.","format":"double","nullable":true,"type":"number"},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","output_unit","src_format","status","updated_at","user_id"],"type":"object"},"FileSystemMetadata":{"description":"Metadata about our file system.\n\nThis is mostly used for internal purposes and debugging.","properties":{"ok":{"description":"If the file system passed a sanity check.","type":"boolean"}},"required":["ok"],"type":"object"},"FileVolume":{"description":"A file volume result.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitVolume"}],"description":"The output unit for the volume."},"src_format":{"allOf":[{"$ref":"#/components/schemas/FileImportFormat"}],"description":"The source format of the file."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."},"volume":{"description":"The resulting volume.","format":"double","nullable":true,"type":"number"}},"required":["created_at","id","output_unit","src_format","status","updated_at","user_id"],"type":"object"},"Gateway":{"description":"Gateway information.","properties":{"auth_timeout":{"default":0,"description":"The auth timeout of the gateway.","format":"int64","type":"integer"},"host":{"default":"","description":"The host of the gateway.","type":"string"},"name":{"default":"","description":"The name of the gateway.","type":"string"},"port":{"default":0,"description":"The port of the gateway.","format":"int64","type":"integer"},"tls_timeout":{"default":0,"description":"The TLS timeout for the gateway.","format":"int64","type":"integer"}},"type":"object"},"GetEntityType":{"description":"The response from the `GetEntityType` command.","properties":{"entity_type":{"allOf":[{"$ref":"#/components/schemas/EntityType"}],"description":"The type of the entity."}},"required":["entity_type"],"type":"object"},"GetSketchModePlane":{"description":"The plane for sketch mode.","properties":{"x_axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The x axis."},"y_axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The y axis."},"z_axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The z axis (normal)."}},"required":["x_axis","y_axis","z_axis"],"type":"object"},"GlobalAxis":{"description":"An enum that contains the three global axes.","oneOf":[{"description":"The X axis","enum":["x"],"type":"string"},{"description":"The Y axis","enum":["y"],"type":"string"},{"description":"The Z axis","enum":["z"],"type":"string"}]},"GltfPresentation":{"description":"Describes the presentation style of the glTF JSON.","oneOf":[{"description":"Condense the JSON into the smallest possible size.","enum":["compact"],"type":"string"},{"description":"Expand the JSON into a more human readable format.\n\nThis is the default setting.","enum":["pretty"],"type":"string"}]},"GltfStorage":{"description":"Describes the storage format of a glTF 2.0 scene.","oneOf":[{"description":"Binary glTF 2.0.\n\nThis is a single binary with .glb extension.","enum":["binary"],"type":"string"},{"description":"Standard glTF 2.0.\n\nThis is a JSON file with .gltf extension paired with a separate binary blob file with .bin extension.","enum":["standard"],"type":"string"},{"description":"Embedded glTF 2.0.\n\nSingle JSON file with .gltf extension binary data encoded as base64 data URIs.\n\nThis is the default setting.","enum":["embedded"],"type":"string"}]},"HighlightSetEntity":{"description":"The response from the `HighlightSetEntity` command.","properties":{"entity_id":{"description":"The UUID of the entity that was highlighted.","format":"uuid","nullable":true,"type":"string"},"sequence":{"description":"If the client sent a sequence ID with its request, the backend sends it back.","format":"uint32","minimum":0,"nullable":true,"type":"integer"}},"type":"object"},"IceServer":{"description":"Representation of an ICE server used for STUN/TURN Used to initiate WebRTC connections based on <https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer>","properties":{"credential":{"description":"Credentials for a given TURN server.","nullable":true,"type":"string"},"urls":{"description":"URLs for a given STUN/TURN server. IceServer urls can either be a string or an array of strings But, we choose to always convert to an array of strings for consistency","items":{"type":"string"},"type":"array"},"username":{"description":"Username for a given TURN server.","nullable":true,"type":"string"}},"required":["urls"],"type":"object"},"ImageFormat":{"description":"Enum containing the variety of image formats snapshots may be exported to.","oneOf":[{"description":".png format","enum":["png"],"type":"string"},{"description":".jpeg format","enum":["jpeg"],"type":"string"}]},"ImportFile":{"description":"File to import into the current model If you are sending binary data for a file, be sure to send the WebSocketRequest as binary/bson, not text/json.","properties":{"data":{"description":"The raw bytes of the file","items":{"format":"uint8","minimum":0,"type":"integer"},"type":"array"},"path":{"description":"The file's full path, including file extension.","type":"string"}},"required":["data","path"],"type":"object"},"ImportFiles":{"description":"Data from importing the files","properties":{"object_id":{"description":"ID of the imported 3D models within the scene.","format":"uuid","type":"string"}},"required":["object_id"],"type":"object"},"InputFormat":{"description":"Input format specifier.","oneOf":[{"description":"Autodesk Filmbox (FBX) format.","properties":{"type":{"enum":["fbx"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Binary glTF 2.0. We refer to this as glTF since that is how our customers refer to it, but this can also import binary glTF (glb).","properties":{"type":{"enum":["gltf"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Wavefront OBJ format.","properties":{"coords":{"allOf":[{"$ref":"#/components/schemas/System"}],"description":"Co-ordinate system of input data.\n\nDefaults to the [KittyCAD co-ordinate system].\n\n[KittyCAD co-ordinate system]: ../coord/constant.KITTYCAD.html"},"type":{"enum":["obj"],"type":"string"},"units":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc.\n\nDefaults to meters."}},"required":["coords","type","units"],"type":"object"},{"description":"The PLY Polygon File Format.","properties":{"coords":{"allOf":[{"$ref":"#/components/schemas/System"}],"description":"Co-ordinate system of input data.\n\nDefaults to the [KittyCAD co-ordinate system].\n\n[KittyCAD co-ordinate system]: ../coord/constant.KITTYCAD.html"},"type":{"enum":["ply"],"type":"string"},"units":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc."}},"required":["coords","type","units"],"type":"object"},{"description":"SolidWorks part (SLDPRT) format.","properties":{"type":{"enum":["sldprt"],"type":"string"}},"required":["type"],"type":"object"},{"description":"ISO 10303-21 (STEP) format.","properties":{"type":{"enum":["step"],"type":"string"}},"required":["type"],"type":"object"},{"description":"*ST**ereo**L**ithography format.","properties":{"coords":{"allOf":[{"$ref":"#/components/schemas/System"}],"description":"Co-ordinate system of input data.\n\nDefaults to the [KittyCAD co-ordinate system].\n\n[KittyCAD co-ordinate system]: ../coord/constant.KITTYCAD.html"},"type":{"enum":["stl"],"type":"string"},"units":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"The units of the input data. This is very important for correct scaling and when calculating physics properties like mass, etc."}},"required":["coords","type","units"],"type":"object"}]},"Invoice":{"description":"An invoice.","properties":{"amount_due":{"default":0.0,"description":"Final amount due at this time for this invoice.\n\nIf the invoice's total is smaller than the minimum charge amount, for example, or if there is account credit that can be applied to the invoice, the `amount_due` may be 0. If there is a positive `starting_balance` for the invoice (the customer owes money), the `amount_due` will also take that into account. The charge that gets generated for the invoice will be for the amount specified in `amount_due`.","format":"money-usd","title":"double","type":"number"},"amount_paid":{"default":0.0,"description":"The amount, in USD, that was paid.","format":"money-usd","title":"double","type":"number"},"amount_remaining":{"default":0.0,"description":"The amount remaining, in USD, that is due.","format":"money-usd","title":"double","type":"number"},"attempt_count":{"default":0,"description":"Number of payment attempts made for this invoice, from the perspective of the payment retry schedule.\n\nAny payment attempt counts as the first attempt, and subsequently only automatic retries increment the attempt count. In other words, manual payment attempts after the first attempt do not affect the retry schedule.","format":"uint64","minimum":0,"type":"integer"},"attempted":{"default":false,"description":"Whether an attempt has been made to pay the invoice.\n\nAn invoice is not attempted until 1 hour after the `invoice.created` webhook, for example, so you might not want to display that invoice as unpaid to your users.","type":"boolean"},"created_at":{"description":"Time at which the object was created.","format":"date-time","type":"string"},"currency":{"allOf":[{"$ref":"#/components/schemas/Currency"}],"default":"usd","description":"Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase."},"customer_email":{"description":"The email address for the customer. Until the invoice is finalized, this field will equal customer.email. Once the invoice is finalized, this field will no longer be updated.","format":"email","type":"string"},"customer_id":{"description":"Customer ID. The unique identifier for the customer this invoice belongs to. This is the customer ID in the payments service, not our database customer ID.","type":"string"},"default_payment_method":{"description":"Default payment method.","type":"string"},"description":{"description":"Description of the invoice.","type":"string"},"discounts":{"description":"The discounts applied to the invoice. This is an array of discount objects.","items":{"$ref":"#/components/schemas/Discount"},"type":"array"},"id":{"description":"Unique identifier for the object.","type":"string"},"lines":{"description":"The individual line items that make up the invoice.\n\n`lines` is sorted as follows: invoice items in reverse chronological order, followed by the subscription, if any.","items":{"$ref":"#/components/schemas/InvoiceLineItem"},"type":"array"},"metadata":{"additionalProperties":{"type":"string"},"default":{},"description":"Set of key-value pairs.","type":"object"},"number":{"description":"A unique, identifying string that appears on emails sent to the customer for this invoice.","type":"string"},"paid":{"default":false,"description":"Whether payment was successfully collected for this invoice.\n\nAn invoice can be paid (most commonly) with a charge or with credit from the customer's account balance.","type":"boolean"},"pdf":{"description":"The link to download the PDF for the invoice.","format":"uri","nullable":true,"type":"string"},"receipt_number":{"description":"This is the transaction number that appears on email receipts sent for this invoice.","type":"string"},"statement_descriptor":{"description":"Extra information about an invoice for the customer's credit card statement.","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/InvoiceStatus"}],"description":"The status of the invoice, one of `draft`, `open`, `paid`, `uncollectible`, or `void`.\n\n[Learn more](https://stripe.com/docs/billing/invoices/workflow#workflow-overview).","nullable":true},"subtotal":{"default":0.0,"description":"Total of all subscriptions, invoice items, and prorations on the invoice before any invoice level discount or tax is applied.\n\nItem discounts are already incorporated.","format":"money-usd","title":"double","type":"number"},"tax":{"default":0.0,"description":"The amount of tax on this invoice.\n\nThis is the sum of all the tax amounts on this invoice.","format":"money-usd","title":"double","type":"number"},"total":{"default":0.0,"description":"Total after discounts and taxes.","format":"money-usd","title":"double","type":"number"},"url":{"description":"The URL for the hosted invoice page, which allows customers to view and pay an invoice.","format":"uri","nullable":true,"type":"string"}},"required":["created_at"],"type":"object"},"InvoiceLineItem":{"description":"An invoice line item.","properties":{"amount":{"default":0.0,"description":"The amount, in USD.","format":"money-usd","title":"double","type":"number"},"currency":{"allOf":[{"$ref":"#/components/schemas/Currency"}],"default":"usd","description":"Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase."},"description":{"description":"The description.","type":"string"},"id":{"description":"Unique identifier for the object.","type":"string"},"invoice_item":{"description":"The ID of the invoice item associated with this line item if any.","type":"string"},"metadata":{"additionalProperties":{"type":"string"},"default":{},"description":"Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object.\n\nSet of key-value pairs.","type":"object"}},"type":"object"},"InvoiceStatus":{"description":"An enum representing the possible values of an `Invoice`'s `status` field.","oneOf":[{"description":"Deleted.","enum":["deleted"],"type":"string"},{"description":"Draft.","enum":["draft"],"type":"string"},{"description":"Open.","enum":["open"],"type":"string"},{"description":"Paid.","enum":["paid"],"type":"string"},{"description":"Uncollectible.","enum":["uncollectible"],"type":"string"},{"description":"Void.","enum":["void"],"type":"string"}]},"Jetstream":{"description":"Jetstream information.","properties":{"config":{"allOf":[{"$ref":"#/components/schemas/JetstreamConfig"}],"default":{"domain":"","max_memory":0,"max_storage":0,"store_dir":""},"description":"The Jetstream config."},"meta":{"allOf":[{"$ref":"#/components/schemas/MetaClusterInfo"}],"default":{"cluster_size":0,"leader":"","name":""},"description":"Meta information about the cluster."},"stats":{"allOf":[{"$ref":"#/components/schemas/JetstreamStats"}],"default":{"accounts":0,"api":{"errors":0,"inflight":0,"total":0},"ha_assets":0,"memory":0,"reserved_memory":0,"reserved_store":0,"store":0},"description":"Jetstream statistics."}},"type":"object"},"JetstreamApiStats":{"description":"Jetstream API statistics.","properties":{"errors":{"default":0,"description":"The number of errors.","format":"int64","type":"integer"},"inflight":{"default":0,"description":"The number of inflight requests.","format":"int64","type":"integer"},"total":{"default":0,"description":"The number of requests.","format":"int64","type":"integer"}},"type":"object"},"JetstreamConfig":{"description":"Jetstream configuration.","properties":{"domain":{"default":"","description":"The domain.","type":"string"},"max_memory":{"default":0,"description":"The max memory.","format":"int64","type":"integer"},"max_storage":{"default":0,"description":"The max storage.","format":"int64","type":"integer"},"store_dir":{"default":"","description":"The store directory.","type":"string"}},"type":"object"},"JetstreamStats":{"description":"Jetstream statistics.","properties":{"accounts":{"default":0,"description":"The number of accounts.","format":"int64","type":"integer"},"api":{"allOf":[{"$ref":"#/components/schemas/JetstreamApiStats"}],"default":{"errors":0,"inflight":0,"total":0},"description":"API stats."},"ha_assets":{"default":0,"description":"The number of HA assets.","format":"int64","type":"integer"},"memory":{"default":0,"description":"The memory used by the Jetstream server.","format":"int64","type":"integer"},"reserved_memory":{"default":0,"description":"The reserved memory for the Jetstream server.","format":"int64","type":"integer"},"reserved_store":{"default":0,"description":"The reserved storage for the Jetstream server.","format":"int64","type":"integer"},"store":{"default":0,"description":"The storage used by the Jetstream server.","format":"int64","type":"integer"}},"type":"object"},"LeafNode":{"description":"Leaf node information.","properties":{"auth_timeout":{"default":0,"description":"The auth timeout of the leaf node.","format":"int64","type":"integer"},"host":{"default":"","description":"The host of the leaf node.","type":"string"},"port":{"default":0,"description":"The port of the leaf node.","format":"int64","type":"integer"},"tls_timeout":{"default":0,"description":"The TLS timeout for the leaf node.","format":"int64","type":"integer"}},"type":"object"},"Mass":{"description":"The mass response.","properties":{"mass":{"description":"The mass.","format":"double","type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitMass"}],"description":"The output unit for the mass."}},"required":["mass","output_unit"],"type":"object"},"MetaClusterInfo":{"description":"Jetstream statistics.","properties":{"cluster_size":{"default":0,"description":"The size of the cluster.","format":"int64","type":"integer"},"leader":{"default":"","description":"The leader of the cluster.","type":"string"},"name":{"default":"","description":"The name of the cluster.","type":"string"}},"type":"object"},"Metadata":{"description":"Metadata about our currently running server.\n\nThis is mostly used for internal purposes and debugging.","properties":{"cache":{"allOf":[{"$ref":"#/components/schemas/CacheMetadata"}],"description":"Metadata about our cache."},"environment":{"allOf":[{"$ref":"#/components/schemas/Environment"}],"description":"The environment we are running in."},"fs":{"allOf":[{"$ref":"#/components/schemas/FileSystemMetadata"}],"description":"Metadata about our file system."},"git_hash":{"description":"The git hash of the server.","type":"string"},"pubsub":{"allOf":[{"$ref":"#/components/schemas/Connection"}],"description":"Metadata about our pub-sub connection."}},"required":["cache","environment","fs","git_hash","pubsub"],"type":"object"},"Method":{"description":"The Request Method (VERB)\n\nThis type also contains constants for a number of common HTTP methods such as GET, POST, etc.\n\nCurrently includes 8 variants representing the 8 methods defined in [RFC 7230](https://tools.ietf.org/html/rfc7231#section-4.1), plus PATCH, and an Extension variant for all extensions.","oneOf":[{"description":"The `OPTIONS` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.2.1).","enum":["OPTIONS"],"type":"string"},{"description":"The `GET` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.1).","enum":["GET"],"type":"string"},{"description":"The `POST` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.1).","enum":["POST"],"type":"string"},{"description":"The `PUT` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.1).","enum":["PUT"],"type":"string"},{"description":"The `DELETE` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.5).","enum":["DELETE"],"type":"string"},{"description":"The `HEAD` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.2).","enum":["HEAD"],"type":"string"},{"description":"The `TRACE` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3).","enum":["TRACE"],"type":"string"},{"description":"The `CONNECT` method as defined in [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.6).","enum":["CONNECT"],"type":"string"},{"description":"The `PATCH` method as defined in [RFC 5789](https://tools.ietf.org/html/rfc5789).","enum":["PATCH"],"type":"string"},{"description":"A catch all.","enum":["EXTENSION"],"type":"string"}]},"ModelingCmd":{"description":"Commands that the KittyCAD engine can execute.","oneOf":[{"description":"Start a path.","properties":{"type":{"enum":["start_path"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Move the path's \"pen\".","properties":{"path":{"allOf":[{"$ref":"#/components/schemas/ModelingCmdId"}],"description":"The ID of the command which created the path."},"to":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Where the path's pen should be."},"type":{"enum":["move_path_pen"],"type":"string"}},"required":["path","to","type"],"type":"object"},{"description":"Extend a path by adding a new segment which starts at the path's \"pen\". If no \"pen\" location has been set before (via `MovePen`), then the pen is at the origin.","properties":{"path":{"allOf":[{"$ref":"#/components/schemas/ModelingCmdId"}],"description":"The ID of the command which created the path."},"segment":{"allOf":[{"$ref":"#/components/schemas/PathSegment"}],"description":"Segment to append to the path. This segment will implicitly begin at the current \"pen\" location."},"type":{"enum":["extend_path"],"type":"string"}},"required":["path","segment","type"],"type":"object"},{"description":"Extrude a 2D solid.","properties":{"cap":{"description":"Whether to cap the extrusion with a face, or not. If true, the resulting solid will be closed on all sides, like a dice. If false, it will be open on one side, like a drinking glass.","type":"boolean"},"distance":{"description":"How far off the plane to extrude","format":"double","type":"number"},"target":{"allOf":[{"$ref":"#/components/schemas/ModelingCmdId"}],"description":"Which sketch to extrude. Must be a closed 2D solid."},"type":{"enum":["extrude"],"type":"string"}},"required":["cap","distance","target","type"],"type":"object"},{"description":"Closes a path, converting it to a 2D solid.","properties":{"path_id":{"description":"Which path to close.","format":"uuid","type":"string"},"type":{"enum":["close_path"],"type":"string"}},"required":["path_id","type"],"type":"object"},{"description":"Camera drag started.","properties":{"interaction":{"allOf":[{"$ref":"#/components/schemas/CameraDragInteractionType"}],"description":"The type of camera drag interaction."},"type":{"enum":["camera_drag_start"],"type":"string"},"window":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"The initial mouse position."}},"required":["interaction","type","window"],"type":"object"},{"description":"Camera drag continued.","properties":{"interaction":{"allOf":[{"$ref":"#/components/schemas/CameraDragInteractionType"}],"description":"The type of camera drag interaction."},"sequence":{"description":"Logical timestamp. The client should increment this with every event in the current mouse drag. That way, if the events are being sent over an unordered channel, the API can ignore the older events.","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"type":{"enum":["camera_drag_move"],"type":"string"},"window":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"The current mouse position."}},"required":["interaction","type","window"],"type":"object"},{"description":"Camera drag ended.","properties":{"interaction":{"allOf":[{"$ref":"#/components/schemas/CameraDragInteractionType"}],"description":"The type of camera drag interaction."},"type":{"enum":["camera_drag_end"],"type":"string"},"window":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"The final mouse position."}},"required":["interaction","type","window"],"type":"object"},{"description":"Change what the default camera is looking at.","properties":{"center":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"What the camera is looking at. Center of the camera's field of vision"},"type":{"enum":["default_camera_look_at"],"type":"string"},"up":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Which way is \"up\", from the camera's point of view."},"vantage":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Where the camera is positioned"}},"required":["center","type","up","vantage"],"type":"object"},{"description":"Adjust zoom of the default camera.","properties":{"magnitude":{"description":"Move the camera forward along the vector it's looking at, by this magnitudedefaultCameraZoom. Basically, how much should the camera move forward by.","format":"float","type":"number"},"type":{"enum":["default_camera_zoom"],"type":"string"}},"required":["magnitude","type"],"type":"object"},{"description":"Enable sketch mode, where users can sketch 2D geometry. Users choose a plane to sketch on.","properties":{"animated":{"description":"Should we animate or snap for the camera transition?","type":"boolean"},"distance_to_plane":{"description":"How far to the sketching plane?","format":"float","type":"number"},"origin":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"What's the origin of the sketching plane?"},"ortho":{"description":"Should the camera use orthographic projection? In other words, should an object's size in the rendered image stay constant regardless of its distance from the camera.","type":"boolean"},"type":{"enum":["default_camera_enable_sketch_mode"],"type":"string"},"x_axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Which 3D axis of the scene should be the X axis of the sketching plane?"},"y_axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Which 3D axis of the scene should be the Y axis of the sketching plane?"}},"required":["animated","distance_to_plane","origin","ortho","type","x_axis","y_axis"],"type":"object"},{"description":"Disable sketch mode, from the default camera.","properties":{"type":{"enum":["default_camera_disable_sketch_mode"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Focus default camera on object.","properties":{"type":{"enum":["default_camera_focus_on"],"type":"string"},"uuid":{"description":"UUID of object to focus on.","format":"uuid","type":"string"}},"required":["type","uuid"],"type":"object"},{"description":"Export the scene to a file.","properties":{"entity_ids":{"description":"IDs of the entities to be exported. If this is empty, then all entities are exported.","items":{"format":"uuid","type":"string"},"type":"array"},"format":{"allOf":[{"$ref":"#/components/schemas/OutputFormat"}],"description":"The file format to export to."},"source_unit":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"Select the unit interpretation of exported objects."},"type":{"enum":["export"],"type":"string"}},"required":["entity_ids","format","source_unit","type"],"type":"object"},{"description":"What is this entity's parent?","properties":{"entity_id":{"description":"ID of the entity being queried.","format":"uuid","type":"string"},"type":{"enum":["entity_get_parent_id"],"type":"string"}},"required":["entity_id","type"],"type":"object"},{"description":"How many children does the entity have?","properties":{"entity_id":{"description":"ID of the entity being queried.","format":"uuid","type":"string"},"type":{"enum":["entity_get_num_children"],"type":"string"}},"required":["entity_id","type"],"type":"object"},{"description":"What is the UUID of this entity's n-th child?","properties":{"child_index":{"description":"Index into the entity's list of children.","format":"uint32","minimum":0,"type":"integer"},"entity_id":{"description":"ID of the entity being queried.","format":"uuid","type":"string"},"type":{"enum":["entity_get_child_uuid"],"type":"string"}},"required":["child_index","entity_id","type"],"type":"object"},{"description":"What are all UUIDs of this entity's children?","properties":{"entity_id":{"description":"ID of the entity being queried.","format":"uuid","type":"string"},"type":{"enum":["entity_get_all_child_uuids"],"type":"string"}},"required":["entity_id","type"],"type":"object"},{"description":"Enter edit mode","properties":{"target":{"description":"The edit target","format":"uuid","type":"string"},"type":{"enum":["edit_mode_enter"],"type":"string"}},"required":["target","type"],"type":"object"},{"description":"Exit edit mode","properties":{"type":{"enum":["edit_mode_exit"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Modifies the selection by simulating a \"mouse click\" at the given x,y window coordinate Returns ID of whatever was selected.","properties":{"selected_at_window":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Where in the window was selected"},"selection_type":{"allOf":[{"$ref":"#/components/schemas/SceneSelectionType"}],"description":"What entity was selected?"},"type":{"enum":["select_with_point"],"type":"string"}},"required":["selected_at_window","selection_type","type"],"type":"object"},{"description":"Clear the selection","properties":{"type":{"enum":["select_clear"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Adds one or more entities (by UUID) to the selection.","properties":{"entities":{"description":"Which entities to select","items":{"format":"uuid","type":"string"},"type":"array"},"type":{"enum":["select_add"],"type":"string"}},"required":["entities","type"],"type":"object"},{"description":"Removes one or more entities (by UUID) from the selection.","properties":{"entities":{"description":"Which entities to unselect","items":{"format":"uuid","type":"string"},"type":"array"},"type":{"enum":["select_remove"],"type":"string"}},"required":["entities","type"],"type":"object"},{"description":"Replaces the current selection with these new entities (by UUID). Equivalent to doing SelectClear then SelectAdd.","properties":{"entities":{"description":"Which entities to select","items":{"format":"uuid","type":"string"},"type":"array"},"type":{"enum":["select_replace"],"type":"string"}},"required":["entities","type"],"type":"object"},{"description":"Find all IDs of selected entities","properties":{"type":{"enum":["select_get"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Changes the current highlighted entity to whichever one is at the given window coordinate. If there's no entity at this location, clears the highlight.","properties":{"selected_at_window":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Coordinates of the window being clicked"},"sequence":{"description":"Logical timestamp. The client should increment this with every event in the current mouse drag. That way, if the events are being sent over an unordered channel, the API can ignore the older events.","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"type":{"enum":["highlight_set_entity"],"type":"string"}},"required":["selected_at_window","type"],"type":"object"},{"description":"Changes the current highlighted entity to these entities.","properties":{"entities":{"description":"Highlight these entities.","items":{"format":"uuid","type":"string"},"type":"array"},"type":{"enum":["highlight_set_entities"],"type":"string"}},"required":["entities","type"],"type":"object"},{"description":"Create a new annotation","properties":{"annotation_type":{"allOf":[{"$ref":"#/components/schemas/AnnotationType"}],"description":"What type of annotation to create."},"clobber":{"description":"If true, any existing drawables within the obj will be replaced (the object will be reset)","type":"boolean"},"options":{"allOf":[{"$ref":"#/components/schemas/AnnotationOptions"}],"description":"What should the annotation contain?"},"type":{"enum":["new_annotation"],"type":"string"}},"required":["annotation_type","clobber","options","type"],"type":"object"},{"description":"Update an annotation","properties":{"annotation_id":{"description":"Which annotation to update","format":"uuid","type":"string"},"options":{"allOf":[{"$ref":"#/components/schemas/AnnotationOptions"}],"description":"If any of these fields are set, they will overwrite the previous options for the annotation."},"type":{"enum":["update_annotation"],"type":"string"}},"required":["annotation_id","options","type"],"type":"object"},{"description":"Hide or show an object","properties":{"hidden":{"description":"Whether or not the object should be hidden.","type":"boolean"},"object_id":{"description":"Which object to change","format":"uuid","type":"string"},"type":{"enum":["object_visible"],"type":"string"}},"required":["hidden","object_id","type"],"type":"object"},{"description":"Bring an object to the front of the scene","properties":{"object_id":{"description":"Which object to change","format":"uuid","type":"string"},"type":{"enum":["object_bring_to_front"],"type":"string"}},"required":["object_id","type"],"type":"object"},{"description":"What type of entity is this?","properties":{"entity_id":{"description":"ID of the entity being queried.","format":"uuid","type":"string"},"type":{"enum":["get_entity_type"],"type":"string"}},"required":["entity_id","type"],"type":"object"},{"description":"Add a hole to a Solid2d object before extruding it.","properties":{"hole_id":{"description":"The id of the path to use as the inner profile (hole).","format":"uuid","type":"string"},"object_id":{"description":"Which object to add the hole to.","format":"uuid","type":"string"},"type":{"enum":["solid2d_add_hole"],"type":"string"}},"required":["hole_id","object_id","type"],"type":"object"},{"description":"Gets all faces which use the given edge.","properties":{"edge_id":{"description":"Which edge you want the faces of.","format":"uuid","type":"string"},"object_id":{"description":"Which object is being queried.","format":"uuid","type":"string"},"type":{"enum":["solid3d_get_all_edge_faces"],"type":"string"}},"required":["edge_id","object_id","type"],"type":"object"},{"description":"Gets all edges which are opposite the given edge, across all possible faces.","properties":{"along_vector":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"If given, ohnly faces parallel to this vector will be considered.","nullable":true},"edge_id":{"description":"Which edge you want the opposites of.","format":"uuid","type":"string"},"object_id":{"description":"Which object is being queried.","format":"uuid","type":"string"},"type":{"enum":["solid3d_get_all_opposite_edges"],"type":"string"}},"required":["edge_id","object_id","type"],"type":"object"},{"description":"Gets the edge opposite the given edge, along the given face.","properties":{"edge_id":{"description":"Which edge you want the opposite of.","format":"uuid","type":"string"},"face_id":{"description":"Which face is used to figure out the opposite edge?","format":"uuid","type":"string"},"object_id":{"description":"Which object is being queried.","format":"uuid","type":"string"},"type":{"enum":["solid3d_get_opposite_edge"],"type":"string"}},"required":["edge_id","face_id","object_id","type"],"type":"object"},{"description":"Gets the next adjacent edge for the given edge, along the given face.","properties":{"edge_id":{"description":"Which edge you want the opposite of.","format":"uuid","type":"string"},"face_id":{"description":"Which face is used to figure out the opposite edge?","format":"uuid","type":"string"},"object_id":{"description":"Which object is being queried.","format":"uuid","type":"string"},"type":{"enum":["solid3d_get_next_adjacent_edge"],"type":"string"}},"required":["edge_id","face_id","object_id","type"],"type":"object"},{"description":"Gets the previous adjacent edge for the given edge, along the given face.","properties":{"edge_id":{"description":"Which edge you want the opposite of.","format":"uuid","type":"string"},"face_id":{"description":"Which face is used to figure out the opposite edge?","format":"uuid","type":"string"},"object_id":{"description":"Which object is being queried.","format":"uuid","type":"string"},"type":{"enum":["solid3d_get_prev_adjacent_edge"],"type":"string"}},"required":["edge_id","face_id","object_id","type"],"type":"object"},{"description":"Sends object to front or back.","properties":{"front":{"description":"Bring to front = true, send to back = false.","type":"boolean"},"object_id":{"description":"Which object is being changed.","format":"uuid","type":"string"},"type":{"enum":["send_object"],"type":"string"}},"required":["front","object_id","type"],"type":"object"},{"description":"Set opacity of the entity.","properties":{"entity_id":{"description":"Which entity is being changed.","format":"uuid","type":"string"},"opacity":{"description":"How transparent should it be? 0 or lower is totally transparent. 1 or greater is totally opaque.","format":"float","type":"number"},"type":{"enum":["entity_set_opacity"],"type":"string"}},"required":["entity_id","opacity","type"],"type":"object"},{"description":"Fade the entity in or out.","properties":{"duration_seconds":{"default":0.4000000059604645,"description":"How many seconds the animation should take.","format":"float","type":"number"},"entity_id":{"description":"Which entity is being changed.","format":"uuid","type":"string"},"fade_in":{"description":"Fade in = true, fade out = false.","type":"boolean"},"type":{"enum":["entity_fade"],"type":"string"}},"required":["entity_id","fade_in","type"],"type":"object"},{"description":"Make a plane.","properties":{"clobber":{"description":"If true, any existing drawables within the obj will be replaced (the object will be reset)","type":"boolean"},"hide":{"description":"If true, the plane will be created but hidden initially.","nullable":true,"type":"boolean"},"origin":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Origin of the plane"},"size":{"description":"What should the plane's span/extent? When rendered visually, this is both the width and height along X and Y axis respectively.","format":"double","type":"number"},"type":{"enum":["make_plane"],"type":"string"},"x_axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"What should the plane's X axis be?"},"y_axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"What should the plane's Y axis be?"}},"required":["clobber","origin","size","type","x_axis","y_axis"],"type":"object"},{"description":"Set the plane's color.","properties":{"color":{"allOf":[{"$ref":"#/components/schemas/Color"}],"description":"What color it should be."},"plane_id":{"description":"Which plane is being changed.","format":"uuid","type":"string"},"type":{"enum":["plane_set_color"],"type":"string"}},"required":["color","plane_id","type"],"type":"object"},{"description":"Set the active tool.","properties":{"tool":{"allOf":[{"$ref":"#/components/schemas/SceneToolType"}],"description":"What tool should be active."},"type":{"enum":["set_tool"],"type":"string"}},"required":["tool","type"],"type":"object"},{"description":"Send a mouse move event.","properties":{"sequence":{"description":"Logical timestamp. The client should increment this with every event in the current mouse drag. That way, if the events are being sent over an unordered channel, the API can ignore the older events.","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"type":{"enum":["mouse_move"],"type":"string"},"window":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Where the mouse is"}},"required":["type","window"],"type":"object"},{"description":"Send a mouse click event. Updates modified/selected entities.","properties":{"type":{"enum":["mouse_click"],"type":"string"},"window":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Where the mouse is"}},"required":["type","window"],"type":"object"},{"description":"Enable sketch mode on the given plane.","properties":{"animated":{"description":"Animate the transition to sketch mode.","type":"boolean"},"disable_camera_with_plane":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Disable the camera entirely for sketch mode and sketch on a plane (this would be the normal of that plane).","nullable":true},"ortho":{"description":"Use an orthographic camera.","type":"boolean"},"plane_id":{"description":"Sketch on this plane.","format":"uuid","type":"string"},"type":{"enum":["sketch_mode_enable"],"type":"string"}},"required":["animated","ortho","plane_id","type"],"type":"object"},{"description":"Disable sketch mode.","properties":{"type":{"enum":["sketch_mode_disable"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Get type of a given curve.","properties":{"curve_id":{"description":"Which curve to query.","format":"uuid","type":"string"},"type":{"enum":["curve_get_type"],"type":"string"}},"required":["curve_id","type"],"type":"object"},{"description":"Get control points of a given curve.","properties":{"curve_id":{"description":"Which curve to query.","format":"uuid","type":"string"},"type":{"enum":["curve_get_control_points"],"type":"string"}},"required":["curve_id","type"],"type":"object"},{"description":"Take a snapshot.","properties":{"format":{"allOf":[{"$ref":"#/components/schemas/ImageFormat"}],"description":"What image format to return."},"type":{"enum":["take_snapshot"],"type":"string"}},"required":["format","type"],"type":"object"},{"description":"Add a gizmo showing the axes.","properties":{"clobber":{"description":"If true, any existing drawables within the obj will be replaced (the object will be reset)","type":"boolean"},"gizmo_mode":{"description":"If true, axes gizmo will be placed in the corner of the screen. If false, it will be placed at the origin of the scene.","type":"boolean"},"type":{"enum":["make_axes_gizmo"],"type":"string"}},"required":["clobber","gizmo_mode","type"],"type":"object"},{"description":"Query the given path","properties":{"path_id":{"description":"Which path to query","format":"uuid","type":"string"},"type":{"enum":["path_get_info"],"type":"string"}},"required":["path_id","type"],"type":"object"},{"description":"Get curves for vertices within a path","properties":{"path_id":{"description":"Which path to query","format":"uuid","type":"string"},"type":{"enum":["path_get_curve_uuids_for_vertices"],"type":"string"},"vertex_ids":{"description":"IDs of the vertices for which to obtain curve ids from","items":{"format":"uuid","type":"string"},"type":"array"}},"required":["path_id","type","vertex_ids"],"type":"object"},{"description":"Get vertices within a path","properties":{"path_id":{"description":"Which path to query","format":"uuid","type":"string"},"type":{"enum":["path_get_vertex_uuids"],"type":"string"}},"required":["path_id","type"],"type":"object"},{"description":"Start dragging mouse.","properties":{"type":{"enum":["handle_mouse_drag_start"],"type":"string"},"window":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"The mouse position."}},"required":["type","window"],"type":"object"},{"description":"Continue dragging mouse.","properties":{"sequence":{"description":"Logical timestamp. The client should increment this with every event in the current mouse drag. That way, if the events are being sent over an unordered channel, the API can ignore the older events.","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"type":{"enum":["handle_mouse_drag_move"],"type":"string"},"window":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"The mouse position."}},"required":["type","window"],"type":"object"},{"description":"Stop dragging mouse.","properties":{"type":{"enum":["handle_mouse_drag_end"],"type":"string"},"window":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"The mouse position."}},"required":["type","window"],"type":"object"},{"description":"Remove scene objects.","properties":{"object_ids":{"description":"Objects to remove.","items":{"format":"uuid","type":"string"},"type":"array","uniqueItems":true},"type":{"enum":["remove_scene_objects"],"type":"string"}},"required":["object_ids","type"],"type":"object"},{"description":"Utility method. Performs both a ray cast and projection to plane-local coordinates. Returns the plane coordinates for the given window coordinates.","properties":{"plane_id":{"description":"The plane you're intersecting against.","format":"uuid","type":"string"},"type":{"enum":["plane_intersect_and_project"],"type":"string"},"window":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Window coordinates where the ray cast should be aimed."}},"required":["plane_id","type","window"],"type":"object"},{"description":"Find the start and end of a curve.","properties":{"curve_id":{"description":"ID of the curve being queried.","format":"uuid","type":"string"},"type":{"enum":["curve_get_end_points"],"type":"string"}},"required":["curve_id","type"],"type":"object"},{"description":"Reconfigure the stream.","properties":{"fps":{"description":"Frames per second.","format":"uint32","minimum":0,"type":"integer"},"height":{"description":"Height of the stream.","format":"uint32","minimum":0,"type":"integer"},"type":{"enum":["reconfigure_stream"],"type":"string"},"width":{"description":"Width of the stream.","format":"uint32","minimum":0,"type":"integer"}},"required":["fps","height","type","width"],"type":"object"},{"description":"Import files to the current model.","properties":{"files":{"description":"Files to import.","items":{"$ref":"#/components/schemas/ImportFile"},"type":"array"},"format":{"allOf":[{"$ref":"#/components/schemas/InputFormat"}],"description":"Input file format."},"type":{"enum":["import_files"],"type":"string"}},"required":["files","format","type"],"type":"object"},{"description":"Get the mass of entities in the scene or the default scene.","properties":{"entity_ids":{"description":"IDs of the entities to get the mass of. If this is empty, then the default scene is included in the mass.","items":{"format":"uuid","type":"string"},"type":"array"},"material_density":{"description":"The material density.","format":"double","type":"number"},"material_density_unit":{"allOf":[{"$ref":"#/components/schemas/UnitDensity"}],"description":"The material density unit."},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitMass"}],"description":"The output unit for the mass."},"source_unit":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"Select the unit interpretation of distances in the scene."},"type":{"enum":["mass"],"type":"string"}},"required":["entity_ids","material_density","material_density_unit","output_unit","source_unit","type"],"type":"object"},{"description":"Get the density of entities in the scene or the default scene.","properties":{"entity_ids":{"description":"IDs of the entities to get the density of. If this is empty, then the default scene is included in the density.","items":{"format":"uuid","type":"string"},"type":"array"},"material_mass":{"description":"The material mass.","format":"double","type":"number"},"material_mass_unit":{"allOf":[{"$ref":"#/components/schemas/UnitMass"}],"description":"The material mass unit."},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitDensity"}],"description":"The output unit for the density."},"source_unit":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"Select the unit interpretation of distances in the scene."},"type":{"enum":["density"],"type":"string"}},"required":["entity_ids","material_mass","material_mass_unit","output_unit","source_unit","type"],"type":"object"},{"description":"Get the volume of entities in the scene or the default scene.","properties":{"entity_ids":{"description":"IDs of the entities to get the volume of. If this is empty, then the default scene is included in the volume.","items":{"format":"uuid","type":"string"},"type":"array"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitVolume"}],"description":"The output unit for the volume."},"source_unit":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"Select the unit interpretation of distances in the scene."},"type":{"enum":["volume"],"type":"string"}},"required":["entity_ids","output_unit","source_unit","type"],"type":"object"},{"description":"Get the center of mass of entities in the scene or the default scene.","properties":{"entity_ids":{"description":"IDs of the entities to get the center of mass of. If this is empty, then the default scene is included in the center of mass.","items":{"format":"uuid","type":"string"},"type":"array"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"The output unit for the center of mass."},"source_unit":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"Select the unit interpretation of distances in the scene."},"type":{"enum":["center_of_mass"],"type":"string"}},"required":["entity_ids","output_unit","source_unit","type"],"type":"object"},{"description":"Get the surface area of entities in the scene or the default scene.","properties":{"entity_ids":{"description":"IDs of the entities to get the surface area of. If this is empty, then the default scene is included in the surface area.","items":{"format":"uuid","type":"string"},"type":"array"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitArea"}],"description":"The output unit for the surface area."},"source_unit":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"Select the unit interpretation of distances in the scene."},"type":{"enum":["surface_area"],"type":"string"}},"required":["entity_ids","output_unit","source_unit","type"],"type":"object"},{"description":"Get the plane of the sketch mode. This is useful for getting the normal of the plane after a user selects a plane.","properties":{"type":{"enum":["get_sketch_mode_plane"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Constrain a curve.","properties":{"constraint_bound":{"allOf":[{"$ref":"#/components/schemas/PathComponentConstraintBound"}],"description":"Which constraint to apply."},"constraint_type":{"allOf":[{"$ref":"#/components/schemas/PathComponentConstraintType"}],"description":"What part of the curve should be constrained."},"object_id":{"description":"Which curve to constrain.","format":"uuid","type":"string"},"type":{"enum":["curve_set_constraint"],"type":"string"}},"required":["constraint_bound","constraint_type","object_id","type"],"type":"object"},{"description":"Sketch on some entity (e.g. a plane, a face)","properties":{"animated":{"description":"Should we animate or snap for the camera transition?","type":"boolean"},"entity_id":{"description":"Which entity to sketch on.","format":"uuid","type":"string"},"ortho":{"description":"Should the camera use orthographic projection? In other words, should an object's size in the rendered image stay constant regardless of its distance from the camera.","type":"boolean"},"type":{"enum":["enable_sketch_mode"],"type":"string"}},"required":["animated","entity_id","ortho","type"],"type":"object"},{"description":"Set the material properties of an object","properties":{"ambient_occlusion":{"description":"Ambient Occlusion of the new material","format":"float","type":"number"},"color":{"allOf":[{"$ref":"#/components/schemas/Color"}],"description":"Color of the new material"},"metalness":{"description":"Metalness of the new material","format":"float","type":"number"},"object_id":{"description":"Which object to change","format":"uuid","type":"string"},"roughness":{"description":"Roughness of the new material","format":"float","type":"number"},"type":{"enum":["object_set_material_params_pbr"],"type":"string"}},"required":["ambient_occlusion","color","metalness","object_id","roughness","type"],"type":"object"},{"description":"What is the distance between these two entities?","properties":{"distance_type":{"allOf":[{"$ref":"#/components/schemas/DistanceType"}],"description":"Type of distance to be measured."},"entity_id1":{"description":"ID of the first entity being queried.","format":"uuid","type":"string"},"entity_id2":{"description":"ID of the second entity being queried.","format":"uuid","type":"string"},"type":{"enum":["entity_get_distance"],"type":"string"}},"required":["distance_type","entity_id1","entity_id2","type"],"type":"object"}]},"ModelingCmdId":{"description":"All commands have unique IDs. These should be randomly generated.","format":"uuid","type":"string"},"ModelingCmdReq":{"description":"A graphics command submitted to the KittyCAD engine via the Modeling API.","properties":{"cmd":{"allOf":[{"$ref":"#/components/schemas/ModelingCmd"}],"description":"Which command to submit to the Kittycad engine."},"cmd_id":{"allOf":[{"$ref":"#/components/schemas/ModelingCmdId"}],"description":"ID of command being submitted."}},"required":["cmd","cmd_id"],"type":"object"},"MouseClick":{"description":"The response from the `MouseClick` command.","properties":{"entities_modified":{"description":"Entities that are modified.","items":{"format":"uuid","type":"string"},"type":"array"},"entities_selected":{"description":"Entities that are selected.","items":{"format":"uuid","type":"string"},"type":"array"}},"required":["entities_modified","entities_selected"],"type":"object"},"NewAddress":{"description":"The struct that is used to create a new record. This is automatically generated and has all the same fields as the main struct only it is missing the `id`.","properties":{"city":{"description":"The city component.","type":"string"},"country":{"allOf":[{"$ref":"#/components/schemas/CountryCode"}],"description":"The country component. This is a two-letter ISO country code."},"state":{"description":"The state component.","type":"string"},"street1":{"description":"The first street component.","type":"string"},"street2":{"description":"The second street component.","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID that this address belongs to."},"zip":{"description":"The zip component.","type":"string"}},"required":["country","user_id"],"type":"object"},"OAuth2ClientInfo":{"description":"Information about an OAuth 2.0 client.","properties":{"csrf_token":{"description":"Value used for [CSRF](https://tools.ietf.org/html/rfc6749#section-10.12) protection via the `state` parameter.","type":"string"},"pkce_code_verifier":{"description":"Code Verifier used for [PKCE]((https://tools.ietf.org/html/rfc7636)) protection via the `code_verifier` parameter. The value must have a minimum length of 43 characters and a maximum length of 128 characters. Each character must be ASCII alphanumeric or one of the characters \"-\" / \".\" / \"_\" / \"~\".","nullable":true,"type":"string"},"url":{"description":"The URL for consent.","type":"string"}},"type":"object"},"OAuth2GrantType":{"description":"An OAuth 2.0 Grant Type. These are documented here: <https://oauth.net/2/grant-types/>.","oneOf":[{"description":"An OAuth 2.0 Device Authorization Grant.","enum":["urn:ietf:params:oauth:grant-type:device_code"],"type":"string"}]},"OkModelingCmdResponse":{"description":"A successful response from a modeling command. This can be one of several types of responses, depending on the command.","oneOf":[{"description":"An empty response, used for any command that does not explicitly have a response defined here.","properties":{"type":{"enum":["empty"],"type":"string"}},"required":["type"],"type":"object"},{"description":"The response from the `Export` command. When this is being performed over a websocket, this is sent as binary not JSON. The binary data can be deserialized as `bincode` into a `Vec<ExportFile>`.","properties":{"data":{"$ref":"#/components/schemas/Export"},"type":{"enum":["export"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `SelectWithPoint` command.","properties":{"data":{"$ref":"#/components/schemas/SelectWithPoint"},"type":{"enum":["select_with_point"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `HighlightSetEntity` command.","properties":{"data":{"$ref":"#/components/schemas/HighlightSetEntity"},"type":{"enum":["highlight_set_entity"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `EntityGetChildUuid` command.","properties":{"data":{"$ref":"#/components/schemas/EntityGetChildUuid"},"type":{"enum":["entity_get_child_uuid"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `EntityGetNumChildren` command.","properties":{"data":{"$ref":"#/components/schemas/EntityGetNumChildren"},"type":{"enum":["entity_get_num_children"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `EntityGetParentId` command.","properties":{"data":{"$ref":"#/components/schemas/EntityGetParentId"},"type":{"enum":["entity_get_parent_id"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `EntityGetAllChildUuids` command.","properties":{"data":{"$ref":"#/components/schemas/EntityGetAllChildUuids"},"type":{"enum":["entity_get_all_child_uuids"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `SelectGet` command.","properties":{"data":{"$ref":"#/components/schemas/SelectGet"},"type":{"enum":["select_get"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `GetEntityType` command.","properties":{"data":{"$ref":"#/components/schemas/GetEntityType"},"type":{"enum":["get_entity_type"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `EntityGetDistance` command.","properties":{"data":{"$ref":"#/components/schemas/EntityGetDistance"},"type":{"enum":["entity_get_distance"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `Solid3dGetAllEdgeFaces` command.","properties":{"data":{"$ref":"#/components/schemas/Solid3dGetAllEdgeFaces"},"type":{"enum":["solid3d_get_all_edge_faces"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `Solid3dGetAllOppositeEdges` command.","properties":{"data":{"$ref":"#/components/schemas/Solid3dGetAllOppositeEdges"},"type":{"enum":["solid3d_get_all_opposite_edges"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `Solid3dGetOppositeEdge` command.","properties":{"data":{"$ref":"#/components/schemas/Solid3dGetOppositeEdge"},"type":{"enum":["solid3d_get_opposite_edge"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `Solid3dGetPrevAdjacentEdge` command.","properties":{"data":{"$ref":"#/components/schemas/Solid3dGetPrevAdjacentEdge"},"type":{"enum":["solid3d_get_prev_adjacent_edge"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `Solid3dGetNextAdjacentEdge` command.","properties":{"data":{"$ref":"#/components/schemas/Solid3dGetNextAdjacentEdge"},"type":{"enum":["solid3d_get_next_adjacent_edge"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `MouseClick` command.","properties":{"data":{"$ref":"#/components/schemas/MouseClick"},"type":{"enum":["mouse_click"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `CurveGetType` command.","properties":{"data":{"$ref":"#/components/schemas/CurveGetType"},"type":{"enum":["curve_get_type"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `CurveGetControlPoints` command.","properties":{"data":{"$ref":"#/components/schemas/CurveGetControlPoints"},"type":{"enum":["curve_get_control_points"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `Take Snapshot` command.","properties":{"data":{"$ref":"#/components/schemas/TakeSnapshot"},"type":{"enum":["take_snapshot"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `Path Get Info` command.","properties":{"data":{"$ref":"#/components/schemas/PathGetInfo"},"type":{"enum":["path_get_info"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `Path Get Curve UUIDs for Vertices` command.","properties":{"data":{"$ref":"#/components/schemas/PathGetCurveUuidsForVertices"},"type":{"enum":["path_get_curve_uuids_for_vertices"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `Path Get Vertex UUIDs` command.","properties":{"data":{"$ref":"#/components/schemas/PathGetVertexUuids"},"type":{"enum":["path_get_vertex_uuids"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `PlaneIntersectAndProject` command.","properties":{"data":{"$ref":"#/components/schemas/PlaneIntersectAndProject"},"type":{"enum":["plane_intersect_and_project"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `CurveGetEndPoints` command.","properties":{"data":{"$ref":"#/components/schemas/CurveGetEndPoints"},"type":{"enum":["curve_get_end_points"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `ImportFiles` command.","properties":{"data":{"$ref":"#/components/schemas/ImportFiles"},"type":{"enum":["import_files"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `Mass` command.","properties":{"data":{"$ref":"#/components/schemas/Mass"},"type":{"enum":["mass"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `Volume` command.","properties":{"data":{"$ref":"#/components/schemas/Volume"},"type":{"enum":["volume"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `Density` command.","properties":{"data":{"$ref":"#/components/schemas/Density"},"type":{"enum":["density"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `SurfaceArea` command.","properties":{"data":{"$ref":"#/components/schemas/SurfaceArea"},"type":{"enum":["surface_area"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `CenterOfMass` command.","properties":{"data":{"$ref":"#/components/schemas/CenterOfMass"},"type":{"enum":["center_of_mass"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The response from the `GetSketchModePlane` command.","properties":{"data":{"$ref":"#/components/schemas/GetSketchModePlane"},"type":{"enum":["get_sketch_mode_plane"],"type":"string"}},"required":["data","type"],"type":"object"}]},"OkWebSocketResponseData":{"description":"The websocket messages this server sends.","oneOf":[{"description":"Information about the ICE servers.","properties":{"data":{"properties":{"ice_servers":{"description":"Information about the ICE servers.","items":{"$ref":"#/components/schemas/IceServer"},"type":"array"}},"required":["ice_servers"],"type":"object"},"type":{"enum":["ice_server_info"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The trickle ICE candidate response.","properties":{"data":{"properties":{"candidate":{"allOf":[{"$ref":"#/components/schemas/RtcIceCandidateInit"}],"description":"Information about the ICE candidate."}},"required":["candidate"],"type":"object"},"type":{"enum":["trickle_ice"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The SDP answer response.","properties":{"data":{"properties":{"answer":{"allOf":[{"$ref":"#/components/schemas/RtcSessionDescription"}],"description":"The session description."}},"required":["answer"],"type":"object"},"type":{"enum":["sdp_answer"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The modeling command response.","properties":{"data":{"properties":{"modeling_response":{"allOf":[{"$ref":"#/components/schemas/OkModelingCmdResponse"}],"description":"The result of the command."}},"required":["modeling_response"],"type":"object"},"type":{"enum":["modeling"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"The exported files.","properties":{"data":{"properties":{"files":{"description":"The exported files","items":{"$ref":"#/components/schemas/RawFile"},"type":"array"}},"required":["files"],"type":"object"},"type":{"enum":["export"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"Request a collection of metrics, to include WebRTC.","properties":{"data":{"type":"object"},"type":{"enum":["metrics_request"],"type":"string"}},"required":["data","type"],"type":"object"}]},"Onboarding":{"description":"Onboarding details","properties":{"first_call_from_their_machine_date":{"description":"When the user first called an endpoint from their machine (i.e. not a litterbox execution)","type":"string"},"first_litterbox_execute_date":{"description":"When the user first used the litterbox","type":"string"},"first_token_date":{"description":"When the user created their first token","type":"string"}},"type":"object"},"OutputFile":{"description":"Output file contents.","properties":{"contents":{"description":"The contents of the file. This is base64 encoded so we can ensure it is UTF-8 for JSON.","nullable":true,"type":"string"},"name":{"default":"","description":"The name of the file.","type":"string"}},"type":"object"},"OutputFormat":{"description":"Output format specifier.","oneOf":[{"description":"Autodesk Filmbox (FBX) format.","properties":{"storage":{"allOf":[{"$ref":"#/components/schemas/FbxStorage"}],"description":"Specifies which kind of FBX will be exported."},"type":{"enum":["fbx"],"type":"string"}},"required":["storage","type"],"type":"object"},{"description":"glTF 2.0. We refer to this as glTF since that is how our customers refer to it, although by default it will be in binary format and thus technically (glb). If you prefer ASCII output, you can set that option for the export.","properties":{"presentation":{"allOf":[{"$ref":"#/components/schemas/GltfPresentation"}],"description":"Specifies how the JSON will be presented."},"storage":{"allOf":[{"$ref":"#/components/schemas/GltfStorage"}],"description":"Specifies which kind of glTF 2.0 will be exported."},"type":{"enum":["gltf"],"type":"string"}},"required":["presentation","storage","type"],"type":"object"},{"description":"Wavefront OBJ format.","properties":{"coords":{"allOf":[{"$ref":"#/components/schemas/System"}],"description":"Co-ordinate system of output data.\n\nDefaults to the [KittyCAD co-ordinate system].\n\n[KittyCAD co-ordinate system]: ../coord/constant.KITTYCAD.html"},"type":{"enum":["obj"],"type":"string"},"units":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"Export length unit.\n\nDefaults to meters."}},"required":["coords","type","units"],"type":"object"},{"description":"The PLY Polygon File Format.","properties":{"coords":{"allOf":[{"$ref":"#/components/schemas/System"}],"description":"Co-ordinate system of output data.\n\nDefaults to the [KittyCAD co-ordinate system].\n\n[KittyCAD co-ordinate system]: ../coord/constant.KITTYCAD.html"},"selection":{"allOf":[{"$ref":"#/components/schemas/Selection"}],"description":"Export selection."},"storage":{"allOf":[{"$ref":"#/components/schemas/PlyStorage"}],"description":"The storage for the output PLY file."},"type":{"enum":["ply"],"type":"string"},"units":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"Export length unit.\n\nDefaults to meters."}},"required":["coords","selection","storage","type","units"],"type":"object"},{"description":"ISO 10303-21 (STEP) format.","properties":{"coords":{"allOf":[{"$ref":"#/components/schemas/System"}],"description":"Co-ordinate system of output data.\n\nDefaults to the [KittyCAD co-ordinate system].\n\n[KittyCAD co-ordinate system]: ../coord/constant.KITTYCAD.html"},"type":{"enum":["step"],"type":"string"}},"required":["coords","type"],"type":"object"},{"description":"*ST**ereo**L**ithography format.","properties":{"coords":{"allOf":[{"$ref":"#/components/schemas/System"}],"description":"Co-ordinate system of output data.\n\nDefaults to the [KittyCAD co-ordinate system].\n\n[KittyCAD co-ordinate system]: ../coord/constant.KITTYCAD.html"},"selection":{"allOf":[{"$ref":"#/components/schemas/Selection"}],"description":"Export selection."},"storage":{"allOf":[{"$ref":"#/components/schemas/StlStorage"}],"description":"Export storage."},"type":{"enum":["stl"],"type":"string"},"units":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"Export length unit.\n\nDefaults to meters."}},"required":["coords","selection","storage","type","units"],"type":"object"}]},"PathCommand":{"description":"The path component command type (within a Path)","enum":["move_to","line_to","bez_curve_to","nurbs_curve_to","add_arc"],"type":"string"},"PathComponentConstraintBound":{"description":"The path component constraint bounds type","enum":["unconstrained","partially_constrained","fully_constrained"],"type":"string"},"PathComponentConstraintType":{"description":"The path component constraint type","enum":["unconstrained","vertical","horizontal","equal_length","parallel","angle_between"],"type":"string"},"PathGetCurveUuidsForVertices":{"description":"The response from the `PathGetCurveUuidsForVertices` command.","properties":{"curve_ids":{"description":"The UUIDs of the curve entities.","items":{"format":"uuid","type":"string"},"type":"array"}},"required":["curve_ids"],"type":"object"},"PathGetInfo":{"description":"The response from the `PathGetInfo` command.","properties":{"segments":{"description":"All segments in the path, in the order they were added.","items":{"$ref":"#/components/schemas/PathSegmentInfo"},"type":"array"}},"required":["segments"],"type":"object"},"PathGetVertexUuids":{"description":"The response from the `PathGetVertexUuids` command.","properties":{"vertex_ids":{"description":"The UUIDs of the vertex entities.","items":{"format":"uuid","type":"string"},"type":"array"}},"required":["vertex_ids"],"type":"object"},"PathSegment":{"description":"A segment of a path. Paths are composed of many segments.","oneOf":[{"description":"A straight line segment. Goes from the current path \"pen\" to the given endpoint.","properties":{"end":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"End point of the line."},"relative":{"description":"Whether or not this line is a relative offset","type":"boolean"},"type":{"enum":["line"],"type":"string"}},"required":["end","relative","type"],"type":"object"},{"description":"A circular arc segment.","properties":{"angle_end":{"deprecated":true,"description":"End of the arc along circle's perimeter, in degrees. Deprecated: use `end` instead.","format":"double","type":"number"},"angle_start":{"deprecated":true,"description":"Start of the arc along circle's perimeter, in degrees. Deprecated: use `start` instead.","format":"double","type":"number"},"center":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Center of the circle"},"end":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"default":null,"description":"End of the arc along circle's perimeter. If not given, this will use `degrees_end` instead.","nullable":true},"radius":{"description":"Radius of the circle","format":"double","type":"number"},"relative":{"description":"Whether or not this arc is a relative offset","type":"boolean"},"start":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"default":null,"description":"Start of the arc along circle's perimeter. If not given, this will use `degrees_start` instead.","nullable":true},"type":{"enum":["arc"],"type":"string"}},"required":["angle_end","angle_start","center","radius","relative","type"],"type":"object"},{"description":"A cubic bezier curve segment. Start at the end of the current line, go through control point 1 and 2, then end at a given point.","properties":{"control1":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"First control point."},"control2":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Second control point."},"end":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Final control point."},"relative":{"description":"Whether or not this bezier is a relative offset","type":"boolean"},"type":{"enum":["bezier"],"type":"string"}},"required":["control1","control2","end","relative","type"],"type":"object"},{"description":"Adds a tangent arc from current pen position with the given radius and angle.","properties":{"offset":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"description":"Offset of the arc."},"radius":{"description":"Radius of the arc. Not to be confused with Raiders of the Lost Ark.","format":"double","type":"number"},"type":{"enum":["tangential_arc"],"type":"string"}},"required":["offset","radius","type"],"type":"object"},{"description":"Adds a tangent arc from current pen position to the new position.","properties":{"angle_snap_increment":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"description":"0 will be interpreted as none/null.","nullable":true},"to":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Where the arc should end. Must lie in the same plane as the current path pen position. Must not be colinear with current path pen position."},"type":{"enum":["tangential_arc_to"],"type":"string"}},"required":["to","type"],"type":"object"}]},"PathSegmentInfo":{"description":"Info about a path segment","properties":{"command":{"allOf":[{"$ref":"#/components/schemas/PathCommand"}],"description":"What is the path segment?"},"command_id":{"allOf":[{"$ref":"#/components/schemas/ModelingCmdId"}],"description":"Which command created this path? This field is absent if the path command is not actually creating a path segment, e.g. moving the pen doesn't create a path segment.","nullable":true},"relative":{"description":"Whether or not this segment is a relative offset","type":"boolean"}},"required":["command","relative"],"type":"object"},"PaymentIntent":{"description":"A payment intent response.","properties":{"client_secret":{"description":"The client secret is used for client-side retrieval using a publishable key. The client secret can be used to complete payment setup from your frontend. It should not be stored, logged, or exposed to anyone other than the customer. Make sure that you have TLS enabled on any page that includes the client secret.","type":"string"}},"required":["client_secret"],"type":"object"},"PaymentMethod":{"description":"A payment method.","properties":{"billing_info":{"allOf":[{"$ref":"#/components/schemas/BillingInfo"}],"description":"The billing info for the payment method."},"card":{"allOf":[{"$ref":"#/components/schemas/CardDetails"}],"description":"The card, if it is one. For our purposes, this is the only type of payment method that we support.","nullable":true},"created_at":{"description":"Time at which the object was created.","format":"date-time","type":"string"},"id":{"description":"Unique identifier for the object.","type":"string"},"metadata":{"additionalProperties":{"type":"string"},"default":{},"description":"Set of key-value pairs.","type":"object"},"type":{"allOf":[{"$ref":"#/components/schemas/PaymentMethodType"}],"description":"The type of payment method."}},"required":["billing_info","created_at","type"],"type":"object"},"PaymentMethodCardChecks":{"description":"Card checks.","properties":{"address_line1_check":{"description":"If a address line1 was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`.","type":"string"},"address_postal_code_check":{"description":"If a address postal code was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`.","type":"string"},"cvc_check":{"description":"If a CVC was provided, results of the check, one of `pass`, `fail`, `unavailable`, or `unchecked`.","type":"string"}},"type":"object"},"PaymentMethodType":{"description":"An enum representing the possible values of an `PaymentMethod`'s `type` field.","oneOf":[{"description":"A card payment method.","enum":["card"],"type":"string"}]},"PlaneIntersectAndProject":{"description":"Corresponding coordinates of given window coordinates, intersected on given plane.","properties":{"plane_coordinates":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Corresponding coordinates of given window coordinates, intersected on given plane.","nullable":true}},"type":"object"},"PlyStorage":{"description":"The storage for the output PLY file.","oneOf":[{"description":"Write numbers in their ascii representation (e.g. -13, 6.28, etc.). Properties are separated by spaces and elements are separated by line breaks.","enum":["ascii"],"type":"string"},{"description":"Encode payload as binary using little endian.","enum":["binary_little_endian"],"type":"string"},{"description":"Encode payload as binary using big endian.","enum":["binary_big_endian"],"type":"string"}]},"Point2d":{"description":"A point in 2D space","properties":{"x":{"format":"double","type":"number"},"y":{"format":"double","type":"number"}},"required":["x","y"],"type":"object"},"Point3d":{"description":"A point in 3D space","properties":{"x":{"format":"float","type":"number"},"y":{"format":"float","type":"number"},"z":{"format":"float","type":"number"}},"required":["x","y","z"],"type":"object"},"Pong":{"description":"The response from the `/ping` endpoint.","properties":{"message":{"description":"The pong response.","type":"string"}},"required":["message"],"type":"object"},"RawFile":{"description":"A raw file with unencoded contents to be passed over binary websockets. When raw files come back for exports it is sent as binary/bson, not text/json.","properties":{"contents":{"description":"The contents of the file.","items":{"format":"uint8","minimum":0,"type":"integer"},"type":"array"},"name":{"description":"The name of the file.","type":"string"}},"required":["contents","name"],"type":"object"},"RtcIceCandidateInit":{"description":"ICECandidateInit is used to serialize ice candidates","properties":{"candidate":{"description":"The candidate string associated with the object.","type":"string"},"sdpMLineIndex":{"description":"The index (starting at zero) of the m-line in the SDP this candidate is associated with.","format":"uint16","minimum":0,"nullable":true,"type":"integer"},"sdpMid":{"description":"The identifier of the \"media stream identification\" as defined in [RFC 8841](https://tools.ietf.org/html/rfc8841).","nullable":true,"type":"string"},"usernameFragment":{"description":"The username fragment (as defined in [RFC 8445](https://tools.ietf.org/html/rfc8445#section-5.2.1)) associated with the object.","nullable":true,"type":"string"}},"required":["candidate"],"type":"object"},"RtcSdpType":{"description":"SDPType describes the type of an SessionDescription.","oneOf":[{"description":"Unspecified indicates that the type is unspecified.","enum":["unspecified"],"type":"string"},{"description":"indicates that a description MUST be treated as an SDP offer.","enum":["offer"],"type":"string"},{"description":"indicates that a description MUST be treated as an SDP answer, but not a final answer. A description used as an SDP pranswer may be applied as a response to an SDP offer, or an update to a previously sent SDP pranswer.","enum":["pranswer"],"type":"string"},{"description":"indicates that a description MUST be treated as an SDP final answer, and the offer-answer exchange MUST be considered complete. A description used as an SDP answer may be applied as a response to an SDP offer or as an update to a previously sent SDP pranswer.","enum":["answer"],"type":"string"},{"description":"indicates that a description MUST be treated as canceling the current SDP negotiation and moving the SDP offer and answer back to what it was in the previous stable state. Note the local or remote SDP descriptions in the previous stable state could be null if there has not yet been a successful offer-answer negotiation.","enum":["rollback"],"type":"string"}]},"RtcSessionDescription":{"description":"SessionDescription is used to expose local and remote session descriptions.","properties":{"sdp":{"description":"SDP string.","type":"string"},"type":{"allOf":[{"$ref":"#/components/schemas/RtcSdpType"}],"description":"SDP type."}},"required":["sdp","type"],"type":"object"},"SceneSelectionType":{"description":"The type of scene selection change","oneOf":[{"description":"Replaces the selection","enum":["replace"],"type":"string"},{"description":"Adds to the selection","enum":["add"],"type":"string"},{"description":"Removes from the selection","enum":["remove"],"type":"string"}]},"SceneToolType":{"description":"The type of scene's active tool","enum":["camera_revolve","select","move","sketch_line","sketch_tangential_arc","sketch_curve","sketch_curve_mod"],"type":"string"},"SelectGet":{"description":"The response from the `SelectGet` command.","properties":{"entity_ids":{"description":"The UUIDs of the selected entities.","items":{"format":"uuid","type":"string"},"type":"array"}},"required":["entity_ids"],"type":"object"},"SelectWithPoint":{"description":"The response from the `SelectWithPoint` command.","properties":{"entity_id":{"description":"The UUID of the entity that was selected.","format":"uuid","nullable":true,"type":"string"}},"type":"object"},"Selection":{"description":"Data item selection.","oneOf":[{"description":"Visit the default scene.","properties":{"type":{"enum":["default_scene"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Visit the indexed scene.","properties":{"index":{"description":"The index.","format":"uint","minimum":0,"type":"integer"},"type":{"enum":["scene_by_index"],"type":"string"}},"required":["index","type"],"type":"object"},{"description":"Visit the first scene with the given name.","properties":{"name":{"description":"The name.","type":"string"},"type":{"enum":["scene_by_name"],"type":"string"}},"required":["name","type"],"type":"object"},{"description":"Visit the indexed mesh.","properties":{"index":{"description":"The index.","format":"uint","minimum":0,"type":"integer"},"type":{"enum":["mesh_by_index"],"type":"string"}},"required":["index","type"],"type":"object"},{"description":"Visit the first mesh with the given name.","properties":{"name":{"description":"The name.","type":"string"},"type":{"enum":["mesh_by_name"],"type":"string"}},"required":["name","type"],"type":"object"}]},"Session":{"description":"An authentication session.\n\nFor our UIs, these are automatically created by Next.js.","properties":{"created_at":{"description":"The date and time the session was created.","format":"date-time","title":"DateTime","type":"string"},"expires":{"description":"The date and time the session expires.","format":"date-time","title":"DateTime","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the session."},"session_token":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The session token."},"updated_at":{"description":"The date and time the session was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user that the session belongs to."}},"required":["created_at","expires","id","session_token","updated_at","user_id"],"type":"object"},"Solid3dGetAllEdgeFaces":{"description":"The response from the `Solid3dGetAllEdgeFaces` command.","properties":{"faces":{"description":"The UUIDs of the faces.","items":{"format":"uuid","type":"string"},"type":"array"}},"required":["faces"],"type":"object"},"Solid3dGetAllOppositeEdges":{"description":"The response from the `Solid3dGetAllOppositeEdges` command.","properties":{"edges":{"description":"The UUIDs of the edges.","items":{"format":"uuid","type":"string"},"type":"array"}},"required":["edges"],"type":"object"},"Solid3dGetNextAdjacentEdge":{"description":"The response from the `Solid3dGetNextAdjacentEdge` command.","properties":{"edge":{"description":"The UUID of the edge.","format":"uuid","nullable":true,"type":"string"}},"type":"object"},"Solid3dGetOppositeEdge":{"description":"The response from the `Solid3dGetOppositeEdge` command.","properties":{"edge":{"description":"The UUID of the edge.","format":"uuid","type":"string"}},"required":["edge"],"type":"object"},"Solid3dGetPrevAdjacentEdge":{"description":"The response from the `Solid3dGetPrevAdjacentEdge` command.","properties":{"edge":{"description":"The UUID of the edge.","format":"uuid","nullable":true,"type":"string"}},"type":"object"},"StlStorage":{"description":"Export storage.","oneOf":[{"description":"Plaintext encoding.","enum":["ascii"],"type":"string"},{"description":"Binary STL encoding.\n\nThis is the default setting.","enum":["binary"],"type":"string"}]},"SuccessWebSocketResponse":{"description":"Successful Websocket response.","properties":{"request_id":{"description":"Which request this is a response to. If the request was a modeling command, this is the modeling command ID. If no request ID was sent, this will be null.","format":"uuid","nullable":true,"type":"string"},"resp":{"allOf":[{"$ref":"#/components/schemas/OkWebSocketResponseData"}],"description":"The data sent with a successful response. This will be flattened into a 'type' and 'data' field."},"success":{"description":"Always true","type":"boolean"}},"required":["resp","success"],"type":"object"},"SurfaceArea":{"description":"The surface area response.","properties":{"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitArea"}],"description":"The output unit for the surface area."},"surface_area":{"description":"The surface area.","format":"double","type":"number"}},"required":["output_unit","surface_area"],"type":"object"},"System":{"description":"Co-ordinate system definition.\n\nThe `up` axis must be orthogonal to the `forward` axis.\n\nSee [cglearn.eu] for background reading.\n\n[cglearn.eu](https://cglearn.eu/pub/computer-graphics/introduction-to-geometry#material-coordinate-systems-1)","properties":{"forward":{"allOf":[{"$ref":"#/components/schemas/AxisDirectionPair"}],"description":"Axis the front face of a model looks along."},"up":{"allOf":[{"$ref":"#/components/schemas/AxisDirectionPair"}],"description":"Axis pointing up and away from a model."}},"required":["forward","up"],"type":"object"},"TakeSnapshot":{"description":"The response from the `TakeSnapshot` command.","properties":{"contents":{"description":"Contents of the image.","format":"byte","title":"String","type":"string"}},"required":["contents"],"type":"object"},"TextToCad":{"description":"A response from a text to CAD prompt.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"feedback":{"allOf":[{"$ref":"#/components/schemas/AiFeedback"}],"description":"Feedback from the user, if any.","nullable":true},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"model_version":{"description":"The version of the model.","type":"string"},"output_format":{"allOf":[{"$ref":"#/components/schemas/FileExportFormat"}],"description":"The output format of the model."},"outputs":{"additionalProperties":{"format":"byte","title":"String","type":"string"},"description":"The output of the model in the given file format the user requested, base64 encoded. The key of the map is the path of the output file.","type":"object"},"prompt":{"description":"The prompt.","type":"string"},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","model_version","output_format","prompt","status","updated_at","user_id"],"type":"object"},"TextToCadCreateBody":{"description":"Body for generating models from text.","properties":{"prompt":{"description":"The prompt for the model.","type":"string"}},"required":["prompt"],"type":"object"},"TextToCadResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/TextToCad"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"UnitAngle":{"description":"The valid types of angle formats.","oneOf":[{"description":"Degrees <https://en.wikipedia.org/wiki/Degree_(angle)>","enum":["degrees"],"type":"string"},{"description":"Radians <https://en.wikipedia.org/wiki/Radian>","enum":["radians"],"type":"string"}]},"UnitAngleConversion":{"description":"Result of converting between units.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"input":{"default":0.0,"description":"The input value.","format":"double","type":"number"},"input_unit":{"allOf":[{"$ref":"#/components/schemas/UnitAngle"}],"description":"The source format of the unit conversion."},"output":{"description":"The resulting value.","format":"double","nullable":true,"type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitAngle"}],"description":"The output format of the unit conversion."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","input_unit","output_unit","status","updated_at","user_id"],"type":"object"},"UnitArea":{"description":"The valid types of area units.","oneOf":[{"description":"Square centimeters <https://en.wikipedia.org/wiki/Square_centimeter>","enum":["cm2"],"type":"string"},{"description":"Square decimeters <https://en.wikipedia.org/wiki/Square_decimeter>","enum":["dm2"],"type":"string"},{"description":"Square feet <https://en.wikipedia.org/wiki/Square_foot>","enum":["ft2"],"type":"string"},{"description":"Square inches <https://en.wikipedia.org/wiki/Square_inch>","enum":["in2"],"type":"string"},{"description":"Square kilometers <https://en.wikipedia.org/wiki/Square_kilometer>","enum":["km2"],"type":"string"},{"description":"Square meters <https://en.wikipedia.org/wiki/Square_meter>","enum":["m2"],"type":"string"},{"description":"Square millimeters <https://en.wikipedia.org/wiki/Square_millimeter>","enum":["mm2"],"type":"string"},{"description":"Square yards <https://en.wikipedia.org/wiki/Square_mile>","enum":["yd2"],"type":"string"}]},"UnitAreaConversion":{"description":"Result of converting between units.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"input":{"default":0.0,"description":"The input value.","format":"double","type":"number"},"input_unit":{"allOf":[{"$ref":"#/components/schemas/UnitArea"}],"description":"The source format of the unit conversion."},"output":{"description":"The resulting value.","format":"double","nullable":true,"type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitArea"}],"description":"The output format of the unit conversion."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","input_unit","output_unit","status","updated_at","user_id"],"type":"object"},"UnitCurrent":{"description":"The valid types of current units.","oneOf":[{"description":"Amperes <https://en.wikipedia.org/wiki/Ampere>","enum":["amperes"],"type":"string"},{"description":"Microamperes <https://en.wikipedia.org/wiki/Microampere>","enum":["microamperes"],"type":"string"},{"description":"Milliamperes <https://en.wikipedia.org/wiki/Milliampere>","enum":["milliamperes"],"type":"string"},{"description":"Nanoamperes <https://en.wikipedia.org/wiki/Nanoampere>","enum":["nanoamperes"],"type":"string"}]},"UnitCurrentConversion":{"description":"Result of converting between units.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"input":{"default":0.0,"description":"The input value.","format":"double","type":"number"},"input_unit":{"allOf":[{"$ref":"#/components/schemas/UnitCurrent"}],"description":"The source format of the unit conversion."},"output":{"description":"The resulting value.","format":"double","nullable":true,"type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitCurrent"}],"description":"The output format of the unit conversion."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","input_unit","output_unit","status","updated_at","user_id"],"type":"object"},"UnitDensity":{"description":"The valid types for density units.","oneOf":[{"description":"Pounds per cubic feet.","enum":["lb:ft3"],"type":"string"},{"description":"Kilograms per cubic meter.","enum":["kg:m3"],"type":"string"}]},"UnitEnergy":{"description":"The valid types of energy units.","oneOf":[{"description":"British Thermal Unit (BTU) <https://en.wikipedia.org/wiki/British_thermal_unit>","enum":["btu"],"type":"string"},{"description":"Electron Volts (eV) <https://en.wikipedia.org/wiki/Electronvolt>","enum":["electronvolts"],"type":"string"},{"description":"Joules (or watt-seconds) <https://en.wikipedia.org/wiki/Joule>","enum":["joules"],"type":"string"},{"description":"Kilocalories (often just called calories) <https://en.wikipedia.org/wiki/Kilocalorie>","enum":["kilocalories"],"type":"string"},{"description":"Kilowatt hours (kWh) <https://en.wikipedia.org/wiki/Kilowatt-hour>","enum":["kilowatt_hours"],"type":"string"},{"description":"Watt hours (Wh) <https://en.wikipedia.org/wiki/Kilowatt-hour>","enum":["watt_hours"],"type":"string"}]},"UnitEnergyConversion":{"description":"Result of converting between units.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"input":{"default":0.0,"description":"The input value.","format":"double","type":"number"},"input_unit":{"allOf":[{"$ref":"#/components/schemas/UnitEnergy"}],"description":"The source format of the unit conversion."},"output":{"description":"The resulting value.","format":"double","nullable":true,"type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitEnergy"}],"description":"The output format of the unit conversion."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","input_unit","output_unit","status","updated_at","user_id"],"type":"object"},"UnitForce":{"description":"The valid types of force units.","oneOf":[{"description":"Dynes <https://en.wikipedia.org/wiki/Dyne>","enum":["dynes"],"type":"string"},{"description":"Kiloponds <https://en.wikipedia.org/wiki/Kilopond>","enum":["kiloponds"],"type":"string"},{"description":"Micronewtons <https://en.wikipedia.org/wiki/Newton_(unit)>","enum":["micronewtons"],"type":"string"},{"description":"Millinewtons <https://en.wikipedia.org/wiki/Newton_(unit)>","enum":["millinewtons"],"type":"string"},{"description":"Newtons <https://en.wikipedia.org/wiki/Newton_(unit)>","enum":["newtons"],"type":"string"},{"description":"Poundals <https://en.wikipedia.org/wiki/Poundal>","enum":["poundals"],"type":"string"},{"description":"Pounds <https://en.wikipedia.org/wiki/Pound_(force)>","enum":["pounds"],"type":"string"}]},"UnitForceConversion":{"description":"Result of converting between units.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"input":{"default":0.0,"description":"The input value.","format":"double","type":"number"},"input_unit":{"allOf":[{"$ref":"#/components/schemas/UnitForce"}],"description":"The source format of the unit conversion."},"output":{"description":"The resulting value.","format":"double","nullable":true,"type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitForce"}],"description":"The output format of the unit conversion."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","input_unit","output_unit","status","updated_at","user_id"],"type":"object"},"UnitFrequency":{"description":"The valid types of frequency units.","oneOf":[{"description":"Gigahertz <https://en.wikipedia.org/wiki/Hertz>","enum":["gigahertz"],"type":"string"},{"description":"Hertz <https://en.wikipedia.org/wiki/Hertz>","enum":["hertz"],"type":"string"},{"description":"Kilohertz <https://en.wikipedia.org/wiki/Hertz>","enum":["kilohertz"],"type":"string"},{"description":"Megahertz <https://en.wikipedia.org/wiki/Hertz>","enum":["megahertz"],"type":"string"},{"description":"Microhertz <https://en.wikipedia.org/wiki/Hertz>","enum":["microhertz"],"type":"string"},{"description":"Millihertz <https://en.wikipedia.org/wiki/Hertz>","enum":["millihertz"],"type":"string"},{"description":"Nanohertz <https://en.wikipedia.org/wiki/Hertz>","enum":["nanohertz"],"type":"string"},{"description":"Terahertz <https://en.wikipedia.org/wiki/Hertz>","enum":["terahertz"],"type":"string"}]},"UnitFrequencyConversion":{"description":"Result of converting between units.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"input":{"default":0.0,"description":"The input value.","format":"double","type":"number"},"input_unit":{"allOf":[{"$ref":"#/components/schemas/UnitFrequency"}],"description":"The source format of the unit conversion."},"output":{"description":"The resulting value.","format":"double","nullable":true,"type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitFrequency"}],"description":"The output format of the unit conversion."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","input_unit","output_unit","status","updated_at","user_id"],"type":"object"},"UnitLength":{"description":"The valid types of length units.","oneOf":[{"description":"Centimeters <https://en.wikipedia.org/wiki/Centimeter>","enum":["cm"],"type":"string"},{"description":"Feet <https://en.wikipedia.org/wiki/Foot_(unit)>","enum":["ft"],"type":"string"},{"description":"Inches <https://en.wikipedia.org/wiki/Inch>","enum":["in"],"type":"string"},{"description":"Meters <https://en.wikipedia.org/wiki/Meter>","enum":["m"],"type":"string"},{"description":"Millimeters <https://en.wikipedia.org/wiki/Millimeter>","enum":["mm"],"type":"string"},{"description":"Yards <https://en.wikipedia.org/wiki/Yard>","enum":["yd"],"type":"string"}]},"UnitLengthConversion":{"description":"Result of converting between units.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"input":{"default":0.0,"description":"The input value.","format":"double","type":"number"},"input_unit":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"The source format of the unit conversion."},"output":{"description":"The resulting value.","format":"double","nullable":true,"type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"The output format of the unit conversion."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","input_unit","output_unit","status","updated_at","user_id"],"type":"object"},"UnitMass":{"description":"The valid types of mass units.","oneOf":[{"description":"Grams <https://en.wikipedia.org/wiki/Gram>","enum":["g"],"type":"string"},{"description":"Kilograms <https://en.wikipedia.org/wiki/Kilogram>","enum":["kg"],"type":"string"},{"description":"Pounds <https://en.wikipedia.org/wiki/Pound_(mass)>","enum":["lb"],"type":"string"}]},"UnitMassConversion":{"description":"Result of converting between units.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"input":{"default":0.0,"description":"The input value.","format":"double","type":"number"},"input_unit":{"allOf":[{"$ref":"#/components/schemas/UnitMass"}],"description":"The source format of the unit conversion."},"output":{"description":"The resulting value.","format":"double","nullable":true,"type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitMass"}],"description":"The output format of the unit conversion."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","input_unit","output_unit","status","updated_at","user_id"],"type":"object"},"UnitPower":{"description":"The valid types of power units.","oneOf":[{"description":"British thermal units (BTU) per minute <https://en.wikipedia.org/wiki/British_thermal_unit>","enum":["btu_per_minute"],"type":"string"},{"description":"Horsepower (hp) <https://en.wikipedia.org/wiki/Horsepower>","enum":["horsepower"],"type":"string"},{"description":"Kilowatts <https://en.wikipedia.org/wiki/Kilowatt>","enum":["kilowatts"],"type":"string"},{"description":"Metric horsepower (PS) <https://en.wikipedia.org/wiki/Horsepower#Metric_horsepower>","enum":["metric_horsepower"],"type":"string"},{"description":"Microwatts <https://en.wikipedia.org/wiki/Microwatt>","enum":["microwatts"],"type":"string"},{"description":"Millwatts <https://en.wikipedia.org/wiki/Milliwatt>","enum":["milliwatts"],"type":"string"},{"description":"Watts <https://en.wikipedia.org/wiki/Watt>","enum":["watts"],"type":"string"}]},"UnitPowerConversion":{"description":"Result of converting between units.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"input":{"default":0.0,"description":"The input value.","format":"double","type":"number"},"input_unit":{"allOf":[{"$ref":"#/components/schemas/UnitPower"}],"description":"The source format of the unit conversion."},"output":{"description":"The resulting value.","format":"double","nullable":true,"type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitPower"}],"description":"The output format of the unit conversion."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","input_unit","output_unit","status","updated_at","user_id"],"type":"object"},"UnitPressure":{"description":"The valid types of pressure units.","oneOf":[{"description":"Atmospheres <https://en.wikipedia.org/wiki/Standard_atmosphere_(unit)>","enum":["atmospheres"],"type":"string"},{"description":"Bars <https://en.wikipedia.org/wiki/Bar_(unit)>","enum":["bars"],"type":"string"},{"description":"Hectopascals <https://en.wikipedia.org/wiki/Hectopascal>","enum":["hectopascals"],"type":"string"},{"description":"Kilopascals <https://en.wikipedia.org/wiki/Kilopascal>","enum":["kilopascals"],"type":"string"},{"description":"Millibars <https://en.wikipedia.org/wiki/Bar_(unit)>","enum":["millibars"],"type":"string"},{"description":"Pascals <https://en.wikipedia.org/wiki/Pascal_(unit)>","enum":["pascals"],"type":"string"},{"description":"Pounds per square inch (PSI) - <https://en.wikipedia.org/wiki/Pound_per_square_inch>","enum":["psi"],"type":"string"}]},"UnitPressureConversion":{"description":"Result of converting between units.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"input":{"default":0.0,"description":"The input value.","format":"double","type":"number"},"input_unit":{"allOf":[{"$ref":"#/components/schemas/UnitPressure"}],"description":"The source format of the unit conversion."},"output":{"description":"The resulting value.","format":"double","nullable":true,"type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitPressure"}],"description":"The output format of the unit conversion."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","input_unit","output_unit","status","updated_at","user_id"],"type":"object"},"UnitTemperature":{"description":"The valid types of temperature units.","oneOf":[{"description":"Celsius <https://en.wikipedia.org/wiki/Celsius>","enum":["celsius"],"type":"string"},{"description":"Fahrenheit <https://en.wikipedia.org/wiki/Fahrenheit>","enum":["fahrenheit"],"type":"string"},{"description":"Kelvin <https://en.wikipedia.org/wiki/Kelvin>","enum":["kelvin"],"type":"string"},{"description":"Rankine <https://en.wikipedia.org/wiki/Rankine_scale>","enum":["rankine"],"type":"string"}]},"UnitTemperatureConversion":{"description":"Result of converting between units.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"input":{"default":0.0,"description":"The input value.","format":"double","type":"number"},"input_unit":{"allOf":[{"$ref":"#/components/schemas/UnitTemperature"}],"description":"The source format of the unit conversion."},"output":{"description":"The resulting value.","format":"double","nullable":true,"type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitTemperature"}],"description":"The output format of the unit conversion."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","input_unit","output_unit","status","updated_at","user_id"],"type":"object"},"UnitTorque":{"description":"The valid types of torque units.","oneOf":[{"description":"Newton metres <https://en.wikipedia.org/wiki/Newton_metre>","enum":["newton_metres"],"type":"string"},{"description":"Pound foot <https://en.wikipedia.org/wiki/Pound-foot_(torque)>","enum":["pound_foot"],"type":"string"}]},"UnitTorqueConversion":{"description":"Result of converting between units.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"input":{"default":0.0,"description":"The input value.","format":"double","type":"number"},"input_unit":{"allOf":[{"$ref":"#/components/schemas/UnitTorque"}],"description":"The source format of the unit conversion."},"output":{"description":"The resulting value.","format":"double","nullable":true,"type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitTorque"}],"description":"The output format of the unit conversion."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","input_unit","output_unit","status","updated_at","user_id"],"type":"object"},"UnitVolume":{"description":"The valid types of volume units.","oneOf":[{"description":"Cubic centimeters (cc or cm³) <https://en.wikipedia.org/wiki/Cubic_centimeter>","enum":["cm3"],"type":"string"},{"description":"Cubic feet (ft³) <https://en.wikipedia.org/wiki/Cubic_foot>","enum":["ft3"],"type":"string"},{"description":"Cubic inches (cu in or in³) <https://en.wikipedia.org/wiki/Cubic_inch>","enum":["in3"],"type":"string"},{"description":"Cubic meters (m³) <https://en.wikipedia.org/wiki/Cubic_meter>","enum":["m3"],"type":"string"},{"description":"Cubic yards (yd³) <https://en.wikipedia.org/wiki/Cubic_yard>","enum":["yd3"],"type":"string"},{"description":"US Fluid Ounces (fl oz) <https://en.wikipedia.org/wiki/Fluid_ounce>","enum":["usfloz"],"type":"string"},{"description":"US Gallons (gal US) <https://en.wikipedia.org/wiki/Gallon>","enum":["usgal"],"type":"string"},{"description":"Liters (l) <https://en.wikipedia.org/wiki/Litre>","enum":["l"],"type":"string"},{"description":"Milliliters (ml) <https://en.wikipedia.org/wiki/Litre>","enum":["ml"],"type":"string"}]},"UnitVolumeConversion":{"description":"Result of converting between units.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The time and date the API call was created.","format":"date-time","title":"DateTime","type":"string"},"error":{"description":"The error the function returned, if any.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the API call.\n\nThis is the same as the API call ID."},"input":{"default":0.0,"description":"The input value.","format":"double","type":"number"},"input_unit":{"allOf":[{"$ref":"#/components/schemas/UnitVolume"}],"description":"The source format of the unit conversion."},"output":{"description":"The resulting value.","format":"double","nullable":true,"type":"number"},"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitVolume"}],"description":"The output format of the unit conversion."},"started_at":{"description":"The time and date the API call was started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/ApiCallStatus"}],"description":"The status of the API call."},"updated_at":{"description":"The time and date the API call was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The user ID of the user who created the API call."}},"required":["created_at","id","input_unit","output_unit","status","updated_at","user_id"],"type":"object"},"UpdateUser":{"description":"The user-modifiable parts of a User.","properties":{"company":{"description":"The user's company.","type":"string"},"discord":{"description":"The user's Discord handle.","type":"string"},"first_name":{"description":"The user's first name.","type":"string"},"github":{"description":"The user's GitHub handle.","type":"string"},"last_name":{"description":"The user's last name.","type":"string"},"phone":{"default":"","description":"The user's phone number.","format":"phone","title":"String","type":"string"}},"type":"object"},"User":{"description":"A user.","properties":{"company":{"description":"The user's company.","type":"string"},"created_at":{"description":"The date and time the user was created.","format":"date-time","title":"DateTime","type":"string"},"discord":{"description":"The user's Discord handle.","type":"string"},"email":{"description":"The email address of the user.","format":"email","type":"string"},"email_verified":{"description":"The date and time the email address was verified.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"first_name":{"description":"The user's first name.","type":"string"},"github":{"description":"The user's GitHub handle.","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the user."},"image":{"description":"The image avatar for the user. This is a URL.","format":"uri","title":"String","type":"string"},"last_name":{"description":"The user's last name.","type":"string"},"name":{"description":"The name of the user. This is auto populated at first from the authentication provider (if there was a name). It can be updated by the user by updating their `first_name` and `last_name` fields.","type":"string"},"phone":{"default":"","description":"The user's phone number.","format":"phone","title":"String","type":"string"},"updated_at":{"description":"The date and time the user was last updated.","format":"date-time","title":"DateTime","type":"string"}},"required":["created_at","id","image","updated_at"],"type":"object"},"UserResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/User"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"Uuid":{"description":"A UUID usually v4 or v7","format":"uuid","type":"string"},"VerificationToken":{"description":"A verification token for a user.\n\nThis is typically used to verify a user's email address.","properties":{"created_at":{"description":"The date and time the verification token was created.","format":"date-time","title":"DateTime","type":"string"},"expires":{"description":"The date and time the verification token expires.","format":"date-time","title":"DateTime","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The token used for verification. This is used as the id for the table since it is unique per record."},"identifier":{"description":"The identifier for the user. This is typically the user's email address since that is what we are verifying.","type":"string"},"updated_at":{"description":"The date and time the verification token was last updated.","format":"date-time","title":"DateTime","type":"string"}},"required":["created_at","expires","id","updated_at"],"type":"object"},"Volume":{"description":"The volume response.","properties":{"output_unit":{"allOf":[{"$ref":"#/components/schemas/UnitVolume"}],"description":"The output unit for the volume."},"volume":{"description":"The volume.","format":"double","type":"number"}},"required":["output_unit","volume"],"type":"object"},"WebSocketRequest":{"description":"The websocket messages the server receives.","oneOf":[{"description":"The trickle ICE candidate request.","properties":{"candidate":{"allOf":[{"$ref":"#/components/schemas/RtcIceCandidateInit"}],"description":"Information about the ICE candidate."},"type":{"enum":["trickle_ice"],"type":"string"}},"required":["candidate","type"],"type":"object"},{"description":"The SDP offer request.","properties":{"offer":{"allOf":[{"$ref":"#/components/schemas/RtcSessionDescription"}],"description":"The session description."},"type":{"enum":["sdp_offer"],"type":"string"}},"required":["offer","type"],"type":"object"},{"description":"The modeling command request.","properties":{"cmd":{"allOf":[{"$ref":"#/components/schemas/ModelingCmd"}],"description":"Which command to submit to the Kittycad engine."},"cmd_id":{"allOf":[{"$ref":"#/components/schemas/ModelingCmdId"}],"description":"ID of command being submitted."},"type":{"enum":["modeling_cmd_req"],"type":"string"}},"required":["cmd","cmd_id","type"],"type":"object"},{"description":"A sequence of modeling requests. If any request fails, following requests will not be tried.","properties":{"requests":{"description":"A sequence of modeling requests. If any request fails, following requests will not be tried.","items":{"$ref":"#/components/schemas/ModelingCmdReq"},"type":"array"},"type":{"enum":["modeling_cmd_batch_req"],"type":"string"}},"required":["requests","type"],"type":"object"},{"description":"The client-to-server Ping to ensure the WebSocket stays alive.","properties":{"type":{"enum":["ping"],"type":"string"}},"required":["type"],"type":"object"},{"description":"The response to a metrics collection request from the server.","properties":{"metrics":{"allOf":[{"$ref":"#/components/schemas/ClientMetrics"}],"description":"Collected metrics from the Client's end of the engine connection."},"type":{"enum":["metrics_response"],"type":"string"}},"required":["metrics","type"],"type":"object"}]},"WebSocketResponse":{"anyOf":[{"allOf":[{"$ref":"#/components/schemas/SuccessWebSocketResponse"}],"description":"Response sent when a request succeeded."},{"allOf":[{"$ref":"#/components/schemas/FailureWebSocketResponse"}],"description":"Response sent when a request did not succeed."}],"description":"Websocket responses can either be successful or unsuccessful. Slightly different schemas in either case."}}},"info":{"contact":{"email":"api@kittycad.io","url":"https://kittycad.io"},"description":"API server for KittyCAD","title":"KittyCAD API","version":"0.1.0"},"openapi":"3.0.3","paths":{"/":{"get":{"operationId":"get_schema","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get OpenAPI schema.","tags":["meta"]}},"/.well-known/ai-plugin.json":{"get":{"operationId":"get_ai_plugin_manifest","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiPluginManifest"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get AI plugin manifest.","tags":["meta","hidden"]}},"/_meta/info":{"get":{"description":"This includes information on any of our other distributed systems it is connected to.\nYou must be a KittyCAD employee to perform this request.","operationId":"get_metadata","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Metadata"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get the metadata about our currently running server.","tags":["meta","hidden"]}},"/ai-prompts":{"get":{"description":"For text-to-cad prompts, this will always return the STEP file contents as well as the format the user originally requested.\nThis endpoint requires authentication by a KittyCAD employee.\nThe AI prompts are returned in order of creation, with the most recently created AI prompts first.","operationId":"list_ai_prompts","parameters":[{"description":"Maximum number of items returned by a single call","in":"query","name":"limit","schema":{"format":"uint32","minimum":1,"nullable":true,"type":"integer"}},{"description":"Token returned by previous call to retrieve the subsequent page","in":"query","name":"page_token","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"sort_by","schema":{"$ref":"#/components/schemas/CreatedAtSortMode"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiPromptResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List all AI prompts.","tags":["ai","hidden"],"x-dropshot-pagination":{"required":[]}}},"/ai-prompts/{id}":{"get":{"description":"This endpoint requires authentication by a KittyCAD employee.","operationId":"get_ai_prompt","parameters":[{"description":"The id of the model to give feedback to.","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiPrompt"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get an AI prompt.","tags":["ai","hidden"]}},"/ai/text-to-cad/{output_format}":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_text_to_cad","parameters":[{"description":"The format the output file should be converted to.","in":"path","name":"output_format","required":true,"schema":{"$ref":"#/components/schemas/FileExportFormat"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"Because our source of truth for the resulting model is a STEP file, you will always have STEP file contents when you list your generated models. Any other formats you request here will also be returned when you list your generated models.\nThis operation is performed asynchronously, the `id` of the operation will be returned. You can use the `id` returned from the request to get status information about the async operation from the `/async/operations/{id}` endpoint.\nOne thing to note, if you hit the cache, this endpoint will return right away. So you only have to wait if the status is not `Completed` or `Failed`.\nThis is an alpha endpoint. It will change in the future. The current output is honestly pretty bad. So if you find this endpoint, you get what you pay for, which currently is nothing. But in the future will be made a lot better.","operationId":"create_text_to_cad","parameters":[{"description":"The format the output file should be converted to.","in":"path","name":"output_format","required":true,"schema":{"$ref":"#/components/schemas/FileExportFormat"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextToCadCreateBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextToCad"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Generate a CAD model from text.","tags":["ai","beta","hidden"]}},"/api-call-metrics":{"get":{"description":"This endpoint requires authentication by a KittyCAD employee. The API calls are grouped by the parameter passed.","operationId":"get_api_call_metrics","parameters":[{"description":"What field to group the metrics by.","in":"query","name":"group_by","required":true,"schema":{"$ref":"#/components/schemas/ApiCallQueryGroupBy"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ApiCallQueryGroup"},"title":"Array_of_ApiCallQueryGroup","type":"array"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get API call metrics.","tags":["api-calls","hidden"]}},"/api-calls":{"get":{"description":"This endpoint requires authentication by a KittyCAD employee. The API calls are returned in order of creation, with the most recently created API calls first.","operationId":"list_api_calls","parameters":[{"description":"Maximum number of items returned by a single call","in":"query","name":"limit","schema":{"format":"uint32","minimum":1,"nullable":true,"type":"integer"}},{"description":"Token returned by previous call to retrieve the subsequent page","in":"query","name":"page_token","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"sort_by","schema":{"$ref":"#/components/schemas/CreatedAtSortMode"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiCallWithPriceResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List API calls.","tags":["api-calls","hidden"],"x-dropshot-pagination":{"required":[]}}},"/api-calls/{id}":{"get":{"description":"This endpoint requires authentication by any KittyCAD user. It returns details of the requested API call for the user.\nIf the user is not authenticated to view the specified API call, then it is not returned.\nOnly KittyCAD employees can view API calls for other users.","operationId":"get_api_call","parameters":[{"description":"The ID of the API call.","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiCallWithPrice"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get details of an API call.","tags":["api-calls","hidden"]}},"/apps/github/callback":{"get":{"description":"This is different than OAuth 2.0 authentication for users. This endpoint grants access for KittyCAD to access user's repos.\nThe user doesn't need KittyCAD OAuth authorization for this endpoint, this is purely for the GitHub permissions to access repos.","operationId":"apps_github_callback","requestBody":{"content":{"application/json":{"schema":{}}},"required":true},"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Listen for callbacks to GitHub app authentication.","tags":["apps","hidden"]}},"/apps/github/consent":{"get":{"description":"This is different than OAuth 2.0 authentication for users. This endpoint grants access for KittyCAD to access user's repos.\nThe user doesn't need KittyCAD OAuth authorization for this endpoint, this is purely for the GitHub permissions to access repos.","operationId":"apps_github_consent","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppClientInfo"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get the consent URL for GitHub app authentication.","tags":["apps","hidden"]}},"/apps/github/webhook":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_apps_github_webhook","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"These come from the GitHub app.","operationId":"apps_github_webhook","requestBody":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Listen for GitHub webhooks.","tags":["apps","hidden"]}},"/async/operations":{"get":{"description":"For async file conversion operations, this endpoint does not return the contents of converted files (`output`). To get the contents use the `/async/operations/{id}` endpoint.\nThis endpoint requires authentication by a KittyCAD employee.","operationId":"list_async_operations","parameters":[{"description":"Maximum number of items returned by a single call","in":"query","name":"limit","schema":{"format":"uint32","minimum":1,"nullable":true,"type":"integer"}},{"description":"Token returned by previous call to retrieve the subsequent page","in":"query","name":"page_token","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"sort_by","schema":{"$ref":"#/components/schemas/CreatedAtSortMode"}},{"description":"The status to filter by.","in":"query","name":"status","schema":{"$ref":"#/components/schemas/ApiCallStatus"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncApiCallResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List async operations.","tags":["api-calls","hidden"],"x-dropshot-pagination":{"required":[]}}},"/async/operations/{id}":{"get":{"description":"Get the status and output of an async operation.\nThis endpoint requires authentication by any KittyCAD user. It returns details of the requested async operation for the user.\nIf the user is not authenticated to view the specified async operation, then it is not returned.\nOnly KittyCAD employees with the proper access can view async operations for other users.","operationId":"get_async_operation","parameters":[{"description":"The ID of the async operation.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncApiCallOutput"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get an async operation.","tags":["api-calls"]}},"/auth/email":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_auth_email","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"operationId":"auth_email","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailAuthenticationForm"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerificationToken"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create an email verification request for a user.","tags":["hidden"]}},"/auth/email/callback":{"get":{"operationId":"auth_email_callback","parameters":[{"description":"The URL to redirect back to after we have authenticated.","in":"query","name":"callback_url","schema":{"format":"uri","nullable":true,"type":"string"}},{"description":"The user's email.","in":"query","name":"email","required":true,"schema":{"format":"email","type":"string"}},{"description":"The verification token.","in":"query","name":"token","required":true,"schema":{"type":"string"}}],"responses":{"302":{"description":"Temporary Redirect","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Listen for callbacks for email verification for users.","tags":["hidden"]}},"/file/center-of-mass":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_file_center_of_mass","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"We assume any file given to us has one consistent unit throughout. We also assume the file is at the proper scale.\nThis endpoint returns the cartesian coordinate in world space measure units.\nIn the future, we will use the units inside the file if they are given and do any conversions if necessary for the calculation. But currently, that is not supported.\nGet the center of mass of an object in a CAD file. If the file is larger than 25MB, it will be performed asynchronously.\nIf the operation is performed asynchronously, the `id` of the operation will be returned. You can use the `id` returned from the request to get status information about the async operation from the `/async/operations/{id}` endpoint.","operationId":"create_file_center_of_mass","parameters":[{"description":"The output unit for the center of mass.","in":"query","name":"output_unit","schema":{"$ref":"#/components/schemas/UnitLength"}},{"description":"The format of the file.","in":"query","name":"src_format","required":true,"schema":{"$ref":"#/components/schemas/FileImportFormat"}}],"requestBody":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileCenterOfMass"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get CAD file center of mass.","tags":["file","beta"]}},"/file/conversion/{src_format}/{output_format}":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_file_conversion","parameters":[{"description":"The format the file should be converted to.","in":"path","name":"output_format","required":true,"schema":{"$ref":"#/components/schemas/FileExportFormat"}},{"description":"The format of the file to convert.","in":"path","name":"src_format","required":true,"schema":{"$ref":"#/components/schemas/FileImportFormat"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"If you wish to specify the conversion options, use the `/file/conversion` endpoint instead.\nConvert a CAD file from one format to another. If the file being converted is larger than 25MB, it will be performed asynchronously.\nIf the conversion is performed synchronously, the contents of the converted file (`output`) will be returned as a base64 encoded string.\nIf the operation is performed asynchronously, the `id` of the operation will be returned. You can use the `id` returned from the request to get status information about the async operation from the `/async/operations/{id}` endpoint.","operationId":"create_file_conversion","parameters":[{"description":"The format the file should be converted to.","in":"path","name":"output_format","required":true,"schema":{"$ref":"#/components/schemas/FileExportFormat"}},{"description":"The format of the file to convert.","in":"path","name":"src_format","required":true,"schema":{"$ref":"#/components/schemas/FileImportFormat"}}],"requestBody":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileConversion"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert CAD file with defaults.","tags":["file"]}},"/file/density":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_file_density","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"We assume any file given to us has one consistent unit throughout. We also assume the file is at the proper scale.\nThis endpoint assumes if you are giving a material mass in a specific mass units, we return a density in mass unit per cubic measure unit.\nIn the future, we will use the units inside the file if they are given and do any conversions if necessary for the calculation. But currently, that is not supported.\nGet the density of an object in a CAD file. If the file is larger than 25MB, it will be performed asynchronously.\nIf the operation is performed asynchronously, the `id` of the operation will be returned. You can use the `id` returned from the request to get status information about the async operation from the `/async/operations/{id}` endpoint.","operationId":"create_file_density","parameters":[{"description":"The material mass.","in":"query","name":"material_mass","required":true,"schema":{"format":"double","type":"number"}},{"description":"The unit of the material mass.","in":"query","name":"material_mass_unit","schema":{"$ref":"#/components/schemas/UnitMass"}},{"description":"The output unit for the density.","in":"query","name":"output_unit","schema":{"$ref":"#/components/schemas/UnitDensity"}},{"description":"The format of the file.","in":"query","name":"src_format","required":true,"schema":{"$ref":"#/components/schemas/FileImportFormat"}}],"requestBody":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileDensity"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get CAD file density.","tags":["file","beta"]}},"/file/execute/{lang}":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_file_execution","parameters":[{"description":"The language of the code.","in":"path","name":"lang","required":true,"schema":{"$ref":"#/components/schemas/CodeLanguage"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"operationId":"create_file_execution","parameters":[{"description":"The language of the code.","in":"path","name":"lang","required":true,"schema":{"$ref":"#/components/schemas/CodeLanguage"}},{"description":"The output file we want to get the contents for (the paths are relative to where in litterbox it is being run). You can denote more than one file with a comma separated list of string paths.","in":"query","name":"output","schema":{"nullable":true,"type":"string"}}],"requestBody":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeOutput"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Execute a KittyCAD program in a specific language.","tags":["executor","hidden"]}},"/file/mass":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_file_mass","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"We assume any file given to us has one consistent unit throughout. We also assume the file is at the proper scale.\nThis endpoint assumes if you are giving a material density in a specific mass unit per cubic measure unit, we return a mass in mass units. The same mass units as passed in the material density.\nIn the future, we will use the units inside the file if they are given and do any conversions if necessary for the calculation. But currently, that is not supported.\nGet the mass of an object in a CAD file. If the file is larger than 25MB, it will be performed asynchronously.\nIf the operation is performed asynchronously, the `id` of the operation will be returned. You can use the `id` returned from the request to get status information about the async operation from the `/async/operations/{id}` endpoint.","operationId":"create_file_mass","parameters":[{"description":"The material density.","in":"query","name":"material_density","required":true,"schema":{"format":"double","type":"number"}},{"description":"The unit of the material density.","in":"query","name":"material_density_unit","schema":{"$ref":"#/components/schemas/UnitDensity"}},{"description":"The output unit for the mass.","in":"query","name":"output_unit","schema":{"$ref":"#/components/schemas/UnitMass"}},{"description":"The format of the file.","in":"query","name":"src_format","required":true,"schema":{"$ref":"#/components/schemas/FileImportFormat"}}],"requestBody":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileMass"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get CAD file mass.","tags":["file","beta"]}},"/file/surface-area":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_file_surface_area","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"We assume any file given to us has one consistent unit throughout. We also assume the file is at the proper scale.\nThis endpoint returns the square measure units.\nIn the future, we will use the units inside the file if they are given and do any conversions if necessary for the calculation. But currently, that is not supported.\nGet the surface area of an object in a CAD file. If the file is larger than 25MB, it will be performed asynchronously.\nIf the operation is performed asynchronously, the `id` of the operation will be returned. You can use the `id` returned from the request to get status information about the async operation from the `/async/operations/{id}` endpoint.","operationId":"create_file_surface_area","parameters":[{"description":"The output unit for the surface area.","in":"query","name":"output_unit","schema":{"$ref":"#/components/schemas/UnitArea"}},{"description":"The format of the file.","in":"query","name":"src_format","required":true,"schema":{"$ref":"#/components/schemas/FileImportFormat"}}],"requestBody":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileSurfaceArea"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get CAD file surface area.","tags":["file","beta"]}},"/file/volume":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_file_volume","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"We assume any file given to us has one consistent unit throughout. We also assume the file is at the proper scale.\nThis endpoint returns the cubic measure units.\nIn the future, we will use the units inside the file if they are given and do any conversions if necessary for the calculation. But currently, that is not supported.\nGet the volume of an object in a CAD file. If the file is larger than 25MB, it will be performed asynchronously.\nIf the operation is performed asynchronously, the `id` of the operation will be returned. You can use the `id` returned from the request to get status information about the async operation from the `/async/operations/{id}` endpoint.","operationId":"create_file_volume","parameters":[{"description":"The output unit for the volume.","in":"query","name":"output_unit","schema":{"$ref":"#/components/schemas/UnitVolume"}},{"description":"The format of the file.","in":"query","name":"src_format","required":true,"schema":{"$ref":"#/components/schemas/FileImportFormat"}}],"requestBody":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileVolume"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get CAD file volume.","tags":["file","beta"]}},"/hidden/ws/modeling":{"options":{"operationId":"hidden_ws_modeling_types","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebSocketRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebSocketResponse"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Hidden endpoint for defining the modeling websocket types.","tags":["hidden"]}},"/internal/discord/api-token/{discord_id}":{"get":{"description":"This endpoint allows us to run API calls from our discord bot on behalf of a user. The user must have a discord account linked to their KittyCAD Account via oauth2 for this to work.\nYou must be a KittyCAD employee to use this endpoint.","operationId":"internal_get_api_token_for_discord_user","parameters":[{"description":"The user's discord ID.","in":"path","name":"discord_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiToken"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get an API token for a user by their discord id.","tags":["meta","hidden"]}},"/logout":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_logout","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"This is used in logout scenarios.","operationId":"logout","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"This endpoint removes the session cookie for a user.","tags":["hidden"]}},"/oauth2/device/auth":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_device_auth_request","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"This endpoint is designed to be accessed from an *unauthenticated* API client. It generates and records a `device_code` and `user_code` which must be verified and confirmed prior to a token being granted.","operationId":"device_auth_request","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DeviceAuthRequestForm"}}},"required":true},"responses":{"default":{"content":{"*/*":{"schema":{}}},"description":""}},"summary":"Start an OAuth 2.0 Device Authorization Grant.","tags":["oauth2","hidden"]}},"/oauth2/device/confirm":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_device_auth_confirm","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"This endpoint is designed to be accessed by the user agent (browser), not the client requesting the token. So we do not actually return the token here; it will be returned in response to the poll on `/oauth2/device/token`.","operationId":"device_auth_confirm","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceAuthVerifyParams"}}},"required":true},"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Confirm an OAuth 2.0 Device Authorization Grant.","tags":["oauth2","hidden"]}},"/oauth2/device/token":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_device_access_token","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"This endpoint should be polled by the client until the user code is verified and the grant is confirmed.","operationId":"device_access_token","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DeviceAccessTokenRequestForm"}}},"required":true},"responses":{"default":{"content":{"*/*":{"schema":{}}},"description":""}},"summary":"Request a device access token.","tags":["oauth2","hidden"]}},"/oauth2/device/verify":{"get":{"description":"This endpoint should be accessed in a full user agent (e.g., a browser). If the user is not logged in, we redirect them to the login page and use the `callback_url` parameter to get them to the UI verification form upon logging in. If they are logged in, we redirect them to the UI verification form on the website.","operationId":"device_auth_verify","parameters":[{"description":"The user code.","in":"query","name":"user_code","required":true,"schema":{"type":"string"}}],"responses":{"302":{"description":"Temporary Redirect","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Verify an OAuth 2.0 Device Authorization Grant.","tags":["oauth2","hidden"]}},"/oauth2/provider/{provider}/callback":{"get":{"operationId":"oauth2_provider_callback","parameters":[{"description":"The provider.","in":"path","name":"provider","required":true,"schema":{"$ref":"#/components/schemas/AccountProvider"}},{"description":"The authorization code.","in":"query","name":"code","schema":{"type":"string"}},{"description":"The state that we had passed in through the user consent URL.","in":"query","name":"state","schema":{"type":"string"}}],"responses":{"302":{"description":"Temporary Redirect","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Listen for callbacks for the OAuth 2.0 provider.","tags":["oauth2","hidden"]}},"/oauth2/provider/{provider}/consent":{"get":{"operationId":"oauth2_provider_consent","parameters":[{"description":"The provider.","in":"path","name":"provider","required":true,"schema":{"$ref":"#/components/schemas/AccountProvider"}},{"description":"The URL to redirect back to after we have authenticated.","in":"query","name":"callback_url","schema":{"nullable":true,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuth2ClientInfo"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get the consent URL and other information for the OAuth 2.0 provider.","tags":["oauth2","hidden"]}},"/openai/openapi.json":{"get":{"description":"This is the same as the OpenAPI schema, BUT it has some modifications to make it compatible with OpenAI. For example, descriptions must be < 300 chars.","operationId":"get_openai_schema","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get AI plugin OpenAPI schema.","tags":["meta","hidden"]}},"/ping":{"get":{"operationId":"ping","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Pong"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Return pong.","tags":["meta"]}},"/unit/conversion/angle/{input_unit}/{output_unit}":{"get":{"description":"Convert an angle unit value to another angle unit value. This is a nice endpoint to use for helper functions.","operationId":"get_angle_unit_conversion","parameters":[{"description":"The source format of the unit.","in":"path","name":"input_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitAngle"}},{"description":"The output format of the unit.","in":"path","name":"output_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitAngle"}},{"description":"The initial value.","in":"query","name":"value","required":true,"schema":{"format":"double","type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitAngleConversion"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert angle units.","tags":["unit"]}},"/unit/conversion/area/{input_unit}/{output_unit}":{"get":{"description":"Convert an area unit value to another area unit value. This is a nice endpoint to use for helper functions.","operationId":"get_area_unit_conversion","parameters":[{"description":"The source format of the unit.","in":"path","name":"input_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitArea"}},{"description":"The output format of the unit.","in":"path","name":"output_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitArea"}},{"description":"The initial value.","in":"query","name":"value","required":true,"schema":{"format":"double","type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitAreaConversion"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert area units.","tags":["unit"]}},"/unit/conversion/current/{input_unit}/{output_unit}":{"get":{"description":"Convert a current unit value to another current unit value. This is a nice endpoint to use for helper functions.","operationId":"get_current_unit_conversion","parameters":[{"description":"The source format of the unit.","in":"path","name":"input_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitCurrent"}},{"description":"The output format of the unit.","in":"path","name":"output_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitCurrent"}},{"description":"The initial value.","in":"query","name":"value","required":true,"schema":{"format":"double","type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitCurrentConversion"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert current units.","tags":["unit"]}},"/unit/conversion/energy/{input_unit}/{output_unit}":{"get":{"description":"Convert a energy unit value to another energy unit value. This is a nice endpoint to use for helper functions.","operationId":"get_energy_unit_conversion","parameters":[{"description":"The source format of the unit.","in":"path","name":"input_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitEnergy"}},{"description":"The output format of the unit.","in":"path","name":"output_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitEnergy"}},{"description":"The initial value.","in":"query","name":"value","required":true,"schema":{"format":"double","type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitEnergyConversion"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert energy units.","tags":["unit"]}},"/unit/conversion/force/{input_unit}/{output_unit}":{"get":{"description":"Convert a force unit value to another force unit value. This is a nice endpoint to use for helper functions.","operationId":"get_force_unit_conversion","parameters":[{"description":"The source format of the unit.","in":"path","name":"input_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitForce"}},{"description":"The output format of the unit.","in":"path","name":"output_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitForce"}},{"description":"The initial value.","in":"query","name":"value","required":true,"schema":{"format":"double","type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitForceConversion"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert force units.","tags":["unit"]}},"/unit/conversion/frequency/{input_unit}/{output_unit}":{"get":{"description":"Convert a frequency unit value to another frequency unit value. This is a nice endpoint to use for helper functions.","operationId":"get_frequency_unit_conversion","parameters":[{"description":"The source format of the unit.","in":"path","name":"input_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitFrequency"}},{"description":"The output format of the unit.","in":"path","name":"output_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitFrequency"}},{"description":"The initial value.","in":"query","name":"value","required":true,"schema":{"format":"double","type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitFrequencyConversion"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert frequency units.","tags":["unit"]}},"/unit/conversion/length/{input_unit}/{output_unit}":{"get":{"description":"Convert a length unit value to another length unit value. This is a nice endpoint to use for helper functions.","operationId":"get_length_unit_conversion","parameters":[{"description":"The source format of the unit.","in":"path","name":"input_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitLength"}},{"description":"The output format of the unit.","in":"path","name":"output_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitLength"}},{"description":"The initial value.","in":"query","name":"value","required":true,"schema":{"format":"double","type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitLengthConversion"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert length units.","tags":["unit"]}},"/unit/conversion/mass/{input_unit}/{output_unit}":{"get":{"description":"Convert a mass unit value to another mass unit value. This is a nice endpoint to use for helper functions.","operationId":"get_mass_unit_conversion","parameters":[{"description":"The source format of the unit.","in":"path","name":"input_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitMass"}},{"description":"The output format of the unit.","in":"path","name":"output_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitMass"}},{"description":"The initial value.","in":"query","name":"value","required":true,"schema":{"format":"double","type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitMassConversion"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert mass units.","tags":["unit"]}},"/unit/conversion/power/{input_unit}/{output_unit}":{"get":{"description":"Convert a power unit value to another power unit value. This is a nice endpoint to use for helper functions.","operationId":"get_power_unit_conversion","parameters":[{"description":"The source format of the unit.","in":"path","name":"input_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitPower"}},{"description":"The output format of the unit.","in":"path","name":"output_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitPower"}},{"description":"The initial value.","in":"query","name":"value","required":true,"schema":{"format":"double","type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitPowerConversion"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert power units.","tags":["unit"]}},"/unit/conversion/pressure/{input_unit}/{output_unit}":{"get":{"description":"Convert a pressure unit value to another pressure unit value. This is a nice endpoint to use for helper functions.","operationId":"get_pressure_unit_conversion","parameters":[{"description":"The source format of the unit.","in":"path","name":"input_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitPressure"}},{"description":"The output format of the unit.","in":"path","name":"output_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitPressure"}},{"description":"The initial value.","in":"query","name":"value","required":true,"schema":{"format":"double","type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitPressureConversion"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert pressure units.","tags":["unit"]}},"/unit/conversion/temperature/{input_unit}/{output_unit}":{"get":{"description":"Convert a temperature unit value to another temperature unit value. This is a nice endpoint to use for helper functions.","operationId":"get_temperature_unit_conversion","parameters":[{"description":"The source format of the unit.","in":"path","name":"input_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitTemperature"}},{"description":"The output format of the unit.","in":"path","name":"output_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitTemperature"}},{"description":"The initial value.","in":"query","name":"value","required":true,"schema":{"format":"double","type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitTemperatureConversion"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert temperature units.","tags":["unit"]}},"/unit/conversion/torque/{input_unit}/{output_unit}":{"get":{"description":"Convert a torque unit value to another torque unit value. This is a nice endpoint to use for helper functions.","operationId":"get_torque_unit_conversion","parameters":[{"description":"The source format of the unit.","in":"path","name":"input_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitTorque"}},{"description":"The output format of the unit.","in":"path","name":"output_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitTorque"}},{"description":"The initial value.","in":"query","name":"value","required":true,"schema":{"format":"double","type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitTorqueConversion"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert torque units.","tags":["unit"]}},"/unit/conversion/volume/{input_unit}/{output_unit}":{"get":{"description":"Convert a volume unit value to another volume unit value. This is a nice endpoint to use for helper functions.","operationId":"get_volume_unit_conversion","parameters":[{"description":"The source format of the unit.","in":"path","name":"input_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitVolume"}},{"description":"The output format of the unit.","in":"path","name":"output_unit","required":true,"schema":{"$ref":"#/components/schemas/UnitVolume"}},{"description":"The initial value.","in":"query","name":"value","required":true,"schema":{"format":"double","type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitVolumeConversion"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert volume units.","tags":["unit"]}},"/user":{"delete":{"description":"This endpoint requires authentication by any KittyCAD user. It deletes the authenticated user from KittyCAD's database.\nThis call will only succeed if all invoices associated with the user have been paid in full and there is no outstanding balance.","operationId":"delete_user_self","responses":{"204":{"description":"successful deletion","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Delete your user.","tags":["users"]},"get":{"description":"Get the user information for the authenticated user.\nAlternatively, you can also use the `/users/me` endpoint.","operationId":"get_user_self","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get your user.","tags":["users"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_user_self","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"put":{"description":"This endpoint requires authentication by any KittyCAD user. It updates information about the authenticated user.","operationId":"update_user_self","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUser"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update your user.","tags":["users"]}},"/user/api-calls":{"get":{"description":"This endpoint requires authentication by any KittyCAD user. It returns the API calls for the authenticated user.\nThe API calls are returned in order of creation, with the most recently created API calls first.","operationId":"user_list_api_calls","parameters":[{"description":"Maximum number of items returned by a single call","in":"query","name":"limit","schema":{"format":"uint32","minimum":1,"nullable":true,"type":"integer"}},{"description":"Token returned by previous call to retrieve the subsequent page","in":"query","name":"page_token","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"sort_by","schema":{"$ref":"#/components/schemas/CreatedAtSortMode"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiCallWithPriceResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List API calls for your user.","tags":["api-calls"],"x-dropshot-pagination":{"required":[]}}},"/user/api-calls/{id}":{"get":{"description":"This endpoint requires authentication by any KittyCAD user. It returns details of the requested API call for the user.","operationId":"get_api_call_for_user","parameters":[{"description":"The ID of the API call.","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiCallWithPrice"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get an API call for a user.","tags":["api-calls"]}},"/user/api-tokens":{"get":{"description":"This endpoint requires authentication by any KittyCAD user. It returns the API tokens for the authenticated user.\nThe API tokens are returned in order of creation, with the most recently created API tokens first.","operationId":"list_api_tokens_for_user","parameters":[{"description":"Maximum number of items returned by a single call","in":"query","name":"limit","schema":{"format":"uint32","minimum":1,"nullable":true,"type":"integer"}},{"description":"Token returned by previous call to retrieve the subsequent page","in":"query","name":"page_token","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"sort_by","schema":{"$ref":"#/components/schemas/CreatedAtSortMode"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiTokenResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List API tokens for your user.","tags":["api-tokens"],"x-dropshot-pagination":{"required":[]}},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_api_token_for_user","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"This endpoint requires authentication by any KittyCAD user. It creates a new API token for the authenticated user.","operationId":"create_api_token_for_user","responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiToken"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create a new API token for your user.","tags":["api-tokens"]}},"/user/api-tokens/{token}":{"delete":{"description":"This endpoint requires authentication by any KittyCAD user. It deletes the requested API token for the user.\nThis endpoint does not actually delete the API token from the database. It merely marks the token as invalid. We still want to keep the token in the database for historical purposes.","operationId":"delete_api_token_for_user","parameters":[{"description":"The API token.","in":"path","name":"token","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"successful deletion","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Delete an API token for your user.","tags":["api-tokens"]},"get":{"description":"This endpoint requires authentication by any KittyCAD user. It returns details of the requested API token for the user.","operationId":"get_api_token_for_user","parameters":[{"description":"The API token.","in":"path","name":"token","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiToken"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get an API token for your user.","tags":["api-tokens"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_api_token_for_user","parameters":[{"description":"The API token.","in":"path","name":"token","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]}},"/user/extended":{"get":{"description":"Get the user information for the authenticated user.\nAlternatively, you can also use the `/users-extended/me` endpoint.","operationId":"get_user_self_extended","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendedUser"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get extended information about your user.","tags":["users"]}},"/user/onboarding":{"get":{"description":"Checks key part of their api usage to determine their onboarding progress","operationId":"get_user_onboarding_self","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Onboarding"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get your user's onboarding status.","tags":["users","hidden"]}},"/user/payment":{"delete":{"description":"This includes billing address, phone, and name.\nThis endpoint requires authentication by any KittyCAD user. It deletes the payment information for the authenticated user.","operationId":"delete_payment_information_for_user","responses":{"204":{"description":"successful deletion","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Delete payment info for your user.","tags":["payments"]},"get":{"description":"This includes billing address, phone, and name.\nThis endpoint requires authentication by any KittyCAD user. It gets the payment information for the authenticated user.","operationId":"get_payment_information_for_user","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Customer"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get payment info about your user.","tags":["payments"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_payment_information_for_user","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"This includes billing address, phone, and name.\nThis endpoint requires authentication by any KittyCAD user. It creates the payment information for the authenticated user.","operationId":"create_payment_information_for_user","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingInfo"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Customer"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create payment info for your user.","tags":["payments"]},"put":{"description":"This includes billing address, phone, and name.\nThis endpoint requires authentication by any KittyCAD user. It updates the payment information for the authenticated user.","operationId":"update_payment_information_for_user","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingInfo"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Customer"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update payment info for your user.","tags":["payments"]}},"/user/payment/balance":{"get":{"description":"This endpoint requires authentication by any KittyCAD user. It gets the balance information for the authenticated user.","operationId":"get_payment_balance_for_user","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerBalance"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get balance for your user.","tags":["payments"]}},"/user/payment/intent":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_payment_intent_for_user","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"This endpoint requires authentication by any KittyCAD user. It creates a new payment intent for the authenticated user.","operationId":"create_payment_intent_for_user","responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentIntent"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create a payment intent for your user.","tags":["payments","hidden"]}},"/user/payment/invoices":{"get":{"description":"This endpoint requires authentication by any KittyCAD user. It lists invoices for the authenticated user.","operationId":"list_invoices_for_user","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Invoice"},"title":"Array_of_Invoice","type":"array"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List invoices for your user.","tags":["payments"]}},"/user/payment/methods":{"get":{"description":"This endpoint requires authentication by any KittyCAD user. It lists payment methods for the authenticated user.","operationId":"list_payment_methods_for_user","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PaymentMethod"},"title":"Array_of_PaymentMethod","type":"array"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List payment methods for your user.","tags":["payments"]}},"/user/payment/methods/{id}":{"delete":{"description":"This endpoint requires authentication by any KittyCAD user. It deletes the specified payment method for the authenticated user.","operationId":"delete_payment_method_for_user","parameters":[{"description":"The ID of the payment method.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"successful deletion","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Delete a payment method for your user.","tags":["payments","hidden"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_payment_methods_for_user","parameters":[{"description":"The ID of the payment method.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]}},"/user/payment/tax":{"get":{"description":"This endpoint requires authentication by any KittyCAD user. It will return an error if the customer's information is not valid for automatic tax. Otherwise, it will return an empty successful response.","operationId":"validate_customer_tax_information_for_user","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Validate a customer's information is correct and valid for automatic tax.","tags":["payments","hidden"]}},"/user/session/{token}":{"get":{"description":"This endpoint requires authentication by any KittyCAD user. It returns details of the requested API token for the user.","operationId":"get_session_for_user","parameters":[{"description":"The API token.","in":"path","name":"token","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get a session for your user.","tags":["users"]}},"/user/text-to-cad":{"get":{"description":"This will always return the STEP file contents as well as the format the user originally requested.\nThis endpoint requires authentication by any KittyCAD user. It returns the text-to-CAD models for the authenticated user.\nThe text-to-CAD models are returned in order of creation, with the most recently created text-to-CAD models first.","operationId":"list_text_to_cad_models_for_user","parameters":[{"description":"Maximum number of items returned by a single call","in":"query","name":"limit","schema":{"format":"uint32","minimum":1,"nullable":true,"type":"integer"}},{"description":"Token returned by previous call to retrieve the subsequent page","in":"query","name":"page_token","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"sort_by","schema":{"$ref":"#/components/schemas/CreatedAtSortMode"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextToCadResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List text-to-CAD models you've generated.","tags":["ai","beta","hidden"],"x-dropshot-pagination":{"required":[]}}},"/user/text-to-cad/{id}":{"get":{"description":"This endpoint requires authentication by any KittyCAD user. The user must be the owner of the text-to-CAD model.","operationId":"get_text_to_cad_model_for_user","parameters":[{"description":"The id of the model to give feedback to.","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextToCad"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get a text-to-CAD response.","tags":["ai","beta","hidden"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_text_to_cad_model_feedback","parameters":[{"description":"The id of the model to give feedback to.","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"This endpoint requires authentication by any KittyCAD user. The user must be the owner of the text-to-CAD model, in order to give feedback.","operationId":"create_text_to_cad_model_feedback","parameters":[{"description":"The id of the model to give feedback to.","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"The feedback.","in":"query","name":"feedback","required":true,"schema":{"$ref":"#/components/schemas/AiFeedback"}}],"responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Give feedback to a specific text-to-CAD response.","tags":["ai","beta","hidden"]}},"/users":{"get":{"description":"This endpoint required authentication by a KittyCAD employee. The users are returned in order of creation, with the most recently created users first.","operationId":"list_users","parameters":[{"description":"Maximum number of items returned by a single call","in":"query","name":"limit","schema":{"format":"uint32","minimum":1,"nullable":true,"type":"integer"}},{"description":"Token returned by previous call to retrieve the subsequent page","in":"query","name":"page_token","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"sort_by","schema":{"$ref":"#/components/schemas/CreatedAtSortMode"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List users.","tags":["users","hidden"],"x-dropshot-pagination":{"required":[]}}},"/users-extended":{"get":{"description":"This endpoint required authentication by a KittyCAD employee. The users are returned in order of creation, with the most recently created users first.","operationId":"list_users_extended","parameters":[{"description":"Maximum number of items returned by a single call","in":"query","name":"limit","schema":{"format":"uint32","minimum":1,"nullable":true,"type":"integer"}},{"description":"Token returned by previous call to retrieve the subsequent page","in":"query","name":"page_token","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"sort_by","schema":{"$ref":"#/components/schemas/CreatedAtSortMode"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendedUserResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List users with extended information.","tags":["users","hidden"],"x-dropshot-pagination":{"required":[]}}},"/users-extended/{id}":{"get":{"description":"To get information about yourself, use `/users-extended/me` as the endpoint. By doing so you will get the user information for the authenticated user.\nAlternatively, to get information about the authenticated user, use `/user/extended` endpoint.\nTo get information about any KittyCAD user, you must be a KittyCAD employee.","operationId":"get_user_extended","parameters":[{"description":"The user ID.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendedUser"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get extended information about a user.","tags":["users","hidden"]}},"/users/{id}":{"get":{"description":"To get information about yourself, use `/users/me` as the endpoint. By doing so you will get the user information for the authenticated user.\nAlternatively, to get information about the authenticated user, use `/user` endpoint.\nTo get information about any KittyCAD user, you must be a KittyCAD employee.","operationId":"get_user","parameters":[{"description":"The user ID.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get a user.","tags":["users","hidden"]}},"/users/{id}/api-calls":{"get":{"description":"This endpoint requires authentication by any KittyCAD user. It returns the API calls for the authenticated user if \"me\" is passed as the user id.\nAlternatively, you can use the `/user/api-calls` endpoint to get the API calls for your user.\nIf the authenticated user is a KittyCAD employee, then the API calls are returned for the user specified by the user id.\nThe API calls are returned in order of creation, with the most recently created API calls first.","operationId":"list_api_calls_for_user","parameters":[{"description":"The user ID.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Maximum number of items returned by a single call","in":"query","name":"limit","schema":{"format":"uint32","minimum":1,"nullable":true,"type":"integer"}},{"description":"Token returned by previous call to retrieve the subsequent page","in":"query","name":"page_token","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"sort_by","schema":{"$ref":"#/components/schemas/CreatedAtSortMode"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiCallWithPriceResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","required":true,"schema":{"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List API calls for a user.","tags":["api-calls","hidden"],"x-dropshot-pagination":{"required":[]}}},"/ws/executor/term":{"get":{"description":"Attach to a docker container to create an interactive terminal.","operationId":"create_executor_term","responses":{"default":{"content":{"*/*":{"schema":{}}},"description":""}},"summary":"Create a terminal.","tags":["executor","hidden"],"x-dropshot-websocket":{}}},"/ws/modeling/commands":{"get":{"description":"Pass those commands to the engine via websocket, and pass responses back to the client. Basically, this is a websocket proxy between the frontend/client and the engine.","operationId":"modeling_commands_ws","parameters":[{"description":"Frames per second of the video feed.","in":"query","name":"fps","schema":{"format":"uint32","minimum":0,"type":"integer"}},{"description":"If true, engine will render video frames as fast as it can.","in":"query","name":"unlocked_framerate","schema":{"type":"boolean"}},{"description":"Height of the video feed. Must be a multiple of 4.","in":"query","name":"video_res_height","schema":{"format":"uint32","minimum":0,"type":"integer"}},{"description":"Width of the video feed. Must be a multiple of 4.","in":"query","name":"video_res_width","schema":{"format":"uint32","minimum":0,"type":"integer"}},{"description":"If true, will start a webrtc connection.","in":"query","name":"webrtc","schema":{"type":"boolean"}}],"responses":{"default":{"content":{"*/*":{"schema":{}}},"description":""}},"summary":"Open a websocket which accepts modeling commands.","tags":["modeling","beta"],"x-dropshot-websocket":{}}}},"tags":[{"description":"AI uses machine learning to generate 3D meshes.","externalDocs":{"url":"https://docs.kittycad.io/api/ai"},"name":"ai"},{"description":"API calls that have been performed by users can be queried by the API. This is helpful for debugging as well as billing.","externalDocs":{"url":"https://docs.kittycad.io/api/api-calls"},"name":"api-calls"},{"description":"API tokens allow users to call the API outside of their session token that is used as a cookie in the user interface. Users can create, delete, and list their API tokens. But, of course, you need an API token to do this, so first be sure to generate one in the account UI.","externalDocs":{"url":"https://docs.kittycad.io/api/api-tokens"},"name":"api-tokens"},{"description":"Endpoints for third party app grant flows.","externalDocs":{"url":"https://docs.kittycad.io/api/apps"},"name":"apps"},{"description":"Beta API endpoints. We will not charge for these endpoints while they are in beta.","externalDocs":{"url":"https://docs.kittycad.io/api/beta"},"name":"beta"},{"description":"Constants. These are helpful as helpers.","externalDocs":{"url":"https://docs.kittycad.io/api/constant"},"name":"constant"},{"description":"Endpoints that allow for code execution or creation of code execution environments.","externalDocs":{"url":"https://docs.kittycad.io/api/executor"},"name":"executor"},{"description":"CAD file operations. Create, get, and list CAD file conversions. More endpoints will be added here in the future as we build out transforms, etc on CAD models.","externalDocs":{"url":"https://docs.kittycad.io/api/file"},"name":"file"},{"description":"Hidden API endpoints that should not show up in the docs.","externalDocs":{"url":"https://docs.kittycad.io/api/hidden"},"name":"hidden"},{"description":"Meta information about the API.","externalDocs":{"url":"https://docs.kittycad.io/api/meta"},"name":"meta"},{"description":"Modeling API for updating your 3D files using the KittyCAD engine.","externalDocs":{"url":"https://docs.kittycad.io/api/modeling"},"name":"modeling"},{"description":"Endpoints that implement OAuth 2.0 grant flows.","externalDocs":{"url":"https://docs.kittycad.io/api/oauth2"},"name":"oauth2"},{"description":"Operations around payments and billing.","externalDocs":{"url":"https://docs.kittycad.io/api/payments"},"name":"payments"},{"description":"Unit conversion operations.","externalDocs":{"url":"https://docs.kittycad.io/api/file"},"name":"unit"},{"description":"A user is someone who uses the KittyCAD API. Here, we can create, delete, and list users. We can also get information about a user. Operations will only be authorized if the user is requesting information about themselves.","externalDocs":{"url":"https://docs.kittycad.io/api/users"},"name":"users"}]}