Components
AsanagiIDX
Turnkey RESO Web API MLS syndication engine. Synchronizes MLS listing feeds into AsanagiDB graph storage, caches property media, and exposes high-throughput REST and GraphQL APIs for client applications.
Overview
AsanagiIDX bridges RESO Web API listing data providers to web and mobile real estate applications. Rather than maintaining custom ETL workers and relational SQL schemas, AsanagiIDX ingests listing feeds directly into AsanagiDB property graphs.
RESO Web API Feed โโโบ AsanagiIDX Sync Daemon โโโบ AsanagiDB Engine
โ
REST / GraphQL APIs
โ
โผ
Web & Mobile App Clients Installation & Setup
Install asanagi-idx via Homebrew or using your platform's native installer:
# Install via Homebrew (macOS & Linux)
brew install asanagi-idx
# Start the AsanagiIDX daemon with your config file
asanagi-idx server --config /etc/asanagi/idx.yaml Configuration (idx.yaml)
Create your configuration file at /etc/asanagi/idx.yaml:
# AsanagiIDX Configuration (/etc/asanagi/idx.yaml)
server:
port: 8090
db_path: "/var/lib/_asanagi/asanagi/data"
reso_feed:
url: "https://api.realtor-mls.org/reso/v1"
client_id: "YOUR_RESO_CLIENT_ID"
client_secret: "YOUR_RESO_CLIENT_SECRET"
sync_interval_sec: 300 REST API Endpoints
AsanagiIDX exposes standard HTTP endpoints for property search and listing detail retrieval:
GET /v1/listings Query active MLS listings with filtering (price, beds, baths, city, property type, pagination) GET /v1/listings/:id Fetch detailed property record with graph-linked media, listing agent, and office GET /v1/agents/:id Fetch listing agent profile and active listings GET /v1/offices/:id Fetch brokerage office profile and associated roster/listings GET /v1/search Fuzzy-match keyword search across address, city, agent name, and MLS ID # Example listing query: active 3+ bed homes in Austin under $750k
curl -X GET "http://localhost:8090/v1/listings?city=Austin&minBeds=3&maxPrice=750000" Client Integration
TypeScript / JavaScript Client
import { AsanagiIDXClient } from "@asanasoft/idx-sdk";
const idx = new AsanagiIDXClient({
endpoint: "https://idx.yourdomain.com",
});
// Fetch active residential listings
const { listings, total } = await idx.listings.search({
city: "Austin",
minPrice: 500000,
bedrooms: 3,
limit: 20,
}); Flutter / Dart Client
import 'package:asanagi_idx/asanagi_idx.dart';
final idx = AsanagiIDXClient(baseUrl: 'https://idx.yourdomain.com');
final results = await idx.searchListings(
city: 'Austin',
minPrice: 500000,
bedrooms: 3,
); Licensing
AsanagiIDX requires AsanagiDB. Both components share your single license key issued from Sigil โ no separate registration or secondary license keys are required. Simply run asanagidb activate <LICENSE_KEY> to license both services on your host.