EXTREMELY IMPORTANT INFRASTRUCTURE.

APIs for things
that don't need APIs.

Tiny endpoints for life's smaller problems.
Useful, sometimes. Delightfully simple, always.

No signup. No API key. No SDK. Just URLs.

Find your next API
an unnecessarily powerful terminal

# All this infrastructure. One coin.

$ curl https://dumbapis.com/coin
RESPONSEEXAMPLE · JSON
{
  "result": "heads"
}
Globally distributed coin flipping.

Yes, you could do this locally. But where's the fun in that?

44 tiny endpoints7 categories of possibility0 hoops to jump through Built to run at the edge

THE API COLLECTION

A little bit of everything.

Pick an endpoint. Make a request. Carry on.

All APIs 44

Small requests. Big potential.

Settle it with a coin flip.

Documentation ↗
Request & details

Heads or tails. Optional count: integer 1..100. /coin?count=3 returns results plus heads and tails totals. Without count, returns one result. Text with count is a comma-separated list.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "result": "heads"
}

A six-sided die. No table required.

Documentation ↗
Request & details

Use count=1..100 to roll multiple dice. With count, the response contains sides, results, and total.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "result": 4
}

GET

/ip

Your little corner of the internet.

Documentation ↗
Request & details

Caller IP from Cloudflare's CF-Connecting-IP metadata. Returns 503 if metadata is unavailable. Never uses X-Forwarded-For.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "ip": "203.0.113.42"
}

One ID. Extremely unlikely company.

Documentation ↗
Request & details

A fresh version 4 UUID from the Web Crypto API.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "uuid": "a834727e-01d1-4af5-bce5-3c377cf08924"
}

The question on everyone's mind.

Documentation ↗
Request & details

Uses the current UTC date, as do all calendar endpoints.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "yes": false
}

Six hex digits. Endless possibilities.

Documentation ↗
Request & details

An uppercase RGB hex color, including the # prefix.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "hex": "#A4F221"
}

A tiny response. A possible laugh.

Documentation ↗
Request & details

429 curated jokes. No external requests.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "joke": "What did the fish say when it hit the wall? Dam."
}

One thought for the whole planet.

Documentation ↗
Request & details

One real, attributed quote per UTC day, from the same collection as /quote. Stable for everyone on the same deployed dataset. Cache expires at midnight UTC.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "quote": "Optimism is the faith that leads to achievement; nothing can be done without hope.",
  "author": "Helen Keller",
  "date": "2026-09-23"
}

Outsource your indecision.

Documentation ↗
Request & details

Random yes or no. No context, analysis, or hidden wisdom.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "answer": "yes"
}

Right now, in a very precise format.

Documentation ↗
Request & details

UTC by default. Optional timezone: an IANA name up to 64 characters, e.g. /time?timezone=America/Los_Angeles or Asia/Kolkata. Returns ISO 8601 with the current UTC offset, including daylight saving, plus timezone. Text returns only the time. Invalid zones return 400.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "time": "2026-09-23T05:12:42.123Z"
}

Seconds since the Unix epoch.

Documentation ↗
Request & details

An integer in seconds, not milliseconds.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "timestamp": 1790140362
}

Meet the browser making the request.

Documentation ↗
Request & details

The raw User-Agent header, capped at 1024 characters. An absent header is an empty string.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "user_agent": "Mozilla/5.0..."
}

For adventures with more sides.

Documentation ↗
Request & details

sides: integer 2..1000. Optional count: integer 1..100. Without count, returns sides and result. Text with count is a comma-separated list.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "sides": 20,
  "results": [
    2,
    17,
    9
  ],
  "total": 28
}

A number within your boundaries.

Documentation ↗
Request & details

Inclusive integer min and max, default 0 and 100. Each must be between -2147483648 and 2147483647. min must not exceed max.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "result": 14
}

True or false. That's the whole API.

Documentation ↗
Request & details

A random JSON boolean. Text returns true or false.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "result": true
}

A little character for your day.

Documentation ↗
Request & details

