Skip to content

RentEngine Public API (1.1.1)

Integrate your systems anywhere with RentEngine.

Authorization

This API uses JWT Bearer token authentication. Follow these steps to obtain and use your API tokens:

Obtaining API Tokens

  1. Log in to your RentEngine developer portal
  2. In the top corner, click the "Create New API Key" button
  3. Provide a name for your token (e.g., "Integration Name")
  4. Click Create
  5. Copy the token to your clipboard and save it securely as it will not be displayed again

Important Security Notice: Your token will only be displayed ONCE at creation time. Make sure to copy it and store it securely. For security reasons, we cannot display the token again after this point.

Using API Tokens

Include your token in all API requests as a Bearer token in the Authorization header:

Authorization: Bearer your_token_here

Token Security Best Practices

  • Store tokens securely in environment variables or a secure vault
  • Never hardcode tokens in your application code
  • Do not share tokens in public repositories or client-side code
  • Use separate tokens for different integrations or environments

Token Permissions

Each token generated by a user will have the full permissions of the user that created it across all accounts associated with that user. Actions will be logged in the name of that user & token.

Invalidating Tokens

Tokens will not expire. (Well not for 100 years at least). If a token is compromised or no longer needed:

  1. Log in to your RentEngine developer portal
  2. Find the token you wish to invalidate in the table in the API Keys section
  3. Click the "Revoke Token" icon that looks like a trash can

Once revoked, a token cannot be restored. You'll need to create a new token if needed.

Pagination

All list endpoints in the RentEngine API support pagination to efficiently handle large datasets. Here's how to use pagination in your API requests:

Pagination Parameters

When making requests to list endpoints (e.g., /lockboxes, /lockbox_events, /units), you can include the following query parameters:

  • limit - Controls how many items to return per page (default: 50, max: 100)
  • page_number - Specifies which page to retrieve (0-indexed, default: 0)

Example request with pagination:

GET /api/public/v1/lockboxes?limit=25&page_number=1

This would return the second page of results with 25 items per page.

Response Format

Paginated responses include only the requested data. The total number of items across all pages is not included in the response.

Iterating Through Pages

To retrieve all items across multiple pages, increment the page_number parameter until you've processed all pages. You can determine when you've reached the end when the response is shorter than the limit requested.

Performance Considerations

  • Use appropriate limit values based on your needs. Smaller values reduce payload size but require more API calls, which can slow down performance and be subject to rate limits.
  • When filtering data, apply filters in the query parameters first to reduce the total number of items that need to be fetched.

Webhooks

RentEngine provides webhooks to notify your systems about events in real-time. This allows you to build integrations that respond immediately to changes in your RentEngine data.

Setting Up Webhooks

Webhooks can be configured through the RentEngine developer portal. You'll need to specify:

  1. The target URL where webhook events should be sent
  2. The data you want to monitor (e.g., lockboxes, units, lockbox_events)
  3. The event types you want to receive (INSERT, UPDATE, DELETE)
  4. An optional API key that will be included in webhook requests to your endpoint

Webhook Payload Structure

Webhook payloads follow this general structure:

{
  "type": "INSERT|UPDATE|DELETE",
  "table": "table_name",
  "record": { /* The current state of the record (null for DELETE) */ },
  "old_record": { /* The previous state of the record (null for INSERT) */ }
}

The specific fields in record and old_record will depend on the table that triggered the event.

Event Types

  • INSERT: Sent when a new record is created
  • UPDATE: Sent when an existing record is modified
  • DELETE: Sent when a record is deleted

Security Considerations

  • Webhook endpoints should be HTTPS to ensure secure transmission of data
  • Validate the API key included in the webhook request to ensure it's coming from RentEngine
  • Implement idempotency in your webhook handlers to prevent duplicate processing

Webhook Delivery

RentEngine uses a reliable delivery system (QStash) to ensure webhooks are delivered even during temporary outages. If your endpoint is unavailable, we'll retry delivery with exponential backoff.

Download OpenAPI description
Languages
Servers
Mock server

https://rentengine.redocly.app/_mock/openapi/

Production environment

https://app.rentengine.io/api/public/v1/

Staging environment

https://staging-app.rentengine.io/api/public/v1/

Lockboxes

Operations for managing lockboxes

Operations

Request

Retrieve lockboxes with optional filtering and pagination

Security
BearerAuth
Query
serial_numbersArray of strings

Filter by comma-separated list of lockbox provider serial numbers

Example: serial_numbers=1234567,7654321
lockbox_idsArray of strings

Filter by comma-separated list of RentEngine lockbox IDs

