Bored API Activities API

Random and filtered activity suggestions.

Documentation

Specifications

Schemas & Data

Other Resources

🔗
SourceCode
https://github.com/drewthoennes/Bored-API
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/bored/refs/heads/main/examples/bored-api-get-random-activity-v1-example.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/bored/refs/heads/main/examples/bored-api-get-random-activity-v1-filtered-example.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/bored/refs/heads/main/examples/bored-api-get-random-activity-v2-example.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/bored/refs/heads/main/examples/bored-api-get-activity-by-key-v2-example.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/bored/refs/heads/main/examples/bored-api-get-random-fact-example.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/bored/refs/heads/main/examples/bored-api-get-random-riddle-example.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/bored/refs/heads/main/examples/bored-api-get-random-website-example.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/bored/refs/heads/main/examples/bored-api-submit-suggestion-example.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/bored/refs/heads/main/examples/bored-appbrewery-get-random-example.json
🔗
Examples
https://raw.githubusercontent.com/api-evangelist/bored/refs/heads/main/examples/bored-appbrewery-filter-example.json
🔗
APIsJSON
https://raw.githubusercontent.com/api-evangelist/bored/refs/heads/main/apis.yml

OpenAPI Specification

bored-activities-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Bored Activities API
  version: 2.0.0
  summary: A Free and Simple API to Help You Find Something Better to Do
  description: The Bored API is a free, no-authentication public API that returns suggestions for things to do when you are bored. The canonical implementation is the open-source MEVN (MongoDB / Express / Vue / Node) project maintained by Drew Thoennes at github.com/drewthoennes/Bored-API. The historically hosted instance at https://www.boredapi.com/ has been intermittently or fully unreachable since 2024 (originally hosted on Heroku); community mirrors such as https://bored-api.appbrewery.com continue to serve the dataset. This specification documents both the v1 (legacy, activities-only) and v2 (activities + facts + riddles + websites + suggestions) surfaces of the canonical Drew Thoennes implementation so the API contract is preserved for self-hosting and historical reference.
  contact:
    name: Drew Thoennes
    url: https://github.com/drewthoennes/Bored-API
  license:
    name: MIT
    url: https://github.com/drewthoennes/Bored-API/blob/master/license
  x-status: deprecated-hosted-instance
  x-status-notes: The official hosted instance at https://www.boredapi.com/ is no longer reliably reachable. The reference implementation remains open source and can be self-hosted. The App Brewery community fork (https://bored-api.appbrewery.com) provides an actively maintained hosted mirror with a slightly different path scheme.
servers:
- url: https://www.boredapi.com
  description: Original hosted instance (historically; intermittent / dead as of 2024)
- url: http://localhost:8080
  description: Self-hosted local instance (npm install && npm start)
tags:
- name: Activities
  description: Random and filtered activity suggestions.
