# bound-type-missing

A **bound** leaves out its **type**.

- **Routes:** `read-events` and `observe-events`
- **Description:** `bound type is missing: expected 'inclusive' or 'exclusive'`
- **Details:** **`bound`**, the bound that leaves out its type: `lowerBound`, or, when reading, `upperBound`.

## Why It Happens

A **bound** limits the events by their ID: `lowerBound` to those from an ID on, and, when reading, `upperBound` to those up to an ID, as described in **[Reading a Specific Range](/learn/tutorials/first-steps-with-eventsourcingdb/reading-events#reading-a-specific-range)**. Besides its `id`, every bound needs a **`type`**, which says whether the event with that ID belongs to the range. There is **no default**, so a bound such as `{ "id": "23" }` is refused, and so is one whose type is an empty string.

The `id` of a bound is checked before its type, so a bound that leaves out both is reported as **[`event-id-missing`](/docs/eventsourcingdb/errors/event-id-missing)**. A type other than `inclusive` or `exclusive` is reported as **[`bound-type-unknown`](/docs/eventsourcingdb/errors/bound-type-unknown)**.

## How to Fix It

Give every bound its type: `inclusive` to include the event with its ID, `exclusive` to leave it out. To resume after the last event you received, for example, use its ID with `exclusive`. Sending the same request again fails the same way.

## Example

To read the events of `/books/42` with a `lowerBound` of `{ "id": "23" }`, EventSourcingDB answers with this error, as a line of the stream, and then ends the stream with its `end` item:

```json
{
  "type": "error",
  "data": {
    "code": "https://docs.eventsourcingdb.io/errors/bound-type-missing",
    "description": "bound type is missing: expected 'inclusive' or 'exclusive'",
    "details": {
      "bound": "lowerBound"
    }
  }
}
```
