Skip to content
Scrappa Get API key
CHINTAI API 1 credit/request

CHINTAI Property Search API Documentation

GET https://scrappa.co/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc

Scrappa's GET /api/chintai/search returns CHINTAI rental rooms in Japan as structured JSON, by municipality or railway line, with type, rent, area, layout, walking time, building age, sort and paging. CHINTAI lists rentals only, so there is no sale search.

What you get

One request returns one page of rooms and CHINTAI's own match count in pagination.total (rooms). Each room has id, url, layout, area_m2, floor_text, floor_number, rent_yen, management_fee_yen, total_monthly_yen, deposit_text with deposit_yen, key_money_text with key_money_yen, availability, chips, comment, photo_count, thumbnail, floor_plan_image, nearest_station, agency (id, name, phone, url), updated_at and publish_end. The building object holds name, type, address, built_text, built_year, age_years, floors_text, structure, access (line, station, walk minutes), latitude and longitude.

Japanese text stays as CHINTAI writes it. Numbers are added next to it. A value CHINTAI does not state is null, never 0. なし (none) is 0. A deposit in months (1ヶ月) is counted on the rent. CHINTAI shows only some rooms of a large building on a result page. Call the listing endpoint for building_rooms.

Location

Send prefecture and exactly one of city (5-digit municipality code) or line (line id). Take them from search_params of /api/chintai/autocomplete. A prefecture, city or line that does not exist returns 404.

Filters are honoured

CHINTAI ignores a value 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 room against the rent, area, layout, walking time and age filters. A room that breaks a filter is dropped and counted in pagination.dropped_by_filter. query echoes the applied filters.

  • min_rent and max_rent are in yen and use the steps of the CHINTAI form. CHINTAI applies them to rent plus management fee. The check uses rent_yen plus management_fee_yen. A room with no stated fee counts with its rent alone.
  • min_area and max_area are in square metres and use the steps of the form.
  • layouts is a comma-separated list such as 1K,1LDK. 1LDK+S counts as 1LDK. 5K covers 5K and 5DK, 5LDK covers 5LDK and larger.
  • walk_minutes keeps rooms with a station at most that many minutes away on foot.
  • max_age_years keeps buildings at most that old. 0 is new. A building still under construction (under_construction is true, age_years is null) counts as new.
  • type is mansion, apart or kodate.

Sorting

sort is rent_asc (default), rent_desc or area_desc. Rooms stay grouped by building, so the order is by building.

Pagination

page starts at 1. A page holds about 20 buildings with their rooms. A page past the last one returns an empty list with the real total and the page you asked for. total_pages is then null. It never returns page 1 data under another page number.

CHINTAI Property Search API Documentation 1 credit/request

Endpoint

