Generate placeholder text
Generic lorem ipsum tells a client or a designer nothing about how a page will actually read once real words fill it in. This endpoint generates placeholder text shaped around your actual topic, so a mockup for a veterinary clinic reads like a veterinary clinic and not like five paragraphs of random Latin.
Run it online
Run this on our servers with your account. Free tools run in your browser; this one bills your KIT balance per the price above.
Why placeholder text still matters
Long before content is finalized, a designer needs paragraphs of roughly the right length to see whether a layout holds up, a developer needs realistic strings to catch a text-overflow bug, and a client reviewing a mockup needs something more convincing than a Latin block that reads as obviously fake. Classic lorem ipsum solves the length problem and nothing else — it says nothing about tone, subject or how headlines will actually break across two lines in the real product.
What generating 'on-topic' text actually means
Send POST /dev/lorem with a topic and how much text you need — a headline, a paragraph, a full block of copy — and the task returns filler that reads coherently around that subject instead of meaningless Latin, while still being unmistakably placeholder text, not content meant to ship. A furniture store's mockup gets paragraphs about materials and rooms; a fintech app's mockup gets paragraphs about accounts and transfers, so stakeholders reviewing early screens react to the layout instead of getting distracted wondering why the copy mentions nothing related to the product.
The Latin original, briefly
Classic lorem ipsum descends from a scrambled passage of Cicero's first-century-BCE writing on ethics, adopted by printers centuries later specifically because its Latin was unfamiliar enough not to distract from a layout — the opposite of what a modern digital product usually needs, where reviewers actually read what's on screen and a subject-relevant placeholder does more useful work.
How the request and delivery work
The call returns a task_id right away and generates the text in the background, arriving through a signed webhook call or a signed link valid for 24 hours, the same as any other async task on the platform. Pricing is a flat per-request fee plus a per-block charge, so generating one short headline costs a fraction of generating a dozen paragraphs for a full mockup, and nothing is charged if generation fails.
Fitting into a design or content pipeline
A design system that auto-populates component previews, or a CMS seed script that needs realistic-looking entries across dozens of content types, benefits the same way a human designer does: text that occupies the right amount of space and reads plausibly for the domain, generated on demand instead of hand-typed once and reused stale for years.
What you can do with it
Client-facing mockups
A design agency generates on-topic filler for a client's industry so early mockups read convincingly instead of showing generic Latin text that distracts from the layout.
CMS and database seeding
A developer seeds a staging database with realistic-looking, topic-relevant entries across many content types instead of repeating the same generic string everywhere.
UI overflow and length testing
A frontend team generates headlines and paragraphs of varying lengths on a target topic to catch text-overflow and truncation bugs before real copy exists.
Component library previews
A design system populates card, list and article components with topic-relevant placeholder text so previews look like real product screens, not templates.
FAQ
How do I generate lorem ipsum text with this API?
POST a topic and the amount of text needed to /dev/lorem, keep the returned task_id, and collect the generated text by webhook or a signed link valid for 24 hours.
Is the lorem ipsum generator API free?
No, there is no free tier or trial; it costs $0.003 per request plus $0.0135 per block of text generated, and a failed request is never charged.
Does it generate classic Latin lorem ipsum, or something else?
It generates placeholder text shaped around a topic you provide, not the traditional scrambled Latin passage, so mockups read plausibly for the actual subject.
Can I control how much text is generated?
Yes, request a headline, a single paragraph, or multiple blocks, and price scales with the amount of text generated.
Is this safe to leave in production content by mistake?
It's clearly generated placeholder text, not intended to ship as final copy, so it should be treated the same as any other filler text and swapped before launch.
Can I generate placeholder text for many topics in bulk?
Yes, submit one async task per topic or block and collect each result by webhook as it completes, which suits seeding many content types at once.
Why not just use regular lorem ipsum?
Regular lorem ipsum only solves for length; topic-relevant filler also gives designers and stakeholders a realistic sense of how the layout reads for the actual product.
Is this endpoint live?
Yes, /dev/lorem is live and accepting requests now.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, and soon from our app, email and Telegram.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/dev/lorem \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/dev/lorem", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/lorem",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/lorem", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/lorem", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"input": "…"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.lorem",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
422 | task_failed | The task failed after 3 retries. You are never charged for it. |