Skip to main content

FAQ & Troubleshooting

Paid Feature

This feature is only available in paid plans. Learn More

Missing something? Email support@unlayer.com or use the in-product chat in Console.

Pricing & credits

How much does it cost?

The AI Assistant runs on a credit-based model — every Unlayer plan that includes AI ships with a per-period credit cap (applied at the workspace level, shared by every project in the workspace), and every AI request consumes credits proportional to the work it does (a small text rewrite is a fraction of a full-template generation, for example). For current plan tiers and credit-pack pricing, see unlayer.com/pricing; for how credits are spent, see Pricing. Workspaces on a paid plan also get one-time evaluation credits so you can try the AI Assistant in dev or staging before topping up.

Can I get a surprise bill if my users go heavy on AI?

No. Your AI cost is capped at your workspace's plan credit allowance every period. When that cap is reached, the AI Assistant disables itself across every project in the workspace — nothing keeps charging in the background, and nothing auto-bills. Adding more credits is always opt-in (a credit-pack purchase or a plan upgrade you choose). See Pricing → When you run out of credits.

How do I track what my users ask the assistant?

Subscribe to the AI lifecycle callbacks from your host app and forward the events to your analytics pipeline. ai:assistant:on:request carries the prompt and the target scope; ai:assistant:on:success / :on:error / :on:cancel carry the outcome and duration. Because the editor doesn't know who the user is on its own, this is the seam where you attach your own user id — useful for per-user analytics, support correlation, free-tier rate limits, or content moderation. To identify the end-user to the editor itself (so saved blocks, uploads, and other per-user state are scoped correctly), see End-User Identification. For a worked AI-events example, see Events & Callbacks → Common use case: logging prompts & per-user analytics.

Why does the chat say I'm out of credits in my dev project?

Credits are pooled at the workspace level — every project in a workspace shares the same per-period credit allowance, so a dev project and a production project under the same workspace draw from the same pool. Workspaces on a paid plan get a fixed amount of one-time evaluation credits the first time AI is enabled — useful for prototyping in dev or staging without spending plan credits right away. Once those are spent, you'll need to either upgrade the plan or buy a credit pack to keep generating. Free-plan workspaces don't get evaluation credits — AI is a paid feature. See Pricing.

Is there a per-user rate limit?

There's no built-in per-user limit at the editor level. Credit caps apply at the workspace level — every project and every user under a workspace draws from the same allowance. If you need per-user accounting, capture ai:assistant:on:success events from the host app and attribute by your own user id. Pass that same id to the editor via End-User Identification so the rest of the editor's per-user state (saved blocks, uploads) is scoped consistently.

Why is full-template generation more expensive than a one-block edit?

Full-template turns reason over the entire layout and emit a much larger payload — that's more work for the model, which translates to more credits per turn. For day-to-day iteration on a paragraph or single block, prefer per-element edits — they cost a small fraction of a full-template turn. See Full Template tradeoffs.

Setup & visibility

How do I enable or disable the AI Assistant?

The AI Assistant is on by default — you don't need a feature flag to turn it on. It becomes available in the editor's mode switcher when:

  1. features.ai.assistant is left at its default of true (you only set it to false to disable).
  2. The project belongs to a workspace whose plan includes the AI Assistant. Check the plan in Console → Project → Settings.

