# Object Upload

To create a new Object for tracking using the upload API, make a POST request to **/v1/vps/object** with your authentication token, providing the object name, tracking type (full for 360-degree tracking or side for side-view only), and source details including the file type (glb or gltf), provider (web), and coordinate system (RHS for right-handed or LHS for left-handed).

The API will respond with a pre-signed S3 upload URL, unique object ID, and object code. Use the returned uploadUrl to upload your 3D model file directly to S3 via a PUT request with Content-Type: application/octet-stream. Once uploaded, the system will automatically process the model for Object tracking.

## Create a new ModelSet object

> Creates a new ModelSet object and returns a pre-signed URL for uploading the 3D model file.\
> The model file should be uploaded to the returned uploadUrl using a PUT request.\
> \
> \*\*Workflow:\*\*\
> 1\. Call this endpoint to create the object and get an upload URL\
> 2\. Upload the model file (.glb or .gltf) to the uploadUrl using PUT request with Content-Type: application/octet-stream\
> 3\. The system will process the uploaded file for VPS tracking<br>

```json
{"openapi":"3.0.3","info":{"title":"MultiSet ModelSet Upload API","version":"1.0.0"},"tags":[{"name":"ModelSet","description":"ModelSet upload and creation operations"}],"servers":[{"url":"https://api.multiset.ai","description":"Production server"}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"JWT token obtained from authentication"}},"schemas":{"CreateVPSObjectRequest":{"type":"object","required":["objectName","trackingType","source"],"properties":{"objectName":{"type":"string","description":"Name of the ModelSet object","minLength":1,"maxLength":255},"trackingType":{"type":"string","enum":["full","side"],"description":"Type of tracking to be performed:\n- `full`: 360-degree tracking (all angles)\n- `side`: Side-view tracking only\n"},"source":{"type":"object","required":["provider","fileType","coordinateSystem"],"properties":{"provider":{"type":"string","enum":["web"],"description":"Source provider (currently only 'web' is supported)"},"fileType":{"type":"string","enum":["glb","gltf"],"description":"3D model file format:\n- `glb`: Binary GLTF format (recommended)\n- `gltf`: Text-based GLTF format\n"},"coordinateSystem":{"type":"string","enum":["RHS","LHS"],"description":"Coordinate system of the 3D model:\n- `RHS`: Right-handed coordinate system\n- `LHS`: Left-handed coordinate system\n"}}}}},"CreateVPSObjectResponse":{"type":"object","required":["message","objectCode","objectId","uploadUrl"],"properties":{"message":{"type":"string","description":"Success message"},"objectCode":{"type":"string","description":"Unique code for the object"},"objectId":{"type":"string","description":"Unique identifier for the object"},"uploadUrl":{"type":"string","format":"uri","description":"Pre-signed S3 URL for uploading the 3D model file.\nUse PUT request to upload the file to this URL.\n"}}},"Error":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Error message"}}}}},"paths":{"/v1/vps/object":{"post":{"tags":["ModelSet"],"summary":"Create a new ModelSet object","description":"Creates a new ModelSet object and returns a pre-signed URL for uploading the 3D model file.\nThe model file should be uploaded to the returned uploadUrl using a PUT request.\n\n**Workflow:**\n1. Call this endpoint to create the object and get an upload URL\n2. Upload the model file (.glb or .gltf) to the uploadUrl using PUT request with Content-Type: application/octet-stream\n3. The system will process the uploaded file for VPS tracking\n","operationId":"createVPSObject","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVPSObjectRequest"}}}},"responses":{"200":{"description":"ModelSet object created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVPSObjectResponse"}}}},"400":{"description":"Bad request - Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized - Invalid or missing authentication token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```
