CREATE Property
curl --request POST \
--url https://api.prophia.com/rest/v2/accounts/{accountId}/properties \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"propertyName": "<string>",
"customId": "<string>"
}
'import requests
url = "https://api.prophia.com/rest/v2/accounts/{accountId}/properties"
payload = {
"propertyName": "<string>",
"customId": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({propertyName: '<string>', customId: '<string>'})
};
fetch('https://api.prophia.com/rest/v2/accounts/{accountId}/properties', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.prophia.com/rest/v2/accounts/{accountId}/properties",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'propertyName' => '<string>',
'customId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.prophia.com/rest/v2/accounts/{accountId}/properties"
payload := strings.NewReader("{\n \"propertyName\": \"<string>\",\n \"customId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.prophia.com/rest/v2/accounts/{accountId}/properties")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"propertyName\": \"<string>\",\n \"customId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.prophia.com/rest/v2/accounts/{accountId}/properties")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"propertyName\": \"<string>\",\n \"customId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"propertyName": "<string>",
"customId": "<string>",
"buildings": [
{
"id": "<string>",
"propertyId": "<string>",
"buildingName": "<string>",
"address": {
"address1": "<string>",
"address2": "<string>",
"city": "<string>",
"state": "<string>",
"country": "<string>",
"zipcode": "<string>"
},
"onboardingStatus": "NOT_STARTED",
"activeStatus": "ACTIVE",
"customId": "<string>",
"implementationManager": "<string>",
"buildingType": "OFFICE",
"buildingClass": "<string>",
"metroArea": "<string>",
"lat": 123,
"lng": 123,
"propertyType": "MULTI_BUILDING",
"totalRentableSquareFootage": 123,
"squareFootageLeased": 123,
"squareFootageOccupied": 123,
"squareFootageVacant": 123,
"customFields": [
{
"name": "<string>",
"value": "<string>"
}
]
}
],
"documents": [
{
"id": "<string>",
"filename": "<string>",
"title": "<string>",
"numberOfPages": 123,
"docCategory": "Main Lease Agreement",
"createdAt": "2023-11-07T05:31:56Z",
"documentStatus": "<string>",
"splitStatus": "single",
"originalDocId": "<string>"
}
]
}{
"error": "Invalid Input",
"errorCode": "InvalidInput",
"message": "dba cannot be blank",
"status": "400 BAD_REQUEST",
"timestamp": "2026-09-02T20:41:03.118Z",
"localizedMessage": "dba cannot be blank"
}{
"error": "JWT authentication is not supported. Use an API key."
}{
"error": "Access Denied",
"errorCode": "AccessDenied",
"message": "Not authorized. Missing capabilities: WRITE:DOCUMENT",
"status": "403 FORBIDDEN",
"timestamp": "2026-09-02T20:41:03.118Z",
"localizedMessage": "Not authorized. Missing capabilities: WRITE:DOCUMENT"
}{
"error": "Entity Not Found",
"errorCode": "EntityNotFound",
"message": "This entity is not found in the system.",
"status": "404 NOT_FOUND",
"timestamp": "2026-09-02T20:41:03.118Z",
"localizedMessage": "This entity is not found in the system."
}Properties
CREATE Property
Creates a Property in the Account. A Property is required in order to create a Building.
Required capabilities: WRITE:PROPERTY
POST
/
rest
/
v2
/
accounts
/
{accountId}
/
properties
CREATE Property
curl --request POST \
--url https://api.prophia.com/rest/v2/accounts/{accountId}/properties \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"propertyName": "<string>",
"customId": "<string>"
}
'import requests
url = "https://api.prophia.com/rest/v2/accounts/{accountId}/properties"
payload = {
"propertyName": "<string>",
"customId": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({propertyName: '<string>', customId: '<string>'})
};
fetch('https://api.prophia.com/rest/v2/accounts/{accountId}/properties', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.prophia.com/rest/v2/accounts/{accountId}/properties",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'propertyName' => '<string>',
'customId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.prophia.com/rest/v2/accounts/{accountId}/properties"
payload := strings.NewReader("{\n \"propertyName\": \"<string>\",\n \"customId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.prophia.com/rest/v2/accounts/{accountId}/properties")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"propertyName\": \"<string>\",\n \"customId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.prophia.com/rest/v2/accounts/{accountId}/properties")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"propertyName\": \"<string>\",\n \"customId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"propertyName": "<string>",
"customId": "<string>",
"buildings": [
{
"id": "<string>",
"propertyId": "<string>",
"buildingName": "<string>",
"address": {
"address1": "<string>",
"address2": "<string>",
"city": "<string>",
"state": "<string>",
"country": "<string>",
"zipcode": "<string>"
},
"onboardingStatus": "NOT_STARTED",
"activeStatus": "ACTIVE",
"customId": "<string>",
"implementationManager": "<string>",
"buildingType": "OFFICE",
"buildingClass": "<string>",
"metroArea": "<string>",
"lat": 123,
"lng": 123,
"propertyType": "MULTI_BUILDING",
"totalRentableSquareFootage": 123,
"squareFootageLeased": 123,
"squareFootageOccupied": 123,
"squareFootageVacant": 123,
"customFields": [
{
"name": "<string>",
"value": "<string>"
}
]
}
],
"documents": [
{
"id": "<string>",
"filename": "<string>",
"title": "<string>",
"numberOfPages": 123,
"docCategory": "Main Lease Agreement",
"createdAt": "2023-11-07T05:31:56Z",
"documentStatus": "<string>",
"splitStatus": "single",
"originalDocId": "<string>"
}
]
}{
"error": "Invalid Input",
"errorCode": "InvalidInput",
"message": "dba cannot be blank",
"status": "400 BAD_REQUEST",
"timestamp": "2026-09-02T20:41:03.118Z",
"localizedMessage": "dba cannot be blank"
}{
"error": "JWT authentication is not supported. Use an API key."
}{
"error": "Access Denied",
"errorCode": "AccessDenied",
"message": "Not authorized. Missing capabilities: WRITE:DOCUMENT",
"status": "403 FORBIDDEN",
"timestamp": "2026-09-02T20:41:03.118Z",
"localizedMessage": "Not authorized. Missing capabilities: WRITE:DOCUMENT"
}{
"error": "Entity Not Found",
"errorCode": "EntityNotFound",
"message": "This entity is not found in the system.",
"status": "404 NOT_FOUND",
"timestamp": "2026-09-02T20:41:03.118Z",
"localizedMessage": "This entity is not found in the system."
}Authorizations
Body
application/json
Fields for creating a Property on an Account. The Property is created empty as the housing for one or more Buildings to be added to the Property afterwards in separate calls.
Response
OK
Representation of a Property — the asset grouping directly beneath an Account. A Property holds one or more Buildings; a single Building is the common case, and several Buildings under one Property represent a campus or other multi-building asset. Leases, Building Spaces, and Tags hang off the Buildings rather than the Property itself.