Request preview
GET
https://scrappa.co/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc
Auth header
x-api-key
Cost
1 credit/request
prefecture = tokyo
Response preview
200 OK
{
    "success": true,
    "data": {
        "items": [
            {
                "id": "C010100011111560075568290001",
                "url": "https://www.chintai.net/detail/bk-C010100011111560075568290001/",
                "building": {
                    "name": "\u30b8\u30aa\u30a4\u30c9\u66d9\u6a4b",
                    "type": "\u8cc3\u8cb8\u30de\u30f3\u30b7\u30e7\u30f3",
                    "address": "\u6771\u4eac\u90fd\u65b0\u5bbf\u533a\u4f4f\u5409\u753a",
                    "built_text": "2019\u5e7407\u6708\uff08\u7bc97\u5e74\uff09",
                    "built_year": 2019,
                    "built_month": 7,
...

Parameters

Start with the required fields, then add optional filters only when your use case needs them.

Runnable path

1 required parameter needed before sending a request.

12 optional filters available.

prefecture string Required

Prefecture slug from autocomplete, for example tokyo, osaka or hokkaido.

Example value tokyo
city string Optional

Municipality code (5 digits), for example 13104 for Shinjuku. Send city or line.

Example value 13104
line string Optional

Railway line id, for example 101001 for the Yamanote line. Send city or line.

Example value example
type string Optional

mansion, apart or kodate. Without it all three are searched.

Example value example
min_rent integer Optional

Minimum rent plus management fee per month in yen, in the steps of the CHINTAI form.

Example value 10
max_rent integer Optional

Maximum rent plus management fee per month in yen, in the steps of the CHINTAI form.

Example value 150000
min_area integer Optional

Minimum floor area in square metres, in the steps of the form.

Example value 10
max_area integer Optional

Maximum floor area in square metres, in the steps of the form.

Example value 10
layouts string Optional

Comma-separated: 1R, 1K, 1DK, 1LDK, 2K, 2DK, 2LDK, 3K, 3DK, 3LDK, 4K, 4DK, 4LDK, 5K, 5LDK.

Example value 1K,1LDK
walk_minutes integer Optional

At most this many minutes to a station on foot: 1, 3, 5, 7, 10, 15 or 20.

Example value 10
max_age_years integer Optional

Building age in years at most: 0 (new), 1, 3, 5, 7, 10, 15, 20, 25 or 30.

Example value 10
sort string Optional

rent_asc (default), rent_desc or area_desc.

Example value rent_asc
page integer Optional

Result page from 1.

Example value 1

Request Examples

PHP
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://scrappa.co/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
        "x-api-key: YOUR_API_KEY_HERE"
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
PHP
<?php

use Illuminate\Support\Facades\Http;

$response = Http::timeout(30)
    ->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
    ->get('https://scrappa.co/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc');

if ($response->successful()) {
    echo $response->body();
} else {
    echo "Error: " . $response->status();
}
JavaScript
const options = {
    method: 'GET',
    headers: {
        'x-api-key': 'YOUR_API_KEY_HERE'
    }
};

fetch('https://scrappa.co/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc', options)
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.text();
    })
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
JavaScript
const axios = require('axios');

const options = {
    method: 'GET',
    url: 'https://scrappa.co/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc',
    headers: {
        x-api-key: 'YOUR_API_KEY_HERE',
    }
};

try {
    const response = await axios(options);
    console.log(response.data);
} catch (error) {
    console.error('Error:', error.message);
}
Ruby
require 'net/http'
require 'uri'

uri = URI.parse("https://scrappa.co/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'

request = Net::HTTP::Get.new(uri.request_uri)
request['x-api-key'] = 'YOUR_API_KEY_HERE'

begin
    response = http.request(request)
    puts response.body
rescue => e
    puts "Error: #{e.message}"
end
Python
import http.client
import json

conn = http.client.HTTPSConnection("scrappa.co")

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    conn.request("GET", "/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc", headers=headers)
    res = conn.getresponse()
    data = res.read()
    print(data.decode("utf-8"))
except Exception as e:
    print(f"Error: {e}")
finally:
    conn.close()
Python
import requests

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    response = requests.get('https://scrappa.co/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc', headers=headers)
    response.raise_for_status()
    print(response.text)
except requests.exceptions.RequestException as e:
    print(f"Error: {e}")
Java
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;

public class ApiExample {
    public static void main(String[] args) {
        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
            .url("https://scrappa.co/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc")
        .addHeader("x-api-key", "YOUR_API_KEY_HERE")
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                System.out.println(response.body().string());
            } else {
                System.out.println("Error: " + response.code());
            }
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}
Go
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {
    client := &http.Client{}
    req, err := http.NewRequest("GET", "https://scrappa.co/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        return
    }
    req.Header.Set("x-api-key", "YOUR_API_KEY_HERE")

    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error making request:", err)
        return
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("Error reading response:", err)
        return
    }

    fmt.Println(string(body))
}
Terminal
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc"
C#
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY_HERE");

        try
        {
            var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "https://scrappa.co/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc"));
            var content = await response.Content.ReadAsStringAsync();
            Console.WriteLine(content);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
TypeScript
import axios from 'axios';

async function run(): Promise<void> {
    try {
        const response = await axios({
            method: 'GET',
            url: 'https://scrappa.co/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc',
            headers: {
        'x-api-key': 'YOUR_API_KEY_HERE',
            },
        });

        console.log(response.data);
    } catch (error) {
        console.error('Error:', error);
    }
}

void run();
RUST
use reqwest::Client;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new();

    let response = client
        .get("https://scrappa.co/api/chintai/search?prefecture=tokyo&city=13104&max_rent=150000&layouts=1K%2C1LDK&sort=rent_asc")
        .header("x-api-key", "YOUR_API_KEY_HERE")
        .send()
        .await?;

    println!("{}", response.text().await?);

    Ok(())
}

Response Schema

Example response fields are illustrative; inspect the JSON before integrating.

Example response fields

Scan these fields before integrating.

success data meta
JSON Response
200 OK
{
    "success": true,
    "data": {
        "items": [
            {
                "id": "C010100011111560075568290001",
                "url": "https://www.chintai.net/detail/bk-C010100011111560075568290001/",
                "building": {
                    "name": "\u30b8\u30aa\u30a4\u30c9\u66d9\u6a4b",
                    "type": "\u8cc3\u8cb8\u30de\u30f3\u30b7\u30e7\u30f3",
                    "address": "\u6771\u4eac\u90fd\u65b0\u5bbf\u533a\u4f4f\u5409\u753a",
                    "built_text": "2019\u5e7407\u6708\uff08\u7bc97\u5e74\uff09",
                    "built_year": 2019,
                    "built_month": 7,
                    "age_years": 7,
                    "under_construction": false,
                    "floors_text": "11\u968e\u5efa(\u5730\u4e0b1\u968e)",
                    "floors_above_ground": 11,
                    "floors_below_ground": 1,
                    "structure": "\u9244\u7b4b\u30b3\u30f3\u30af\u30ea\u30fc\u30c8\u9020",
                    "access": [
                        {
                            "text": "\u90fd\u55b6\u65b0\u5bbf\u7dda/\u66d9\u6a4b\u99c5 \u5f92\u6b692\u5206",
                            "line": "\u90fd\u55b6\u65b0\u5bbf\u7dda",
                            "station": "\u66d9\u6a4b\u99c5",
                            "walk_minutes": 2
                        }
                    ],
                    "latitude": 35.692285,
                    "longitude": 139.724542,
                    "building_code": "4141172",
                    "image": "https://img.chintai.net/awsorg/bk/ot/C01010001/68/29/111156007556829/021/1111560075568290001_20261026111334076.JPG"
                },
                "layout": "1K",
                "area_m2": 25.1,
                "floor_text": "3\u968e",
                "floor_number": 3,
                "rent_yen": 98000,
                "management_fee_text": "8,000\u5186",
                "management_fee_yen": 8000,
                "total_monthly_yen": 106000,
                "deposit_text": "1\u30f6\u6708",
                "deposit_months": 1,
                "deposit_yen": 98000,
                "key_money_text": "\u306a\u3057",
                "key_money_months": 0,
                "key_money_yen": 0,
                "availability": "\u5373\u5165\u5c45\u53ef",
                "chips": [
                    "\u672c\u65e5\u306e\u65b0\u7740",
                    "\u30aa\u30fc\u30c8\u30ed\u30c3\u30af",
                    "\u72ec\u7acb\u6d17\u9762\u53f0"
                ],
                "comment": "\u30aa\u30f3\u30e9\u30a4\u30f3\u6848\u5185\u53ef\u3002\u5199\u771f\u30fb\u52d5\u753b\u9001\u4ed8\u3001WEB\u5951\u7d04\u7b49\u6765\u5e97\u4e0d\u8981\u3067\u3054\u5951\u7d04\u53ef\u80fd\u3067\u3059\u3002",
                "photo_count": 12,
                "thumbnail": "https://img.chintai.net/awsorg/bk/ot/C01010001/68/29/111156007556829/021/1111560075568290001_20261026111334076.JPG",
                "floor_plan_image": "https://img.chintai.net/awsorg/bk/ot/C01010001/68/29/111156007556829/011/1111560075568290001_20261026111334204.JPG",
                "nearest_station": {
                    "name": "\u66d9\u6a4b\u99c5",
                    "walk_minutes": 2
                },
                "agency": {
                    "id": "C01010001",
                    "name": "\u682a\u5f0f\u4f1a\u793e\u30ea\u30d6\u30fb\u30de\u30c3\u30af\u30b9 \u30ea\u30d6\u30de\u30c3\u30af\u30b9\u79cb\u8449\u539f\u5e97",
                    "phone": "03-5297-8877",
                    "url": "https://www.chintai.net/shop/C01010001/"
                },
                "updated_at": "2026-10-26",
                "publish_end": "2026-11-09T23:59:59+09:00",
                "is_new_today": true
            }
        ],
        "pagination": {
            "page": 1,
            "buildings_per_page": 20,
            "total": 1214,
            "total_pages": 61,
            "returned": 1,
            "dropped_by_filter": 0,
            "has_more": true
        },
        "query": {
            "prefecture": "tokyo",
            "city": "13104",
            "max_rent": 150000,
            "layouts": [
                "1K",
                "1LDK"
            ],
            "sort": "rent_asc"
        }
    },
    "meta": {
        "endpoint_family": "search",
        "billable": true
    }
}

Errors

Handle these documented responses before retrying or showing customer-facing failures.

404

Not Found

No CHINTAI search page exists for that prefecture, city or line. Take them from autocomplete. (`NOT_FOUND`). Non-billable.

{
    "meta": {
        "billable": false,
        "retryable": false,
        "endpoint_family": "search"
    },
    "error": {
        "code": "NOT_FOUND",
        "message": "No CHINTAI search page exists for that prefecture, city or line. Take them from autocomplete."
    },
    "success": false
}
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.

{
    "errors": {
        "prefecture": [
            "The selected prefecture is invalid."
        ]
    },
    "message": "The selected prefecture is invalid."
}
503

Upstream Unavailable

CHINTAI 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.

{
    "meta": {
        "billable": false,
        "retryable": true,
        "endpoint_family": "search"
    },
    "error": {
        "code": "UPSTREAM_UNAVAILABLE",
        "message": "CHINTAI is temporarily unavailable. Please retry."
    },
    "success": false
}

Generate Code with AI

Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.

Try It Live

Test this endpoint in our interactive playground with real data.