API error reference
Every error response is JSON: {"code", "message", "detail", "remedy_url"}. code is stable; message is for people. Each remedy_url points to its entry below.
access_denied- The person denied the sign-in, or the account cannot sign in. What to do: Start again with a new code if it was a mistake.
account_incomplete- This account has not confirmed an email address and a mobile number yet. What to do: Open `detail.next` in a browser and confirm the steps listed in `detail.missing`; API keys are not affected.
alias_starts_with_symbol- A roster alias starts with = + - or @, which a spreadsheet reads as a formula. What to do: Rename that student, for example by adding a letter first, and import again.
alpha_keys_retired- Alpha access keys no longer exist; an operator approves each new account instead. What to do: Create your account at /login/?tab=create; we email you when you are approved.
already_finalized- The sample has already been completed or rejected. What to do: Create a new sample instead of completing this one again.
already_invited- That address already has a pending invitation. What to do: Use Resend on the pending invitation instead of inviting again.
already_joined- That student has already joined with their code, so their seat has no code to replace or revoke. What to do: Nothing to do: the student can sign in with the password they chose.
already_member- That person is already a member of this organisation. What to do: Nothing to do; change their role from the member list if needed.
- The person has not approved the sign-in in their browser yet. What to do: Keep polling `/auth/device/token` at the `interval` you were given.
axis_value_out_of_range- A row has a value that is not a finite number. What to do: Remove infinities and NaN on the row named.
- Live billing is not enabled on this deployment. What to do: Use test mode, or contact the operator.
blob_no_longer_matches_import- The uploaded file changed after the import was validated. What to do: Start the import again with the file you intend.
blob_not_found- No upload exists at the sample's storage key. What to do: PUT the payload to the presigned URL first, then call complete.
board_sizes_not_supported_for_model_block- Board sizing is not available for this model. What to do: Use a supported model.
budget_too_small- The budget cannot cover even the cheapest trial. What to do: Raise the budget.
cannot_recompute_sizes- Board sizes could not be recomputed. What to do: Retrain the recipe, then retry.
captcha_failed- The security check on the sign-in form did not finish. What to do: Wait for the check to complete in the browser, then sign in again. API clients should use an API key instead.
code_busy- Another change to this student's join code was made at the same moment. What to do: Reload the Classroom page and try again.
column_reused- The label and group columns are the same. What to do: Choose two different columns.
conformance_build_failed- The model's reference build failed. What to do: Retrain and retry; if it persists, report it with the message.
conformance_not_supported- This model cannot be conformance-tested on a bench. What to do: The bench compares class ids; use a classifier.
cross_project_diff- The two versions belong to different projects. What to do: Compare versions from the same project.
cursor_filter_mismatch- The cursor was issued for different filters. What to do: Repeat the same filters you used for the first page.
dataset_in_use- A model was trained on this dataset, so it is kept as a record. What to do: Archive it instead of deleting it, or duplicate it to change its cleaning.
dataset_name_taken- Another dataset of this project already has that name. What to do: Choose a different name.
deployment_failed- This deployment is marked failed. What to do: Use Deploy again to start a new deployment.
description_invalid- The description is not text. What to do: Send text.
description_required- No description was given. What to do: Describe the project in a sentence.
description_too_long- The description is too long. What to do: Shorten it to the stated limit.
device_code_expired- The code on the approval page has expired. What to do: Start signing in again in the app to get a new code.
- A sign-in code could not be issued just now. What to do: Try again in a moment.
device_code_used- The code on the approval page was already approved or denied. What to do: Start signing in again in the app if you still need to.
device_mismatch- This session is already connected from another device. What to do: Start a new session from the desktop to connect a different phone.
duplicate_alias- Two students share an alias. What to do: Make every alias unique within the class.
duplicate_axis_column- A column is listed twice as an axis. What to do: List each axis column once.
duplicate_too_large- The project has more recordings than one duplicate can copy. What to do: Duplicate without recordings, or export the recordings first.
email_not_confirmed- This sign-up has not confirmed its email address. What to do: Open `detail.next` and enter the 6-digit code we emailed you; Resend is on that page.
empty_group_key- A row's group value is empty. What to do: Fill the group column on the row named, or choose another column.
expired_token- The sign-in request expired before it was approved (10 minutes). What to do: Ask for a new code and show it again.
explorer_not_supported_for_block- The data explorer works on photo features only. What to do: Open the explorer on a vision project.
feature_computation_failed- Features could not be computed from the samples. What to do: Check the samples are complete and readable, then retry.
fit_not_supported_for_dsp_block- Fit is not available for this feature block. What to do: Choose a supported block.
fit_not_supported_for_model_block- Fit is not available for this model. What to do: Choose a supported model.
grid_locator_needs_greyscale- Grid Locator works on greyscale photos. What to do: Set Colour to greyscale.
idempotency_key_conflict- This Idempotency-Key was used for a different request. What to do: Use a fresh key for a different request, or resend the original.
inconsistent_target- Rows of one recording carry different target values. What to do: Give every row of a recording the same target.
insufficient_scope- This app sign-in was not approved to do that. What to do: Sign the app in again and approve the upload access it asks for.
invalid_action- The bulk action is unknown. What to do: Use `relabel` or `delete`.
invalid_against- `against` is not an integer id. What to do: Send the id of the model version to compare with.
invalid_api_key- The API key is unknown or has been revoked. What to do: Create a new key under Account → API keys and send it as a Bearer token.
invalid_archived- `archived` must be true or false. What to do: Send exactly `true` to archive or `false` to restore.
invalid_bench_key- The hardware bench key is unknown or revoked. What to do: Issue a new bench key and restart the bench client with it.
invalid_body_shape- The JSON body is not an object. What to do: Wrap the fields in a single JSON object `{...}`.
invalid_box- The box geometry is not valid. What to do: Use fractions 0–1 with a positive size inside the image.
invalid_budget- The GPU-minute budget is not above zero. What to do: Set a positive budget.
invalid_bytes- `bytes` is negative. What to do: Send the real object size in bytes.
invalid_class_counts- Class counts must be positive integers. What to do: Send positive integers.
invalid_cleaning- A dataset cleaning step is unknown or has a wrong setting. What to do: Fix the step the message names; the screen shows the allowed steps.
invalid_client_name- The app name is not plain text of at most 80 characters. What to do: Send a short name such as `Upstratus desktop`.
invalid_combination- Two filters contradict each other. What to do: Remove `label` or `unlabeled=true`.
invalid_copy- Cannot copy boxes from the same image. What to do: Choose a different source image.
invalid_credentials- The username or password was wrong. What to do: Check both and try again; passwords are case-sensitive.
invalid_cursor- The paging cursor is malformed. What to do: Start again without a cursor and follow `next_cursor` from each response.
invalid_declared_hz- The sample rate is not a whole number in the allowed range. What to do: Enter readings per second between the bounds in the message, or leave it empty.
invalid_description- The description is not text, or is too long. What to do: Send text of at most the stated length.
invalid_device_code- The device code is unknown or was already exchanged for a token. What to do: Start again from `/auth/device/code`; each code works once.
invalid_dsp_params- A feature parameter is out of range. What to do: Use values within the ranges shown on Design.
invalid_email- The address is not a valid email address, or is too long. What to do: Send a single address such as `name@example.com`.
invalid_ended- `ended` must be true or false. What to do: Send exactly `true` when the session is over.
invalid_event- That funnel event cannot be reported by a client. What to do: Report only an event listed in the message; the server records the others itself.
invalid_field- A field has a value this endpoint does not accept. What to do: Fix the field named in `detail.field` and resend.
invalid_fit_params- The Fit request is missing required fields. What to do: Send `model_block` and `labels`.
invalid_ids- `ids` is not a list. What to do: Send a JSON list of sample ids.
invalid_include_recordings- `include_recordings` must be true or false. What to do: Send `true` to copy the recordings too, or `false`.
invalid_join_code- The join code is wrong or was already used. What to do: Check the code on the printed sheet; ask the teacher for a new roster import if it was used.
invalid_json- The request body is not valid JSON. What to do: Send well-formed JSON with `Content-Type: application/json`.
invalid_label- The label is empty or not text. What to do: Send a non-empty string label.
invalid_labels- The label list has a blank, too long or repeated name, or too many names. What to do: Fix the label named in the message; names ignore capital letters when compared.
invalid_limit- `limit` is below 1. What to do: Send 1 or more.
invalid_modality- The modality is not one this product supports. What to do: Use one of the values listed in `detail.known_modalities`.
invalid_model_hparams- A model setting is out of range. What to do: Use values within the ranges shown on Design.
invalid_name- The name is empty or not text. What to do: Send a non-empty string.
invalid_notes- The notes are not text, or are too long. What to do: Send text of at most the stated length.
invalid_offset- `offset` is negative. What to do: Send 0 or more.
invalid_org- `org_id` is missing, is not a number, or is not an organisation you belong to. What to do: List yours with `GET /orgs/mine` and send one of those ids.
invalid_percentile- The threshold percentile is out of range. What to do: Choose a percentile within the range in the message.
invalid_project- The project id is not an integer. What to do: Send the numeric project id.
invalid_qat_flag- `qat` is not true or false. What to do: Send a JSON boolean.
invalid_rejected- `rejected` must be `true` or `false`. What to do: Send exactly `true` or `false`.
invalid_result- A bench result was not a JSON object. What to do: Report a JSON object.
invalid_results- The Monitor results were malformed or too many at once. What to do: Send up to the stated number of results with index, expected, got and latency_ms.
invalid_role- The role is not one this action can set. What to do: Invite as `admin`, `member` or `viewer`; an owner can set `owner`, `admin`, `member` or `viewer` on an existing member.
invalid_serial_number- The serial number is not text. What to do: Send the serial number as text, or leave it out.
invalid_signature- The webhook signature did not verify. What to do: Resend from the payment provider with the correct signing secret.
invalid_since_seq- `since_seq` is negative. What to do: Send 0 or more.
invalid_spec- The project document could not be applied. What to do: Fix the line named in `detail.line`; nothing was saved.
invalid_state- The deployment state is not one of planned, packaged, flashed, verified or failed. What to do: Send one of those states.
invalid_target- The target is not a finite number. What to do: Send a number, or null to clear it.
invalid_token- The app sign-in token is unknown or has been revoked. What to do: Sign the app in again; the person can also revoke it from Account.
invalid_unlabeled- `unlabeled` must be `true` or `false`. What to do: Send exactly `true` or `false`.
invalid_window_ms- The window length is not a whole number in the allowed range. What to do: Enter milliseconds between the bounds in the message, or leave it empty.
invite_closed- That invitation was already accepted or revoked. What to do: Invite the person again if they still need to join.
invite_expired- That invitation expired (they last 7 days). What to do: Ask an owner or admin to resend it; the old link then stops working.
invite_limit- Too many invitations, or this one was sent a moment ago. What to do: Revoke old invitations, or wait the time in the message, then try again.
invite_revoked- That invitation was withdrawn by the organisation. What to do: Ask them to send a new invitation.
invite_used- That invitation has already been used. What to do: The person is already in the organisation; sign in to continue.
job_not_claimed- The bench no longer holds this job's lease. What to do: Stop work; the job was reassigned.
job_not_done- The training job has not finished. What to do: Wait until it is Done.
last_owner- An organisation must keep at least one owner. What to do: Make someone else an owner first, then try again.
lease_lost- The lease expired before the result arrived. What to do: Stop work and claim a new job.
missing_against- `?against=` is required. What to do: Add `?against=<model_version_id>`.
missing_bench_key- A bench request carried no key. What to do: Send `Authorization: Bearer <bench key>`.
missing_field- A required field is missing or empty. What to do: Add the field named in the message.
missing_user_agent- The connecting client sent no User-Agent. What to do: Open the link in a normal browser.
modality_mismatch- The block does not support this project's data type. What to do: Choose a block marked for the project's modality.
monitor_not_available- Live checking is not available for this model version. What to do: Read the message: some model types answer with a score or map the check cannot compare yet.
no_axis_columns- No axis columns were chosen. What to do: Choose at least one numeric column.
no_blob- The sample has no stored recording. What to do: Re-record or re-import it; there is nothing to download.
no_boxes_labelled- Grid Locator needs at least one drawn box. What to do: Open Label, View a photo and draw a box around each object.
no_modality- The project has no data type chosen. What to do: Choose what kind of data the project holds.
no_recipe_to_recompute_from- The version has no recipe to rebuild from. What to do: Train a new version from a recipe.
no_samples- The project has no labelled data. What to do: Record and label data first.
no_samples_to_size_from- There are no complete samples to size from. What to do: Record samples first.
no_sizes_to_recompute- The version has no real training run to size. What to do: Train it first.
no_trained_weights- This model version has no trained weights. What to do: Train the model first; there is nothing to package yet.
non_numeric_value- A row has a non-numeric axis value. What to do: Fix the value on the row named.
normal_label_not_found- No complete recordings carry the chosen normal label. What to do: Pick a label that has recordings.
not_a_classifier_job- Explanations exist only for classifier models. What to do: Use a classifier job.
not_a_manager- Only an owner or admin of the organisation can do that. What to do: Ask an owner or admin, or switch to an organisation you manage.
not_a_vision_project- Bounding boxes exist only on photo projects. What to do: Use a vision project.
not_allowed_for_students- A student account in a classroom cannot change the plan or the roster. What to do: Ask the teacher who manages the classroom.
not_an_anomaly_model- Only anomaly detectors have a threshold. What to do: Use an anomaly model version.
not_an_education_org- This organisation is not a classroom. What to do: Sign up as a classroom to use rosters.
not_an_owner- Only an owner can change roles. What to do: Ask an owner of the organisation to make the change.
not_complete- The import has not finished validating. What to do: Wait for it to complete, then apply it.
not_found- An id does not exist in your organisation. What to do: Reload the list and use ids from it.
not_removable- That member cannot be removed by you. What to do: Admins can remove members, not owners or other admins; classroom seats are managed from the roster.
nothing_to_change- The request named no field to change. What to do: Send at least one of the fields the message lists.
nothing_to_copy- The source image has no boxes. What to do: Pick an image that has boxes.
phone_package_not_ready- This phone package is not built and verified yet. What to do: Wait for the build to finish (or build it again if it failed), then ask for the phone link.
phone_unsupported- This model cannot run on a phone as built. What to do: Train a window-statistics (tiny conv1d) model on 3-axis motion, or pick a board.
pii_column_refused- The roster has a column that holds student personal data. What to do: Remove the named column; a roster takes only alias and group.
preview_not_supported_for_block- This block has no preview yet. What to do: Choose a block with a preview, or continue without.
project_not_yours- That project is not one you can give an app access to. What to do: Approve it from an account that belongs to the project's organisation, or deny it.
qat_not_applicable- Quantisation-aware retraining does not apply to this model. What to do: Only classifier models have it; omit `qat`.
quota_exhausted- Your plan's allowance for this resource is used up. What to do: Wait for the next period, or upgrade the plan under Account.
rate_limited- Too many attempts from this address in a short window. What to do: Wait the number of seconds in `Retry-After`, then retry.
request_required- No request text for the snippet. What to do: Describe what to add or change.
request_too_long- The request is too long. What to do: Shorten it to the stated limit.
reserved_box_class- A box class uses the reserved name for 'no object'. What to do: Rename those boxes.
roster_needs_alias- The roster has no alias column. What to do: Make the first row `alias,group` (group optional).
roster_too_large- The roster has more students than a class holds. What to do: Import the class in smaller files.
run_already_active- An Autopilot run is already in progress for this project. What to do: Wait for it, or stop it.
session_ended- This Monitor session has already ended. What to do: Start a new session to record more results.
short_code_exhausted- Could not allocate a collect-session code. What to do: Retry in a moment; if it persists, report it.
signup_on_page- Accounts are created on the sign-up page while Upstratus is in Alpha. What to do: Open /login/?tab=create in a browser; we email you once your account is approved.
slow_down- The app polled faster than the allowed interval. What to do: Wait the larger `detail.interval` seconds between polls from now on.
spec_changed- The project changed after you opened the YAML. What to do: Copy your edits, choose Undo my edits to load the latest, and apply them again.
state_backwards- A deployment only moves forward. What to do: Leave it as it is, or start a new deployment with Deploy again.
- The recordings could not be copied in storage, so nothing was duplicated. What to do: Try again in a minute, or duplicate without recordings.
targets_missing- Some recordings have no target value. What to do: Set a target on each recording on the Label screen, then train.
token_expired- The QR code has expired. What to do: Show a fresh QR code on the desktop and scan it again.
token_invalid- The QR code is no longer valid. What to do: Show a fresh QR code on the desktop and scan it again.
token_required- This route accepts only a signed-in app token. What to do: Send `Authorization: Bearer upt_...`; a browser session is not accepted here.
too_few_normal_sessions- Too few separate sessions of normal data. What to do: Record more separate sessions of the normal label.
too_few_sessions- Too few separate sessions to hold one out. What to do: Record more separate sessions.
too_many_boxes- The image already holds the maximum number of boxes. What to do: Delete a box before adding another.
too_many_ids- More ids than one request may carry. What to do: Split the request into batches under the stated maximum.
unknown_board- The board id is not a supported board. What to do: Use an id from the board list.
unknown_column- A named column is not in the uploaded file. What to do: Pick columns from the list the import showed.
unknown_device- That board is not registered in your workspace. What to do: Add it under Devices first, then choose it.
unknown_dsp_block- The feature block name is not known. What to do: Pick one from the Design screen.
unknown_model_version- That model version is not part of this project. What to do: Pick a version listed under Evaluate for this project.
unknown_plan- The plan is not one that can be purchased. What to do: Choose a paid plan from the plan list.
unknown_project- That project is not in your workspace. What to do: Pick a project from your project list.
unsupported_anomaly_features- Anomaly detection needs window-statistics features. What to do: Choose Window statistics.
unsupported_board_for_snippet- Integration examples exist only for some boards. What to do: Choose the Nano 33 BLE or the ESP32-S3.
unsupported_kind- The import kind is not supported. What to do: Use a supported import kind (CSV).
unsupported_recipe- These features and this model cannot be trained together yet. What to do: Pick one of the pairs in `detail.trainable_recipes` in Design.
unsupported_regression_features- Value prediction needs window-statistics features. What to do: Choose Window statistics.
username_taken- That username already exists. What to do: Choose another, or sign in if the account is yours.
value_too_long- A value is longer than the field allows. What to do: Shorten it to the maximum in the message.
version_has_no_model- That model version has no trained model to use. What to do: Make a version with metrics current; this run had too few samples to train.
viewer_read_only- You have a viewer seat in this organisation: you can look at everything and change nothing. What to do: Ask an owner to make you a member, or switch to an organisation where you can make changes.
weak_password- The password does not meet the password rules. What to do: Use a longer, less common password; the sign-up form lists the rules.
webhook_not_configured- The webhook secret is not configured on the server. What to do: Operator: set STRIPE_WEBHOOK_SECRET.
wrong_account- This invitation was sent to a different email address than the account you are signed in with. What to do: Sign out and sign in (or sign up) with the invited address.
wrong_project- This app was approved for a different project. What to do: Use the project named when you approved the app, or sign in again for the new one.