Troubleshooting
The editor never leaves an empty box: when it cannot open, the box says why, with a code. Your
createEditor call rejects with the same code (error.code), and @lettrove/node throws a
LettroveApiError with it. Find the code below, or start from what you see.
By what you see
The box is empty, or stays on its loading shimmer
- The container has no height. The editor fills its element; give it one (
height: 720pxor100vh). createEditorwas never called, or threw before it ran: check your browser console.
The box says frame_blocked
The editor's frame did not answer. In order of likelihood:
- Your site is not on the project's list for this key's environment. Settings → Embed → Sites.
(A test key allows
localhostalready.) - The publishable key is wrong, revoked, or from another project.
- Your page's Content-Security-Policy blocks the frame: add
frame-src https://lettrove-embed.com. When this is the cause, the message names the rule. - The
releaseyou asked for does not exist, or is a release candidate opened with a live key.
The box says token_invalid
Your getToken did not give the editor a token. Look at your server's log for the token request:
its answer has the real code (key_invalid, origin_not_allowed…). Also check getToken resolves
with the token string, not the whole JSON answer.
The box says origin_not_allowed
The token was minted for another site than the page showing the editor. Mint it with the page's own
origin: the Origin header of the request your page made.
The box says key_invalid
The publishable key in your page and the secret key on your server belong to different projects (or one is test and the other live). Use the pair from the same project and environment.
Edits are not saved
The editor saves as your user works and fires design:saved. If it stops: check your browser's
network tab for /api/embed/v1/editor requests. A token_expired answer is normal and renewed
automatically through getToken; if getToken fails then, saving stops until it works again.
A webhook does not arrive
Settings → Embed → your project → Webhooks → Deliveries shows every attempt and your
server's answer. Usually: the address is not reachable from the internet (localhost never is),
your server answered something other than 2xx, or took longer than 10 seconds.
An exported email shows {{…}}
A merge tag was not filled. Check mergeTags in the export: fill those through merge, or with
your email service. See Merge tags.
Every error code
The full list, with what each means and what to do, is in Error codes.
Still stuck
Write to support@lettrove.com with the requestId from the error (every API refusal has one): it
lets us find exactly what happened.