Example: lockbox_ids=123e4567-e89b-12d3-a456-426614174000,123e4567-e89b-12d3-a456-426614174001
account_idstring

Filter by lockboxes associated with a specific RentEngine account by the account's id

Example: account_id=4b88ff32-8ba0-4bbf-8e60-c789909ac176
lockbox_typestring

Filter by lockbox type (currently only SentriLock is supported via API. Codebox is supported via the UI only)

Value"Sentrilock"
Example: lockbox_type=Sentrilock
limitinteger[ 1 .. 100 ]

Maximum number of items to return per page (default 50, max 100)

Default 50
Example: limit=25
page_numberinteger>= 0

Page number for pagination (0-indexed, default 0)

Default 0
Example: page_number=1
curl -i -X GET \
  'https://rentengine.redocly.app/_mock/openapi/lockboxes?serial_numbers=1234567%2C7654321&lockbox_ids=123e4567-e89b-12d3-a456-426614174000%2C123e4567-e89b-12d3-a456-426614174001&account_id=4b88ff32-8ba0-4bbf-8e60-c789909ac176&lockbox_type=Sentrilock&limit=25&page_number=1' \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>'

Responses

Success. Returns a list of lockboxes.

Bodyapplication/jsonArray [
idstring(uuid)(UuidProperty)required

Unique identifier

lockbox_typestringrequired

Type of lockbox

Value"Sentrilock"
Example: "Sentrilock"
serial_numberstringrequired

Serial number of the lockbox

Example: "1234567"
account_idstringrequired

ID of the account that owns the lockbox

Example: "4b88ff32-8ba0-4bbf-8e60-c789909ac176"
created_atstring(date-time)required

Timestamp when the lockbox was created

Example: "2023-01-15T12:00:00Z"
updated_atstring(date-time)required

Timestamp when the lockbox was last updated

Example: "2023-01-16T14:30:00Z"
]
Response
application/json
[ { "id": "123e4567-e89b-12d3-a456-426614174000", "lockbox_type": "Sentrilock", "serial_number": "1234567", "account_id": "4b88ff32-8ba0-4bbf-8e60-c789909ac176", "created_at": "2023-01-15T12:00:00Z", "updated_at": "2023-01-16T14:30:00Z" } ]

Request

Create new lockboxes (currently only SentriLock type is supported)

Security
BearerAuth
Bodyapplication/jsonrequired
lockbox_typestringrequired

Type of lockbox (currently only SentriLock is supported)

Value"Sentrilock"
Example: "Sentrilock"
serial_numbersArray of strings[ 1 .. 100 ] itemsrequired

List of serial numbers for the lockboxes to create

Example: ["1234567","7654321"]
account_idstringrequired

ID of the account to associate with the lockboxes

Example: "4b88ff32-8ba0-4bbf-8e60-c789909ac176"
curl -i -X POST \
  https://rentengine.redocly.app/_mock/openapi/lockboxes \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "lockbox_type": "Sentrilock",
    "serial_numbers": [
      "1234567",
      "7654321"
    ],
    "account_id": "4b88ff32-8ba0-4bbf-8e60-c789909ac176"
  }'

Responses

Lockboxes created successfully

Bodyapplication/jsonArray [
idstring(uuid)(UuidProperty)required

Unique identifier

lockbox_typestringrequired

Type of lockbox

Value"Sentrilock"
Example: "Sentrilock"
serial_numberstringrequired

Serial number of the lockbox

Example: "1234567"
account_idstringrequired

ID of the account that owns the lockbox

Example: "4b88ff32-8ba0-4bbf-8e60-c789909ac176"
created_atstring(date-time)required

Timestamp when the lockbox was created

Example: "2023-01-15T12:00:00Z"
updated_atstring(date-time)required

Timestamp when the lockbox was last updated

Example: "2023-01-16T14:30:00Z"
]
Response
application/json
[ { "id": "123e4567-e89b-12d3-a456-426614174000", "lockbox_type": "Sentrilock", "serial_number": "1234567", "account_id": "4b88ff32-8ba0-4bbf-8e60-c789909ac176", "created_at": "2023-01-15T12:00:00Z", "updated_at": "2023-01-16T14:30:00Z" } ]

Transfer lockboxes between accounts

Request

Moves lockboxes between accounts. The user must have access to both the lockboxes and the target account.

Security
BearerAuth
Bodyapplication/jsonrequired
lockbox_idsArray of strings(uuid)non-emptyrequired

List of lockbox IDs to be transferred to the new account

Example: ["123e4567-e89b-12d3-a456-426614174000","123e4567-e89b-12d3-a456-426614174001"]
new_account_idstring(uuid)required

