API reference
The PropSocket REST API lives under /v1/. Reads are synchronous list + retrieve across four entities; writes are asynchronous write-back — a create or update returns anOperation you poll until it's applied. Bearer auth, offset pagination, filtering, sorting, andRFC 7807 errors throughout.
The basics
- Base URL.
https://api.propsocket.io/v1— the same host for live and test mode; the key prefix selects the mode. - Auth.
Authorization: Bearer ps_live_…— see authentication. - Pagination. Offset-based, default
limit=25, max100— see pagination. - Filtering & sorting. Per-entity filters;
?order-by=field:asc|desc— see filtering. - Errors.
application/problem+jsonwith arequest_id— see errors.
Entities
Each entity supports GET /v1/{entity}/ (list) and GET /v1/{entity}/{id} (retrieve):
LeaseResident is a relation, not an endpoint — there's no/v1/lease-residents. You read it as the nested residents array on a Lease (shown below). See the CDM overview for the relationship.
Writes don't have their own per-entity pages — every entity's create/update flow works the same way. See the Operations reference for the async write-back lifecycle, polling, and idempotency.
What a response looks like
Money is integer minor units plus a currency, datetimes are UTC ISO 8601, andx_id is the native PMS identifier — the conventions from theCDM overview hold on every response.
List response
List endpoints return the standard pagination envelope, with the full entity in each result:
{
"meta": {
"limit": 25,
"offset": 0,
"hasMore": true
},
"results": [
{
"id": "prp_01HX0G5T8N3KEWBYV2QMR4DCFA",
"x_id": "entrata-property-3391",
"organization_id": "b3f1c2d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"integration_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Maple Court Apartments",
"type": "apartment",
"status": "active",
"custom_data": {},
"created_at": "2026-05-01T09:12:44Z",
"updated_at": "2026-05-11T18:04:58Z"
}
]
}A full Property
Retrieving one record returns the full entity:
{
"id": "prp_01HX0G5T8N3KEWBYV2QMR4DCFA",
"x_id": "entrata-property-3391",
"organization_id": "b3f1c2d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"integration_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Maple Court Apartments",
"type": "apartment",
"status": "active",
"address": {
"line_1": "1400 Maple Court",
"line_2": null,
"city": "Austin",
"state": "TX",
"postal_code": "78704",
"country": "US"
},
"description": "Garden-style community near South Lamar.",
"year_built": 2014,
"total_units": 188,
"total_buildings": 6,
"total_floors": 3,
"website_url": "https://maplecourt.example.com",
"email": "leasing@maplecourt.example.com",
"phones": [
{
"type": "work",
"number": "+15125550133",
"primary": true
}
],
"latitude": 30.2451,
"longitude": -97.7689,
"management_company_name": "Lamar Residential",
"pet_policy": "restricted",
"smoking_policy": "not_allowed",
"media": [],
"custom_data": {},
"created_at": "2026-05-01T09:12:44Z",
"updated_at": "2026-05-11T18:04:58Z",
"deleted_at": null
}A full Lease
Leases expose two things worth seeing in full: Money fields (rent_amount, security_deposit, balance) and the nestedresidents array — the LeaseResident relation, with each resident'srole on this lease.
{
"id": "lse_01HX9P3K2N7QZRWY4B8MJ5VCDF",
"x_id": "entrata-lease-8847291",
"organization_id": "b3f1c2d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"integration_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"property_id": "prp_01HX0G5T8N3KEWBYV2QMR4DCFA",
"unit_id": "unt_01HX1H6V9P4MFXCZW3RNS5EDGB",
"resident_ids": [
"res_01HX2J7V0Q5MGYDAW4SPT6FEHC",
"res_01HX2K8W1R6NHZEBX5TPV7GFJD"
],
"status": "active",
"type": "fixed",
"start_date": "2026-06-01",
"end_date": "2027-05-31",
"move_in_date": "2026-06-01",
"notice_date": null,
"rent_amount": {
"amount": 272500,
"currency": "USD"
},
"security_deposit": {
"amount": 285000,
"currency": "USD"
},
"balance": {
"amount": 0,
"currency": "USD"
},
"term_months": 12,
"renewal_status": "not_started",
"signed_date": "2026-05-11",
"is_renewal": false,
"previous_lease_id": null,
"residents": [
{
"resident_id": "res_01HX2J7V0Q5MGYDAW4SPT6FEHC",
"x_id": "entrata-resident-44218",
"role": "primary"
},
{
"resident_id": "res_01HX2K8W1R6NHZEBX5TPV7GFJD",
"x_id": "entrata-resident-44219",
"role": "responsible"
}
],
"custom_data": {},
"created_at": "2026-05-11T17:41:52Z",
"updated_at": "2026-05-11T17:41:52Z",
"deleted_at": null
}A soft-deleted record
Records removed from the source PMS aren't deleted — they get a non-null deleted_at. List endpoints hide them by default; pass ?include_deleted=true to see them:
{
"id": "lse_01HX9P3K2N7QZRWY4B8MJ5VCDF",
"x_id": "entrata-lease-8847291",
"organization_id": "b3f1c2d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"integration_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"property_id": "prp_01HX0G5T8N3KEWBYV2QMR4DCFA",
"unit_id": "unt_01HX1H6V9P4MFXCZW3RNS5EDGB",
"resident_ids": [],
"status": "terminated",
"type": "fixed",
"start_date": "2026-06-01",
"end_date": "2027-05-31",
"move_in_date": "2026-06-01",
"notice_date": "2026-08-15",
"rent_amount": {
"amount": 272500,
"currency": "USD"
},
"security_deposit": {
"amount": 285000,
"currency": "USD"
},
"balance": {
"amount": 0,
"currency": "USD"
},
"term_months": 12,
"renewal_status": "not_started",
"signed_date": "2026-05-11",
"is_renewal": false,
"previous_lease_id": null,
"residents": [],
"custom_data": {},
"created_at": "2026-05-11T17:41:52Z",
"updated_at": "2026-09-02T11:08:33Z",
"deleted_at": "2026-09-02T11:08:33Z"
}Next
Make your first call in the quickstart, or learn the entity shapes in depth in the Common Data Model overview.