Skip to main content

RESI API Reference

Access decentralized property valuations programmatically.

Under Development

The RESI API is currently under development. Documentation reflects planned functionality.

API overview

The RESI API provides access to property price predictions from winning models, historical validation datasets, model performance metrics, and execution provenance.

REST API

Standard HTTP endpoints for property valuations and data access.

Base URL

https://api.resi.ai/v1

Get property valuation

Request a price prediction for a specific property.

POST /inference

Request body:

{
"property_data_hash": "ipfs://Qm...",
"request_date": "2024-11-21"
}

Response:

{
"predicted_price": 450000,
"prediction_date": "2024-11-21T14:30:00Z",
"model_id": "model_abc123",
"model_accuracy": {
"r_squared": 0.89,
"last_14_days": [
{"date": "2024-11-20", "r_squared": 0.88},
{"date": "2024-11-19", "r_squared": 0.90}
]
},
"execution_proof": "0x..."
}

Batch property valuation

Request valuations for multiple properties.

POST /inference/batch

Request body:

{
"properties": [
{
"property_data_hash": "ipfs://Qm...",
"request_date": "2024-11-21"
},
{
"property_data_hash": "ipfs://Qm...",
"request_date": "2024-11-21"
}
]
}

Response: Array of individual valuation responses.

Get validation datasets

Retrieve validation datasets used for model benchmarking.

Latest dataset:

GET /validation-set/latest

Historical dataset:

GET /validation-set/historic?date=2024-11-15

Response:

{
"date": "2024-11-21",
"property_count": 1247,
"data_url": "https://data.resi.ai/validation/2024-11-21.json",
"hash": "0x..."
}

Property data format

Properties are referenced by IPFS hash pointing to standardized JSON.

Standard property fields:

{
"address": {
"street": "123 Main St",
"city": "San Francisco",
"state": "CA",
"zip": "94102",
"latitude": 37.7749,
"longitude": -122.4194
},
"characteristics": {
"square_feet": 2000,
"bedrooms": 3,
"bathrooms": 2,
"lot_size": 5000,
"year_built": 1950,
"property_type": "single_family",
"stories": 2
},
"features": {
"garage": true,
"pool": false,
"updated_kitchen": true
}
}

Required fields: Address, square footage, bedrooms, bathrooms.

Optional fields: Models handle missing data appropriately.

Error handling

Standard HTTP status codes: 200 (success), 400 (invalid request), 404 (not found), 429 (rate limit exceeded), 500 (server error).

Error response:

{
"error": "Invalid property data format",
"code": "INVALID_FORMAT",
"details": "Missing required field: square_feet"
}

WebSocket API

Real-time streaming of validation results and model updates.

Connection

wss://api.resi.ai/v1/stream

Validation results stream

Subscribe to real-time validation results as they complete.

Subscribe message:

{
"action": "subscribe",
"stream": "validation_results"
}

Stream messages:

{
"event": "validation_complete",
"date": "2024-11-21",
"results": [
{
"model_id": "model_abc123",
"r_squared": 0.89,
"rank": 1
}
]
}

Model updates stream

Subscribe to new model submissions and status changes.

Subscribe message:

{
"action": "subscribe",
"stream": "model_updates"
}

Stream messages:

{
"event": "model_submitted",
"model_id": "model_new456",
"submission_time": "2024-11-21T10:00:00Z",
"miner_uid": 42
}

Price updates stream

Subscribe to winning model changes that affect API pricing.

Subscribe message:

{
"action": "subscribe",
"stream": "price_updates"
}

Stream messages:

{
"event": "model_changed",
"previous_model": "model_abc123",
"new_model": "model_xyz789",
"effective_time": "2024-11-21T14:00:00Z"
}

Oracle integration

Bring RESI property valuations on-chain through oracle networks.

Integration pattern

Step 1: Smart contract requests valuation with property data hash and request date.

Step 2: Oracle calls RESI REST API with property data hash.

Step 3: RESI returns prediction with predicted price, model ID, accuracy history, and execution proof.

Step 4: Oracle delivers data on-chain with signature verification.

Supported oracle networks

Oracle networks can integrate RESI including Chainlink, Redstone, API3, and other compatible networks.

Data format on-chain

Valuation struct example:

struct PropertyValuation {
uint256 predictedPrice;
uint256 predictionTimestamp;
bytes32 modelId;
uint16 modelAccuracy;
bytes32 executionProof;
}

Example: RWA lending

function requestLoan(bytes32 propertyHash) external {
bytes32 requestId = oracle.requestPropertyValuation(
propertyHash,
block.timestamp
);
pendingRequests[requestId] = msg.sender;
}

function fulfillLoan(
bytes32 requestId,
PropertyValuation memory valuation
) internal {
require(valuation.modelAccuracy > 8500, "Accuracy too low");
uint256 loanAmount = valuation.predictedPrice * 70 / 100;
}

Security considerations

Model provenance: Verify model ID matches expected winning model.

Accuracy history: Check historical performance before trusting valuation.

Execution proof: Verify cryptographic proof when available.

Data standardization: Ensure property data follows RESI format exactly.

SDKs and tools

Python SDK

pip install resi-sdk

Example usage:

from resi import ResiClient

client = ResiClient(api_key="your_key")

valuation = client.predict_price(
property_data_hash="ipfs://Qm...",
request_date="2024-11-21"
)

print(f"Predicted price: ${valuation.predicted_price}")
print(f"Model accuracy: {valuation.model_accuracy.r_squared}")

JavaScript SDK

npm install @resi/sdk

Example usage:

import { ResiClient } from '@resi/sdk';

const client = new ResiClient({ apiKey: 'your_key' });

const valuation = await client.predictPrice({
propertyDataHash: 'ipfs://Qm...',
requestDate: '2024-11-21'
});

console.log(`Predicted price: $${valuation.predictedPrice}`);

WebSocket streaming

const stream = client.stream('validation_results');

stream.on('validation_complete', (data) => {
console.log('New validation results:', data);
});

Helper tools

Data formatter: Convert property data from various sources (Zillow, Redfin, manual input) to RESI standard format.

resi-format --source zillow --input properties.csv --output formatted.json

IPFS uploader: Upload formatted property data to IPFS for on-chain references.

resi-upload --input formatted.json --output hashes.txt

Batch processor: Process multiple property valuations efficiently.

from resi import BatchProcessor

processor = BatchProcessor(api_key="your_key")
results = processor.process_file("properties.json")

Solidity contracts

Example smart contracts for oracle integration available at:

git clone https://github.com/resi-labs-ai/resi-contracts

Testing tools

Sandbox environment: Test API integration without rate limits.

https://sandbox.api.resi.ai/v1

Mock data generator: Generate sample property data for testing.

resi-mock-data --count 100 --output test-properties.json

Authentication and rate limits

Authentication details and rate limit policies will be established as API launches.

Support