# Multiplied Studio — full docs # Send your first personalised GIF > From a design in the library to one dynamic URL in your email tool. Five beats, the same five the in-app walkthrough shows. Section: Get started · HTML: https://app.multiplied.studio/docs/get-started · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ Hey, it's Lloyd 👋. This is the whole product in one page. Every step below has its own page with the detail, but if you read only this one you can ship a campaign. _[Screenshot placeholder: Two-minute walkthrough of the Studio, recorded on the new UI]_ ## 1/ Edit a template Pick a design from the library, change the words and colours, save it to **My Designs**. Nothing personal yet: this is the frame every recipient's version will share. _[Screenshot placeholder: Library → design → save to My Designs]_ > ⓘ Want a design that is only yours? See [Custom templates](/docs/designs/custom-templates). ## 2/ Upload your data A CSV with a header row. One column identifies each recipient (an id, an email, a customer number); the other columns fill the personalised fields. We check the file, you decide what to do with anything we flag. _[Screenshot placeholder: Connect your data: what we check, what you decide]_ > ⓘ No CSV yet? Download the sample from the upload screen. Automating this? Start at the [API quickstart](/docs/api/quickstart). ## 3/ Render a batch Three free previews first, then a quote (one credit per row), then the batch. You watch the progress bar or close the tab and get an email when it finishes. _[Screenshot placeholder: Preview → quote → render]_ > ⓘ Short on credits? [How credits work](/docs/credits/how-credits-work) explains the quote and the top-up. ## 4/ Embed the URL Every recipient's GIF lives at the same address pattern. Copy the URL for your email tool and paste it into an image block; the tool fills in the merge token per recipient. ```text https://img.multiplied.media//{{ first_name }}.gif ``` Pick your email tool for the exact steps: [Braze](/docs/email/braze) · [Klaviyo](/docs/email/klaviyo) · [Bloomreach](/docs/email/bloomreach) · [Customer.io](/docs/email/customerio) · [Iterable](/docs/email/iterable) · [HubSpot](/docs/email/hubspot) · [BeeFree](/docs/email/beefree) · [any other tool](/docs/email/any-esp). ## 5/ Cost, and how you pay Credits. One credit renders one row. Previews are free (three per batch, up to 200 a day). You buy credits when the quote says you are short; nothing renders on credit. ## Verify Send the email to yourself from your email tool with a real recipient record. You should see your own GIF. A recipient who is not in your data sees the design's fallback image, never a broken image. ## Next steps - [Campaigns, emails & batches](/docs/campaigns) — how re-runs keep the same URL - [Merge fields](/docs/designs/merge-fields) — what can be personalised - [API quickstart](/docs/api/quickstart) — the same loop as four HTTP calls - [MCP](/docs/mcp/get-started) — run it from Claude Code, Cursor or Codex - [Troubleshooting](/docs/troubleshooting/gif-shows-the-fallback-not-the-name) --- # Pick a design > The library, the formats (portrait, wide, ticker), and where your private designs live. Section: Get started · HTML: https://app.multiplied.studio/docs/get-started/pick-a-design · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## What you are choosing A design is a motion template with personalisable fields. Formats today: portrait 4:5 (the email hero), wide (banners), and ticker (a looping strip). Hover a card to see it move. _[Screenshot placeholder: Library grid with format filters]_ ## Public library vs My Designs The library holds the templates everyone can use. Anything you save, and any template built only for you, lives under **My Designs**. ## Jump straight in You can edit and preview without an account. Saving and rendering ask you to sign in. > ⓘ Need something bespoke? [Custom templates](/docs/designs/custom-templates). --- # Edit your design > Change copy, colours and the personalised fields; autosave keeps your progress under My Designs. Section: Get started · HTML: https://app.multiplied.studio/docs/get-started/edit-your-design · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## Fields Every design exposes a few fields. Some are fixed for the campaign (a headline, a colour), some are personalised per recipient (a name, a number, a date). The personalised ones are the columns your CSV must supply. _[Screenshot placeholder: Editor with the field panel open]_ ## Autosave Edits save to My Designs as you go. Close the tab and come back; nothing is lost. ## Long values Names and numbers are fitted to their box automatically. See [Long names & text fit](/docs/designs/long-names-and-text-fit) for what happens at the extremes. --- # Connect your data > Upload a CSV, see what we check, decide what to do with the rows we flag. Section: Get started · HTML: https://app.multiplied.studio/docs/get-started/connect-your-data · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## The file A CSV with a header row. UTF-8 is best; we detect other encodings and repair what we can. Up to 250 MB and 250,000 rows per upload. _[Screenshot placeholder: Download the sample CSV, then upload yours]_ ## What we check - **Column headers** — present, unique, mappable to the design's fields. - **Number of rows** — what you will be quoted for. - **Missing values** — per column, so you know which field is affected. - **Mojibake** — text that was saved in the wrong encoding (`é` for `é`); we suggest the repair. - **Non-Latin scripts** — flagged so you can check the design's font covers them. ## What you decide - **Re-upload** a corrected file. - **Approve suggestions** (encoding repairs and the like) in one click. - **Download the issues CSV** to fix rows outside the tool. - **Continue without the flagged rows** — they are removed from this batch, not from your file. - **Fallbacks** — leave a value blank and that recipient gets the design's fallback for that field. _[Screenshot placeholder: Review screen: what we check on the left, your decisions on the right]_ > ⓘ Rows still flagged after verify? [rows-need-review-after-verify](/docs/troubleshooting/rows-need-review-after-verify). --- # Preview & quote > Three free samples, then the price, size and time for the whole batch, before you spend anything. Section: Get started · HTML: https://app.multiplied.studio/docs/get-started/preview-and-quote · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## The three samples We render the first three rows for free so you see real output: your data in your design, at the real file size. Flip between them. _[Screenshot placeholder: Preview carousel with price, size and time estimates]_ ## The numbers - **Credits required** — one per row (see [How credits work](/docs/credits/how-credits-work)). - **Size estimate** — the average of the three samples; email tools care about this. - **Time estimate** — measured, not promised; large batches run in the background. - **Rows, campaign, email** — confirm which campaign and which email this batch belongs to; the dynamic URL is tied to the email. ## Autosave Everything up to this point is saved. Close the tab and resume from Campaigns. ## Credits check If your balance is short, the render button becomes a top-up. See [Top up](/docs/credits/top-up). --- # Generate & get your URL > What happens while a batch renders, the completion email, and when the URL is safe to paste. Section: Get started · HTML: https://app.multiplied.studio/docs/get-started/generate-and-get-your-url · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## While it renders Rows render on our fleet. The progress bar shows done / total; you can leave and watch from Campaigns instead. You get an email when the batch completes. _[Screenshot placeholder: Progress state with the copy-URL control]_ ## The URL One URL per email, with your email tool's merge token in the file name: ```text https://img.multiplied.media//{{ first_name }}.gif ``` Choose the tool in the copy menu and the token is written in that tool's syntax. Rows that have not rendered yet, and recipients who are not in your data, resolve to the design's fallback image. ## When is it safe to send? When the batch is complete. Copying the URL earlier is allowed but you will see a warning: not every recipient will have their GIF yet. See [Batch lifecycle](/docs/campaigns/batch-lifecycle). > ⓘ Next: put it in your email — pick your tool from the list on the left. --- # Put your personalised GIF in Braze > Paste the dynamic URL into an image block; Braze fills in the merge token per recipient. Ends with a test send. Section: Put it in your email · HTML: https://app.multiplied.studio/docs/email/braze · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## Before you start - A completed batch (or one in progress — the fallback covers the rest). - The identifier column you chose when uploading (the value that names each file) must be a field Braze knows about for each recipient. ## Method 1: Paste the URL into an image block (Recommended) 1. In Multiplied, open the email under its campaign and copy the dynamic URL for **Braze**. It looks like this: ```text https://img.multiplied.media//{{${first_name}}}.gif ``` Braze Liquid personalisation: `{{${attribute}}}`. Custom attributes use the same shape. 2. In Braze, open the email template and add an **image block**. 3. Set the image source to the URL you copied. Give it alt text and a link. _[Screenshot placeholder: Braze template editor: image source field]_ ## Method 2: HTML block (Advanced) > ⚠ Some editors re-encode braces or strip unknown tokens inside `src`. Test-send before you schedule. ```html … ``` ## Verify - Send a test to yourself using a real recipient record, not a blank test profile. - You should see your own GIF. A recipient who is not in your data sees the design's fallback image. - Latency: the image is fetched when the email is opened; if the batch is complete, there is nothing to wait for. > ⓘ Broken image in the test? [broken-image-in-my-test-send](/docs/troubleshooting/broken-image-in-my-test-send). --- # Put your personalised GIF in Klaviyo > Paste the dynamic URL into an image block; Klaviyo fills in the merge token per recipient. Ends with a test send. Section: Put it in your email · HTML: https://app.multiplied.studio/docs/email/klaviyo · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## Before you start - A completed batch (or one in progress — the fallback covers the rest). - The identifier column you chose when uploading (the value that names each file) must be a field Klaviyo knows about for each recipient. ## Method 1: Paste the URL into an image block (Recommended) 1. In Multiplied, open the email under its campaign and copy the dynamic URL for **Klaviyo**. It looks like this: ```text https://img.multiplied.media//{{ person.user_id }}.gif ``` The token is written as `{{ person. }}` — Klaviyo's profile-property syntax, which covers custom properties (an id column) and built-ins like `first_name` alike. 2. In Klaviyo, open the email template and drag in a regular **Image** block. 3. Click **Select image**, then choose **Dynamic image**. 4. Paste the URL into the dynamic image URL field. Give it alt text and a link. > ⓘ Klaviyo's `default` filter is a second safety net: `{{ person.user_id|default:'fallback' }}` sends recipients with no id to the design's fallback image explicitly. _[Screenshot placeholder: Klaviyo image block: Select image → Dynamic image → URL field]_ ## Method 2: HTML block (Advanced) > ⚠ Some editors re-encode braces or strip unknown tokens inside `src`. Test-send before you schedule. ```html … ``` ## Verify - Send a test to yourself using a real recipient record, not a blank test profile. - You should see your own GIF. A recipient who is not in your data sees the design's fallback image. - Latency: the image is fetched when the email is opened; if the batch is complete, there is nothing to wait for. > ⓘ Broken image in the test? [broken-image-in-my-test-send](/docs/troubleshooting/broken-image-in-my-test-send). --- # Put your personalised GIF in Bloomreach > Paste the dynamic URL into an image block; Bloomreach fills in the merge token per recipient. Ends with a test send. Section: Put it in your email · HTML: https://app.multiplied.studio/docs/email/bloomreach · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## Before you start - A completed batch (or one in progress — the fallback covers the rest). - The identifier column you chose when uploading (the value that names each file) must be a field Bloomreach knows about for each recipient. ## Method 1: Paste the URL into an image block (Recommended) 1. In Multiplied, open the email under its campaign and copy the dynamic URL for **Bloomreach**. It looks like this: ```text https://img.multiplied.media//{{ customer.first_name }}.gif ``` Bloomreach Engagement uses Jinja: customer attributes are `{{ customer. }}`. Choose **Generic** in the copy menu and write the token by hand until Bloomreach appears in the list. 2. In Bloomreach, open the email template and add an **image block**. 3. Set the image source to the URL you copied. Give it alt text and a link. _[Screenshot placeholder: Bloomreach template editor: image source field]_ ## Method 2: HTML block (Advanced) > ⚠ Some editors re-encode braces or strip unknown tokens inside `src`. Test-send before you schedule. ```html … ``` ## Verify - Send a test to yourself using a real recipient record, not a blank test profile. - You should see your own GIF. A recipient who is not in your data sees the design's fallback image. - Latency: the image is fetched when the email is opened; if the batch is complete, there is nothing to wait for. > ⓘ Broken image in the test? [broken-image-in-my-test-send](/docs/troubleshooting/broken-image-in-my-test-send). --- # Put your personalised GIF in Customer.io > Paste the dynamic URL into an image block; Customer.io fills in the merge token per recipient. Ends with a test send. Section: Put it in your email · HTML: https://app.multiplied.studio/docs/email/customerio · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## Before you start - A completed batch (or one in progress — the fallback covers the rest). - The identifier column you chose when uploading (the value that names each file) must be a field Customer.io knows about for each recipient. ## Method 1: Paste the URL into an image block (Recommended) 1. In Multiplied, open the email under its campaign and copy the dynamic URL for **Customer.io**. It looks like this: ```text https://img.multiplied.media//{{customer.first_name}}.gif ``` Customer.io uses Liquid: person attributes are `{{customer.}}`. Choose **Generic** in the copy menu and write the token by hand until Customer.io appears in the list. 2. In Customer.io, open the email template and add an **image block**. 3. Set the image source to the URL you copied. Give it alt text and a link. _[Screenshot placeholder: Customer.io template editor: image source field]_ ## Method 2: HTML block (Advanced) > ⚠ Some editors re-encode braces or strip unknown tokens inside `src`. Test-send before you schedule. ```html … ``` ## Verify - Send a test to yourself using a real recipient record, not a blank test profile. - You should see your own GIF. A recipient who is not in your data sees the design's fallback image. - Latency: the image is fetched when the email is opened; if the batch is complete, there is nothing to wait for. > ⓘ Broken image in the test? [broken-image-in-my-test-send](/docs/troubleshooting/broken-image-in-my-test-send). --- # Put your personalised GIF in Iterable > Paste the dynamic URL into an image block; Iterable fills in the merge token per recipient. Ends with a test send. Section: Put it in your email · HTML: https://app.multiplied.studio/docs/email/iterable · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## Before you start - A completed batch (or one in progress — the fallback covers the rest). - The identifier column you chose when uploading (the value that names each file) must be a field Iterable knows about for each recipient. ## Method 1: Paste the URL into an image block (Recommended) 1. In Multiplied, open the email under its campaign and copy the dynamic URL for **Iterable**. It looks like this: ```text https://img.multiplied.media//{{first_name}}.gif ``` Iterable Handlebars: user fields are `{{field}}`. 2. In Iterable, open the email template and add an **image block**. 3. Set the image source to the URL you copied. Give it alt text and a link. _[Screenshot placeholder: Iterable template editor: image source field]_ ## Method 2: HTML block (Advanced) > ⚠ Some editors re-encode braces or strip unknown tokens inside `src`. Test-send before you schedule. ```html … ``` ## Verify - Send a test to yourself using a real recipient record, not a blank test profile. - You should see your own GIF. A recipient who is not in your data sees the design's fallback image. - Latency: the image is fetched when the email is opened; if the batch is complete, there is nothing to wait for. > ⓘ Broken image in the test? [broken-image-in-my-test-send](/docs/troubleshooting/broken-image-in-my-test-send). --- # Put your personalised GIF in HubSpot > Paste the dynamic URL into an image block; HubSpot fills in the merge token per recipient. Ends with a test send. Section: Put it in your email · HTML: https://app.multiplied.studio/docs/email/hubspot · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## Before you start - A completed batch (or one in progress — the fallback covers the rest). - The identifier column you chose when uploading (the value that names each file) must be a field HubSpot knows about for each recipient. ## Method 1: Paste the URL into an image block (Recommended) 1. In Multiplied, open the email under its campaign and copy the dynamic URL for **HubSpot**. It looks like this: ```text https://img.multiplied.media//{{contact.first_name}}.gif ``` HubSpot personalisation tokens are `{{ contact. }}` (internal property name, not the label). 2. In HubSpot, open the email template and add an **image block**. 3. Set the image source to the URL you copied. Give it alt text and a link. _[Screenshot placeholder: HubSpot template editor: image source field]_ ## Method 2: HTML block (Advanced) > ⚠ Some editors re-encode braces or strip unknown tokens inside `src`. Test-send before you schedule. ```html … ``` ## Verify - Send a test to yourself using a real recipient record, not a blank test profile. - You should see your own GIF. A recipient who is not in your data sees the design's fallback image. - Latency: the image is fetched when the email is opened; if the batch is complete, there is nothing to wait for. > ⓘ Broken image in the test? [broken-image-in-my-test-send](/docs/troubleshooting/broken-image-in-my-test-send). --- # BeeFree > Using Multiplied inside the BeeFree editor — the add-on inserts the dynamic URL into your email for you. Section: Put it in your email · HTML: https://app.multiplied.studio/docs/email/beefree · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## How it works Inside BeeFree, Multiplied opens as an add-on. You pick a design, connect your data and render without leaving the editor. When the batch is ready the add-on inserts an image block with the dynamic URL. _[Screenshot placeholder: BeeFree add-on: insert into email]_ ## While the batch is still rendering The add-on can insert a placeholder image so you can keep building; the block points at the dynamic URL, so recipients see their GIF once rendering completes and the fallback until then. ## Verify Send a test through your sending platform with a real recipient record. --- # Any other email tool > The URL pattern and the one rule that makes it work anywhere: the file name is your merge token. Section: Put it in your email · HTML: https://app.multiplied.studio/docs/email/any-esp · Index: https://app.multiplied.studio/llms.txt ## The pattern ```text https://img.multiplied.media//.gif ``` `` is fixed per email. `` is whatever your tool substitutes per recipient. The substituted value must equal the identifier you chose when uploading (lower-cased if you ticked lowercase; spaces and punctuation are normalised the same way on both sides). ## Steps 1. In Multiplied, copy the dynamic URL with the **Generic** dialect: the token is written as `{{identifier}}`. 2. Replace `{{identifier}}` with your tool's syntax for that field. 3. Put the URL in an image block or an ``; test-send to a real recipient record. ## Tools we already write the token for Braze · Klaviyo · HubSpot · Iterable · Mailchimp · Salesforce Marketing Cloud · Postmark. Choose the tool in the copy menu and skip step 2. > ⓘ Want your tool in that list? [Tell us](mailto:hello@multiplied.media?subject=Merge%20dialect%20request). --- # Merge fields — what personalises > Names, numbers and dates per recipient; fixed fields per campaign; how a CSV column becomes a field. Section: Designs & data · HTML: https://app.multiplied.studio/docs/designs/merge-fields · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## Two kinds of field - **Campaign fields** — the same for everyone (headline, colour, offer). Set in the editor. - **Personalised fields** — one value per recipient (first name, points, renewal date). Supplied by a CSV column. ## Mapping On upload you map each personalised field to a column. Columns you do not map are ignored. A field you leave unmapped keeps the value saved in the design, for everyone. ## Value types All CSV cells are text. Number fields (a count, a currency amount) are read from the text; a value that does not parse gets the field's fallback. --- # Long names & text fit > Text shrinks to fit its box; what happens at the extremes and how to test them. Section: Designs & data · HTML: https://app.multiplied.studio/docs/designs/long-names-and-text-fit · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## The rule Each text field has a box. Short values render at the design size; long values shrink until they fit, down to a minimum the designer set. Beyond that they wrap or clip according to the design. ## Test with your worst rows Put your longest name and your largest number in the first three rows of a test CSV. The free previews show exactly what those recipients will get. ## Scripts and fonts The verify step flags non-Latin text so you can confirm the design's font covers it. Fonts with missing glyphs fall back to a system face rather than rendering boxes. --- # Fallback & missing rows > Who sees the fallback image, and why a broken image is never the answer. Section: Designs & data · HTML: https://app.multiplied.studio/docs/designs/fallback-and-missing-rows · Index: https://app.multiplied.studio/llms.txt ## When the fallback shows The dynamic URL resolves per recipient. Three cases return the design's **fallback image** instead of a personalised GIF: 1. The recipient is not in the batch (a new subscriber, a test profile). 2. The row failed to render (rare; listed in the failed-rows CSV). 3. The batch is still rendering and this row has not landed yet. ## What the fallback is A rendered version of the design with the fallback values you set per field (for example "there" instead of a first name). It is a real image at the same size, so layouts never shift and no email client shows a broken-image icon. ## Missing values inside a row A blank cell uses that field's fallback value; the rest of the row still personalises. Blank identifier cells are flagged at verify because they cannot be addressed. --- # Formats, sizes & weight > GIF by default, WebP alongside when you want it, MP4 on request; dimensions per design; keeping file size email-friendly. Section: Designs & data · HTML: https://app.multiplied.studio/docs/designs/formats-sizes-and-weight · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## Formats - **GIF** — the default and the format email clients agree on. - **WebP** — optional second output at the same URL with a `.webp` extension, for web pages and clients that support it. - **MP4** — on request, for channels that play video. ## Dimensions Set by the design: portrait 4:5, wide, or ticker. The quote shows the exact pixel size. ## Weight The preview shows the real size of your samples. Shorter loops, fewer colours and smaller dimensions all reduce weight; ask us if a design needs to come in under a target. --- # Custom templates > A design built only for you — where it lives and how to ask for one. Section: Designs & data · HTML: https://app.multiplied.studio/docs/designs/custom-templates · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## Where private designs live Templates built for your account do not appear in the public library. They live with your saved work under **My Designs**, so the library stays fast and yours stay yours. ## Asking for one Tell us what the animation should do, the fields it needs, and the formats. We build it, publish it to your account only, and you use it like any other design. > ⓘ [hello@multiplied.media](mailto:hello@multiplied.media?subject=Custom%20template) --- # Campaigns, emails & batches > The model — a campaign holds emails, an email holds one dynamic URL, batches fill it. Re-runs never change the URL. Section: Campaigns, emails & batches · HTML: https://app.multiplied.studio/docs/campaigns · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## The three levels ```text Campaign (Summer sale) └─ Email (Email 1 — hero) ← one dynamic URL ├─ Batch 1 (first 10,000 recipients) └─ Batch 2 (the late sign-ups) ``` The URL belongs to the **email**. Every batch under it renders into the same address pattern, so you paste the URL once and keep adding batches: a re-run, a top-up after buying credits, next week's new subscribers. ## Status you will see - **Ready** — accepted, rendering not started. - **Rendered** — every row has landed. - **Live** — the email is sending; the URL is being fetched. Copying the URL while a batch is incomplete shows a warning: not every recipient has their GIF yet. You can still copy it; the fallback covers the gap. ## Expiry Each batch shows an expiry date and days left. See [Retention & expiry](/docs/campaigns/retention-and-expiry). --- # Emails > One email, one design, one URL. Name it the way your email tool names it so both sides match. Section: Campaigns, emails & batches · HTML: https://app.multiplied.studio/docs/campaigns/emails · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## Why the URL is on the email Batches come and go; the image tag in your email does not. Binding the URL to the email means you never re-paste after a re-run. ## Naming Use the same names as your email tool ("Email 1 — hero", "Winback #2"). The Campaigns screen mirrors that list so the two tools read the same. --- # Batch lifecycle > Queued → rendering → complete; cancel; what the counts mean. Section: Campaigns, emails & batches · HTML: https://app.multiplied.studio/docs/campaigns/batch-lifecycle · Index: https://app.multiplied.studio/llms.txt ## States | State | Meaning | |---|---| | queued | Accepted, credits reserved, rows waiting for a render slot. | | running | Rows rendering on the fleet; `done` climbs toward `totalRows`. | | completed | Every row has terminated (succeeded or failed). | | cancelled | You stopped it; rows not yet rendered are released and their credits returned. | | stalled | Nothing has moved for a while — usually the fleet catching up; it resumes on its own. | ## Counts `done` = succeeded + failed. Failed rows are listed in the failed-rows CSV with the reason; fix the cells and submit them as a new batch under the same email. ## Cancel Cancelling is irreversible for the rows not yet rendered. Rendered rows stay at their URLs. --- # Re-runs & idempotency > Submitting the same rows twice, on purpose and by accident. Section: Campaigns, emails & batches · HTML: https://app.multiplied.studio/docs/campaigns/re-runs-and-idempotency · Index: https://app.multiplied.studio/llms.txt ## On purpose Submit a new batch under the same email. Same identifier → the new render overwrites the old file at the same URL (or is skipped, or suffixed, per the duplicate policy you chose on upload). ## By accident Over the API, send an `Idempotency-Key` header with every submit. A retried call with the same key returns the original batch with `replayed: true` and spends nothing. In the app, the wizard keeps a draft, so a refresh mid-flow resumes rather than resubmits. --- # Retention & expiry > How long rendered GIFs stay at their URL, what the days-left counter means, and what happens after. Section: Campaigns, emails & batches · HTML: https://app.multiplied.studio/docs/campaigns/retention-and-expiry · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## Expiry Every batch shows an expiry date and a days-left counter on the Campaigns screen. Until then every recipient's GIF is served from the CDN. ## After expiry The URL keeps working: recipients see the design's fallback image, never a broken image. Re-run the batch to refresh the files. > ⓘ Retention periods per plan are being finalised; this page will state the numbers. --- # How credits work > One credit renders one row. Previews are free. A quote comes before every spend. Section: Credits & billing · HTML: https://app.multiplied.studio/docs/credits/how-credits-work · Index: https://app.multiplied.studio/llms.txt ## The unit One credit = one rendered row, whatever the format. A 1,431-row batch costs 1,431 credits. ## Free previews The first three rows of a batch render free so you can see real output before paying. Up to 200 free preview renders per account per day. ## The quote Before any batch you see (or request, via the API) a quote: rows, credits needed, your balance, the output size. Quoting has no side effects. ## Short on credits The batch is refused with the exact numbers: credits needed, your balance, how many rows you could render now, and the top-up that covers the rest. Two ways forward: render the affordable rows, or [top up](/docs/credits/top-up) and submit unchanged. --- # Top up > Buying credits from the quote, and why API keys cannot do it. Section: Credits & billing · HTML: https://app.multiplied.studio/docs/credits/top-up · Index: https://app.multiplied.studio/llms.txt _This page is a structure-only placeholder: the Studio UI it describes is being redesigned, so step text and screenshots land with the new UI._ ## From the app The credits pill in the top bar and the render button both open checkout when you are short. Pay, return to the tab, the draft is still there — submit. _[Screenshot placeholder: Credits pill → checkout → back to the draft]_ ## From an agent or the API Deliberately not possible. Keys can quote and submit; the top-up needs a signed-in person. The refusal tells the agent exactly what to ask you for. --- # Quotes & free previews > What a quote contains, what previews prove, and the daily preview allowance. Section: Credits & billing · HTML: https://app.multiplied.studio/docs/credits/quotes-and-free-previews · Index: https://app.multiplied.studio/llms.txt ## A quote ```json {"ok": true, "rows": 1431, "creditsNeeded": 1431, "balance": 200, "formats": ["gif"], "dimensions": {"width": 1080, "height": 1350}} ``` No batch, no reservation, nothing enqueued. Ask as often as you like (60 per minute per account). ## Previews A preview batch is at most three rows, credit-exempt, rendered on the priority lane so it comes back in seconds. Outputs are real CDN files, so what you see is what recipients get. ## The allowance 200 free preview renders per account per day. Past that, previews are refused until the window rolls over; paid batches are unaffected. --- # Outlook shows only the first frame > Outlook for Windows does not play GIFs. What recipients see and how to design for it. Section: Troubleshooting · HTML: https://app.multiplied.studio/docs/troubleshooting/outlook-shows-only-the-first-frame · Index: https://app.multiplied.studio/llms.txt ## Why Outlook for Windows (the desktop app) renders email with Word's engine, which shows the **first frame** of an animated GIF as a still image. Outlook on the web, Mac and mobile play the animation. ## What to do - Make the first frame carry the message: name, offer, call to action visible without motion. - Preview the first frame for your worst rows (longest name, biggest number). - Ask us about designs whose loop starts on the "hero" frame. --- # GIF shows the fallback, not the name > The image loads but it is the generic version. Almost always an identifier mismatch. Section: Troubleshooting · HTML: https://app.multiplied.studio/docs/troubleshooting/gif-shows-the-fallback-not-the-name · Index: https://app.multiplied.studio/llms.txt ## Check, in order 1. **Is the recipient in the batch?** New sign-ups after the upload get the fallback until you run a batch for them. 2. **Does the merge token produce the same value as the identifier column?** The file name is the identifier: if you uploaded `user_id` and the email substitutes `email`, nothing matches. 3. **Case and characters.** If you ticked *lowercase* on upload, the token's value must be lower-case too (most tools have a `| downcase` filter). Spaces and punctuation are normalised identically on both sides; non-Latin identifiers become stable hash slugs, so use an ASCII id column where you can. 4. **Did the row fail?** Failed rows are listed in the batch's failed-rows CSV with the reason. 5. **Is the batch complete?** Rows still rendering resolve to the fallback until they land. ## Test it directly Open the dynamic URL in a browser with a real identifier typed into the file name. If that shows the fallback, the problem is on our side of the equals sign; if it shows the name, it is the merge token. --- # Rows need review after verify > What each flag means and the quickest way to clear it. Section: Troubleshooting · HTML: https://app.multiplied.studio/docs/troubleshooting/rows-need-review-after-verify · Index: https://app.multiplied.studio/llms.txt | Flag | Meaning | Fastest fix | |---|---|---| | Missing identifier | The cell that names the file is blank | Fill it or remove the row | | Missing value | A mapped field is blank | Leave it (fallback applies) or fill it | | Encoding repaired | We detected mojibake and fixed it | Approve the suggestion | | Non-Latin script | Text outside Latin letters | Check the preview; ask us about font coverage | | Duplicate identifier | Two rows would name the same file | Pick a duplicate policy (skip, suffix, overwrite) | Continuing without the flagged rows removes them from this batch only; your file is untouched. Download the issues CSV to fix them and submit as a second batch under the same email. --- # Batch stuck in queued > Nothing moved for a few minutes. What is normal, what is not. Section: Troubleshooting · HTML: https://app.multiplied.studio/docs/troubleshooting/batch-stuck-in-queued · Index: https://app.multiplied.studio/llms.txt ## Normal - Large batches queue behind a render fleet that scales up on demand; the first rows can take a couple of minutes to appear. - A `stalled` state means nothing has moved for a while; it resumes on its own when the fleet catches up. ## Not normal - No progress after 15 minutes on a small batch. - `done` climbing but every row failing. In both cases [tell us](mailto:hello@multiplied.media?subject=Batch%20stuck) with the batch id. Credits for rows that never render are returned when the batch is cancelled. --- # Broken image in my test send > A broken-image icon means the URL did not resolve at all. It is the token or the pasting, not the render. Section: Troubleshooting · HTML: https://app.multiplied.studio/docs/troubleshooting/broken-image-in-my-test-send · Index: https://app.multiplied.studio/llms.txt ## Check 1. **View the email source.** The `src` should read `https://img.multiplied.media//.gif` with a real value substituted. If you see `%7B%7B` or a literal `{{`, the tool did not substitute the token (test profiles are often empty). 2. **Encoding.** Some editors URL-encode braces inside `src`. Use the tool's image-source field rather than raw HTML, or pick the token syntax the tool expects. 3. **Test with a real record.** Blank test profiles have no identifier; the substituted file name is empty and the URL is not a valid file. A real but unknown identifier never shows a broken image: it shows the fallback. So a broken icon is always the URL itself. --- # Insufficient credits > The submit was refused with a credits object. Two ways forward. Section: Troubleshooting · HTML: https://app.multiplied.studio/docs/troubleshooting/insufficient-credits · Index: https://app.multiplied.studio/llms.txt ```json {"ok": false, "error": "This batch needs 1431 credits; you have 200.", "credits": {"needed": 1431, "balance": 200, "affordableRows": 200, "topUpCredits": 1231, "topUpAmountCents": 12310}} ``` - **Render what you can afford:** resubmit with `rows` sliced to `affordableRows`. - **Top up and resubmit unchanged:** a signed-in person buys `topUpCredits`; the draft survives the checkout redirect. Nothing was reserved or rendered. Over the API this arrives as a refusal body, not a 5xx; agents should treat it as a decision point. --- # 429 rate limited > You hit a per-account bucket. Wait retryAfterSeconds, then continue. Section: Troubleshooting · HTML: https://app.multiplied.studio/docs/troubleshooting/429-rate-limited · Index: https://app.multiplied.studio/llms.txt ```json {"ok": false, "error": "Rate limit: 30 submits per minute.", "retryAfterSeconds": 41} ``` Buckets are per account, fixed one-minute windows: submit 30, quote 60, verify 10, staging 20, draft 30, campaign 20, cancel 30. Back off for `retryAfterSeconds` (also in the `retry-after` header). Parallel workers share the account's bucket; serialise submits or batch rows into fewer, larger calls (inline up to 10,000 rows; staged up to 250,000). --- # "Batch not complete" warning when copying the URL > You can copy early. Here is what recipients see if you send before every row has rendered. Section: Troubleshooting · HTML: https://app.multiplied.studio/docs/troubleshooting/batch-not-complete-warning-when-copying-url · Index: https://app.multiplied.studio/llms.txt The URL is valid as soon as the batch is accepted. Rows that have rendered show their personalised GIF; rows still in the queue show the design's fallback image until they land. Nothing breaks. Send early when the fallback is acceptable (a generic version of the same design). Wait for **complete** when every recipient must see their own version — the completion email tells you when.