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
Time
Status
User Agent
Retrieving recent requests…
Loading…
Responses
400
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.
401
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.
403
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.
404
NOT_FOUND: location_id is no location the request can see.
413
TOO_LARGE: the JSON body is over 64 KB.
429
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.
500
INTERNAL_ERROR: an unexpected error. Retry, and quote meta.request_id to support if it persists.
503
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.