# 4zida Property Search API Documentation

Search 4zida listings for sale or rent in Serbia: apartments, houses, offices and shops, lots and garages. Filter by place, price, area, rooms, floor, state, furnishing, heating, advertiser and features, sort and page through the results. Each item carries the price in euro, area, rooms, floor, state, address, place ids and names, photos, dates, the advertiser and the agency link. A page holds 20 listings, total_pages is computed from total, and the page you ask for is the page you get. Every returned item satisfies the filters you set. A page past the last page returns an empty list. Use /autocomplete first to find place ids: an unknown place id silently returns other places. There is no bathroom filter because 4zida has none. Bathrooms are in /listing. An unknown value for a filter is a 422 error.

- **Documentation:** [https://scrappa.co/docs/4zida-api/fourzida_search](https://scrappa.co/docs/4zida-api/fourzida_search)
- **API group:** 4zida API
- **Endpoint:** `GET https://scrappa.co/api/4zida/v1/search`

## Authentication

Send your Scrappa API key in the `X-API-KEY` request header. Paid endpoints also support accountless x402 payments when called without an API key.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `for` | string | Yes | sale or rent. |
| `type` | string | No | apartments (default), houses, offices, lots or vehicle_spots. |
| `place_ids[]` | array | No | Place ids from /autocomplete or /place-children, repeatable up to 10 times. Example: 2 for Beograd. Without a place the search covers all of Serbia. |
| `min_price` | integer | No | Lowest price in euro. For rent this is the price for one payment term, usually one month (see payment_terms). |
| `max_price` | integer | No | Highest price in euro. For rent this is the price for one payment term. |
| `min_area` | integer | No | Smallest area in square metres. For lots the unit is ares. |
| `max_area` | integer | No | Largest area in square metres. For lots the unit is ares. |
| `min_price_per_m2` | integer | No | Lowest price per square metre in euro. |
| `max_price_per_m2` | integer | No | Highest price per square metre in euro. |
| `rooms[]` | array | No | Room structure, repeatable. Apartments: studio, one_room, one_and_half_room, two_room, two_and_half_room, three_room, three_and_half_room, four_room, four_and_half_plus. Houses: one_floor to six_floors. Offices: shop, office, practice, studio, warehouse, hall, catering, kiosk, plant, sports, yard, tourist, building. Lots: building_land, farmland, industrial_land. Vehicle spots: garage, parking. |
| `categories[]` | array | No | Sub type, repeatable. Apartments: flat, house_flat, studio, salon, penthaus, garden_apartment, duplex. Houses: vacation-house, montage-house, row-house, detached-house, semi-detached-house, village-house, homestead, household. |
| `states[]` | array | No | original, new, in_progress, repaired or needs_repair. Repeatable. |
| `furnished[]` | array | No | yes, no or semi. Repeatable. |
| `heating[]` | array | No | central, district, electricity, gas, heatPump, underfloor, airConditioning, solid, tileStove, storageHeater, marbleRadiator, norwegianRadiators, allocators or none. Repeatable. |
| `payment_terms[]` | array | No | Rent only: day, month, 3 months, 6 months or year. Repeatable. |
| `advertiser_types[]` | array | No | agency, firm, investor or owner. Repeatable. |
| `registered` | string | No | Land registry status: yes, partially, in_progress or no. |
| `min_floor` | integer | No | Lowest floor. 0 is the ground floor. |
| `max_floor` | integer | No | Highest floor. |
| `elevator` | boolean | No | Feature flags, each true or left out: elevator, terrace, yard, garage, parking_space, attic, basement, air_conditioning, pets_allowed, smoking_allowed, inhabitable_now, cctv, alarm_secured, asphalt_access, sewerage, power_line, phone_line, wheelchair_access, virtual_sightseeing, video_or_3d_tour, urgent, with_images, new_build. 4zida cannot filter for the absence of a feature, so false is a 422. Some flags exist only for some types: an unsupported flag is a 422. |
| `sort` | string | No | newest, price_asc, price_desc, area_asc or area_desc. Without it the site default order applies. |
| `page` | integer | No | One-based page number. Defaults to 1. |

## Example request

```bash
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/4zida/v1/search?for=rent&type=apartments&place_ids%5B0%5D=2&rooms%5B0%5D=two_room&max_price=600&sort=price_asc"
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 422 | Validation Error | A public parameter is missing, unknown or invalid, or 4zida cannot resolve a filter value. The response is not billable. |
| 404 | Resource Not Found | The requested 4zida resource does not exist. The response is not billable. |
| 503 | Unexpected Upstream Response | 4zida answered with a body that is not the documented shape. The response is not billable. |
| 503 | Upstream Unavailable | 4zida was temporarily unavailable or blocked the request. The response is not billable and the request never answers 429. |

## More Scrappa resources

- [API documentation](https://scrappa.co/docs)
- [Full LLM-readable API reference](https://scrappa.co/llms-full.txt)
- [OpenAPI specification](https://scrappa.co/docs/api.json)
- [Pricing](https://scrappa.co/pricing)
