---
title: "Personalized Book Cover API: One Cover Per Child"
description: "Personalized book cover API: set a child's name into the cover art, not on top of it. Custom fonts, print-ready PDF, and the reprint cost that sets margin."
url: "https://www.imejis.io/blogs/use-cases/personalized-book-cover-api"
published: "2026-10-07"
---

# Personalized Book Cover API: One Cover Per Child

A personalized book cover API renders the cover with the child's name already part of the artwork. You build the cover once, mark the name dynamic, and every order gets its own file. No designer opens anything.

The distinction that matters is between a name set _into_ the cover and a name stamped _on_ it. Stamped looks like a mail merge, and parents can tell. Set into the art, with the book's own display face, its own colour, sitting where the illustrator left room for it, looks like the book was made for that child. Both cost exactly one render. Only one of them sells.

## Design the space for the name, then fill it

Dimensions are fixed at design time, which for print is what you want. A book has a trim size, and every cover in the run has to be that size or the printer rejects the batch.

Build for the finished sheet, not the trim:

- **Trim plus bleed.** If you print 8.5 by 8.5 inches with a 0.125 inch bleed, the design is 8.75 by 8.75 inches, which at 300 DPI is 2625 by 2625 pixels.
- **Renders cap at 4096 by 4096**, so a square picture book at 300 DPI has room to spare. A large landscape trim is worth checking against that ceiling before you commit.
- **The illustration is baked in.** Only the layers you mark dynamic can change, so the artwork can't be swapped by a bad order payload.

The name layer sits inside that art with the space already reserved for it. That's a decision the illustrator makes once, and then it holds for every order.

## Names are wildly variable, and the type has to absorb it

"Bo" and "Alessandra" are going into the same slot on the same cover.

Auto-resize handles the length. Set `minFontSize` and `maxFontSize` and the type shrinks until it fits, so nothing overflows the space and nothing clips:

```json
{
  "key": "child_name",
  "type": "text",
  "dynamic": true,
  "properties": {
    "fontFamily": "Baloo Bhaijaan 2",
    "autoResize": true,
    "minFontSize": 64,
    "maxFontSize": 180,
    "textAlignment": "center",
    "color": "#FFF3E0",
    "strokeWidth": 6,
    "strokeColor": "#7B3F00",
    "textShadow": "0 6px 12px rgba(0,0,0,0.25)"
  }
}
```

The stroke and shadow are what stop a long name turning to mush when it lands over a busy part of the illustration. Set the minimum where the name still reads from across a room, because that's how a picture book gets chosen.

## Two failure modes that only show up at volume

Both are quiet, which is what makes them expensive.

**A font that silently falls back.** Reference a `fontFamily` the renderer doesn't recognise and it doesn't error. It substitutes a default and returns a perfectly valid cover in the wrong typeface. Upload your display face first, then check the `x-dma-warnings` response header on your first few renders: it names any font that fell back. Do that once, before the run, rather than discovering it on a pallet of printed books.

**A glyph the font doesn't carry.** A display face drawn for a children's book often covers basic Latin and stops there. "Zoë", "José" and "Łukasz" then render as missing boxes. Normalizing input helps, and the [Unicode normalization forms](ref:unicode/reports/tr15/) are the reference for doing it properly, but normalization can't invent a glyph that isn't in the file. Test your ten most awkward names against the actual font before you sell the product.

## Where this stops: the inside of the book

Worth being direct, because it's the thing that decides whether we fit your product at all.

A render returns a **single-page PDF**. A personalized picture book usually carries the child's name on several interior spreads too, and there's no book-block output here. Your options are:

| Approach                        | Renders       | Works when                               |
| ------------------------------- | ------------- | ---------------------------------------- |
| Cover only, generic interior    | 1 per book    | The cover carries the personalization    |
| Cover plus personalized spreads | 1 per page    | You assemble the PDF yourself downstream |
| Full personalized book block    | Not supported | Use a document engine instead            |

The middle row is a real workflow: render page by page, then merge with whatever your print pipeline already uses. A 24-page book is 24 renders. If the whole product is a fully personalized book block and you'd rather not run an assembly step, APITemplate's document engine is the better tool and we'd say so.

## What a personalized book cover API costs

One render per cover, and a reprint costs another.

As of September 2026, Basic is $14.99 for 1,000 renders, which works out at $0.015 each. Pro is $24.99 for 5,000, or $0.005. Either way the personalization is a rounding error next to printing and postage, which is the point: it stops being a cost question and becomes a margin question about reprints.

| Volume a month                  | Renders (cover only) | Plan                              |
| ------------------------------- | -------------------- | --------------------------------- |
| 60 books                        | 60                   | 100 free renders a month, no card |
| 900 books                       | 900                  | Basic, $14.99                     |
| 900 books, cover plus 4 spreads | 4,500                | Pro, $24.99                       |

Track the reprint rate rather than the render price. A 3% reprint rate on 900 books is 27 extra renders, which is nothing, but the same 3% on print and postage is the number that decides whether personalization pays. The [pricing page](/pricing) has the plan detail and [render quota](/help/pricing-and-quota) covers the counters.

## Getting started

Take one cover, rebuild it as a design at trim plus bleed, and mark only the name dynamic. Render your twenty most awkward customer names against it and look at the warnings header before anything reaches a printer. The [text component](/components/text) page has the resize and stroke controls live, [dynamic fields](/help/dynamic-fields) covers what to open up, and the [API docs](/apis) have working calls to drop into an order handler.

If you're producing certificates or invitations from the same setup, [certificate generation](/blogs/use-cases/certificate-generator-api) and [per-guest invitations](/blogs/use-cases/wedding-invitation-api) cover the same mechanics on different jobs.
