swagger: '2.0' info: version: 1.0.0-beta title: Speckle OpenApi Specs description: |- Documentation & specifications for the Speckle Server & Speckle Objects. contact: name: SpeckleWorks url: 'https://speckle.works' email: hello@speckle.works host: 'localhost:3001' basePath: /api/v1 tags: - name: Accounts description: Register, Login and more. - name: Clients description: Create, get and update application clients. - name: Projects description: Create, get and update projects. - name: Comments description: Create, get and update comments. - name: Streams description: Create, get and update streams. - name: Objects description: Create, get and update objects. schemes: - http - https consumes: - application/json produces: - application/json security: - JWT Token Auth: [] securityDefinitions: JWT Token Auth: type: apiKey name: Authorization in: header paths: # ACCOUNTS /accounts/register: post: tags: - Accounts summary: UserRegister description: Registers a new user. operationId: UserRegister parameters: - name: body in: body required: true schema: $ref: '#/definitions/User' responses: '200': description: New user successfully registered. schema: $ref: '#/definitions/ResponseUser' '400': description: Failed to register a new user. schema: $ref: '#/definitions/ResponseBase' /accounts/login: post: tags: - Accounts summary: UserLogin description: Login and get jwt token. operationId: UserLogin parameters: - name: body in: body required: true description: The only required elements are email and password. schema: $ref: '#/definitions/User' responses: '200': description: You've logged in. schema: $ref: '#/definitions/ResponseUser' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' /accounts/search: post: tags: - Accounts summary: UserSearch description: Search for a user by substrings of name, surname, and company. operationId: UserSearch consumes: - application/json produces: - application/json parameters: - in: body name: user required: true description: No elements are required. The name, surname, and company are used to constrain the search. schema: $ref: '#/definitions/User' responses: '200': description: New user successfully registered. schema: $ref: '#/definitions/ResponseUser' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' /accounts: get: tags: - Accounts description: Gets your profile. summary: UserGet operationId: UserGet responses: '200': description: New user successfully registered. schema: $ref: '#/definitions/ResponseUser' '400': description: Fail. schema: $ref: '#/definitions/ResponseBase' put: tags: - Accounts description: Updates your profile. summary: UserUpdateProfile operationId: UserUpdateProfile parameters: - name: user in: body required: true schema: $ref: '#/definitions/User' responses: '200': description: Things are looking good yo. schema: $ref: '#/definitions/ResponseBase' '400': description: Fail. schema: $ref: '#/definitions/ResponseBase' '/accounts/{userId}': get: tags: - Accounts summary: UserGetProfileById operationId: UserGetProfileById description: Gets a user's profile. parameters: - name: userId in: path required: true type: string responses: '200': description: New user successfully registered. schema: $ref: '#/definitions/ResponseUser' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' # CLIENTS /clients: get: tags: [ "Clients" ] summary: ClientGetAll operationId: ClientGetAll description: Gets a user's profile. responses: '200': description: All the users's clients. schema: $ref: '#/definitions/ResponseClient' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' post: tags: [ "Clients" ] summary: ClientCreate operationId: ClientCreate description: Create a client parameters: - name: client in: body required: true schema: $ref: '#/definitions/AppClient' responses: '200': description: All the users's clients. schema: $ref: '#/definitions/ResponseClient' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' '/clients/{clientId}': put: tags: [ "Clients" ] summary: ClientUpdate operationId: ClientUpdate description: Update a client parameters: - name: clientId in: path required: true type: string - name: client in: body required: true schema: $ref: '#/definitions/AppClient' responses: '200': description: All the users's clients. schema: $ref: '#/definitions/ResponseClient' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' get: tags: [ "Clients" ] summary: ClientGet operationId: ClientGet description: Get a client parameters: - name: clientId in: path required: true type: string responses: '200': description: The client. schema: $ref: '#/definitions/ResponseClient' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' delete: tags: [ "Clients" ] summary: ClientDelete operationId: ClientDelete description: Deletes a client parameters: - name: clientId in: path required: true type: string responses: '200': description: All good! schema: $ref: '#/definitions/ResponseBase' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' # PROJECTS /projects: get: tags: [ "Projects" ] summary: ProjectGetAll operationId: ProjectGetAll description: Gets a user's projects. responses: '200': description: All the users's projects. schema: $ref: '#/definitions/ResponseProject' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' post: tags: [ "Projects" ] summary: Create operationId: ProjectCreate description: Create a project parameters: - name: project in: body required: true schema: $ref: '#/definitions/Project' responses: '200': description: All the users's clients. schema: $ref: '#/definitions/ResponseProject' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' '/projects/{projectId}': put: tags: [ "Projects" ] summary: ProjectUpdate operationId: ProjectUpdate description: Update a project parameters: - name: projectId in: path required: true type: string - name: project in: body required: true schema: $ref: '#/definitions/Project' responses: '200': description: All the users's projects. schema: $ref: '#/definitions/ResponseProject' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' get: tags: [ "Projects" ] summary: ProjectGet operationId: ProjectGet description: Get a project parameters: - name: projectId in: path required: true type: string responses: '200': description: The client. schema: $ref: '#/definitions/ResponseProject' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' delete: tags: [ "Projects" ] summary: ProjectDelete operationId: ProjectDelete description: Deletes a project parameters: - name: projectId in: path required: true type: string responses: '200': description: All good! schema: $ref: '#/definitions/ResponseBase' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' # COMMENTS '/comments/{resourceType}/{resourceId}': post: tags: [ "Comments" ] summary: CommentCreate operationId: CommentCreate description: Creates a comment on a resource. parameters: - name: resourceType description: The resource type you want to comment on. in: path required: true type: string enum: ["stream", "object", "project", "comment" ] - name: resourceId description: The resource id you want to comment on. In the case of streams, it must be a streamId. in: path required: true type: string - name: comment in: body required: true schema: $ref: '#/definitions/Comment' responses: '200': description: All good! schema: $ref: '#/definitions/ResponseComment' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' get: tags: [ "Comments" ] summary: CommentGetFromResource operationId: CommentGetFromResource description: Gets the comments from a resource. parameters: - name: resourceType description: The resource type you want to comment on. in: path required: true type: string enum: ["stream", "object", "project", "comment" ] - name: resourceId description: The resource id you want to comment on. In the case of streams, it must be a streamId. in: path required: true type: string responses: '200': description: All good! schema: $ref: '#/definitions/ResponseComment' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' '/comments/{commentId}': get: tags: [ "Comments" ] summary: CommentGet operationId: CommentGet description: Gets a specific comment. parameters: - name: commentId in: path required: true type: string responses: '200': description: All good! schema: $ref: '#/definitions/ResponseComment' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' put: tags: [ "Comments" ] summary: CommentUpdate operationId: CommentUpdate description: Updates a comment. parameters: - name: commentId in: path required: true type: string - name: comment in: body required: true schema: $ref: '#/definitions/Comment' responses: '200': description: All good! schema: $ref: '#/definitions/ResponseBase' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' delete: tags: [ "Comments" ] summary: CommentDelete operationId: CommentDelete description: Deletes a specific comment. parameters: - name: commentId in: path required: true type: string responses: '200': description: All good! schema: $ref: '#/definitions/ResponseBase' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' # STREAMS /streams: get: tags: [ "Streams" ] summary: StreamsGetAll operationId: StreamsGetAll description: Gets a user's streams. responses: '200': description: All good! schema: $ref: '#/definitions/ResponseStream' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' post: tags: [ "Streams" ] summary: StreamCreate operationId: StreamCreate description: Create a stream parameters: - name: stream in: body required: true schema: $ref: '#/definitions/SpeckleStream' responses: '200': description: All good! schema: $ref: '#/definitions/ResponseStream' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' '/streams/{streamId}': get: tags: [ "Streams" ] summary: StreamGet operationId: StreamGet description: Gets a specific stream. parameters: - name: streamId in: path required: true type: string - name: query in: query type: string description: Specifiy which fields to retrieve, ie `?fields=layers,baseProperties`. responses: '200': description: All good! schema: $ref: '#/definitions/ResponseStream' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' put: tags: [ "Streams" ] summary: StreamUpdate operationId: StreamUpdate description: Updates a stream. parameters: - name: streamId in: path required: true type: string - name: stream in: body required: true schema: $ref: '#/definitions/SpeckleStream' responses: '200': description: All good! schema: $ref: '#/definitions/ResponseBase' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' delete: tags: [ "Streams" ] summary: StreamDelete operationId: StreamDelete description: Deletes a specific stream. parameters: - name: streamId in: path required: true type: string responses: '200': description: All good! schema: $ref: '#/definitions/ResponseBase' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' '/streams/{streamId}/objects': get: tags: ["Streams"] summary: StreamGetObjects operationId: StreamGetObjects description: Gets stream objects. parameters: - name: streamId in: path required: true type: string - name: query in: query type: string description: Specifiy which fields to retrieve, filters, limits, etc. responses: '200': description: All good! schema: $ref: '#/definitions/ResponseObject' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' '/streams/{streamId}/clone': post: tags: ["Streams"] summary: StreamClone operationId: StreamClone description: Clones a stream. parameters: - name: streamId in: path required: true type: string responses: '200': description: All good! schema: $ref: '#/definitions/ResponseStreamClone' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' '/streams/{streamId}/diff/{otherStreamId}': get: tags: ["Streams"] summary: StreamDiff operationId: StreamDiff description: Diffs two streams (objects and layers). parameters: - name: streamId in: path required: true type: string - name: otherStreamId in: path required: true type: string responses: '200': description: All good! schema: $ref: '#/definitions/ResponseStreamDiff' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' # OBJECTS /objects: post: tags: ["Objects"] summary: ObjectCreate operationId: ObjectCreate description: Create one or more objects parameters: - name: objects in: body schema: type: array items: $ref: '#/definitions/SpeckleObject' responses: '200': description: All the users's projects. schema: $ref: '#/definitions/ResponseObject' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' '/objects/{objectId}': put: tags: [ "Objects" ] summary: ObjectUpdate operationId: ObjectUpdate description: Update a object parameters: - name: objectId in: path required: true type: string - name: object in: body required: true schema: $ref: '#/definitions/SpeckleObject' responses: '200': description: All the users's projects. schema: $ref: '#/definitions/ResponseObject' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' get: tags: [ "Objects" ] summary: ObjectGet operationId: ObjectGet description: Get a object parameters: - name: objectId in: path required: true type: string responses: '200': description: The client. schema: $ref: '#/definitions/ResponseObject' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' delete: tags: [ "Objects" ] summary: ObjectDelete operationId: ObjectDelete description: Deletes an object parameters: - name: objectId in: path required: true type: string responses: '200': description: All good! schema: $ref: '#/definitions/ResponseBase' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' '/objects/{objectId}/properties': put: tags: ["Objects"] summary: ObjectUpdateProperties operationId: ObjectUpdateProperties description: Does a merge update of the object's properties. parameters: - name: objectId in: path required: true type: string - name: object in: body description: An object that holds the keys you want to modify or add. required: true schema: type: object responses: '200': description: All good! schema: $ref: '#/definitions/ResponseBase' '/objects/getbulk': post: tags: ["Objects"] summary: ObjectGetBulk operationId: ObjectGetBulk description: Gets a load of objects parameters: - name: query in: query required: false type: string description: Specifiy which fields to retrieve, filters, limits, etc. For example, `?fields=type,properties,hash&type=Circle` - name: object in: body description: An object that holds the keys you want to modify or add. required: true schema: type: array items: type: string responses: '200': description: All good! schema: $ref: '#/definitions/ResponseObject' '400': description: Fail whale. schema: $ref: '#/definitions/ResponseBase' definitions: ResourceBase: description: Base class that adds a set of simple properties related to authorisation and commenting to all applicable resources (not users). type: object properties: _id: type: string owner: type: string private: type: boolean anonymousComments: type: boolean canRead: type: array items: type: string canWrite: type: array items: type: string comments: description: An array of comment ids. type: array items: type: string deleted: description: Controls archival status - does not actually delete anything type: boolean default: false User: type: object description: Describes a user. properties: _id: type: string description: Database uuid. role: type: string description: User's role. Defaults to "user". avatar: type: string description: We will need profile pics at one point. apitoken: type: string description: a signed jwt token that expires in 1 year. token: type: string description: a signed jwt token that expires in 1 day. email: type: string description: user's email name: type: string description: User's given name surname: type: string description: User's family name company: type: string description: Users's company logins: type: array description: an array storing each time the user logged in. items: type: object properties: date: type: string description: it's a timestamp for each login. AppClient: description: A speckle client. allOf: - $ref: '#/definitions/ResourceBase' - properties: _id: type: string description: Database uuid. role: type: string description: Either Sender, Receiver or anything else you can think of. documentGuid: type: string documentName: type: string documentType: type: string documentLocation: type: string streamId: type: string description: The streamId that this client is attached to. online: type: boolean description: Is it accessible from the server or not? Project: description: A project contains a group of streams and users. allOf: - $ref: '#/definitions/ResourceBase' - properties: _id: type: string name: type: string number: type: string users: type: array items: type: string streams: type: array items: type: string subProjects: type: array items: type: string Comment: description: A comment/issue. allOf: - $ref: '#/definitions/ResourceBase' - properties: resource: type: object properties: resourceType: type: string resourceId: type: string text: type: string assignedTo: type: array items: type: string closed: type: boolean labels: type: array items: type: string view: type: object screenshot: type: string SpeckleStream: description: A stream is essentially a collection of objects, with added properties. allOf: - $ref: '#/definitions/ResourceBase' - properties: streamId: type: string description: The stream's short id. name: type: string description: The data stream's name objects: type: array description: An array of SpeckleObject ids. items: $ref: '#/definitions/SpeckleObject' layers: type: array description: An array of speckle layers. items: $ref: '#/definitions/Layer' baseProperties: description: Units, tolerances, etc. type: object globalMeasures: description: Any performance measures can go in here. type: object isComputedResult: type: boolean default: false viewerLayers: type: array items: type: object parent: type: string description: If this stream is a child, the parent's streamId. children: type: array description: An array of the streamId of any children of this stream. items: type: string ancestors: description: If resulting from a merge, the streams that this one was born out of. type: array items: type: string Layer: type: object properties: name: type: string description: Layer's name guid: type: string description: Layer's guid (must be unique) orderIndex: type: integer description: Describes this layer's position in the list of layers. startIndex: type: number description: The index of the first object relative to the stream's objects array objectCount: type: number description: How many objects does this layer have. topology: type: string description: String describing the nested tree structure (GH centric). properties: $ref: '#/definitions/LayerProperties' description: 'Describes a speckle layer. To assign objects to a speckle layer, you''ll need to start at `objects[ layer.startIndex ]` and finish at `objects[ layer.startIndex + layer.objectCount ]`.' LayerProperties: type: object properties: color: type: object properties: a: type: number description: alpha value default: 1 hex: type: string description: hex color value visible: type: boolean description: toggles layer visibility. pointsize: type: number description: defines point size in threejs linewidth: type: number description: defines line thickness in threejs shininess: type: number description: says it all. speckle is superficial. smooth: type: boolean description: smooth shading toggle showEdges: type: boolean description: display edges or not yo. wireframe: type: boolean description: i'm bored. description: 'Holds stream layer properties, mostly for displaying purposes. This object will be filled up with garbage from threejs and others, but below is a minimal schema.' # the base response class ResponseBase: type: object properties: success: type: boolean description: 'Besides the http status code, this tells you whether the call succeeded or not.' message: type: string description: Either an error or a confirmation. resource: type: object description: Returned resource (if querying by id) resources: type: array description: Returned resources array (if it's a bulk query) items: type: object ResponseUser: allOf: - $ref: '#/definitions/ResponseBase' - type: object properties: resource: $ref: '#/definitions/User' resources: type: array items: $ref: '#/definitions/User' ResponseClient: allOf: - $ref: '#/definitions/ResponseBase' - type: object properties: resource: $ref: '#/definitions/AppClient' resources: type: array items: $ref: '#/definitions/AppClient' ResponseProject: allOf: - $ref: '#/definitions/ResponseBase' - type: object properties: resource: $ref: '#/definitions/Project' resources: type: array items: $ref: '#/definitions/Project' ResponseComment: allOf: - $ref: '#/definitions/ResponseBase' - type: object properties: resource: $ref: '#/definitions/Comment' resources: type: array items: $ref: '#/definitions/Comment' ResponseStream: allOf: - $ref: '#/definitions/ResponseBase' - type: object properties: resource: $ref: '#/definitions/SpeckleStream' resources: type: array items: $ref: '#/definitions/SpeckleStream' ResponseObject: allOf: - $ref: '#/definitions/ResponseBase' - type: object properties: resource: $ref: '#/definitions/SpeckleObject' resources: type: array items: $ref: '#/definitions/SpeckleObject' ResponseStreamClone: allOf: - $ref: '#/definitions/ResponseBase' - type: object properties: clone: $ref: '#/definitions/SpeckleStream' parent: $ref: '#/definitions/SpeckleStream' ResponseStreamDiff: allOf: - $ref: '#/definitions/ResponseBase' - type: object properties: objects: type: object properties: common: type: array items: type: string inA: type: array items: type: string inB: type: array items: type: string layers: type: object properties: common: type: array items: $ref: '#/definitions/Layer' inA: type: array items: $ref: '#/definitions/Layer' inB: type: array items: $ref: '#/definitions/Layer' SpeckleObject: description: Base class that is inherited by all other Speckle objects. required: - type - hash discriminator: type allOf: - $ref: '#/definitions/ResourceBase' - properties: type: type: string description: Object's subtype enum: ['Null', 'Abstract', 'Placeholder', 'Boolean', 'Number', 'String', 'Interval', 'Interval2d', 'Point', 'Vector', 'Plane', 'Line', 'Rectangle', 'Circle', 'Arc', 'Ellipse', 'Polycurve', 'Box', 'Polyline', 'Curve', 'Mesh', 'Brep', 'Annotation', 'Extrusion'] hash: type: string description: Object's unique hash. example: hash geometryHash: type: string description: Object's geometry hash example: Type.hash applicationId: type: string example: GUID description: The id/guid that the origin application identifies this object by. name: type: string description: The name of the object in the origin application. This is the instance or entity name displayed in the "properties" dialog in most applications. properties: type: object description: The extra properties field of a speckle object. parent: type: string description: If this object is a child, the parent's objectid. children: type: array description: An array of the ids of any children of this object. items: type: string ancestors: description: If resulting from a merge, the objects that this one was born out of. type: array items: type: string transform: type: array items: type: number SpeckleAbstract: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Abstract _type: type: string description: the original type of the object assembly: type: string description: the original assembly of this object SpecklePlaceholder: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Abstract SpeckleBoolean: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Boolean value: type: boolean SpeckleNumber: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Number value: type: number description: A number. Can be float, double, etc. SpeckleString: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: String value: type: string description: A string. SpeckleInterval: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Interval start: type: number end: type: number SpeckleInterval2d: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: U: $ref: '#/definitions/SpeckleInterval' description: U interval. V: $ref: '#/definitions/SpeckleInterval' description: V interval. SpecklePoint: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Point value: description: An array containing the X, Y and Z coords of the point. type: array items: type: number SpeckleVector: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Vector value: description: An array containing the X, Y and Z coords of the vector. type: array items: type: number SpecklePlane: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Plane origin: $ref: '#/definitions/SpecklePoint' description: The origin of the plane. normal: $ref: '#/definitions/SpeckleVector' description: The normal of the plane. xdir: $ref: '#/definitions/SpeckleVector' description: The X axis of the plane. ydir: $ref: '#/definitions/SpeckleVector' description: The Y axis of the plane. SpeckleCircle: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Circle radius: type: number center: $ref: '#/definitions/SpecklePoint' normal: $ref: '#/definitions/SpeckleVector' domain: $ref: '#/definitions/SpeckleInterval' SpeckleArc: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Arc radius: type: number startAngle: type: number endAngle: type: number angleRadians: type: number plane: $ref: '#/definitions/SpecklePlane' domain: $ref: '#/definitions/SpeckleInterval' SpeckleEllipse: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Ellipse firstRadius: type: number secondRadius: type: number plane: $ref: '#/definitions/SpecklePlane' domain: $ref: '#/definitions/SpeckleInterval' SpecklePolycurve: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Polycurve segments: type: array items: $ref: '#/definitions/SpeckleObject' domain: $ref: '#/definitions/SpeckleInterval' SpeckleBox: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Box basePlane: $ref: '#/definitions/SpecklePlane' xSize: $ref: '#/definitions/SpeckleInterval' ySize: $ref: '#/definitions/SpeckleInterval' zSize: $ref: '#/definitions/SpeckleInterval' SpeckleLine: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Line value: type: array items: type: number domain: $ref: '#/definitions/SpeckleInterval' SpecklePolyline: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Polyline closed: type: boolean value: type: array items: type: number domain: $ref: '#/definitions/SpeckleInterval' SpeckleCurve: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Curve degree: type: number periodic: type: boolean rational: type: boolean points: type: array items: type: number weights: type: array items: type: number knots: type: array items: type: number domain: $ref: '#/definitions/SpeckleInterval' displayValue: $ref: '#/definitions/SpecklePolyline' SpeckleMesh: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Mesh vertices: type: array items: type: number description: The mesh's vertices array, in a flat array (ie, `x1, y1, z1, x2, y2, ...`) faces: type: array items: type: number description: The faces array. colors: type: array items: type: number description: If any, the colours per vertex. textureCoordinates: type: array items: type: number description: The faces array. SpeckleBrep: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: type: default: Brep rawData: type: object description: The brep's raw (serialisation) data. provenance: type: string description: A short prefix of where the base64 comes from. displayValue: $ref: '#/definitions/SpeckleMesh' description: Contains a speckle mesh representation of this brep. SpeckleExtrusion: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: capped: type: boolean profile: $ref: '#/definitions/SpeckleObject' pathStart: $ref: '#/definitions/SpecklePoint' pathEnd: $ref: '#/definitions/SpecklePoint' pathCurve: $ref: '#/definitions/SpeckleObject' SpeckleAnnotation: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: text: type: string textHeight: type: number fontName: type: string bold: type: boolean italic: type: boolean location: $ref: '#/definitions/SpecklePoint' plane: $ref: '#/definitions/SpecklePlane' SpeckleBlock: allOf: - $ref: '#/definitions/SpeckleObject' - type: object properties: blockName: type: string description: the name of the block definition used to insert this block description: type: string objects: type: array items: $ref: '#/definitions/SpeckleObject'