Propertyware Units API
Resources providing access to units.
Resources providing access to units.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/propertyware-units-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
description: "\uFEFF\n\n# Introduction\n\nWelcome to Propertyware’s API—a powerful, RESTful programming interface that lets you leverage valuable Propertyware data."
version: '1.0'
title: Open API, powered by Propertyware Units API
contact:
name: Propertyware
email: support@propertyware.com
x-logo:
url: logo.png
backgroundColor: '#fff'
altText: Propertyware, A RealPage Company
href: https://www.propertyware.com
servers:
- url: https://api.propertyware.com/pw/api/rest/v1
security:
- clientId: []
- clientSecret: []
- organizationId: []
tags:
- name: Units
description: Resources providing access to units.
paths:
/units:
get:
tags:
- Units
summary: Retrieve all units
description: 'Retrieves a list of units.
Required permission:
UNITS - Read
Sortable by: createddate, idnumber, name, abbreviation, lastmodifieddatetime, id'
operationId: getUnits
parameters:
- name: offset
in: query
description: '`offset` indicates the position of the first record to return. The offset is zero-based and the default is 0.'
required: false
schema:
type: integer
format: int32
- name: limit
in: query
description: '`limit` indicates the maximum number of results to be returned in the response. `limit` can range between 1 and 500 and the default is 100.'
required: false
schema:
type: integer
format: int32
default: 100
- name: lastModifiedDateTimeStart
in: query
description: 'Filters results to any item modified on or after the date time specified. '
required: false
schema:
type: string
format: date-time
- name: lastModifiedDateTimeEnd
in: query
description: 'Filters results to any item modified on or prior to the date time specified. '
required: false
schema:
type: string
format: date-time
- name: orderby
in: query
description: Indicates the field(s) and direction to sort the results in the response.
required: false
schema:
type: string
- name: vacant
in: query
description: Filters results by the unit's vacancy status. If no value is specified, units with any status will be returned.
required: false
schema:
type: boolean
- name: publishedForRent
in: query
description: Filters results by the unit's "published for rent" status. If no value is specified, units with any status will be returned.
required: false
schema:
type: boolean
- name: portfolioID
in: query
description: Filters results to units associated with a specific portfolio.
required: false
schema:
type: integer
format: int64
- name: buildingID
in: query
description: Filters results to units associated with a specific building.
required: false
schema:
type: integer
format: int64
- name: type
in: query
description: Filters results to units with a specific type.
required: false
schema:
type: string
- name: includeDeactivated
in: query
description: Include inactive units in the results.
required: false
schema:
type: boolean
- name: includeCustomFields
in: query
description: includeCustomFields
required: false
schema:
type: boolean
default: false
responses:
'200':
description: OK
headers:
X-Total-Count:
description: The total resultset count
schema:
type: integer
format: int64
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Unit'
'400':
description: Unable to process the request due to malformed request syntax or invalid parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: The API key couldn't be authorized.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: The supplied credentials don't have permissions to access the resources.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
post:
tags:
- Units
summary: Create a unit
description: 'Creates a unit.
Required permission:
UNITS - Write'
operationId: createUnit
requestBody:
$ref: '#/components/requestBodies/SaveUnit'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/Unit'
'400':
description: Unable to process the request due to malformed request syntax or invalid parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: The API key couldn't be authorized.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: The supplied credentials don't have permissions to access the resources.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/units/bulk:
post:
tags:
- Units
summary: Create units in bulk
description: 'Creates units in bulk.
Required permission:
BUILDINGS - Write'
operationId: createUnits
requestBody:
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SaveUnit'
description: saveUnit
required: true
responses:
'201':
description: Created
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/RESTAPIBulkSuccessResponse'
'400':
description: Unable to process the request due to malformed request syntax or invalid parameters.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/RESTAPIBulkErrorResponse'
'401':
description: The API key couldn't be authorized.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: The supplied credentials don't have permissions to access the resources.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/units/customfields:
put:
tags:
- Units
summary: Update a unit custom fields (BETA)
description: 'Note: Write access is only available to customers who have opted in to our beta program. Please reach out to support if you''d like to be included.
Updates an existing unit custom fields
Required permission:
UNITS - Write'
operationId: updateUnit
requestBody:
$ref: '#/components/requestBodies/SaveCustomField'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEntity'
'400':
description: Unable to process the request due to malformed request syntax or invalid parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: The API key couldn't be authorized.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: The supplied credentials don't have permissions to access the resources.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Entity not found.
/units/{unitID}:
get:
tags:
- Units
summary: Retrieve a unit
description: 'Retrieves a specific unit.
Required permission:
UNITS - Read'
operationId: getUnit
parameters:
- name: unitID
in: path
description: Unit ID
required: true
schema:
type: integer
format: int64
- name: includeCustomFields
in: query
description: includeCustomFields
required: false
schema:
type: boolean
default: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Unit'
'400':
description: Unable to process the request due to malformed request syntax or invalid parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: The API key couldn't be authorized.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: The supplied credentials don't have permissions to access the resources.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Entity not found.
put:
tags:
- Units
summary: Update a unit
description: 'Update as unit.
Required permission:
UNITS - Write'
operationId: updateUnitUsingPUT_1
parameters:
- name: unitID
in: path
description: Unit ID
required: true
schema:
type: integer
format: int64
requestBody:
$ref: '#/components/requestBodies/SaveUnit'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Unit'
'400':
description: Unable to process the request due to malformed request syntax or invalid parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: The API key couldn't be authorized.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: The supplied credentials don't have permissions to access the resources.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Entity not found.
delete:
tags:
- Units
summary: Delete a unit (BETA)
description: 'Note: Write access is only available to customers who have opted in to our beta program. Please reach out to support if you''d like to be included.
Deletes a specific unit.
Required permission:
UNITS - Delete'
operationId: deleteUnit
parameters:
- name: unitID
in: path
description: Unit ID
required: true
schema:
type: integer
format: int64
responses:
'204':
description: No Content
content:
'*/*':
schema:
$ref: '#/components/schemas/ResponseEntity'
'400':
description: Unable to process the request due to malformed request syntax or invalid parameters.
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: The API key couldn't be authorized.
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: The supplied credentials don't have permissions to access the resources.
content:
'*/*':
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Entity not found.
/units/{unitID}/conversations:
get:
tags:
- Units
summary: Retrieve all unit conversations
description: 'Retrieves all the conversations of a unit.
Required permission:
UNITS - Read
Sortable by: createddate, lastmodifieddatetime, id'
operationId: getUnitConversations
parameters:
- name: unitID
in: path
description: Unit ID
required: true
schema:
type: integer
format: int64
- name: offset
in: query
description: '`offset` indicates the position of the first record to return. The offset is zero-based and the default is 0.'
required: false
schema:
type: integer
format: int32
- name: limit
in: query
description: '`limit` indicates the maximum number of results to be returned in the response. `limit` can range between 1 and 500 and the default is 100.'
required: false
schema:
type: integer
format: int32
default: 100
- name: lastModifiedDateTimeStart
in: query
description: 'Filters results to any item modified on or after the date time specified. '
required: false
schema:
type: string
format: date-time
- name: lastModifiedDateTimeEnd
in: query
description: 'Filters results to any item modified on or prior to the date time specified. '
required: false
schema:
type: string
format: date-time
- name: orderby
in: query
description: Indicates the field(s) and direction to sort the results in the response.
required: false
schema:
type: string
- name: type
in: query
description: Filters results by the conversation type.
required: false
schema:
type: string
enum:
- MANAGEMENT_TEAM
- OWNER
- TENANT
responses:
'200':
description: OK
headers:
X-Total-Count:
description: The total resultset count
schema:
type: integer
format: int64
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Conversation'
'400':
description: Unable to process the request due to malformed request syntax or invalid parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: The API key couldn't be authorized.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: The supplied credentials don't have permissions to access the resources.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Entity not found.
/units/{unitID}/conversations/{conversationID}:
get:
tags:
- Units
summary: Retrieve a unit conversation
description: 'Retrieves a specific unit conversation.
Required permission:
UNITS - Read'
operationId: getUnitConversation
parameters:
- name: unitID
in: path
description: Unit ID
required: true
schema:
type: integer
format: int64
- name: conversationID
in: path
description: Conversation ID
required: true
schema:
type: integer
format: int64
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Conversation'
'400':
description: Unable to process the request due to malformed request syntax or invalid parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: The API key couldn't be authorized.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: The supplied credentials don't have permissions to access the resources.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Entity not found.
delete:
tags:
- Units
summary: Delete a unit conversation (BETA)
description: 'Note: Write access is only available to customers who have opted in to our beta program. Please reach out to support if you''d like to be included.
Deletes a specific unit conversation.
Required permission:
UNITS - Delete'
operationId: deleteUnitConversation
parameters:
- name: unitID
in: path
description: Unit ID
required: true
schema:
type: integer
format: int64
- name: conversationID
in: path
description: Conversation ID
required: true
schema:
type: integer
format: int64
responses:
'204':
description: No Content
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEntity'
'400':
description: Unable to process the request due to malformed request syntax or invalid parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: The API key couldn't be authorized.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: The supplied credentials don't have permissions to access the resources.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Entity not found.
/units/{unitID}/customFields:
get:
tags:
- Units
summary: Retrieve all unit custom fields
description: 'Retrieves all the custom fields of a unit.
Required permission:
UNITS - Read'
operationId: getLeaseCustomFieldsUsingGET_1
parameters:
- name: unitID
in: path
description: Unit ID
required: true
schema:
type: integer
format: int64
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Unit'
'400':
description: Unable to process the request due to malformed request syntax or invalid parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: The API key couldn't be authorized.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: The supplied credentials don't have permissions to access the resources.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Entity not found.
components:
schemas:
SaveCustomField:
type: object
required:
- entityId
- fieldSet
properties:
entityId:
type: integer
format: int64
description: Unique identifier of an entity custom field associated to.
fieldSet:
type: array
description: List of Custom fields to update
items:
$ref: '#/components/schemas/CustomFieldSet'
description: Custom field for Request
ManagementFee:
type: object
properties:
accountCode:
type: string
description: Management fee account code.
accountNumber:
type: string
description: Management fee account number.
id:
type: integer
format: int64
description: Unique identifier.
manager:
type: string
description: Property manager name.
managersCommissionPercentage:
type: number
format: double
description: Property manager commission percentage.
passThrough:
type: boolean
example: false
description: Indicates if the commission account is of the passthrough type.
percentage:
type: number
format: double
description: Management fee percentage.
description: Management Fee
Address:
type: object
properties:
address:
type: string
description: Primary street and/or unit address.
addressCont:
type: string
description: Address continuation.
city:
type: string
description: City.
country:
type: string
description: Country.
postalCode:
type: string
description: Postal code.
stateRegion:
type: string
description: State/region.
description: Address
CustomFieldSet:
type: object
required:
- name
- value
properties:
name:
type: string
description: Custom Field name
value:
type: string
description: Custom Field value
description: Custom field set for Request
Amenity:
type: object
properties:
code:
type: string
description: Amenity code.
id:
type: integer
format: int64
description: Unique identifier.
name:
type: string
description: Amenity name.
type:
type: string
description: Amenity type.
description: Amenity
Conversation:
type: object
properties:
comments:
type: array
description: List of comments in the conversation.
items:
$ref: '#/components/schemas/Comment'
createdBy:
type: string
description: User who created the record.
createdDateTime:
type: string
format: date-time
description: 'Date and time the record was created. (Timezone: UTC)'
entityID:
type: integer
format: int64
description: Id of the entity related to this conversation.
entityType:
type: string
description: Type of the entity related to this conversation.
id:
type: integer
format: int64
description: Unique identifier.
lastModifiedBy:
type: string
description: User who last modified the record.
lastModifiedDateTime:
type: string
format: date-time
description: 'Date and time the record was last modified. (Timezone: UTC)'
subject:
type: string
description: Conversation subject.
type:
type: string
description: Conversation type.
enum:
- MANAGEMENT_TEAM
- OWNER
- TENANT
description: Conversation
RESTAPIError:
type: object
properties:
key:
type: string
message:
type: string
ManagementSettings:
type: object
properties:
managementContractEndDate:
type: string
format: date
description: End date of the property contract.
managementContractStartDate:
type: string
format: date
description: Start date of the property contract.
managementFeeType:
type: string
description: 'Indicates the type of management fee. This field is deprecated and should not be used. Instead, use the new field ''managementFeesType''. '
managementFees:
type: array
description: List of property management fee rules.
items:
$ref: '#/components/schemas/ManagementFee'
managementFeesType:
type: string
description: Indicates the type of management fee.
enum:
- MANAGE_FEE_NONE
- MANAGE_FEE_GREATER_OF_FLAT_OR_PERCENTAGE
- MANAGE_FEE_FLAT_PLUS_PERCENTAGE
managementFlatFee:
type: number
format: double
description: Flat management fee amount.
description: Property management information
ErrorResponse:
type: object
properties:
errorCode:
type: string
errors:
type: array
items:
$ref: '#/components/schemas/RESTAPIError'
userMessage:
type: string
ResponseEntity:
type: object
properties:
body:
type: object
statusCode:
type: string
enum:
- '100'
- '101'
- '102'
- '103'
- '200'
- '201'
- '202'
- '203'
- '204'
- '205'
- '206'
- '207'
- '208'
- '226'
- '300'
- '301'
- '302'
- '303'
- '304'
- '305'
- '307'
- '308'
- '400'
- '401'
- '402'
- '403'
- '404'
- '405'
- '406'
- '407'
- '408'
- '409'
- '410'
- '411'
- '412'
- '413'
- '414'
- '415'
- '416'
- '417'
- '418'
- '419'
- '420'
- '421'
- '422'
- '423'
- '424'
- '426'
- '428'
- '429'
- '431'
- '500'
- '501'
- '502'
- '503'
- '504'
- '505'
- '506'
- '507'
- '508'
- '509'
- '510'
- '511'
SaveUnit:
type: object
required:
- abbreviation
- buildingID
- category
- name
- portfolioID
- type
properties:
abbreviation:
type: string
description: Abbreviation of Unit.
minLength: 1
maxLength: 12
address:
$ref: '#/components/schemas/SaveAddress'
availableDate:
type: string
format: date
description: Unit Available date to lease.
buildingID:
type: integer
format: int64
description: Id of the building associated with this unit.
category:
type: string
description: Unit Category.
enum:
- RESIDENTIAL
- COMMERCIAL
county:
type: string
description: Unit region of a state.
description:
type: string
description: Marketing Description.
minLength: 0
maxLength: 65535
floorNumber:
type: integer
format: int32
description: Floor number.
enum:
- 0
- 1
- 2
name:
type: string
description: Name of the unit.
neighborhood:
type: string
description: Neighborhood.
minLength: 0
maxLength: 30
numberBathrooms:
type: number
format: double
description: Number of bathrooms in the unit.
enum:
- 0
- 1
- 1.5
- 2
- 2.5
- 3
- 3.5
- 4
- 4.5
- 5
- 5.5
- 6
- 6.5
- 7
- 7.5
- 8
- 8.5
- 9
- 9.5
- 10
numberBedrooms:
type: integer
format: int32
description: Number of bedrooms in the unit.
minimum: 0
maximum: 20
portfolioID:
type: integer
format: int64
description: Id of the portfolio associated with this unit.
ready:
type: boolean
example: false
description: Indicates if property is ready to be leased.
reasonForPropertyLost:
type: string
description: Reason for property lost.
enum:
- EMPTY
- ABANDONED
- FORECLOSURE
- MGR_RETURNED_TO_OWNER
- OTB_AS_FRBO
- OWNER_MOVED_BACK
- REFERRED_TO_SALES
- REFERRED_TO_SALES_OR_SOLD
residential:
type: boolean
example: false
description: Is Unit is Residential or Commercial.
searchTag:
type: string
description: Search tag.
minLength: 0
maxLength: 25
targetDeposit:
type: number
format: double
description: Target deposit amount.
targetRent:
type: number
format: double
description: Market rent for the unit.
targetRentUnits:
type: string
description: Property target rent units.
enum:
- DOLLAR_PER_SQ_FT_MONTH
- DOLLAR_PER_SQ_FT_YEAR
- DOLLAR_PER_SQ_M_MONTH
- DOLLAR_PER_SQ_M_YEAR
- DOLLAR_PER_MONTH
- DOLLAR_PER_WEEK
- DOLLAR_PER_NIGHT
totalArea:
type: number
format: double
description: Unit Area.
type:
type: string
description: Indicates Unit type like Business Office,Medical Office,Showroom,R and D,Assigned Parking (Indoor),Assigned Parking (Outdoor),Warehouse,Restaurant,Shopping Mall Retail,Street Retail,Manufacturing,House,Town House,Apartment,Flat,Studio,Loft,Assigned Parking (Indoor),Assigned Parking (Outdoor) etc.
description: SaveUnit
CustomField:
type: object
properties:
dataType:
type: string
description: Data type of the custom field.
definitionID:
type: integer
format: int64
description: Id of the custom field definition.
fieldName:
type: string
description: Name of the custom field.
value:
type: string
description: Value of the custom field.
description: Custom field.
Unit:
type: object
properties:
abbreviation:
type: string
description: Property abbreviation.
active:
type: boolean
example: false
description: Indicates if the property is active or inactive.
address:
$ref: '#/components/schemas/Address'
amenities:
type: array
description: Property amenities list.
# --- truncated at 32 KB (42 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/propertyware/refs/heads/main/openapi/propertyware-units-api-openapi.yml