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