paths:
  /api/activity:
    get:
      tags:
      - Activities
      summary: Get a Random Activity
      description: Returns a single random activity, optionally filtered by type, participant count, price range, accessibility (availability), or a specific activity key. Identical to /api/v1/activity.
      operationId: getRandomActivity
      parameters:
      - $ref: '#/components/parameters/TypeParam'
      - $ref: '#/components/parameters/ParticipantsParam'
      - $ref: '#/components/parameters/MinParticipantsParam'
      - $ref: '#/components/parameters/MaxParticipantsParam'
      - $ref: '#/components/parameters/PriceParam'
      - $ref: '#/components/parameters/MinPriceParam'
      - $ref: '#/components/parameters/MaxPriceParam'
      - $ref: '#/components/parameters/AccessibilityParamV1'
      - $ref: '#/components/parameters/MinAccessibilityParamV1'
      - $ref: '#/components/parameters/MaxAccessibilityParamV1'
      - $ref: '#/components/parameters/KeyParam'
      responses:
        '200':
          description: A random activity matching any supplied filters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActivityV1'
        '400':
          $ref: '#/components/responses/Error'
  /api/v1/activity:
    get:
      tags:
      - Activities
      summary: Get a Random Activity (V1)
      description: V1-versioned alias of /api/activity. Returns the legacy v1 activity shape where accessibility is a number from 0.0 to 1.0.
      operationId: getRandomActivityV1
      parameters:
      - $ref: '#/components/parameters/TypeParam'
      - $ref: '#/components/parameters/ParticipantsParam'
      - $ref: '#/components/parameters/MinParticipantsParam'
      - $ref: '#/components/parameters/MaxParticipantsParam'
      - $ref: '#/components/parameters/PriceParam'
      - $ref: '#/components/parameters/MinPriceParam'
      - $ref: '#/components/parameters/MaxPriceParam'
      - $ref: '#/components/parameters/AccessibilityParamV1'
      - $ref: '#/components/parameters/MinAccessibilityParamV1'
      - $ref: '#/components/parameters/MaxAccessibilityParamV1'
      - $ref: '#/components/parameters/KeyParam'
      responses:
        '200':
          description: A random activity matching any supplied filters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActivityV1'
        '400':
          $ref: '#/components/responses/Error'
  /api/v2/activities:
    get:
      tags:
      - Activities
      summary: Get a Random Activity (V2)
      description: V2 surface. Returns a single random activity wrapped in an envelope object. V2 introduces enumerated accessibility (Few to no challenges, Minor challenges, Major challenges), a categorical price ($..$$$$$), and additional fields (duration, kidFriendly).
      operationId: getRandomActivityV2
      parameters:
      - $ref: '#/components/parameters/TypeParam'
      - $ref: '#/components/parameters/ParticipantsParam'
      - $ref: '#/components/parameters/MinParticipantsParam'
      - $ref: '#/components/parameters/MaxParticipantsParam'
      - $ref: '#/components/parameters/PriceParamV2'
      - $ref: '#/components/parameters/MinPriceParamV2'
      - $ref: '#/components/parameters/MaxPriceParamV2'
      - $ref: '#/components/parameters/AvailabilityParamV2'
      - $ref: '#/components/parameters/MinAvailabilityParamV2'
      - $ref: '#/components/parameters/MaxAvailabilityParamV2'
      responses:
        '200':
          description: A random activity wrapped in an activity envelope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActivityV2Envelope'
        '400':
          $ref: '#/components/responses/Error'
  /api/v2/activities/{key}:
    get:
      tags:
      - Activities
      summary: Get an Activity by Key (V2)
      description: Look up a single activity by its unique key.
      operationId: getActivityByKeyV2
      parameters:
      - $ref: '#/components/parameters/KeyPathParam'
      responses:
        '200':
          description: The activity matching the supplied key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActivityV2Envelope'
        '400':
          $ref: '#/components/responses/Error'
  /random:
    get:
      tags:
      - Activities
      summary: Get a Random Activity
      description: Returns a single random activity. No query parameters supported.
      operationId: getRandom
      responses:
        '200':
          description: A random activity.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Activity'
  /filter:
    get:
      tags:
      - Activities
      summary: Filter Activities
      description: Returns the list of activities matching the supplied filters. Both type and participants may be supplied independently or together.
      operationId: filterActivities
      parameters:
      - name: type
        in: query
        required: false
        description: Filter by activity category.
        schema:
          type: string
          enum:
          - education
          - recreational
          - social
          - charity
          - cooking
          - relaxation
          - busywork
      - name: participants
        in: query
        required: false
        description: Filter by exact number of participants.
        schema:
          type: integer
          enum:
          - 1
          - 2
          - 3
          - 4
          - 5
          - 6
          - 8
      responses:
        '200':
          description: A list of activities matching the supplied filters.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Activity'
  /activity/{key}:
    get:
      tags:
      - Activities
      summary: Get an Activity by Key
      description: Return the activity matching the supplied unique key.
      operationId: getActivityByKey
      parameters:
      - name: key
        in: path
        required: true
        description: Unique key identifying the activity.
        schema:
          type: string
      responses:
        '200':
          description: The activity matching the supplied key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Activity'
