Help
Troubleshooting
The usual causes, and where to look, when something does not behave.
On this page · 9 sections
The token was refused
- Cloudflare says that token is invalid or inactive: the token was not copied completely, or it was disabled in Cloudflare. Create a new one with the button.
- The token can't list zones — add Zone → Zone → Read: the token lacks that permission, or its Resources do not include your zones. Edit it in Cloudflare (My Profile → API Tokens) and paste it again.
- The token is saved, but it can't do everything yet: add the listed permissions to the token in Cloudflare and press Check permissions, or create a new token with the button.
- The token can't see any zones: under Resources the token must include the zones (or all zones) you want to use.
A domain needs attention
- Open Settings → Domains. Each step says what went wrong. An amber step names the permission the token lacks: press Fix the token, add it in Cloudflare or create a new token, and Ayoh re-runs setup for you.
- … already receives mail at …: the domain, or that subdomain, has other mail servers. Connect a different subdomain, or connect the whole domain with Take over, which removes those MX records for you.
- An SPF record exists without Cloudflare: edit the domain's SPF record in Cloudflare's DNS, add
include:_spf.mx.cloudflare.net, then re-run See SPF, DKIM and DMARC on Cloudflare for how to merge it. - Waiting for Email Sending onboarding: the sending step failed; fix it first (its detail tells you how, including the dashboard path), then re-run.
- Re-running is safe at any time.
Mail is not arriving
- Check that the domain is Ready under Settings → Domains, in particular the Email Routing enabled and Catch-all rule steps.
- Check that the address exists under Settings → Addresses, spelled exactly — as an address or as an alias — or that the domain has a catch-all mailbox. Mail to an unknown address bounces with No such mailbox.
- Give DNS changes a few minutes to spread, then send a test from a different provider.
- Look in Spam and Archive: a reply to an archived conversation returns to Inbox (or to its folder, if you filed it in one of yours), but a reply in a conversation you marked as spam stays in Spam.
- Messages over 25 MiB are refused; the sender receives Message too large.
- If the dot in the top right corner is amber or red, the live connection is down: press Refresh in the list header's ⋯.
A message will not send
- Add at least one recipient or … is not a valid address: check the addresses; each needs the form
name@domain.tld. - Sending limit reached (100 per hour): wait for the hour to pass.
- Message exceeds the 5 MiB size limit or At most 32 attachments: remove attachments or split the message. Each file is also limited to 4 MiB when you attach it.
- Send failed: …: Cloudflare's own message follows. A domain that is not verified or not onboarded means the Email Sending or DKIM step is not green; fix it and re-run setup. Temporary failures are retried before you ever see them.
- A letter under Scheduled marked Not sent: did not go at its time; the reason follows. Fix what it says, then pick a new time with the clock or press Send now in its ⋯.
- Attachment … is no longer available: a file that was uploaded but never sent is kept for 24 hours; attach it again.
The AI is not working
- A red status on a conversation means the summary or the draft failed; its detail shows the reason. Mail is unaffected. Redo summary and draft in the conversation's More menu tries again.
- No draft appeared: check the rules on the AI page. Most often the message was automated, you had already replied, or the AI decided no reply was needed.
- Could not answer: …: the model was unavailable; try again in a moment.
- Running a development copy fully offline (
CLOUDFLARE_VITE_FORCE_LOCAL=true): Workers AI has no local emulator, so summaries, drafts and the reply box's writing report errors until the app runs against Cloudflare.
The agent did not answer
- The agent is switched off: switch it on in Settings → Agent.
- The AI isn't answering right now under your question: nothing was lost. Open the conversation later and This question didn't get an answer sits under it, with the same Try again. Try again beside it answers the same question once more, with its files, without adding it to the conversation a second time. If it keeps failing, try another model in Settings → Agent.
- Could not answer with a model error: try again, or another model in Settings → Agent. A model that cannot call tools can only write prose.
- The connection dropped before the answer arrived: the agent finishes and saves it regardless. Open the conversation again from Chat's column.
- A file came back Could not upload: it is over 10 MB, empty, or a program (those are never taken). A file that uploads but that it cannot read says so beside it; the agent then knows only its name, and can still attach it to a draft.
- The microphone does nothing: the browser asks for it the first time, and a blocked answer is changed in the browser's site settings. On an iPhone, dictation also has to be on in Settings → General → Keyboard.
- It left a draft when you wanted it sent: May send email for you is off in Settings → Agent.
- An app tool failed: check the app is Connected and switched On under Settings → Connectors. A sign-in that expired shows as Disconnected; connect it again.
- It said it was out of credits: the balance is spent. Mail, summaries, drafted replies, web search, page reads and everything built in carry on; connected apps wait for the monthly top-up or a purchase. Settings → Usage shows what went where.
Ayoh can't be reached
- Can't reach Ayoh — reconnecting… at the foot of the window: the app is open on what it knew last time, and the server is not answering. Nothing is lost. It keeps trying by itself, and Try again asks now. You're offline — reconnecting when you're back. means the device has no connection; it tries again the moment it has one.
- Ayoh can't be reached (or You're offline) filling the screen: this opening had nothing remembered to show, as on a device's first sign-in, so it waits for the server. It tries again when the connection returns and when you come back to the window; Try again asks now.
- Lists open on what they showed last time, then change: Keep your work on this device for instant opening is on in Settings → Display, and what was kept shows while the newest is fetched. Turn it off to have each app wait for the server instead.
Signing in
- That passkey was not accepted: it may have been removed from this account, or the browser offered one for a different site. Ask for a code instead, then check Settings → General.
- The code has not arrived: check spam, and check the address on the account is the one you are watching. A code can be asked for once a minute and five times an hour per address; the button says how long is left.
- That code is not right: codes expire after ten minutes and work once, and asking for a new one retires the old — make sure you are reading the newest mail. After five wrong tries, ask for a new code.
- Nothing happens when a code is asked for, and you run Ayoh yourself: codes need
AUTH_SENDERset to an address on a domain onboarded for sending. Without it the sign-in page says one-time codes are not set up. - No Sign in with a passkey button: the browser does not support passkeys. The code path works as before.
- Sign-up is closed: ask the workspace owner, or whoever runs Ayoh, for an account.
- Signed out unexpectedly: a sign-in lasts 30 days per browser. Sign in again.
Display
- Collapse sidebar, near the foot of the rail, folds the app's column away, and the same button brings it back. Mail remembers the choice on this browser.
- Shortcuts stop working while you are in a text field. Press Esc in the search field, or click elsewhere, to get them back.