Join the waitlist
Search

Search bookables by attribute filters

POST
/v1/search

Runs a structured, deterministic search over one bookable type using AND-combined attribute filters. Filtering on an attribute path no entity of the type has returns 400 with the valid paths. Prices use the money convention { amount (integer minor units), currency (ISO 4217) }; filter on price.amount

Authorization

JWT
headerAuthorizationBearer <JWT>

Bearer JWT. Required on every endpoint except /health

Request Body

application/json
  1. body
type*EntityType

Customer-defined entity type. Lowercase, created on first use, bound to one role per project

Match^[a-z][a-z0-9_]{0,63}$
text?|

Natural-language query (e.g. "place for 2 in London under $140"). When set, a fast model translates it into attribute filters and the explicit filters/sort below may be omitted. When absent, only the structured filters run (no model call).

Lengthlength <= 500
filters?array<>

Up to 20 filters, combined with AND

Itemsitems <= 20
sort?
limit?integer
Range1 <= value <= 100
Default20
cursor?string|null
introspection?boolean

When true, the response includes an introspection object explaining how the query was read (effective filters, pipeline trace, sort). Additive and optional; omit or send false for the normal response.

Defaultfalse

Response Body

Matching bookables with an explanation of the query

application/json
  1. response
data*array<>
meta*
explanation*

Why these results — every result is traceable to these filters

introspection?

Present only when the request set introspection: true. Explains how the query was read: a one-line summary, the effective filters, and the ordered pipeline steps.

Example Request
curl -X POST 'https://api.slotr.dev/v1/search' \  -H 'Content-Type: application/json' \  -d '{  "type": "string"}'
Example Response
{  "data": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "object": "bookable",      "type": "string",      "externalId": "string",      "name": "string",      "status": "active",      "attributes": {},      "createdAt": "2019-08-24T14:15:22Z",      "updatedAt": "2019-08-24T14:15:22Z"    }  ],  "meta": {    "nextCursor": "string",    "tookMs": 0  },  "explanation": {    "type": "string",    "appliedFilters": [      "string"    ],    "sort": "string"  },  "introspection": {    "understood": "string",    "inferredFilters": [      {        "label": "string",        "path": "string",        "op": "string"      }    ],    "trace": [      {        "step": "string",        "status": "ok",        "detail": "string"      }    ]  }}