Skip to content

Robots_PrepareRobotModelImport

POST
/v1/accounts/{account}/robots/{robot}/model:prepareImport
curl --request POST \
--url https://junction-api.qualiastudios.dev/v1/accounts/example/robots/example/model:prepareImport \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <X-API-Key>' \
--data '{ "name": "example", "filename": "example", "sizeBytes": "example" }'

Starts a model import: returns a short-lived signed URL to PUT the file to, and the object reference ImportRobotModel then takes. Nothing changes until the import.

account
required
string

The account id.

robot
required
string

The robot id.

Media type application/json

Request for Robots.PrepareRobotModelImport.

object
name
required

Accounts/{account}/robots/{robot}/model

string
filename
required

The file name it was picked as, e.g. “openarm_v20.urdf” or “rizon.zip”: the URDF alone, or a .zip of the URDF and its meshes (the package directory).

string
sizeBytes
required

Its size in bytes; at most 256 MiB (268435456), else INVALID_ARGUMENT. The bucket refuses uploads over 256 MiB, and ImportRobotModel refuses an upload whose stored size differs from this one.

string
Example generated
{
"name": "example",
"filename": "example",
"sizeBytes": "example"
}

OK

Media type application/json

Response for Robots.PrepareRobotModelImport.

object
uploadUri

Signed URL to PUT the file to, valid for 2 hours (the lifetime Supabase Storage fixes for signed upload URLs).

string
object

The object reference to pass to ImportRobotModel.

string
expireTime

When upload_uri stops working.

string format: date-time
Example generated
{
"uploadUri": "example",
"object": "example",
"expireTime": "2026-04-15T12:00:00Z"
}

Default error response

Media type application/json
One of:
API error

A refusal from the API itself.

object
code
required

The gRPC code name in upper case, e.g. NOT_FOUND.

string
message
required
string
retryable
required

Whether the same call may succeed if retried.

boolean
details
required

Empty, except when a dataset copy or move is refused: then one google.rpc.ErrorInfo with the refusal’s reason code, its domain and, in metadata, the datasets it names.

Array<object>
object
Example generated
{
"code": "example",
"message": "example",
"retryable": true,
"details": [
{}
]
}