# Bored API

> Find something to do with the keyless Bored API. Draw a random activity, browse them by type and group size, pull a shortlist for four people or a mix of ideas across different kinds of afternoon, find more like one that landed well, and look any of them up again by key. Every activity says how many people it takes, roughly what it costs, how long it lasts and whether it suits children. No account or API key is required.

App · Misc References · 7 actions. Web page: https://docs.lodol.com/docs/integrations/bored-api

## Actions

### Find activities

Browse the activities that match a type and a number of participants, narrowed further by kid friendly or a price ceiling, ordered how you like and cut to a limit. Use it to put a shortlist in front of someone rather than a single suggestion. The answer says how many matched in total, so a limited list never reads as a complete one.

**Inputs**

- Activity type (`type`, text): Only activities of this kind. Leave empty to draw from every type. One of: `education` (Education: learn something), `recreational` (Recreational: play or make something), `social` (Social: with other people), `charity` (Charity: help someone out), `cooking` (Cooking: make something to eat), `relaxation` (Relaxation: wind down), `busywork` (Busywork: a job worth getting done).
- Participants (`participants`, text): Only activities for exactly this many people. Leave empty for any number. The catalogue has nothing for exactly seven people, so seven is not offered. One of: `1` (1 person), `2` (2 people), `3` (3 people), `4` (4 people), `5` (5 people), `6` (6 people), `8` (8 people).
- Kid friendly only (`kid_friendly`, true/false): Turn on to keep only the activities the API marks as kid friendly. Left off, everything is considered.
- Maximum price (`max_price`, number): Only activities at or below this price, as an index from 0 (free) to 1 (expensive): the API rates cost relatively rather than in money. Set 0 for free activities only. Leave empty for any price. From 0 to 1.
- Sort by (`sort`, text): How to order the activities that come back. One of: `default` (The order the API returns them in (default)), `name` (Activity name, A to Z), `price` (Cheapest first), `participants` (Fewest people first), `availability` (Most available first). Default: `default`.
- Limit (`limit`, number): How many activities to return, from 1 to 100. The answer always says how many matched in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 100. Default: `25`.

**Outputs**

- `activities` (list)
- `count` (number)
- `filters` (object)
- `sort` (text)
- `total_count` (number)
- `truncated` (true/false)

**Example output**

```json
{
  "activities": [
    {
      "accessibility": "Few to no challenges",
      "activity": "Learn Express.js",
      "availability": 0.25,
      "duration": "hours",
      "has_link": true,
      "is_free": false,
      "key": "3943506",
      "kidFriendly": true,
      "kid_friendly": true,
      "link": "https://expressjs.com/",
      "participants": 1,
      "price": 0.1,
      "price_level": "low",
      "type": "education"
    },
    {
      "accessibility": "Some challenges",
      "activity": "Learn React.js",
      "availability": 0.5,
      "duration": "hours",
      "has_link": true,
      "is_free": false,
      "key": "7890123",
      "kidFriendly": true,
      "kid_friendly": true,
      "link": "https://reactjs.org/",
      "participants": 1,
      "price": 0.2,
      "price_level": "low",
      "type": "education"
    }
  ],
  "count": 2,
  "filters": {
    "kid_friendly": null,
    "max_price": null,
    "participants": 1,
    "type": "education"
  },
  "sort": "default",
  "total_count": 2,
  "truncated": false
}
```

### Find activities for a group

Find everything a group of a given size can do: the activities for exactly that many people and, unless you turn it off, the ones a smaller group could do together. The API matches a participant count exactly, so this is the action that answers 'there are four of us, what's on?' in one step. The answer breaks the matches down by how many people each one takes.

**Inputs**

- Group size (`participants`, number, required): How many people there are, from 1 to 8. Nothing in the catalogue is for exactly seven people, so a group of seven is offered the activities for six or fewer. From 1 to 8.
- Include smaller activities (`include_smaller`, true/false): On by default: also return the activities a smaller group could do, since four people can play a game meant for two. Turn it off to see only the activities for exactly this many people. Default: `true`.
- Activity type (`type`, text): Only activities of this kind. Leave empty to draw from every type. One of: `education` (Education: learn something), `recreational` (Recreational: play or make something), `social` (Social: with other people), `charity` (Charity: help someone out), `cooking` (Cooking: make something to eat), `relaxation` (Relaxation: wind down), `busywork` (Busywork: a job worth getting done).
- Kid friendly only (`kid_friendly`, true/false): Turn on to keep only the activities the API marks as kid friendly. Left off, everything is considered.
- Maximum price (`max_price`, number): Only activities at or below this price, as an index from 0 (free) to 1 (expensive): the API rates cost relatively rather than in money. Set 0 for free activities only. Leave empty for any price. From 0 to 1.
- Sort by (`sort`, text): How to order the activities that come back. One of: `default` (The order the API returns them in (default)), `name` (Activity name, A to Z), `price` (Cheapest first), `participants` (Fewest people first), `availability` (Most available first). Default: `default`.
- Limit (`limit`, number): How many activities to return, from 1 to 100. The answer always says how many matched in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 100. Default: `25`.

