Build integrations on top of the PR365 property rental platform
Obtain a token by calling POST /v1/auth/login with email and password. Pass the token in the Authorization header.
POST https://api.pr365.io/v1/auth/login
Content-Type: application/json
{
"email": "landlord@example.com",
"password": "yourpassword",
"orgCode": "YOUR_ORG_CODE"
}
# Response
{
"success": true,
"data": {
"accessToken": "eyJhbG...",
"expiresIn": 28800
}
}
For server-to-server integrations, generate an API key from the landlord portal or via the API. Pass it in the X-Api-Key header.
curl https://api.pr365.io/v1/properties \ -H "X-Api-Key: pr365_your_api_key_here"
List all API keys for your account.
Create a new API key. The key is returned once and cannot be retrieved again.
{
"name": "My Integration",
"scopes": ["read", "write"],
"description": "Used by our CRM system",
"expiresInDays": 365
}
Revoke an API key immediately.
{
"event": "application.submitted",
"timestamp": "2026-09-26T10:00:00Z",
"data": {
"applicationId": "uuid",
"status": "Submitted",
"propertyId": "uuid",
"tenantId": "uuid"
}
}
Every webhook includes an X-PR365-Signature header. Verify it to confirm the payload came from PR365.
// Node.js example
const crypto = require('crypto')
function verifySignature(payload, signature, secret) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex')
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
)
}
List registered webhook endpoints.
Register a new webhook endpoint.
{
"url": "https://yourapp.com/webhooks/pr365",
"events": ["application.submitted", "tenancy.activated"],
"description": "Main webhook receiver"
}
Send a test event to verify your endpoint is receiving correctly.
View delivery history and retry status for a webhook endpoint.
Full interactive documentation is available at api.pr365.io/swagger. Below is a summary of key endpoints.
| Method | Path | Description |
|---|---|---|
| GET | /v1/properties | Search properties with filters (city, rent, bedrooms, type) |
| GET | /v1/properties/{id} | Get a single property with full details |
| POST | /v1/properties | Create a new property listing |
| PUT | /v1/properties/{id} | Update a property |
| Method | Path | Description |
|---|---|---|
| POST | /v1/applications | Submit a rental application |
| GET | /v1/applications/landlord | Get all applications for the authenticated landlord |
| GET | /v1/applications/tenant | Get all applications for the authenticated tenant |
| PATCH | /v1/applications/{id}/status | Approve or reject an application |
| POST | /v1/applications/{id}/generate-lease | Generate a lease agreement |
| POST | /v1/applications/{id}/sign | Sign the lease (tenant or landlord) |
| GET | /v1/applications/{id}/lease/pdf | Download signed lease as PDF |
| Method | Path | Description |
|---|---|---|
| GET | /v1/payments | Get payment history |
| GET | /v1/payments/schedule | Get upcoming payment schedule |
| POST | /v1/payments/deposit/{leaseId} | Pay security deposit into escrow |
| GET | /v1/payments/escrow/{leaseId} | Get escrow account details |
All API responses follow a consistent envelope format:
{
"success": true,
"data": { ... },
"meta": { "page": 1, "pageSize": 20, "totalCount": 100 },
"errors": null
}
PR365 API v1 • hi@pr365.io • Swagger UI