# icanhazdadjoke

> Pull dad jokes from icanhazdadjoke's open catalogue of several hundred groan-worthy one-liners. Draw one at random or a batch of them, narrow to a subject such as dogs or coffee, search every joke, look one up by id, or pick a joke of the day that stays the same all day so a scheduled post never tells two. Every joke comes with a link to its page and to the service's own rendering of it as an image, and there is a ready-made Slack message too. No account and no API key: connecting takes one click.

App · Misc References · 8 actions. Web page: https://docs.lodol.com/docs/integrations/icanhazdadjoke

## Actions

### Check service status

Check whether icanhazdadjoke is answering, and how quickly. This is the one action that reports a problem as a value instead of failing the step, so a workflow can decide what to do about it. Being asked to slow down is reported separately from being down.

**Inputs**: None.

**Outputs**

- `message` (text)
- `online` (true/false)
- `rate_limited` (true/false)
- `reachable` (true/false)
- `response_time_ms` (number)
- `status_code` (number)

**Example output**

```json
{
  "message": "icanhazdadjoke is up and telling jokes.",
  "online": true,
  "rate_limited": false,
  "reachable": true,
  "response_time_ms": 118.4,
  "status_code": 200
}
```

### Count dad jokes

Count the dad jokes about a subject, or the whole catalogue when no subject is given. One request, and no jokes pulled down: it is what a workflow asks before drawing, to find out whether there is anything about a subject at all and how much there is to draw on. The first match comes back with the count, since the service sends it anyway.

**Inputs**

- About (`term`, text): Count only the jokes containing this word or phrase. Leave empty to count the whole catalogue.

**Outputs**

- `has_matches` (true/false)
- `sample` (object)
- `term` (text)
- `total_jokes` (number)

**Example output**

```json
{
  "has_matches": true,
  "sample": {
    "id": "GlGBIY0wAAd",
    "image_url": "https://icanhazdadjoke.com/j/GlGBIY0wAAd.png",
    "permalink": "https://icanhazdadjoke.com/j/GlGBIY0wAAd",
    "text": "How much does a hipster weigh? An instagram."
  },
  "term": "hipster",
  "total_jokes": 2
}
```

### Get a dad joke by id

Get one specific dad joke by its id, for re-reading a joke an earlier step found or a person sent a link to. Ids belong to their joke rather than to a position in a list, so one stored today still returns the same joke next year.

**Inputs**

- Joke ID (`joke_id`, text, required): The joke's id, such as R7UfaahVfFd. A full icanhazdadjoke.com link to the joke is also accepted, including the .png image link.

**Outputs**

- `joke` (object)

**Example output**

```json
{
  "joke": {
    "id": "R7UfaahVfFd",
    "image_url": "https://icanhazdadjoke.com/j/R7UfaahVfFd.png",
    "permalink": "https://icanhazdadjoke.com/j/R7UfaahVfFd",
    "text": "My dog used to chase people on a bike a lot. It got so bad I had to take his bike away."
  }
}
```

### Get a dad joke for Slack

Get a random dad joke already formatted as a Slack message, the way the service's own Slack app posts it. The attachments come back untouched so they can be handed to Slack as-is, with the joke's text beside them for a step that only wants the words. This is the one route that names no id, so there is no link or image with it: use Get a random dad joke if the workflow needs those.

**Inputs**: None.

**Outputs**

- `attachments` (list)
- `response_type` (text)
- `text` (text)
- `username` (text)

**Example output**

```json
{
  "attachments": [
    {
      "fallback": "What kind of magic do cows believe in? MOODOO.",
      "footer": " - ",
      "text": "What kind of magic do cows believe in? MOODOO."
    }
  ],
  "response_type": "in_channel",
  "text": "What kind of magic do cows believe in? MOODOO.",
  "username": "icanhazdadjoke"
}
```

### Get a random dad joke

Get one random dad joke, with the text ready to post and a link to both its page and the service's own rendering of it as an image. Narrow it to a subject such as dog or coffee, or leave the subject empty to draw from every joke.

**Inputs**

- About (`term`, text): Only draw from jokes containing this word or phrase. Leave empty to draw from every joke the service holds.

**Outputs**

- `joke` (object)
- `term` (text)

**Example output**

```json
{
  "joke": {
    "id": "R7UfaahVfFd",
    "image_url": "https://icanhazdadjoke.com/j/R7UfaahVfFd.png",
    "permalink": "https://icanhazdadjoke.com/j/R7UfaahVfFd",
    "text": "My dog used to chase people on a bike a lot. It got so bad I had to take his bike away."
  },
  "term": null
}
```

### Get several random dad jokes