**Outputs**

- `activities` (list)
- `count` (number)
- `filters` (object)
- `group_sizes_searched` (list)
- `include_smaller` (true/false)
- `participant_counts` (list)
- `participants` (number)
- `requests_made` (number)
- `sort` (text)
- `total_count` (number)
- `truncated` (true/false)

**Example output**

```json
{
  "activities": [
    {
      "accessibility": "Few to no challenges",
      "activity": "Learn how to fold a paper crane",
      "availability": 0.15,
      "duration": "minutes",
      "has_link": false,
      "is_free": true,
      "key": "3468810",
      "kidFriendly": true,
      "kid_friendly": true,
      "link": "",
      "participants": 1,
      "price": 0.0,
      "price_level": "free",
      "type": "recreational"
    },
    {
      "accessibility": "Minor challenges",
      "activity": "Bake a loaf of bread from scratch",
      "availability": 0.3,
      "duration": "hours",
      "has_link": false,
      "is_free": false,
      "key": "8482334",
      "kidFriendly": true,
      "kid_friendly": true,
      "link": "",
      "participants": 2,
      "price": 0.15,
      "price_level": "low",
      "type": "cooking"
    }
  ],
  "count": 2,
  "filters": {
    "kid_friendly": null,
    "max_price": null,
    "type": null
  },
  "group_sizes_searched": [
    1,
    2
  ],
  "include_smaller": true,
  "participant_counts": [
    {
      "count": 1,
      "participants": 1
    },
    {
      "count": 1,
      "participants": 2
    }
  ],
  "participants": 2,
  "requests_made": 2,
  "sort": "default",
  "total_count": 2,
  "truncated": false
}
```

### Find similar activities

Find more activities like one you already have: give it an activity's key and it fetches that activity, then returns the others of the same type (and, unless you turn it off, for the same number of people. The original is never in the answer, so this is the 'something else, then' step to run when a suggestion doesn't land.

**Inputs**

- Activity key (`key`, text, required): The key of the activity, which is the short identifier the API gives each one. Every action here returns the key of each activity it found, and every step summary prints it.
- Same number of people (`same_participants`, true/false): On by default: only activities for the same number of people as the one you named. Turn it off to see everything of that type whatever the group size. Default: `true`.
- Kid friendly only (`kid_friendly`, true/false): Turn on to keep only the activities the API marks as kid friendly. Left off, everything is considered.
- Maximum price (`max_price`, number): Only activities at or below this price, as an index from 0 (free) to 1 (expensive): the API rates cost relatively rather than in money. Set 0 for free activities only. Leave empty for any price. From 0 to 1.
- Sort by (`sort`, text): How to order the activities that come back. One of: `default` (The order the API returns them in (default)), `name` (Activity name, A to Z), `price` (Cheapest first), `participants` (Fewest people first), `availability` (Most available first). Default: `default`.
- Limit (`limit`, number): How many activities to return, from 1 to 100. The answer always says how many matched in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 100. Default: `25`.

**Outputs**

- `activities` (list)
- `based_on` (object)
- `count` (number)
- `matched_on` (object)
- `sort` (text)
- `total_count` (number)
- `truncated` (true/false)

**Example output**

```json
{
  "activities": [
    {
      "accessibility": "Some challenges",
      "activity": "Learn React.js",
      "availability": 0.5,
      "duration": "hours",
      "has_link": true,
      "is_free": false,
      "key": "7890123",
      "kidFriendly": true,
      "kid_friendly": true,
      "link": "https://reactjs.org/",
      "participants": 1,
      "price": 0.2,
      "price_level": "low",
      "type": "education"
    }
  ],
  "based_on": {
    "accessibility": "Few to no challenges",
    "activity": "Learn Express.js",
    "availability": 0.25,
    "duration": "hours",
    "has_link": true,
    "is_free": false,
    "key": "3943506",
    "kidFriendly": true,
    "kid_friendly": true,
    "link": "https://expressjs.com/",
    "participants": 1,
    "price": 0.1,
    "price_level": "low",
    "type": "education"
  },
  "count": 1,
  "matched_on": {
    "participants": 1,
    "type": "education"
  },
  "sort": "default",
  "total_count": 1,
  "truncated": false
}
```

### Get a random activity

