Errors¶
When an API call fails the server returns a structured error response. The JSON body follows the RFC 7807 Problem Details format:
| Field | Type | Description |
|---|---|---|
type |
String | URI identifying the problem type |
title |
String | Short summary |
status |
int | HTTP status code |
detail |
String | Human-readable explanation |
instance |
String | API path where the error occurred |
code |
String | Unique error code, e.g. 30-1001 |
timestamp |
String | When the error occurred (ISO-8601) |
extraDetails |
Object | Optional map of additional context (may be omitted) |
traceId |
String | Request trace ID for support |
Example response:
{
"type": "https://api.e2.earnix.com/errors/10-1400",
"title": "Bad Request",
"status": 400,
"detail": "Field validation failed for the request",
"instance": "/api/data/v1/recipes",
"code": "10-1400",
"timestamp": "2026-07-26T10:15:30Z",
"extraDetails": {
"aliases": "Alias list size must be between 1 and 10"
},
"traceId": "2702608872435"
}
General Errors (10-*)¶
| Error Code | HTTP | Message |
|---|---|---|
10-400 |
400 | Bad Request |
10-1400 |
400 | Field validation failed for the request |
10-404 |
404 | Entity {0} with ID {1} not found |
10-403 |
403 | Access forbidden |
10-401 |
401 | Access unauthorized |
10-409 |
409 | Entity '{0}' with the same unique field '{1}' already exists |
10-500 |
500 | Internal server error |
10-444 |
400 | Job has been aborted |
10-1000 |
400 | File type is not supported |
10-1001 |
400 | File system is not supported |
10-1002 |
400 | Error occurred while attempting to parse file |
10-1003 |
400 | Error parsing file, file is corrupted |
10-1005 |
400 | File or Table provided is empty |
10-1009 |
400 | Table schema contains invalid characters. |
10-1006 |
409 | Version conflict, update failed because object data is stale. |
10-1007 |
404 | Entity {0} with ID {1} does not match to the {2} {3} and {4} {5} provided in the request |
10-1008 |
400 | Provided URL is not valid. |
10-1501 |
501 | Feature disabled unless the feature flag '{0}' is toggled on. |
10-1042 |
400 | Unsupported target type for export |
10-1043 |
400 | Unsupported source type {0} |
10-1044 |
400 | Transfer is allowed only for released datasets |
10-1045 |
400 | Transfer is allowed only when datatable status is ready |
10-1046 |
400 | Request GET /import from DIM ({0}) has failed: {1} |
10-7003 |
404 | No active quota contract found, please provide start date and end date to create a new quota contract |
10-1047 |
500 | Job timed out due to processing inactivity. Please try resubmitting your request or contacting support. |
Data Errors (20-*)¶
| Error Code | HTTP | Message |
|---|---|---|
20-1001 |
400 | Data version must belong to the same data table |
20-1002 |
400 | An attempt to update a non-existent data table. |
20-1003 |
400 | Data table id in URL parameter and request are mismatched |
20-1004 |
400 | Data source id in URL parameter and request are mismatched |
20-1005 |
400 | Dataset id in URL parameter and request are mismatched |
20-1006 |
400 | Dataset already has empty version |
20-1007 |
400 | Dataset last version deletion is not allowed |
20-1008 |
400 | Transformation recipe cannot have multiple data table nodes as sources |
20-1009 |
500 | Cloned dataset edge not found for node |
20-1010 |
400 | Recipe language is not supported |
20-1011 |
400 | Recipe id in URL parameter and request are mismatched |
20-1012 |
400 | Dataset node type {0} is not supported |
20-1013 |
400 | Recipe status not found |
20-1014 |
400 | Recipe execution type {0} is not supported |
20-1015 |
400 | Recipe job id not found |
20-1016 |
400 | Dataset is not released, draft version cannot be exported |
20-1017 |
400 | Dataset sample export has not been executed |
20-1018 |
400 | Dataset full data export has not been executed |
20-1019 |
400 | Dataset node should successfully execute before export |
20-1020 |
400 | No output node found for release |
20-1021 |
400 | Recipe output execution node has not run with full data |
20-1022 |
400 | Modification of the transformation graph is not allowed after it has been released |
20-1023 |
409 | Data table {0} you are trying to delete is currently in use by active datasets. Please disconnect it from any dependent datasets and try again |
20-1024 |
409 | Data table {0} with version {1} you are trying to delete is currently in use by active datasets. Please disconnect it from any dependent datasets and try again |
20-1025 |
404 | Schema analysis for data table {0} with version {1} does not exist |
20-1026 |
404 | {0} Schema analysis for dataset {1} with version {2} and recipe {3} does not exist |
20-1027 |
400 | Schema analysis results are not ready |
20-1028 |
400 | Recipe execution with ID {0} for schema analysis is missing |
20-1029 |
400 | A creation process for this version is already in progress. |
20-1030 |
400 | Given conversation ID is not the currently active conversation. |
20-1031 |
422 | Invalid column name: {0} |
20-1032 |
400 | User message is invalid. Please send a non-empty message. |
20-1033 |
400 | Dataset data table node {0} is connected to recipe {1} and cannot be deleted |
20-1034 |
400 | Dataset recipe node {0} is currently running so the dataset cannot be edit |
20-1035 |
400 | Dataset cannot have more than 20 recipes nodes |
20-1036 |
400 | Multiple source dataset nodes are not supported |
20-1037 |
500 | Cloned graph nodes size mismatch |
20-1038 |
404 | Dataset data table node not found for recipe |
20-1039 |
404 | Preview for recipe execution with ID {0} not found |
20-1040 |
404 | Preview for data table with ID {0} not found |
20-1042 |
400 | You have reached your data quota limit. Please contact your administrator to increase your quota. |
20-1043 |
400 | You have reached your CPU quota limit. Please contact your administrator to increase your quota. |
20-1044 |
404 | Recipe with ID {0} not found |
20-1045 |
404 | Recipe version {1} for recipe ID {0} not found |
20-1046 |
409 | Recipe version {1} for recipe ID {0} is locked and cannot be modified because it is used in released datasets |
20-1047 |
400 | Recipe ID is required when adding a recipe node to a dataset |
20-1048 |
409 | Recipe id {0} (version {1}) cannot be updated because recipe node {2} is currently running |
20-1049 |
400 | Expected {0} sources (matching aliases), got {1} |
20-1050 |
400 | Source node {0} already has an outgoing edge to another node |
20-1051 |
400 | Duplicate alias found: {0}. Aliases must be unique (case-insensitive) |
20-1052 |
400 | Source node {0} appears more than once in sources |
20-1053 |
400 | Alias "CurrentTable" is reserved and cannot be used in multi-source recipes |
20-1054 |
400 | Aliases {0} do not match table references in SQL code {1} |
20-1055 |
400 | Provided source aliases do not match recipe version's expected aliases {0} |
20-1056 |
400 | Adding source node {0} would create a cycle in the transformation graph |
20-1057 |
400 | Binding candidates are only available for recipe nodes |
20-1058 |
400 | Dataset cannot be released: transformation graph has more than one free node (sink) |
20-1059 |
404 | Sample for data table {0} version {1} is not available |
20-1060 |
400 | Retention policy rule with threshold days is required when the policy is enabled |
20-1061 |
409 | Cannot start import: the existing failed DataVersion is expired and owned by the retention policy |
20-1062 |
404 | Schema alerts are not available because this version has only been analysed at shallow depth. Run a full schema analysis to produce them |
20-1064 |
400 | Schema analysis cannot run because the recipe has no completed run to analyse. Run the recipe and try again once it has finished |
20-1065 |
409 | A schema analysis is already running for this version. Wait for it to finish, or cancel it, before starting another |
20-1066 |
409 | This version has already been fully analysed, so there is nothing left to analyse |
20-1063 |
500 | Version {1} of data table {0} was deleted, but a related background operation could not complete |
Connection Errors (30-*)¶
| Error Code | HTTP | Message |
|---|---|---|
30-1001 |
400 | Invalid credentials for Snowflake connection |
30-1002 |
400 | Network issue while connecting to Snowflake |
30-1003 |
400 | A Snowflake issue has occurred. |
30-1004 |
400 | Warehouse in datasource and connection do not match. datasourceWarehouse: {0}, connectionWarehouse: {1} |
30-1005 |
408 | Timeout while connecting to Snowflake |
30-1007 |
400 | Given connection with id = {0} is not a Snowflake connection. |
30-1008 |
400 | Invalid SQL syntax. |
30-1009 |
400 | DML and DDL statements cannot be used in source definition. |
30-1010 |
400 | Element {0} is either not found or not accessible. |
30-1011 |
500 | An attempt to connect to {0} was interrupted. |
30-1012 |
500 | Invalid SQL syntax. |
30-1013 |
400 | No active warehouse selected. Please select a warehouse or set a default warehouse in Snowflake. |
30-1014 |
400 | Failed to establinsh a Snowflake connection. |
30-1015 |
400 | Elevate's IP address is not allowed to access Snowflake. Please contact your Snowflake administrator. |
30-1100 |
400 | An AWS issue has occurred. |
30-1106 |
400 | Given path: '{0}' is out of path restriction bounds: '{1}' |
30-1108 |
400 | The specified bucket: '{0}' does not exist |
30-1109 |
400 | The request signature AWS calculated does not match the signature provided. Please check the connection secret key. |
30-1110 |
408 | AWS operation timed out |
30-1111 |
400 | the connection endpoint '*.amazonaws.com' should contain valid region |
30-1112 |
301 | The bucket '{0}' you are trying to access is on a different endpoint. |
30-1113 |
400 | S3 path is invalid, please check given path is correct |
30-1114 |
400 | Path {0} does not exist |
30-1115 |
400 | Bucket name: '{0}' is invalid |
30-1116 |
400 | Please check the connection access key. The request signature AWS calculated does not match the signature provided. |
30-1117 |
400 | Please check the connection secret key. The request signature AWS calculated does not match the signature provided. |
30-1118 |
400 | The specified S3 folder does not contain any CSV files (it may contain subfolders). Unable to infer the CSV schema. |
30-1130 |
400 | Custom host is not allowed by default. Please contact earnix support. |
30-1200 |
400 | Invalid client ID provided. |
30-1201 |
400 | Invalid client secret provided. |
30-1202 |
400 | Invalid client credentials provided. Please check the client ID and secret. |
30-1203 |
400 | The requested scope is invalid or unauthorized for this client. |
30-1204 |
400 | The token URL provided is invalid or not reachable. |
30-1205 |
500 | A network or connection issue occurred while contacting the identity provider. |
30-1206 |
500 | An unexpected error occurred with the identity provider. |
30-1207 |
400 | The request to the OAuth server is invalid. |
30-1300 |
400 | A GCS issue has occurred. |
30-1301 |
403 | Access denied to GCS resource. Please check the service account permissions. |
30-1302 |
400 | The specified GCS bucket '{0}' does not exist or is not accessible. |
30-1303 |
408 | GCS operation timed out. |
30-1304 |
400 | GCS path is invalid, please check the given path is correct. |
30-1305 |
400 | Path {0} does not exist in GCS bucket. |
30-1306 |
400 | Given path: '{0}' is out of path restriction bounds: '{1}' |
30-1307 |
429 | GCS rate limit exceeded. Please retry after a short wait. |
30-1308 |
403 | Access denied when listing buckets at project level. Either grant the service account the 'storage.buckets.list' permission on the project, or set a bucket-scoped path restriction (e.g. 'gs://bucket-name/'). |
30-1309 |
400 | Project not found |
30-1310 |
400 | The specified GCS folder does not contain any CSV files (it may contain subfolders). Unable to infer the CSV schema. |
30-1320 |
400 | The provided service account key JSON is invalid or cannot be parsed. |
30-1321 |
400 | The project ID '{0}' specified on the connection does not match the project ID '{1}' in the service account key JSON. |
30-1322 |
400 | The project ID '{0}' specified on the connection does not match the project ID embedded in the service account email '{1}'. |
30-1323 |
400 | Failed to exchange token for Workload Identity Federation. |
30-1413 |
400 | BigQuery connection error. Please verify the connection properties. |
30-1414 |
404 | The specified BigQuery dataset '{0}' does not exist or is not accessible. |
30-1415 |
400 | The provided service account key JSON is invalid or cannot be parsed. |
30-1416 |
400 | Authentication failed. Please check the BigQuery credentials. |
30-1417 |
403 | Access denied to BigQuery resource. Please check the service account permissions. |
30-1418 |
404 | The requested BigQuery resource was not found. |
30-1419 |
400 | Invalid tableRef '{0}'. Format must be [projectId].[datasetId].[tableName]. For identifiers with spaces, use backtick quoting: [projectId].[datasetId].[tableName]. |
30-1420 |
400 | TableRef '{0}' has an empty table name. |
30-1421 |
400 | Project '{0}' in tableRef does not match connection project '{1}'. |
30-1422 |
400 | Dataset '{0}' in tableRef does not match connection dataset '{1}'. |
30-1423 |
404 | The specified BigQuery data source does not exist or is not accessible. |
30-1424 |
400 | The provided query is invalid. |
30-1425 |
404 | Table '{0}' was not found in the BigQuery connection. |
30-1426 |
403 | BigQuery view access denied: write permission required on the materialization dataset. |
30-1427 |
400 | The table contains a BIGNUMERIC column whose precision exceeds the supported limit. Cast the column to a smaller numeric type before exporting. |
30-1507 |
409 | Connection {0} you are trying to delete is currently in use by active tables. Please disconnect it from any dependent tables and try again |
30-1508 |
409 | Connection {0} you are trying to delete is currently in use by targets. Please delete any dependent targets and try again |
30-1600 |
400 | Connection ID in URL parameter ({0}) and request body ({1}) are mismatched. |
30-1707 |
409 | Data source {0} you are trying to delete is currently in use by active tables. Please disconnect it from any dependent tables and try again |
30-1708 |
400 | Data source {0} connection must have read permission. |
30-3001 |
400 | Given connection with ID = {0} does not support tables view. |
30-3002 |
400 | DeltaSharing profile is not a valid JSON. Please provide a valid profile. |
30-3003 |
400 | Failed to parse time from the value of field 'expirationTime' ({0}) in DeltaSharing profile. Please provide a valid profile. |
30-3004 |
400 | Failed to parse URL from the value of field 'endpoint' ({0}) in DeltaSharing profile. Please provide a valid profile. |
30-3005 |
400 | Unauthorized to access the DeltaSharing profile. Please check your credentials and permissions. |
30-3006 |
400 | Cannot connect to DeltaSharing, check endpoint {0}. |
30-3007 |
500 | Failed to connect to DeltaSharing, {0}. |
30-3008 |
400 | Endpoint URL is empty. Please provide a valid endpoint URL for the DeltaSharing connection. |
30-3009 |
400 | bearerToken is empty. Please provide a valid token for the DeltaSharing Share connection. |
30-3010 |
400 | Failed to parse the DeltaSharing Share response. |
30-3011 |
400 | Connection {0} is not a Databricks DeltaSharing connection. |
30-3012 |
404 | Not found: {0}. |
30-3013 |
400 | Authentication is required to access the DeltaSharing profile. Please provide valid credentials. |
30-3014 |
400 | Field 'shareCredentialsVersion' is missing. Please provide a valid endpoint URL for the DeltaSharing connection. |
30-3015 |
400 | Missing or empty required OAuth fields: {0}. |
30-3016 |
400 | Invalid value {0} for field 'shareCredentialsVersion'. Only 1 or 2 are supported for DeltaSharing connections. |
30-3017 |
400 | An error occurred while trying to authenticate with OAuth for the DeltaSharing connection, {0} |
30-3018 |
400 | The DeltaSharing profile is empty. Please, provide a valid profile. |
30-3019 |
500 | Secrets of DeltaSharing connection were not fetched from AWS. Probably, getConnection(id) was called instead of getConnectionWithSecret(id). |
30-3020 |
500 | Secrets match DeltaSharing profile of version {0}, while the version of the profile is {1}. |
30-3021 |
400 | Failed to validate the DeltaSharing profile against the expected schema. Please provide a valid profile. |
30-4005 |
401 | Unauthorized to access Price-It. Please check your credentials and permissions. |
30-4006 |
400 | Cannot connect to Price-It, check endpoint {0}. |
30-4007 |
500 | Failed to connect to Price-It. |
30-4008 |
400 | Given connection {0} is not a Price-It DIM or PriceIt SDK connection. |
30-4009 |
400 | Type mapping validation failed. |
30-4100 |
500 | Failed to connect to PriceIt SDK, check endpoint {0}. |
30-4101 |
400 | The provided private key is invalid. Please check the key format and content. |
30-4102 |
400 | Failed to obtain an access token from the identity provider. Please verify the connection credentials. |
30-4103 |
400 | Failed to connect to PriceIt SDK, check endpoint {0}. |
30-4104 |
400 | PriceIt SDK login failed, check endpoint {0}. |
30-4105 |
400 | No sessionToken in PriceIt SDK login response. |
30-5001 |
400 | Target ID in URL parameter ({0}) and request body ({1}) are mismatched. |
30-5002 |
400 | Data target connection does not have write permission. |
30-5003 |
400 | Data target connection type {0} is invalid, must be {1}. |
30-5004 |
400 | Table name exceeds {0} characters |
30-5005 |
400 | Unsupported dynamic parameter: {0} |
30-5006 |
400 | Table name contains invalid characters |
30-5007 |
400 | First character of {0} cannot be an underscore or space |
30-5008 |
400 | Project path must start with '\' and must not end with '\' |
30-5009 |
400 | Table path must not start with '\' and must end with '\' |
30-6001 |
400 | The source data was not found. Check that the source ID exists and try again. |
30-6002 |
400 | The target destination was not found. Verify the target ID and try again. |
30-6003 |
400 | Transfer failed due to price-it size limits ({0}). |
30-6004 |
400 | Transfer failed due to price-it size limits ({1} columns and {0} rows). Reduce the dataset size and try again. |
30-6005 |
400 | Cannot delete or update target while Transfer is in progress. Please wait for Transfer to complete and try again. |
30-6006 |
400 | Table size has not been calculated yet. Please try again later. |
30-7001 |
400 | Role not found: '{0}' |
30-7002 |
400 | Multiple roles found with name: '{0}' |
30-7003 |
500 | Failed to create tenant token in Frontegg. |
30-7004 |
500 | Failed to delete tenant token in Frontegg. |
30-7005 |
500 | Failed to retrieve roles from Frontegg. |
SQL Analyzer Errors (40-*)¶
| Error Code | HTTP | Message |
|---|---|---|
40-50001 |
400 | Invalid SQL syntax. |
40-50002 |
400 | DML and DDL statements cannot be used in source definition. |
40-50003 |
400 | Function cannot be used in query. |
40-50004 |
400 | Query is None. |
40-50005 |
400 | Query contains not allowed function. |
40-50006 |
400 | Query references unknown table. Use the aliases defined in the recipe. |
40-50007 |
400 | EXCEPT clause is not supported in SELECT query. |
40-50008 |
400 | Alias(es) {0} defined but not referenced in the query |
Admin Errors (50-*)¶
| Error Code | HTTP | Message |
|---|---|---|
50-1002 |
404 | Feature toggle not found |
50-1003 |
404 | Tenant not found |
50-1005 |
409 | Cannot set tenant override: unsupported flipping strategy |
50-1007 |
404 | System user not found for tenant {0} |
50-1010 |
404 | Role {0} not found |
50-1012 |
502 | Upstream service is currently unavailable |
50-1013 |
404 | Customer user not found for tenant {0} |
50-1014 |
502 | System user of tenant {0} failed to authenticate |
Usage Monitoring Errors (70-*)¶
| Error Code | HTTP | Message |
|---|---|---|
70-7001 |
400 | The end date must be after the start date |
70-7002 |
400 | Both start date and end date must be provided, or both must be null |
70-7004 |
400 | Quota values must be non-negative |
70-7005 |
400 | When dates are provided, cpuTimeHours, dataTransferGb, and name must also be provided |
70-7006 |
400 | The end date must be after the start date |
App Experience Errors (80-*)¶
| Error Code | HTTP | Message |
|---|---|---|
80-8001 |
500 | Appx service initialization placeholder error |
80-8003 |
404 | Bundle {0} was not found |
80-8012 |
400 | Bundle id {0} in the request body does not match id {1} in the path |
80-8016 |
409 | Bundle {0} cannot be installed because it is not published |
80-8017 |
409 | Bundle {0} already has an install on this tenant; check its install status |
80-8014 |
404 | App {0} was not found |
80-8015 |
409 | App cannot be installed; the tenant has no configured link for required provider(s): {0}. Add the missing link(s) and retry. |
80-8026 |
500 | Failed to provision the app. The install was rolled back; retry, and if it persists contact support. |
80-8018 |
400 | Link ID in URL parameter ({0}) and request body ({1}) are mismatched. |
80-8002 |
404 | Link {0} was not found |
80-8019 |
400 | Link details are invalid; provide a non-empty map of at most 20 entries, each value at most 1024 characters, total at most 3072 characters. |
80-8020 |
404 | No value found for the requested key. |
80-8021 |
400 | The value exceeds the maximum allowed size of {0} bytes. |
80-8022 |
400 | A session-scoped request requires a session context; none was present. |
80-8024 |
400 | Reporting a session activity requires a valid session context; none was present in the SDK token. |
80-8027 |
400 | Reporting a session activity requires a valid app context; none was present in the SDK token. |
80-8028 |
400 | returnTo must be a same-origin relative path; absolute URLs and scheme or protocol-relative prefixes are not allowed. |
80-8029 |
403 | App {0} is disabled and cannot be run. |
80-8030 |
403 | You do not have permission to run apps. |
80-8031 |
404 | Session {0} was not found. |
80-8032 |
502 | The app could not be started; please try again later. |
80-8033 |
404 | Asset {0} was not found. |
80-8034 |
404 | The requested run was not found. |
80-8035 |
500 | App credentials are not configured for this tenant. |
80-8036 |
504 | The app did not respond in time; please try again later. |
80-8037 |
400 | Bundle {0} version {1} could not be published because its manifest.json is missing or invalid. |
80-8038 |
502 | Bundle {0} version {1} could not be published because its manifest.json could not be read; please retry. |
80-8039 |
502 | Asset {0} could not be read; please retry. |
80-8040 |
500 | SDK user ID is missing from the provisioned credentials. |
80-8042 |
409 | Bundle {0} is being uninstalled; poll its install status and retry once it reads NOT_INSTALLED |
80-8043 |
500 | Failed to uninstall the app; its function is still present. The app was restored to its previous status; retry, and if it persists contact support. |
Async Job Errors¶
Some operations run asynchronously (imports of tables, data version and transfers, etc.) — for example in Spark processing job or in PriceIt.
When an async job fails the error is embedded in the job status response at
execution.error, not returned as an HTTP problem detail:
| Field | Type | Required | Description |
|---|---|---|---|
code |
String | Yes | Error code |
message |
String | Yes | User-friendly error message |
cause |
String | No | Technical root cause for debugging |