Errors
Every error is an RFC 9457 problem with code, detail, remedy and, when one argument is at
fault, field (in the names this API uses). Read code and follow remedy. A refusal is not an
error: it is an answer with state: "refused" (The answer state).
This page is generated from the source (npm run docs:build); "…" stands for the value in your
request. The engine's own codes, such as row_not_scoreable and model_ref_missing, arrive in
the same form with their own remedy; Ship a product covers the ones a scheduled job meets.
Retry only rate_limited (after retry_after_ms) and the 502, 503 and 504 statuses; the SDKs do
this for you on calls that are safe to repeat.
| Code | HTTP | Means | What to do |
|---|---|---|---|
answer_expired |
410 | This … belongs to an answer that is no longer kept (answers are kept 24 hours). | Ask again. The fit is cached by the record's content, so the same record does not fit again. |
columns_differ |
422 | These columns are not in the dataset: …. | Send rows with the dataset's columns: …. |
concurrent_append |
409 | Rows were still being added to this dataset. | Ask again once the appends have finished. |
csv_empty |
422 | The first piece has a header but no rows. | Upload a CSV with at least one row. |
csv_unreadable |
422 | The CSV has an unterminated quoted field. | Check the file's quoting and resend. |
cursor_invalid |
422 | This cursor is not one Datagoat issued to this workspace, or it was altered. | Pass page.next_cursor exactly as the previous response gave it. |
dataset_awaiting_upload |
409 | This dataset's upload is still in progress (… piece… so far). | Wait until the upload page says the upload is done, then ask again. |
dataset_sealed |
409 | This dataset has been asked about or preflighted, so it takes no more rows. | Create a new dataset for the new rows (a changed table is a new record), then ask with refit_of to link the two. |
delete_failed |
503 | The dataset's rows could not be deleted from storage just now; nothing was changed. | Retry dg_delete_dataset. The dataset is also deleted automatically 24 hours after its last use. |
engine_outdated |
503 | The analysis engine does not serve ask yet. | Datagoat is being updated. Retry in a few minutes. |
engine_unavailable |
502 | The analysis engine refused the platform's credential. | This is a Datagoat configuration fault, not your request. Retry later. |
fetch_failed |
422 | Could not download …. | Check the URL is reachable from the public internet. |
fetch_header_refused |
422 | The header … may not be set. | Remove it and resend. |
fetch_redirect_refused |
422 | fetch_url redirected; redirects are not followed. | Send the final URL. |
fetch_too_large |
413 | The file is larger than … bytes. | Use dg_add_dataset with upload: true for large files. |
fetch_url_invalid |
422 | fetch_url is not a URL. | Send a full https URL. |
fetch_url_refused |
422 | fetch_url must use https. | Serve the file over https. |
fetch_url_unresolvable |
422 | … does not resolve. | Check the host name. |
horizon_budget_exhausted |
422 | … | Ask again at a horizon already tried on this record, or choose the horizon from what the outcome means before reading. Trying horizons until one clears manufactures a finding. |
idempotency_conflict |
409 | This idempotency_key was used for a different request. | Use a new idempotency_key for a new request. |
internal |
500 | … | Retry. If it persists, contact support with the request_id. |
invalid_request |
422 | … | Fix the argument named in field (or in detail) and resend. Retrying unchanged returns the same answer. |
lever_token_invalid |
422 | This lever_token is not one Datagoat issued, or it was altered. | Pass lever_token exactly as it appeared in the answer's levers. |
missing_credential |
401 | This connection is not signed in. | Reconnect Datagoat and sign in, or send a dgk_ key as a Bearer token. |
model_outcome_unknown |
422 | Datagoat has no record of the outcome column … learned, and a traces reading needs it. | Ask once with the model's record and its outcome_column (the fit is reused), then ask by model_ref again. |
model_readings_differ |
422 | These models were fitted on records read with different columns, so one reading of this record cannot serve them all. | Ask about each model in its own call. |
namespace_ambiguous |
422 | These models belong to different namespaces: …. | Ask about each namespace's models in its own call. |
namespace_mismatch |
422 | … belongs to …, not namespace "…". | Send namespace "…", or omit namespace: follow-up calls find a model's namespace themselves. |
option_column_missing |
422 | "…" is not a column of the data. | Name a column of the data. |
outcome_column_missing |
422 | "…" is not a column of the data. | Name one of: …. |
outcome_constant |
422 | "…" holds a single value (…), so nothing can be learned about it. | Name an outcome column that holds both yes and no cases. |
outcome_not_binary |
422 | "…" has more than 12 distinct values, so it is not a yes/no outcome. | Name a column with two values, or pass positive_values listing the values that mean yes. |
payment_past_due |
402 | The last payment for this workspace failed. | Add a card at https://datagoat.io/billing, or use a sample. |
payment_required |
402 | Asking about your own data needs a card on file. | Add a card at https://datagoat.io/billing, or use a sample. |
piece_empty |
422 | This piece has a header but no rows. | Send only pieces with rows. |
piece_index_invalid |
422 | index must be a whole number from 0 to …. | Send pieces in order from 0. |
piece_out_of_order |
409 | The next piece this dataset expects is …. | Send piece … next. |
piece_too_large |
413 | A piece is at most … bytes. | Split the file into smaller pieces. |
positive_values_differ |
422 | The option outcome columns use different values for yes. | Pass positive_values naming the yes value(s) they share. |
positive_values_required |
422 | Datagoat cannot tell which value of "…" means yes. Its values are: …. | Pass positive_values, e.g. ["…"]. |
post_value_unreadable |
422 | The new value can't be compared with the lever's target. | Send post_value in the record's units: a number for a numeric feature, a category for a categorical one. |
profile_unavailable |
422 | Datagoat has not seen this table's values (it went straight to storage through upload_url), so it cannot list candidate questions. | Store the table with rows, csv, fetch_url or the upload page, then call dg_suggest again. |
rate_limited |
429 | This workspace has used its requests for this minute. | Wait … second… (retry_after_ms) and send the call again. |
scope_required |
403 | This credential lacks the … capability. | Issue a live key with "Can report outcomes" at https://datagoat.io/keys, or sign in over OAuth. |
shape_empty |
422 | Reading the record as this shape left nothing to ask about: …. | Check the shape's columns and windows against the data (the log may span less time than the windows need), or ask about the record as a table. |
shape_invalid |
422 | "…" is not a column of the snapshot table. | Name a column of shape.snapshots. Its columns: …. |
subscription_canceled |
402 | This workspace's subscription has ended. | Add a card at https://datagoat.io/billing, or use a sample. |
task_lost |
504 | The task stopped reporting and will not finish. | Send the call again; the same idempotency_key runs it again. Nothing was billed for this one. |
test_key_samples_only |
403 | A test key (dgk_test_…) may ask about the free samples only. | Use a sample (dg_describe lists them), or create a live key at https://datagoat.io/keys. |
unknown_dataset |
404 | There is no sample "…". | Use one of: …. |
unknown_link |
404 | This upload link is not one Datagoat issued, or it was altered. | Use the link exactly as dg_add_dataset gave it. |
unknown_operation |
404 | There is no operation /v1/…. | See https://api.datagoat.io/openapi.json, or POST /v1/describe. |
unknown_task |
404 | No task "…" in this workspace. | Poll the task_id the original call returned. |
upload_exists |
409 | This dataset already holds a finished upload. | Ask about it by its dataset_id, or call dg_add_dataset with upload: true for a new link. |
upload_incomplete |
409 | … of … pieces have arrived. | Send piece … next. |
upload_link_expired |
410 | This upload link has expired (links last one hour). | Call dg_add_dataset with upload: true again for a new link. |
upload_restarted |
409 | This upload was started over from another page or file. | Keep the newer upload, or choose the file again here to start over. |
upload_session_invalid |
422 | Each piece carries the upload session id the page chose (32 hex characters). | Upload from the page. |