Get one thing to do, chosen at random: the answer to 'I'm bored'. Comes back with what it is, what kind of activity it is, how many people it takes, roughly what it costs, how long it lasts, whether it suits children and a link to get started where there is one. Narrow it with a type, a number of participants, kid friendly or a price ceiling and the pick is made from the activities that match.

**Inputs**

- Activity type (`type`, text): Only activities of this kind. Leave empty to draw from every type. One of: `education` (Education: learn something), `recreational` (Recreational: play or make something), `social` (Social: with other people), `charity` (Charity: help someone out), `cooking` (Cooking: make something to eat), `relaxation` (Relaxation: wind down), `busywork` (Busywork: a job worth getting done).
- Participants (`participants`, text): Only activities for exactly this many people. Leave empty for any number. The catalogue has nothing for exactly seven people, so seven is not offered. One of: `1` (1 person), `2` (2 people), `3` (3 people), `4` (4 people), `5` (5 people), `6` (6 people), `8` (8 people).
- Kid friendly only (`kid_friendly`, true/false): Turn on to keep only the activities the API marks as kid friendly. Left off, everything is considered.
- Maximum price (`max_price`, number): Only activities at or below this price, as an index from 0 (free) to 1 (expensive): the API rates cost relatively rather than in money. Set 0 for free activities only. Leave empty for any price. From 0 to 1.

**Outputs**

- `accessibility` (text)
- `activity` (text)
- `availability` (number)
- `duration` (text)
- `has_link` (true/false)
- `is_free` (true/false)
- `key` (text)
- `kidFriendly` (true/false)
- `kid_friendly` (true/false)
- `link` (text)
- `matched_count` (number)
- `participants` (number)
- `price` (number)
- `price_level` (text)
- `source` (text)
- `type` (text)

**Example output**

```json
{
  "accessibility": "Few to no challenges",
  "activity": "Learn Express.js",
  "availability": 0.25,
  "duration": "hours",
  "has_link": true,
  "is_free": false,
  "key": "3943506",
  "kidFriendly": true,
  "kid_friendly": true,
  "link": "https://expressjs.com/",
  "matched_count": null,
  "participants": 1,
  "price": 0.1,
  "price_level": "low",
  "source": "random",
  "type": "education"
}
```

### Get an activity

Look up one activity by its key: the identifier every other action returns beside each activity it finds. Use it to read a suggestion back later: store the key when you offer someone an activity, and fetch the details again when they say yes.

**Inputs**

- Activity key (`key`, text, required): The key of the activity, which is the short identifier the API gives each one. Every action here returns the key of each activity it found, and every step summary prints it.

**Outputs**

- `accessibility` (text)
- `activity` (text)
- `availability` (number)
- `duration` (text)
- `has_link` (true/false)
- `is_free` (true/false)
- `key` (text)
- `kidFriendly` (true/false)
- `kid_friendly` (true/false)
- `link` (text)
- `participants` (number)
- `price` (number)
- `price_level` (text)
- `type` (text)

**Example output**

```json
{
  "accessibility": "Few to no challenges",
  "activity": "Learn Express.js",
  "availability": 0.25,
  "duration": "hours",
  "has_link": true,
  "is_free": false,
  "key": "3943506",
  "kidFriendly": true,
  "kid_friendly": true,
  "link": "https://expressjs.com/",
  "participants": 1,
  "price": 0.1,
  "price_level": "low",
  "type": "education"
}
```

### List activity types

See what the catalogue holds, type by type: how many activities there are of each kind, how many are free, how many suit children, the range of group sizes they take and an example with its key. Run it once to see what is worth filtering for before spending requests on the details. Costs seven requests, one per type.

**Inputs**

- Participants (`participants`, text): Only activities for exactly this many people. Leave empty for any number. The catalogue has nothing for exactly seven people, so seven is not offered. One of: `1` (1 person), `2` (2 people), `3` (3 people), `4` (4 people), `5` (5 people), `6` (6 people), `8` (8 people).

**Outputs**

- `activity_count` (number)
- `participants` (number)
- `requests_made` (number)
- `type_count` (number)
- `types` (list)

**Example output**

