API V2: Understanding the Framework Basics

Last updated: October 5, 2026

Housing.Cloud provides a collections based REST API for developers to access data freely. Below are some key details and patterns of the API V2 framework.

 

Authentication and Authorization

Housing.Cloud utilizes scoped, short-lived JSON Web Tokens (JWT) for authentication. A developer must create a new API Agent via the Housing.Cloud admin portal and utilize the Agent id and the provided API key when calling the Authentication endpoint to generate a JWT.

Each JWT is imbued with configured Scopes from the associated Agent. Every Entity endpoint requires one or more scopes to access the resources. It is recommended that ever developer follow the Principle of Least Privilege when assigning Scopes to an Agent. 

 

Rate Limits

Housing.Cloud limits the rate of API requests using the Sliding Window Algorithm. The rate limits are broken down by Agent and by Tenant (i.e. Institution/sub-domain). The rates are:

  • Per Agent: 10 requests per second
  • Per Tenant: 50 requests per second

The status of the rate limit details is available in all API responses under the metaData object.

 

Pagination

Housing.Cloud requires pagination when fetching collections. There are two components to pagination, the pointer/index and the quantity of rows to fetch. By default, the API sets the pointer to 0 (i.e. first item in the collection) and the quantity of rows to 1000.

To customize the pagination details, you must include the arguments:

  •  offset: Represents the pointer
  •  limit: Represents the quantity of rows to fetch (with a maximum of 1000)

The values of the two parameters will be echoed back in the API response for all GET Collection requests under the metaData object.

 

Example Request URL:

/api/v2/profile-fields?limit=2&offset=0

 

Common Response Structures

MetaData

Every API V2 response will contain a metaData object. The content of the metaData object will change depending on the entity type, HTTP method, and collection/individual. Below are tables showing possible structure

Field Name Data Type Required Notes
agentId string Yes  
rateLimits RateLimit Yes See below for type explanation
pagnination Pagination No See below for type explanation
params JSON No Dynamic object that will echo details from the request

 

Rate Limit

The rate limits will be separated by rate limit type.

Field Name Data Type Notes
limit number Maximum number of requests per window
remaining number Remaining number of requests per window
reset number The timestamp of the window end

 

Pagination

Field Name Data Type Notes
offset number The offset of the previous request
limit number The limit of the previous request

 

Example Response:

"metaData": {
	"agentId": "ab5f95b2-303a-403b-85fd-ab1d0cd8093c",
	"rateLimits": {
		"tenant": {
			"limit": 50,
			"remaining": 49,
			"reset": 1759760332000
		},
		"agent": {
			"limit": 10,
			"remaining": 9,
			"reset": 1759760332000
		}
	},
	"pagination": {
		"offset": 0,
		"limit": 2
	}
}

 

GET Collection

In addition to to the metaData object, every request to obtain a Collection will include a field called entities. This field will contain a list of entity specific data types. See the specific Entity data model in its respective Entity Route document.

 

GET Individual

In addition to to the metaData object, every request to obtain an individual record will include a field called entity. This field will contain a JSON object. See the specific Entity data model in its respective Entity Route document.

 

POST Collection

In addition to to the metaData object, every request to create a Collection will include a field called details. The structure of the details object is:

Field Name Data Type Notes
numTotal number Total number of entities processed in a batch
numSuccess number Number of entities that were successfully created or updated
numErrors number Number of entities that failed to be created or updated
errors EntityError[] or null  

 

EntityError

Field Name Data Type Notes
error string The error message
entity JSON The failed entity

 

Example Response

"details": {
	"numTotal": 2,
	"numSuccess": 2,
	"numErrors": 0,
	"errors": null
},