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_rentandmax_rentare in yen and use the steps of the CHINTAI form. CHINTAI applies them to rent plus management fee. The check usesrent_yenplusmanagement_fee_yen. A room with no stated fee counts with its rent alone.min_areaandmax_areaare in square metres and use the steps of the form.layoutsis a comma-separated list such as1K,1LDK.1LDK+Scounts as1LDK.5Kcovers 5K and 5DK,5LDKcovers 5LDK and larger.walk_minuteskeeps rooms with a station at most that many minutes away on foot.max_age_yearskeeps buildings at most that old.0is new. A building still under construction (under_constructionis true,age_yearsisnull) counts as new.typeismansion,apartorkodate.
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.
Run this endpoint
Endpoint
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.
string
Required
Prefecture slug from autocomplete, for example tokyo, osaka or hokkaido.
tokyo
string
Optional
Municipality code (5 digits), for example 13104 for Shinjuku. Send city or line.
13104
string
Optional
Railway line id, for example 101001 for the Yamanote line. Send city or line.
example
string
Optional
mansion, apart or kodate. Without it all three are searched.
example
integer
Optional
Minimum rent plus management fee per month in yen, in the steps of the CHINTAI form.
10
integer
Optional
Maximum rent plus management fee per month in yen, in the steps of the CHINTAI form.
150000
integer
Optional
Minimum floor area in square metres, in the steps of the form.
10
integer
Optional
Maximum floor area in square metres, in the steps of the form.
10
string
Optional
Comma-separated: 1R, 1K, 1DK, 1LDK, 2K, 2DK, 2LDK, 3K, 3DK, 3LDK, 4K, 4DK, 4LDK, 5K, 5LDK.
1K,1LDK
integer
Optional
At most this many minutes to a station on foot: 1, 3, 5, 7, 10, 15 or 20.
10
integer
Optional
Building age in years at most: 0 (new), 1, 3, 5, 7, 10, 15, 20, 25 or 30.
10
string
Optional
rent_asc (default), rent_desc or area_desc.
rent_asc
integer
Optional
Result page from 1.
1
Request Examples
<?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
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();
}
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));
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);
}
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
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()
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}")
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());
}
}
}
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))
}
#!/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"
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}");
}
}
}
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();
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
{
"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.
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
}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."
}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.