HomeGuidesAPI ReferenceChangelogDiscussions
Hire a ReactVision Expert 🛠️Launch Studio 🖥️Sponsor on GitHub ❤️Log In
API Reference

Create a scan

Secret key only. Scope: vps.

Also accepts a user token.

Creates a scan, awaiting_upload, of a known location (location_id) or of a new place (location), which it creates in the same call; a refused scan leaves no location behind. Then upload the recording with POST /vps/scans/{scan_id}/upload. Viro's uploadScanRecording() makes every call of a scan.

A scan is a recording from Viro's AR recorder (session.jsonl and video.mp4), zipped.

With x-app-user-id, or a user token, the scan belongs to that app user, who can scan only its own locations: a shared one answers 403 VPS_SHARED_LOCATION. The app user's scans count toward a daily limit of 10, unless the team set its own in the Editor.

Needs a paid plan. Processing is billed as compute time, only when the map is accepted. Not counted against the monthly API request quota.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Body Params

Send location_id to scan a known location, or location to scan a new place.

uuid

The location to scan.

location
object
outputs
array of strings

What to build besides the map, which is always built. semantic needs mesh. Default ["mesh"].

outputs
Allowed:
string
enum

How detailed the mesh is. low is quickest and builds no HD mesh; high uses full-resolution depth, a denser HD mesh and twice the texture resolution, and takes about 1.75 times as long to process, which is billed as compute. Default medium.

Allowed:
boolean

Default false: the recording is kept only while it is processed, never counts toward the storage quota, and the scan is never part of a merge. true keeps it, which a merge of the location's scans needs.

Headers
uuid
required

The project. With a client key or a bound secret key, the key's own project; with a user token, the token's project.

string
length between 1 and 255

Your id for the signed-in app user: 1 to 255 printable ASCII characters, no spaces, not . or ... With a secret key, the request acts for that app user: it sees the app user's locations and scans and the shared ones, and changes only the app user's own. With a user token, leave it out or send the token's own app user; another one answers 403 APP_USER_MISMATCH. A client or legacy key cannot send it (403 APP_USER_ID_NOT_ALLOWED).

Responses

awaiting_upload.

MISSING_PROJECT_ID: no x-project-id header.

INVALID_PROJECT_ID: x-project-id is not a UUID.

INVALID_APP_USER_ID: x-app-user-id is not 1 to 255 printable ASCII characters without spaces, or is . or ...

BAD_REQUEST: the body is not a JSON object, it has neither location_id nor location, the new location's name, lat or lon is not valid, outputs is not a list of mesh, splat and semantic (or has semantic without mesh), mesh_quality is not low, medium or high, or keep_recording is not a boolean.

INVALID_BODY: the new location's name is refused by the database's check.

MISSING_API_KEY: no x-api-key header and no user token.

INVALID_API_KEY_FORMAT: the key is not rv_live_, rv_client_ or rv_secret_ followed by 64 lowercase hexadecimal characters.

INVALID_SESSION_FORMAT: the Authorization header is not Bearer followed by a user token.

INVALID_API_KEY: no such key, or a key sent with the wrong prefix for its type.

API_KEY_EXPIRED: the key is past its expiry date.

INVALID_APP_USER_TOKEN: the user token is not valid, or the secret key that minted it has been deleted or has expired.

APP_USER_TOKEN_EXPIRED: the user token has expired. Get a new one from your backend.

INVALID_SESSION: a Bearer token that is neither a user token nor a ReactVision Editor session.

API_KEY_TYPE_NOT_ALLOWED: a client key or a legacy key. This operation needs a secret key or a user token.

PROJECT_NOT_FOUND: the project does not exist.

PROJECT_ACCESS_DENIED: the project belongs to another team, is not the project the key is bound to, or is not the user token's project.

APP_USER_ID_NOT_ALLOWED: a client or legacy key sent x-app-user-id. Use a user token, or a secret key on your backend.

APP_USER_MISMATCH: a user token sent an x-app-user-id other than its own app user.

VPS_SHARED_LOCATION: an app user changing a shared location or scan.

PAID_PLAN_REQUIRED: the team is on the Free plan, or its plan ended.

COMPUTE_BILLING_NOT_SET_UP: the team's plan has no payment method that can be charged.

COMPUTE_PAYMENT_FAILED: the team's last compute usage invoice is unpaid.

COMPUTE_SPEND_LIMIT_REACHED: this usage period's compute spend (Advanced VPS, environment renders and co-location) is at the team's limit.

STORAGE_LIMIT_REACHED: the team's storage quota is used up.

NOT_FOUND: location_id is no location the request can see.

TOO_LARGE: the JSON body is over 64 KB.

RATE_LIMITED: for a secret key, more than 1,200 requests a minute across all operations. Wait the number of seconds in Retry-After. See Limits.

VPS_USER_LIMIT_REACHED: the app user has started as many scans today (UTC) as the team allows.

INTERNAL_ERROR: an unexpected error. Retry, and quote meta.request_id to support if it persists.

AUTH_UNAVAILABLE: the key or user token could not be checked. Retry; this does not mean it is invalid.

VPS_LOOKUP_FAILED: the records could not be read or written. Retry.

COMPUTE_BILLING_UNAVAILABLE: the team's billing could not be checked. Retry.

Language
Credentials
LoadingLoading…
Response
Choose an example:
application/json