Get several different dad jokes at once, up to 100, optionally all about one subject. No joke is drawn twice in the same batch. Give it a seed and the same seed draws the same jokes in the same order every time, so a run can be repeated; leave the seed empty for a fresh draw. Asking for more jokes about a subject than exist returns all of them rather than failing.

**Inputs**

- Number of jokes (`count`, number): How many jokes to draw, from 1 to 100. Defaults to 5. From 1 to 100.
- About (`term`, text): Only draw from jokes containing this word or phrase. Leave empty to draw from every joke the service holds.
- Seed (`seed`, text): Any text you like. The same seed always draws the same jokes, so a workflow can be re-run and get the same batch. Leave empty for a different draw each time.

**Outputs**

- `joke_count` (number)
- `jokes` (list)
- `requested_count` (number)
- `seed` (text)
- `term` (text)
- `total_jokes` (number)

**Example output**

```json
{
  "joke_count": 3,
  "jokes": [
    {
      "id": "R7UfaahVfFd",
      "image_url": "https://icanhazdadjoke.com/j/R7UfaahVfFd.png",
      "permalink": "https://icanhazdadjoke.com/j/R7UfaahVfFd",
      "text": "My dog used to chase people on a bike a lot. It got so bad I had to take his bike away."
    },
    {
      "id": "M7wPC5wPKBd",
      "image_url": "https://icanhazdadjoke.com/j/M7wPC5wPKBd.png",
      "permalink": "https://icanhazdadjoke.com/j/M7wPC5wPKBd",
      "text": "Did you hear the one about the guy with the broken hearing aid? Neither did he."
    },
    {
      "id": "MRZ0LJtHQCd",
      "image_url": "https://icanhazdadjoke.com/j/MRZ0LJtHQCd.png",
      "permalink": "https://icanhazdadjoke.com/j/MRZ0LJtHQCd",
      "text": "What do you call a fly without wings? A walk."
    }
  ],
  "requested_count": 3,
  "seed": null,
  "term": null,
  "total_jokes": 307
}
```

### Get the dad joke of the day

Pick one dad joke for a day and keep picking that same joke all day. A random draw gives a different joke on every call, so a daily workflow that retries, or that two people run an hour apart, tells two different jokes for the one day. This one is fixed by the date: the same date always gives the same joke, and tomorrow gives a different one. Add a seed of your own to have two workspaces tell different jokes on the same day.

**Inputs**

- Day (`date`, date): The day to pick a joke for. Leave empty for today in UTC, which is what a scheduled step wants.
- About (`term`, text): Only pick from jokes containing this word or phrase. Leave empty to pick from every joke.
- Seed (`seed`, text): Any text you like, mixed into the day so that two workspaces running this on the same day get different jokes. Leave empty to share the day's joke with everyone else.

**Outputs**

- `date` (text)
- `joke` (object)
- `pool_size` (number)
- `seed` (text)
- `term` (text)

**Example output**

```json
{
  "date": "2026-09-15",
  "joke": {
    "id": "MRZ0LJtHQCd",
    "image_url": "https://icanhazdadjoke.com/j/MRZ0LJtHQCd.png",
    "permalink": "https://icanhazdadjoke.com/j/MRZ0LJtHQCd",
    "text": "What do you call a fly without wings? A walk."
  },
  "pool_size": 307,
  "seed": "2026-09-15",
  "term": null
}
```

### Search dad jokes

Find the dad jokes about something: search every joke for a word or phrase and get the matches back in the service's own order. The total number of matches is always reported, however many were returned, so a step can tell whether it has seen all of them.

**Inputs**

- Search for (`term`, text, required): The word or phrase to look for in the jokes.
- Number of jokes (`limit`, number): How many matches to return, from 1 to 120. Defaults to 10. The service pages at 30, so asking for more than that reads as many pages as it takes. From 1 to 120.

**Outputs**

- `joke_count` (number)
- `jokes` (list)
- `requested_count` (number)
- `term` (text)
- `total_jokes` (number)

**Example output**

```json
{
  "joke_count": 2,
  "jokes": [
    {
      "id": "GlGBIY0wAAd",
      "image_url": "https://icanhazdadjoke.com/j/GlGBIY0wAAd.png",
      "permalink": "https://icanhazdadjoke.com/j/GlGBIY0wAAd",
      "text": "How much does a hipster weigh? An instagram."
    },
    {
      "id": "xc21Lmbxcib",
      "image_url": "https://icanhazdadjoke.com/j/xc21Lmbxcib.png",
      "permalink": "https://icanhazdadjoke.com/j/xc21Lmbxcib",
      "text": "How did the hipster burn the roof of his mouth? He ate the pizza before it was cool."
    }
  ],
  "requested_count": 10,
  "term": "hipster",
  "total_jokes": 2
}
```
