---
title: "Search"
method: GET
path: "/api/v1/search"
---

# Search

`GET /api/v1/search`

## Request

- Base URL: `https://trovastorage.it` (the document declares no server; this is the origin it was published from)
- URL: `https://trovastorage.it/api/v1/search`
- Auth: one of:
  - API key in header `X-Access-Token`
  - HTTP bearer

Centres within a radius, nearest first — the list the assistant's map and
the pre-M7 search page read. Capped at `SEARCH_MAX_RESULTS`, silently: a
caller who needs to know it was cut uses `/search/area`.

## Query parameters

- `lat` number, required
- `lng` number, required
- `radius_km` number
- `min_m2` number, nullable
- `max_m2` number, nullable
- `max_price_cents` integer, nullable
- `features` string[]
- `amenities` string[]
- `operators` string[]
- `available` boolean
- `category` string, nullable

## Response `200`

Successful Response

- SearchResultItem[]
  - `slug` string, required
  - `public_path` string, required
  - `category` 'self_storage' | 'container_yard' | 'mover_depository', required
  - `price_unit` 'm2' | 'm3', required
  - `listing_rung` integer, required
  - `listing_status` 'unmanaged' | 'confirmed' | 'managed', required
  - `confirmed_on` string, date, nullable
  - `postcode` string, nullable
  - `province` string, nullable
  - `phone` string, nullable
  - `website` string, nullable
  - `from_price` FromPrice: The lowest price an operator publishes, as published: never converted, and never without where and when it was read (M2).
    - `cents` integer, required
    - `period` string, required
    - `basis` string, required
    - `vat_included` boolean, nullable
    - `insurance_included` string, required
    - `source_url` string, nullable
    - `checked_on` string, date, required
  - `field_sources` FieldSource[]
    - `field` string, required
    - `source_kind` string, required
    - `source_url` string, nullable
    - `checked_on` string, date, required
  - `size_availability` SizeAvailability[]
    - `size` 'small' | 'medium' | 'large', required
    - `min_m2` integer, required
    - `max_m2` integer, nullable, required
    - `status` 'available' | 'limited' | 'full', nullable, required
  - `availability_updated_at` string, date-time, nullable
  - `site_id` string, uuid, required
  - `name` string, required
  - `address_line` string, required
  - `city` string, required
  - `country_code` string, required
  - `lat` number, required
  - `lng` number, required
  - `distance_km` number, required
  - `starting_price_cents` integer, nullable, required
  - `available_unit_count` integer, nullable, required
  - `size_classes` integer[], required
  - `amenities` string[], required
  - `cover_photo_url` string, nullable
  - `self_serve_booking` boolean
  - `size_unknown` boolean
  - `operator` ListingOperator, required: Whose centre this is, on every card and centre page (M7). Until M7 nothing public said whose a centre was — the search carried no operator at all, because there was only ever one on the map. `manages_listing` is what the page needs to know it is looking at a listing read off a competitor's website rather than at inventory somebody is selling.
    - `slug` string, required
    - `business_name` string, required
    - `legal_name` string, nullable
    - `manages_listing` boolean, required
    - `has_specialist` boolean, required
    - `publishes_public_prices` boolean, required
    - `logo_url` string, nullable
    - `accent_colour` string, nullable
  - `opening_hours` OpeningHours: When a centre is staffed and when a customer can get in (0017). `None` and `[]` are different answers and the difference is the point: `office: None` means the operator does not publish office hours, `office: []` means there are no fixed ones — by appointment, or no staffed office. A card that turns "we do not know" into "closed" says something false about a real business.
    - `office` OpeningInterval[], nullable
      - `days` integer[], required
      - `opens` string, required
      - `closes` string, required
    - `access` OpeningInterval[], nullable
      - `days` integer[], required
      - `opens` string, required
      - `closes` string, required
    - `access_24_7` boolean
  - `declared_min_m2` number, nullable
  - `declared_max_m2` number, nullable
  - `declared_from_price_cents` integer, nullable
  - `source_url` string, nullable
  - `source_checked_on` string, date, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/trovastorage/apis/stock-your-inventory.md) · [All operations](https://skmtc.dev/trovastorage/apis/stock-your-inventory/llms.txt) · [OpenAPI document](https://skmtc.dev/trovastorage/apis/stock-your-inventory/revisions/c75f591a585c?raw)