All 1,923 fully qualified Unicode Emoji 18.0 entries without skin-tone modifiers, including flags and joined sequences. Bundled locally. Newer emoji may need an updated system font.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "emoji": "🦦"
}

Pick a card. Any of the 52 cards.

Documentation ↗
Request & details

Standard deck without jokers. Ranks: ace, 2..10, jack, queen, king. Suits: clubs, diamonds, hearts, spades. Independent draws. Text: queen of hearts.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "rank": "queen",
  "suit": "hearts"
}

Because choosing lunch is hard.

Documentation ↗
Request & details

Required items: 1..100 comma-separated non-empty options. Whitespace is trimmed. Max 100 characters per option, 1500 in the decoded list, and 2048 in the encoded query.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "result": "tacos"
}

The groan is included for free.

Documentation ↗
Request & details

392 dad jokes, with repeated punchlines and near-duplicates removed.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "joke": "What did one pirate say to the other when he beat him at chess? Checkmatey."
}

A small thought to take with you.

Documentation ↗
Request & details

375 real excerpts from public-domain books, with real authors. Source works and translations are recorded in the repository. Text includes the author in parentheses.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "quote": "Optimism is the faith that leads to achievement; nothing can be done without hope.",
  "author": "Helen Keller"
}

Something small worth knowing.

Documentation ↗
Request & details

367 curated facts covering nature, space, inventions, history, and language. Sources are recorded in the repository.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "fact": "Giant anteaters walk on their front knuckles to protect their long claws."
}

A fortune cookie, minus the crumbs.

Documentation ↗
Request & details

382 fortunes for entertainment, bundled locally.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "fortune": "An unfinished conversation will resume at the right moment."
}

A few kind words, on demand.

Documentation ↗
Request & details

370 specific, everyday compliments. No input required.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "compliment": "You make a rainy day less disappointing."
}

For your next extremely late standup.

Documentation ↗
Request & details

370 excuses for minor mishaps, lateness, and questionable planning.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "excuse": "I had to rescue a sock from behind the radiator."
}

Two options. An excellent distraction.

Documentation ↗
Request & details

370 distinct questions with two choices. No input required.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "question": "Would you rather have a job with a short commute or have a job with long lunch breaks?"
}

Advice with absolutely no reasoning.

Documentation ↗
Request & details

Optional q: 1..300 characters after trimming. Echoed with a random answer. The question is never analyzed.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "question": "deploy to production",
  "answer": "probably not"
}

Consult a very small digital oracle.

Documentation ↗
Request & details

One of 20 original affirmative, uncertain, or negative answers in the traditional style.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "answer": "The signs look good."
}

GET

/rps

Rock. Paper. HTTP response.

Documentation ↗
Request & details

Randomly returns rock, paper, or scissors.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "result": "scissors"
}

Permission to close the laptop?

Documentation ↗
Request & details

True on Saturday and Sunday in UTC.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "yes": false
}

For when every day feels like Monday.

Documentation ↗
Request & details

The English name of the current UTC weekday.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "day": "Wednesday"
}

Your position in this year's progress bar.

Documentation ↗
Request & details

1..365, or 366 in a leap year. January 1 is day 1. Uses UTC.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "day": 266
}

The week, with ISO-approved counting.

Documentation ↗
Request & details

ISO 8601 week and week-numbering year. Weeks start Monday. Week 1 contains January 4. Near New Year, year can differ from the calendar year. Text returns the week number.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "week": 39,
  "year": 2026
}

Does February get a bonus day?

Documentation ↗
Request & details

Optional year: integer 1..9999, default current UTC year. Gregorian leap-year rule including century exceptions. Text returns the boolean.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "year": 2028,
  "leap": true
}

Today's globally synchronized groan.

Documentation ↗
Request & details

One joke per UTC day, from the same collection as /joke. Cache expires at midnight UTC.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "joke": "What did the fish say when it hit the wall? Dam.",
  "date": "2026-09-23"
}

Learn one small thing together.

Documentation ↗
Request & details

