Developer Documentation
Integrate SIFTPROP's property report generation into your applications with our REST API.
Authentication
All API requests require authentication using an API key:
Authorization: Bearer YOUR_API_KEYGet your API key from the Agency Dashboard.
Property API (v1)
/api/v1/property?postcode=B14+7TQSearch properties by postcode or address
Query Parameters
postcode— UK postcode to searchaddress— Full or partial address searchResponse
success— booleandata— Array of property objects with EPC datameta— Tier and rate limit infoExample
Request
curl -X GET "https://siftprop.com/api/v1/property?postcode=B14+7TQ" \ -H "X-API-Key: sk_live_xxxx"
Response
{
"success": true,
"data": {
"properties": [
{
"address": "123 High Street, Birmingham",
"postcode": "B14 7TQ",
"currentRating": "B",
"potentialRating": "A",
"bedrooms": 3,
"floorArea": 85
}
]
},
"meta": { "tier": "startup", "requests_remaining": 9995 }
}/api/v1/property/:id/historyGet sold price history for a property
Response
success— booleanproperty_id— Property identifierhistory— Array of {date, price, type} objectsExample
Request
curl -X GET "https://siftprop.com/api/v1/property/lmk_123456/history" \ -H "X-API-Key: sk_live_xxxx"
Response
{
"success": true,
"property_id": "lmk_123456",
"history": [
{"date": "2025-12-15", "price": 285000, "type": "Semi-Detached"},
{"date": "2025-09-10", "price": 270000, "type": "Semi-Detached"},
{"date": "2024-06-22", "price": 250000, "type": "Semi-Detached"}
]
}/api/v1/market/:postcodeGet market trends for a postcode area
Response
success— booleanpostcode— Input postcodemarket_trends— Average price, price changes, transactions, days on marketprice_segments— Price breakdown by property typeExample
Request
curl -X GET "https://siftprop.com/api/v1/market/B14" \ -H "X-API-Key: sk_live_xxxx"
Response
{
"success": true,
"postcode": "B14",
"market_trends": {
"avg_price": 325000,
"price_change_12m": 4.2,
"transactions_12m": 142,
"avg_days_on_market": 34
}
}/api/v1/reports/generateGenerate a property report (async)
Request Body
address— Property addresspostcode— UK postcodeinclude_epc— Include EPC data (boolean)include_market_analysis— Include market analysis (boolean)Response
success— booleanreport_id— Unique report identifierstatus— processing/completed/failedcheck_status_url— URL to check statusExample
Request
curl -X POST "https://siftprop.com/api/v1/reports/generate" \
-H "X-API-Key: sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{"address": "123 High Street", "postcode": "B14 7TQ"}'Response
{
"success": true,
"report_id": "rpt_abc123",
"status": "processing",
"check_status_url": "/api/v1/reports/rpt_abc123/status"
}/api/v1/reports/:id/statusCheck report generation status
Response
success— booleanreport_id— Report identifierstatus— processing | completed | faileddownload_url— PDF download URL when completedExample
Request
curl -X GET "https://siftprop.com/api/v1/reports/rpt_abc123/status" \ -H "X-API-Key: sk_live_xxxx"
Response
/api/v1/keysList your API keys
Response
success— booleankeys— Array of API key objects with usage stats/api/v1/keysCreate a new API key
Request Body
name— Name for the keytier— free | startup | growth | enterpriseExample
Request
curl -X POST "https://siftprop.com/api/v1/keys" \
-H "X-API-Key: sk_live_xxxx" \
-d '{"name": "My App", "tier": "startup"}'Response
{
"success": true,
"key": {
"id": "key_123",
"name": "My App",
"key": "sk_live_xxxxxxxxxxxxx",
"tier": "startup",
"requests_limit": 10000
}
}/api/v1/webhooksSubscribe to webhooks (startup tier+)
Request Body
url— Webhook endpoint URLevents— Array of events: report.complete, price.change, epc.updateExample
Request
curl -X POST "https://siftprop.com/api/v1/webhooks" \
-H "X-API-Key: sk_live_xxxx" \
-d '{"url": "https://yourapp.com/webhook", "events": ["report.complete"]}'Response
{
"success": true,
"webhook": {
"id": "wh_123",
"url": "https://yourapp.com/webhook",
"secret": "whsec_xxxx"
}
}Bulk Reports
/api/bulk-reportsCreate a new bulk report generation job
Request Body
properties— Array of { address, postcode } objectsbranding— Optional branding configuration objectResponse
success— booleanjobId— stringtotalProperties— numberestimatedCompletionMinutes— numberExample
Request
curl -X POST https://siftprop.com/api/bulk-reports \
-H "Content-Type: application/json" \
-d '{"properties": [{"address": "123 High Street", "postcode": "SW1A 1AA"}]}'Response
{
"success": true,
"jobId": "abc-123-def",
"totalProperties": 1,
"estimatedCompletionMinutes": 2
}/api/bulk-reportsList all bulk report jobs for the authenticated user
Query Parameters
status— Filter by status: pending, processing, completed, failedResponse
success— booleanjobs— Array of job objectsExample
Request
curl -X GET "https://siftprop.com/api/bulk-reports?status=completed" \ -H "Authorization: Bearer YOUR_API_KEY"
Response
{
"success": true,
"jobs": [
{
"id": "abc-123-def",
"status": "completed",
"totalProperties": 50,
"processedProperties": 50,
"failedProperties": 0,
"createdAt": "2026-03-22T10:00:00Z",
"completedAt": "2026-03-22T10:15:00Z",
"downloadUrl": "/api/bulk-reports/abc-123-def/download"
}
]
}/api/bulk-reports/:id/statusGet status of a specific bulk report job
Response
success— booleanjob— Job object with progress detailsExample
Request
curl -X GET https://siftprop.com/api/bulk-reports/abc-123-def/status
Response
{
"success": true,
"job": {
"id": "abc-123-def",
"status": "processing",
"totalProperties": 50,
"processedProperties": 25,
"failedProperties": 1,
"progress": 50
}
}/api/bulk-reports/:id/downloadDownload completed reports as ZIP file
Response
Example
Request
curl -o reports.zip https://siftprop.com/api/bulk-reports/abc-123-def/download
Response
White-Label Branding
/api/brandingGet current branding settings
Response
success— booleanbranding— Branding configuration objectExample
Request
curl -X GET https://siftprop.com/api/branding
Response
{
"success": true,
"branding": {
"logoUrl": "https://example.com/logo.png",
"primaryColor": "#1E40AF",
"secondaryColor": "#3B82F6",
"companyName": "Acme Properties",
"contactEmail": "info@acme.co.uk",
"contactPhone": "+44 20 1234 5678",
"showWatermark": true
}
}/api/brandingUpdate branding settings
Request Body
logoUrl— URL to company logo (optional)primaryColor— Primary brand color (hex)secondaryColor— Secondary brand color (hex)companyName— Company name (optional)contactEmail— Contact email (optional)contactPhone— Contact phone (optional)showWatermark— Show SIFTPROP watermark (boolean)Response
success— booleanExample
Request
curl -X POST https://siftprop.com/api/branding \
-H "Content-Type: application/json" \
-d '{
"logoUrl": "https://example.com/logo.png",
"primaryColor": "#1E40AF",
"companyName": "Acme Properties",
"contactEmail": "info@acme.co.uk",
"showWatermark": false
}'Response
{
"success": true
}Code Examples
Python
import requests
# Create bulk job
response = requests.post(
"https://siftprop.com/api/bulk-reports",
json={
"properties": [
{"address": "123 High Street", "postcode": "SW1A 1AA"},
{"address": "45 Park Lane", "postcode": "W1K 1PN"}
]
},
headers={"Authorization": "Bearer YOUR_API_KEY"}
)
job = response.json()
print(f"Job ID: {job['jobId']}")
# Check status
status_response = requests.get(
f"https://siftprop.com/api/bulk-reports/{job['jobId']}/status",
headers={"Authorization": "Bearer YOUR_API_KEY"}
)
print(status_response.json())Node.js
const fetch = require('node-fetch');
async function createBulkJob() {
const response = await fetch('https://siftprop.com/api/bulk-reports', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
properties: [
{ address: '123 High Street', postcode: 'SW1A 1AA' },
{ address: '45 Park Lane', postcode: 'W1K 1PN' }
]
})
});
const job = await response.json();
console.log('Job ID:', job.jobId);
}
async function checkStatus(jobId) {
const response = await fetch(
`https://siftprop.com/api/bulk-reports/${jobId}/status`,
{ headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
);
const status = await response.json();
console.log(status);
}API Pricing Tiers
Startup
£49/mo
- ✓ 10,000 API calls/day
- ✓ Property search
- ✓ Market trends
- ✓ 5 webhooks
- ✓ Report generation
Enterprise
£499/mo
- ✓ Unlimited API calls
- ✓ Unlimited webhooks
- ✓ Custom data feeds
- ✓ Dedicated support
- ✓ SLA guarantee
Postman Collection
Import our API collection into Postman for easy testing and exploration.