# Sinyi Property Search API Documentation

Scrappa's `GET /api/sinyi/search` returns Sinyi Realty property in Taiwan as structured JSON, for sale or for rent, with location, type, price, rooms, area, building age, sort and paging.

## What you get

One request returns one page of listings (30 by default, up to 50), Sinyi's own match count in `pagination.total` and the real `page`. Sale rows have `id`, `title`, `url`, `property_types`, `price` (New Taiwan dollars), `price_wan` (the same price in units of 萬), `original_price`, `discount_percent`, `area`, `layout`, `rooms`, `halls`, `bathrooms`, `floor`, `total_floors`, `age_years`, `address`, `zip_code`, `latitude`, `longitude`, `community`, `images` and `views_3_months`. Rent rows have `id`, `title`, `price` per month, `area.rental_ping`, `layout`, `rooms`, `bathrooms`, `floor`, `address`, coordinates, `cover_image` and `updated_at`. A field Sinyi does not state is `null`. Call the listing endpoint for fees, all images, the agent and the branch.

## Filters are honoured

Sinyi ignores a filter it does not know and returns the unfiltered list. This API therefore checks every value before the lookup and rejects unknown values with `422`. It also checks every returned row against `min_price`, `max_price`, `min_rooms`, `max_rooms`, `min_area`, `max_area` and `type`. A row that breaks a filter is dropped and counted in `pagination.dropped_by_filter`. `query` echoes the applied filters. Area is in ping (1 ping is 3.3058 square metres). Sinyi has no bathroom filter, so none is offered.

## Location

Take `location` from `search_params` of `/api/sinyi/autocomplete` or from `/api/sinyi/locations`. A three digit value is a district zip code, for example `106` for Da'an. A one or two digit value is a city id, for example `1` for Taipei. Without a location the search covers Taiwan. Rent search is available for cities 1 to 21.

## Sorting

`recommended` is the default. Sale supports `price_asc`, `price_desc`, `area_asc`, `area_desc`, `age_asc` and `age_desc`. Rent supports `price_asc`, `price_desc`, `newest` and `area_desc`.

## Pagination

`page` runs from 1 to 500. A page past the last one returns an empty list with the real total and the real `page`. It never returns page 1 data under another page number.

- **Documentation:** [https://scrappa.co/docs/sinyi-api/sinyi_search](https://scrappa.co/docs/sinyi-api/sinyi_search)
- **API group:** Sinyi API
- **Endpoint:** `GET https://scrappa.co/api/sinyi/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 |
| --- | --- | --- | --- |
| `trade` | string | Yes | sale or rent. |
| `location` | string | No | District zip code (3 digits, for example 106) or city id (1 to 22) from autocomplete or locations. |
| `type` | string | No | Sale: apartment, high_rise, mid_rise, suite, villa, office, warehouse, store, factory, land, parking or other. Rent: whole_home, private_suite, shared_suite, room, store, office, factory or parking. |
| `min_price` | integer | No | Minimum price in New Taiwan dollars (monthly rent for rent). |
| `max_price` | integer | No | Maximum price in New Taiwan dollars (monthly rent for rent). |
| `min_rooms` | integer | No | Minimum number of bedrooms. 0 is a studio. |
| `max_rooms` | integer | No | Maximum number of bedrooms. |
| `min_area` | number | No | Minimum area in ping. Sale uses the building area, rent the rental area. |
| `max_area` | number | No | Maximum area in ping. |
| `min_age` | integer | No | Sale only. Minimum building age in years. |
| `max_age` | integer | No | Sale only. Maximum building age in years. |
| `sort` | string | No | recommended (default), price_asc, price_desc. Sale also area_asc, area_desc, age_asc, age_desc. Rent also newest, area_desc. |
| `page` | integer | No | Result page, 1 to 500. |
| `per_page` | integer | No | Listings per page, 1 to 50. Default 30. |

## Example request

```bash
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/sinyi/search?trade=sale&location=106&min_price=20000000&max_price=30000000&sort=price_asc"
```

## Example response

```json
{
    "success": true,
    "data": {
        "items": [
            {
                "id": "9069HC",
                "title": "\u25cf\u4fe1\u7fa9\u6566\u5357\u25cf\u4e5d\u9f8d",
                "url": "https://www.sinyi.com.tw/buy/house/9069HC",
                "share_url": "https://sinyi.in/o/9069HC/0/3",
                "listing_type": "sale",
                "property_types": [
                    "high_rise",
                    "office"
                ],
                "price": 20000000,
                "price_wan": 2000,
                "original_price": 16000000,
                "discount_percent": 25,
                "currency": "TWD",
                "area": {
                    "building_ping": 10.61,
                    "building_sqm": 35.07,
                    "main_building_ping": 8.96,
                    "main_building_sqm": 29.62,
                    "land_ping": 1.13,
                    "land_sqm": 3.74
                },
                "layout": "1\u5ef31\u885b",
                "rooms": 0,
                "halls": 1,
                "bathrooms": 1,
                "floor": "6",
                "total_floors": 12,
                "age_years": 47.9,
                "is_presale": false,
                "has_parking": false,
                "parking": null,
                "address": "\u53f0\u5317\u5e02\u5927\u5b89\u5340\u6566\u5316\u5357\u8def\u4e8c\u6bb5",
                "zip_code": "106",
                "latitude": 25.032869880023,
                "longitude": 121.54920239332,
                "community": null,
                "cover_image": "https://res.sinyi.com.tw/buy/9069HC/bigimg/A.JPG",
                "images": [
                    "https://res.sinyi.com.tw/buy/9069HC/smallimg/A.JPG"
                ],
                "tag_codes": [
                    "12",
                    "10",
                    "16",
                    "17",
                    "18",
                    "19",
                    "100",
                    "102",
                    "107"
                ],
                "views_3_months": 163,
                "has_vr": true,
                "has_video": false
            }
        ],
        "pagination": {
            "page": 1,
            "per_page": 30,
            "total": 116,
            "total_pages": 4,
            "returned": 1,
            "dropped_by_filter": 0,
            "has_more": true
        },
        "query": {
            "trade": "sale",
            "sort": "price_asc",
            "location": "106",
            "min_price": 20000000,
            "max_price": 30000000
        }
    },
    "meta": {
        "endpoint_family": "search",
        "billable": true
    }
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 404 | Not Found | Sinyi has no rent search for that location. Take the location from autocomplete or locations. (`NOT_FOUND`). Non-billable. |
| 422 | Validation Error | A query parameter is missing, unknown or unusable. Unknown parameters and unknown values are rejected before any lookup, never ignored. Non-billable. |
| 503 | Upstream Unavailable | Sinyi could not be reached after one retry, answered with an error or changed its format (`UPSTREAM_UNAVAILABLE`). Retryable and never billed. Clients are never rate limited. |

## 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)
