{"components":{"responses":{"Error":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Error"}},"schemas":{"AccountProvider":{"description":"An account provider.","oneOf":[{"description":"The Apple account provider.","enum":["apple"],"type":"string"},{"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"},{"description":"The Microsoft account provider.","enum":["microsoft"],"type":"string"},{"description":"The SAML account provider.","enum":["saml"],"type":"string"},{"description":"The Tencent QQ account provider.","enum":["tencent"],"type":"string"},{"description":"Test provider for integration tests (only available during testing).","enum":["test_provider"],"type":"string"}]},"AddHoleFromOffset":{"description":"The response from the `AddHoleFromOffset` command.","properties":{"entity_ids":{"description":"If the offset path splits into multiple paths, this will contain the UUIDs of the new paths. If the offset path remains as a single path, this will be empty, and the resulting ID of the (single) new path will be the ID of the `AddHoleFromOffset` command.","items":{"format":"uuid","type":"string"},"type":"array"}},"required":["entity_ids"],"type":"object"},"AddOrgMember":{"description":"Data for adding a member to an org.","properties":{"email":{"description":"The email address of the user to add to the org.","format":"email","type":"string"},"role":{"allOf":[{"$ref":"#/components/schemas/UserOrgRole"}],"description":"The organization role to give the user."}},"required":["email","role"],"type":"object"},"Address":{"description":"An address for a user.","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."},"created_at":{"description":"The time and date the address was created.","format":"date-time","title":"DateTime","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the address."},"state":{"description":"The state component.","type":"string"},"street1":{"description":"The first street component.","type":"string"},"street2":{"description":"The second street component.","type":"string"},"updated_at":{"description":"The time and date the address was last updated.","format":"date-time","title":"DateTime","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","created_at","id","updated_at","user_id"],"type":"object"},"AddressDetails":{"description":"Address details.","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"},"zip":{"description":"The zip component.","type":"string"}},"required":["country"],"type":"object"},"AdjacencyInfo":{"description":"Edge info struct (useful for maintaining mappings between edges and faces and adjacent/opposite edges).","properties":{"adjacent_info":{"allOf":[{"$ref":"#/components/schemas/EdgeInfo"}],"description":"Adjacent edge and face info.","nullable":true},"opposite_info":{"allOf":[{"$ref":"#/components/schemas/EdgeInfo"}],"description":"Opposite edge and face info.","nullable":true},"original_info":{"allOf":[{"$ref":"#/components/schemas/EdgeInfo"}],"description":"Original edge id and face info.","nullable":true}},"type":"object"},"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"},"AnnotationBasicDimension":{"description":"Parameters for defining an MBD Basic Dimension Annotation state which is measured between two positions in 3D","properties":{"arrow_scale":{"default":1.0,"description":"The scale of the dimension arrows. Defaults to 1.","format":"float","type":"number"},"dimension":{"allOf":[{"$ref":"#/components/schemas/AnnotationMbdBasicDimension"}],"description":"Basic dimension parameters (symbol and tolerance)"},"font_point_size":{"description":"The point size of the fonts used to generate the annotation label. Very large values can negatively affect performance.","format":"uint32","minimum":0,"type":"integer"},"font_scale":{"description":"The scale of the font label in 3D space","format":"float","type":"number"},"from_entity_id":{"description":"Entity to measure the dimension from","format":"uuid","type":"string"},"from_entity_pos":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Normalized position within the entity to position the dimension from"},"offset":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"2D Position offset of the annotation within the plane."},"plane_id":{"description":"Orientation plane. The annotation will lie in this plane which is positioned about the leader position as its origin.","format":"uuid","type":"string"},"precision":{"description":"Number of decimal places to use when displaying tolerance and dimension values","format":"uint32","minimum":0,"type":"integer"},"to_entity_id":{"description":"Entity to measure the dimension to","format":"uuid","type":"string"},"to_entity_pos":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Normalized position within the entity to position the dimension to"}},"required":["dimension","font_point_size","font_scale","from_entity_id","from_entity_pos","offset","plane_id","precision","to_entity_id","to_entity_pos"],"type":"object"},"AnnotationFeatureControl":{"description":"Parameters for defining an MBD Feature Control Annotation state","properties":{"control_frame":{"allOf":[{"$ref":"#/components/schemas/AnnotationMbdControlFrame"}],"description":"MBD Control frame for geometric control","nullable":true},"defined_datum":{"description":"Set if this annotation is defining a datum","maxLength":1,"minLength":1,"nullable":true,"type":"string"},"dimension":{"allOf":[{"$ref":"#/components/schemas/AnnotationMbdBasicDimension"}],"description":"Basic dimensions","nullable":true},"entity_id":{"description":"Entity to place the annotation leader from","format":"uuid","type":"string"},"entity_pos":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Normalized position within the entity to position the annotation leader from"},"font_point_size":{"description":"The point size of the fonts used to generate the annotation label. Very large values can negatively affect performance.","format":"uint32","minimum":0,"type":"integer"},"font_scale":{"description":"The scale of the font label in 3D space","format":"float","type":"number"},"leader_scale":{"default":1.0,"description":"The scale of the leader (dot or arrow). Defaults to 1.","format":"float","type":"number"},"leader_type":{"allOf":[{"$ref":"#/components/schemas/AnnotationLineEnd"}],"description":"Type of leader to use"},"offset":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"2D Position offset of the annotation within the plane."},"plane_id":{"description":"Orientation plane. The annotation will lie in this plane which is positioned about the leader position as its origin.","format":"uuid","type":"string"},"precision":{"description":"Number of decimal places to use when displaying tolerance and dimension values","format":"uint32","minimum":0,"type":"integer"},"prefix":{"description":"Prefix text which will appear before the basic dimension","nullable":true,"type":"string"},"suffix":{"description":"Suffix text which will appear after the basic dimension","nullable":true,"type":"string"}},"required":["entity_id","entity_pos","font_point_size","font_scale","leader_type","offset","plane_id","precision"],"type":"object"},"AnnotationFeatureTag":{"description":"Parameters for defining an MBD Feature Tag Annotation state","properties":{"entity_id":{"description":"Entity to place the annotation leader from","format":"uuid","type":"string"},"entity_pos":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Normalized position within the entity to position the annotation leader from"},"font_point_size":{"description":"The point size of the fonts used to generate the annotation label. Very large values can negatively affect performance.","format":"uint32","minimum":0,"type":"integer"},"font_scale":{"description":"The scale of the font label in 3D space","format":"float","type":"number"},"key":{"description":"Tag key","type":"string"},"leader_scale":{"default":1.0,"description":"The scale of the leader (dot or arrow). Defaults to 1.","format":"float","type":"number"},"leader_type":{"allOf":[{"$ref":"#/components/schemas/AnnotationLineEnd"}],"description":"Type of leader to use"},"offset":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"2D Position offset of the annotation within the plane."},"plane_id":{"description":"Orientation plane. The annotation will lie in this plane which is positioned about the leader position as its origin.","format":"uuid","type":"string"},"show_key":{"description":"Whether or not to display the key on the annotation label","type":"boolean"},"value":{"description":"Tag value","type":"string"}},"required":["entity_id","entity_pos","font_point_size","font_scale","key","leader_type","offset","plane_id","show_key","value"],"type":"object"},"AnnotationLineEnd":{"description":"Annotation line end type","enum":["none","arrow","dot"],"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"},"AnnotationMbdBasicDimension":{"description":"Parameters for defining an MBD basic dimension","properties":{"dimension":{"description":"The explicitly defined dimension. Only required if the measurement is not automatically calculated.","format":"double","nullable":true,"type":"number"},"symbol":{"allOf":[{"$ref":"#/components/schemas/MbdSymbol"}],"description":"Type of symbol to use for this dimension (if required)","nullable":true},"tolerance":{"description":"The tolerance of the dimension","format":"double","type":"number"}},"required":["tolerance"],"type":"object"},"AnnotationMbdControlFrame":{"description":"Parameters for defining an MBD Geometric control frame","properties":{"diameter_symbol":{"allOf":[{"$ref":"#/components/schemas/MbdSymbol"}],"description":"Diameter symbol (if required) whether the geometric control requires a cylindrical or diameter tolerance","nullable":true},"modifier":{"allOf":[{"$ref":"#/components/schemas/MbdSymbol"}],"description":"Feature of size or tolerance modifiers","nullable":true},"primary_datum":{"description":"Primary datum","maxLength":1,"minLength":1,"nullable":true,"type":"string"},"secondary_datum":{"description":"Secondary datum","maxLength":1,"minLength":1,"nullable":true,"type":"string"},"symbol":{"allOf":[{"$ref":"#/components/schemas/MbdSymbol"}],"description":"Geometric symbol, the type of geometric control specified"},"tertiary_datum":{"description":"Tertiary datum","maxLength":1,"minLength":1,"nullable":true,"type":"string"},"tolerance":{"description":"Tolerance value - the total tolerance of the geometric control. The unit is based on the drawing standard.","format":"double","type":"number"}},"required":["symbol","tolerance"],"type":"object"},"AnnotationOptions":{"description":"Options for annotations","properties":{"color":{"allOf":[{"$ref":"#/components/schemas/Color"}],"description":"Color to render the annotation","nullable":true},"dimension":{"allOf":[{"$ref":"#/components/schemas/AnnotationBasicDimension"}],"description":"Set as an MBD measured basic dimension annotation","nullable":true},"feature_control":{"allOf":[{"$ref":"#/components/schemas/AnnotationFeatureControl"}],"description":"Set as an MBD Feature control annotation","nullable":true},"feature_tag":{"allOf":[{"$ref":"#/components/schemas/AnnotationFeatureTag"}],"description":"Set as a feature tag 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"},"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"},"org_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The organization ID of the API call if it is billable through an organization.","nullable":true},"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_query_params":{"description":"The request query params sent by the API call.","type":"string"},"seconds":{"description":"The number of seconds the API call was billed for.","format":"int32","nullable":true,"type":"integer"},"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"},"ApiEndpoint":{"description":"Types of API endpoints.","oneOf":[{"description":"The modeling API.","enum":["modeling"],"type":"string"},{"description":"Machine learning API.","enum":["ml"],"type":"string"},{"description":"File API.","enum":["file"],"type":"string"}]},"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"},"label":{"description":"An optional label for the API token.","nullable":true,"type":"string"},"token":{"allOf":[{"$ref":"#/components/schemas/ApiTokenUuid"}],"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"},"ApiTokenUuid":{"description":"An auth token. A uuid with a prefix of api-","type":"string"},"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":{"attempts":{"default":0,"description":"The number of times we've attempted to process this job.","format":"int16","type":"integer"},"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/OutputFormat3d"}],"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/InputFormat3d"}],"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":{"code":{"description":"The code for the model. This is optional but will be required in the future once we are at v1.","nullable":true,"type":"string"},"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"conversation_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The conversation ID Conversations group different prompts together."},"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/MlFeedback"}],"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."},"kcl_version":{"description":"The version of kcl requested.","nullable":true,"type":"string"},"model":{"allOf":[{"$ref":"#/components/schemas/TextToCadModel"}],"description":"The model being used."},"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":["conversation_id","created_at","id","model","model_version","output_format","prompt","status","type","updated_at","user_id"],"type":"object"},{"description":"Text to CAD iteration.","properties":{"code":{"description":"The code for the new model.","type":"string"},"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"conversation_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The conversation ID Conversations group different prompts together."},"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/MlFeedback"}],"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":{"allOf":[{"$ref":"#/components/schemas/TextToCadModel"}],"description":"The model being used."},"model_version":{"description":"The version of the model.","type":"string"},"original_source_code":{"description":"The original source code for the model, previous to the changes.","type":"string"},"prompt":{"description":"The prompt for the overall changes. This is optional if you only want changes on specific source ranges.","nullable":true,"type":"string"},"source_ranges":{"description":"The source ranges the user suggested to change.","items":{"$ref":"#/components/schemas/SourceRangePrompt"},"type":"array"},"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_iteration"],"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":["code","conversation_id","created_at","id","model","model_version","original_source_code","source_ranges","status","type","updated_at","user_id"],"type":"object"},{"description":"Text to CAD multi-file iteration.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"conversation_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The conversation ID Conversations group different prompts together."},"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/MlFeedback"}],"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."},"kcl_version":{"description":"The version of kcl to use. If empty, the latest version will be used.","nullable":true,"type":"string"},"model":{"allOf":[{"$ref":"#/components/schemas/TextToCadModel"}],"description":"The model being used."},"model_version":{"description":"The version of the model.","type":"string"},"outputs":{"additionalProperties":{"type":"string"},"description":"The output files. Returns a map of the file name to the file contents. The file contents are not encoded since kcl files are not binary.","type":"object"},"project_name":{"description":"The project name. This is used to tie the prompt to a project. Which helps us make our models better over time.","nullable":true,"type":"string"},"prompt":{"description":"The prompt for the overall changes. This is optional if you only want changes on specific source ranges. This will apply to all the files.","nullable":true,"type":"string"},"source_ranges":{"description":"The source ranges the user suggested to change.","items":{"$ref":"#/components/schemas/SourceRangePrompt"},"type":"array"},"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_multi_file_iteration"],"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":["conversation_id","created_at","id","model","model_version","source_ranges","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"},{"description":"Text to CAD iteration.","enum":["text_to_cad_iteration"],"type":"string"},{"description":"Text to CAD multi-file iteration.","enum":["text_to_cad_multi_file_iteration"],"type":"string"}]},"AuthApiKeyResponse":{"description":"The response from the `/auth/api-key` endpoint.","properties":{"session_token":{"description":"The session token","type":"string"}},"required":["session_token"],"type":"object"},"AuthCallback":{"description":"The authentication callback from the OAuth 2.0 client. This is typically posted to the redirect URL as query params after authenticating.","properties":{"code":{"description":"The authorization code.","type":"string"},"id_token":{"description":"For Apple only, a JSON web token containing the user’s identity information.","nullable":true,"type":"string"},"state":{"description":"The state that we had passed in through the user consent URL.","type":"string"},"user":{"description":"For Apple only, a JSON string containing the data requested in the scope property. The returned data is in the following format: `{ \"name\": { \"firstName\": string, \"lastName\": string }, \"email\": string }`","nullable":true,"type":"string"}},"type":"object"},"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"},"BatchResponse":{"anyOf":[{"description":"Response sent when a request succeeded.","properties":{"response":{"allOf":[{"$ref":"#/components/schemas/OkModelingCmdResponse"}],"description":"Response to the modeling command."}},"required":["response"],"type":"object"},{"description":"Response sent when a request did not succeed.","properties":{"errors":{"description":"Errors that occurred during the modeling command.","items":{"$ref":"#/components/schemas/ApiError"},"type":"array"}},"required":["errors"],"type":"object"}],"description":"Websocket responses can either be successful or unsuccessful. Slightly different schemas in either case."},"BillingInfo":{"description":"The billing information for payments.","properties":{"address":{"allOf":[{"$ref":"#/components/schemas/AddressDetails"}],"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"},"BlendType":{"description":"What kind of blend to do","oneOf":[{"description":"Use the tangent of the surfaces to calculate the blend.","enum":["tangent"],"type":"string"}]},"BlockReason":{"description":"The reason for blocking a user.","oneOf":[{"description":"The user is missing a payment method and has exceeded their free API call credits for the month.","enum":["missing_payment_method"],"type":"string"},{"description":"The users payment method has failed.","enum":["payment_method_failed"],"type":"string"},{"description":"The user repeatedly upgraded and downgraded to recycle free-plan credits.","enum":["upgrade_downgrade_abuse"],"type":"string"}]},"BodyType":{"description":"Body type determining if the operation will create a manifold (solid) body or a non-manifold collection of surfaces.","oneOf":[{"description":"Defines a body that is manifold.","enum":["solid"],"type":"string"},{"description":"Defines a body that is non-manifold (an open collection of connected surfaces).","enum":["surface"],"type":"string"}]},"BooleanImprint":{"description":"The response from the 'BooleanImprint'.","properties":{"extra_solid_ids":{"description":"If the operation produced just one body, then its ID will be the ID of the modeling command request. But if any extra bodies are produced, then their IDs will be included here.","items":{"format":"uuid","type":"string"},"type":"array"}},"type":"object"},"BooleanIntersection":{"description":"The response from the 'BooleanIntersection'.","properties":{"extra_solid_ids":{"description":"If the operation produced just one solid, then its ID will be the ID of the modeling command request. But if any extra solids are produced, then their IDs will be included here.","items":{"format":"uuid","type":"string"},"type":"array"}},"type":"object"},"BooleanSubtract":{"description":"The response from the 'BooleanSubtract'.","properties":{"extra_solid_ids":{"description":"If the operation produced just one solid, then its ID will be the ID of the modeling command request. But if any extra solids are produced, then their IDs will be included here.","items":{"format":"uuid","type":"string"},"type":"array"}},"type":"object"},"BooleanUnion":{"description":"The response from the 'BooleanUnion'.","properties":{"extra_solid_ids":{"description":"If the operation produced just one solid, then its ID will be the ID of the modeling command request. But if any extra solids are produced, then their IDs will be included here.","items":{"format":"uuid","type":"string"},"type":"array"}},"type":"object"},"BoundingBox":{"description":"The response from the 'BoundingBox'.","properties":{"center":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Center of the box."},"dimensions":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Dimensions of the box along each axis."}},"required":["center","dimensions"],"type":"object"},"CadDiscoverySource":{"description":"Strict acquisition-source enum used by the website CAD user info form.","oneOf":[{"description":"Found via Google search.","enum":["google"],"type":"string"},{"description":"Found via X/Twitter.","enum":["x"],"type":"string"},{"description":"Found via TikTok.","enum":["tiktok"],"type":"string"},{"description":"Found via Reddit.","enum":["reddit"],"type":"string"},{"description":"Found via Payload Space.","enum":["payload_space"],"type":"string"},{"description":"Found via YouTube.","enum":["youtube"],"type":"string"},{"description":"Found via Instagram.","enum":["instagram"],"type":"string"},{"description":"Found via Facebook.","enum":["facebook"],"type":"string"},{"description":"Found through friend referral or word of mouth.","enum":["word_of_mouth"],"type":"string"},{"description":"Found through another source described in free text.","enum":["other"],"type":"string"}]},"CadIndustry":{"description":"Strict CAD industry enum for onboarding/CRM form submissions.","oneOf":[{"description":"Mechanical engineering.","enum":["mechanical_engineering"],"type":"string"},{"description":"Manufacturing.","enum":["manufacturing"],"type":"string"},{"description":"Automotive.","enum":["automotive"],"type":"string"},{"description":"Aerospace.","enum":["aerospace"],"type":"string"},{"description":"Civil engineering.","enum":["civil_engineering"],"type":"string"},{"description":"Electrical engineering.","enum":["electrical_engineering"],"type":"string"},{"description":"Construction.","enum":["construction"],"type":"string"},{"description":"Product design.","enum":["product_design"],"type":"string"},{"description":"Architecture.","enum":["architecture"],"type":"string"},{"description":"Other industry.","enum":["other"],"type":"string"}]},"CadUserType":{"description":"Strict CAD user-type enum for onboarding/CRM form submissions.","oneOf":[{"description":"Student or researcher persona.","enum":["student_or_researcher"],"type":"string"},{"description":"Hobbyist persona.","enum":["hobbyist"],"type":"string"},{"description":"Professional persona.","enum":["professional"],"type":"string"}]},"CameraDragEnd":{"description":"The response from the `CameraDragEnd` command.","properties":{"settings":{"allOf":[{"$ref":"#/components/schemas/CameraSettings"}],"description":"Camera settings"}},"required":["settings"],"type":"object"},"CameraDragInteractionType":{"description":"The type of camera drag interaction.","oneOf":[{"description":"Camera pan","enum":["pan"],"type":"string"},{"description":"Camera rotate (spherical camera revolve/orbit)","enum":["rotate"],"type":"string"},{"description":"Camera rotate (trackball with 3 degrees of freedom)","enum":["rotatetrackball"],"type":"string"},{"description":"Camera zoom (increase or decrease distance to reference point center)","enum":["zoom"],"type":"string"}]},"CameraDragMove":{"description":"The response from the `CameraDragMove` command. Note this is an \"unreliable\" channel message, so this data may need more data like a \"sequence\"","properties":{"settings":{"allOf":[{"$ref":"#/components/schemas/CameraSettings"}],"description":"Camera settings"}},"required":["settings"],"type":"object"},"CameraDragStart":{"description":"The response from the `CameraDragStart` endpoint.","type":"object"},"CameraMovement":{"description":"A type of camera movement applied after certain camera operations","oneOf":[{"description":"Adjusts the camera position during the camera operation","enum":["vantage"],"type":"string"},{"description":"Keeps the camera position in place","enum":["none"],"type":"string"}]},"CameraSettings":{"description":"Camera settings including position, center, fov etc","properties":{"center":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Camera's look-at center (center-pos gives viewing vector)"},"fov_y":{"description":"Camera's field-of-view angle (if ortho is false)","format":"float","nullable":true,"type":"number"},"orientation":{"allOf":[{"$ref":"#/components/schemas/Point4d"}],"description":"The Camera's orientation (in the form of a quaternion)"},"ortho":{"description":"Whether or not the camera is in ortho mode","type":"boolean"},"ortho_scale":{"description":"The camera's ortho scale (derived from viewing distance if ortho is true)","format":"float","nullable":true,"type":"number"},"pos":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Camera position (vantage)"},"up":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Camera's world-space up vector"}},"required":["center","orientation","ortho","pos","up"],"type":"object"},"CameraViewState":{"properties":{"eye_offset":{"format":"float","type":"number"},"fov_y":{"format":"float","type":"number"},"is_ortho":{"type":"boolean"},"ortho_scale_enabled":{"type":"boolean"},"ortho_scale_factor":{"format":"float","type":"number"},"pivot_position":{"$ref":"#/components/schemas/Point3d"},"pivot_rotation":{"$ref":"#/components/schemas/Point4d"},"world_coord_system":{"$ref":"#/components/schemas/WorldCoordinateSystem"}},"required":["eye_offset","fov_y","is_ortho","ortho_scale_enabled","ortho_scale_factor","pivot_position","pivot_rotation","world_coord_system"],"type":"object"},"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_frame_height":{"description":"The height of the inbound video stream in pixels.\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-frameheight","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"rtc_frame_width":{"description":"The width of the inbound video stream in pixels.\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-framewidth","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"rtc_frames_decoded":{"description":"Counter of the number of WebRTC frames that the client has decoded from the inbound video stream.\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-freezecount","format":"uint64","minimum":0,"nullable":true,"type":"integer"},"rtc_frames_dropped":{"description":"Counter of the number of WebRTC frames the client has dropped from the inbound video stream.\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-framesdropped","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"rtc_frames_per_second":{"description":"Current number of frames being rendered in the last second. A good target is 60 frames per second, but it can fluctuate depending on network conditions.\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-freezecount","format":"uint8","minimum":0,"nullable":true,"type":"integer"},"rtc_frames_received":{"description":"Counter of the number of WebRTC frames that the client has received from the inbound video stream.\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-freezecount","format":"uint64","minimum":0,"nullable":true,"type":"integer"},"rtc_freeze_count":{"description":"Number of times the inbound video playback has frozen. This is usually due to network conditions.\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-freezecount","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"rtc_jitter_sec":{"description":"Amount of \"jitter\" in the inbound video stream. 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.\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcreceivedrtpstreamstats-jitter","format":"double","nullable":true,"type":"number"},"rtc_keyframes_decoded":{"description":"Number of \"key frames\" decoded in the inbound 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.\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-keyframesdecoded","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"rtc_packets_lost":{"description":"Amount of packets lost in the inbound video stream.\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcreceivedrtpstreamstats-packetslost","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"rtc_pause_count":{"description":"Count of the total number of video pauses experienced by this receiver.\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-pausecount","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"rtc_pli_count":{"description":"Count the total number of Picture Loss Indication (PLI) packets.\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-plicount","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"rtc_stun_rtt_sec":{"description":"Total duration of pauses in seconds.\n\nThis is the \"ping\" between the client and the STUN server. Not to be confused with the E2E RTT documented [here](https://www.w3.org/TR/webrtc-stats/#dom-rtcremoteinboundrtpstreamstats-roundtriptime)\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcicecandidatepairstats-currentroundtriptime","format":"float","nullable":true,"type":"number"},"rtc_total_freezes_duration_sec":{"description":"Number of seconds of frozen video the user has been subjected to.\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-totalfreezesduration","format":"float","nullable":true,"type":"number"},"rtc_total_pauses_duration_sec":{"description":"Count of the total number of video pauses experienced by this receiver.\n\nhttps://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats-totalpausesduration","format":"float","nullable":true,"type":"number"}},"type":"object"},"ClosePath":{"description":"The response from the `ClosePath` command.","properties":{"face_id":{"description":"The UUID of the lone face of the resulting solid2D.","format":"uuid","type":"string"}},"required":["face_id"],"type":"object"},"ClosestEdge":{"description":"The response from the 'ClosestEdge'.","properties":{"edge_id":{"description":"The ID of the edge closest to the point given in the request. If there are no edges in the scene, returns None.","format":"uuid","nullable":true,"type":"string"}},"type":"object"},"CodeLanguage":{"description":"The language code is written in.\n\nJSON schema
\n\n```json { \"description\": \"The language code is written in.\", \"oneOf\": [ { \"description\": \"The `go` programming language.\", \"type\": \"string\", \"enum\": [ \"go\" ] }, { \"description\": \"The `python` programming language.\", \"type\": \"string\", \"enum\": [ \"python\" ] }, { \"description\": \"The `node` programming language.\", \"type\": \"string\", \"enum\": [ \"node\" ] } ] } ``` ","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"}]},"CodeOption":{"description":"`CodeOption`\n\nJSON schema
\n\n```json { \"type\": \"string\", \"enum\": [ \"parse\", \"mock_execute\", \"execute\" ] } ``` ","enum":["parse","mock_execute","execute"],"type":"string"},"CodeOutput":{"description":"Output of the code being executed.\n\nJSON schema
\n\n```json { \"description\": \"Output of the code being executed.\", \"type\": \"object\", \"properties\": { \"output_files\": { \"description\": \"The contents of the files requested if they were passed.\", \"type\": \"array\", \"items\": { \"$ref\": \"#/components/schemas/OutputFile\" } }, \"stderr\": { \"description\": \"The stderr of the code.\", \"default\": \"\", \"type\": \"string\" }, \"stdout\": { \"description\": \"The stdout of the code.\", \"default\": \"\", \"type\": \"string\" } } } ``` ","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"},"CompanySize":{"description":"Strict company-size enum for onboarding/CRM form submissions.","oneOf":[{"description":"1-10 people.","enum":["one_to_ten"],"type":"string"},{"description":"11-50 people.","enum":["eleven_to_fifty"],"type":"string"},{"description":"51-200 people.","enum":["fifty_one_to_two_hundred"],"type":"string"},{"description":"201-500 people.","enum":["two_hundred_one_to_five_hundred"],"type":"string"},{"description":"501-1000 people.","enum":["five_hundred_one_to_one_thousand"],"type":"string"},{"description":"1000+ people.","enum":["one_thousand_plus"],"type":"string"},{"description":"Other company size.","enum":["other"],"type":"string"}]},"ComplementaryEdges":{"description":"Struct to contain the edge information of a wall of an extrude/rotate/loft/sweep.","properties":{"adjacent_ids":{"description":"Every edge that shared one common vertex with the original edge.","items":{"format":"uuid","type":"string"},"type":"array"},"opposite_id":{"description":"The opposite edge has no common vertices with the original edge. A wall may not have an opposite edge (i.e. a revolve that touches the axis of rotation).","format":"uuid","nullable":true,"type":"string"}},"required":["adjacent_ids"],"type":"object"},"ComponentTransform":{"description":"Container that holds a translate, rotate and scale. Defaults to no change, everything stays the same (i.e. the identity function).","properties":{"rotate_angle_axis":{"allOf":[{"$ref":"#/components/schemas/TransformByForPoint4d"}],"description":"Rotate component of the transform. The rotation is specified as an axis and an angle (xyz are the components of the axis, w is the angle in degrees).","nullable":true},"rotate_rpy":{"allOf":[{"$ref":"#/components/schemas/TransformByForPoint3d"}],"description":"Rotate component of the transform. The rotation is specified as a roll, pitch, yaw.","nullable":true},"scale":{"allOf":[{"$ref":"#/components/schemas/TransformByForPoint3d"}],"description":"Scale component of the transform.","nullable":true},"translate":{"allOf":[{"$ref":"#/components/schemas/TransformByForPoint3d"}],"description":"Translate component of the transform.","nullable":true}},"type":"object"},"Conversation":{"description":"A conversation composed of many ML prompts.","properties":{"created_at":{"description":"The date and time the conversation was created.","format":"date-time","title":"DateTime","type":"string"},"first_prompt":{"description":"The prompt that started this conversation.","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the conversation."},"updated_at":{"description":"The date and time the conversation 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 conversation."}},"required":["created_at","first_prompt","id","updated_at","user_id"],"type":"object"},"ConversationResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/Conversation"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"ConversionParams":{"description":"Describes the file to convert (src) and what it should be converted into (output).","properties":{"output_format":{"allOf":[{"$ref":"#/components/schemas/OutputFormat3d"}],"description":"Describes the output file(s)."},"src_format":{"allOf":[{"$ref":"#/components/schemas/InputFormat3d"}],"description":"Describes the input file(s)."}},"required":["output_format","src_format"],"type":"object"},"ConversionSortMode":{"description":"Supported sort modes for org dataset conversions.","oneOf":[{"description":"Sort by created_at in increasing order.","enum":["created_at_ascending"],"type":"string"},{"description":"Sort by created_at in decreasing order.","enum":["created_at_descending"],"type":"string"},{"description":"Sort by status in increasing order.","enum":["status_ascending"],"type":"string"},{"description":"Sort by status in decreasing order.","enum":["status_descending"],"type":"string"},{"description":"Sort by updated_at in increasing order.","enum":["updated_at_ascending"],"type":"string"},{"description":"Sort by updated_at in decreasing order.","enum":["updated_at_descending"],"type":"string"}]},"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"},"id":{"description":"Unique identifier for the object.","type":"string"},"metadata":{"additionalProperties":{"type":"string"},"default":{},"description":"Set of key-value pairs.","type":"object"},"name":{"description":"Name of the coupon displayed to customers on, for instance invoices, or receipts.\n\nBy default the `id` is shown if `name` is not set.","nullable":true,"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"},"CreateCustomModel":{"description":"Body for creating a custom ML model.","properties":{"dataset_ids":{"description":"Org dataset IDs that should be linked to the model. Must contain at least one dataset owned by the org.","items":{"$ref":"#/components/schemas/Uuid"},"type":"array"},"name":{"description":"The model's display name.","type":"string"},"system_prompt":{"description":"The model's system prompt.","nullable":true,"type":"string"}},"required":["dataset_ids","name"],"type":"object"},"CreateOrgDataset":{"description":"Payload for creating an org dataset.","properties":{"name":{"description":"The dataset's display name.","type":"string"},"source":{"allOf":[{"$ref":"#/components/schemas/OrgDatasetSource"}],"description":"Details for accessing the dataset."}},"required":["name","source"],"type":"object"},"CreateRegion":{"description":"The response from the 'CreateRegion'. The region should have an ID taken from the ID of the 'CreateRegion' modeling command.","type":"object"},"CreateRegionFromQueryPoint":{"description":"The response from the 'CreateRegionFromQueryPoint'. The region should have an ID taken from the ID of the 'CreateRegionFromQueryPoint' modeling command.","type":"object"},"CreateShortlinkRequest":{"description":"Request to create a shortlink.","properties":{"password":{"description":"The password for the shortlink, if you want to restrict access to it. This can only be set if your subscription allows for it. Otherwise, it will return an error. When you access the link it will be required to enter this password through basic auth. The username will be `{anything}` and the password will be the password you set here.","nullable":true,"type":"string"},"restrict_to_org":{"default":false,"description":"If the shortlink should be restricted to the user's organization to view. This only applies to org shortlinks. If you are creating a user shortlink and you are not a member of a team or enterprise and you try to set this to true, it will fail.","type":"boolean"},"url":{"description":"The URL to redirect back to.","format":"uri","type":"string"}},"required":["url"],"type":"object"},"CreateShortlinkResponse":{"description":"Response from creating a shortlink.","properties":{"key":{"description":"The key for this url. This is what you use to update or delete the specific shortlink.","type":"string"},"url":{"description":"The shortened url.","format":"uri","type":"string"}},"required":["key","url"],"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 .","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"},"CurveSetConstraint":{"description":"The response from the `CurveSetConstraint` endpoint.","type":"object"},"CurveType":{"description":"The type of Curve (embedded within path)","enum":["line","arc","nurbs"],"type":"string"},"CustomModel":{"description":"Custom ML model created by a user for an organization.","properties":{"created_at":{"description":"The date and time the model was created.","format":"date-time","title":"DateTime","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the model."},"name":{"description":"User-provided display name. This is mutable; lookup by ID instead.","type":"string"},"org_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The ID of the org owning the model."},"system_prompt":{"description":"User-provided LLM system prompt. This is akin to `AGENTS.md`.","type":"string"},"updated_at":{"description":"The date and time the model was last updated.","format":"date-time","title":"DateTime","type":"string"}},"required":["created_at","id","name","org_id","system_prompt","updated_at"],"type":"object"},"Customer":{"description":"The resource representing a payment \"Customer\".","properties":{"address":{"allOf":[{"$ref":"#/components/schemas/AddressDetails"}],"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 customer.\n\nThis holds information about the financial balance for the customer.","properties":{"created_at":{"description":"The date and time the balance was created.","format":"date-time","title":"DateTime","type":"string"},"monthly_api_credits_remaining":{"description":"The number of monthly API credits remaining in the balance. This is the number of credits remaining in the balance.\n\nBoth the monetary value and the number of credits are returned, but they reflect the same value in the database.","format":"uint64","minimum":0,"type":"integer"},"monthly_api_credits_remaining_monetary_value":{"description":"The monetary value of the monthly API 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.\n\nBoth the monetary value and the number of credits are returned, but they reflect the same value in the database.","format":"money-usd","title":"double","type":"number"},"stable_api_credits_remaining":{"description":"The number of stable API credits remaining in the balance. These do not get reset or re-upped every month. This is separate from the monthly credits. Credits will first pull from the monthly credits, then the stable credits. Stable just means that they do not get reset every month. A user will have stable credits if a Zoo employee granted them credits.\n\nBoth the monetary value and the number of credits are returned, but they reflect the same value in the database.","format":"uint64","minimum":0,"type":"integer"},"stable_api_credits_remaining_monetary_value":{"description":"The monetary value of stable API credits remaining in the balance. These do not get reset or re-upped every month. This is separate from the monthly credits. Credits will first pull from the monthly credits, then the stable credits. Stable just means that they do not get reset every month. A user will have stable credits if a Zoo employee granted them credits.\n\nBoth the monetary value and the number of credits are returned, but they reflect the same value in the database.","format":"money-usd","title":"double","type":"number"},"subscription_details":{"allOf":[{"$ref":"#/components/schemas/ZooProductSubscriptions"}],"description":"Details about the subscription.","nullable":true},"subscription_id":{"description":"The subscription ID for the user.","nullable":true,"type":"string"},"total_due":{"description":"This includes any outstanding, draft, or open invoices and any pending invoice items. This does not include any credits the customer has on their account. This amount is only returned if requested from the api.","format":"money-usd","nullable":true,"title":"double","type":"number"},"updated_at":{"description":"The date and time the balance was last updated.","format":"date-time","title":"DateTime","type":"string"}},"required":["created_at","monthly_api_credits_remaining","monthly_api_credits_remaining_monetary_value","stable_api_credits_remaining","stable_api_credits_remaining_monetary_value","updated_at"],"type":"object"},"CutStrategy":{"description":"What strategy (algorithm) should be used for cutting? Defaults to Automatic.","oneOf":[{"description":"Basic fillet cut. This has limitations, like the filletted edges can't touch each other. But it's very fast and simple.","enum":["basic"],"type":"string"},{"description":"More complicated fillet cut. It works for more use-cases, like edges that touch each other. But it's slower than the Basic method.","enum":["csg"],"type":"string"},{"description":"Tries the Basic method, and if that doesn't work, tries the CSG strategy.","enum":["automatic"],"type":"string"}]},"CutType":{"description":"What kind of cut to do","oneOf":[{"description":"Round off an edge.","enum":["fillet"],"type":"string"},{"description":"Cut away an edge.","enum":["chamfer"],"type":"string"}]},"CutTypeV2":{"description":"What kind of cut to perform when cutting an edge.","oneOf":[{"additionalProperties":false,"description":"Round off an edge.","properties":{"fillet":{"properties":{"radius":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The radius of the fillet."},"second_length":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The second length affects the edge length of the second face of the cut. This will cause the fillet to take on the shape of a conic section, instead of an arc.","nullable":true}},"required":["radius"],"type":"object"}},"required":["fillet"],"type":"object"},{"additionalProperties":false,"description":"Cut away an edge.","properties":{"chamfer":{"properties":{"angle":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"description":"The angle of the chamfer, default is 45deg.","nullable":true},"distance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The distance from the edge to cut on each face."},"second_distance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The second distance affects the edge length of the second face of the cut.","nullable":true},"swap":{"description":"If true, the second distance or angle is applied to the other face of the cut.","type":"boolean"}},"required":["distance","swap"],"type":"object"}},"required":["chamfer"],"type":"object"},{"additionalProperties":false,"description":"A custom cut profile.","properties":{"custom":{"properties":{"path":{"description":"The path that will be used for the custom profile.","format":"uuid","type":"string"}},"required":["path"],"type":"object"}},"required":["custom"],"type":"object"}]},"DatasetS3Policies":{"description":"Aggregated AWS policies required for onboarding an org dataset stored in S3.","properties":{"bucket_policy":{"description":"Optional S3 bucket policy that scopes Zoo's access to the dataset prefix."},"permission_policy":{"description":"Inline IAM permission policy the customer should attach to their role."},"trust_policy":{"description":"IAM trust policy that allows Zoo's account to assume the customer's role."}},"required":["bucket_policy","permission_policy","trust_policy"],"type":"object"},"DefaultCameraCenterToScene":{"description":"The response from the `DefaultCameraCenterToScene` endpoint.","type":"object"},"DefaultCameraCenterToSelection":{"description":"The response from the `DefaultCameraCenterToSelection` endpoint.","type":"object"},"DefaultCameraFocusOn":{"description":"The response from the `DefaultCameraFocusOn` command.","type":"object"},"DefaultCameraGetSettings":{"description":"The response from the `DefaultCameraGetSettings` command.","properties":{"settings":{"allOf":[{"$ref":"#/components/schemas/CameraSettings"}],"description":"Camera settings"}},"required":["settings"],"type":"object"},"DefaultCameraGetView":{"description":"The response from the `DefaultCameraGetView` command.","properties":{"view":{"allOf":[{"$ref":"#/components/schemas/CameraViewState"}],"description":"Camera view state"}},"required":["view"],"type":"object"},"DefaultCameraLookAt":{"description":"The response from the `DefaultCameraLookAt` endpoint.","type":"object"},"DefaultCameraPerspectiveSettings":{"description":"The response from the `DefaultCameraPerspectiveSettings` endpoint.","type":"object"},"DefaultCameraSetOrthographic":{"description":"The response from the `DefaultCameraSetOrthographic` endpoint.","type":"object"},"DefaultCameraSetPerspective":{"description":"The response from the `DefaultCameraSetPerspective` endpoint.","type":"object"},"DefaultCameraSetView":{"description":"The response from the `DefaultCameraSetView` command.","type":"object"},"DefaultCameraZoom":{"description":"The response from the `DefaultCameraZoom` command.","properties":{"settings":{"allOf":[{"$ref":"#/components/schemas/CameraSettings"}],"description":"Camera settings"}},"required":["settings"],"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"},"DerEncodedKeyPair":{"description":"The DER encoded key pair.","properties":{"private_key":{"description":"The request signing private key (pem file).","format":"byte","title":"String","type":"string"},"public_cert":{"description":"The request signing public certificate (pem file).","format":"byte","title":"String","type":"string"}},"required":["private_key","public_cert"],"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"},"DeviceAccessTokenUuid":{"description":"An auth token. A uuid with a prefix of dev-","type":"string"},"DeviceAuthConfirmParams":{"description":"The request parameters to confirm 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"},"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"},"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"}]},"DisableDryRun":{"description":"The response from the `DisableDryRun` endpoint.","type":"object"},"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"},"DiscountCode":{"description":"A discount code for a store.","properties":{"code":{"description":"The code for the discount.","type":"string"},"expires_at":{"description":"The date the discount code expires.","format":"date-time","nullable":true,"type":"string"},"percent_off":{"description":"The percent off for the discount.","format":"uint32","minimum":0,"type":"integer"}},"required":["code","percent_off"],"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"}]},"DxfStorage":{"description":"Export storage.","oneOf":[{"description":"Plaintext encoding.\n\nThis is the default setting.","enum":["ascii"],"type":"string"},{"description":"Binary encoding.","enum":["binary"],"type":"string"}]},"EdgeInfo":{"description":"A list of faces for a specific edge.","properties":{"edge_id":{"description":"The UUID of the id.","format":"uuid","type":"string"},"faces":{"description":"The faces of each edge.","items":{"format":"uuid","type":"string"},"type":"array"}},"required":["edge_id","faces"],"type":"object"},"EdgeLinesVisible":{"description":"The response from the `EdgeLinesVisible` endpoint.","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"},"EmailMarketingConfirmTokenBody":{"description":"Request payload for confirming a double-opt-in token.","properties":{"token":{"description":"The token id from the confirmation email.","type":"string"}},"required":["token"],"type":"object"},"EmailMarketingConsentState":{"description":"Public view of an authenticated user's email marketing consent state.","properties":{"confirmed_at":{"description":"Time the double opt-in confirmation completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"is_subscribed":{"description":"Whether the user is currently subscribed to marketing email.","type":"boolean"},"prompt_seen_at":{"description":"First time the in-app prompt was seen.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"requested_at":{"description":"Time the latest opt-in request email was sent.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"should_show_prompt":{"description":"Whether the website should show the modal for this user.","type":"boolean"},"status":{"allOf":[{"$ref":"#/components/schemas/EmailMarketingConsentStatus"}],"description":"Current consent state."}},"required":["is_subscribed","should_show_prompt","status"],"type":"object"},"EmailMarketingConsentStatus":{"description":"Email marketing consent state for a user.","oneOf":[{"description":"No choice has been made yet.","enum":["unknown"],"type":"string"},{"description":"User has seen and dismissed the modal without deciding.","enum":["dismissed"],"type":"string"},{"description":"User requested opt-in and must confirm via email.","enum":["pending"],"type":"string"},{"description":"User explicitly confirmed via email flow.","enum":["confirmed"],"type":"string"},{"description":"User explicitly declined.","enum":["declined"],"type":"string"}]},"EnableDryRun":{"description":"The response from the `EnableDryRun` endpoint.","type":"object"},"EnableSketchMode":{"description":"The response from the `EnableSketchMode` endpoint.","type":"object"},"EngineUtilEvaluatePath":{"description":"The response of the `EngineUtilEvaluatePath` endpoint","properties":{"pos":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The evaluated path curve position"}},"required":["pos"],"type":"object"},"EntityCircularPattern":{"description":"The response from the `EntityCircularPattern` command.","properties":{"entity_face_edge_ids":{"description":"The Face, edge, and entity ids of the patterned entities.","items":{"$ref":"#/components/schemas/FaceEdgeInfo"},"type":"array"}},"type":"object"},"EntityClone":{"description":"The response from the `EntityClone` command.","properties":{"face_edge_ids":{"description":"The Face and Edge Ids of the cloned entity.","items":{"$ref":"#/components/schemas/FaceEdgeInfo"},"type":"array"}},"type":"object"},"EntityDeleteChildren":{"description":"The response from the `EntityDeleteChildren` command.","type":"object"},"EntityFade":{"description":"The response from the `EntityFade` endpoint.","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":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The maximum distance between the input entities."},"min_distance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The minimum distance between the input entities."}},"required":["max_distance","min_distance"],"type":"object"},"EntityGetIndex":{"description":"The response from the `EntityGetIndex` command.","properties":{"entity_index":{"description":"The child index of the entity.","format":"uint32","minimum":0,"type":"integer"}},"required":["entity_index"],"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"},"EntityGetPrimitiveIndex":{"description":"The response from the `EntityGetPrimitiveIndex` command.","properties":{"entity_type":{"allOf":[{"$ref":"#/components/schemas/EntityType"}],"description":"The type of this entity. Helps infer whether this is an edge or a face index."},"primitive_index":{"description":"The primitive index of the entity.","format":"uint32","minimum":0,"type":"integer"}},"required":["entity_type","primitive_index"],"type":"object"},"EntityGetSketchPaths":{"description":"The response from the `EntityGetSketchPaths` command.","properties":{"entity_ids":{"description":"The UUIDs of the sketch paths.","items":{"format":"uuid","type":"string"},"type":"array"}},"required":["entity_ids"],"type":"object"},"EntityLinearPattern":{"description":"The response from the `EntityLinearPattern` command.","properties":{"entity_face_edge_ids":{"description":"The Face, edge, and entity ids of the patterned entities.","items":{"$ref":"#/components/schemas/FaceEdgeInfo"},"type":"array"}},"type":"object"},"EntityLinearPatternTransform":{"description":"The response from the `EntityLinearPatternTransform` command.","properties":{"entity_face_edge_ids":{"description":"The Face, edge, and entity ids of the patterned entities.","items":{"$ref":"#/components/schemas/FaceEdgeInfo"},"type":"array"}},"type":"object"},"EntityMakeHelix":{"description":"The response from the `EntityMakeHelix` endpoint.","type":"object"},"EntityMakeHelixFromEdge":{"description":"The response from the `EntityMakeHelixFromEdge` endpoint.","type":"object"},"EntityMakeHelixFromParams":{"description":"The response from the `EntityMakeHelixFromParams` endpoint.","type":"object"},"EntityMirror":{"description":"The response from the `EntityMirror` endpoint.","properties":{"entity_face_edge_ids":{"description":"The Face, edge, and entity ids of the patterned entities.","items":{"$ref":"#/components/schemas/FaceEdgeInfo"},"type":"array"}},"type":"object"},"EntityMirrorAcrossEdge":{"description":"The response from the `EntityMirrorAcrossEdge` endpoint.","properties":{"entity_face_edge_ids":{"description":"The Face, edge, and entity ids of the patterned entities.","items":{"$ref":"#/components/schemas/FaceEdgeInfo"},"type":"array"}},"type":"object"},"EntitySetOpacity":{"description":"The response from the `EntitySetOpacity` endpoint.","type":"object"},"EntityType":{"description":"The type of entity","enum":["entity","object","path","curve","solid2d","solid3d","edge","face","plane","vertex"],"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":"Auth token is missing from the request","enum":["auth_token_missing"],"type":"string"},{"description":"Auth token is invalid in some way (expired, incorrect format, etc)","enum":["auth_token_invalid"],"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"}]},"Event":{"description":"Telemetry data we are collecting","oneOf":[{"description":"An event related to modeling app files","properties":{"attachment_uri":{"description":"Attachment URI for where the attachment is stored.","nullable":true,"type":"string"},"created_at":{"description":"Time this event was created.","format":"date-time","type":"string"},"event_type":{"allOf":[{"$ref":"#/components/schemas/ModelingAppEventType"}],"description":"The specific event type from the modeling app."},"last_compiled_at":{"description":"Time the associated attachment was last compiled.","format":"date-time","nullable":true,"type":"string"},"project_description":{"description":"Project descriptino as given by the user.","nullable":true,"type":"string"},"project_name":{"description":"Project name as given by the user.","type":"string"},"source_id":{"description":"The source app for this event, uuid that is unique to the app.","format":"uuid","type":"string"},"type":{"enum":["modeling_app_event"],"type":"string"},"user_id":{"description":"An anonymous user id generated client-side.","type":"string"}},"required":["created_at","event_type","project_name","source_id","type","user_id"],"type":"object"}]},"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"},"Export2d":{"description":"The response from the `Export2d` endpoint.","properties":{"files":{"description":"The files that were exported.","items":{"$ref":"#/components/schemas/ExportFile"},"type":"array"}},"required":["files"],"type":"object"},"Export3d":{"description":"The response from the `Export3d` 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"},"ExtendPath":{"description":"The response from the `ExtendPath` endpoint.","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: Stripe","properties":{"block":{"allOf":[{"$ref":"#/components/schemas/BlockReason"}],"description":"If the user should be blocked and the reason why.","nullable":true},"can_train_on_data":{"default":false,"description":"If we can train on the user's data. If the user is a member of an organization, the organization's setting will override this.","type":"boolean"},"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"},"deletion_scheduled":{"default":false,"description":"If the user is scheduled for deletion","type":"boolean"},"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"},"is_onboarded":{"default":false,"description":"If the user has finished onboarding.","type":"boolean"},"is_service_account":{"default":false,"description":"If the user is tied to a service account.","type":"boolean"},"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"},"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"},"Extrude":{"description":"The response from the `Extrude` endpoint.","type":"object"},"ExtrudeMethod":{"description":"Extrusion method determining if the extrusion will be part of the existing object or an entirely new object.","oneOf":[{"description":"Create a new object that is not connected to the object it is extruded from. This will result in two objects after the operation.","enum":["new"],"type":"string"},{"description":"This extrusion will be part of object it is extruded from. This will result in one object after the operation.","enum":["merge"],"type":"string"}]},"ExtrudeReference":{"description":"Type of reference geometry to extrude to.","oneOf":[{"additionalProperties":false,"description":"Extrudes along the normal of the top face until it is as close to the entity as possible. An entity can be a solid, a path, a face, etc.","properties":{"entity_reference":{"properties":{"entity_id":{"description":"The UUID of the entity to extrude to.","format":"uuid","type":"string"}},"required":["entity_id"],"type":"object"}},"required":["entity_reference"],"type":"object"},{"additionalProperties":false,"description":"Extrudes until the top face is as close as possible to this given axis.","properties":{"axis":{"properties":{"axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The axis to extrude to."},"point":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"default":{"x":0.0,"y":0.0,"z":0.0},"description":"Point the axis goes through. Defaults to (0, 0, 0)."}},"required":["axis"],"type":"object"}},"required":["axis"],"type":"object"},{"additionalProperties":false,"description":"Extrudes until the top face is as close as possible to this given point.","properties":{"point":{"properties":{"point":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The point to extrude to."}},"required":["point"],"type":"object"}},"required":["point"],"type":"object"}]},"ExtrudeToReference":{"description":"The response from the `ExtrudeToReference` endpoint.","type":"object"},"ExtrudedFaceInfo":{"description":"IDs for the extruded faces.","properties":{"bottom":{"description":"The face made from the original 2D shape being extruded. If the solid is extruded from a shape which already has an ID (e.g. extruding something which was sketched on a face), this doesn't need to be sent.","format":"uuid","nullable":true,"type":"string"},"sides":{"description":"Any intermediate sides between the top and bottom.","items":{"$ref":"#/components/schemas/SideFace"},"type":"array"},"top":{"description":"Top face of the extrusion (parallel and further away from the original 2D shape being extruded).","format":"uuid","type":"string"}},"required":["sides","top"],"type":"object"},"ExtrusionFaceCapType":{"description":"Possible types of faces which can be extruded from a 3D solid.","oneOf":[{"description":"Uncapped.","enum":["none"],"type":"string"},{"description":"Capped on top.","enum":["top"],"type":"string"},{"description":"Capped below.","enum":["bottom"],"type":"string"},{"description":"Capped on both ends.","enum":["both"],"type":"string"}]},"ExtrusionFaceInfo":{"description":"Extrusion face info struct (useful for maintaining mappings between source path segment ids and extrusion faces)","properties":{"cap":{"allOf":[{"$ref":"#/components/schemas/ExtrusionFaceCapType"}],"description":"Whether or not this extrusion face is a top/bottom cap face or not. Note that top/bottom cap faces will not have associated curve IDs."},"curve_id":{"description":"Path component (curve) UUID.","format":"uuid","nullable":true,"type":"string"},"face_id":{"description":"Face uuid.","format":"uuid","nullable":true,"type":"string"}},"required":["cap"],"type":"object"},"FaceEdgeInfo":{"description":"Faces and edges id info (most used in identifying geometry in patterned and mirrored objects).","properties":{"edges":{"description":"The edges of each object.","items":{"format":"uuid","type":"string"},"type":"array"},"faces":{"description":"The faces of each object.","items":{"format":"uuid","type":"string"},"type":"array"},"object_id":{"description":"The UUID of the object.","format":"uuid","type":"string"}},"required":["edges","faces","object_id"],"type":"object"},"FaceGetCenter":{"description":"The 3D center of mass on the surface","properties":{"pos":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The 3D position on the surface center of mass"}},"required":["pos"],"type":"object"},"FaceGetGradient":{"description":"The gradient (dFdu, dFdv) + normal vector on a brep face","properties":{"df_du":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"dFdu"},"df_dv":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"dFdv"},"normal":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Normal (||dFdu x dFdv||)"}},"required":["df_du","df_dv","normal"],"type":"object"},"FaceGetPosition":{"description":"The 3D position on the surface that was evaluated","properties":{"pos":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The 3D position on the surface that was evaluated"}},"required":["pos"],"type":"object"},"FaceIsPlanar":{"description":"Surface-local planar axes (if available)","properties":{"origin":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"plane's origin","nullable":true},"x_axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"plane's local x-axis","nullable":true},"y_axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"plane's local y-axis","nullable":true},"z_axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"plane's local z-axis (normal)","nullable":true}},"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/OutputFormat3d"}],"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/InputFormat3d"}],"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. ","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. 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. ","enum":["ply"],"type":"string"},{"description":"The STEP file format. ","enum":["step"],"type":"string"},{"description":"The STL file format. ","enum":["stl"],"type":"string"}]},"FileImportFormat":{"description":"The valid types of source file formats.","oneOf":[{"description":"Autodesk Filmbox (FBX) format. ","enum":["fbx"],"type":"string"},{"description":"glTF 2.0.","enum":["gltf"],"type":"string"},{"description":"The OBJ file format. 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. ","enum":["ply"],"type":"string"},{"description":"SolidWorks part (SLDPRT) format.","enum":["sldprt"],"type":"string"},{"description":"The STEP file format. ","enum":["step"],"type":"string"},{"description":"The 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"},"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"},"FractionOfEdge":{"description":"An edge id and an upper and lower percentage bound of the edge.","properties":{"edge_id":{"description":"The id of the edge","format":"uuid","type":"string"},"lower_bound":{"default":0.0,"description":"A value between [0.0, 1.0] (default 0.0) that is a percentage along the edge. This bound will control how much of the edge is used during the blend. If lower_bound is larger than upper_bound, the edge is effectively \"flipped\".","format":"float","maximum":1.0,"minimum":0.0,"type":"number"},"upper_bound":{"default":1.0,"description":"A value between [0.0, 1.0] (default 1.0) that is a percentage along the edge. This bound will control how much of the edge is used during the blend. If lower_bound is larger than upper_bound, the edge is effectively \"flipped\".","format":"float","maximum":1.0,"minimum":0.0,"type":"number"}},"required":["edge_id"],"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"},"GetNumObjects":{"description":"The response from the `GetNumObjects` command.","properties":{"num_objects":{"description":"The number of objects in the scene.","format":"uint32","minimum":0,"type":"integer"}},"required":["num_objects"],"type":"object"},"GetSketchModePlane":{"description":"The plane for sketch mode.","properties":{"origin":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The origin."},"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":["origin","x_axis","y_axis","z_axis"],"type":"object"},"GlobalAxis":{"description":"The 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"}]},"HandleMouseDragEnd":{"description":"The response from the `HandleMouseDragEnd` endpoint.","type":"object"},"HandleMouseDragMove":{"description":"The response from the `HandleMouseDragMove` endpoint.","type":"object"},"HandleMouseDragStart":{"description":"The response from the `HandleMouseDragStart` endpoint.","type":"object"},"HighlightSetEntities":{"description":"The response from the `HighlightSetEntities` endpoint.","type":"object"},"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 ","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"},"IdpMetadataSource":{"description":"The source of an identity provider metadata descriptor.","oneOf":[{"description":"A URL to the identity provider metadata descriptor.","properties":{"type":{"enum":["url"],"type":"string"},"url":{"description":"The URL of the identity provider metadata descriptor.","format":"uri","title":"String","type":"string"}},"required":["type","url"],"type":"object"},{"description":"A base64 encoded XML document containing the identity provider metadata descriptor.","properties":{"data":{"description":"The base64 encoded XML document containing the identity provider metadata descriptor.","format":"byte","title":"String","type":"string"},"type":{"enum":["base64_encoded_xml"],"type":"string"}},"required":["data","type"],"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"},"ImportedGeometry":{"description":"Data from importing the files","properties":{"id":{"description":"ID of the imported 3D models within the scene.","format":"uuid","type":"string"},"value":{"description":"The original file paths that held the geometry.","items":{"type":"string"},"type":"array"}},"required":["id","value"],"type":"object"},"InputFormat3d":{"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.\n\nThis is very important for correct scaling and when calculating physics properties like mass, etc.\n\nDefaults to millimeters."}},"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.\n\nThis is very important for correct scaling and when calculating physics properties like mass, etc.\n\nDefaults to millimeters."}},"required":["coords","type","units"],"type":"object"},{"description":"SolidWorks part (SLDPRT) format.","properties":{"split_closed_faces":{"default":false,"description":"Splits all closed faces into two open faces.\n\nDefaults to `false` but is implicitly `true` when importing into the engine.","type":"boolean"},"type":{"enum":["sldprt"],"type":"string"}},"required":["type"],"type":"object"},{"description":"ISO 10303-21 (STEP) format.","properties":{"coords":{"allOf":[{"$ref":"#/components/schemas/System"}],"default":{"forward":{"axis":"y","direction":"negative"},"up":{"axis":"z","direction":"positive"}},"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"},"split_closed_faces":{"default":false,"description":"Splits all closed faces into two open faces.\n\nDefaults to `false` but is implicitly `true` when importing into the engine.","type":"boolean"},"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.\n\nThis is very important for correct scaling and when calculating physics properties like mass, etc.\n\nDefaults to millimeters."}},"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"},"billing_reason":{"description":"Why this invoice was created (e.g. `subscription_cycle`).","nullable":true,"type":"string"},"collection_method":{"description":"Invoice collection method as returned by Stripe.","nullable":true,"type":"string"},"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`.","nullable":true},"subscription_id":{"description":"Subscription ID tied to this invoice, when available.","nullable":true,"type":"string"},"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.","type":"object"}},"type":"object"},"InvoiceStatus":{"description":"An enum representing the possible values of an `Invoice`'s `status` field.","oneOf":[{"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"},{"description":"Unknown.","enum":["unknown"],"type":"string"}]},"IpAddrInfo":{"description":"Information about an ip address. Represents geographical and network-related information.","properties":{"asn":{"description":"Autonomous System Number.","format":"int64","nullable":true,"type":"integer"},"city":{"description":"City name.","nullable":true,"type":"string"},"continent_code":{"description":"Continent code (e.g., \"EU\" for Europe).","nullable":true,"type":"string"},"country":{"description":"Country name.","nullable":true,"type":"string"},"country_code":{"allOf":[{"$ref":"#/components/schemas/CountryCode"}],"description":"Two-letter country code (e.g., \"NL\" for Netherlands).","nullable":true},"country_code3":{"description":"Three-letter country code (e.g., \"NLD\" for Netherlands).","nullable":true,"type":"string"},"ip":{"default":"","description":"IP address of the user.","format":"ip","title":"String","type":"string"},"is_in_european_union":{"description":"Flag indicating whether the country is in the European Union.","nullable":true,"type":"boolean"},"latitude":{"description":"Geographic latitude.","format":"double","nullable":true,"type":"number"},"longitude":{"description":"Geographic longitude.","format":"double","nullable":true,"type":"number"},"offset":{"description":"Time offset in seconds from UTC.","format":"int64","nullable":true,"type":"integer"},"organization":{"description":"Organization name (e.g., \"RIPE NCC\").","nullable":true,"type":"string"},"postal_code":{"description":"Postal code.","nullable":true,"type":"string"},"region":{"description":"Name of the region (e.g., \"North Holland\").","nullable":true,"type":"string"},"region_code":{"description":"Region code (e.g., \"NH\" for North Holland).","nullable":true,"type":"string"},"timezone":{"description":"Timezone (e.g., \"Europe/Amsterdam\").","nullable":true,"type":"string"}},"type":"object"},"KclCodeCompletionParams":{"description":"Extra params for the completions.","properties":{"language":{"default":"","description":"The language of the code.","type":"string"},"next_indent":{"description":"The next indent of the code.","format":"uint8","minimum":0,"nullable":true,"type":"integer"},"prompt_tokens":{"description":"The prompt tokens for the completions.","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"suffix_tokens":{"description":"The suffix tokens for the completions.","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"trim_by_indentation":{"default":false,"description":"If we should trim by indentation.","type":"boolean"}},"type":"object"},"KclCodeCompletionRequest":{"description":"A request to generate KCL code completions.","properties":{"extra":{"allOf":[{"$ref":"#/components/schemas/KclCodeCompletionParams"}],"default":{"language":"","trim_by_indentation":false},"description":"Extra parameters for the completions."},"max_tokens":{"description":"The maximum number of tokens that can be generated for the completions. The total length of input tokens and generated tokens is limited by the model’s context length.","format":"uint16","minimum":0,"nullable":true,"type":"integer"},"model_version":{"description":"Zoo provided model, or custom model which should be used to process this request.","nullable":true,"type":"string"},"n":{"description":"How many completion choices to generate for each input message.","format":"uint8","minimum":0,"nullable":true,"type":"integer"},"nwo":{"description":"For GitHub copilot this is the `{org}/{repo}`. This does not do anything yet. But we wanted the same API as GitHub Copilot. It might be used in the future.","nullable":true,"type":"string"},"prompt":{"default":"","description":"The prompt for the desired part.","type":"string"},"stop":{"description":"Up to 4 sequences where the API will stop generating further tokens.","items":{"type":"string"},"type":"array"},"stream":{"default":false,"description":"If set, partial message deltas will be sent, like in ChatGPT or OpenAPI. Tokens will be sent as data-only server-sent events as they become available, with the stream terminated by a data: [DONE] message.","type":"boolean"},"suffix":{"default":"","description":"The suffix for the desired part.","type":"string"},"temperature":{"description":"The temperature for the model.","format":"float","nullable":true,"type":"number"},"top_p":{"description":"The top p for the model.","format":"float","nullable":true,"type":"number"}},"type":"object"},"KclCodeCompletionResponse":{"description":"A response with KCL code completions.","properties":{"completions":{"description":"The completions.","items":{"type":"string"},"type":"array"}},"required":["completions"],"type":"object"},"KclModel":{"description":"The response containing the KCL code.","properties":{"code":{"description":"The KCL code.","type":"string"}},"required":["code"],"type":"object"},"LengthUnit":{"format":"double","type":"number"},"LenientUrl":{"format":"uri","nullable":true,"type":"string"},"Loft":{"description":"The response from the `Loft` command.","properties":{"solid_id":{"description":"The UUID of the newly created solid loft.","format":"uuid","type":"string"}},"required":["solid_id"],"type":"object"},"MakeAxesGizmo":{"description":"The response from the `MakeAxesGizmo` endpoint.","type":"object"},"MakeOffsetPath":{"description":"The response from the `MakeOffsetPath` command.","properties":{"entity_ids":{"description":"If the offset path splits into multiple paths, this will contain the UUIDs of the new paths. If the offset path remains as a single path, this will be empty, and the resulting ID of the (single) new path will be the ID of the `MakeOffsetPath` command.","items":{"format":"uuid","type":"string"},"type":"array"}},"required":["entity_ids"],"type":"object"},"MakePlane":{"description":"The response from the `MakePlane` endpoint.","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"},"MbdSymbol":{"description":"MBD symbol type","enum":["none","arclength","between","degrees","plusminus","angularity","cylindricity","roundness","concentricity","straightness","parallelism","flatness","profileofline","surfaceprofile","symmetry","perpendicularity","runout","totalrunout","position","centerline","partingline","isoenvelope","isoenvelopenony145m","freestate","statisticaltolerance","continuousfeature","independency","depth","start","leastcondition","maxcondition","conicaltaper","projected","slope","micro","tangentplane","unilateral","squarefeature","countersink","spotface","target","diameter","radius","sphericalradius","sphericaldiameter","controlledradius","boxstart","boxbar","boxbarbetween","letterbackwardunderline","punctuationbackwardunderline","modifierbackwardunderline","numericbackwardunderline","boxend","datumup","datumleft","datumright","datumdown","datumtriangle","halfspace","quarterspace","eighthspace","modifierspace"],"type":"string"},"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"}]},"MlCopilotClientMessage":{"description":"The types of messages that can be sent by the client to the server.","oneOf":[{"description":"Authentication header request.","properties":{"headers":{"additionalProperties":{"type":"string"},"description":"The authentication header.","type":"object"},"type":{"enum":["headers"],"type":"string"}},"required":["headers","type"],"type":"object"},{"description":"The user message, which contains the content of the user's input.","properties":{"additional_files":{"description":"The user can send additional files like images or PDFs to provide more context.","items":{"$ref":"#/components/schemas/MlCopilotFile"},"type":"array"},"content":{"description":"The content of the user's message.","type":"string"},"current_files":{"additionalProperties":{"items":{"format":"uint8","minimum":0,"type":"integer"},"type":"array"},"description":"The current files in the project, if any. This can be used to provide context for the AI. This should be sent in binary format, if the files are not text files, like an imported binary file.","type":"object"},"forced_tools":{"description":"The user can force specific tools to be used for this message.","items":{"$ref":"#/components/schemas/MlCopilotTool"},"type":"array"},"mode":{"allOf":[{"$ref":"#/components/schemas/MlCopilotMode"}],"description":"Pick a mode for the agent to operate in. Defaults to a fast mode.","nullable":true},"model":{"allOf":[{"$ref":"#/components/schemas/MlCopilotSupportedModels"}],"description":"Override the default or mode model with another.","nullable":true},"project_name":{"description":"The project name, if any. This can be used to associate the message with a specific project.","nullable":true,"type":"string"},"reasoning_effort":{"allOf":[{"$ref":"#/components/schemas/MlReasoningEffort"}],"description":"Change the default or mode reasoning effort.","nullable":true},"sketch_solve":{"default":false,"description":"To handle the transition period between sketch 1 and sketch_solve, set a flag for sketch_solve, True for sketch_solve, false for sketch 1. Defaults to false","type":"boolean"},"source_ranges":{"description":"The source ranges the user suggested to change. If empty, the content (prompt) will be used and is required.","items":{"$ref":"#/components/schemas/SourceRangePrompt"},"type":"array"},"type":{"enum":["user"],"type":"string"}},"required":["content","type"],"type":"object"},{"description":"The system message, which can be used to set the context or instructions for the AI.","properties":{"command":{"allOf":[{"$ref":"#/components/schemas/MlCopilotSystemCommand"}],"description":"The content of the system message."},"type":{"enum":["system"],"type":"string"}},"required":["command","type"],"type":"object"}]},"MlCopilotFile":{"description":"A file that can be transferred between the client and server.","properties":{"data":{"description":"The file contents as binary data.","items":{"format":"uint8","minimum":0,"type":"integer"},"type":"array"},"data_ref":{"description":"Optional blob storage path for the file contents.","nullable":true,"type":"string"},"metadata":{"additionalProperties":{"type":"string"},"description":"Optional metadata associated with the file.","nullable":true,"type":"object"},"mimetype":{"description":"The MIME type of the file (e.g., \"image/png\", \"application/pdf\", \"model/stl\").","type":"string"},"name":{"description":"The name of the file.","type":"string"}},"required":["data","mimetype","name"],"type":"object"},"MlCopilotMode":{"description":"The mode to have the agent work in.","oneOf":[{"description":"Use a combination of models and reasoning effort for fast results.","enum":["fast"],"type":"string"},{"description":"Use a model and effort that results in thoughtful responses.","enum":["thoughtful"],"type":"string"}]},"MlCopilotServerMessage":{"description":"The types of messages that can be sent by the server to the client.","oneOf":[{"additionalProperties":false,"description":"Session metadata sent by the server right after authentication.\n\nSemantics: - This message is NOT persisted in the database and will NEVER appear in a subsequent `Replay` message. However, we do have the `api_call_id` in the database. - Timing: sent immediately after a client is authenticated on a websocket. Useful for correlating logs and traces.","properties":{"session_data":{"properties":{"api_call_id":{"description":"The API call id associated with this websocket session.","type":"string"}},"required":["api_call_id"],"type":"object"}},"required":["session_data"],"type":"object"},{"additionalProperties":false,"description":"The ID of the conversation, which can be used to track the session.","properties":{"conversation_id":{"properties":{"conversation_id":{"description":"The unique identifier for the conversation.","type":"string"}},"required":["conversation_id"],"type":"object"}},"required":["conversation_id"],"type":"object"},{"additionalProperties":false,"description":"Delta of the response, e.g. a chunk of text/tokens.","properties":{"delta":{"properties":{"delta":{"description":"The delta text, which is a part of the response that is being streamed.","type":"string"}},"required":["delta"],"type":"object"}},"required":["delta"],"type":"object"},{"additionalProperties":false,"description":"Completed tool call result.","properties":{"tool_output":{"properties":{"result":{"allOf":[{"$ref":"#/components/schemas/MlToolResult"}],"description":"The result of the tool call."}},"required":["result"],"type":"object"}},"required":["tool_output"],"type":"object"},{"additionalProperties":false,"description":"Error sent by server.","properties":{"error":{"properties":{"detail":{"description":"The error message.","type":"string"}},"required":["detail"],"type":"object"}},"required":["error"],"type":"object"},{"additionalProperties":false,"description":"Log / banner text.","properties":{"info":{"properties":{"text":{"description":"The informational text.","type":"string"}},"required":["text"],"type":"object"}},"required":["info"],"type":"object"},{"additionalProperties":false,"description":"Notification that the backend is shutting down.","properties":{"backend_shutdown":{"properties":{"reason":{"description":"The reason given for the backend shutdown.","nullable":true,"type":"string"}},"type":"object"}},"required":["backend_shutdown"],"type":"object"},{"additionalProperties":false,"description":"Notification that the KCL project has been updated.","properties":{"project_updated":{"properties":{"files":{"additionalProperties":{"type":"string"},"description":"Map of file paths to their latest contents. The file contents are not encoded since kcl files are not binary.","type":"object"}},"required":["files"],"type":"object"}},"required":["project_updated"],"type":"object"},{"additionalProperties":false,"description":"Assistant reasoning / chain-of-thought (if you expose it).","properties":{"reasoning":{"$ref":"#/components/schemas/ReasoningMessage"}},"required":["reasoning"],"type":"object"},{"additionalProperties":false,"description":"Replay containing raw bytes for previously-saved messages for a conversation. Includes server messages and client `User` messages.\n\nInvariants: - Includes server messages: `Info`, `Error`, `Reasoning(..)`, `ToolOutput { .. }`, `Files { .. }`, `ProjectUpdated { .. }`, and `EndOfStream { .. }`. - Also includes client `User` messages. - The following are NEVER included: `SessionData`, `ConversationId`, `Delta`, or `BackendShutdown`. - Ordering is stable: messages are ordered by prompt creation time within the conversation, then by the per-prompt `seq` value (monotonically increasing as seen in the original stream).\n\nWire format: - Each element is canonical serialized bytes (typically JSON) for either a `MlCopilotServerMessage` or a `MlCopilotClientMessage::User`. - When delivered as an initial replay over the websocket (upon `?replay=true&conversation_id=`), the server sends a single WebSocket Binary frame containing a MsgPack-encoded document of this enum: `Replay { messages }`.","properties":{"replay":{"properties":{"messages":{"description":"Canonical bytes (usually JSON) for each message, ordered by prompt creation time, then message sequence number.","items":{"items":{"format":"uint8","minimum":0,"type":"integer"},"type":"array"},"type":"array"}},"required":["messages"],"type":"object"}},"required":["replay"],"type":"object"},{"additionalProperties":false,"description":"Marks the end of a streamed answer.","properties":{"end_of_stream":{"properties":{"completed_at":{"description":"This indicates the time that the server has finished processing the request. This can be used by the client to measure the total time taken for the request. Although this might be passed in other contexts, outside of copilot mode, it is only relevant in copilot mode.","format":"date-time","nullable":true,"type":"string"},"conversation_id":{"description":"The conversation id for this session.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The ML prompt id for this turn.","nullable":true},"started_at":{"description":"This indicates the time that the server had started processing the request. This can be used by the client to measure the total time taken for the request. Although this might be passed in other contexts, outside of copilot mode, it is only relevant in copilot mode.","format":"date-time","nullable":true,"type":"string"},"whole_response":{"description":"The whole response text, which is the final output of the AI. This is only relevant if in copilot mode, where the AI is expected to return the whole response at once.","nullable":true,"type":"string"}},"type":"object"}},"required":["end_of_stream"],"type":"object"},{"additionalProperties":false,"description":"Files sent from the server to the client.","properties":{"files":{"properties":{"files":{"description":"The list of files being sent.","items":{"$ref":"#/components/schemas/MlCopilotFile"},"type":"array"}},"required":["files"],"type":"object"}},"required":["files"],"type":"object"}]},"MlCopilotSupportedModels":{"description":"AI models that we support using with the system. In theory any model with reasoning capabilities can work.","oneOf":[{"description":"gpt-5-nano","enum":["gpt5_nano"],"type":"string"},{"description":"gpt-5-mini","enum":["gpt5_mini"],"type":"string"},{"description":"gpt-5-codex","enum":["gpt5_codex"],"type":"string"},{"description":"gpt-5","enum":["gpt5"],"type":"string"},{"description":"o3-mini","enum":["o3_mini"],"type":"string"},{"description":"azure o3-mini","enum":["azure_o3_mini"],"type":"string"},{"description":"azure gpt-4o","enum":["azure_gpt4o"],"type":"string"},{"description":"azure gpt-4o-mini","enum":["azure_gpt4o_mini"],"type":"string"}]},"MlCopilotSystemCommand":{"description":"The type of system command that can be sent to the ML Copilot.","oneOf":[{"description":"Reset the conversation state, by creating a new state.","enum":["new"],"type":"string"},{"description":"Disconnect the client, which can be used to end the session.","enum":["bye"],"type":"string"},{"description":"Interrupt the current prompt that is being processed.","enum":["interrupt"],"type":"string"},{"description":"Cancel the current prompt that is being processed.","enum":["cancel"],"type":"string"},{"description":"Answer now, which forces the AI to finish the current response.","enum":["answer_now"],"type":"string"}]},"MlCopilotTool":{"description":"The tools that can be used by the ML Copilot.","oneOf":[{"description":"The tool for generating or editing KCL code based on user prompts.","enum":["edit_kcl_code"],"type":"string"},{"description":"The tool for generating CAD models from textual descriptions.","enum":["text_to_cad"],"type":"string"},{"description":"The tool for querying a mechanical knowledge base.","enum":["mechanical_knowledge_base"],"type":"string"},{"description":"The tool for searching the web for information.","enum":["web_search"],"type":"string"}]},"MlFeedback":{"description":"Human feedback on an ML response.","oneOf":[{"description":"Thumbs up.","enum":["thumbs_up"],"type":"string"},{"description":"Thumbs down.","enum":["thumbs_down"],"type":"string"},{"description":"Accepted.","enum":["accepted"],"type":"string"},{"description":"Rejected.","enum":["rejected"],"type":"string"}]},"MlPromptMetadata":{"description":"Metadata for a ML prompt.","properties":{"code":{"description":"Code for the model.","nullable":true,"type":"string"},"original_source_code":{"description":"The original source code for the model.","nullable":true,"type":"string"},"source_ranges":{"description":"The source ranges the user suggested to change.","items":{"$ref":"#/components/schemas/SourceRangePrompt"},"type":"array"},"upstream_conversation_id":{"description":"The upstream conversation ID, if any.","nullable":true,"type":"string"}},"type":"object"},"MlPromptResponse":{"description":"ML prompt response payload for admin endpoints. This schema intentionally excludes internal linkage fields.","properties":{"completed_at":{"description":"When the prompt was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"conversation_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The conversation associated with this prompt, if any.","nullable":true},"created_at":{"description":"The date and time the ML 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/MlFeedback"}],"description":"Feedback from the user, if any.","nullable":true},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the ML prompt."},"kcl_version":{"description":"The KCL version being used.","nullable":true,"type":"string"},"metadata":{"allOf":[{"$ref":"#/components/schemas/MlPromptMetadata"}],"description":"The metadata for the prompt.","nullable":true},"model_version":{"description":"The version of the model.","type":"string"},"output_file":{"description":"The output directory reference for generated files.","nullable":true,"type":"string"},"project_name":{"description":"The name of the project, if any.","nullable":true,"type":"string"},"prompt":{"description":"The prompt.","type":"string"},"seconds":{"description":"Sum of EndOfStream durations, in seconds.","format":"int64","nullable":true,"type":"integer"},"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/MlPromptType"}],"description":"The type of prompt."},"updated_at":{"description":"The date and time the ML 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 ML prompt."}},"required":["created_at","id","model_version","prompt","status","type","updated_at","user_id"],"type":"object"},"MlPromptResponseResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/MlPromptResponse"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"MlPromptType":{"description":"A type of ML prompt.","oneOf":[{"description":"Text to CAD.","enum":["text_to_cad"],"type":"string"},{"description":"Text to KCL.","enum":["text_to_kcl"],"type":"string"},{"description":"Text to KCL iteration.","enum":["text_to_kcl_iteration"],"type":"string"},{"description":"Text to KCL iteration with multiple files.","enum":["text_to_kcl_multi_file_iteration"],"type":"string"},{"description":"Copilot chat/assist prompts.","enum":["copilot"],"type":"string"}]},"MlReasoningEffort":{"description":"Specify the amount of effort used in reasoning. Read the following for more info: https://platform.openai.com/docs/guides/reasoning#how-reasoning-works","oneOf":[{"description":"Low reasoning","enum":["low"],"type":"string"},{"description":"Medium reasoning","enum":["medium"],"type":"string"},{"description":"High reasoning","enum":["high"],"type":"string"},{"description":"Xhigh reasoning","enum":["xhigh"],"type":"string"}]},"MlToolResult":{"description":"Responses from tools.","oneOf":[{"description":"Response from the `TextToCad` tool.","properties":{"error":{"description":"Any error that occurred during the tool execution.","nullable":true,"type":"string"},"outputs":{"additionalProperties":{"type":"string"},"description":"The output files. Returns a map of the file name to the file contents. The file contents are not encoded since kcl files are not binary.","type":"object"},"project_name":{"description":"The name of the project, if any.","nullable":true,"type":"string"},"status_code":{"description":"The status code of the tool execution.","format":"int32","title":"int32","type":"integer"},"type":{"enum":["text_to_cad"],"type":"string"}},"required":["status_code","type"],"type":"object"},{"description":"Response from the `EditKclCode` tool.","properties":{"error":{"description":"Any error that occurred during the tool execution.","nullable":true,"type":"string"},"outputs":{"additionalProperties":{"type":"string"},"description":"The output files. Returns a map of the file name to the file contents. The file contents are not encoded since kcl files are not binary.","type":"object"},"project_name":{"description":"The name of the project, if any.","nullable":true,"type":"string"},"status_code":{"description":"The status code of the tool execution.","format":"int32","title":"int32","type":"integer"},"type":{"enum":["edit_kcl_code"],"type":"string"}},"required":["status_code","type"],"type":"object"},{"description":"Mechanical knowledge base response.","properties":{"response":{"description":"The response from the mechanical knowledge base.","type":"string"},"type":{"enum":["mechanical_knowledge_base"],"type":"string"}},"required":["response","type"],"type":"object"}]},"ModelingAppEventType":{"description":"Type for modeling-app events","oneOf":[{"description":"This event is sent before the modeling app or project is closed. The attachment should contain the contents of the most recent successful compile.","enum":["successful_compile_before_close"],"type":"string"}]},"ModelingAppShareLinks":{"description":"Modeling App share link capabilities.","oneOf":[{"description":"Publicly accessible share links.","enum":["public"],"type":"string"},{"description":"Share links guarded by a password.","enum":["password_protected"],"type":"string"},{"description":"Share links restricted to members of the organization.","enum":["organization_only"],"type":"string"}]},"ModelingAppSubscriptionTier":{"description":"Rich information about a Modeling App subscription tier.","properties":{"annual_discount":{"description":"Annual discount. The percentage off the monthly price if the user pays annually.","format":"double","nullable":true,"type":"number"},"description":{"description":"A description of the tier.","type":"string"},"display_name":{"default":"","description":"The display name of the tier.","type":"string"},"endpoints_included":{"description":"The Zoo API endpoints that are included when through an approved zoo tool.","items":{"$ref":"#/components/schemas/ApiEndpoint"},"type":"array"},"features":{"description":"Features that are included in the subscription.","items":{"$ref":"#/components/schemas/SubscriptionTierFeature"},"maxItems":15,"minItems":0,"type":"array"},"is_custom_quote":{"default":false,"description":"Indicates whether this plan uses custom-quoted pricing.","type":"boolean"},"ml_custom_models":{"default":false,"description":"Indicates whether the plan enables custom ML models.","type":"boolean"},"monthly_pay_as_you_go_api_credits":{"default":0,"description":"The amount of pay-as-you-go API credits the individual or org gets outside the modeling app per month. This re-ups on the 1st of each month. This is equivalent to the monetary value divided by the price of an API credit.","format":"uint64","minimum":0,"type":"integer"},"monthly_pay_as_you_go_api_credits_monetary_value":{"default":0.0,"description":"The monetary value of pay-as-you-go API credits the individual or org gets outside the modeling app per month. This re-ups on the 1st of each month.","format":"money-usd","title":"double","type":"number"},"name":{"description":"The name of the tier.","type":"string"},"pay_as_you_go_api_credit_price":{"default":0.0,"description":"The price of an API credit.","format":"money-usd","title":"double","type":"number"},"price":{"allOf":[{"$ref":"#/components/schemas/SubscriptionTierPrice"}],"description":"The price of the tier per month. If this is for an individual, this is the price they pay. If this is for an organization, this is the price the organization pays per member in the org. This is in USD."},"share_links":{"description":"The options for sharable links through the modeling app.","items":{"$ref":"#/components/schemas/ModelingAppShareLinks"},"type":"array"},"support_tier":{"allOf":[{"$ref":"#/components/schemas/SupportTier"}],"description":"The support tier the subscription provides."},"training_data_behavior":{"allOf":[{"$ref":"#/components/schemas/SubscriptionTrainingDataBehavior"}],"description":"The behavior of the users data (can it be used for training, etc)."},"type":{"allOf":[{"$ref":"#/components/schemas/SubscriptionTierType"}],"description":"If the tier is offered for an individual or an org."},"zoo_tools_included":{"description":"The Zoo tools that you can call unlimited times with this tier.","items":{"$ref":"#/components/schemas/ZooTool"},"type":"array"}},"required":["description","name","price","support_tier","training_data_behavior","type"],"type":"object"},"ModelingCmd":{"description":"Commands that the KittyCAD engine can execute.","oneOf":[{"description":"Evaluates the position of a path in one shot (engine utility for kcl executor)","properties":{"path_json":{"description":"The path in json form (the serialized result of the kcl Sketch/Path object","type":"string"},"t":{"description":"The evaluation parameter (path curve parameter in the normalized domain [0, 1])","format":"double","type":"number"},"type":{"enum":["engine_util_evaluate_path"],"type":"string"}},"required":["path_json","t","type"],"type":"object"},{"description":"Start a new path.","properties":{"type":{"enum":["start_path"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Move the path's \"pen\". If you're in sketch mode, these coordinates are in the local coordinate system, not the world's coordinate system. For example, say you're sketching on the plane {x: (1,0,0), y: (0,1,0), origin: (0, 0, 50)}. In other words, the plane 50 units above the default XY plane. Then, moving the pen to (1, 1, 0) with this command uses local coordinates. So, it would move the pen to (1, 1, 50) in global coordinates.","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":{"label":{"description":"Optional label to associate with the new path segment.","nullable":true,"type":"string"},"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":"Command for extruding a solid 2d.","properties":{"body_type":{"allOf":[{"$ref":"#/components/schemas/BodyType"}],"default":"solid","description":"Should this extrude create a solid body or a surface?"},"distance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"How far off the plane to extrude"},"extrude_method":{"allOf":[{"$ref":"#/components/schemas/ExtrudeMethod"}],"default":"merge","description":"Should the extrusion create a new object or be part of the existing object."},"faces":{"allOf":[{"$ref":"#/components/schemas/ExtrudedFaceInfo"}],"default":null,"description":"Which IDs should the new faces have? If this isn't given, the engine will generate IDs.","nullable":true},"merge_coplanar_faces":{"description":"Only used if the extrusion is created from a face and extrude_method = Merge If true, coplanar faces will be merged and seams will be hidden. Otherwise, seams between the extrusion and original body will be shown.","nullable":true,"type":"boolean"},"opposite":{"allOf":[{"$ref":"#/components/schemas/OppositeForLengthUnit"}],"default":"None","description":"Should the extrusion also extrude in the opposite direction? If so, this specifies its distance."},"target":{"allOf":[{"$ref":"#/components/schemas/ModelingCmdId"}],"description":"Which sketch to extrude. Must be a closed 2D solid."},"type":{"enum":["extrude"],"type":"string"}},"required":["distance","target","type"],"type":"object"},{"description":"Command for extruding a solid 2d to a reference geometry.","properties":{"body_type":{"allOf":[{"$ref":"#/components/schemas/BodyType"}],"default":"solid","description":"Should this extrude create a solid body or a surface?"},"extrude_method":{"allOf":[{"$ref":"#/components/schemas/ExtrudeMethod"}],"default":"merge","description":"Should the extrusion create a new object or be part of the existing object."},"faces":{"allOf":[{"$ref":"#/components/schemas/ExtrudedFaceInfo"}],"default":null,"description":"Which IDs should the new faces have? If this isn't given, the engine will generate IDs.","nullable":true},"reference":{"allOf":[{"$ref":"#/components/schemas/ExtrudeReference"}],"description":"Reference to extrude to. Extrusion occurs along the target's normal until it is as close to the reference as possible."},"target":{"allOf":[{"$ref":"#/components/schemas/ModelingCmdId"}],"description":"Which sketch to extrude. Must be a closed 2D solid."},"type":{"enum":["extrude_to_reference"],"type":"string"}},"required":["reference","target","type"],"type":"object"},{"description":"Command for twist extruding a solid 2d.","properties":{"angle_step_size":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"default":{"unit":"degrees","value":15.0},"description":"Angle step interval (converted to whole number degrees and bounded between 4° and 90°)"},"body_type":{"allOf":[{"$ref":"#/components/schemas/BodyType"}],"default":"solid","description":"Should this extrude create a solid body or a surface?"},"center_2d":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"default":{"x":0.0,"y":0.0},"description":"Center to twist about (relative to plane's origin) Defaults to `[0, 0]` i.e. the plane's origin"},"distance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"How far off the plane to extrude"},"faces":{"allOf":[{"$ref":"#/components/schemas/ExtrudedFaceInfo"}],"default":null,"description":"Which IDs should the new faces have? If this isn't given, the engine will generate IDs.","nullable":true},"target":{"allOf":[{"$ref":"#/components/schemas/ModelingCmdId"}],"description":"Which sketch to extrude. Must be a closed 2D solid."},"tolerance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The twisted surface loft tolerance"},"total_rotation_angle":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"description":"Total rotation of the section"},"type":{"enum":["twist_extrude"],"type":"string"}},"required":["distance","target","tolerance","total_rotation_angle","type"],"type":"object"},{"description":"Extrude the object along a path.","properties":{"body_type":{"allOf":[{"$ref":"#/components/schemas/BodyType"}],"default":"solid","description":"Should this sweep create a solid body or a surface?"},"relative_to":{"allOf":[{"$ref":"#/components/schemas/RelativeTo"}],"default":"sketch_plane","description":"What is this sweep relative to?"},"sectional":{"description":"If true, the sweep will be broken up into sub-sweeps (extrusions, revolves, sweeps) based on the trajectory path components.","type":"boolean"},"target":{"allOf":[{"$ref":"#/components/schemas/ModelingCmdId"}],"description":"Which sketch to sweep. Must be a closed 2D solid."},"tolerance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The maximum acceptable surface gap computed between the revolution surface joints. Must be positive (i.e. greater than zero)."},"trajectory":{"allOf":[{"$ref":"#/components/schemas/ModelingCmdId"}],"description":"Path along which to sweep."},"type":{"enum":["sweep"],"type":"string"}},"required":["sectional","target","tolerance","trajectory","type"],"type":"object"},{"description":"Command for revolving a solid 2d.","properties":{"angle":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"description":"The signed angle of revolution (in degrees, must be <= 360 in either direction)"},"axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The axis of the extrusion (taken from the origin)"},"axis_is_2d":{"description":"If true, the axis is interpreted within the 2D space of the solid 2D's plane","type":"boolean"},"body_type":{"allOf":[{"$ref":"#/components/schemas/BodyType"}],"default":"solid","description":"Should this extrude create a solid body or a surface?"},"opposite":{"allOf":[{"$ref":"#/components/schemas/OppositeForAngle"}],"default":"None","description":"Should the revolution also revolve in the opposite direction along the given axis? If so, this specifies its angle."},"origin":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The origin of the extrusion axis"},"target":{"allOf":[{"$ref":"#/components/schemas/ModelingCmdId"}],"description":"Which sketch to revolve. Must be a closed 2D solid."},"tolerance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The maximum acceptable surface gap computed between the revolution surface joints. Must be positive (i.e. greater than zero)."},"type":{"enum":["revolve"],"type":"string"}},"required":["angle","axis","axis_is_2d","origin","target","tolerance","type"],"type":"object"},{"description":"Command for shelling a solid3d face","properties":{"face_ids":{"description":"Which faces to remove, leaving only the shell.","items":{"format":"uuid","type":"string"},"type":"array"},"hollow":{"default":false,"description":"If true, the Solid3D is made hollow instead of removing the selected faces","type":"boolean"},"object_id":{"description":"Which Solid3D is being shelled.","format":"uuid","type":"string"},"shell_thickness":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"How thick the shell should be. Smaller values mean a thinner shell."},"type":{"enum":["solid3d_shell_face"],"type":"string"}},"required":["face_ids","object_id","shell_thickness","type"],"type":"object"},{"description":"Command for joining a Surface (non-manifold) body back to a Solid. All of the surfaces should already be contained within the body mated topologically. This operation should be the final step after a sequence of Solid modeling commands such as BooleanImprint, EntityDeleteChildren, Solid3dFlipFace If successful, the new body type will become \"Solid\".","properties":{"object_id":{"description":"Which Solid3D is being joined.","format":"uuid","type":"string"},"type":{"enum":["solid3d_join"],"type":"string"}},"required":["object_id","type"],"type":"object"},{"description":"Command for creating a blend between the edge of two given surfaces","properties":{"blend_type":{"allOf":[{"$ref":"#/components/schemas/BlendType"}],"default":"tangent","description":"The type of blend to use."},"surfaces":{"description":"The two surfaces that the blend will span between","items":{"$ref":"#/components/schemas/SurfaceEdgeReference"},"maxItems":2,"minItems":2,"type":"array"},"type":{"enum":["surface_blend"],"type":"string"}},"required":["surfaces","type"],"type":"object"},{"description":"What is the UUID of this body's n-th edge?","properties":{"edge_index":{"description":"The primitive index of the edge being queried.","format":"uint32","minimum":0,"type":"integer"},"object_id":{"description":"The Solid3D parent who owns the edge","format":"uuid","type":"string"},"type":{"enum":["solid3d_get_edge_uuid"],"type":"string"}},"required":["edge_index","object_id","type"],"type":"object"},{"description":"What is the UUID of this body's n-th face?","properties":{"face_index":{"description":"The primitive index of the face being queried.","format":"uint32","minimum":0,"type":"integer"},"object_id":{"description":"The Solid3D parent who owns the face","format":"uuid","type":"string"},"type":{"enum":["solid3d_get_face_uuid"],"type":"string"}},"required":["face_index","object_id","type"],"type":"object"},{"description":"Retrieves the body type.","properties":{"object_id":{"description":"The Solid3D whose body type is being queried.","format":"uuid","type":"string"},"type":{"enum":["solid3d_get_body_type"],"type":"string"}},"required":["object_id","type"],"type":"object"},{"description":"Command for revolving a solid 2d about a brep edge","properties":{"angle":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"description":"The signed angle of revolution (in degrees, must be <= 360 in either direction)"},"body_type":{"allOf":[{"$ref":"#/components/schemas/BodyType"}],"default":"solid","description":"Should this extrude create a solid body or a surface?"},"edge_id":{"description":"The edge to use as the axis of revolution, must be linear and lie in the plane of the solid","format":"uuid","type":"string"},"opposite":{"allOf":[{"$ref":"#/components/schemas/OppositeForAngle"}],"default":"None","description":"Should the revolution also revolve in the opposite direction along the given axis? If so, this specifies its angle."},"target":{"allOf":[{"$ref":"#/components/schemas/ModelingCmdId"}],"description":"Which sketch to revolve. Must be a closed 2D solid."},"tolerance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The maximum acceptable surface gap computed between the revolution surface joints. Must be positive (i.e. greater than zero)."},"type":{"enum":["revolve_about_edge"],"type":"string"}},"required":["angle","edge_id","target","tolerance","type"],"type":"object"},{"description":"Command for lofting sections to create a solid","properties":{"base_curve_index":{"description":"This can be set to override the automatically determined topological base curve, which is usually the first section encountered.","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"bez_approximate_rational":{"description":"Attempt to approximate rational curves (such as arcs) using a bezier. This will remove banding around interpolations between arcs and non-arcs. It may produce errors in other scenarios Over time, this field won't be necessary.","type":"boolean"},"body_type":{"allOf":[{"$ref":"#/components/schemas/BodyType"}],"default":"solid","description":"Should this loft create a solid body or a surface?"},"section_ids":{"description":"The closed section curves to create a lofted solid from. Currently, these must be Solid2Ds","items":{"format":"uuid","type":"string"},"type":"array"},"tolerance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"Tolerance"},"type":{"enum":["loft"],"type":"string"},"v_degree":{"description":"Degree of the interpolation. Must be greater than zero. For example, use 2 for quadratic, or 3 for cubic interpolation in the V direction.","format":"uint32","minimum":1,"type":"integer"}},"required":["bez_approximate_rational","section_ids","tolerance","type","v_degree"],"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":"Gets the default camera's camera settings","properties":{"type":{"enum":["default_camera_get_settings"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Gets the default camera's view state","properties":{"type":{"enum":["default_camera_get_view"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Sets the default camera's view state","properties":{"type":{"enum":["default_camera_set_view"],"type":"string"},"view":{"allOf":[{"$ref":"#/components/schemas/CameraViewState"}],"description":"Camera view state"}},"required":["type","view"],"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"},"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":["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":"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"},"fov_y":{"description":"The field of view angle in the y direction, in degrees.","format":"float","nullable":true,"type":"number"},"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":["default_camera_perspective_settings"],"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"},"z_far":{"description":"The distance to the far clipping plane.","format":"float","nullable":true,"type":"number"},"z_near":{"description":"The distance to the near clipping plane.","format":"float","nullable":true,"type":"number"}},"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":"Export a sketch to a file.","properties":{"entity_ids":{"description":"IDs of the entities to be exported.","items":{"format":"uuid","type":"string"},"type":"array"},"format":{"allOf":[{"$ref":"#/components/schemas/OutputFormat2d"}],"description":"The file format to export to."},"type":{"enum":["export2d"],"type":"string"}},"required":["entity_ids","format","type"],"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/OutputFormat3d"}],"description":"The file format to export to."},"type":{"enum":["export3d"],"type":"string"}},"required":["entity_ids","format","type"],"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/OutputFormat3d"}],"description":"The file format to export to."},"type":{"enum":["export"],"type":"string"}},"required":["entity_ids","format","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 is this entity's child index within its parent","properties":{"entity_id":{"description":"ID of the entity being queried.","format":"uuid","type":"string"},"type":{"enum":["entity_get_index"],"type":"string"}},"required":["entity_id","type"],"type":"object"},{"description":"What is this edge or face entity's primitive index within its parent body's edges or faces array respectively","properties":{"entity_id":{"description":"ID of the entity being queried.","format":"uuid","type":"string"},"type":{"enum":["entity_get_primitive_index"],"type":"string"}},"required":["entity_id","type"],"type":"object"},{"description":"Attempts to delete children entity from an entity. Note that this API may change the body type of certain entities from Solid to Surface.","properties":{"child_entity_ids":{"description":"ID of the entity's child being deleted","items":{"format":"uuid","type":"string"},"type":"array","uniqueItems":true},"entity_id":{"description":"ID of the entity being modified","format":"uuid","type":"string"},"type":{"enum":["entity_delete_children"],"type":"string"}},"required":["child_entity_ids","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":"What are all UUIDs of all the paths sketched on top of this entity?","properties":{"entity_id":{"description":"ID of the entity being queried.","format":"uuid","type":"string"},"type":{"enum":["entity_get_sketch_paths"],"type":"string"}},"required":["entity_id","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"},{"description":"Create a pattern using this entity by specifying the transform for each desired repetition. Transformations are performed in the following order (first applied to last applied): scale, rotate, translate.","properties":{"entity_id":{"description":"ID of the entity being cloned.","format":"uuid","type":"string"},"type":{"enum":["entity_clone"],"type":"string"}},"required":["entity_id","type"],"type":"object"},{"description":"Create a pattern using this entity by specifying the transform for each desired repetition. Transformations are performed in the following order (first applied to last applied): scale, rotate, translate.","properties":{"entity_id":{"description":"ID of the entity being copied.","format":"uuid","type":"string"},"transform":{"default":[],"description":"How to transform each repeated solid. The 0th transform will create the first copy of the entity. The total number of (optional) repetitions equals the size of this list.","items":{"$ref":"#/components/schemas/Transform"},"type":"array"},"transforms":{"default":[],"description":"Alternatively, you could set this key instead. If you want to use multiple transforms per item. If this is non-empty then the `transform` key must be empty, and vice-versa.","items":{"items":{"$ref":"#/components/schemas/Transform"},"type":"array"},"type":"array"},"type":{"enum":["entity_linear_pattern_transform"],"type":"string"}},"required":["entity_id","type"],"type":"object"},{"description":"Create a linear pattern using this entity.","properties":{"axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Axis along which to make the copies. For Solid2d patterns, the z component is ignored."},"entity_id":{"description":"ID of the entity being copied.","format":"uuid","type":"string"},"num_repetitions":{"description":"Number of repetitions to make.","format":"uint32","minimum":0,"type":"integer"},"spacing":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"Spacing between repetitions."},"type":{"enum":["entity_linear_pattern"],"type":"string"}},"required":["axis","entity_id","num_repetitions","spacing","type"],"type":"object"},{"description":"Create a circular pattern using this entity.","properties":{"arc_degrees":{"description":"Arc angle (in degrees) to place repetitions along.","format":"double","type":"number"},"axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Axis around which to make the copies. For Solid2d patterns, this is ignored."},"center":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Point around which to make the copies. For Solid2d patterns, the z component is ignored."},"entity_id":{"description":"ID of the entity being copied.","format":"uuid","type":"string"},"num_repetitions":{"description":"Number of repetitions to make.","format":"uint32","minimum":0,"type":"integer"},"rotate_duplicates":{"description":"Whether or not to rotate the objects as they are copied.","type":"boolean"},"type":{"enum":["entity_circular_pattern"],"type":"string"}},"required":["arc_degrees","axis","center","entity_id","num_repetitions","rotate_duplicates","type"],"type":"object"},{"description":"Create a helix using the input cylinder and other specified parameters.","properties":{"cylinder_id":{"description":"ID of the cylinder.","format":"uuid","type":"string"},"is_clockwise":{"description":"Is the helix rotation clockwise?","type":"boolean"},"length":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"Length of the helix. If None, the length of the cylinder will be used instead.","nullable":true},"revolutions":{"description":"Number of revolutions.","format":"double","type":"number"},"start_angle":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"default":{"unit":"degrees","value":0.0},"description":"Start angle."},"type":{"enum":["entity_make_helix"],"type":"string"}},"required":["cylinder_id","is_clockwise","revolutions","type"],"type":"object"},{"description":"Create a helix using the specified parameters.","properties":{"axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Axis of the helix. The helix will be created around and in the direction of this axis."},"center":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Center of the helix at the base of the helix."},"is_clockwise":{"description":"Is the helix rotation clockwise?","type":"boolean"},"length":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"Length of the helix."},"radius":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"Radius of the helix."},"revolutions":{"description":"Number of revolutions.","format":"double","type":"number"},"start_angle":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"default":{"unit":"degrees","value":0.0},"description":"Start angle."},"type":{"enum":["entity_make_helix_from_params"],"type":"string"}},"required":["axis","center","is_clockwise","length","radius","revolutions","type"],"type":"object"},{"description":"Create a helix using the specified parameters.","properties":{"edge_id":{"description":"Edge about which to make the helix.","format":"uuid","type":"string"},"is_clockwise":{"description":"Is the helix rotation clockwise?","type":"boolean"},"length":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"Length of the helix. If None, the length of the edge will be used instead.","nullable":true},"radius":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"Radius of the helix."},"revolutions":{"description":"Number of revolutions.","format":"double","type":"number"},"start_angle":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"default":{"unit":"degrees","value":0.0},"description":"Start angle."},"type":{"enum":["entity_make_helix_from_edge"],"type":"string"}},"required":["edge_id","is_clockwise","radius","revolutions","type"],"type":"object"},{"description":"Mirror the input entities over the specified axis. (Currently only supports sketches)","properties":{"axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Axis to use as mirror."},"ids":{"description":"ID of the mirror entities.","items":{"format":"uuid","type":"string"},"type":"array"},"point":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Point through which the mirror axis passes."},"type":{"enum":["entity_mirror"],"type":"string"}},"required":["axis","ids","point","type"],"type":"object"},{"description":"Mirror the input entities over the specified edge. (Currently only supports sketches)","properties":{"edge_id":{"description":"The edge to use as the mirror axis, must be linear and lie in the plane of the solid","format":"uuid","type":"string"},"ids":{"description":"ID of the mirror entities.","items":{"format":"uuid","type":"string"},"type":"array"},"type":{"enum":["entity_mirror_across_edge"],"type":"string"}},"required":["edge_id","ids","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":"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":"Removes all of the Objects in the scene","properties":{"type":{"enum":["scene_clear_all"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Replaces current selection with these entities (by UUID).","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":"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":"Changes visibility of scene-wide edge lines on brep solids","properties":{"hidden":{"description":"Whether or not the edge lines should be hidden.","type":"boolean"},"type":{"enum":["edge_lines_visible"],"type":"string"}},"required":["hidden","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":"Set the material properties of an object","properties":{"ambient_occlusion":{"description":"Ambient Occlusion of the new material","format":"float","type":"number"},"backface_color":{"allOf":[{"$ref":"#/components/schemas/Color"}],"description":"Color of the backface","nullable":true},"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 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":"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":"Flips (reverses) a brep that is \"inside-out\".","properties":{"object_id":{"description":"Which object is being flipped.","format":"uuid","type":"string"},"type":{"enum":["solid3d_flip"],"type":"string"}},"required":["object_id","type"],"type":"object"},{"description":"Flips (reverses) a face. If the solid3d body type is \"Solid\", then body type will become non-manifold (\"Surface\").","properties":{"face_id":{"description":"Which face you want to flip.","format":"uuid","type":"string"},"object_id":{"description":"Which object is being queried.","format":"uuid","type":"string"},"type":{"enum":["solid3d_flip_face"],"type":"string"}},"required":["face_id","object_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 edges which are opposite the given edge, across all possible faces.","properties":{"along_vector":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"If given, only 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":"Gets the shared edge between these two faces if it exists","properties":{"face_ids":{"description":"The faces being queried","items":{"format":"uuid","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"object_id":{"description":"Which object is being queried.","format":"uuid","type":"string"},"type":{"enum":["solid3d_get_common_edge"],"type":"string"}},"required":["face_ids","object_id","type"],"type":"object"},{"description":"Fillets the given edge with the specified radius.","properties":{"cut_type":{"allOf":[{"$ref":"#/components/schemas/CutType"}],"default":"fillet","description":"How to apply the cut."},"edge_id":{"default":null,"description":"Which edge you want to fillet.","format":"uuid","nullable":true,"type":"string"},"edge_ids":{"default":[],"description":"Which edges you want to fillet.","items":{"format":"uuid","type":"string"},"type":"array"},"extra_face_ids":{"default":[],"description":"What IDs should the resulting faces have? If you've only passed one edge ID, its ID will be the command ID used to send this command, and this field should be empty. If you've passed `n` IDs (to fillet `n` edges), then this should be length `n-1`, and the first edge will use the command ID used to send this command.","items":{"format":"uuid","type":"string"},"type":"array"},"object_id":{"description":"Which object is being filletted.","format":"uuid","type":"string"},"radius":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The radius of the fillet. Measured in length (using the same units that the current sketch uses). Must be positive (i.e. greater than zero)."},"strategy":{"allOf":[{"$ref":"#/components/schemas/CutStrategy"}],"default":"automatic","description":"Which cutting algorithm to use."},"tolerance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The maximum acceptable surface gap computed between the filleted surfaces. Must be positive (i.e. greater than zero)."},"type":{"enum":["solid3d_fillet_edge"],"type":"string"}},"required":["object_id","radius","tolerance","type"],"type":"object"},{"description":"Cut the list of given edges with the given cut parameters.","properties":{"cut_type":{"allOf":[{"$ref":"#/components/schemas/CutTypeV2"}],"description":"The cut type and information required to perform the cut."},"edge_ids":{"default":[],"description":"Which edges you want to cut.","items":{"format":"uuid","type":"string"},"type":"array"},"extra_face_ids":{"default":[],"description":"What IDs should the resulting faces have? If you've only passed one edge ID, its ID will be the command ID used to send this command, and this field should be empty. If you've passed `n` IDs (to cut `n` edges), then this should be length `n-1`, and the first edge will use the command ID used to send this command.","items":{"format":"uuid","type":"string"},"type":"array"},"object_id":{"description":"Which object is being cut.","format":"uuid","type":"string"},"strategy":{"allOf":[{"$ref":"#/components/schemas/CutStrategy"}],"default":"automatic","description":"Which cutting algorithm to use."},"tolerance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The maximum acceptable surface gap computed between the cut surfaces. Must be positive (i.e. greater than zero)."},"type":{"enum":["solid3d_cut_edges"],"type":"string"}},"required":["cut_type","object_id","tolerance","type"],"type":"object"},{"description":"Determines whether a brep face is planar and returns its surface-local planar axes if so","properties":{"object_id":{"description":"Which face is being queried.","format":"uuid","type":"string"},"type":{"enum":["face_is_planar"],"type":"string"}},"required":["object_id","type"],"type":"object"},{"description":"Determines a position on a brep face evaluated by parameters u,v","properties":{"object_id":{"description":"Which face is being queried.","format":"uuid","type":"string"},"type":{"enum":["face_get_position"],"type":"string"},"uv":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"The 2D parameter-space u,v position to evaluate the surface at"}},"required":["object_id","type","uv"],"type":"object"},{"description":"Obtains the surface \"center of mass\"","properties":{"object_id":{"description":"Which face is being queried.","format":"uuid","type":"string"},"type":{"enum":["face_get_center"],"type":"string"}},"required":["object_id","type"],"type":"object"},{"description":"Determines the gradient (dFdu, dFdv) + normal vector on a brep face evaluated by parameters u,v","properties":{"object_id":{"description":"Which face is being queried.","format":"uuid","type":"string"},"type":{"enum":["face_get_gradient"],"type":"string"},"uv":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"The 2D parameter-space u,v position to evaluate the surface at"}},"required":["object_id","type","uv"],"type":"object"},{"description":"Send 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 entity in or out.","properties":{"duration_seconds":{"default":0.4,"description":"How many seconds the animation should take.","format":"double","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 new 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":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"What should the plane's span/extent? When rendered visually, this is both the width and height along X and Y axis respectively."},"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 color of a plane.","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 current 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":"Disable sketch mode. If you are sketching on a face, be sure to not disable sketch mode until you have extruded. Otherwise, your object will not be fused with the face.","properties":{"type":{"enum":["sketch_mode_disable"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Get the plane for sketch mode.","properties":{"type":{"enum":["get_sketch_mode_plane"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Get the plane for sketch mode.","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":{"adjust_camera":{"description":"Should the camera move at all?","type":"boolean"},"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"},"planar_normal":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"If provided, ensures that the normal of the sketch plane must be aligned with this supplied normal (otherwise the camera position will be used to infer the normal to point towards the viewer)","nullable":true},"type":{"enum":["enable_sketch_mode"],"type":"string"}},"required":["adjust_camera","animated","entity_id","ortho","type"],"type":"object"},{"description":"Sets whether or not changes to the scene or its objects will be done as a \"dry run\" In a dry run, successful commands won't actually change the model. This is useful for catching errors before actually making the change.","properties":{"type":{"enum":["enable_dry_run"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Sets whether or not changes to the scene or its objects will be done as a \"dry run\" In a dry run, successful commands won't actually change the model. This is useful for catching errors before actually making the change.","properties":{"type":{"enum":["disable_dry_run"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Set the background color of the scene.","properties":{"color":{"allOf":[{"$ref":"#/components/schemas/Color"}],"description":"The color to set the background to."},"type":{"enum":["set_background_color"],"type":"string"}},"required":["color","type"],"type":"object"},{"description":"Set the properties of the tool lines for the scene.","properties":{"color":{"allOf":[{"$ref":"#/components/schemas/Color"}],"description":"The color to set the tool line to.","nullable":true},"type":{"enum":["set_current_tool_properties"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Set the default system properties used when a specific property isn't set.","properties":{"backface_color":{"allOf":[{"$ref":"#/components/schemas/Color"}],"default":null,"description":"The default color to use for all backfaces","nullable":true},"color":{"allOf":[{"$ref":"#/components/schemas/Color"}],"default":null,"description":"The default system color.","nullable":true},"type":{"enum":["set_default_system_properties"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Get type of the 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 the 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":"Project an entity on to a plane.","properties":{"entity_id":{"description":"Which entity to project (vertex or edge).","format":"uuid","type":"string"},"plane_id":{"description":"Which plane to project entity_id onto.","format":"uuid","type":"string"},"type":{"enum":["project_entity_to_plane"],"type":"string"},"use_plane_coords":{"description":"If true: the projected points are returned in the plane_id's coordinate system, else: the projected points are returned in the world coordinate system.","type":"boolean"}},"required":["entity_id","plane_id","type","use_plane_coords"],"type":"object"},{"description":"Project a list of points on to a plane.","properties":{"plane_id":{"description":"The id of the plane used for the projection.","format":"uuid","type":"string"},"points":{"description":"The list of points that will be projected.","items":{"$ref":"#/components/schemas/Point3d"},"type":"array"},"type":{"enum":["project_points_to_plane"],"type":"string"},"use_plane_coords":{"description":"If true: the projected points are returned in the plane_id's coordinate sysetm. else: the projected points are returned in the world coordinate system.","type":"boolean"}},"required":["plane_id","points","type","use_plane_coords"],"type":"object"},{"description":"Take a snapshot of the current view.","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":"Obtain curve ids for vertex ids","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":"Obtain curve id by index","properties":{"index":{"description":"IDs of the vertices for which to obtain curve ids from","format":"uint32","minimum":0,"type":"integer"},"path_id":{"description":"Which path to query","format":"uuid","type":"string"},"type":{"enum":["path_get_curve_uuid"],"type":"string"}},"required":["index","path_id","type"],"type":"object"},{"description":"Obtain vertex ids for 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":"Obtain the sketch target id (if the path was drawn in sketchmode) for a path","properties":{"path_id":{"description":"Which path to query","format":"uuid","type":"string"},"type":{"enum":["path_get_sketch_target_uuid"],"type":"string"}},"required":["path_id","type"],"type":"object"},{"description":"Start dragging the 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 the 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 the 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":{"bitrate":{"default":null,"description":"Video feed's constant bitrate (CBR)","format":"uint32","minimum":0,"nullable":true,"type":"integer"},"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/InputFormat3d"}],"description":"Input file format."},"type":{"enum":["import_files"],"type":"string"}},"required":["files","format","type"],"type":"object"},{"description":"Set the units of the scene. For all following commands, the units will be interpreted as the given units. Any previously executed commands will not be affected or have their units changed. They will remain in the units they were originally executed in.","properties":{"type":{"enum":["set_scene_units"],"type":"string"},"unit":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"Which units the scene uses."}},"required":["type","unit"],"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."},"type":{"enum":["mass"],"type":"string"}},"required":["entity_ids","material_density","material_density_unit","output_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."},"type":{"enum":["density"],"type":"string"}},"required":["entity_ids","material_mass","material_mass_unit","output_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."},"type":{"enum":["volume"],"type":"string"}},"required":["entity_ids","output_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."},"type":{"enum":["center_of_mass"],"type":"string"}},"required":["entity_ids","output_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."},"type":{"enum":["surface_area"],"type":"string"}},"required":["entity_ids","output_unit","type"],"type":"object"},{"description":"Focus the default camera upon an object in the scene.","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":"When you select some entity with the current tool, what should happen to the entity?","properties":{"selection_type":{"allOf":[{"$ref":"#/components/schemas/SceneSelectionType"}],"description":"What type of selection should occur when you select something?"},"type":{"enum":["set_selection_type"],"type":"string"}},"required":["selection_type","type"],"type":"object"},{"description":"What kind of entities can be selected?","properties":{"filter":{"description":"If vector is empty, clear all filters. If vector is non-empty, only the given entity types will be selectable.","items":{"$ref":"#/components/schemas/EntityType"},"type":"array"},"type":{"enum":["set_selection_filter"],"type":"string"}},"required":["filter","type"],"type":"object"},{"description":"Get the ids of a given entity type.","properties":{"filter":{"description":"The entity types to be queried.","items":{"$ref":"#/components/schemas/EntityType"},"type":"array"},"skip":{"description":"Skip the first n returned ids. If multiple filters are provided, this skip will apply to each filter individually.","format":"uint32","minimum":0,"type":"integer"},"take":{"description":"Take n ids after any ids skipped. This value must be greater than zero and not exceed 1000. If multiple filters are provided, this take will apply to each filter individually. If there are fewer than `take` items of the provided filter type then the returned list's length will be the smaller value.","format":"uint32","maximum":1000,"minimum":1,"type":"integer"},"type":{"enum":["scene_get_entity_ids"],"type":"string"}},"required":["filter","skip","take","type"],"type":"object"},{"description":"Use orthographic projection.","properties":{"type":{"enum":["default_camera_set_orthographic"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Use perspective projection.","properties":{"parameters":{"allOf":[{"$ref":"#/components/schemas/PerspectiveCameraParameters"}],"description":"If this is not given, use the same parameters as last time the perspective camera was used.","nullable":true},"type":{"enum":["default_camera_set_perspective"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Updates the camera to center to the center of the current selection (or the origin if nothing is selected)","properties":{"camera_movement":{"allOf":[{"$ref":"#/components/schemas/CameraMovement"}],"default":"vantage","description":"Dictates whether or not the camera position should be adjusted during this operation If no movement is requested, the camera will orbit around the new center from its current position"},"type":{"enum":["default_camera_center_to_selection"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Updates the camera to center to the center of the current scene's bounds","properties":{"camera_movement":{"allOf":[{"$ref":"#/components/schemas/CameraMovement"}],"default":"vantage","description":"Dictates whether or not the camera position should be adjusted during this operation If no movement is requested, the camera will orbit around the new center from its current position"},"type":{"enum":["default_camera_center_to_scene"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Fit the view to the specified object(s).","properties":{"animated":{"default":false,"description":"Whether or not to animate the camera movement.","type":"boolean"},"object_ids":{"default":[],"description":"Which objects to fit camera to; if empty, fit to all non-default objects. Defaults to empty vector.","items":{"format":"uuid","type":"string"},"type":"array"},"padding":{"default":0.0,"description":"How much to pad the view frame by, as a fraction of the object(s) bounding box size. Negative padding will crop the view of the object proportionally. e.g. padding = 0.2 means the view will span 120% of the object(s) bounding box, and padding = -0.2 means the view will span 80% of the object(s) bounding box.","format":"float","type":"number"},"type":{"enum":["zoom_to_fit"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Looks along the normal of the specified face (if it is planar!), and fits the view to it.","properties":{"animated":{"default":false,"description":"Whether or not to animate the camera movement. (Animation is currently not supported.)","type":"boolean"},"face_id":{"description":"Which face to orient camera to. If the face is not planar, no action will occur.","format":"uuid","type":"string"},"padding":{"default":0.0,"description":"How much to pad the view frame by, as a fraction of the face bounding box size. Negative padding will crop the view of the face proportionally. e.g. padding = 0.2 means the view will span 120% of the face bounding box, and padding = -0.2 means the view will span 80% of the face bounding box.","format":"float","type":"number"},"type":{"enum":["orient_to_face"],"type":"string"}},"required":["face_id","type"],"type":"object"},{"description":"Fit the view to the scene with an isometric view.","properties":{"padding":{"default":0.0,"description":"How much to pad the view frame by, as a fraction of the object(s) bounding box size. Negative padding will crop the view of the object proportionally. e.g. padding = 0.2 means the view will span 120% of the object(s) bounding box, and padding = -0.2 means the view will span 80% of the object(s) bounding box.","format":"float","type":"number"},"type":{"enum":["view_isometric"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Get a concise description of all of an extrusion's faces.","properties":{"edge_id":{"description":"Any edge that lies on the extrusion base path.","format":"uuid","type":"string"},"object_id":{"description":"The Solid3d object whose extrusion is being queried.","format":"uuid","type":"string"},"type":{"enum":["solid3d_get_extrusion_face_info"],"type":"string"}},"required":["edge_id","object_id","type"],"type":"object"},{"description":"Get a concise description of all of solids edges.","properties":{"edge_id":{"description":"Any edge that lies on the extrusion base path.","format":"uuid","type":"string"},"object_id":{"description":"The Solid3d object whose info is being queried.","format":"uuid","type":"string"},"type":{"enum":["solid3d_get_adjacency_info"],"type":"string"}},"required":["edge_id","object_id","type"],"type":"object"},{"description":"Clear the selection","properties":{"type":{"enum":["select_clear"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Find all IDs of selected entities","properties":{"type":{"enum":["select_get"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Get the number of objects in the scene","properties":{"type":{"enum":["get_num_objects"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Set the transform of an object.","properties":{"object_id":{"description":"Id of the object whose transform is to be set.","format":"uuid","type":"string"},"transforms":{"description":"List of transforms to be applied to the object.","items":{"$ref":"#/components/schemas/ComponentTransform"},"type":"array"},"type":{"enum":["set_object_transform"],"type":"string"}},"required":["object_id","transforms","type"],"type":"object"},{"description":"Create a new solid from combining other smaller solids. In other words, every part of the input solids will be included in the output solid.","properties":{"separate_bodies":{"default":false,"description":"If true, non-contiguous bodies in the result will be returned as separate objects","type":"boolean"},"solid_ids":{"description":"Which solids to union together. Cannot be empty.","items":{"format":"uuid","type":"string"},"type":"array"},"tolerance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The maximum acceptable surface gap computed between the joined solids. Must be positive (i.e. greater than zero)."},"type":{"enum":["boolean_union"],"type":"string"}},"required":["solid_ids","tolerance","type"],"type":"object"},{"description":"Create a new solid from intersecting several other solids. In other words, the part of the input solids where they all overlap will be the output solid.","properties":{"separate_bodies":{"default":false,"description":"If true, non-contiguous bodies in the result will be returned as separate objects","type":"boolean"},"solid_ids":{"description":"Which solids to intersect together","items":{"format":"uuid","type":"string"},"type":"array"},"tolerance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The maximum acceptable surface gap computed between the joined solids. Must be positive (i.e. greater than zero)."},"type":{"enum":["boolean_intersection"],"type":"string"}},"required":["solid_ids","tolerance","type"],"type":"object"},{"description":"Create a new solid from subtracting several other solids. The 'target' is what will be cut from. The 'tool' is what will be cut out from 'target'.","properties":{"separate_bodies":{"default":false,"description":"If true, non-contiguous bodies in the result will be returned as separate objects","type":"boolean"},"target_ids":{"description":"Geometry to cut out from.","items":{"format":"uuid","type":"string"},"type":"array"},"tolerance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The maximum acceptable surface gap computed between the target and the solids cut out from it. Must be positive (i.e. greater than zero)."},"tool_ids":{"description":"Will be cut out from the 'target'.","items":{"format":"uuid","type":"string"},"type":"array"},"type":{"enum":["boolean_subtract"],"type":"string"}},"required":["target_ids","tolerance","tool_ids","type"],"type":"object"},{"description":"Create a new non-manifold body by intersecting all the input bodies, cutting and splitting all the faces at the intersection boundaries.","properties":{"body_ids":{"description":"Which target input bodies to intersect. Inputs with non-solid body types are permitted","items":{"format":"uuid","type":"string"},"type":"array"},"keep_tools":{"default":false,"description":"If true, the provided tool bodies will not be modified","type":"boolean"},"separate_bodies":{"default":false,"description":"If true, target bodies will be separated into multiple objects at their intersection boundaries.","type":"boolean"},"tolerance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The maximum acceptable surface gap between the intersected bodies. Must be positive (i.e. greater than zero)."},"tool_ids":{"default":null,"description":"If provided, only these bodies will be used to intersect with the target bodies in body_ids, Otherwise, all bodies in body_ids will be intersected with themselves.","items":{"format":"uuid","type":"string"},"nullable":true,"type":"array"},"type":{"enum":["boolean_imprint"],"type":"string"}},"required":["body_ids","tolerance","type"],"type":"object"},{"description":"Make a new path by offsetting an object by a given distance. The new path's ID will be the ID of this command.","properties":{"face_id":{"default":null,"description":"If the object is a solid, this is the ID of the face to base the offset on. If given, and `object_id` refers to a solid, then this face on the solid will be offset. If given but `object_id` doesn't refer to a solid, responds with an error. If not given, then `object_id` itself will be offset directly.","format":"uuid","nullable":true,"type":"string"},"object_id":{"description":"The object that will be offset (can be a path, sketch, or a solid)","format":"uuid","type":"string"},"offset":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The distance to offset the path (positive for outset, negative for inset)"},"type":{"enum":["make_offset_path"],"type":"string"}},"required":["object_id","offset","type"],"type":"object"},{"description":"Add a hole to a closed path by offsetting it a uniform distance inward.","properties":{"object_id":{"description":"The closed path to add a hole to.","format":"uuid","type":"string"},"offset":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The distance to offset the path (positive for outset, negative for inset)"},"type":{"enum":["add_hole_from_offset"],"type":"string"}},"required":["object_id","offset","type"],"type":"object"},{"description":"Align the grid with a plane or a planar face.","properties":{"grid_id":{"description":"The grid to be moved.","format":"uuid","type":"string"},"reference_id":{"description":"The plane or face that the grid will be aligned to. If a face, it must be planar to succeed.","format":"uuid","type":"string"},"type":{"enum":["set_grid_reference_plane"],"type":"string"}},"required":["grid_id","reference_id","type"],"type":"object"},{"description":"Set the scale of the grid lines in the video feed.","properties":{"type":{"enum":["set_grid_scale"],"type":"string"},"units":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"description":"Which units the `value` field uses."},"value":{"description":"Distance between grid lines represents this much distance.","format":"float","type":"number"}},"required":["type","units","value"],"type":"object"},{"description":"Set the grid lines to auto scale. The grid will get larger the further you zoom out, and smaller the more you zoom in.","properties":{"type":{"enum":["set_grid_auto_scale"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Render transparent surfaces more accurately, but this might make rendering slower. Because it can interfere with runtime performance, it defaults to false.","properties":{"enabled":{"description":"Enables or disables OIT. If not given, toggles it.","nullable":true,"type":"boolean"},"type":{"enum":["set_order_independent_transparency"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Create a region bounded by the intersection of various paths. The region should have an ID taken from the ID of the 'CreateRegion' modeling command.","properties":{"curve_clockwise":{"default":false,"description":"By default, curve counterclockwise at intersections. If this is true, instead curve clockwise.","type":"boolean"},"intersection_index":{"default":-1,"description":"At which intersection between `segment` and `intersection_segment` should we stop following the `segment` and start following `intersection_segment`? Defaults to -1, which means the last intersection.","format":"int32","type":"integer"},"intersection_segment":{"description":"Second segment to follow to find the region. Intersects the first segment.","format":"uuid","type":"string"},"object_id":{"description":"Which sketch object to create the region from.","format":"uuid","type":"string"},"segment":{"description":"First segment to follow to find the region.","format":"uuid","type":"string"},"type":{"enum":["create_region"],"type":"string"}},"required":["intersection_segment","object_id","segment","type"],"type":"object"},{"description":"Create a region with a query point. The region should have an ID taken from the ID of the 'CreateRegionFromQueryPoint' modeling command.","properties":{"object_id":{"description":"Which sketch object to create the region from.","format":"uuid","type":"string"},"query_point":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"The query point (in the same coordinates as the sketch itself) if a possible sketch region contains this point, then that region will be created"},"type":{"enum":["create_region_from_query_point"],"type":"string"}},"required":["object_id","query_point","type"],"type":"object"},{"description":"Finds a suitable point inside the region for calling such that CreateRegionFromQueryPoint will generate an identical region.","properties":{"region_id":{"description":"Which region to search within","format":"uuid","type":"string"},"type":{"enum":["region_get_query_point"],"type":"string"}},"required":["region_id","type"],"type":"object"},{"description":"The user clicked on a point in the window, returns the region the user clicked on, if any.","properties":{"selected_at_window":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Where in the window was selected"},"type":{"enum":["select_region_from_point"],"type":"string"}},"required":["selected_at_window","type"],"type":"object"},{"description":"Get the smallest box that could contain the given parts.","properties":{"entity_ids":{"description":"IDs of the entities to be included in the box. If this is empty, then all entities are included (the entire scene).","items":{"format":"uuid","type":"string"},"type":"array"},"type":{"enum":["bounding_box"],"type":"string"}},"required":["entity_ids","type"],"type":"object"},{"description":"Offset a surface by a given distance.","properties":{"distance":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The distance to offset the surface by."},"flip":{"description":"Flip the newly created face.","type":"boolean"},"surface_id":{"description":"The surface to offset.","format":"uuid","type":"string"},"type":{"enum":["offset_surface"],"type":"string"}},"required":["distance","flip","surface_id","type"],"type":"object"},{"description":"Returns the closest edge to this point.","properties":{"closest_to":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Find the edge closest to this point. Assumed to be in absolute coordinates, relative to global (scene) origin."},"object_id":{"default":null,"description":"The body whose edges are being queried. If not given, will search all bodies in the scene.","format":"uuid","nullable":true,"type":"string"},"type":{"enum":["closest_edge"],"type":"string"}},"required":["closest_to","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"},"ModelingSessionData":{"description":"Successful Websocket response.","properties":{"api_call_id":{"description":"ID of the API call this modeling session is using. Useful for tracing and debugging.","type":"string"}},"required":["api_call_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"},"MouseMove":{"description":"The response from the `MouseMove` endpoint.","type":"object"},"MovePathPen":{"description":"The response from the `MovePathPen` endpoint.","type":"object"},"NewAnnotation":{"description":"The response from the `NewAnnotation` endpoint.","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"},"oidc_nonce":{"description":"Nonce required for OIDC flows.","nullable":true,"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: .","oneOf":[{"description":"An OAuth 2.0 Device Authorization Grant.","enum":["urn:ietf:params:oauth:grant-type:device_code"],"type":"string"}]},"ObjectBringToFront":{"description":"The response from the `ObjectBringToFront` endpoint.","type":"object"},"ObjectSetMaterialParamsPbr":{"description":"The response from the `ObjectSetMaterialParamsPbr` endpoint.","type":"object"},"ObjectVisible":{"description":"The response from the `ObjectVisible` endpoint.","type":"object"},"OffsetSurface":{"description":"The response from the 'OffsetSurface'.","type":"object"},"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"},{"properties":{"data":{"$ref":"#/components/schemas/EngineUtilEvaluatePath"},"type":{"enum":["engine_util_evaluate_path"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/StartPath"},"type":{"enum":["start_path"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/MovePathPen"},"type":{"enum":["move_path_pen"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ExtendPath"},"type":{"enum":["extend_path"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Extrude"},"type":{"enum":["extrude"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ExtrudeToReference"},"type":{"enum":["extrude_to_reference"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/TwistExtrude"},"type":{"enum":["twist_extrude"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Sweep"},"type":{"enum":["sweep"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Revolve"},"type":{"enum":["revolve"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dShellFace"},"type":{"enum":["solid3d_shell_face"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dJoin"},"type":{"enum":["solid3d_join"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SurfaceBlend"},"type":{"enum":["surface_blend"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dGetEdgeUuid"},"type":{"enum":["solid3d_get_edge_uuid"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dGetFaceUuid"},"type":{"enum":["solid3d_get_face_uuid"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dGetBodyType"},"type":{"enum":["solid3d_get_body_type"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/RevolveAboutEdge"},"type":{"enum":["revolve_about_edge"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/CameraDragStart"},"type":{"enum":["camera_drag_start"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/DefaultCameraLookAt"},"type":{"enum":["default_camera_look_at"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/DefaultCameraPerspectiveSettings"},"type":{"enum":["default_camera_perspective_settings"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SelectAdd"},"type":{"enum":["select_add"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SelectRemove"},"type":{"enum":["select_remove"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SceneClearAll"},"type":{"enum":["scene_clear_all"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SelectReplace"},"type":{"enum":["select_replace"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/HighlightSetEntities"},"type":{"enum":["highlight_set_entities"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/NewAnnotation"},"type":{"enum":["new_annotation"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/UpdateAnnotation"},"type":{"enum":["update_annotation"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EdgeLinesVisible"},"type":{"enum":["edge_lines_visible"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ObjectVisible"},"type":{"enum":["object_visible"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ObjectBringToFront"},"type":{"enum":["object_bring_to_front"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ObjectSetMaterialParamsPbr"},"type":{"enum":["object_set_material_params_pbr"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid2dAddHole"},"type":{"enum":["solid2d_add_hole"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dFilletEdge"},"type":{"enum":["solid3d_fillet_edge"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dCutEdges"},"type":{"enum":["solid3d_cut_edges"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SendObject"},"type":{"enum":["send_object"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntitySetOpacity"},"type":{"enum":["entity_set_opacity"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityFade"},"type":{"enum":["entity_fade"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/MakePlane"},"type":{"enum":["make_plane"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/PlaneSetColor"},"type":{"enum":["plane_set_color"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SetTool"},"type":{"enum":["set_tool"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/MouseMove"},"type":{"enum":["mouse_move"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SketchModeDisable"},"type":{"enum":["sketch_mode_disable"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EnableDryRun"},"type":{"enum":["enable_dry_run"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/DisableDryRun"},"type":{"enum":["disable_dry_run"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/CurveSetConstraint"},"type":{"enum":["curve_set_constraint"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EnableSketchMode"},"type":{"enum":["enable_sketch_mode"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SetBackgroundColor"},"type":{"enum":["set_background_color"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SetCurrentToolProperties"},"type":{"enum":["set_current_tool_properties"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SetDefaultSystemProperties"},"type":{"enum":["set_default_system_properties"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/MakeAxesGizmo"},"type":{"enum":["make_axes_gizmo"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/HandleMouseDragStart"},"type":{"enum":["handle_mouse_drag_start"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/HandleMouseDragMove"},"type":{"enum":["handle_mouse_drag_move"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/HandleMouseDragEnd"},"type":{"enum":["handle_mouse_drag_end"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/RemoveSceneObjects"},"type":{"enum":["remove_scene_objects"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ReconfigureStream"},"type":{"enum":["reconfigure_stream"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SetSceneUnits"},"type":{"enum":["set_scene_units"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SetSelectionType"},"type":{"enum":["set_selection_type"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SetSelectionFilter"},"type":{"enum":["set_selection_filter"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/DefaultCameraSetOrthographic"},"type":{"enum":["default_camera_set_orthographic"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/DefaultCameraSetPerspective"},"type":{"enum":["default_camera_set_perspective"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/DefaultCameraCenterToSelection"},"type":{"enum":["default_camera_center_to_selection"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/DefaultCameraCenterToScene"},"type":{"enum":["default_camera_center_to_scene"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SelectClear"},"type":{"enum":["select_clear"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Export2d"},"type":{"enum":["export2d"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Export3d"},"type":{"enum":["export3d"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Export"},"type":{"enum":["export"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SelectWithPoint"},"type":{"enum":["select_with_point"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/HighlightSetEntity"},"type":{"enum":["highlight_set_entity"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityGetChildUuid"},"type":{"enum":["entity_get_child_uuid"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityGetIndex"},"type":{"enum":["entity_get_index"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityGetPrimitiveIndex"},"type":{"enum":["entity_get_primitive_index"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityDeleteChildren"},"type":{"enum":["entity_delete_children"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityGetNumChildren"},"type":{"enum":["entity_get_num_children"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityGetParentId"},"type":{"enum":["entity_get_parent_id"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityGetAllChildUuids"},"type":{"enum":["entity_get_all_child_uuids"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityGetSketchPaths"},"type":{"enum":["entity_get_sketch_paths"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Loft"},"type":{"enum":["loft"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ClosePath"},"type":{"enum":["close_path"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/CameraDragMove"},"type":{"enum":["camera_drag_move"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/CameraDragEnd"},"type":{"enum":["camera_drag_end"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/DefaultCameraGetSettings"},"type":{"enum":["default_camera_get_settings"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/DefaultCameraGetView"},"type":{"enum":["default_camera_get_view"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/DefaultCameraSetView"},"type":{"enum":["default_camera_set_view"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/DefaultCameraZoom"},"type":{"enum":["default_camera_zoom"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ZoomToFit"},"type":{"enum":["zoom_to_fit"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/OrientToFace"},"type":{"enum":["orient_to_face"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ViewIsometric"},"type":{"enum":["view_isometric"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/GetNumObjects"},"type":{"enum":["get_num_objects"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/MakeOffsetPath"},"type":{"enum":["make_offset_path"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SetObjectTransform"},"type":{"enum":["set_object_transform"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/AddHoleFromOffset"},"type":{"enum":["add_hole_from_offset"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/DefaultCameraFocusOn"},"type":{"enum":["default_camera_focus_on"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SelectGet"},"type":{"enum":["select_get"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dGetAdjacencyInfo"},"type":{"enum":["solid3d_get_adjacency_info"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dGetAllEdgeFaces"},"type":{"enum":["solid3d_get_all_edge_faces"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dFlip"},"type":{"enum":["solid3d_flip"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dFlipFace"},"type":{"enum":["solid3d_flip_face"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dGetAllOppositeEdges"},"type":{"enum":["solid3d_get_all_opposite_edges"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dGetOppositeEdge"},"type":{"enum":["solid3d_get_opposite_edge"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dGetNextAdjacentEdge"},"type":{"enum":["solid3d_get_next_adjacent_edge"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dGetPrevAdjacentEdge"},"type":{"enum":["solid3d_get_prev_adjacent_edge"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dGetCommonEdge"},"type":{"enum":["solid3d_get_common_edge"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/GetEntityType"},"type":{"enum":["get_entity_type"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SceneGetEntityIds"},"type":{"enum":["scene_get_entity_ids"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/CurveGetControlPoints"},"type":{"enum":["curve_get_control_points"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ProjectEntityToPlane"},"type":{"enum":["project_entity_to_plane"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ProjectPointsToPlane"},"type":{"enum":["project_points_to_plane"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/CurveGetType"},"type":{"enum":["curve_get_type"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/MouseClick"},"type":{"enum":["mouse_click"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/TakeSnapshot"},"type":{"enum":["take_snapshot"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/PathGetInfo"},"type":{"enum":["path_get_info"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/PathSegmentInfo"},"type":{"enum":["path_segment_info"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/PathGetCurveUuidsForVertices"},"type":{"enum":["path_get_curve_uuids_for_vertices"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/PathGetCurveUuid"},"type":{"enum":["path_get_curve_uuid"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/PathGetVertexUuids"},"type":{"enum":["path_get_vertex_uuids"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/PathGetSketchTargetUuid"},"type":{"enum":["path_get_sketch_target_uuid"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/CurveGetEndPoints"},"type":{"enum":["curve_get_end_points"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/FaceIsPlanar"},"type":{"enum":["face_is_planar"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/FaceGetPosition"},"type":{"enum":["face_get_position"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/FaceGetCenter"},"type":{"enum":["face_get_center"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/FaceGetGradient"},"type":{"enum":["face_get_gradient"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/PlaneIntersectAndProject"},"type":{"enum":["plane_intersect_and_project"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ImportFiles"},"type":{"enum":["import_files"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ImportedGeometry"},"type":{"enum":["imported_geometry"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Mass"},"type":{"enum":["mass"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Volume"},"type":{"enum":["volume"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Density"},"type":{"enum":["density"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SurfaceArea"},"type":{"enum":["surface_area"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/CenterOfMass"},"type":{"enum":["center_of_mass"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/GetSketchModePlane"},"type":{"enum":["get_sketch_mode_plane"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityGetDistance"},"type":{"enum":["entity_get_distance"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/FaceEdgeInfo"},"type":{"enum":["face_edge_info"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EdgeInfo"},"type":{"enum":["edge_info"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityClone"},"type":{"enum":["entity_clone"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityLinearPatternTransform"},"type":{"enum":["entity_linear_pattern_transform"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityLinearPattern"},"type":{"enum":["entity_linear_pattern"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityCircularPattern"},"type":{"enum":["entity_circular_pattern"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityMirror"},"type":{"enum":["entity_mirror"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityMirrorAcrossEdge"},"type":{"enum":["entity_mirror_across_edge"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityMakeHelix"},"type":{"enum":["entity_make_helix"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityMakeHelixFromParams"},"type":{"enum":["entity_make_helix_from_params"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/EntityMakeHelixFromEdge"},"type":{"enum":["entity_make_helix_from_edge"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/Solid3dGetExtrusionFaceInfo"},"type":{"enum":["solid3d_get_extrusion_face_info"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ExtrusionFaceInfo"},"type":{"enum":["extrusion_face_info"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ComplementaryEdges"},"type":{"enum":["complementary_edges"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/AdjacencyInfo"},"type":{"enum":["adjacency_info"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SetGridReferencePlane"},"type":{"enum":["set_grid_reference_plane"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/BooleanUnion"},"type":{"enum":["boolean_union"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/BooleanIntersection"},"type":{"enum":["boolean_intersection"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/BooleanSubtract"},"type":{"enum":["boolean_subtract"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/BooleanImprint"},"type":{"enum":["boolean_imprint"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SetGridScale"},"type":{"enum":["set_grid_scale"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SetGridAutoScale"},"type":{"enum":["set_grid_auto_scale"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SetOrderIndependentTransparency"},"type":{"enum":["set_order_independent_transparency"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/CreateRegion"},"type":{"enum":["create_region"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/CreateRegionFromQueryPoint"},"type":{"enum":["create_region_from_query_point"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/RegionGetQueryPoint"},"type":{"enum":["region_get_query_point"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/SelectRegionFromPoint"},"type":{"enum":["select_region_from_point"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/BoundingBox"},"type":{"enum":["bounding_box"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/OffsetSurface"},"type":{"enum":["offset_surface"],"type":"string"}},"required":["data","type"],"type":"object"},{"properties":{"data":{"$ref":"#/components/schemas/ClosestEdge"},"type":{"enum":["closest_edge"],"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":"Response to a ModelingBatch.","properties":{"data":{"properties":{"responses":{"additionalProperties":{"$ref":"#/components/schemas/BatchResponse"},"description":"For each request in the batch, maps its ID to the request's outcome.","type":"object"}},"required":["responses"],"type":"object"},"type":{"enum":["modeling_batch"],"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"},{"description":"Data about the Modeling Session (application-level).","properties":{"data":{"properties":{"session":{"allOf":[{"$ref":"#/components/schemas/ModelingSessionData"}],"description":"Data about the Modeling Session (application-level)."}},"required":["session"],"type":"object"},"type":{"enum":["modeling_session_data"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"Pong response to a Ping message.","properties":{"data":{"type":"object"},"type":{"enum":["pong"],"type":"string"}},"required":["data","type"],"type":"object"},{"description":"Information about the connected instance","properties":{"data":{"properties":{"name":{"description":"Instance name. This may or may not mean something.","type":"string"}},"required":["name"],"type":"object"},"type":{"enum":["debug"],"type":"string"}},"required":["data","type"],"type":"object"}]},"OppositeForAngle":{"type":"string"},"OppositeForLengthUnit":{"type":"string"},"Org":{"description":"An organization.","properties":{"allow_users_in_domain_to_auto_join":{"description":"If we should allow all future users who are created with email addresses from this domain to join the org.","nullable":true,"type":"boolean"},"aws_external_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"ExternalId our workers supply when assuming customer roles, following AWS guidance for avoiding the [confused deputy problem](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). Required before an org can register external datasets.","nullable":true},"billing_email":{"description":"The billing email address of the org.","format":"email","type":"string"},"billing_email_verified":{"description":"The date and time the billing email address was verified.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"block":{"allOf":[{"$ref":"#/components/schemas/BlockReason"}],"description":"If the org should be blocked and the reason why.","nullable":true},"can_train_on_data":{"default":false,"description":"If we can train on the orgs's data. This value overrides any individual user's `can_train_on_data` value if they are a member of the org.","type":"boolean"},"created_at":{"description":"The date and time the org was created.","format":"date-time","title":"DateTime","type":"string"},"domain":{"description":"The org's domain.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the org."},"image":{"description":"The image for the org. This is a URL.","format":"uri","nullable":true,"title":"String","type":"string"},"name":{"description":"The name of the org.","type":"string"},"phone":{"default":"","description":"The org's phone number.","format":"phone","title":"String","type":"string"},"stripe_id":{"description":"The org's stripe id.","nullable":true,"type":"string"},"updated_at":{"description":"The date and time the org was last updated.","format":"date-time","title":"DateTime","type":"string"}},"required":["billing_email","created_at","id","updated_at"],"type":"object"},"OrgAddress":{"description":"An address for an organization.","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."},"created_at":{"description":"The time and date the address was created.","format":"date-time","title":"DateTime","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier of the address."},"org_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The org ID that this address belongs to."},"state":{"description":"The state component.","type":"string"},"street1":{"description":"The first street component.","type":"string"},"street2":{"description":"The second street component.","type":"string"},"updated_at":{"description":"The time and date the address was last updated.","format":"date-time","title":"DateTime","type":"string"},"zip":{"description":"The zip component.","type":"string"}},"required":["country","created_at","id","org_id","updated_at"],"type":"object"},"OrgAdminDetails":{"description":"Extra admin-only details for an organization.","properties":{"address":{"allOf":[{"$ref":"#/components/schemas/OrgAddress"}],"description":"Latest billing address stored for the organization.","nullable":true},"address_summary":{"description":"Readable billing address summary.","nullable":true,"type":"string"},"block":{"allOf":[{"$ref":"#/components/schemas/BlockReason"}],"description":"Block reason when the org is blocked.","nullable":true},"block_message":{"description":"Human-friendly block reason message.","nullable":true,"type":"string"},"payment_methods":{"description":"Known payment methods on file.","items":{"$ref":"#/components/schemas/PaymentMethod"},"type":"array"},"payment_methods_summary":{"description":"Summaries of the known payment methods.","items":{"type":"string"},"type":"array"},"stripe_customer_id":{"description":"Stripe customer identifier if one exists.","nullable":true,"type":"string"},"stripe_dashboard_url":{"description":"Direct link to the Stripe customer dashboard.","nullable":true,"type":"string"}},"required":["payment_methods","payment_methods_summary"],"type":"object"},"OrgDataset":{"description":"Dataset owned by an organization, reusable across multiple features.","properties":{"access_role_arn":{"description":"Identity we assume when accessing the dataset (AWS role ARN today). Pair this with the org's `aws_external_id` to mitigate the AWS confused deputy risk. See .","type":"string"},"created_at":{"description":"The date and time the dataset was created.","format":"date-time","title":"DateTime","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the dataset."},"last_sync_error":{"description":"Last recorded sync error message, if dataset access failed.","nullable":true,"type":"string"},"last_sync_error_at":{"description":"Timestamp for the last sync error.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"name":{"description":"User-provided display name. This is mutable; lookup by ID instead.","type":"string"},"org_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The ID of the org owning the dataset."},"source_uri":{"description":"Fully-qualified URI to the dataset location (e.g. s3://bucket/prefix).","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/OrgDatasetStatus"}],"description":"Lifecycle status for this dataset."},"storage_provider":{"allOf":[{"$ref":"#/components/schemas/StorageProvider"}],"description":"Storage provider identifier."},"updated_at":{"description":"The date and time the dataset was last updated.","format":"date-time","title":"DateTime","type":"string"}},"required":["access_role_arn","created_at","id","name","org_id","source_uri","status","storage_provider","updated_at"],"type":"object"},"OrgDatasetConversionStatsResponse":{"description":"Summary statistics for an org dataset's conversions.","properties":{"by_status":{"additionalProperties":{"format":"int64","type":"integer"},"description":"Raw counts keyed by conversion status for diagnostics.","type":"object"},"dataset_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"Dataset identifier."},"failures":{"description":"Number of conversions currently in an error state.","format":"int64","type":"integer"},"successes":{"description":"Number of conversions that completed successfully.","format":"int64","type":"integer"},"total":{"description":"Total number of tracked conversions.","format":"int64","type":"integer"}},"required":["by_status","dataset_id","failures","successes","total"],"type":"object"},"OrgDatasetFileConversionDetails":{"description":"Detailed response that bundles conversion metadata with converted file and snapshot contents.","properties":{"completed_at":{"description":"The date and time the conversion got its current `status`.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The date and time the conversion was created.","format":"date-time","title":"DateTime","type":"string"},"dataset_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The ID of the dataset this file is being converted from."},"file_etag":{"description":"File's ETag from dataset bucket, for detecting whether a file needs to be reconverted.","type":"string"},"file_path":{"description":"Location within dataset `path`.","type":"string"},"file_size":{"description":"Number of bytes, for measuring throughput and debugging conversion errors.","format":"int64","type":"integer"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the conversion."},"importer_version":{"description":"Tracks which version processed this file when available.","nullable":true,"type":"string"},"metadata":{"description":"Additional per-conversion metadata as string key-value pairs.","nullable":true},"original_snapshot_images":{"description":"Snapshot images for the original source model.","items":{"$ref":"#/components/schemas/OrgDatasetSnapshotImage"},"type":"array"},"output":{"description":"Plain-text contents of the converted artifact, when available.","nullable":true,"type":"string"},"phase":{"allOf":[{"$ref":"#/components/schemas/OrgDatasetFileConversionPhase"}],"description":"Current step in the conversion pipeline."},"raw_kcl_output":{"description":"Plain-text contents of the raw KCL artifact, when available.","nullable":true,"type":"string"},"raw_kcl_snapshot_images":{"description":"Snapshot images for the raw KCL model.","items":{"$ref":"#/components/schemas/OrgDatasetSnapshotImage"},"type":"array"},"salon_kcl_output":{"description":"Plain-text contents of the salon/refactored KCL artifact, when available.","nullable":true,"type":"string"},"salon_kcl_snapshot_images":{"description":"Snapshot images for the salon/refactored KCL model.","items":{"$ref":"#/components/schemas/OrgDatasetSnapshotImage"},"type":"array"},"started_at":{"description":"The date and time the conversion started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/OrgDatasetFileConversionStatus"}],"description":"Conversion status."},"status_message":{"description":"Details associated with `status`.","nullable":true,"type":"string"},"updated_at":{"description":"The date and time the conversion was last updated.","format":"date-time","title":"DateTime","type":"string"}},"required":["created_at","dataset_id","file_etag","file_path","file_size","id","original_snapshot_images","phase","raw_kcl_snapshot_images","salon_kcl_snapshot_images","status","updated_at"],"type":"object"},"OrgDatasetFileConversionPhase":{"description":"Fine-grained pipeline stage for org dataset file conversions.","oneOf":[{"description":"Phase index `0`: waiting for a worker to begin processing this conversion.","enum":["queued"],"type":"string"},{"description":"Phase index `1`: generating original file metadata.","enum":["zoo_generated_original_metadata"],"type":"string"},{"description":"Phase index `2`: creating a snapshot of the original source model.","enum":["snapshot_original"],"type":"string"},{"description":"Phase index `3`: discovering optional user-provided metadata files (`.json`, `.yaml`, `.yml`, `.toml`, `.txt`) stored next to the source CAD file.","enum":["user_provided_metadata"],"type":"string"},{"description":"Phase index `4`: converting the source model into raw KCL.","enum":["convert_raw_kcl"],"type":"string"},{"description":"Phase index `5`: generating raw KCL metadata.","enum":["zoo_generated_raw_kcl_metadata"],"type":"string"},{"description":"Phase index `6`: creating a snapshot of the raw KCL result.","enum":["snapshot_raw_kcl"],"type":"string"},{"description":"Phase index `7`: running the salon/refactor step that produces polished KCL.","enum":["salon"],"type":"string"},{"description":"Phase index `8`: generating salon KCL metadata.","enum":["zoo_generated_salon_kcl_metadata"],"type":"string"},{"description":"Phase index `9`: creating a snapshot of the salon/refactored KCL.","enum":["snapshot_salon_kcl"],"type":"string"},{"description":"Phase index `10`: conversion finished successfully.","enum":["completed"],"type":"string"}]},"OrgDatasetFileConversionStatus":{"description":"`OrgDatasetFileConversion` status.","oneOf":[{"description":"Pending conversion.","enum":["queued"],"type":"string"},{"description":"The file will not be converted.","enum":["canceled"],"type":"string"},{"description":"The file is currently being converted. If `started_at` passes a certain threshold, we assume it got dropped and will retry.","enum":["in_progress"],"type":"string"},{"description":"Conversion finished with the result available at `output_path`.","enum":["success"],"type":"string"},{"description":"Conversion failed due to user providing a broken file, such as it being empty.","enum":["error_user"],"type":"string"},{"description":"Conversion failed because we didn't know how to handle the file. The conversion should be retried with a new converter version.","enum":["error_unsupported"],"type":"string"},{"description":"Conversion failed with some other unrecoverable error. The conversion should be retried with a new converter version.","enum":["error_internal"],"type":"string"}]},"OrgDatasetFileConversionSummary":{"description":"Publicly exposed view of a dataset file conversion that omits storage-specific fields.","properties":{"completed_at":{"description":"The date and time the conversion got its current `status`.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"created_at":{"description":"The date and time the conversion was created.","format":"date-time","title":"DateTime","type":"string"},"dataset_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The ID of the dataset this file is being converted from."},"file_etag":{"description":"File's ETag from dataset bucket, for detecting whether a file needs to be reconverted.","type":"string"},"file_path":{"description":"Location within dataset `path`.","type":"string"},"file_size":{"description":"Number of bytes, for measuring throughput and debugging conversion errors.","format":"int64","type":"integer"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the conversion."},"importer_version":{"description":"Tracks which version processed this file when available.","nullable":true,"type":"string"},"metadata":{"description":"Additional per-conversion metadata as string key-value pairs.","nullable":true},"phase":{"allOf":[{"$ref":"#/components/schemas/OrgDatasetFileConversionPhase"}],"description":"Current step in the conversion pipeline."},"started_at":{"description":"The date and time the conversion started.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"status":{"allOf":[{"$ref":"#/components/schemas/OrgDatasetFileConversionStatus"}],"description":"Conversion status."},"status_message":{"description":"Details associated with `status`.","nullable":true,"type":"string"},"updated_at":{"description":"The date and time the conversion was last updated.","format":"date-time","title":"DateTime","type":"string"}},"required":["created_at","dataset_id","file_etag","file_path","file_size","id","phase","status","updated_at"],"type":"object"},"OrgDatasetFileConversionSummaryResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/OrgDatasetFileConversionSummary"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"OrgDatasetResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/OrgDataset"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"OrgDatasetSnapshotImage":{"description":"Detailed response that bundles conversion metadata with the converted file contents.","properties":{"data_base64":{"description":"Base64-encoded image bytes.","format":"byte","title":"String","type":"string"},"mime_type":{"description":"MIME type of the stored image.","type":"string"}},"required":["data_base64","mime_type"],"type":"object"},"OrgDatasetSource":{"description":"Details for accessing an org dataset.","properties":{"access_role_arn":{"description":"Identity we assume when accessing the dataset. Required when `provider` is `s3`; ignored for Zoo-managed datasets. Must be configured with the org's `aws_external_id` per AWS confused deputy guidance. See .","nullable":true,"type":"string"},"provider":{"allOf":[{"$ref":"#/components/schemas/StorageProvider"}],"description":"Storage provider identifier."},"uri":{"description":"Fully-qualified URI for the dataset contents. Required when `provider` is `s3`; ignored for Zoo-managed datasets.","nullable":true,"type":"string"}},"required":["provider"],"type":"object"},"OrgDatasetStatus":{"description":"Lifecycle status for org datasets.","oneOf":[{"description":"Dataset is active and can be used.","enum":["active"],"type":"string"},{"description":"Dataset is being deleted and should not be mutated or used.","enum":["deleting"],"type":"string"},{"description":"Dataset encountered sync errors and needs attention.","enum":["errored"],"type":"string"}]},"OrgDetails":{"description":"The user-modifiable parts of an organization.","properties":{"allow_users_in_domain_to_auto_join":{"description":"If we should allow all future users who are created with email addresses from this domain to join the org.","nullable":true,"type":"boolean"},"billing_email":{"description":"The billing email address of the org.","format":"email","type":"string"},"domain":{"description":"The org's domain.","nullable":true,"type":"string"},"image":{"description":"The image for the org. This is a URL.","format":"uri","nullable":true,"title":"String","type":"string"},"name":{"description":"The name of the org.","type":"string"},"phone":{"default":"","description":"The org's phone number.","format":"phone","title":"String","type":"string"}},"type":"object"},"OrgMember":{"description":"A member of an organization.","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"},"role":{"allOf":[{"$ref":"#/components/schemas/OrgRole"}],"description":"The user's role in the org."},"updated_at":{"description":"The date and time the user was last updated.","format":"date-time","title":"DateTime","type":"string"}},"required":["created_at","id","image","role","updated_at"],"type":"object"},"OrgMemberResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/OrgMember"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"OrgResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/Org"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"OrgRole":{"description":"The roles in an organization.","oneOf":[{"description":"Admins can do anything in the org.","enum":["admin"],"type":"string"},{"description":"Members of an org can not modify an org, but they belong in the org.","enum":["member"],"type":"string"},{"description":"A service account role.","enum":["service_account"],"type":"string"}]},"OrientToFace":{"description":"The response from the `OrientToFace` command.","properties":{"settings":{"allOf":[{"$ref":"#/components/schemas/CameraSettings"}],"description":"Camera settings"}},"required":["settings"],"type":"object"},"OriginType":{"description":"The type of origin","oneOf":[{"description":"Local Origin (center of object bounding box).","properties":{"type":{"enum":["local"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Global Origin (0, 0, 0).","properties":{"type":{"enum":["global"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Custom Origin (user specified point).","properties":{"origin":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Custom origin point."},"type":{"enum":["custom"],"type":"string"}},"required":["origin","type"],"type":"object"}]},"OutputFile":{"description":"Output file contents.\n\nJSON schema
\n\n```json { \"description\": \"Output file contents.\", \"type\": \"object\", \"properties\": { \"contents\": { \"description\": \"The contents of the file. This is base64 encoded so we can ensure it is UTF-8 for JSON.\", \"type\": \"string\" }, \"name\": { \"description\": \"The name of the file.\", \"default\": \"\", \"type\": \"string\" } } } ``` ","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"},"OutputFormat2d":{"description":"Output 2D format specifier.","oneOf":[{"description":"AutoCAD drawing interchange format.","properties":{"storage":{"allOf":[{"$ref":"#/components/schemas/DxfStorage"}],"default":"ascii","description":"Export storage."},"type":{"enum":["dxf"],"type":"string"}},"required":["type"],"type":"object"}]},"OutputFormat3d":{"description":"Output 3D format specifier.","oneOf":[{"description":"Autodesk Filmbox (FBX) format.","properties":{"created":{"description":"Timestamp override.","format":"date-time","nullable":true,"type":"string"},"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 millimeters."}},"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 millimeters."}},"required":["coords","selection","storage","type","units"],"type":"object"},{"description":"ISO 10303-21 (STEP) format.","properties":{"coords":{"allOf":[{"$ref":"#/components/schemas/System"}],"default":{"forward":{"axis":"y","direction":"negative"},"up":{"axis":"z","direction":"positive"}},"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"},"created":{"default":null,"description":"Timestamp override.","format":"date-time","nullable":true,"type":"string"},"presentation":{"allOf":[{"$ref":"#/components/schemas/StepPresentation"}],"default":"pretty","description":"Presentation style."},"type":{"enum":["step"],"type":"string"},"units":{"allOf":[{"$ref":"#/components/schemas/UnitLength"}],"default":"m","description":"Export length unit.\n\nDefaults to meters."}},"required":["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 millimeters."}},"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"},"PathGetCurveUuid":{"description":"The response from the `PathGetCurveUuid` command.","properties":{"curve_id":{"description":"The UUID of the curve entity.","format":"uuid","type":"string"}},"required":["curve_id"],"type":"object"},"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"},"PathGetSketchTargetUuid":{"description":"The response from the `PathGetSketchTargetUuid` command.","properties":{"target_id":{"description":"The UUID of the sketch target.","format":"uuid","nullable":true,"type":"string"}},"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. Arcs can be drawn clockwise when start > end.","properties":{"center":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Center of the circle"},"end":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"description":"End of the arc along circle's perimeter."},"radius":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"Radius of the circle"},"relative":{"description":"Whether or not this arc is a relative offset","type":"boolean"},"start":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"description":"Start of the arc along circle's perimeter."},"type":{"enum":["arc"],"type":"string"}},"required":["center","end","radius","relative","start","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. Negative values will arc clockwise."},"radius":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"Radius of the arc. Not to be confused with Raiders of the Lost Ark."},"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. Arcs will choose a clockwise or counter-clockwise direction based on the arc end 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"},{"description":"Adds an arc from the current position that goes through the given interior point and ends at the given end position","properties":{"end":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"End point of the arc."},"interior":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Interior point of the arc."},"relative":{"description":"Whether or not interior and end are relative to the previous path position","type":"boolean"},"type":{"enum":["arc_to"],"type":"string"}},"required":["end","interior","relative","type"],"type":"object"},{"description":"Adds a circular involute from the current position that goes through the given end_radius and is rotated around the current point by angle.","properties":{"angle":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"description":"The angle to rotate the involute by. A value of zero will produce a curve with a tangent along the x-axis at the start point of the curve."},"end_radius":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The involute is described between two circles, end_radius is the radius of the outer circle."},"reverse":{"description":"If reverse is true, the segment will start from the end of the involute, otherwise it will start from that start.","type":"boolean"},"start_radius":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"The involute is described between two circles, start_radius is the radius of the inner circle."},"type":{"enum":["circular_involute"],"type":"string"}},"required":["angle","end_radius","reverse","start_radius","type"],"type":"object"},{"description":"Adds an elliptical arc segment.","properties":{"center":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"The center point of the ellipse."},"end_angle":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"description":"End of the path along the perimeter of the ellipse."},"major_axis":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Major axis of the ellipse."},"minor_radius":{"allOf":[{"$ref":"#/components/schemas/LengthUnit"}],"description":"Minor radius of the ellipse."},"start_angle":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"description":"Start of the path along the perimeter of the ellipse."},"type":{"enum":["ellipse"],"type":"string"}},"required":["center","end_angle","major_axis","minor_radius","start_angle","type"],"type":"object"},{"description":"Adds a generic conic section specified by the end point, interior point and tangents at the start and end of the section.","properties":{"end":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"End point of the conic."},"end_tangent":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Tangent at the end of the conic."},"interior":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Interior point that lies on the conic."},"relative":{"description":"Whether or not the interior and end points are relative to the previous path position.","type":"boolean"},"start_tangent":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"Tangent at the start of the conic."},"type":{"enum":["conic_to"],"type":"string"}},"required":["end","end_tangent","interior","relative","start_tangent","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"}]},"PerspectiveCameraParameters":{"description":"Defines a perspective view.","properties":{"fov_y":{"description":"Camera frustum vertical field of view.","format":"float","nullable":true,"type":"number"},"z_far":{"description":"Camera frustum far plane.","format":"float","nullable":true,"type":"number"},"z_near":{"description":"Camera frustum near plane.","format":"float","nullable":true,"type":"number"}},"type":"object"},"PlanInterval":{"description":"A plan's interval.","oneOf":[{"description":"Day.","enum":["day"],"type":"string"},{"description":"Month.","enum":["month"],"type":"string"},{"description":"Week.","enum":["week"],"type":"string"},{"description":"Year.","enum":["year"],"type":"string"},{"description":"Don't use.","enum":["unknown"],"type":"string"}]},"PlanStep":{"description":"A step in the design plan.","properties":{"edit_instructions":{"description":"The edit instructions for the step.","type":"string"},"filepath_to_edit":{"description":"The file path it's editing.","type":"string"}},"required":["edit_instructions","filepath_to_edit"],"type":"object"},"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"},"PlaneSetColor":{"description":"The response from the `PlaneSetColor` endpoint.","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":{"$ref":"#/components/schemas/LengthUnit"},"y":{"$ref":"#/components/schemas/LengthUnit"}},"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"},"Point4d":{"description":"A point in homogeneous (4D) space","properties":{"w":{"format":"float","type":"number"},"x":{"format":"float","type":"number"},"y":{"format":"float","type":"number"},"z":{"format":"float","type":"number"}},"required":["w","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"},"PostEffectType":{"description":"Post effect type","enum":["phosphor","ssao","noeffect"],"type":"string"},"PriceUpsertRequest":{"description":"Create or update a price row for a subscription plan.","properties":{"active":{"default":true,"description":"Whether the price should be active.","type":"boolean"},"billing_model":{"allOf":[{"$ref":"#/components/schemas/SubscriptionPlanBillingModel"}],"description":"Billing model (flat or per-user)."},"cadence":{"allOf":[{"$ref":"#/components/schemas/PlanInterval"}],"description":"Cadence for billing (day, week, month, year)."},"unit_amount":{"description":"Amount in USD.","format":"double","type":"number"}},"required":["billing_model","cadence","unit_amount"],"type":"object"},"PrivacySettings":{"description":"Privacy settings for an org or user.","properties":{"can_train_on_data":{"description":"If we can train on the data. If the user is a member of an organization, the organization's setting will override this. The organization's setting takes priority.","type":"boolean"}},"required":["can_train_on_data"],"type":"object"},"ProjectEntityToPlane":{"description":"The response from the `ProjectEntityToPlane` command.","properties":{"projected_points":{"description":"Projected points.","items":{"$ref":"#/components/schemas/Point3d"},"type":"array"}},"required":["projected_points"],"type":"object"},"ProjectPointsToPlane":{"description":"The response from the `ProjectPointsToPlane` command.","properties":{"projected_points":{"description":"Projected points.","items":{"$ref":"#/components/schemas/Point3d"},"type":"array"}},"required":["projected_points"],"type":"object"},"PublicEmailMarketingConsentRequest":{"description":"The data for subscribing a user to the newsletter.","properties":{"email":{"description":"The email","format":"email","type":"string"}},"required":["email"],"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"},"ReasoningMessage":{"description":"A message containing reasoning information.","oneOf":[{"description":"Plain text reasoning.","properties":{"content":{"description":"The content of the reasoning.","type":"string"},"type":{"enum":["text"],"type":"string"}},"required":["content","type"],"type":"object"},{"description":"Markdown formatted reasoning.","properties":{"content":{"description":"The content of the reasoning.","type":"string"},"type":{"enum":["markdown"],"type":"string"}},"required":["content","type"],"type":"object"},{"description":"Reasoning that contains the KCL docs relevant to the reasoning.","properties":{"content":{"description":"The content of the reasoning.","type":"string"},"type":{"enum":["kcl_docs"],"type":"string"}},"required":["content","type"],"type":"object"},{"description":"Reasoning that contains the KCL code examples relevant to the reasoning.","properties":{"content":{"description":"The content of the reasoning.","type":"string"},"type":{"enum":["kcl_code_examples"],"type":"string"}},"required":["content","type"],"type":"object"},{"description":"Reasoning that contains a feature tree outline.","properties":{"content":{"description":"The content of the reasoning.","type":"string"},"type":{"enum":["feature_tree_outline"],"type":"string"}},"required":["content","type"],"type":"object"},{"description":"Reasoning that contains a design plan with steps.","properties":{"steps":{"description":"The steps in the design plan.","items":{"$ref":"#/components/schemas/PlanStep"},"type":"array"},"type":{"enum":["design_plan"],"type":"string"}},"required":["steps","type"],"type":"object"},{"description":"Reasoning that contains potential KCL code, this code has not been executed yet. It might not even compile or be valid KCL code.","properties":{"code":{"description":"The content of the reasoning.","type":"string"},"type":{"enum":["generated_kcl_code"],"type":"string"}},"required":["code","type"],"type":"object"},{"description":"Reasoning containing an error message from executing the KCL code.","properties":{"error":{"description":"The error message.","type":"string"},"type":{"enum":["kcl_code_error"],"type":"string"}},"required":["error","type"],"type":"object"},{"description":"A KCL file that is being created by the AI. This might contain invalid KCL code.","properties":{"content":{"description":"The content of the file.","type":"string"},"file_name":{"description":"The file name.","type":"string"},"type":{"enum":["created_kcl_file"],"type":"string"}},"required":["content","file_name","type"],"type":"object"},{"description":"A KCL file that is being updated by the AI. This might contain invalid KCL code.","properties":{"content":{"description":"The content of the file.","type":"string"},"file_name":{"description":"The file name.","type":"string"},"type":{"enum":["updated_kcl_file"],"type":"string"}},"required":["content","file_name","type"],"type":"object"},{"description":"A KCL file that is being deleted by the AI.","properties":{"file_name":{"description":"The file name.","type":"string"},"type":{"enum":["deleted_kcl_file"],"type":"string"}},"required":["file_name","type"],"type":"object"}]},"ReconfigureStream":{"description":"The response from the `ReconfigureStream` endpoint.","type":"object"},"RegionGetQueryPoint":{"description":"The response from 'RegionGetQueryPoint' modeling command.","properties":{"query_point":{"allOf":[{"$ref":"#/components/schemas/Point2d"}],"description":"A point that is inside of the queried region, in the same coordinate frame as the sketch itself"}},"required":["query_point"],"type":"object"},"RelativeTo":{"description":"What is the given geometry relative to?","oneOf":[{"description":"Local/relative to a position centered within the plane being sketched on","enum":["sketch_plane"],"type":"string"},{"description":"Local/relative to the trajectory curve","enum":["trajectory_curve"],"type":"string"}]},"RemoveSceneObjects":{"description":"The response from the `RemoveSceneObjects` endpoint.","type":"object"},"Revolve":{"description":"The response from the `Revolve` endpoint.","type":"object"},"RevolveAboutEdge":{"description":"The response from the `RevolveAboutEdge` endpoint.","type":"object"},"Rotation":{"description":"A rotation defined by an axis, origin of rotation, and an angle.","properties":{"angle":{"allOf":[{"$ref":"#/components/schemas/Angle"}],"description":"Rotate this far about the rotation axis. Defaults to zero (i.e. no rotation)."},"axis":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"Rotation axis. Defaults to (0, 0, 1) (i.e. the Z axis)."},"origin":{"allOf":[{"$ref":"#/components/schemas/OriginType"}],"description":"Origin of the rotation. If one isn't provided, the object will rotate about its own bounding box center."}},"required":["angle","axis","origin"],"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"},"SalesInquiryType":{"description":"The type of sales inquiry for website sales forms.","oneOf":[{"description":"Inquiries related to pilots (on the enterprise page).","enum":["pilot_inquiry"],"type":"string"},{"description":"General inquiry about the service or product.","enum":["general_inquiry"],"type":"string"},{"description":"Questions related to sales or purchasing.","enum":["sales_question"],"type":"string"},{"description":"Inquiry from a developer, typically technical in nature.","enum":["developer_inquiry"],"type":"string"},{"description":"Opportunity for partnership or collaboration.","enum":["partnership_opportunity"],"type":"string"},{"description":"Other inquiries related to sales that do not fit predefined categories.","enum":["other_sales_inquiry"],"type":"string"}]},"SamlIdentityProvider":{"description":"A SAML identity provider.","properties":{"acs_url":{"description":"The ACS (Assertion Consumer Service) URL.","format":"uri","title":"String","type":"string"},"created_at":{"description":"The date and time the SAML identity provider was created.","format":"date-time","title":"DateTime","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the SAML identity provider."},"idp_entity_id":{"description":"The entity ID of the SAML identity provider.","type":"string"},"idp_metadata_document_string":{"description":"The metadata document as a string.","type":"string"},"org_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The organization ID the SAML identity provider belongs to."},"private_key":{"description":"The private key for the SAML identity provider. This is the PEM corresponding to the X509 pair.","format":"byte","nullable":true,"title":"String","type":"string"},"public_cert":{"description":"The public certificate for the SAML identity provider. This is the PEM corresponding to the X509 pair.","format":"byte","nullable":true,"title":"String","type":"string"},"slo_url":{"description":"The SLO (Single Logout) URL.","format":"uri","title":"String","type":"string"},"technical_contact_email":{"description":"The technical contact email address for the SAML identity provider.","format":"email","type":"string"},"updated_at":{"description":"The date and time the SAML identity provider was last updated.","format":"date-time","title":"DateTime","type":"string"}},"required":["acs_url","created_at","id","org_id","slo_url","updated_at"],"type":"object"},"SamlIdentityProviderCreate":{"description":"Parameters for creating a SAML identity provider.","properties":{"idp_entity_id":{"description":"The entity ID of the SAML identity provider.","type":"string"},"idp_metadata_source":{"allOf":[{"$ref":"#/components/schemas/IdpMetadataSource"}],"description":"The source of an identity provider metadata descriptor."},"signing_keypair":{"allOf":[{"$ref":"#/components/schemas/DerEncodedKeyPair"}],"default":null,"description":"The request signing key pair.","nullable":true},"technical_contact_email":{"description":"The technical contact email address for the SAML identity provider.","format":"email","type":"string"}},"required":["idp_metadata_source"],"type":"object"},"SceneClearAll":{"description":"The response from the `SceneClearAll` endpoint.","type":"object"},"SceneGetEntityIds":{"description":"The response from the `SceneGetEntityIds` command.","properties":{"entity_ids":{"description":"The ids of the requested entities.","items":{"items":{"format":"uuid","type":"string"},"type":"array"},"type":"array"}},"required":["entity_ids"],"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"},"SelectAdd":{"description":"The response from the `SelectAdd` endpoint.","type":"object"},"SelectClear":{"description":"The response from the `SelectClear` endpoint.","type":"object"},"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"},"SelectRegionFromPoint":{"description":"The response from the 'SelectRegionFromPoint'. If there are multiple ways to construct this region, this chooses arbitrarily.","properties":{"region":{"allOf":[{"$ref":"#/components/schemas/SelectedRegion"}],"description":"The region the user clicked on. If they clicked an open space which isn't a region, this returns None.","nullable":true}},"type":"object"},"SelectRemove":{"description":"The response from the `SelectRemove` endpoint.","type":"object"},"SelectReplace":{"description":"The response from the `SelectReplace` endpoint.","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"},"SelectedRegion":{"description":"The region a user clicked on.","properties":{"curve_clockwise":{"default":false,"description":"By default (when this is false), curve counterclockwise at intersections. If this is true, instead curve clockwise.","type":"boolean"},"intersection_index":{"default":-1,"description":"At which intersection between `segment` and `intersection_segment` should we stop following the `segment` and start following `intersection_segment`? Defaults to -1, which means the last intersection.","format":"int32","type":"integer"},"intersection_segment":{"description":"Second segment to follow to find the region. Intersects the first segment.","format":"uuid","type":"string"},"segment":{"description":"First segment to follow to find the region.","format":"uuid","type":"string"}},"required":["intersection_segment","segment"],"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"}]},"SendObject":{"description":"The response from the `SendObject` endpoint.","type":"object"},"ServiceAccount":{"description":"A service account.\n\nThese are used to authenticate orgs with Bearer authentication.\n\nThis works just like an API token, but it is tied to an organization versus an individual user.","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"},"label":{"description":"An optional label for the API token.","nullable":true,"type":"string"},"org_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The ID of the organization that owns the API token."},"token":{"allOf":[{"$ref":"#/components/schemas/ServiceAccountUuid"}],"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"}},"required":["created_at","id","is_valid","org_id","token","updated_at"],"type":"object"},"ServiceAccountResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/ServiceAccount"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"ServiceAccountUuid":{"description":"An auth token. A uuid with a prefix of svc-","type":"string"},"Session":{"description":"An authentication session.","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/SessionUuid"}],"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"},"SessionUuid":{"description":"An auth token. A uuid with a prefix of ses-","type":"string"},"SetBackgroundColor":{"description":"The response from the `SetBackgroundColor` endpoint.","type":"object"},"SetCurrentToolProperties":{"description":"The response from the `SetCurrentToolProperties` endpoint.","type":"object"},"SetDefaultSystemProperties":{"description":"The response from the `SetDefaultSystemProperties` endpoint.","type":"object"},"SetGridAutoScale":{"description":"The response from the 'SetGridScale'.","type":"object"},"SetGridReferencePlane":{"description":"The response from the 'SetGridReferencePlane'.","type":"object"},"SetGridScale":{"description":"The response from the 'SetGridScale'.","type":"object"},"SetObjectTransform":{"description":"The response from the `SetObjectTransform` command.","type":"object"},"SetOrderIndependentTransparency":{"description":"The response from the 'SetOrderIndependentTransparency'.","properties":{"enabled":{"description":"Is it now enabled, or disabled?","type":"boolean"}},"required":["enabled"],"type":"object"},"SetSceneUnits":{"description":"The response from the `SetSceneUnits` endpoint.","type":"object"},"SetSelectionFilter":{"description":"The response from the `SetSelectionFilter` endpoint.","type":"object"},"SetSelectionType":{"description":"The response from the `SetSelectionType` endpoint.","type":"object"},"SetTool":{"description":"The response from the `SetTool` endpoint.","type":"object"},"Shortlink":{"description":"A short url.","properties":{"created_at":{"description":"The date and time the shortlink was created.","format":"date-time","title":"DateTime","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the shortlink."},"key":{"description":"The key of the shortlink. This is the short part of the URL.","type":"string"},"org_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The organization ID of the shortlink.","nullable":true},"password_hash":{"description":"The hash of the password for the shortlink.","nullable":true,"type":"string"},"restrict_to_org":{"default":false,"description":"If the shortlink should be restricted to the organization. This only applies to org shortlinks. If you are creating a user shortlink and you are not a member of a team or enterprise and you try to set this to true, it will fail.","type":"boolean"},"updated_at":{"description":"The date and time the shortlink was last updated.","format":"date-time","title":"DateTime","type":"string"},"user_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The ID of the user that made the shortlink."},"value":{"description":"The URL the shortlink redirects to.","format":"uri","title":"String","type":"string"}},"required":["created_at","id","key","updated_at","user_id","value"],"type":"object"},"ShortlinkResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/Shortlink"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"SideFace":{"description":"IDs for a side face, extruded from the path of some sketch/2D shape.","properties":{"face_id":{"description":"Desired ID for the resulting face.","format":"uuid","type":"string"},"path_id":{"description":"ID of the path this face is being extruded from.","format":"uuid","type":"string"}},"required":["face_id","path_id"],"type":"object"},"SketchModeDisable":{"description":"The response from the `SketchModeDisable` endpoint.","type":"object"},"Solid2dAddHole":{"description":"The response from the `Solid2dAddHole` endpoint.","type":"object"},"Solid3dCutEdges":{"description":"The response from the `Solid3dCutEdges` endpoint.","type":"object"},"Solid3dFilletEdge":{"description":"The response from the `Solid3dFilletEdge` endpoint.","type":"object"},"Solid3dFlip":{"description":"The response from the `Solid3dFlip` command.","type":"object"},"Solid3dFlipFace":{"description":"The response from the `Solid3dFlipFace` command.","type":"object"},"Solid3dGetAdjacencyInfo":{"description":"Extrusion face info struct (useful for maintaining mappings between source path segment ids and extrusion faces) This includes the opposite and adjacent faces and edges.","properties":{"edges":{"description":"Details of each edge.","items":{"$ref":"#/components/schemas/AdjacencyInfo"},"type":"array"}},"required":["edges"],"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"},"Solid3dGetBodyType":{"description":"The response from the `Solid3dGetBodyType` endpoint.","properties":{"body_type":{"allOf":[{"$ref":"#/components/schemas/BodyType"}],"description":"The body type"}},"required":["body_type"],"type":"object"},"Solid3dGetCommonEdge":{"description":"The response from the `Solid3DGetCommonEdge` command.","properties":{"edge":{"description":"The UUID of the common edge, if any.","format":"uuid","nullable":true,"type":"string"}},"type":"object"},"Solid3dGetEdgeUuid":{"description":"The response from the `Solid3dGetEdgeUuid` endpoint.","properties":{"edge_id":{"description":"The UUID of the edge.","format":"uuid","type":"string"}},"required":["edge_id"],"type":"object"},"Solid3dGetExtrusionFaceInfo":{"description":"Extrusion face info struct (useful for maintaining mappings between source path segment ids and extrusion faces)","properties":{"faces":{"description":"Details of each face.","items":{"$ref":"#/components/schemas/ExtrusionFaceInfo"},"type":"array"}},"required":["faces"],"type":"object"},"Solid3dGetFaceUuid":{"description":"The response from the `Solid3dGetFaceUuid` endpoint.","properties":{"face_id":{"description":"The UUID of the face.","format":"uuid","type":"string"}},"required":["face_id"],"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"},"Solid3dJoin":{"description":"The response from the `Solid3dJoin` endpoint.","type":"object"},"Solid3dShellFace":{"description":"The response from the `Solid3dShellFace` endpoint.","type":"object"},"SourcePosition":{"description":"A position in the source code.","properties":{"column":{"description":"The column number.","format":"uint32","minimum":0,"type":"integer"},"line":{"description":"The line number.","format":"uint32","minimum":0,"type":"integer"}},"required":["column","line"],"type":"object"},"SourceRange":{"description":"A source range of code.","properties":{"end":{"allOf":[{"$ref":"#/components/schemas/SourcePosition"}],"description":"The end of the range."},"start":{"allOf":[{"$ref":"#/components/schemas/SourcePosition"}],"description":"The start of the range."}},"required":["end","start"],"type":"object"},"SourceRangePrompt":{"description":"A source range and prompt for a text to CAD iteration.","properties":{"file":{"description":"The name of the file the source range applies to. This is the relative path to the file from the root of the project. This only applies to multi-file iterations.","nullable":true,"type":"string"},"prompt":{"description":"The prompt for the changes.","type":"string"},"range":{"allOf":[{"$ref":"#/components/schemas/SourceRange"}],"description":"The range of the source code to change. If you want to apply the prompt to the whole file, set the start to 0 and the end to the end of the file."}},"required":["prompt","range"],"type":"object"},"StartPath":{"description":"The response from the `StartPath` endpoint.","type":"object"},"StepPresentation":{"description":"Describes the presentation style of the EXPRESS exchange format.","oneOf":[{"description":"Condenses the text to reduce the size of the file.","enum":["compact"],"type":"string"},{"description":"Add extra spaces to make the text more easily readable.\n\nThis is the default setting.","enum":["pretty"],"type":"string"}]},"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"}]},"StorageProvider":{"description":"Storage provider identifier for org datasets.","oneOf":[{"description":"Amazon Simple Storage Service.","enum":["s3"],"type":"string"},{"description":"Zoo-managed dataset storage backed by the API's internal object store.","enum":["zoo_managed"],"type":"string"}]},"StoreCouponParams":{"description":"The parameters for a new store coupon.","properties":{"percent_off":{"description":"The percentage off.","format":"uint32","minimum":0,"type":"integer"}},"required":["percent_off"],"type":"object"},"SubscriptionActionType":{"description":"Indicates which kind of Stripe intent requires customer action during subscription creation.","oneOf":[{"description":"The client secret belongs to a PaymentIntent (initial invoice payment).","enum":["payment_intent"],"type":"string"},{"description":"The client secret belongs to a SetupIntent (trial or setup-only flow).","enum":["setup_intent"],"type":"string"}]},"SubscriptionPlanBillingModel":{"description":"Billing model for a modeling-app plan price.","oneOf":[{"description":"A flat amount charged every interval.","enum":["flat"],"type":"string"},{"description":"A per-seat amount charged every interval.","enum":["per_user"],"type":"string"}]},"SubscriptionPlanPriceRecord":{"description":"Diesel model representing a row in `subscription_plan_prices`.","properties":{"active":{"description":"Whether this price is currently active.","type":"boolean"},"billing_model":{"allOf":[{"$ref":"#/components/schemas/SubscriptionPlanBillingModel"}],"description":"Billing model persisted in the database (`flat`, `per_user`, or `enterprise`)."},"cadence":{"allOf":[{"$ref":"#/components/schemas/PlanInterval"}],"description":"Billing cadence string (for example `month` or `year`)."},"created_at":{"description":"Timestamp when the price row was created.","format":"date-time","title":"DateTime","type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"Unique identifier for the plan price entry."},"stripe_price_id":{"description":"Stripe price identifier, when synchronized.","nullable":true,"type":"string"},"subscription_plan_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"Foreign key referencing the parent plan."},"unit_amount":{"description":"Optional monetary amount associated with the price row.","nullable":true,"pattern":"^-?[0-9]+(\\.[0-9]+)?$","type":"string"},"updated_at":{"description":"Timestamp when the price row was last updated.","format":"date-time","title":"DateTime","type":"string"}},"required":["active","billing_model","cadence","created_at","id","subscription_plan_id","updated_at"],"type":"object"},"SubscriptionTierFeature":{"description":"A subscription tier feature.","properties":{"info":{"description":"Information about the feature.","maxLength":80,"minLength":1,"type":"string"}},"required":["info"],"type":"object"},"SubscriptionTierPrice":{"description":"The price for a subscription tier.","oneOf":[{"description":"A flat price that we publicly list.","properties":{"interval":{"allOf":[{"$ref":"#/components/schemas/PlanInterval"}],"description":"The interval the price is charged."},"price":{"description":"The price.","format":"money-usd","title":"double","type":"number"},"type":{"enum":["flat"],"type":"string"}},"required":["interval","price","type"],"type":"object"},{"description":"A per user price that we publicly list.","properties":{"interval":{"allOf":[{"$ref":"#/components/schemas/PlanInterval"}],"description":"The interval the price is charged."},"price":{"description":"The price.","format":"money-usd","title":"double","type":"number"},"type":{"enum":["per_user"],"type":"string"}},"required":["interval","price","type"],"type":"object"},{"description":"Enterprise: The price is not listed and the user needs to contact sales.","properties":{"type":{"enum":["enterprise"],"type":"string"}},"required":["type"],"type":"object"}]},"SubscriptionTierType":{"description":"An enum representing a subscription tier type.","oneOf":[{"description":"A subscription tier that can be applied to individuals only.","properties":{"type":{"enum":["individual"],"type":"string"}},"required":["type"],"type":"object"},{"description":"An subscription tier that can be applied to organizations only.","properties":{"saml_sso":{"description":"Whether or not the subscription type supports SAML SSO.","type":"boolean"},"type":{"enum":["organization"],"type":"string"}},"required":["saml_sso","type"],"type":"object"}]},"SubscriptionTrainingDataBehavior":{"description":"An enum representing a subscription training data behavior.","oneOf":[{"description":"The data is always used for training and cannot be turned off.","enum":["always"],"type":"string"},{"description":"The data is used for training by default, but can be turned off.","enum":["default_on"],"type":"string"},{"description":"The data is not used for training by default, but can be turned on.","enum":["default_off"],"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"},"SupportInquiryType":{"description":"The type of support inquiry for website support forms.","oneOf":[{"description":"Request for technical support or troubleshooting.","enum":["technical_support"],"type":"string"},{"description":"Questions or requests related to account management.","enum":["account_management"],"type":"string"},{"description":"Other support-related inquiries that do not fit predefined categories.","enum":["other_support_inquiry"],"type":"string"}]},"SupportTier":{"description":"The support tier the subscription provides.","oneOf":[{"description":"Community support.","enum":["community"],"type":"string"},{"description":"Standard email support.","enum":["standard_email"],"type":"string"},{"description":"Priority email support.","enum":["priority_email"],"type":"string"},{"description":"Premium support.","enum":["premium"],"type":"string"}]},"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"},"SurfaceBlend":{"description":"The response from the `SurfaceBlend` endpoint.","type":"object"},"SurfaceEdgeReference":{"description":"An object id, that corresponds to a surface body, and a list of edges of the surface.","properties":{"edges":{"description":"A list of the edge ids that belong to the body.","items":{"$ref":"#/components/schemas/FractionOfEdge"},"type":"array"},"object_id":{"description":"The id of the body.","format":"uuid","type":"string"}},"required":["edges","object_id"],"type":"object"},"Sweep":{"description":"The response from the `Sweep` endpoint.","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":{"code":{"description":"The code for the model. This is optional but will be required in the future once we are at v1.","nullable":true,"type":"string"},"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"conversation_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The conversation ID Conversations group different prompts together."},"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/MlFeedback"}],"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."},"kcl_version":{"description":"The version of kcl requested.","nullable":true,"type":"string"},"model":{"allOf":[{"$ref":"#/components/schemas/TextToCadModel"}],"description":"The model being used."},"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":["conversation_id","created_at","id","model","model_version","output_format","prompt","status","updated_at","user_id"],"type":"object"},"TextToCadCreateBody":{"description":"Body for generating parts from text.","properties":{"kcl_version":{"description":"The version of kcl to use. If empty, the latest version will be used.","nullable":true,"type":"string"},"model_version":{"description":"Zoo provided model, or custom model which should be used to process this request.","nullable":true,"type":"string"},"project_name":{"description":"The project name. This is used to tie the prompt to a project. Which helps us make our models better over time.","nullable":true,"type":"string"},"prompt":{"description":"The prompt for the desired part.","type":"string"}},"required":["prompt"],"type":"object"},"TextToCadIteration":{"description":"A response from a text to CAD iteration.","properties":{"code":{"description":"The code for the new model.","type":"string"},"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"conversation_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The conversation ID Conversations group different prompts together."},"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/MlFeedback"}],"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":{"allOf":[{"$ref":"#/components/schemas/TextToCadModel"}],"description":"The model being used."},"model_version":{"description":"The version of the model.","type":"string"},"original_source_code":{"description":"The original source code for the model, previous to the changes.","type":"string"},"prompt":{"description":"The prompt for the overall changes. This is optional if you only want changes on specific source ranges.","nullable":true,"type":"string"},"source_ranges":{"description":"The source ranges the user suggested to change.","items":{"$ref":"#/components/schemas/SourceRangePrompt"},"type":"array"},"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":["code","conversation_id","created_at","id","model","model_version","original_source_code","source_ranges","status","updated_at","user_id"],"type":"object"},"TextToCadIterationBody":{"description":"Body for generating parts from text.","properties":{"kcl_version":{"description":"The version of kcl to use. If empty, the latest version will be used.","nullable":true,"type":"string"},"original_source_code":{"description":"The source code for the model (in kcl) that is to be edited.","type":"string"},"project_name":{"description":"The project name. This is used to tie the prompt to a project. Which helps us make our models better over time.","nullable":true,"type":"string"},"prompt":{"description":"The prompt for the model, if not using source ranges.","nullable":true,"type":"string"},"source_ranges":{"description":"The source ranges the user suggested to change. If empty, the prompt will be used and is required.","items":{"$ref":"#/components/schemas/SourceRangePrompt"},"type":"array"}},"required":["original_source_code","source_ranges"],"type":"object"},"TextToCadModel":{"description":"A type of Text-to-CAD model.","oneOf":[{"description":"CAD.","enum":["cad"],"type":"string"},{"description":"KCL.","enum":["kcl"],"type":"string"},{"description":"KCL iteration.","enum":["kcl_iteration"],"type":"string"}]},"TextToCadMultiFileIteration":{"description":"A response from a text to CAD multi-file iteration.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"conversation_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The conversation ID Conversations group different prompts together."},"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/MlFeedback"}],"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."},"kcl_version":{"description":"The version of kcl to use. If empty, the latest version will be used.","nullable":true,"type":"string"},"model":{"allOf":[{"$ref":"#/components/schemas/TextToCadModel"}],"description":"The model being used."},"model_version":{"description":"The version of the model.","type":"string"},"outputs":{"additionalProperties":{"type":"string"},"description":"The output files. Returns a map of the file name to the file contents. The file contents are not encoded since kcl files are not binary.","type":"object"},"project_name":{"description":"The project name. This is used to tie the prompt to a project. Which helps us make our models better over time.","nullable":true,"type":"string"},"prompt":{"description":"The prompt for the overall changes. This is optional if you only want changes on specific source ranges. This will apply to all the files.","nullable":true,"type":"string"},"source_ranges":{"description":"The source ranges the user suggested to change.","items":{"$ref":"#/components/schemas/SourceRangePrompt"},"type":"array"},"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":["conversation_id","created_at","id","model","model_version","source_ranges","status","updated_at","user_id"],"type":"object"},"TextToCadMultiFileIterationBody":{"description":"Body for iterating on models from text prompts.","properties":{"conversation_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The conversation ID Conversations group different prompts together. This should be omitted when starting a new conversation. The conversation_id returned in the response should be used to link future messages in the same conversation.","nullable":true},"kcl_version":{"description":"The version of kcl to use. If empty, the latest version will be used.","nullable":true,"type":"string"},"project_name":{"description":"The project name. This is used to tie the prompt to a project. Which helps us make our models better over time.","nullable":true,"type":"string"},"prompt":{"description":"The prompt for the overall changes. This is optional if you only want changes on specific source ranges. This will apply to all the files. If you want to apply a prompt to just a single file, use the source_ranges field and you can leave this empty.","nullable":true,"type":"string"},"source_ranges":{"description":"The source ranges the user suggested to change. If empty, the prompt will be used and is required.","items":{"$ref":"#/components/schemas/SourceRangePrompt"},"type":"array"}},"type":"object"},"TextToCadResponse":{"description":"Type that encompasses all Text-to-CAD response types, including iteration and multi-file iteration.","oneOf":[{"description":"A response from a text to CAD prompt.","properties":{"code":{"description":"The code for the model. This is optional but will be required in the future once we are at v1.","nullable":true,"type":"string"},"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"conversation_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The conversation ID Conversations group different prompts together."},"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/MlFeedback"}],"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."},"kcl_version":{"description":"The version of kcl requested.","nullable":true,"type":"string"},"model":{"allOf":[{"$ref":"#/components/schemas/TextToCadModel"}],"description":"The model being used."},"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":["conversation_id","created_at","id","model","model_version","output_format","prompt","status","type","updated_at","user_id"],"type":"object"},{"description":"A response from a text to CAD iteration.","properties":{"code":{"description":"The code for the new model.","type":"string"},"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"conversation_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The conversation ID Conversations group different prompts together."},"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/MlFeedback"}],"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":{"allOf":[{"$ref":"#/components/schemas/TextToCadModel"}],"description":"The model being used."},"model_version":{"description":"The version of the model.","type":"string"},"original_source_code":{"description":"The original source code for the model, previous to the changes.","type":"string"},"prompt":{"description":"The prompt for the overall changes. This is optional if you only want changes on specific source ranges.","nullable":true,"type":"string"},"source_ranges":{"description":"The source ranges the user suggested to change.","items":{"$ref":"#/components/schemas/SourceRangePrompt"},"type":"array"},"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_iteration"],"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":["code","conversation_id","created_at","id","model","model_version","original_source_code","source_ranges","status","type","updated_at","user_id"],"type":"object"},{"description":"A response from a text to CAD multi-file iteration.","properties":{"completed_at":{"description":"The time and date the API call was completed.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"conversation_id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The conversation ID Conversations group different prompts together."},"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/MlFeedback"}],"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."},"kcl_version":{"description":"The version of kcl to use. If empty, the latest version will be used.","nullable":true,"type":"string"},"model":{"allOf":[{"$ref":"#/components/schemas/TextToCadModel"}],"description":"The model being used."},"model_version":{"description":"The version of the model.","type":"string"},"outputs":{"additionalProperties":{"type":"string"},"description":"The output files. Returns a map of the file name to the file contents. The file contents are not encoded since kcl files are not binary.","type":"object"},"project_name":{"description":"The project name. This is used to tie the prompt to a project. Which helps us make our models better over time.","nullable":true,"type":"string"},"prompt":{"description":"The prompt for the overall changes. This is optional if you only want changes on specific source ranges. This will apply to all the files.","nullable":true,"type":"string"},"source_ranges":{"description":"The source ranges the user suggested to change.","items":{"$ref":"#/components/schemas/SourceRangePrompt"},"type":"array"},"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_multi_file_iteration"],"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":["conversation_id","created_at","id","model","model_version","source_ranges","status","type","updated_at","user_id"],"type":"object"}]},"TextToCadResponseResultsPage":{"description":"A single page of results","properties":{"items":{"description":"list of items on this page of results","items":{"$ref":"#/components/schemas/TextToCadResponse"},"type":"array"},"next_page":{"description":"token used to fetch the next page of results (if any)","nullable":true,"type":"string"}},"required":["items"],"type":"object"},"TokenRevokeRequestForm":{"description":"The request parameters for the OAuth 2.0 token revocation flow.","properties":{"client_id":{"description":"The client ID.","format":"uuid","type":"string"},"client_secret":{"description":"The client secret.","nullable":true,"type":"string"},"token":{"allOf":[{"$ref":"#/components/schemas/DeviceAccessTokenUuid"}],"description":"The token to revoke."}},"required":["client_id","token"],"type":"object"},"Transform":{"description":"Ways to transform each solid being replicated in a repeating pattern.","properties":{"replicate":{"default":true,"description":"Whether to replicate the original solid in this instance.","type":"boolean"},"rotation":{"allOf":[{"$ref":"#/components/schemas/Rotation"}],"default":{"angle":{"unit":"degrees","value":0.0},"axis":{"x":0.0,"y":0.0,"z":1.0},"origin":{"type":"local"}},"description":"Rotate the replica about the specified rotation axis and origin. Defaults to no rotation."},"scale":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"default":{"x":1.0,"y":1.0,"z":1.0},"description":"Scale the replica's size along each axis. Defaults to (1, 1, 1) (i.e. the same size as the original)."},"translate":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"default":{"x":0.0,"y":0.0,"z":0.0},"description":"Translate the replica this far along each dimension. Defaults to zero vector (i.e. same position as the original)."}},"type":"object"},"TransformByForPoint3d":{"description":"How a property of an object should be transformed.","properties":{"origin":{"allOf":[{"$ref":"#/components/schemas/OriginType"}],"default":{"type":"local"},"description":"What to use as the origin for the transformation."},"property":{"allOf":[{"$ref":"#/components/schemas/Point3d"}],"description":"The scale, or rotation, or translation."},"set":{"description":"If true, overwrite the previous value with this. If false, the previous value will be modified. E.g. when translating, `set=true` will set a new location, and `set=false` will translate the current location by the given X/Y/Z.","type":"boolean"}},"required":["property","set"],"type":"object"},"TransformByForPoint4d":{"description":"How a property of an object should be transformed.","properties":{"origin":{"allOf":[{"$ref":"#/components/schemas/OriginType"}],"default":{"type":"local"},"description":"What to use as the origin for the transformation."},"property":{"allOf":[{"$ref":"#/components/schemas/Point4d"}],"description":"The scale, or rotation, or translation."},"set":{"description":"If true, overwrite the previous value with this. If false, the previous value will be modified. E.g. when translating, `set=true` will set a new location, and `set=false` will translate the current location by the given X/Y/Z.","type":"boolean"}},"required":["property","set"],"type":"object"},"TwistExtrude":{"description":"The response from the `TwistExtrude` endpoint.","type":"object"},"UnitAngle":{"description":"The valid types of angle formats.","oneOf":[{"description":"Degrees ","enum":["degrees"],"type":"string"},{"description":"Radians ","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 ","enum":["cm2"],"type":"string"},{"description":"Square decimeters ","enum":["dm2"],"type":"string"},{"description":"Square feet ","enum":["ft2"],"type":"string"},{"description":"Square inches ","enum":["in2"],"type":"string"},{"description":"Square kilometers ","enum":["km2"],"type":"string"},{"description":"Square meters ","enum":["m2"],"type":"string"},{"description":"Square millimeters ","enum":["mm2"],"type":"string"},{"description":"Square yards ","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 ","enum":["amperes"],"type":"string"},{"description":"Microamperes ","enum":["microamperes"],"type":"string"},{"description":"Milliamperes ","enum":["milliamperes"],"type":"string"},{"description":"Nanoamperes ","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) ","enum":["btu"],"type":"string"},{"description":"Electron Volts (eV) ","enum":["electronvolts"],"type":"string"},{"description":"Joules (or watt-seconds) ","enum":["joules"],"type":"string"},{"description":"Kilocalories (often just called calories) ","enum":["kilocalories"],"type":"string"},{"description":"Kilowatt hours (kWh) ","enum":["kilowatt_hours"],"type":"string"},{"description":"Watt hours (Wh) ","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 ","enum":["dynes"],"type":"string"},{"description":"Kiloponds ","enum":["kiloponds"],"type":"string"},{"description":"Micronewtons ","enum":["micronewtons"],"type":"string"},{"description":"Millinewtons ","enum":["millinewtons"],"type":"string"},{"description":"Newtons ","enum":["newtons"],"type":"string"},{"description":"Poundals ","enum":["poundals"],"type":"string"},{"description":"Pounds ","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 ","enum":["gigahertz"],"type":"string"},{"description":"Hertz ","enum":["hertz"],"type":"string"},{"description":"Kilohertz ","enum":["kilohertz"],"type":"string"},{"description":"Megahertz ","enum":["megahertz"],"type":"string"},{"description":"Microhertz ","enum":["microhertz"],"type":"string"},{"description":"Millihertz ","enum":["millihertz"],"type":"string"},{"description":"Nanohertz ","enum":["nanohertz"],"type":"string"},{"description":"Terahertz ","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 ","enum":["cm"],"type":"string"},{"description":"Feet ","enum":["ft"],"type":"string"},{"description":"Inches ","enum":["in"],"type":"string"},{"description":"Meters ","enum":["m"],"type":"string"},{"description":"Millimeters ","enum":["mm"],"type":"string"},{"description":"Yards ","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 ","enum":["g"],"type":"string"},{"description":"Kilograms ","enum":["kg"],"type":"string"},{"description":"Pounds ","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 ","enum":["btu_per_minute"],"type":"string"},{"description":"Horsepower (hp) ","enum":["horsepower"],"type":"string"},{"description":"Kilowatts ","enum":["kilowatts"],"type":"string"},{"description":"Metric horsepower (PS) ","enum":["metric_horsepower"],"type":"string"},{"description":"Microwatts ","enum":["microwatts"],"type":"string"},{"description":"Millwatts ","enum":["milliwatts"],"type":"string"},{"description":"Watts ","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 ","enum":["atmospheres"],"type":"string"},{"description":"Bars ","enum":["bars"],"type":"string"},{"description":"Hectopascals ","enum":["hectopascals"],"type":"string"},{"description":"Kilopascals ","enum":["kilopascals"],"type":"string"},{"description":"Millibars ","enum":["millibars"],"type":"string"},{"description":"Pascals ","enum":["pascals"],"type":"string"},{"description":"Pounds per square inch (PSI) - ","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 ","enum":["celsius"],"type":"string"},{"description":"Fahrenheit ","enum":["fahrenheit"],"type":"string"},{"description":"Kelvin ","enum":["kelvin"],"type":"string"},{"description":"Rankine ","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 ","enum":["newton_metres"],"type":"string"},{"description":"Pound foot ","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³) ","enum":["cm3"],"type":"string"},{"description":"Cubic feet (ft³) ","enum":["ft3"],"type":"string"},{"description":"Cubic inches (cu in or in³) ","enum":["in3"],"type":"string"},{"description":"Cubic meters (m³) ","enum":["m3"],"type":"string"},{"description":"Cubic yards (yd³) ","enum":["yd3"],"type":"string"},{"description":"US Fluid Ounces (fl oz) ","enum":["usfloz"],"type":"string"},{"description":"US Gallons (gal US) ","enum":["usgal"],"type":"string"},{"description":"Liters (l) ","enum":["l"],"type":"string"},{"description":"Milliliters (ml) ","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"},"UpdateAnnotation":{"description":"The response from the `UpdateAnnotation` endpoint.","type":"object"},"UpdateCustomModel":{"description":"Body for updating a custom ML model.","properties":{"name":{"description":"The model's display name.","nullable":true,"type":"string"},"system_prompt":{"description":"The model's system prompt.","nullable":true,"type":"string"}},"type":"object"},"UpdateMemberToOrgBody":{"description":"Data for updating a member of an org.","properties":{"role":{"allOf":[{"$ref":"#/components/schemas/UserOrgRole"}],"description":"The organization role to give the user."}},"required":["role"],"type":"object"},"UpdateOrgDataset":{"description":"Payload for updating an org dataset.","properties":{"name":{"description":"Optional new display name.","nullable":true,"type":"string"},"source":{"allOf":[{"$ref":"#/components/schemas/UpdateOrgDatasetSource"}],"description":"Optional storage connection overrides.","nullable":true}},"type":"object"},"UpdateOrgDatasetSource":{"description":"Partial update payload for dataset storage details.","properties":{"access_role_arn":{"description":"Updated identity Zoo should assume when reading the dataset.","nullable":true,"type":"string"},"provider":{"allOf":[{"$ref":"#/components/schemas/StorageProvider"}],"description":"Updated storage provider identifier.","nullable":true},"uri":{"description":"Updated fully-qualified URI for the dataset contents.","nullable":true,"type":"string"}},"type":"object"},"UpdatePaymentBalance":{"description":"Payload for updating a user's balance.","properties":{"monthly_api_credits_remaining_monetary_value":{"description":"The monetary value of the monthy API credits remaining in the balance. This gets re-upped every month,","format":"money-usd","nullable":true,"title":"double","type":"number"},"stable_api_credits_remaining_monetary_value":{"description":"The monetary value of stable API credits remaining in the balance. These do not get reset or re-upped every month. This is separate from the monthly credits. Credits will first pull from the monthly credits, then the stable credits. Stable just means that they do not get reset every month. A user will have stable credits if a Zoo employee granted them credits.","format":"money-usd","nullable":true,"title":"double","type":"number"}},"type":"object"},"UpdateShortlinkRequest":{"description":"Request to update a shortlink.","properties":{"password":{"description":"The password for the shortlink, if you want to restrict access to it. This can only be set if your subscription allows for it. Otherwise, it will return an error. When you access the link it will be required to enter this password through basic auth. The username will be `{anything}` and the password will be the password you set here.","nullable":true,"type":"string"},"restrict_to_org":{"description":"If the shortlink should be restricted to the user's organization to view. This only applies to org shortlinks. If you are creating a user shortlink and you are not a member of a team or enterprise and you try to set this to true, it will fail.","type":"boolean"}},"required":["restrict_to_org"],"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"},"image":{"description":"The image URL for the user. NOTE: If the user uses an OAuth2 provider, this will be overwritten by the provider's image URL when the user logs in next.","format":"uri","title":"String","type":"string"},"is_onboarded":{"description":"If the user is now onboarded.","nullable":true,"type":"boolean"},"last_name":{"description":"The user's last name.","type":"string"},"phone":{"default":"","description":"The user's phone number.","format":"phone","title":"String","type":"string"}},"required":["image"],"type":"object"},"UploadOrgDatasetFilesResponse":{"description":"Response payload for uploading files into a Zoo-managed dataset.","properties":{"queued_conversions":{"description":"Number of conversion jobs newly queued.","format":"uint","minimum":0,"type":"integer"},"uploaded_files":{"description":"Number of files accepted and stored.","format":"uint","minimum":0,"type":"integer"}},"required":["queued_conversions","uploaded_files"],"type":"object"},"User":{"description":"A user.","properties":{"block":{"allOf":[{"$ref":"#/components/schemas/BlockReason"}],"description":"If the user should be blocked and the reason why.","nullable":true},"can_train_on_data":{"default":false,"description":"If we can train on the user's data. If the user is a member of an organization, the organization's setting will override this.","type":"boolean"},"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"},"deletion_scheduled":{"default":false,"description":"If the user is scheduled for deletion.","type":"boolean"},"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"},"is_onboarded":{"default":false,"description":"If the user has finished onboarding.","type":"boolean"},"is_service_account":{"default":false,"description":"If the user is tied to a service account.","type":"boolean"},"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"},"UserAdminDetails":{"description":"Extra admin-only details for a user.","properties":{"active_api_tokens_count":{"description":"Count of valid API tokens.","format":"int64","type":"integer"},"active_device_tokens_count":{"description":"Count of active (non-expired) device access tokens.","format":"int64","type":"integer"},"active_sessions_count":{"description":"Count of active (non-expired) sessions.","format":"int64","type":"integer"},"address":{"allOf":[{"$ref":"#/components/schemas/Address"}],"description":"Latest billing address stored for the user.","nullable":true},"address_summary":{"description":"Readable billing address summary.","nullable":true,"type":"string"},"block":{"allOf":[{"$ref":"#/components/schemas/BlockReason"}],"description":"Block reason when the user is blocked.","nullable":true},"block_message":{"description":"Human-friendly block reason message.","nullable":true,"type":"string"},"cad_user_info":{"allOf":[{"$ref":"#/components/schemas/UserCadInfoAdminDetails"}],"description":"CAD user info collected from website onboarding/CRM form.","nullable":true},"payment_methods":{"description":"Known payment methods on file.","items":{"$ref":"#/components/schemas/PaymentMethod"},"type":"array"},"payment_methods_summary":{"description":"Summaries of the known payment methods.","items":{"type":"string"},"type":"array"},"stripe_customer_id":{"description":"Stripe customer identifier if one exists.","nullable":true,"type":"string"},"stripe_dashboard_url":{"description":"Direct link to the Stripe customer dashboard.","nullable":true,"type":"string"}},"required":["active_api_tokens_count","active_device_tokens_count","active_sessions_count","payment_methods","payment_methods_summary"],"type":"object"},"UserCadInfoAdminDetails":{"description":"CAD user info details for admin surfaces.","properties":{"cad_industry":{"allOf":[{"$ref":"#/components/schemas/CadIndustry"}],"description":"CAD industry selection.","nullable":true},"cad_user_type":{"allOf":[{"$ref":"#/components/schemas/CadUserType"}],"description":"CAD user persona/type.","nullable":true},"company_size":{"allOf":[{"$ref":"#/components/schemas/CompanySize"}],"description":"Company size selection.","nullable":true},"how_did_you_find_us":{"allOf":[{"$ref":"#/components/schemas/CadDiscoverySource"}],"description":"Acquisition source selection.","nullable":true},"how_did_you_find_us_other":{"description":"Free-text acquisition source when `other` was selected.","nullable":true,"type":"string"},"number_of_cad_users":{"description":"Number of CAD users.","nullable":true,"type":"string"}},"type":"object"},"UserFeature":{"enum":["proprietary_to_kcl_conversion_beta","new_sketch_mode"],"type":"string"},"UserFeatureEntry":{"description":"Enabled features surfaced to end users.","properties":{"id":{"allOf":[{"$ref":"#/components/schemas/UserFeature"}],"description":"Stable identifier for the feature flag (snake_case)."}},"required":["id"],"type":"object"},"UserFeatureList":{"description":"User features response payload.","properties":{"features":{"description":"Features that are active and safe to expose to the current user.","items":{"$ref":"#/components/schemas/UserFeatureEntry"},"type":"array"}},"required":["features"],"type":"object"},"UserIdentifier":{"type":"string"},"UserOrgInfo":{"description":"A user's information about an org, including their role.","properties":{"allow_users_in_domain_to_auto_join":{"description":"If we should allow all future users who are created with email addresses from this domain to join the org.","nullable":true,"type":"boolean"},"billing_email":{"description":"The billing email address of the org.","format":"email","type":"string"},"billing_email_verified":{"description":"The date and time the billing email address was verified.","format":"date-time","nullable":true,"title":"DateTime","type":"string"},"block":{"allOf":[{"$ref":"#/components/schemas/BlockReason"}],"description":"If the org should be blocked and the reason why.","nullable":true},"created_at":{"description":"The date and time the org was created.","format":"date-time","title":"DateTime","type":"string"},"domain":{"description":"The org's domain.","nullable":true,"type":"string"},"id":{"allOf":[{"$ref":"#/components/schemas/Uuid"}],"description":"The unique identifier for the org."},"image":{"description":"The image for the org. This is a URL.","format":"uri","nullable":true,"title":"String","type":"string"},"name":{"description":"The name of the org.","type":"string"},"phone":{"default":"","description":"The org's phone number.","format":"phone","title":"String","type":"string"},"role":{"allOf":[{"$ref":"#/components/schemas/OrgRole"}],"description":"The user's role in the org."},"stripe_id":{"description":"The org's stripe id.","nullable":true,"type":"string"},"updated_at":{"description":"The date and time the org was last updated.","format":"date-time","title":"DateTime","type":"string"}},"required":["created_at","id","role","updated_at"],"type":"object"},"UserOrgRole":{"description":"The roles for users in an organization.","oneOf":[{"description":"Admins can do anything in the org.","enum":["admin"],"type":"string"},{"description":"Members of an org can not modify an org, but they belong in the org.","enum":["member"],"type":"string"}]},"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"},"VerificationTokenResponse":{"description":"A verification token response.","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.","format":"email","type":"string"},"redirect_url":{"description":"The URL to redirect to if the user requires SAML authentication or belongs somewhere else.","format":"uri","nullable":true,"title":"String","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"},"ViewIsometric":{"description":"The response from the `ViewIsometric` command.","properties":{"settings":{"allOf":[{"$ref":"#/components/schemas/CameraSettings"}],"description":"Camera settings"}},"required":["settings"],"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":{"batch_id":{"allOf":[{"$ref":"#/components/schemas/ModelingCmdId"}],"description":"ID of batch being submitted. Each request has their own individual ModelingCmdId, but this is the ID of the overall batch."},"requests":{"description":"A sequence of modeling requests. If any request fails, following requests will not be tried.","items":{"$ref":"#/components/schemas/ModelingCmdReq"},"type":"array"},"responses":{"default":false,"description":"If false or omitted, responses to each batch command will just be Ok(()). If true, responses will be the actual response data for that modeling command.","type":"boolean"},"type":{"enum":["modeling_cmd_batch_req"],"type":"string"}},"required":["batch_id","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"},{"description":"Return information about the connected instance","properties":{"type":{"enum":["debug"],"type":"string"}},"required":["type"],"type":"object"},{"description":"Authentication header request.","properties":{"headers":{"additionalProperties":{"type":"string"},"description":"The authentication header.","type":"object"},"type":{"enum":["headers"],"type":"string"}},"required":["headers","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."},"WebsiteCadUserInfoForm":{"description":"Request body for authenticated website CAD user info form submissions.","properties":{"cad_industry":{"allOf":[{"$ref":"#/components/schemas/CadIndustry"}],"description":"The industry of the user.","nullable":true},"cad_user_type":{"allOf":[{"$ref":"#/components/schemas/CadUserType"}],"description":"The user type.","nullable":true},"company_size":{"allOf":[{"$ref":"#/components/schemas/CompanySize"}],"description":"Optional company size metadata.","nullable":true},"how_did_you_find_us":{"allOf":[{"$ref":"#/components/schemas/CadDiscoverySource"}],"description":"How the user found Zoo.","nullable":true},"how_did_you_find_us_other":{"description":"Optional free-text value when \"Other\" is selected.","nullable":true,"type":"string"},"number_of_cad_users":{"description":"The number of CAD users.","nullable":true,"type":"string"}},"type":"object"},"WebsiteSalesForm":{"description":"Request body for website sales form submissions.","properties":{"cad_platforms":{"description":"The CAD platforms (used for pilot inquiries).","items":{"type":"string"},"nullable":true,"type":"array"},"company":{"description":"The company name.","nullable":true,"type":"string"},"email":{"description":"The email address of the user.","format":"email","type":"string"},"first_name":{"description":"The first name of the user.","type":"string"},"industry":{"description":"The industry of the user.","nullable":true,"type":"string"},"inquiry_type":{"allOf":[{"$ref":"#/components/schemas/SalesInquiryType"}],"description":"The type of sales inquiry."},"job_title":{"description":"The job title (used for pilot inquiries).","nullable":true,"type":"string"},"last_name":{"description":"The last name of the user.","type":"string"},"message":{"description":"The message content.","type":"string"},"num_cad_users":{"description":"The number of CAD users (used for pilot inquiries).","nullable":true,"type":"string"},"phone":{"description":"The phone number of the user.","nullable":true,"type":"string"}},"required":["email","first_name","inquiry_type","last_name","message"],"type":"object"},"WebsiteSupportForm":{"description":"Request body for website support form submissions.","properties":{"company":{"description":"Optional company metadata.","nullable":true,"type":"string"},"email":{"description":"The email address of the user.","format":"email","type":"string"},"first_name":{"description":"The first name of the user.","type":"string"},"inquiry_type":{"allOf":[{"$ref":"#/components/schemas/SupportInquiryType"}],"description":"The type of support inquiry."},"last_name":{"description":"The last name of the user.","type":"string"},"message":{"description":"The message content.","type":"string"},"phone":{"description":"Optional phone metadata.","nullable":true,"type":"string"}},"required":["email","first_name","inquiry_type","last_name","message"],"type":"object"},"WorldCoordinateSystem":{"enum":["right_handed_up_z","right_handed_up_y"],"type":"string"},"ZooProductSubscription":{"description":"A Zoo product subscription.","oneOf":[{"description":"A subscription to the modeling app.","properties":{"annual_discount":{"description":"Annual discount. The percentage off the monthly price if the user pays annually.","format":"double","nullable":true,"type":"number"},"description":{"description":"A description of the tier.","type":"string"},"display_name":{"default":"","description":"The display name of the tier.","type":"string"},"endpoints_included":{"description":"The Zoo API endpoints that are included when through an approved zoo tool.","items":{"$ref":"#/components/schemas/ApiEndpoint"},"type":"array"},"features":{"description":"Features that are included in the subscription.","items":{"$ref":"#/components/schemas/SubscriptionTierFeature"},"maxItems":15,"minItems":0,"type":"array"},"is_custom_quote":{"default":false,"description":"Indicates whether this plan uses custom-quoted pricing.","type":"boolean"},"ml_custom_models":{"default":false,"description":"Indicates whether the plan enables custom ML models.","type":"boolean"},"monthly_pay_as_you_go_api_credits":{"default":0,"description":"The amount of pay-as-you-go API credits the individual or org gets outside the modeling app per month. This re-ups on the 1st of each month. This is equivalent to the monetary value divided by the price of an API credit.","format":"uint64","minimum":0,"type":"integer"},"monthly_pay_as_you_go_api_credits_monetary_value":{"default":0.0,"description":"The monetary value of pay-as-you-go API credits the individual or org gets outside the modeling app per month. This re-ups on the 1st of each month.","format":"money-usd","title":"double","type":"number"},"name":{"description":"The name of the tier.","type":"string"},"pay_as_you_go_api_credit_price":{"default":0.0,"description":"The price of an API credit.","format":"money-usd","title":"double","type":"number"},"price":{"allOf":[{"$ref":"#/components/schemas/SubscriptionTierPrice"}],"description":"The price of the tier per month. If this is for an individual, this is the price they pay. If this is for an organization, this is the price the organization pays per member in the org. This is in USD."},"share_links":{"description":"The options for sharable links through the modeling app.","items":{"$ref":"#/components/schemas/ModelingAppShareLinks"},"type":"array"},"support_tier":{"allOf":[{"$ref":"#/components/schemas/SupportTier"}],"description":"The support tier the subscription provides."},"training_data_behavior":{"allOf":[{"$ref":"#/components/schemas/SubscriptionTrainingDataBehavior"}],"description":"The behavior of the users data (can it be used for training, etc)."},"type":{"allOf":[{"$ref":"#/components/schemas/SubscriptionTierType"}],"description":"If the tier is offered for an individual or an org."},"zoo_tools_included":{"description":"The Zoo tools that you can call unlimited times with this tier.","items":{"$ref":"#/components/schemas/ZooTool"},"type":"array"}},"required":["description","name","price","support_tier","training_data_behavior","type"],"type":"object"}]},"ZooProductSubscriptions":{"description":"A struct of Zoo product subscriptions.","properties":{"action_client_secret":{"description":"Client secret to complete SCA/3DS for the current subscription change, when applicable.","nullable":true,"type":"string"},"action_type":{"allOf":[{"$ref":"#/components/schemas/SubscriptionActionType"}],"description":"Type of intent associated with `action_client_secret`.","nullable":true},"modeling_app":{"allOf":[{"$ref":"#/components/schemas/ModelingAppSubscriptionTier"}],"description":"A modeling app subscription."}},"required":["modeling_app"],"type":"object"},"ZooProductSubscriptionsOrgRequest":{"description":"A struct of Zoo product subscriptions an organization can request.","properties":{"modeling_app":{"description":"Slug of the modeling app subscription tier requested.","type":"string"},"pay_annually":{"description":"If the customer chooses to pay annually or monthly, we can add that here. The annual discount will apply if there is a discount for the subscription.","nullable":true,"type":"boolean"}},"required":["modeling_app"],"type":"object"},"ZooProductSubscriptionsUserRequest":{"description":"A struct of Zoo product subscriptions a user can request.","properties":{"modeling_app":{"description":"Slug of the modeling app subscription tier requested.","type":"string"},"pay_annually":{"description":"If the customer chooses to pay annually or monthly, we can add that here. The annual discount will apply if there is a discount for the subscription.","nullable":true,"type":"boolean"}},"required":["modeling_app"],"type":"object"},"ZooTool":{"description":"The Zoo tools that can make API calls.","oneOf":[{"description":"The modeling app.","enum":["modeling_app"],"type":"string"},{"description":"The Text-to-CAD UI.","enum":["text_to_cad"],"type":"string"}]},"ZoomToFit":{"description":"The response from the `ZoomToFit` command.","properties":{"settings":{"allOf":[{"$ref":"#/components/schemas/CameraSettings"}],"description":"Camera settings"}},"required":["settings"],"type":"object"}}},"info":{"contact":{"email":"api@zoo.dev","url":"https://zoo.dev"},"description":"API server for Zoo","title":"Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get OpenAPI schema.","tags":["meta"]}},"/_meta/ipinfo":{"get":{"operationId":"get_ipinfo","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpAddrInfo"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get ip address information.","tags":["meta","hidden"]}},"/ai/text-to-cad/{output_format}":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 parts. Any other formats you request here will also be returned when you list your generated parts.\n\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.\n\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`.","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"}},{"description":"If we should output the kcl for the model.","in":"query","name":"kcl","schema":{"nullable":true,"type":"boolean"}}],"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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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":["ml"]}},"/api-call-metrics":{"get":{"description":"This endpoint requires authentication by a Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo user. It returns details of the requested API call for the user.\n\nIf the user is not authenticated to view the specified API call, then it is not returned.\n\nOnly Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo to access user's repos.\n\nThe user doesn't need Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo to access user's repos.\n\nThe user doesn't need Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\nThis endpoint requires authentication by a Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\nThis endpoint requires authentication by any Zoo user. It returns details of the requested async operation for the user.\n\nIf the user is not authenticated to view the specified async operation, then it is not returned.\n\nOnly Zoo 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":{"format":"uuid","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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/api-key":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_auth_api_key","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 returns a session token.","operationId":"auth_api_key","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthApiKeyResponse"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Authenticate using an api-key. This is disabled on production but can be used in dev to login without email magic.","tags":["hidden"]}},"/auth/email":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_auth_email","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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/VerificationTokenResponse"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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-marketing/confirm":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_auth_email_marketing_confirm","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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_marketing_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailMarketingConfirmTokenBody"}}},"required":true},"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Consume a confirmation token and finalize double opt-in.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Listen for callbacks for email authentication for users.","tags":["hidden"]}},"/auth/saml/org/{org_id}/login":{"get":{"description":"Redirects the browser straight to the org’s SAML IdP.","operationId":"get_auth_saml_by_org","parameters":[{"description":"The ID of the organisation that owns the IdP.","in":"path","name":"org_id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}},{"description":"The URL to redirect back to after we have authenticated.","in":"query","name":"callback_url","schema":{"$ref":"#/components/schemas/LenientUrl"}}],"responses":{"302":{"description":"Temporary Redirect","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"GET /auth/saml/{org_id}","tags":["hidden"]}},"/auth/saml/provider/{provider_id}/login":{"get":{"description":"The UI uses this to avoid having to ask the API anything about the IdP. It already knows the SAML IdP ID from the path, so it can just link to this path and rely on the API to redirect to the actual IdP.","operationId":"get_auth_saml","parameters":[{"description":"The ID of the identity provider.","in":"path","name":"provider_id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}},{"description":"The URL to redirect back to after we have authenticated.","in":"query","name":"callback_url","schema":{"$ref":"#/components/schemas/LenientUrl"}}],"responses":{"302":{"description":"Temporary Redirect","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get a redirect straight to the SAML IdP.","tags":["hidden"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_auth_saml","parameters":[{"description":"The ID of the identity provider.","in":"path","name":"provider_id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"operationId":"post_auth_saml","parameters":[{"description":"The ID of the identity provider.","in":"path","name":"provider_id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"requestBody":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"302":{"description":"Temporary Redirect","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Authenticate a user via SAML","tags":["hidden"]}},"/community/sso":{"get":{"operationId":"community_sso","parameters":[{"description":"The signature for the given payload","in":"query","name":"sig","required":true,"schema":{"type":"string"}},{"description":"The nonce and redirect URL sent to us by Discourse","in":"query","name":"sso","required":true,"schema":{"type":"string"}}],"responses":{"302":{"description":"Temporary Redirect","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Authorize an inbound auth request from our Community page.","tags":["meta","hidden"]}},"/debug/uploads":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_debug_uploads","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"Do NOT send files here that you don't want to be public.","operationId":"create_debug_uploads","requestBody":{"content":{"multipart/form-data":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"items":{"format":"uri","type":"string"},"title":"Array_of_Url","type":"array"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Uploads files to public blob storage for debugging purposes.","tags":["meta","hidden"]}},"/events":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_event","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 collect anonymous telemetry data for improving our product.","operationId":"create_event","requestBody":{"content":{"multipart/form-data":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Creates an internal telemetry event.","tags":["meta","hidden"]}},"/file/center-of-mass":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_file_center_of_mass","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\nThis endpoint returns the cartesian coordinate in world space measure units.\n\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.\n\nGet the center of mass of an object in a CAD file. If the file is larger than 25MB, it will be performed asynchronously.\n\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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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"]}},"/file/conversion":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_file_conversion_options","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 takes a HTTP multipart body with these fields in any order:\n\n - The input and output format options (as JSON), name is 'body'. - The files to convert, in raw binary. Must supply filenames.\n\nThis starts a conversion job and returns the `id` of the operation. 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_options","requestBody":{"content":{"multipart/form-data":{"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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Convert CAD file from one format to another.","tags":["file"]}},"/file/conversion/{src_format}/{output_format}":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\nConvert a CAD file from one format to another. If the file being converted is larger than 25MB, it will be performed asynchronously.\n\nIf the conversion is performed synchronously, the contents of the converted file (`output`) will be returned as a base64 encoded string.\n\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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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_file_density","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\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.\n\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.\n\nGet the density of an object in a CAD file. If the file is larger than 25MB, it will be performed asynchronously.\n\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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get CAD file density.","tags":["file"]}},"/file/execute/{lang}":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeOutput"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Execute a Zoo 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_file_mass","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\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.\n\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.\n\nGet the mass of an object in a CAD file. If the file is larger than 25MB, it will be performed asynchronously.\n\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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get CAD file mass.","tags":["file"]}},"/file/surface-area":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_file_surface_area","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\nThis endpoint returns the square measure units.\n\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.\n\nGet the surface area of an object in a CAD file. If the file is larger than 25MB, it will be performed asynchronously.\n\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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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"]}},"/file/volume":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_file_volume","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\nThis endpoint returns the cubic measure units.\n\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.\n\nGet the volume of an object in a CAD file. If the file is larger than 25MB, it will be performed asynchronously.\n\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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get CAD file volume.","tags":["file"]}},"/hidden/events":{"options":{"operationId":"hidden_create_event","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}},"required":true},"responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Hidden endpoint for defining the telemetry event types.","tags":["hidden"]}},"/hidden/file/convert":{"options":{"operationId":"hidden_convert_file","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversionParams"}}},"required":true},"responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Hidden endpoint for defining the mutli-file iteration types.","tags":["hidden"]}},"/hidden/ml/mutli-file/iteration":{"options":{"operationId":"hidden_create_multi_file_iteration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextToCadMultiFileIterationBody"}}},"required":true},"responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Hidden endpoint for defining the mutli-file iteration types.","tags":["hidden"]}},"/hidden/ws/ml/copilot":{"options":{"operationId":"hidden_ws_ml_copilot_types","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MlCopilotClientMessage"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MlCopilotServerMessage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Hidden endpoint for defining the Ml copilot websocket types.","tags":["hidden"]}},"/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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo Account via oauth2 for this to work.\n\nYou must be a Zoo admin 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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"]}},"/ml-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.\n\nThis endpoint requires authentication by a Zoo employee.\n\nThe ML prompts are returned in order of creation, with the most recently created ML prompts first.","operationId":"list_ml_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/MlPromptResponseResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List all ML prompts.","tags":["ml","hidden"],"x-dropshot-pagination":{"required":[]}}},"/ml-prompts/{id}":{"get":{"description":"This endpoint requires authentication by a Zoo employee.","operationId":"get_ml_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/MlPromptResponse"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get a ML prompt.","tags":["ml","hidden"]}},"/ml/conversations":{"get":{"description":"This endpoint requires authentication by any Zoo user. It returns the conversations for the authenticated user.\n\nThe conversations are returned in order of creation, with the most recently created conversations first.","operationId":"list_conversations_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/ConversationResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List conversations","tags":["ml"],"x-dropshot-pagination":{"required":[]}}},"/ml/convert/proprietary-to-kcl":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_proprietary_to_kcl","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 used to convert a proprietary CAD format to KCL. The file passed MUST have feature tree data.\n\nA STEP file does not have feature tree data, so it will not work. A sldprt file does have feature tree data, so it will work.\n\nThis endpoint is designed to work with any native proprietary CAD format, for example: - SolidWorks (.sldprt) - Creo (.prt) - Catia (.catpart) - NX (.prt) - Fusion 360 (.f3d)\n\nThis endpoint is deterministic, it preserves the original design intent by using the feature tree data. This endpoint does not use any machine learning or AI.\n\nThis endpoint is currently in beta, and is only available to users with access to the feature. Please contact support if you are interested in getting access.\n\nThis endpoint might have limitations and bugs, please report any issues you encounter. It will be improved over time.\n\nInput filepaths will be normalized and re-canonicalized to be under the current working directory -- so returned paths may differ from provided paths, and care must be taken when handling user provided paths.","operationId":"create_proprietary_to_kcl","parameters":[{"description":"The options to run on the code. By default this is set to `execute`.","in":"query","name":"code_option","schema":{"$ref":"#/components/schemas/CodeOption"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KclModel"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Converts a proprietary CAD format to KCL.","tags":["ml","hidden"]}},"/ml/custom/models":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_custom_models","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"Dataset readiness is enforced via `OrgDatasetFileConversion::status_counts_for_datasets`: - At least one conversion must have status `success`. - No conversions may remain in `queued`. If even a single file is still queued the dataset is treated as “not ready for training.” - A dataset consisting only of `canceled` or `error_*` entries is rejected because there’s nothing usable.","operationId":"create_custom_model","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomModel"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomModel"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create a custom ML model that is backed by one or more org datasets.","tags":["ml"]}},"/ml/custom/models/{id}":{"get":{"operationId":"get_custom_model","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomModel"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Retrieve the details of a single custom ML model so long as it belongs to the caller’s organization.","tags":["ml"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_custom_model","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"put":{"operationId":"update_custom_model","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomModel"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomModel"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update mutable metadata (name, system prompt) for a custom ML model owned by the caller's organization.","tags":["ml"]}},"/ml/custom/models/{id}/datasets":{"get":{"operationId":"list_org_datasets_for_model","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OrgDataset"},"title":"Array_of_OrgDataset","type":"array"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List the org datasets that are currently attached to a custom ML model owned by the caller’s organization.","tags":["ml"]}},"/ml/kcl/completions":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_kcl_code_completions","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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_kcl_code_completions","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KclCodeCompletionRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KclCodeCompletionResponse"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Generate code completions for KCL.","tags":["ml","beta"]}},"/ml/text-to-cad/iteration":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_text_to_cad_iteration","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"deprecated":true,"description":"Even if you give specific ranges to edit, the model might change more than just those in order to make the changes you requested without breaking the code.\n\nYou always get the whole code back, even if you only changed a small part of it.\n\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.\n\nThis endpoint will soon be deprecated in favor of the `/ml/text-to-cad/multi-file/iteration` endpoint. In that the endpoint path will remain but it will have the same behavior as `ml/text-to-cad/multi-file/iteration`.","operationId":"create_text_to_cad_iteration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextToCadIterationBody"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextToCadIteration"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Iterate on a CAD model with a prompt.","tags":["ml"]}},"/ml/text-to-cad/multi-file/iteration":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_text_to_cad_multi_file_iteration","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 can iterate on multi-file projects.\n\nEven if you give specific ranges to edit, the model might change more than just those in order to make the changes you requested without breaking the code.\n\nYou always get the whole code back, even if you only changed a small part of it. This endpoint will always return all the code back, including files that were not changed. If your original source code imported a stl/gltf/step/etc file, the output will not include that file since the model will never change non-kcl files. The endpoint will only return the kcl files that were changed.\n\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.\n\nInput filepaths will be normalized and re-canonicalized to be under the current working directory -- so returned paths may differ from provided paths, and care must be taken when handling user provided paths.","operationId":"create_text_to_cad_multi_file_iteration","requestBody":{"content":{"multipart/form-data":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextToCadMultiFileIteration"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Iterate on a multi-file CAD model with a prompt.","tags":["ml"]}},"/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":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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/DeviceAuthConfirmParams"}}},"required":true},"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 originating app's name","in":"query","name":"app_name","schema":{"nullable":true,"type":"string"}},{"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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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":"For Apple only, a JSON web token containing the user’s identity information.","in":"query","name":"id_token","schema":{"nullable":true,"type":"string"}},{"description":"The state that we had passed in through the user consent URL.","in":"query","name":"state","schema":{"type":"string"}},{"description":"For Apple only, a JSON string containing the data requested in the scope property. The returned data is in the following format: `{ \"name\": { \"firstName\": string, \"lastName\": string }, \"email\": string }`","in":"query","name":"user","schema":{"nullable":true,"type":"string"}}],"responses":{"302":{"description":"Temporary Redirect","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_oauth2_provider_callback","parameters":[{"description":"The provider.","in":"path","name":"provider","required":true,"schema":{"$ref":"#/components/schemas/AccountProvider"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 specific endpoint listens for posts of form data.","operationId":"oauth2_provider_callback_post","parameters":[{"description":"The provider.","in":"path","name":"provider","required":true,"schema":{"$ref":"#/components/schemas/AccountProvider"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AuthCallback"}}},"required":true},"responses":{"302":{"description":"Temporary Redirect","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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"]}},"/oauth2/token/revoke":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_oauth2_token_revoke","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","operationId":"oauth2_token_revoke","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/TokenRevokeRequestForm"}}},"required":true},"responses":{"default":{"content":{"*/*":{"schema":{}}},"description":""}},"summary":"Revoke an OAuth2 token.","tags":["oauth2","hidden"]}},"/oauth2/verify-account-linking":{"get":{"description":"This endpoint is called when a user clicks the verification link sent to their email after attempting to log in with OAuth when an existing account with the same email was found. This endpoint validates the token, links the OAuth account to the user, and creates a session.","operationId":"verify_oauth_account_linking","parameters":[{"description":"Optional callback URL to redirect to after verification","in":"query","name":"callback_url","schema":{"nullable":true,"type":"string"}},{"description":"The verification token from the email","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Verify OAuth account linking and complete the authentication.","tags":["oauth2"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_verify_oauth_account_linking","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]}},"/org":{"delete":{"description":"In order to delete an org, you must first delete all of its members, except yourself.\n\nYou must also have no outstanding invoices or unpaid balances.\n\nThis endpoint requires authentication by an org admin. It deletes the authenticated user's org.","operationId":"delete_org","responses":{"204":{"description":"successful deletion","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Delete an org.","tags":["orgs","hidden"]},"get":{"description":"This endpoint requires authentication by an org admin. It gets the authenticated user's org.","operationId":"get_org","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Org"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get an org.","tags":["orgs"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_org","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 a Zoo user that is not already in an org. It creates a new org for the authenticated user and makes them an admin.","operationId":"create_org","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgDetails"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Org"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create an org.","tags":["orgs"]},"put":{"description":"This endpoint requires authentication by an org admin. It updates the authenticated user's org.","operationId":"update_org","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgDetails"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Org"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update an org.","tags":["orgs"]}},"/org/api-calls":{"get":{"description":"This includes all API calls that were made by users in the org.\n\nThis endpoint requires authentication by an org admin. It returns the API calls for the authenticated user's org.\n\nThe API calls are returned in order of creation, with the most recently created API calls first.","operationId":"org_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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List API calls for your org.","tags":["api-calls"],"x-dropshot-pagination":{"required":[]}}},"/org/api-calls/{id}":{"get":{"description":"This endpoint requires authentication by an org admin. It returns details of the requested API call for the user's org.","operationId":"get_api_call_for_org","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get an API call for an org.","tags":["api-calls"]}},"/org/dataset/s3/policies":{"get":{"operationId":"org_dataset_s3_policies","parameters":[{"description":"IAM role ARN customers expect Zoo to assume when reading the dataset.","in":"query","name":"role_arn","required":true,"schema":{"type":"string"}},{"description":"Dataset URI used to scope generated IAM policies.","in":"query","name":"uri","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetS3Policies"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Return the IAM policies customers should apply when onboarding an S3 dataset.","tags":["orgs"]}},"/org/datasets":{"get":{"operationId":"list_org_datasets","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/OrgDatasetResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List every dataset that belongs to the caller's organization.","tags":["orgs"],"x-dropshot-pagination":{"required":[]}},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_org_datasets","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 the dataset lives in S3, call `/org/dataset/s3/policies` first so you can generate the trust, permission, and bucket policies scoped to your dataset before invoking this endpoint.","operationId":"create_org_dataset","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrgDataset"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgDataset"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Register a new org dataset.","tags":["orgs"]}},"/org/datasets/{id}":{"delete":{"description":"This is a destructive operation that: - requires org admin authentication and the dataset must belong to the caller's org. - fails with a 409 Conflict if the dataset is still attached to any custom model. - deletes Zoo-managed artifacts for this dataset (converted outputs and embeddings). - does **not** delete or modify the customer's source bucket/prefix.\n\nAll internal artifact deletions are strict; if any cleanup fails, the request fails.","operationId":"delete_org_dataset","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"204":{"description":"successful deletion","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Delete a dataset owned by the caller's organization.","tags":["orgs"]},"get":{"operationId":"get_org_dataset","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgDataset"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Fetch a single dataset by id so long as it belongs to the authenticated org.","tags":["orgs"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_org_dataset","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"put":{"description":"IMPORTANT: Use this endpoint to fix connectivity to the same underlying storage location (e.g. rotating credentials or correcting a typo). Do not repoint an existing dataset at a completely different bucket or provider—create a new dataset instead so conversions in flight keep their original source. This warning applies to every storage backend, not just S3.","operationId":"update_org_dataset","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOrgDataset"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgDataset"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update dataset metadata or storage credentials for the caller's organization.","tags":["orgs"]}},"/org/datasets/{id}/bulk-download/kcl":{"get":{"operationId":"download_org_dataset_successful_kcl_bulk","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"default":{"content":{"*/*":{"schema":{}}},"description":""}},"summary":"Bulk-download KCL outputs for successful dataset conversions.","tags":["orgs"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_download_org_dataset_successful_kcl_bulk","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]}},"/org/datasets/{id}/conversions":{"get":{"description":"This endpoint returns lightweight conversion summaries only (including `phase`), and intentionally omits converted KCL output and snapshot image payloads for speed. Use the optional `filter` query parameter to filter results (example: `?filter=status:success`).","operationId":"list_org_dataset_conversions","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}},{"description":"Optional filter string for conversions (example: `status:success`).","in":"query","name":"filter","schema":{"nullable":true,"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/ConversionSortMode"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgDatasetFileConversionSummaryResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List the file conversions that have been processed for a given dataset owned by the caller's org.","tags":["orgs"],"x-dropshot-pagination":{"required":[]}}},"/org/datasets/{id}/conversions/{conversion_id}":{"get":{"description":"Unlike list/search endpoints, this returns the full conversion payload: latest output text plus decoded snapshot image payloads for original, raw-KCL, and salon-KCL stages.","operationId":"get_org_dataset_conversion","parameters":[{"description":"Conversion identifier.","in":"path","name":"conversion_id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}},{"description":"Dataset identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgDatasetFileConversionDetails"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Fetch the metadata and converted output for a single dataset conversion.","tags":["orgs"]}},"/org/datasets/{id}/conversions/{conversion_id}/original":{"get":{"operationId":"download_org_dataset_conversion_original","parameters":[{"description":"Conversion identifier.","in":"path","name":"conversion_id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}},{"description":"Dataset identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"default":{"content":{"*/*":{"schema":{}}},"description":""}},"summary":"Download the original source file for a specific dataset conversion.","tags":["orgs"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_download_org_dataset_conversion_original","parameters":[{"description":"Conversion identifier.","in":"path","name":"conversion_id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}},{"description":"Dataset identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]}},"/org/datasets/{id}/conversions/{conversion_id}/retrigger":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_retrigger_org_dataset_conversion","parameters":[{"description":"Conversion identifier.","in":"path","name":"conversion_id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}},{"description":"Dataset identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"operationId":"retrigger_org_dataset_conversion","parameters":[{"description":"Conversion identifier.","in":"path","name":"conversion_id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}},{"description":"Dataset identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Retrigger a specific dataset conversion for the caller's org.","tags":["orgs"]}},"/org/datasets/{id}/retrigger":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_retrigger_org_dataset","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"operationId":"retrigger_org_dataset","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}},{"description":"Optional comma-separated set of conversion statuses to retrigger.\n\nExample: `statuses=success,in_progress` If omitted, we retrigger all non-success conversions, but only retrigger `in_progress` conversions that have been running for more than 5 minutes.","in":"query","name":"statuses","schema":{"nullable":true,"type":"string"}}],"responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Request a retrigger of conversions for a dataset that belongs to the caller's org.","tags":["orgs"]}},"/org/datasets/{id}/search/conversions":{"get":{"description":"Supports exact conversion-ID matching and fuzzy file-path matching.","operationId":"search_org_dataset_conversions","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}},{"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"}},{"description":"Search text matched against conversion id or file path.","in":"query","name":"q","schema":{"type":"string"}},{"description":"Requested sort mode for matched conversions.","in":"query","name":"sort_by","schema":{"$ref":"#/components/schemas/ConversionSortMode"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgDatasetFileConversionSummaryResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Search dataset conversions by conversion ID or file path.","tags":["orgs"],"x-dropshot-pagination":{"required":["q"]}}},"/org/datasets/{id}/stats":{"get":{"operationId":"get_org_dataset_conversion_stats","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgDatasetConversionStatsResponse"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Return aggregate conversion stats for a dataset owned by the caller's org.","tags":["orgs"]}},"/org/datasets/{id}/uploads":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_upload_org_dataset_files","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 accepts `multipart/form-data` where each file part becomes a source object in the dataset. Paths are normalized and must be relative.","operationId":"upload_org_dataset_files","parameters":[{"description":"The identifier.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadOrgDatasetFilesResponse"}}},"description":"successfully enqueued operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Upload source files into a Zoo-managed dataset.","tags":["orgs"]}},"/org/members":{"get":{"description":"This endpoint requires authentication by an org admin. It lists the members of the authenticated user's org.","operationId":"list_org_members","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 organization role to filter by.","in":"query","name":"role","schema":{"$ref":"#/components/schemas/UserOrgRole"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgMemberResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List members of your org.","tags":["orgs"],"x-dropshot-pagination":{"required":[]}},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_org_member","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 the user exists, this will add them to your org. If they do not exist, this will create a new user and add them to your org.\n\nIn both cases the user gets an email that they have been added to the org.\n\nIf the user is already in your org, this will return a 400 and a message.\n\nIf the user is already in a different org, this will return a 400 and a message.\n\nThis endpoint requires authentication by an org admin. It adds the specified member to the authenticated user's org.","operationId":"create_org_member","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddOrgMember"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgMember"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Add a member to your org.","tags":["orgs"]}},"/org/members/{user_id}":{"delete":{"description":"This endpoint requires authentication by an org admin. It removes the specified member from the authenticated user's org.","operationId":"delete_org_member","parameters":[{"description":"The user id of the org member.","in":"path","name":"user_id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"204":{"description":"successful deletion","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Remove a member from your org.","tags":["orgs"]},"get":{"description":"This endpoint requires authentication by an org admin. It gets the specified member of the authenticated user's org.","operationId":"get_org_member","parameters":[{"description":"The user id of the org member.","in":"path","name":"user_id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgMember"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get a member of your org.","tags":["orgs"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_update_org_member","parameters":[{"description":"The user id of the org member.","in":"path","name":"user_id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 an org admin. It updates the specified member of the authenticated user's org.","operationId":"update_org_member","parameters":[{"description":"The user id of the org member.","in":"path","name":"user_id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberToOrgBody"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgMember"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update a member of your org.","tags":["orgs"]}},"/org/payment":{"delete":{"description":"This includes billing address, phone, and name.\n\nThis endpoint requires authentication by an org admin. It deletes the payment information for the authenticated user's org.","operationId":"delete_payment_information_for_org","responses":{"204":{"description":"successful deletion","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Delete payment info for your org.","tags":["payments"]},"get":{"description":"This includes billing address, phone, and name.\n\nThis endpoint requires authentication by an org admin. It gets the payment information for the authenticated user's org.","operationId":"get_payment_information_for_org","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Customer"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get payment info about your org.","tags":["payments"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_payment_information_for_org","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\nThis endpoint requires authentication by the org admin. It creates the payment information for the authenticated user's org.","operationId":"create_payment_information_for_org","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create payment info for your org.","tags":["payments"]},"put":{"description":"This includes billing address, phone, and name.\n\nThis endpoint requires authentication by an org admin. It updates the payment information for the authenticated user's org.","operationId":"update_payment_information_for_org","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update payment info for your org.","tags":["payments"]}},"/org/payment/balance":{"get":{"description":"This endpoint requires authentication by any member of an org. It gets the balance information for the authenticated user's org.","operationId":"get_payment_balance_for_org","parameters":[{"description":"If you would like to return the total due for a user. This makes the API call take longer so it is off by default.","in":"query","name":"include_total_due","schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerBalance"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get balance for your org.","tags":["payments"]}},"/org/payment/intent":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_payment_intent_for_org","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 the org admin. It creates a new payment intent for the authenticated user's org's org.","operationId":"create_payment_intent_for_org","responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentIntent"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create a payment intent for your org.","tags":["payments","hidden"]}},"/org/payment/invoices":{"get":{"description":"This endpoint requires authentication by an org admin. It lists invoices for the authenticated user's org.","operationId":"list_invoices_for_org","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List invoices for your org.","tags":["payments"]}},"/org/payment/methods":{"get":{"description":"This endpoint requires authentication by an org admin. It lists payment methods for the authenticated user's org.","operationId":"list_payment_methods_for_org","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List payment methods for your org.","tags":["payments"]}},"/org/payment/methods/{id}":{"delete":{"description":"This endpoint requires authentication by an org admin. It deletes the specified payment method for the authenticated user's org.","operationId":"delete_payment_method_for_org","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Delete a payment method for your org.","tags":["payments","hidden"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_payment_methods_for_org","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]}},"/org/payment/subscriptions":{"get":{"description":"This endpoint requires authentication by any member of an org. It gets the subscription for the authenticated user's org.","operationId":"get_org_subscription","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZooProductSubscriptions"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get the subscription for an org.","tags":["payments"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_org_subscription","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 an org admin. It creates the subscription for the authenticated user's org.","operationId":"create_org_subscription","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZooProductSubscriptionsOrgRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZooProductSubscriptions"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create the subscription for an org.","tags":["payments"]},"put":{"description":"This endpoint requires authentication by an org admin. It updates the subscription for the authenticated user's org.","operationId":"update_org_subscription","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZooProductSubscriptionsOrgRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZooProductSubscriptions"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update the subscription for an org.","tags":["payments"]}},"/org/payment/tax":{"get":{"description":"This endpoint requires authentication by an org admin. It will return an error if the org's information is not valid for automatic tax. Otherwise, it will return an empty successful response.","operationId":"validate_customer_tax_information_for_org","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Validate an orgs's information is correct and valid for automatic tax.","tags":["payments","hidden"]}},"/org/privacy":{"get":{"description":"This endpoint requires authentication by an org admin. It gets the privacy settings for the authenticated user's org.","operationId":"get_org_privacy_settings","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacySettings"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get the privacy settings for an org.","tags":["orgs"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_org_privacy_settings","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 an org admin. It updates the privacy settings for the authenticated user's org.","operationId":"update_org_privacy_settings","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacySettings"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacySettings"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update the privacy settings for an org.","tags":["orgs"]}},"/org/saml/idp":{"delete":{"description":"This endpoint requires authentication by an org admin.","operationId":"delete_org_saml_idp","responses":{"204":{"description":"successful deletion","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Delete an SAML identity provider.","tags":["orgs"]},"get":{"description":"This endpoint requires authentication by an org admin.","operationId":"get_org_saml_idp","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamlIdentityProvider"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get the SAML identity provider.","tags":["orgs"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_org_saml_idp","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 an org admin.","operationId":"create_org_saml_idp","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamlIdentityProviderCreate"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamlIdentityProvider"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create a SAML identity provider.","tags":["orgs"]},"put":{"description":"This endpoint requires authentication by an org admin.","operationId":"update_org_saml_idp","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamlIdentityProviderCreate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamlIdentityProvider"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update the SAML identity provider.","tags":["orgs"]}},"/org/service-accounts":{"get":{"description":"This endpoint requires authentication by an org member. It returns the service accounts for the organization.\n\nThe service accounts are returned in order of creation, with the most recently created service accounts first.","operationId":"list_service_accounts_for_org","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/ServiceAccountResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List service accounts for your org.","tags":["service-accounts"],"x-dropshot-pagination":{"required":[]}},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_create_service_account_for_org","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 an org member. It creates a new service account for the organization.","operationId":"create_service_account_for_org","parameters":[{"description":"An optional label for the service account.","in":"query","name":"label","schema":{"nullable":true,"type":"string"}}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceAccount"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create a new service account for your org.","tags":["service-accounts"]}},"/org/service-accounts/{token}":{"delete":{"description":"This endpoint requires authentication by an org member. It deletes the requested service account for the organization.\n\nThis endpoint does not actually delete the service account from the database. It merely marks the token as invalid. We still want to keep the service account in the database for historical purposes.","operationId":"delete_service_account_for_org","parameters":[{"description":"The service account.","in":"path","name":"token","required":true,"schema":{"$ref":"#/components/schemas/ServiceAccountUuid"}}],"responses":{"204":{"description":"successful deletion","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Delete an service account for your org.","tags":["service-accounts"]},"get":{"description":"This endpoint requires authentication by an org member. It returns details of the requested service account for the organization.","operationId":"get_service_account_for_org","parameters":[{"description":"The service account.","in":"path","name":"token","required":true,"schema":{"$ref":"#/components/schemas/ServiceAccountUuid"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceAccount"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get an service account for your org.","tags":["service-accounts"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_service_account_for_org","parameters":[{"description":"The service account.","in":"path","name":"token","required":true,"schema":{"$ref":"#/components/schemas/ServiceAccountUuid"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]}},"/org/shortlinks":{"get":{"description":"This endpoint requires authentication by an org admin. It gets the shortlinks for the authenticated user's org.","operationId":"get_org_shortlinks","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/ShortlinkResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get the shortlinks for an org.","tags":["orgs","shortlinks"],"x-dropshot-pagination":{"required":[]}}},"/orgs":{"get":{"description":"This endpoint requires authentication by a Zoo employee. The orgs are returned in order of creation, with the most recently created orgs first.","operationId":"list_orgs","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/OrgResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List orgs.","tags":["orgs","hidden"],"x-dropshot-pagination":{"required":[]}}},"/orgs/{id}":{"get":{"description":"This endpoint requires authentication by a Zoo employee. It gets the information for the specified org.","operationId":"get_any_org","parameters":[{"description":"The organization ID.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Org"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get an org.","tags":["orgs","hidden"]}},"/orgs/{id}/admin/details":{"get":{"description":"Zoo admins can retrieve extended information about any organization, while non-admins receive a 404 to avoid leaking existence.","operationId":"org_admin_details_get","parameters":[{"description":"The organization ID.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgAdminDetails"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get admin-only details for an organization.","tags":["orgs","hidden"]}},"/orgs/{id}/payment/balance":{"get":{"description":"This endpoint requires authentication by a Zoo employee. It gets the balance information for the specified org.","operationId":"get_payment_balance_for_any_org","parameters":[{"description":"If you would like to return the total due for a user. This makes the API call take longer so it is off by default.","in":"query","name":"include_total_due","schema":{"type":"boolean"}},{"description":"The organization ID.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerBalance"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get balance for an org.","tags":["payments","hidden"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_payment_balance_for_any_org","parameters":[{"description":"The organization ID.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 a Zoo employee. It updates the balance information for the specified org.","operationId":"update_payment_balance_for_any_org","parameters":[{"description":"The organization ID.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}},{"description":"If you would like to return the total due for a user. This makes the API call take longer so it is off by default.","in":"query","name":"include_total_due","schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePaymentBalance"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerBalance"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update balance for an org.","tags":["payments","hidden"]}},"/orgs/{id}/payment/subscriptions":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_update_subscription_for_any_org","parameters":[{"description":"The organization ID.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 a Zoo admin. It updates the subscription for the specified org.","operationId":"update_org_subscription_for_any_org","parameters":[{"description":"The organization ID.","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/Uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZooProductSubscriptionsOrgRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZooProductSubscriptions"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update the subscription for any org (admin override).","tags":["payments","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Return pong.","tags":["meta"]}},"/pricing/subscriptions":{"get":{"description":"This is the ultimate source of truth for the pricing of our subscriptions.","operationId":"get_pricing_subscriptions","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":{"items":{"$ref":"#/components/schemas/ZooProductSubscription"},"type":"array"},"title":"Map_of_Array_of_ZooProductSubscription","type":"object"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get the pricing for our subscriptions.","tags":["meta","hidden"]}},"/store/coupon":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_store_coupon","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 a Zoo employee. It creates a new store coupon.","operationId":"create_store_coupon","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreCouponParams"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountCode"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create a new store coupon.","tags":["store","hidden"]}},"/subscription-plans/{slug}/prices":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_upsert_subscription_plan_price","parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"description":"You must be a Zoo admin to perform this request.","operationId":"upsert_subscription_plan_price","parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceUpsertRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionPlanPriceRecord"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create or update a price for a subscription plan.","tags":["payments","hidden"]}},"/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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo user. It deletes the authenticated user from Zoo's database.\n\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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo user. It returns the API calls for the authenticated user.\n\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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo user. It returns the API tokens for the authenticated user.\n\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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo user. It creates a new API token for the authenticated user.","operationId":"create_api_token_for_user","parameters":[{"description":"An optional label for the API token.","in":"query","name":"label","schema":{"nullable":true,"type":"string"}}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiToken"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo user. It deletes the requested API token for the user.\n\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":{"$ref":"#/components/schemas/ApiTokenUuid"}}],"responses":{"204":{"description":"successful deletion","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo 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":{"$ref":"#/components/schemas/ApiTokenUuid"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiToken"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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":{"$ref":"#/components/schemas/ApiTokenUuid"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]}},"/user/email-marketing-consent":{"get":{"operationId":"user_email_marketing_consent_get","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailMarketingConsentState"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get email marketing consent state for the authenticated user.","tags":["users"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_user_email_marketing_consent","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]}},"/user/email-marketing-consent/decline":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_user_email_marketing_consent_decline","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"operationId":"user_email_marketing_consent_decline_post","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Record explicit decline for email marketing consent.","tags":["users"]}},"/user/email-marketing-consent/request":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_user_email_marketing_consent_request","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"operationId":"user_email_marketing_consent_request_post","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Request email marketing opt-in and send a confirmation email.","tags":["users"]}},"/user/email-marketing-consent/seen":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_user_email_marketing_consent_seen","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"post":{"operationId":"user_email_marketing_consent_seen_post","responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Mark the email-marketing modal as seen/dismissed for the authenticated user.","tags":["users"]}},"/user/extended":{"get":{"description":"Get the user information for the authenticated user.\n\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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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/features":{"get":{"description":"Returns only features that are marked as safe for exposure to clients and currently resolved to `true` for the requesting user (including org overrides).","operationId":"user_features_get","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeatureList"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List user-visible feature flags enabled for the authenticated user.","tags":["users"]}},"/user/oauth2/providers":{"get":{"description":"If this returns an empty array, then the user has not connected any OAuth2 providers and uses raw email authentication.\n\nThis endpoint requires authentication by any Zoo user. It gets the providers for the authenticated user.","operationId":"get_oauth2_providers_for_user","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AccountProvider"},"title":"Array_of_AccountProvider","type":"array"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get the OAuth2 providers for your user.","tags":["users"]}},"/user/org":{"get":{"description":"This endpoint requires authentication by any Zoo user. It gets the authenticated user's org.\n\nIf the user is not a member of an org, this endpoint will return a 404.","operationId":"get_user_org","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserOrgInfo"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get a user's org.","tags":["orgs","users"]}},"/user/payment":{"delete":{"description":"This includes billing address, phone, and name.\n\nThis endpoint requires authentication by any Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\nThis endpoint requires authentication by any Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\nThis endpoint requires authentication by any Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\nThis endpoint requires authentication by any Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo user. It gets the balance information for the authenticated user.","operationId":"get_payment_balance_for_user","parameters":[{"description":"If you would like to return the total due for a user. This makes the API call take longer so it is off by default.","in":"query","name":"include_total_due","schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerBalance"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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_payment_intent_for_user","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo 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"}},{"description":"If true, force the deletion by bypassing our only-payment-method check.","in":"query","name":"force","schema":{"type":"boolean"}}],"responses":{"204":{"description":"successful deletion","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]}},"/user/payment/methods/{id}/default":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_default_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 operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo user. It sets the default payment method for the authenticated user.","operationId":"set_default_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 operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Set the default payment method for your user.","tags":["payments"]}},"/user/payment/subscriptions":{"get":{"description":"This endpoint requires authentication by any Zoo user. It gets the subscription for the user.","operationId":"get_user_subscription","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZooProductSubscriptions"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get the subscription for a user.","tags":["payments"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_user_subscription","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo user. It creates the subscription for the user.","operationId":"create_user_subscription","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZooProductSubscriptionsUserRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZooProductSubscriptions"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create the subscription for a user.","tags":["payments"]},"put":{"description":"This endpoint requires authentication by any Zoo user. It updates the subscription for the user.","operationId":"update_user_subscription","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZooProductSubscriptionsUserRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZooProductSubscriptions"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update the user's subscription.","tags":["payments"]}},"/user/payment/tax":{"get":{"description":"This endpoint requires authentication by any Zoo user. It will return an error if the user'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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Validate a user's information is correct and valid for automatic tax.","tags":["payments","hidden"]}},"/user/privacy":{"get":{"description":"This endpoint requires authentication by any Zoo user. It gets the privacy settings for the user.","operationId":"get_user_privacy_settings","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacySettings"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get the privacy settings for a user.","tags":["users"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_user_privacy_settings","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo user. It updates the privacy settings for the user.","operationId":"update_user_privacy_settings","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacySettings"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacySettings"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update the user's privacy settings.","tags":["users"]}},"/user/session/{token}":{"get":{"description":"This endpoint requires authentication by any Zoo 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":{"$ref":"#/components/schemas/SessionUuid"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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/shortlinks":{"get":{"description":"This endpoint requires authentication by any Zoo user. It gets the shortlinks for the user.","operationId":"get_user_shortlinks","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/ShortlinkResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get the shortlinks for a user.","tags":["users","shortlinks"],"x-dropshot-pagination":{"required":[]}},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_user_shortlinks","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo user. It creates a shortlink for the user.","operationId":"create_user_shortlink","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateShortlinkRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateShortlinkResponse"}}},"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Create a shortlink for a user.","tags":["users","shortlinks"]}},"/user/shortlinks/{key}":{"delete":{"description":"This endpoint requires authentication by any Zoo user. It deletes a shortlink for the user.","operationId":"delete_user_shortlink","parameters":[{"description":"The key of the shortlink.","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Delete a shortlink for a user.","tags":["users","shortlinks"]},"get":{"description":"This endpoint might require authentication by a Zoo user. It gets the shortlink for the user and redirects them to the URL. If the shortlink is owned by an org, the user must be a member of the org.","operationId":"redirect_user_shortlink","parameters":[{"description":"The key of the shortlink.","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"302":{"description":"Temporary Redirect","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Redirect the user to the URL for the shortlink.","tags":["hidden","users","shortlinks"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_delete_user_shortlinks","parameters":[{"description":"The key of the shortlink.","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 Zoo user. It updates a shortlink for the user.\n\nThis endpoint really only allows you to change the `restrict_to_org` setting of a shortlink. Thus it is only useful for folks who are part of an org. If you are not part of an org, you will not be able to change the `restrict_to_org` status.","operationId":"update_user_shortlink","parameters":[{"description":"The key of the shortlink.","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateShortlinkRequest"}}},"required":true},"responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update a shortlink for a user.","tags":["users","shortlinks"]}},"/user/text-to-cad":{"get":{"description":"This will always return the STEP file contents as well as the format the user originally requested.\n\nThis endpoint requires authentication by any Zoo user. It returns the text-to-CAD parts for the authenticated user.\n\nThe text-to-CAD parts are returned in order of creation, with the most recently created text-to-CAD parts first.","operationId":"list_text_to_cad_parts_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"}},{"description":"If specified, only return the prompts for the conversation id given.","in":"query","name":"conversation_id","schema":{"$ref":"#/components/schemas/Uuid"}},{"description":"DEPRECATED: This is the same as `no_parts`, and will be dropped in a future release. Please do not use this.","in":"query","name":"no_models","schema":{"nullable":true,"type":"boolean"}},{"description":"If we should return the part contents or just the metadata.","in":"query","name":"no_parts","schema":{"nullable":true,"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextToCadResponseResultsPage"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"List text-to-CAD parts you've generated.","tags":["ml"],"x-dropshot-pagination":{"required":[]}}},"/user/text-to-cad/{id}":{"get":{"description":"This endpoint requires authentication by any Zoo user. The user must be the owner of the text-to-CAD model.","operationId":"get_text_to_cad_part_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/TextToCadResponse"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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":["ml"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_text_to_cad_part_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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 can be a text-to-CAD creation or iteration.\n\nThis endpoint requires authentication by any Zoo user. The user must be the owner of the ML response, in order to give feedback.","operationId":"create_text_to_cad_part_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/MlFeedback"}}],"responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Give feedback to a specific ML response.","tags":["ml"]}},"/users":{"get":{"description":"This endpoint requires authentication by a Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 requires authentication by a Zoo 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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\nAlternatively, to get information about the authenticated user, use `/user/extended` endpoint.","operationId":"get_user_extended","parameters":[{"description":"The user's identifier (uuid or email).","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/UserIdentifier"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendedUser"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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.\n\nAlternatively, to get information about the authenticated user, use `/user` endpoint.","operationId":"get_user","parameters":[{"description":"The user's identifier (uuid or email).","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/UserIdentifier"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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}/admin/details":{"get":{"description":"Zoo admins can retrieve extended information about any user, while non-admins receive a 404 to avoid leaking the existence of the resource.","operationId":"user_admin_details_get","parameters":[{"description":"The user's identifier (uuid or email).","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/UserIdentifier"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAdminDetails"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get admin-only details for a user.","tags":["users","hidden"]}},"/users/{id}/api-calls":{"get":{"description":"This endpoint requires authentication by any Zoo user. It returns the API calls for the authenticated user if \"me\" is passed as the user id.\n\nAlternatively, you can use the `/user/api-calls` endpoint to get the API calls for your user.\n\nIf the authenticated user is a Zoo employee, then the API calls are returned for the user specified by the user id.\n\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's identifier (uuid or email).","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/UserIdentifier"}},{"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.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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":[]}}},"/users/{id}/payment/balance":{"get":{"description":"This endpoint requires authentication by a Zoo employee. It gets the balance information for the specified user.","operationId":"get_payment_balance_for_any_user","parameters":[{"description":"The user's identifier (uuid or email).","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/UserIdentifier"}},{"description":"If you would like to return the total due for a user. This makes the API call take longer so it is off by default.","in":"query","name":"include_total_due","schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerBalance"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Get balance for an user.","tags":["payments","hidden"]},"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_payment_balance_for_any_user","parameters":[{"description":"The user's identifier (uuid or email).","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/UserIdentifier"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 a Zoo employee. It updates the balance information for the specified user.","operationId":"update_payment_balance_for_any_user","parameters":[{"description":"The user's identifier (uuid or email).","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/UserIdentifier"}},{"description":"If you would like to return the total due for a user. This makes the API call take longer so it is off by default.","in":"query","name":"include_total_due","schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePaymentBalance"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerBalance"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update balance for an user.","tags":["payments","hidden"]}},"/users/{id}/payment/subscriptions":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_update_subscription_for_user","parameters":[{"description":"The user's identifier (uuid or email).","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/UserIdentifier"}}],"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"put":{"description":"You must be a Zoo admin to perform this request.","operationId":"update_subscription_for_user","parameters":[{"description":"The user's identifier (uuid or email).","in":"path","name":"id","required":true,"schema":{"$ref":"#/components/schemas/UserIdentifier"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZooProductSubscriptionsUserRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZooProductSubscriptions"}}},"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Update a subscription for a user.","tags":["users","hidden"]}},"/website/email-marketing-consent/request":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_put_public_email_marketing_consent_request","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"put":{"operationId":"put_public_email_marketing_consent_request","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicEmailMarketingConsentRequest"}}},"required":true},"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Requests public email marketing consent for an email address.","tags":["users","hidden"]}},"/website/forms/cad-user-info":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_put_user_cad_user_info_form","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"OPTIONS endpoint.","tags":["hidden"]},"put":{"operationId":"put_user_cad_user_info_form","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebsiteCadUserInfoForm"}}},"required":true},"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Stores authenticated CAD user info form data for the current user.","tags":["users","hidden"]}},"/website/forms/sales":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_put_public_sales_form","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 accepts optional authentication.","operationId":"put_public_sales_form","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebsiteSalesForm"}}},"required":true},"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Creates a new sales ticket in the internal help desk from the website sales form.","tags":["users","hidden"]}},"/website/forms/support":{"options":{"description":"This is necessary for some preflight requests, specifically POST, PUT, and DELETE.","operationId":"options_put_public_support_form","responses":{"204":{"description":"resource updated","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","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 accepts optional authentication.","operationId":"put_public_support_form","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebsiteSupportForm"}}},"required":true},"responses":{"204":{"description":"successful operation, no content","headers":{"Access-Control-Allow-Credentials":{"description":"Access-Control-Allow-Credentials header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Headers":{"description":"Access-Control-Allow-Headers header. This is a comma-separated list of headers.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Methods":{"description":"Access-Control-Allow-Methods header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Access-Control-Allow-Origin":{"description":"Access-Control-Allow-Origin header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Content-Location":{"description":"The Content-Location header for responses that are not the final destination. This is used to indicate where the resource can be found, when it is finished.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Location":{"description":"The location header for redirects and letting users know if there is a websocket they can listen to for status updates on their operation.","schema":{"nullable":true,"type":"string"},"style":"simple"},"Set-Cookie":{"description":"Set-Cookie header.","schema":{"nullable":true,"type":"string"},"style":"simple"},"X-Api-Call-Id":{"description":"ID for this request. We return it so that users can report this to us and help us debug their problems.","required":true,"schema":{"type":"string"},"style":"simple"}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}},"summary":"Creates a new support ticket in the internal help desk from the website support form.","tags":["users","hidden"]}},"/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/ml/copilot":{"get":{"description":"This endpoint accepts typed query parameters via `MlCopilotQuery`. See the field documentation on that struct for details, including replay behavior and wire format.","operationId":"ml_copilot_ws","parameters":[{"description":"Conversation to replay (UUID). Required when `replay` is `true`.","in":"query","name":"conversation_id","schema":{"format":"uuid","nullable":true,"type":"string"}},{"description":"If `true`, emit MsgPack Replay for the specified conversation and continue.","in":"query","name":"replay","schema":{"nullable":true,"type":"boolean"}},{"description":"Optional Pull Request number to route traffic.","in":"query","name":"pr","schema":{"format":"uint64","minimum":0,"nullable":true,"type":"integer"}}],"responses":{"default":{"content":{"*/*":{"schema":{}}},"description":""}},"summary":"Open a websocket to prompt the ML copilot.","tags":["ml"],"x-dropshot-websocket":{}}},"/ws/ml/reasoning/{id}":{"get":{"operationId":"ml_reasoning_ws","parameters":[{"description":"The ID of the async operation.","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"default":{"content":{"*/*":{"schema":{}}},"description":""}},"summary":"Open a websocket to prompt the ML copilot.","tags":["ml"],"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":"API Call ID for distributed tracing","in":"query","name":"api_call_id","schema":{"nullable":true,"type":"string"}},{"description":"Frames per second of the video feed.","in":"query","name":"fps","schema":{"format":"uint32","minimum":0,"type":"integer"}},{"description":"Enables nicer visuals for transparent surfaces. This slows down rendering, so it's off by default.","in":"query","name":"order_independent_transparency","schema":{"type":"boolean"}},{"description":"An optional identifier for a pool of engine instances. The 'default' pool is used when none is specified.","in":"query","name":"pool","schema":{"nullable":true,"type":"string"}},{"description":"Engine Post effects (such as SSAO)","in":"query","name":"post_effect","schema":{"$ref":"#/components/schemas/PostEffectType"}},{"description":"If given, when the session ends, the modeling commands sent during the session will be written out to this filename. For debugging.","in":"query","name":"replay","schema":{"nullable":true,"type":"string"}},{"description":"If true, will show the grid at the start of the session.","in":"query","name":"show_grid","schema":{"type":"boolean"}},{"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"}},{"description":"Optional Pull Request number to route traffic.","in":"query","name":"pr","schema":{"format":"uint64","minimum":0,"nullable":true,"type":"integer"}}],"responses":{"default":{"content":{"*/*":{"schema":{}}},"description":""}},"summary":"Open a websocket which accepts modeling commands.","tags":["modeling"],"x-dropshot-websocket":{}}}},"tags":[{"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://zoo.dev/docs/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://zoo.dev/docs/api/api-tokens"},"name":"api-tokens"},{"description":"Endpoints for third party app grant flows.","externalDocs":{"url":"https://zoo.dev/docs/api/apps"},"name":"apps"},{"description":"Beta API endpoints. We will not charge for these endpoints while they are in beta.","externalDocs":{"url":"https://zoo.dev/docs/api/beta"},"name":"beta"},{"description":"Constants. These are helpful as helpers.","externalDocs":{"url":"https://zoo.dev/docs/api/constant"},"name":"constant"},{"description":"Endpoints that allow for code execution or creation of code execution environments.","externalDocs":{"url":"https://zoo.dev/docs/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://zoo.dev/docs/api/file"},"name":"file"},{"description":"Hidden API endpoints that should not show up in the docs.","externalDocs":{"url":"https://zoo.dev/docs/api/hidden"},"name":"hidden"},{"description":"Meta information about the API.","externalDocs":{"url":"https://zoo.dev/docs/api/meta"},"name":"meta"},{"description":"Machine learning to generate CAD models and other things.","externalDocs":{"url":"https://zoo.dev/docs/api/ml"},"name":"ml"},{"description":"Modeling API for updating your 3D files using the Zoo engine.","externalDocs":{"url":"https://zoo.dev/docs/api/modeling"},"name":"modeling"},{"description":"Endpoints that implement OAuth 2.0 grant flows.","externalDocs":{"url":"https://zoo.dev/docs/api/oauth2"},"name":"oauth2"},{"description":"An organization is a group of users of the Zoo API. Here, we can add users to an org and perform operations on orgs.","externalDocs":{"url":"https://zoo.dev/docs/api/orgs"},"name":"orgs"},{"description":"Operations around payments and billing.","externalDocs":{"url":"https://zoo.dev/docs/api/payments"},"name":"payments"},{"description":"Service accounts allow organizations to call the API. Organization admins can create, delete, and list the service accounts for their org. Service accounts are scoped to an organization not individual users, these are better to use for automations than individual API tokens, since they won't stop working when an individual leaves the company.","externalDocs":{"url":"https://zoo.dev/docs/api/service-accounts"},"name":"service-accounts"},{"description":"Shortlinks are a way to create a short URL that redirects to a longer URL. This is useful for sharing links that are long and unwieldy.","externalDocs":{"url":"https://zoo.dev/docs/api/shortlinks"},"name":"shortlinks"},{"description":"Operations involving our swag store.","externalDocs":{"url":"https://zoo.dev/docs/api/store"},"name":"store"},{"description":"Unit conversion operations.","externalDocs":{"url":"https://zoo.dev/docs/api/file"},"name":"unit"},{"description":"A user is someone who uses the Zoo 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://zoo.dev/docs/api/users"},"name":"users"}]}