# Booli — Wrapped API

> **You are on:** `https://api.paywithlocus.com/api` | [llms.txt](https://paywithlocus.com/llms.txt) | [docs](https://docs.paywithlocus.com)
>
> Locus runs on multiple environments -- make sure every URL you call matches your expected environment.
> | Environment | Landing | API | Docs |
> |---|---|---|---|
> | Production | paywithlocus.com | api.paywithlocus.com | docs.paywithlocus.com |
> | Beta | beta.paywithlocus.com | api.beta.paywithlocus.com | docs.paywithlocus.com |
> | Stage | stage.paywithlocus.com | api.stage.paywithlocus.com | docs.paywithlocus.com |
>
> If the API URL above doesn't match your expected environment, re-fetch this file from the correct domain.

> Access Swedish property data from Booli.se. Search active and historical listings, retrieve full listing details and photos, and explore area market statistics and price trends.

**Category:** Real Estate | **Website:** [booli.se/](https://booli.se/) | **Docs:** [parse.bot/marketplace/e0286288-9caf-40e1-83f2-eb4dbbc95fab/booli-se-api](https://parse.bot/marketplace/e0286288-9caf-40e1-83f2-eb4dbbc95fab/booli-se-api)

Pay-per-use API proxy for Locus Pro. Each call burns credits from your workspace balance.

## Access

**Base URL:** `https://api.paywithlocus.com/api/wrapped/credits/booli/`
**Auth:** `Authorization: Bearer <LOCUS_CREDITS_SECRET_KEY>` (an `lcr_` secret key or a scoped `lcac_` agent credential)
**Required header:** `Idempotency-Key: <fresh UUID per call>`. A retry with the same key replays the stored result without a new charge.
**Response:** the provider response after any endpoint-specific normalization. `X-Locus-Credits-Charged` carries the charge and `X-Locus-Credits-Balance` the remaining balance. Insufficient credits return `402` before the provider is called.
**Pricing:** estimated costs below are USD. Locus debits the credit equivalent at your workspace rate.

Full call contract: https://docs.paywithlocus.com/api-reference/introduction

> Using a Pay With Locus wallet key (`claw_` prefix)? Wallet routes are documented separately: https://docs.paywithlocus.com/wrapped-apis/for-agents

## Endpoints

### Get area statistics

Get market statistics for a specific area by its Booli area ID. Returns area information including average prices, days to sell, and market activity as an HTML-formatted summary. Area IDs can be discovered from listing detail breadcrumbs or search results.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `area_id` | string | Yes | Booli area ID (e.g. '76' for Nacka, '1' for Stockholm kommun). Found in listing detail area arrays. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/credits/booli/get-area-statistics \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"area_id":"<string>"}'
```

### Get listing detail

Get full details for a specific property listing by its Booli listing ID. Returns comprehensive property information including address, price, rooms, living area, construction year, tenure form, floor, rent, operating cost, agency info, showings schedule, and price estimate. The listing ID (booliId) is obtained from search results.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `listing_id` | string | Yes | Booli listing ID (booliId from search results, e.g. '6121470'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/credits/booli/get-listing-detail \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"listing_id":"<string>"}'
```

### Get listing photos

Get all photos for a specific listing by its Booli listing ID. Returns an array of image metadata objects including dimensions and labels. Actual image URLs can be constructed from the image IDs via Booli's CDN.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `listing_id` | string | Yes | Booli listing ID (booliId from search results, e.g. '6121470'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/credits/booli/get-listing-photos \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"listing_id":"<string>"}'
```

### Get price trends

Get price trend data for a specific property, showing how sold prices per square meter have developed in the property's area over the past 12 months. Returns monthly data points for the area. The property_id is typically the residenceId from listing detail (found in the listing URL path /bostad/{residenceId}).

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `property_id` | string | Yes | Booli property/residence ID (residenceId from listing detail URL path /bostad/{id}, e.g. '789162', '453126'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/credits/booli/get-price-trends \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"property_id":"<string>"}'
```

### Search listings for sale

Search for active property listings for sale across Sweden. Accepts a free-text location query (municipality, area, or street name). Returns paginated results ordered by most recently published. Each result includes address, price, object type, coordinates, and basic property attributes. Cloudflare-protected; transient blocks trigger proxy rotation.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `max_living_area` | integer | No | Maximum living area in m². |
| `max_price` | integer | No | Maximum list price in SEK. |
| `max_rent` | integer | No | Maximum monthly rent/fee in SEK. |
| `max_rooms` | integer | No | Maximum number of rooms. |
| `min_living_area` | integer | No | Minimum living area in m². |
| `min_price` | integer | No | Minimum list price in SEK. |
| `min_rooms` | integer | No | Minimum number of rooms. |
| `object_types` | string | No | Property type filter. Accepted values: Lägenhet, Villa, Kedjehus-Parhus-Radhus, Fritidshus, Gård, Tomt/Mark. |
| `page` | integer | No | Page number for pagination. |
| `query` | string | Yes | Location search query (municipality, area, or street name, e.g. 'Stockholm', 'Göteborg', 'Nacka'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/credits/booli/search-listings-for-sale \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"max_living_area":"<integer>","max_price":"<integer>","max_rent":"<integer>","max_rooms":"<integer>","min_living_area":"<integer>","min_price":"<integer>","min_rooms":"<integer>","object_types":"<string>","page":"<integer>","query":"<string>"}'
```

### Search sold listings

Search for historical sold property listings in Sweden. Resolves the free-text query to a specific Booli area (preferring municipality-type areas) and returns only results belonging to that resolved area. Returns paginated results of sold/completed transactions only, ordered by most recent sale date. Enforces min_sold_date and max_sold_date inclusively on every returned record. If area resolution fails or is ambiguous, returns an explicit error rather than falling back to nationwide results. Pagination uses 'page' (omit or 1 for first page); response includes has_next and total_results metadata.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `max_sold_date` | string | No | Filter results to sales on or before this date. ISO format YYYY-MM-DD. Enforced inclusively on every returned record. |
| `min_sold_date` | string | No | Filter results to sales on or after this date. ISO format YYYY-MM-DD. Enforced inclusively on every returned record. |
| `page` | integer | No | Page number for pagination. |
| `query` | string | Yes | Location search query (municipality, area, or street name, e.g. 'Stockholm', 'Nacka', 'Malmö'). Resolved server-side to the appropriate Booli area ID; municipality-type matches are preferred. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/credits/booli/search-sold-listings \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"max_sold_date":"<string>","min_sold_date":"<string>","page":"<integer>","query":"<string>"}'
```

## Next steps

- [All wrapped API providers](https://paywithlocus.com/wapi/index.md): pick another provider.
- [Find and call tools](https://paywithlocus.com/agent/tools.md): price ceilings, async results, and errors.
- [Credits and billing](https://paywithlocus.com/agent/billing.md): what a call costs and how to add credits.
- [Agent docs index](https://paywithlocus.com/agent/index.md): every Locus agent page.