Skip to main content
Source: skills/openmail/references/errors.md

OpenMail Error Reference

API error format

All errors return a consistent JSON structure:
{
  "error": "error_code",
  "message": "Human-readable description"
}

Error codes

StatusCodeDescriptionResolution
400invalid_mailbox_nameMailbox name doesn’t meet format requirementsUse lowercase letters, numbers, and hyphens only (e.g. my-agent)
400missing_idempotency_keySend endpoint requires Idempotency-Key headerAdd a UUID header; the CLI does this automatically
401unauthorizedInvalid or missing API keyCheck OPENMAIL_API_KEY is set and starts with om_
404not_foundResource doesn’t exist or doesn’t belong to your accountVerify the inbox ID or thread ID is correct for this account
409address_takenMailbox name or address already in useChoose a different --mailbox-name
422recipient_suppressedRecipient is on the suppression listThe recipient previously unsubscribed or reported spam; do not contact them
429rate_limit_exceededToo many requestsCheck Retry-After header and wait before retrying
429cold_outreach_limitCold send limit exceeded for new inboxNew inboxes have a warm-up period; see email deliverability docs

CLI errors

missing inbox id; run 'openmail init' or pass --inbox-id

Setup hasn’t been run, or ~/.openclaw/openmail.env is missing. Run:
openmail setup --api-key "om_live_..."

OpenMail API 401

The API key is invalid or not being loaded. Verify:
grep OPENMAIL_API_KEY ~/.openclaw/openmail.env
The key should start with om_. Re-run setup if it is wrong or missing.

cannot read attachment "..."

The file path doesn’t exist or isn’t readable. Check the path is correct and the file exists before sending.

missing --to

The --to flag is required for openmail send. Always specify a recipient address.

missing --subject

The --subject flag is required when sending a new email (not a thread reply). Omit it only when using --thread-id.

Suppression

If you send to a suppressed address, the API returns 422 recipient_suppressed. Suppressed addresses cannot receive email from your account because they previously unsubscribed or reported spam. Do not attempt to work around this. To view or manage suppressions, go to Settings > Suppressions in the dashboard.

Attachment URLs

Attachment URLs in inbound messages are signed and expire after a short window. Fetch them promptly after receiving a message. If a URL has expired, re-fetch the message to get a fresh URL.

Rate limits

ResourceLimit
Inbox creation100 per day per account
Send per inbox10 per minute, 200 per day
API requests1,000 per minute per account
When rate limited, wait for the duration specified in the Retry-After header before retrying.