The error codes, the rolling file window, the size ceilings and a bounded retry policy. Every number on this page is read from the platform's own configuration, not from a rule of thumb.
Each failure carries a stable code. Match on the code, never on the message text: messages are localised and may be reworded, codes are the contract.
A failure uses the same envelope as a success, with ok false and the code identifying what went wrong.
{
"ok": false,
"statusCode": 429,
"code": "ENTERPRISE_API_LIMIT_REACHED",
"message": "…",
"path": "/enterprise/v1/gis/buffer",
"method": "POST",
"timestamp": "2026-08-17T09:41:22.104Z"
}ENTERPRISE_API_KEY_REQUIREDThe request arrived without credentials: neither the X-Api-Key and X-Api-Secret pair nor an Authorization: Bearer header was present.
Send the credentials on every call. When the same key works from curl but not from your client, check that the client is not stripping custom headers across a redirect.
ENTERPRISE_API_KEY_INVALIDCredentials were present but did not verify — an unknown public key, a revoked key, or a secret that does not match the one stored for it.
Confirm you copied the whole secret at creation; it is stored hashed and cannot be read back. If it was lost, create a new key in the console and revoke the old one.
ENTERPRISE_API_INACTIVEThe key itself is fine, but the organization has no active API subscription: never activated, suspended, or the term has expired.
Check the subscription in the console. If it is suspended or expired, only the enterprise desk can reinstate it — retrying will not.
ENTERPRISE_API_USER_NOT_ASSIGNEDThe email sent in X-Api-User is not an active member of the organization.
Assign that person in the console, correct the address, or drop the header entirely to attribute the run to the organization owner.
ENTERPRISE_API_LIMIT_REACHEDThe organization's file count for the current window, plus the files in this request, would cross the package ceiling. The request is refused before the tool runs.
Wait for the window to clear, spread the load, or move to a larger package. Because the check happens first, nothing was processed and nothing was consumed.
Every code the GIS and API surfaces bind to an HTTP status.
The codes above are the ones to build client behavior around. This catalog is the lookup table for everything else, grouped by family; the meaning shown is the API's own message text. React to the code — messages are localized and may be reworded.
Message language
VALIDATION_ERRORValidation error.
FILE_REQUIREDFile is required.
FILE_TOO_LARGEFile exceeds the maximum allowed size.
NOT_FOUNDNot found.
DUPLICATE_VALUEThis field value already exists.
RATE_LIMIT_EXCEEDEDToo many requests. Please try again later.
SERVER_ERRORAn unexpected server error occurred.
GIS_INPUT_REJECTEDThis file can't be used: (reason)
GIS_PROCESSING_FAILEDGIS processing failed. Please check your file and try again.
GIS_SERVICE_UNAVAILABLEGIS processing service is temporarily unavailable. Please try again later.
GIS_TOOL_NOT_FOUNDUnknown GIS tool.
GIS_TOOL_DISABLEDThis GIS tool is currently disabled. Please try again later.
GIS_TIER_REQUIREDThis tool is available on a higher membership tier.
GIS_ENTERPRISE_REQUIREDThis tool is available on Enterprise workspaces.
GIS_NOT_COMMUNITY_MEMBERYou must join the Haiyz community to use GIS tools.
GIS_TRIAL_LIMIT_REACHEDYou have used your 2 free trial runs. Join the Haiyz community to keep using GIS tools.
GIS_USAGE_LIMIT_REACHEDYou have reached your usage limit for this tool. It will reset automatically.
GIS_FILE_NOT_FOUNDThe requested GIS file was not found.
ENTERPRISE_API_KEY_REQUIREDAPI credentials are required (X-Api-Key and X-Api-Secret).
ENTERPRISE_API_KEY_INVALIDInvalid API credentials.
ENTERPRISE_API_KEY_EXPIREDThis API key has expired.
ENTERPRISE_API_KEY_INACTIVEThis API key is not active.
ENTERPRISE_API_KEY_IP_FORBIDDENRequests from this IP address are not allowed for this API key.
ENTERPRISE_API_KEY_SCOPE_FORBIDDENThis API key does not have access to this tool.
ENTERPRISE_API_INACTIVEThis organization has no active API subscription.
ENTERPRISE_API_USER_NOT_ASSIGNEDThis user is not an assigned member of the organization.
ENTERPRISE_SUBSCRIPTION_INACTIVEThe organization's enterprise tools subscription is not active.
ENTERPRISE_API_NOT_ENABLEDThe API channel is not enabled for this organization.
ENTERPRISE_TOOL_NOT_ALLOWEDThis tool is not enabled for your organization.
ENTERPRISE_API_LIMIT_REACHEDThe organization's file quota for the current 72-hour window is exhausted. It will reset automatically.
ENTERPRISE_CREDIT_LIMIT_REACHEDThe organization's credit balance for this period is exhausted.
ENTERPRISE_MEMBER_CREDIT_LIMIT_REACHEDYou have reached your member credit cap for this period.
ENTERPRISE_API_KEY_CREDIT_LIMIT_REACHEDThis API key has reached its credit cap for this period.
ENTERPRISE_RATE_LIMIT_REACHEDToo many requests. Please slow down and retry.
ENTERPRISE_CONCURRENCY_LIMIT_REACHEDToo many concurrent runs. Please retry shortly.
ENTERPRISE_DATA_LIMIT_REACHEDThe organization's data volume limit for this period is exhausted.
ENTERPRISE_IDEMPOTENCY_KEY_INVALIDThe Idempotency-Key header is invalid (8–255 printable characters).
IDEMPOTENCY_KEY_REUSEDThis Idempotency-Key was already used with a different request.
REQUEST_IN_PROGRESSA request with this Idempotency-Key is still being processed.
ENTERPRISE_RUN_NOT_FOUNDRun not found.
ENTERPRISE_ARTIFACT_NOT_FOUNDArtifact not found.
ENTERPRISE_ASYNC_JOB_NOT_FOUNDAsync job not found.
ENTERPRISE_ASYNC_JOB_ALREADY_FINALIZEDThis job has already finished and can no longer be changed.
ENTERPRISE_ASYNC_TOOL_NOT_ELIGIBLEThis tool does not support async large-file jobs.
Dataset, share-link and data-room codes are documented with the Datasets guide at /docs/datasets.
How the quota is counted, and when it clears.
| Package | Files / 72h |
|---|---|
| Starter | 1,000 |
| Pro | 5,000 |
| Ultra | 20,000 |
Every key shares one window
How much one call can carry, and what happens when the file is larger than that.
Direct request ceiling
Asynchronous ceiling
Upload window
What happens to work that runs off the request, and the retry policy your own client should mirror rather than fight.
A cancel is honoured at 4 checkpoints — not instantly.
At pickup
Before the worker takes the job off the queue at all.
Before quota is reserved
Before the run reserves anything against the organization's window.
Before the engine call
After preparation, before the geoprocessing call is dispatched.
Before the output is stored
After the engine returns, before the result is written and recorded.
A call already in flight runs to completion
Half of a good integration is knowing which failures are permanent.
Do not retry. The credentials are missing or wrong, and repeating the call fails identically. Fix the headers, then send the request again.
Do not retry. Either the subscription is inactive or the attributed member is not assigned — both need a change in the console, not another attempt.
Retry after the window clears, not immediately. The reset instant is computable: the window is 72 hours long and its boundaries are fixed.
Retry with backoff and cap the attempts. Mirroring the platform's own policy — 3 attempts, starting from 2000 ms — is a reasonable default.
Usage against the current window — per member, per tool and per key — is shown in your organization's console.