Skip to main content
Start with the current project and original operation:
Read the stable error code, suggested action and any retry interval. Keep source-admission failures, build failures and pending DNS/mail separate. For a connected chat, verify the intended account and project grant through the connection flow. Read the saved source and keep its original upload or deployment operation after uncertainty. If another chat changed the source, reconcile the current files before saving a new version. Private credentials use the portal input flow; a missing secret is not a reason to paste it into chat.

Mail and file gateway errors

Use global fetch to the injected gateway URL with the environment’s runtime key. Gateway and signed R2 origins are allowed by the platform; do not add them to runtime.egress.allow or replace them with customer gateway bindings. The database retains its own OHMYHOST_DATABASE binding. Run the current CLI’s ohmyhost init --dry-run --json to find legacy gateway references (gateway_binding_unsupported) or a declared storage capability without a client (storage_client_missing). See Files and Email for the runtime values.
  • 403 gateway_not_enabled: enable the capability in ohmyhost.yaml and redeploy. This request is not retryable unchanged.
  • 403 gateway_route_denied: use the current runtime client’s supported route, method and query. It is final for that request and does not require a broader egress allow-list.
  • 429 gateway_rate_limited: wait, then retry with the original idempotency keys. Mail and file calls share the approximate project gateway limit of 1,200 calls a minute per Cloudflare location.
  • 503 gateway_unavailable: retry after a delay with the same message/object and key. With status null, the supplied fetch threw before a response was received.
  • gateway_timeout: the configured wait expired; a durable effect may still have occurred. Observe or retry the original operation with its existing key.
  • gateway_response_invalid: the response was malformed or non-JSON. The error retains any received HTTP status and excludes upstream text. Report a persistent failure through feedback.
A missing URL/key produces non-retryable gateway_configuration_invalid, naming the option. Resolve private configuration from the hosted request context. Keep the health route independent of mail/storage: the deploy-time probe runs without the egress policy. Do not include runtime keys, signed URLs or raw upstream responses in feedback.

Reconcile only when requested

Use this when the operation reports reconciliation is required and no attempt is pending. Retain the same request key across uncertainty. A completed reconciliation attempt does not itself mean the original deployment succeeded.

Read diagnostic pages

Deployment diagnostics/logs are retained seven days. CLI deployment logs reads one page of at most100 items despite —follow; MCP deployment_logs takes cursor. Pass next_cursor as cursor for older records. DEPLOYMENT_FAILED carries no detail: follow the failed operation’s suggested_action. Operation logs is separate: CLI logs —follow has bounded reconnects/Last-Event-ID; operation_stream_ended means the original still runs,so poll operation get about every sixty seconds. No work was cancelled.

Error codes

Act on code,retryable andsuggested_action. Only CLI errors returned by the API add docs_url; local CLI/MCP and terminal operation failures use their own guidance.

Report a platform issue

If an error lacks a useful cause or the documented operation cannot continue, submit feedback with the project/operation IDs, expected behavior and a short redacted reproduction. Do not paste tokens, secret values, raw environment files or customer records. A provider observation failure means unavailable, not ready or zero usage. Keep customer source changes separate from a provider-capacity issue.