One fact per UTC day. Cache expires at midnight UTC.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "fact": "Giant anteaters walk on their front knuckles to protect their long claws.",
  "date": "2026-09-23"
}

The universe's daily release notes.

Documentation ↗
Request & details

One fortune per UTC day, from the same collection as /fortune. Cache expires at midnight UTC.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "fortune": "An unfinished conversation will resume at the right moment.",
  "date": "2026-09-23"
}

The whole internet's color of the day.

Documentation ↗
Request & details

Deterministic hex color seeded by UTC date and endpoint name. Text returns the hex value. Cache expires at midnight UTC.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "hex": "#9DC183",
  "date": "2026-09-23"
}

Today's collective mood, in Unicode.

Documentation ↗
Request & details

Same full Unicode collection as /emoji, without skin-tone modifiers. One selection per UTC day; cached until midnight UTC. Text returns only the emoji.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "emoji": "🪴",
  "date": "2026-09-23"
}

I'm a teapot. You could be one too.

Documentation ↗
Request & details

Supported: 200, 201, 202, 204, 205, 301, 302, 303, 304, 307, 308, 400, 401, 403, 404, 405, 408, 409, 410, 413, 414, 415, 418, 422, 425, 429, 451, 500, 501, 502, 503, 504, 507, 511. 204, 205, 304 have no body. Redirect statuses have no Location header.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "status": 418
}

Patience, as a service.

Documentation ↗
Request & details

seconds: integer 0..10. Waits approximately that long. No busy loop or external request.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "delayed": 2
}

A safe peek at your request headers.

Documentation ↗
Request & details

JSON only. Allowlist: accept, accept-encoding, accept-language, content-type, user-agent. Values capped at 1024 characters. Credentials, cookies, IP and Cloudflare internal headers excluded.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "headers": {
    "accept": "*/*"
  }
}

Hello, request. Meet your reflection.

Documentation ↗
Request & details

JSON only. Arbitrary query parameters and the same safe headers as /headers. At most 32 parameters, names 1..64 characters, values at most 256. Repeated names become arrays. format is reserved. Do not put secrets in URLs.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "method": "GET",
  "path": "/echo",
  "query": {
    "hello": "world"
  },
  "headers": {
    "accept": "*/*"
  }
}

A small, reassuring sign of life.

Documentation ↗
Request & details

Reports that the Worker can respond. No external services to check.

Open endpoint
EXAMPLE RESPONSEJSON
{
  "status": "ok"
}

THE VERY SHORT MANUAL

You already know how to use it.

Every endpoint is a GET request. JSON by default, plain text when it makes sense. CORS is open, so browser apps are welcome.

Random endpoints return a fresh draw. Daily endpoints share one result worldwide until midnight UTC. Repeats can happen. Randomness has no memory.

Rate limits and usage bounds ↓

Check API health
No install required.
# JSON, straight from the source
curl https://dumbapis.com/coin

# Just the answer
curl 'https://dumbapis.com/coin?format=text'

# Same thought, all day
curl https://dumbapis.com/daily/quote

Rate limits and a few sensible bounds

Per IP address: 120 API requests per minute, with a burst limit of 30 requests per 10 seconds, shared across all endpoints. /delay/* also has a limit of 20 requests per minute. GET and HEAD count; CORS preflight, this website, and static assets do not.

Exceeding a limit returns HTTP 429 with a JSON rate_limited error. Wait the number of seconds in the Retry-After header before retrying. Limits are approximate per Cloudflare location. People sharing an IP address share the allowance.

Query strings: 2048 characters. Coins: up to 100 flips. Dice: up to 100 rolls and 1000 sides. Delays: up to 10 seconds. Input bounds appear in each card. Unknown or repeated parameters return a JSON 400 error, except repeated values on /echo. Errors use {"error":"invalid_parameter","message":"..."} with an appropriate HTTP status.

Text is supported on every endpoint except /headers and /echo. Daily text omits the date. /status/204, /status/205, and /status/304 have no body, as HTTP requires. Daily selections can repeat between dates and can change when a new content collection is deployed.