One endpoint. The image comes back in the response.
Design a template in the editor, mark the fields that change, then POST your data to the render URL. You get image bytes, not a job id. Typical render is under 2 seconds, and the free tier is permanent so you can build the whole integration before you pay anything.
Three stepsto the first image.
Nothing to install. If you have a design id and a key, the next request returns a finished image.
Create a design
Start from a template or a blank canvas, then mark the text and image layers you want to change per render as dynamic.
Create a render key
In your account settings. The key goes in the dma-api-key header, and you can revoke it from the same screen.
Send the render request
POST the fields you marked dynamic. The response is the image, in the format you asked for: png, jpeg, webp or single-page pdf.
curl -X POST "https://render.imejis.io/v1/{design_id}?format=png" \
-H "dma-api-key: $IMEJIS_KEY" \
-H "Content-Type: application/json" \
-d '{"headline":{"text":"Spring is here"}}' \
-o promo.pngThree APIs,one account.
Mixing them up is the most common integration mistake, so here they are side by side with what authenticates each one.
https://render.imejis.io/v1/{design_id}
The one that generates images. GET or POST, authenticated with the dma-api-key header, and the response body is the image itself. No webhook, no polling, no second request to fetch the file.
https://api.imejis.io
Everything around the render: designs, templates, fonts, files, API keys, analytics and carousels. OAuth 2.0 Bearer tokens, described by an OpenAPI document you can generate a client from.
https://api.imejis.io/api/mcp
The same account over the Model Context Protocol, streamable HTTP, so an agent creates and renders designs as the authenticated user. OAuth with dynamic client registration, so there is no key to paste.
The documentsworth bookmarking.
Written for people, and published again in formats a program can parse.
Copy-paste examples
The same render call in cURL, JavaScript, Python, PHP, Ruby, Go, Java and 30+ other languages and frameworks, each as a page you can hand to a teammate.
OAuth 2.0, written for agents
Authorization code with PKCE, dynamic client registration (RFC 7591), and the protected-resource metadata an MCP client needs to discover the authorization server.
27 component types, with their JSON
Text, images, shapes, QR codes, tables, metrics and the chart family, each with its properties, variants and a sample payload to render it.
Docs an agent can read
Append .md to any URL for the markdown version of that page, and read llms.txt for the index. The homepage also answers an Accept: text/markdown request in markdown.
Keys, quotaand what counts.
The rules that decide your bill and your error handling, in one place.
Build against it with no card
100 renders a month, free, forever, with full API access. That is the sandbox: the same endpoints, the same output, no watermark.
Every render counts as a render
Including a GET render URL embedded in an img tag, which re-renders on each page load. Over quota, the API answers 429 with the usage, the limit and the reset time in the body.
Create and revoke your own
Render keys are created, rotated and revoked in your account settings, by you or by an agent holding a write-scoped token. Keys are scoped to one account.
Versioned paths, published changes
The render path carries its version, so a breaking change ships on a new path instead of changing the one you call. Product and API changes are written up as they ship, and the API exposes a health endpoint you can poll.
Ship it this afternoon
Create an account, create a key, render your first image. If something in the docs is wrong or missing, tell us and we'll fix the page.