{"openapi":"3.1.0","info":{"title":"Proprietio Public API","version":"1.0.0","description":"Secure v1 API for property operations: portfolio data, accounting snapshots, maintenance, messaging and signed webhooks. Authenticate with X-Api-Key issued from Settings > Developer.","contact":{"email":"hello@proprietio.com","url":"https://www.proprietio.com"}},"servers":[{"url":"https://api.proprietio.com"}],"x-supportedScopes":["properties:read","accounting:read","maintenance:read","maintenance:write","comms:write","webhooks:manage"],"x-apiTiers":[{"name":"Core API","availability":"Included on Growth and higher","limits":{"defaultRequestsPerMinute":60},"includes":["Read-only portfolio data","properties:read","accounting:read"]},{"name":"Automation API","availability":"Included on Pro and Scale","limits":{"defaultRequestsPerMinute":120},"includes":["Write endpoints","signed webhooks","maintenance:write","comms:write","webhooks:manage"]},{"name":"Partner API","availability":"Enterprise / partner agreement","limits":{"customRequestsPerMinute":true},"includes":["Sandbox org","custom limits","SLA support","partner review"]}],"x-webhookEvents":["lead.created","ticket.created","payment.received","lease.signed","invoice.paid"],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-Api-Key"}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":8,"maxLength":128},"description":"Recommended for write requests. Reusing the same key with the same method/path/body safely replays the first successful response for 24 hours."}},"schemas":{"Listing":{"type":"object","properties":{"id":{"type":"string","description":"Unit cuid"},"propertyName":{"type":"string"},"addressLine":{"type":"string"},"city":{"type":"string"},"state":{"type":"string","description":"2-letter US state code"},"postalCode":{"type":"string"},"label":{"type":"string","description":"Unit label, e.g. \"Apt 4B\""},"bedrooms":{"type":"integer"},"bathrooms":{"type":"number","format":"float"},"sqft":{"type":"integer","nullable":true},"marketRentCents":{"type":"integer","description":"Listed rent in cents"},"availableFrom":{"type":"string","format":"date-time","nullable":true},"listingTitle":{"type":"string","nullable":true},"listingDesc":{"type":"string","nullable":true},"photos":{"type":"array","items":{"type":"string","format":"uri"}},"amenities":{"type":"array","items":{"type":"string"}}}},"Pagination":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"hasMore":{"type":"boolean"}}},"ApiError":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}}}},"security":[{"ApiKeyAuth":[]}],"paths":{"/api/v1/listings":{"get":{"summary":"List vacant units available to lease","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"city","in":"query","schema":{"type":"string"}},{"name":"state","in":"query","schema":{"type":"string","description":"2-letter US code"}}],"responses":{"200":{"description":"Paginated list of listings","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Listing"}},"pagination":{"type":"object","properties":{"total":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"hasMore":{"type":"boolean"}}}}}}}},"401":{"description":"Missing or invalid API key"},"429":{"description":"Rate limit exceeded"}}}},"/api/v1/properties":{"get":{"summary":"List properties in the authenticated organization","security":[{"ApiKeyAuth":[]}],"x-requiredScope":"properties:read","parameters":[{"name":"city","in":"query","schema":{"type":"string"}},{"name":"state","in":"query","schema":{"type":"string","minLength":2,"maxLength":2}},{"name":"owner","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Paginated property list"},"401":{"description":"Missing or invalid API key"},"403":{"description":"Missing properties:read scope"},"429":{"description":"Rate limit exceeded"}}}},"/api/v1/properties/{id}":{"get":{"summary":"Get one property with units and active leases","security":[{"ApiKeyAuth":[]}],"x-requiredScope":"properties:read","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Property detail"},"404":{"description":"Property not found in this organization"}}}},"/api/v1/residents":{"get":{"summary":"List current residents by property or unit","security":[{"ApiKeyAuth":[]}],"x-requiredScope":"properties:read","parameters":[{"name":"property_id","in":"query","schema":{"type":"string"}},{"name":"unit_id","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Paginated resident list"},"400":{"description":"property_id or unit_id is required"}}}},"/api/v1/rent-roll":{"get":{"summary":"Rent roll snapshot for a property or portfolio","security":[{"ApiKeyAuth":[]}],"x-requiredScope":"accounting:read","parameters":[{"name":"scope_id","in":"query","required":true,"schema":{"type":"string","description":"Property id or portfolio"}},{"name":"as_of_date","in":"query","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Rent roll snapshot"},"403":{"description":"Missing accounting:read scope"}}}},"/api/v1/invoices":{"get":{"summary":"List recent invoices","security":[{"ApiKeyAuth":[]}],"x-requiredScope":"accounting:read","parameters":[{"name":"status","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Paginated invoice list"}}}},"/api/v1/payments":{"get":{"summary":"List recent payments","security":[{"ApiKeyAuth":[]}],"x-requiredScope":"accounting:read","parameters":[{"name":"status","in":"query","schema":{"type":"string","default":"PAID"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Paginated payment list"}}}},"/api/v1/work-orders":{"get":{"summary":"List work orders","security":[{"ApiKeyAuth":[]}],"x-requiredScope":"maintenance:read","responses":{"200":{"description":"Paginated work order list"}}},"post":{"summary":"Create a work order","security":[{"ApiKeyAuth":[]}],"x-requiredScope":"maintenance:write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"201":{"description":"Created work order"},"403":{"description":"Missing maintenance:write scope"}}}},"/api/v1/messages":{"post":{"summary":"Send a resident message","security":[{"ApiKeyAuth":[]}],"x-requiredScope":"comms:write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"201":{"description":"Message sent"},"501":{"description":"Vendor messaging is not yet supported"}}}},"/api/v1/webhooks":{"get":{"summary":"List webhook subscriptions","security":[{"ApiKeyAuth":[]}],"x-requiredScope":"webhooks:manage","responses":{"200":{"description":"Webhook subscriptions"}}},"post":{"summary":"Create a signed webhook subscription","security":[{"ApiKeyAuth":[]}],"x-requiredScope":"webhooks:manage","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["event","target_url"],"properties":{"event":{"type":"string","enum":["lead.created","ticket.created","payment.received","lease.signed","invoice.paid"]},"target_url":{"type":"string","format":"uri","description":"HTTPS in production"}}}}}},"responses":{"201":{"description":"Subscription created; secret returned once"}}}},"/api/v1/webhooks/{id}":{"delete":{"summary":"Delete a webhook subscription","security":[{"ApiKeyAuth":[]}],"x-requiredScope":"webhooks:manage","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Subscription deleted"},"404":{"description":"Subscription not found"}}}}}}