```json
{
  "activity_count": 61,
  "participants": null,
  "requests_made": 7,
  "type_count": 7,
  "types": [
    {
      "count": 12,
      "example_activity": "Learn Express.js",
      "example_key": "3943506",
      "free_count": 5,
      "kid_friendly_count": 11,
      "max_participants": 2,
      "min_participants": 1,
      "type": "education"
    },
    {
      "count": 9,
      "example_activity": "Learn how to fold a paper crane",
      "example_key": "3468810",
      "free_count": 6,
      "kid_friendly_count": 9,
      "max_participants": 4,
      "min_participants": 1,
      "type": "recreational"
    },
    {
      "count": 14,
      "example_activity": "Have a football scrimmage with some friends",
      "example_key": "1128631",
      "free_count": 8,
      "kid_friendly_count": 12,
      "max_participants": 8,
      "min_participants": 2,
      "type": "social"
    },
    {
      "count": 6,
      "example_activity": "Volunteer at a local library",
      "example_key": "9187391",
      "free_count": 6,
      "kid_friendly_count": 6,
      "max_participants": 4,
      "min_participants": 1,
      "type": "charity"
    },
    {
      "count": 7,
      "example_activity": "Bake a loaf of bread from scratch",
      "example_key": "8482334",
      "free_count": 1,
      "kid_friendly_count": 7,
      "max_participants": 4,
      "min_participants": 1,
      "type": "cooking"
    },
    {
      "count": 8,
      "example_activity": "Take a nap",
      "example_key": "8562860",
      "free_count": 7,
      "kid_friendly_count": 8,
      "max_participants": 2,
      "min_participants": 1,
      "type": "relaxation"
    },
    {
      "count": 5,
      "example_activity": "Organize your pantry",
      "example_key": "7688595",
      "free_count": 5,
      "kid_friendly_count": 5,
      "max_participants": 2,
      "min_participants": 1,
      "type": "busywork"
    }
  ]
}
```

### Suggest a mix of activities

Get several ideas at once, deliberately spread across different kinds of activity, so a menu of three is a lesson, a game and something to cook rather than three variations of the same afternoon. Each type is drawn from at random, so the same request twice gives a different menu. Costs one request per type considered, at most seven.

**Inputs**

- How many ideas (`count`, number): How many activities to suggest, from 1 to 10. Each comes from a different type until every type has been used once. Defaults to 3. From 1 to 10. Default: `3`.
- Activity types (`types`, list): Which kinds of activity to draw from. Choose none to consider all seven. Each type chosen costs one request, so picking a few is quicker than picking all. One or more of: `education` (Education: learn something), `recreational` (Recreational: play or make something), `social` (Social: with other people), `charity` (Charity: help someone out), `cooking` (Cooking: make something to eat), `relaxation` (Relaxation: wind down), `busywork` (Busywork: a job worth getting done).
- Participants (`participants`, text): Only activities for exactly this many people. Leave empty for any number. The catalogue has nothing for exactly seven people, so seven is not offered. One of: `1` (1 person), `2` (2 people), `3` (3 people), `4` (4 people), `5` (5 people), `6` (6 people), `8` (8 people).
- Kid friendly only (`kid_friendly`, true/false): Turn on to keep only the activities the API marks as kid friendly. Left off, everything is considered.
- Maximum price (`max_price`, number): Only activities at or below this price, as an index from 0 (free) to 1 (expensive): the API rates cost relatively rather than in money. Set 0 for free activities only. Leave empty for any price. From 0 to 1.

**Outputs**

- `activities` (list)
- `count` (number)
- `filters` (object)
- `requested_count` (number)
- `requests_made` (number)
- `types_searched` (list)
- `types_used` (list)

**Example output**

```json
{
  "activities": [
    {
      "accessibility": "Few to no challenges",
      "activity": "Learn Express.js",
      "availability": 0.25,
      "duration": "hours",
      "has_link": true,
      "is_free": false,
      "key": "3943506",
      "kidFriendly": true,
      "kid_friendly": true,
      "link": "https://expressjs.com/",
      "participants": 1,
      "price": 0.1,
      "price_level": "low",
      "type": "education"
    },
    {
      "accessibility": "Few to no challenges",
      "activity": "Learn how to fold a paper crane",
      "availability": 0.15,
      "duration": "minutes",
      "has_link": false,
      "is_free": true,
      "key": "3468810",
      "kidFriendly": true,
      "kid_friendly": true,
      "link": "",
      "participants": 1,
      "price": 0.0,
      "price_level": "free",
      "type": "recreational"
    },
    {
      "accessibility": "Minor challenges",
      "activity": "Have a football scrimmage with some friends",
      "availability": 0.4,
      "duration": "hours",
      "has_link": false,
      "is_free": true,
      "key": "1128631",
      "kidFriendly": true,
      "kid_friendly": true,
      "link": "",
      "participants": 8,
      "price": 0.0,
      "price_level": "free",
      "type": "social"
    }
  ],
  "count": 3,
  "filters": {
    "kid_friendly": null,
    "max_price": null,
    "participants": null
  },
  "requested_count": 3,
  "requests_made": 7,
  "types_searched": [
    "education",
    "recreational",
    "social",
    "charity",
    "cooking",
    "relaxation",
    "busywork"
  ],
  "types_used": [
    "education",
    "recreational",
    "social"
  ]
}
```