ID of the account to which the lockboxes should be transferred

Example: "4b88ff32-8ba0-4bbf-8e60-c789909ac176"
curl -i -X POST \
  https://rentengine.redocly.app/_mock/openapi/lockboxes/transfer_accounts \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "lockbox_ids": [
      "123e4567-e89b-12d3-a456-426614174000",
      "123e4567-e89b-12d3-a456-426614174001"
    ],
    "new_account_id": "4b88ff32-8ba0-4bbf-8e60-c789909ac176"
  }'

Responses

Lockboxes transferred successfully

Bodyapplication/jsonArray [
idstring(uuid)(UuidProperty)required

Unique identifier

lockbox_typestringrequired

Type of lockbox

Value"Sentrilock"
Example: "Sentrilock"
serial_numberstringrequired

Serial number of the lockbox

Example: "1234567"
account_idstringrequired

ID of the account that owns the lockbox

Example: "4b88ff32-8ba0-4bbf-8e60-c789909ac176"
created_atstring(date-time)required

Timestamp when the lockbox was created

Example: "2023-01-15T12:00:00Z"
updated_atstring(date-time)required

Timestamp when the lockbox was last updated

Example: "2023-01-16T14:30:00Z"
]
Response
application/json
[ { "id": "123e4567-e89b-12d3-a456-426614174000", "lockbox_type": "Sentrilock", "serial_number": "1234567", "account_id": "4b88ff32-8ba0-4bbf-8e60-c789909ac176", "created_at": "2023-01-15T12:00:00Z", "updated_at": "2023-01-16T14:30:00Z" } ]

Request

Generate a one-time code for a lockbox. The code can be generated by providing either a lockbox_id, serial_number, or unit_id. The code will be valid for the specified date.

Security
BearerAuth
Bodyapplication/jsonrequired
One of:

Generate a code for a specific lockbox by providing the lockbox ID.

lockbox_idstring(uuid)required

ID of the lockbox. Either this, serial_number, or unit_id must be provided.

Example: "123e4567-e89b-12d3-a456-426614174000"
serial_numberstring

Serial number of the lockbox. Either this, lockbox_id, or unit_id must be provided.

Example: "1234567"
unit_idnumber

ID of the unit where the lockbox is installed. Either this, lockbox_id, or serial_number must be provided.

Example: 12345
datestring(date)required

Date for which the code should be valid (YYYY-MM-DD format)

Example: "2024-03-15"
created_forstring

Optional name or identifierof the person the code is being created for

Example: "John Doe"
code_typestring

Type of code to generate. Only relevant for Sentrilock lockboxes. All other boxes can only generate ACCESS codes.

Default "ACCESS"
Enum"ACCESS""SHACKLE"
Example: "ACCESS"
curl -i -X POST \
  https://rentengine.redocly.app/_mock/openapi/lockboxes/generate_code \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "lockbox_id": "123e4567-e89b-12d3-a456-426614174000",
    "date": "2024-03-15",
    "created_for": "John Doe",
    "code_type": "ACCESS"
  }'

Responses

Success. Returns the generated code and lockbox type.

Bodyapplication/json
codestring

The generated lockbox code

Example: "1234"
lockboxTypestring

Type of the lockbox

Enum"Sentrilock""Codebox"
Example: "Sentrilock"
instructionsstring

Optional instructions for using the code. May or may not be provided, depending on the lockbox.

Example: "Enter code followed by #"
Response
application/json
{ "code": "1234", "lockboxType": "Sentrilock", "instructions": "Enter code followed by #" }

Lockbox Events

Operations for tracking and creating lockbox events

OperationsWebhooks

Lockbox Installations

Operations for retrieving lockbox installations

Operations

Units

Operations for managing rental units

OperationsWebhooks

Prospects

Events related to prospective tenants

OperationsWebhooks

Multifamily Properties

Operations for managing multifamily properties. Multifamily properties are used to syndicate large properties with paid advertising contracts to the paid rental feeds. For example, paid adverising contracts are required for the Zillow network if the building has more than 24 units, and for the Apartments.com if the building has more than 4 units. Other ILSs have different thresholds.

Operations

Floorplans

Operations for managing floorplans associated with multifamily properties. Floorplans are used to syndicate units to the paid rental feeds for paid advertising contracts. They must be used in conjunction with a multifamily property.

Operations

Leasing Events

Events related to leasing events

OperationsWebhooks

Subteams

Operations for managing subteams

Operations

Prescreening Templates

Operations for managing prescreening templates used for prospect qualification

Operations

Showings

Operations for managing showing availability and scheduling

Operations