Lorem ipsum API: placeholder paragraphs, sentences or words
Need filler text for a mock-up, a screenshot or a CI fixture? Ask for a number of paragraphs, sentences or words and get classic-looking Latin placeholder copy back as JSON. Pass the same seed to get the same sample every time — useful for tests and docs.
/v1/lorem?paragraphs=2&seed=42 returns JSON. No key, CORS on, 60 requests a minute./v1/lorem
Lorem ipsum placeholder text: paragraphs, sentences or words. Change the values and press Send request to call the live API.
Parameters
| Name | Type | What it does | Default |
|---|---|---|---|
paragraphs | integer | How many paragraphs (1–20). Wins over sentences/words if several are set. | — |
sentences | integer | How many sentences (1–100) | — |
words | integer | How many words (1–500) | — |
start | boolean | Begin with classic Lorem ipsum… (default true) | true |
html | boolean | Also return an html field with <p> wrappers | false |
seed | string | Repeatable sample (integer or short string) | — |
Example
Request:
GET https://api.oddlathe.com/v1/lorem?paragraphs=2&seed=42
Response (generated by the real code when these docs were last built; random or time-based values will differ for you):
{
"mode": "paragraphs",
"count": 2,
"start_with_lorem": true,
"paragraphs": [
"Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt. Nisl habitant odio aliquam in ex, placerat montes veniam faucibus elementum sit. Pharetra varius elit quis faucibus elementum cupidatat vitae faucibus eu volutpat incididunt habitant. Sapien fames vestibulum tortor, elit pulvinar officia irure eu consectetur. Ultricies exercitation nostrud nunc occaecat anim fugiat proin aliquam sit pellentesque lectus. Erat fames amet ultricies habitant lacinia nulla erat ex exercitation dapibus ut amet.",
"Labore voluptate ut tortor reprehenderit nec. Velit non quam anim, aliquip exercitation pretium magna eiusmod nunc. Dolor eget aliquam commodo, do nisi amet sunt fringilla magnis. Pretium sit mauris nascetur vulputate, morbi sapien pulvinar quam. Ad congue a enim dolore montes placerat turpis."
],
"text": "Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt. Nisl habitant odio aliquam in ex, placerat montes veniam faucibus elementum sit. Pharetra varius elit quis faucibus elementum cupidatat vitae faucibus eu volutpat incididunt habitant. Sapien fames vestibulum tortor, elit pulvinar officia irure eu consectetur. Ultricies exercitation nostrud nunc occaecat anim fugiat proin aliquam sit pellentesque lectus. Erat fames amet ultricies habitant lacinia nulla erat ex exercitation dapibus ut amet.\n\nLabore voluptate ut tortor reprehenderit nec. Velit non quam anim, aliquip exercitation pretium magna eiusmod nunc. Dolor eget aliquam commodo, do nisi amet sunt fringilla magnis. Pretium sit mauris nascetur vulputate, morbi sapien pulvinar quam. Ad congue a enim dolore montes placerat turpis.",
"stats": {
"paragraphs": 2,
"sentences": 11,
"words": 116,
"chars": 827
},
"seed": "42"
}
Code examples
curl 'https://api.oddlathe.com/v1/lorem?paragraphs=2&seed=42'const params = new URLSearchParams({
paragraphs: "2",
seed: "42"
});
const res = await fetch(`https://api.oddlathe.com/v1/lorem?${params}`);
if (!res.ok) throw new Error((await res.json()).error.message);
const data = await res.json();
console.log(data);import json, urllib.parse, urllib.request
params = urllib.parse.urlencode({"paragraphs": "2", "seed": "42"})
url = "https://api.oddlathe.com/v1/lorem?" + params
# Send a User-Agent: the edge network refuses Python's default one.
req = urllib.request.Request(url, headers={"User-Agent": "my-script/1.0"})
with urllib.request.urlopen(req, timeout=10) as r:
data = json.load(r)
print(data)When it's useful
- Mock-ups and design comps that need realistic-looking body copy
- CI fixtures and screenshot tests that must stay bit-stable across runs
- Scaffolding a blog or CMS page before the real copy arrives
- Teaching the difference between words, sentences and paragraphs as units
Good to know
- Pass exactly one of
paragraphs(1–20),sentences(1–100) orwords(1–500). If several are set, paragraphs wins, then sentences, then words. With none set, you get 3 paragraphs. start(default true) begins the first paragraph with the classicLorem ipsum dolor sit amet…opener. Setstart=falsefor plain randomised filler.html=1also returns anhtmlfield with each paragraph wrapped in<p>tags.textandparagraphsare always present.seedmakes the sample repeatable. Integers are used directly; any other short string is hashed (SHA-256) to a 32-bit seed. The same seed produces the same text in Anvil and in the Tooltern browser tool.- Pure generation on the query string; nothing is stored or fetched. Output is capped by the count limits above.
- Browser UI: Tooltern lorem ipsum generator (same generator, nothing leaves your device).
Placeholder text for mock-ups and fixtures. Ask for paragraphs, sentences or words; optionally start with the classic Lorem ipsum opener, wrap in HTML <p> tags, and pass a seed for a repeatable sample. Pure generation; nothing is stored.
Errors
Errors are JSON like {"error": {"code": "…", "message": "…"}}. The ones this endpoint can return:
bad_param(400): a value is the wrong type or out of range (the message says which)rate_limited(429): over 60 requests a minute; wait for Retry-After seconds
Questions
Is this real Latin?
No. It is the traditional typesetting placeholder that looks like Latin so layout is easier to judge without reading the words.
Will the same seed match the browser tool?
Yes for integer seeds, and for string seeds once both sides hash with SHA-256 (the Tooltern page does).
Is anything stored?
Never. Generation only; no logs of the text.
Related endpoints
/v1/slugTurn a title into a clean URL slug/v1/text/inspectText X-ray: code points, graphemes, UTF-8/16 lengths and invisible characters/v1/hashHash a short text (MD5, SHA-1, SHA-2, SHA-3, BLAKE2b)
Prefer a page to an API?
- Lorem ipsum generator (paragraphs, sentences, words) on Tooltern: same job, nothing leaves your browser.
Published · OpenAPI 3.1 spec · Limits and privacy