Public API
Free, no-auth REST API for Dad Joke Daily. Use it in your apps, bots, or experiments.
https://dadjoke.win/api/v1Response Format
All endpoints return JSON. Jokes have the following shape:
{
"id": "number",
"setup": "string",
"punchline": "string",
"date": "YYYY-MM-DD",
"type": "dad | girl-tea | millennial | dirty | knock-knock"
}Rate Limits
Informational headers are returned on every response. No hard enforcement currently — please be respectful.
X-RateLimit-Limit: 100 X-RateLimit-Remaining: 99
CORS
All /api/v1 endpoints are open CORS — you can call them from any browser origin.
Endpoints
https://dadjoke.win/api/v1/jokesReturns a paginated list of jokes. Filter by type, control page and limit.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| type | string | No | dad | girl-tea | millennial | dirty | knock-knock (default: dad) |
| page | number | No | Page number, 1-indexed (default: 1) |
| limit | number | No | Results per page, max 50 (default: 10) |
Example
curl "https://dadjoke.win/api/v1/jokes?type=dad&page=1&limit=2"
{
"jokes": [
{
"id": 42,
"setup": "Why don't scientists trust atoms?",
"punchline": "Because they make up everything!",
"date": "2026-03-31",
"type": "dad"
},
{
"id": 41,
"setup": "What do you call a fake noodle?",
"punchline": "An impasta!",
"date": "2026-03-30",
"type": "dad"
}
],
"page": 1,
"limit": 2,
"hasMore": true
}https://dadjoke.win/api/v1/jokes/randomReturns a single random joke. Optionally filter by type.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| type | string | No | dad | girl-tea | millennial | dirty | knock-knock (default: dad) |
Example
curl "https://dadjoke.win/api/v1/jokes/random?type=millennial"
{
"joke": {
"id": 17,
"setup": "I'm not lazy, I'm on energy-saving mode.",
"punchline": "",
"date": "2026-03-28",
"type": "millennial"
}
}https://dadjoke.win/api/v1/jokes/:idReturns a specific joke by its numeric ID.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | number | Yes | The joke's numeric ID |
Example
curl "https://dadjoke.win/api/v1/jokes/42"
{
"joke": {
"id": 42,
"setup": "Why don't scientists trust atoms?",
"punchline": "Because they make up everything!",
"date": "2026-03-31",
"type": "dad"
}
}https://dadjoke.win/api/v1/jokes/todayReturns today's jokes. Returns all types by default, or filter to one type.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| type | string | No | dad | girl-tea | millennial | dirty | knock-knock — omit for all types |
Example
curl "https://dadjoke.win/api/v1/jokes/today"
{
"jokes": [
{
"id": 42,
"setup": "Why don't scientists trust atoms?",
"punchline": "Because they make up everything!",
"date": "2026-03-31",
"type": "dad"
},
{
"id": 38,
"setup": "My skincare routine has more steps than my career plan.",
"punchline": "",
"date": "2026-03-31",
"type": "girl-tea"
}
]
}Voting
Upvote or downvote jokes. Votes are anonymous — identity is derived from your IP and user agent. One vote per person per joke.
https://dadjoke.win/api/v1/votesGet vote totals and your current vote for a joke.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| jokeId | number | Yes | The joke's numeric ID |
Example
curl "https://dadjoke.win/api/votes?jokeId=42"
{
"upvotes": 12,
"downvotes": 3,
"userVote": 1
}https://dadjoke.win/api/v1/votesCast or change your vote on a joke. Send 1 for upvote, -1 for downvote. Voting the same direction again is a no-op; voting the opposite direction switches your vote.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| jokeId | number | Yes | The joke's numeric ID (JSON body) |
| vote | 1 | -1 | Yes | 1 = upvote, -1 = downvote (JSON body) |
Example
curl -X POST "https://dadjoke.win/api/votes" \
-H "Content-Type: application/json" \
-d '{"jokeId": 42, "vote": 1}'{
"upvotes": 13,
"downvotes": 3,
"userVote": 1
}/api/votes, not the /api/v1 base URL.Embeddable Widget
Embed a random joke on your website with a simple iframe. The widget is minimal — no nav or footer, just the joke with branding.
Basic Embed
<iframe src="https://dadjoke.win/embed" width="500" height="300" frameBorder="0" style="border: none; border-radius: 12px;" ></iframe>
Filter by Joke Type
Add a ?type= query param to show a specific category.
<!-- Dad jokes (default) --> <iframe src="https://dadjoke.win/embed" ...></iframe> <!-- Girl Tea jokes --> <iframe src="https://dadjoke.win/embed?type=girl-tea" ...></iframe> <!-- Millennial jokes --> <iframe src="https://dadjoke.win/embed?type=millennial" ...></iframe> <!-- Dirty jokes --> <iframe src="https://dadjoke.win/embed?type=dirty" ...></iframe>
Supported Types
dad (default), girl-tea, millennial, dirty, knock-knock, chistes
Joke Cards
Generate a shareable PNG image of any joke. Great for social media posts.
https://dadjoke.win/api/v1/joke-card/:idReturns a PNG image (800x500) of the joke. Use the joke's numeric ID in the URL path.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | number | Yes | The joke's numeric ID (URL path param) |
Example
curl "https://dadjoke.win/api/joke-card/42" --output joke.png
Binary PNG image (800x500)
/api/joke-card/:id, not the /api/v1 base URL.Built something cool with this API? Let us know.