components:
  parameters:
    AvailabilityParamV2:
      name: availability
      in: query
      description: V2 — exact availability score as a decimal between 0.0 and 1.0.
      required: false
      schema:
        type: number
        format: float
        minimum: 0
        maximum: 1
    TypeParam:
      name: type
      in: query
      description: Filter activities by category type.
      required: false
      schema:
        type: string
        enum:
        - charity
        - cooking
        - music
        - diy
        - education
        - social
        - busywork
        - recreational
        - relaxation
    PriceParam:
      name: price
      in: query
      description: V1 — exact price as a decimal between 0.0 (free) and 1.0 (expensive).
      required: false
      schema:
        type: number
        format: float
        minimum: 0
        maximum: 1
    MaxAvailabilityParamV2:
      name: maxavailability
      in: query
      description: V2 — maximum availability (0.0–1.0).
      required: false
      schema:
        type: number
        format: float
        minimum: 0
        maximum: 1
    PriceParamV2:
      name: price
      in: query
      description: V2 — categorical price ladder. Supplied as 1–5 `$` characters ("$" cheapest through "$$$$$" most expensive). Internally mapped to a numeric value.
      required: false
      schema:
        type: string
        pattern: ^\$+$
        example: $$
    MaxPriceParam:
      name: maxprice
      in: query
      description: V1 — maximum price (0.0–1.0, inclusive).
      required: false
      schema:
        type: number
        format: float
        minimum: 0
        maximum: 1
    AccessibilityParamV1:
      name: accessibility
      in: query
      description: V1 — accessibility (also called availability) as a decimal between 0.0 (most accessible) and 1.0 (least accessible).
      required: false
      schema:
        type: number
        format: float
        minimum: 0
        maximum: 1
    MaxPriceParamV2:
      name: maxprice
      in: query
      description: V2 — maximum price as 1–5 `$` characters.
      required: false
      schema:
        type: string
        pattern: ^\$+$
    MinAvailabilityParamV2:
      name: minavailability
      in: query
      description: V2 — minimum availability (0.0–1.0).
      required: false
      schema:
        type: number
        format: float
        minimum: 0
        maximum: 1
    MinPriceParamV2:
      name: minprice
      in: query
      description: V2 — minimum price as 1–5 `$` characters.
      required: false
      schema:
        type: string
        pattern: ^\$+$
    MinPriceParam:
      name: minprice
      in: query
      description: V1 — minimum price (0.0–1.0, inclusive).
      required: false
      schema:
        type: number
        format: float
        minimum: 0
        maximum: 1
    KeyParam:
      name: key
      in: query
      description: Look up a single activity by its unique key.
      required: false
      schema:
        type: string
    ParticipantsParam:
      name: participants
      in: query
      description: Filter to activities requiring an exact number of participants.
      required: false
      schema:
        type: integer
        minimum: 1
    MinParticipantsParam:
      name: minparticipants
      in: query
      description: Filter to activities requiring at least this many participants.
      required: false
      schema:
        type: integer
        minimum: 1
    MaxParticipantsParam:
      name: maxparticipants
      in: query
      description: Filter to activities requiring at most this many participants.
      required: false
      schema:
        type: integer
        minimum: 1
    MaxAccessibilityParamV1:
      name: maxaccessibility
      in: query
      description: V1 — maximum accessibility (0.0–1.0).
      required: false
      schema:
        type: number
        format: float
        minimum: 0
        maximum: 1
    KeyPathParam:
      name: key
      in: path
      required: true
      description: Unique key identifying the resource.
      schema:
        type: string
    MinAccessibilityParamV1:
      name: minaccessibility
      in: query
      description: V1 — minimum accessibility (0.0–1.0).
      required: false
      schema:
        type: number
        format: float
        minimum: 0
        maximum: 1
  schemas:
    ActivityV2Envelope:
      type: object
      properties:
        activity:
          $ref: '#/components/schemas/ActivityV2'
      required:
      - activity
    ActivityV2:
      type: object
      description: V2 activity. Adds duration, kidFriendly, categorical accessibility and price.
      properties:
        activity:
          type: string
          example: Learn how to play a new sport
        type:
          type: string
          enum:
          - charity
          - cooking
          - music
          - diy
          - education
          - social
          - busywork
          - recreational
          - relaxation
          example: recreational
        participants:
          type: integer
          minimum: 1
          example: 1
        price:
          type: string
          pattern: ^\$+$
          description: Categorical price expressed as 1–5 dollar signs.
          example: $
        accessibility:
          type: string
          enum:
          - Few to no challenges
          - Minor challenges
          - Major challenges
          example: Few to no challenges
        duration:
          type: string
          enum:
          - minutes
          - hours
          - days
          - weeks
          example: hours
        kidFriendly:
          type: boolean
          example: true
        link:
          type: string
          format: uri
          example: ''
        key:
          type: string
          example: '5808228'
      required:
      - activity
      - type
      - participants
      - price
      - accessibility
      - duration
      - kidFriendly
      - key
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          example: Failed to query due to error in arguments
      required:
      - error
    Activity:
      type: object
      properties:
        activity:
          type: string
          example: Learn Express.js
        availability:
          type: number
          format: float
          minimum: 0
          maximum: 1
          description: Decimal availability score (0.0 most available, 1.0 least).
          example: 0.25
        type:
          type: string
          enum:
          - education
          - recreational
          - social
          - charity
          - cooking
          - relaxation
          - busywork
          example: education
        participants:
          type: integer
          minimum: 1
          example: 1
        price:
          type: number
          format: float
          minimum: 0
          maximum: 1
          example: 0.1
        accessibility:
          type: string
          enum:
          - Few to no challenges
          - Minor challenges
          - Major challenges
          example: Few to no challenges
        duration:
          type: string
          enum:
          - minutes
          - hours
          - days
          - weeks
          example: hours
        kidFriendly:
          type: boolean
          example: true
        link:
          type: string
          example: https://expressjs.com/
        key:
          type: string
          example: '3943506'
      required:
      - activity
      - availability
      - type
      - participants
      - price
      - accessibility
      - duration
      - kidFriendly
      - key
    ActivityV1:
      type: object
      description: V1 activity. Returned directly (no envelope).
      properties:
        activity:
          type: string
          description: Human-readable description of the activity.
          example: Learn Express.js
        type:
          type: string
          description: Category of the activity.
          enum:
          - charity
          - cooking
          - music
          - diy
          - education
          - social
          - busywork
          - recreational
          - relaxation
          example: education
        participants:
          type: integer
          minimum: 1
          description: Number of participants the activity requires.
          example: 1
        price:
          type: number
          format: float
          minimum: 0
          maximum: 1
          description: Decimal price ladder (0.0 = free, 1.0 = expensive).
          example: 0.1
        accessibility:
          type: number
          format: float
          minimum: 0
          maximum: 1
          description: Decimal accessibility (0.0 = most accessible, 1.0 = least).
          example: 0.25
        link:
          type: string
          format: uri
          description: Optional reference URL with more information.
          example: https://expressjs.com/
        key:
          type: string
          description: Unique numeric string identifying the activity.
          example: '3943506'
      required:
      - activity
      - type
      - participants
      - price
      - key
  responses:
    Error:
      description: Bad request or query argument error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'