For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt, and this page is available as Markdown at /devbase/v1/errors-and-retries.md.

Errors, retries, and quotas

Availability: The DevBase runtime and production API are not yet deployed. This page describes the committed v1 contract for integration planning; requests to the API URL will not succeed until the runtime is released.

Errors use the Connect JSON error envelope. The top-level code is the Connect status code and message is a human-readable summary. Typed protobuf details are carried in the envelope's details array, not as top-level fields:

{
  "code": "resource_exhausted",
  "message": "workspace quota exhausted",
  "details": [
    {
      "type": "devbase.v1.ErrorDetail",
      "value": "CAgSJgokMDE5MDAwMDAtMDAwMC03MDAwLTgwMDAtMDAwMDAwMDAwMDAxGh9jb3JyXzAxSjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIB4oAQ==",
      "debug": {
        "reason": "ERROR_REASON_QUOTA_EXHAUSTED",
        "requestId": {
          "value": "01900000-0000-7000-8000-000000000001"
        },
        "correlationId": "corr_01J00000000000000000000000",
        "retryAfterSeconds": 30,
        "retryGuidance": "RETRY_GUIDANCE_AFTER_DELAY"
      }
    }
  ]
}

The type identifies the fully qualified protobuf message and value is its standard padded base64-encoded binary protobuf payload. Decode value with the published DevBase v1 descriptor set or common.proto, then read the ErrorDetail fields. The optional debug object is for readability only; clients must decode value and must not depend on debug. Internal causes and secret-bearing values are not returned.

Retry only when the guidance permits it. Rate limits and temporary dependency failures may be retried after the indicated delay; authentication, authorization, malformed input, idempotency conflicts, resource-version conflicts, checksum failures, and other permanent validation errors require a state or request change.

Workspace, API-key, RPC rate, and concurrency quotas are enforced independently. Exhaustion returns a typed resource_exhausted response. Paid work also requires an active workspace and an available Delcore spend decision.