To disable it on a specific embed (e.g. a free-tier user, an editor surface where you don't want AI), pass features.ai.assistant: false on that unlayer.init call. The assistant is hidden in that editor instance only.

If the AI Assistant is missing despite the plan covering AI, open the browser console — the editor prints a clear error when the plan / feature-flag combination doesn't pass. See Setup for the full reference and Setup → Disabling per init for the disable pattern.

Can I run the assistant offline / on-premise?

No. The assistant requires a network call to Unlayer's AI service (and from there to the model providers). On-premise deployments are not currently supported.

Privacy & data

Does the AI Assistant train on my data?

No. Prompts and surrounding design context are sent to Unlayer's AI service and forwarded to the underlying model providers (OpenAI, Anthropic, and others Unlayer uses as subprocessors). Inputs are not used to train models. For data-handling specifics tied to your contract — data residency, retention, DPA — contact your account manager.

Can my end users opt out of having their prompts sent to a third-party AI?

Yes — disable the assistant for that user by passing features.ai.assistant: false on the unlayer.init call that loads the editor for them. The editor doesn't ship a built-in "AI on/off" toggle for end users; that decision lives in your application's UI.

Does the assistant store my prompts?

Unlayer logs prompts for short-term debugging and abuse prevention. The model providers may apply their own retention windows per their terms. For zero-retention agreements, contact your account manager.

Behavior & quality

The assistant skipped my custom block. Why?

Your custom tool likely uses custom widgets or its own property editors, which the assistant can't introspect on its own. Declare the tool's value shape by passing a schema field on the registration call. See Custom Tools.

Why doesn't the assistant know the values of my merge tags?

Merge tags are preserved literally in the output — {{ first_name }} comes back as {{ first_name }}, not "John". The assistant doesn't see your data; it sees the tag and treats it as an opaque placeholder. If you want the assistant to reason about realistic data, pass a sample value through your application copy ("e.g. Hi John") instead of relying on the tag itself.

Why does the output look generic / not match my brand voice?

The assistant has no built-in knowledge of your brand. Today the best ways to nudge tone are:

  • Ask explicitly in the prompt ("sound less salesy and more helpful", "match the tone of the heading above").
  • Give the assistant nearby context — having well-written body copy in the same section makes it easier for the assistant to match.

What languages does the assistant support?

The assistant auto-detects the language from the user's last message and replies in that language. Generation works in any language the underlying model handles — Spanish, French, German, Portuguese, Italian, Japanese, Korean, Chinese, Arabic, and so on. The editor UI itself is translated separately — see Localization.

Why is the assistant producing different results for the same prompt?

LLM outputs are stochastic; identical prompts will produce slightly different results each turn. That's expected. The Ask for multiple options flow takes advantage of this: ask for 5 alternatives and pick the best one.

Performance

Is it fast?

Yes. Per-block edits (text, button, heading, image alt text) typically finish in a few seconds, and the assistant uses real-time streaming to apply changes to the visual editor as the model generates them: status text appears, then text streams into chat bubbles, and design operations land on the canvas one at a time — users see the design update live instead of waiting on a spinner. Routing also helps: simpler prompts are sent to a smaller, faster model (cheaper and quicker), while frontier models are reserved for prompts detected as complex. The one exception is full-template generation, which reasons over the entire layout in a single turn and is meaningfully slower (tens of seconds) — that's a deliberate tradeoff for the depth of work it does. See Full Template tradeoffs.

Why is full-template generation taking 30+ seconds?

Full-template turns are the heaviest work the assistant does — they reason over the entire layout and emit a much larger payload. Tens of seconds is the expected range for full-template work; sometimes longer for very large designs. See Full Template tradeoffs.

For faster iteration on a single block or paragraph, prefer per-element edits — those typically finish in a few seconds.

Debugging

Reporting an assistant failure to Unlayer support

The faster you give us context, the faster we can reproduce. When opening a ticket, include:

  • Your project ID — find it in Console → Project → Settings.
  • Editor version — run unlayer.version in the browser console (with the editor loaded on the page) and paste the value.
  • The prompt the user typed — exact text, ideally copied from the chat input.
  • When it happened — approximate timestamp in your local time zone or UTC. A 5-minute window is enough for us to find the request in our logs.
  • What you expected vs. what actually happened"I asked the assistant to translate this row to Spanish; it rewrote the row in English instead" is much more useful than "AI broke".
  • A screenshot or short screen recording of the failure — especially anything visible in the chat (status text, partial output, error banner).
  • Browser console output, if any errors logged — especially anything prefixed with [unlayer].
  • Setup — gating, plan requirements, and the disable-per-init pattern.
  • Pricing — credit-based model and what to do when you run out.
  • Events & Callbacks — programmatic hooks for logging and analytics.
  • How it works — what the assistant does at each scope.