Authentication
Include your API key in theAuthorization header:
Copy
Authorization: Bearer YOUR_API_KEY
JavaScript (fetch)
Copy
const API_BASE = 'https://api.casaai.dev';
const API_KEY = process.env.CASAAI_API_KEY;
async function listProperties() {
const res = await fetch(`${API_BASE}/api/v1/properties`, {
headers: { Authorization: `Bearer ${API_KEY}` }
});
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
return res.json();
}
async function createMaintenance(ticket) {
const res = await fetch(`${API_BASE}/api/v1/maintenance`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${API_KEY}`
},
body: JSON.stringify(ticket)
});
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
return res.json();
}
Python (requests)
Copy
import os, requests
API_BASE = "https://api.casaai.dev"
API_KEY = os.environ["CASAAI_API_KEY"]
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
def run_workflow(payload: dict):
res = requests.post(f"{API_BASE}/api/v1/workflows/run", json=payload, headers=HEADERS, timeout=15)
res.raise_for_status()
return res.json()
def schedule_export(config: dict):
res = requests.post(f"{API_BASE}/api/v1/financial/exports", json=config, headers=HEADERS, timeout=15)
res.raise_for_status()
return res.json()
Example payloads
- Maintenance ticket
- Workflow run
- KPI export
Copy
{
"ticket_id": "mnt_10021",
"unit_id": "unit_7C",
"description": "Water leaking under the kitchen sink",
"photos": ["https://files.casaai.dev/img/leak1.jpg"]
}
Copy
{
"type": "screening",
"payload": {
"tenant_id": "app_78431",
"unit_id": "unit_12A",
"income_docs": ["https://files.casaai.dev/paystub.pdf"]
},
"ruleset": "standard_v1"
}
Copy
{
"destination": "s3",
"bucket": "casaai-finance-exports",
"path": "reports/noi-weekly.csv",
"kpis": ["noi", "occupancy", "delinquency_rate"],
"schedule": "0 7 * * MON"
}
Webhook verification (Node)
verify-signature.js
Copy
import crypto from 'crypto';
function verifySignature(rawBody, signature, secret) {
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
}