4 Property Photos
Upload interior and exterior photos of your property to create a visual gallery.
Why Add Photos?
Property photos are essential for documenting the condition of your rental property. They serve as visual records for both landlords and tenants.
Benefits
- Document property condition before and after tenant moves
- Visual gallery for potential tenants
- Secure cloud storage for your photos
- Separate categories for interior and exterior photos
How to Add Photos
You can upload photos via the web interface or through the API. The web interface supports drag-and-drop file upload.
In the web interface: open the property page, then click "Photo / Video" in the property menu to open the media gallery.
See the full documentation in the Library: Property Photos & Videos.
Media Types
Each photo or video belongs to one of five media types. Use the appropriate type for proper organization.
Upload Requirements
For Developers: REST API
You can manage property media via the REST API. Photos are uploaded as base64-encoded content.
POST Upload Photo
▶Upload a photo by sending the file content as base64-encoded string. Specify the document type to categorize the photo.
POST /api/v1/properties/{id}/documents
Headers:
Authorization: Bearer {token}
Content-Type: application/json
Required Fields:
Optional Fields:
Request Body:
{
"document_type_id": 6,
"file_content": "base64-encoded-file-content...",
"file_name": "living-room.webp",
"mime_type": "image/webp",
"comment": "Living room photo"
}
Response (201 Created):
{
"message": "Document uploaded successfully",
"data": {
"id": 45,
"property_id": 2,
"document_type": {
"id": 6,
"code": "PHOTO_INTERIOR",
"name_key": "document_type.photo_interior"
},
"file_url": "https://landlordkeeper.com/file/cG1mOjQ1OjA6...",
"original_name": "living-room.webp",
"file_size": 125000,
"file_size_formatted": "122.07 KB",
"mime_type": "image/webp",
"extension": "webp",
"is_image": true,
"is_video": false,
"is_pdf": false,
"comment": "Living room photo",
"created_at": "2026-02-20T12:00:00+00:00"
}
}
GET List Property Media
▶Get all documents for a property. Use type_id filter to show only specific media types.
GET /api/v1/properties/{id}/documents
Query Parameters:
Response (200 OK):
{
"data": [
{
"id": 45,
"property_id": 2,
"document_type": {"id": 6, "code": "PHOTO_INTERIOR"},
"file_url": "https://landlordkeeper.com/file/cG1mOjQ1OjA6...",
"original_name": "living-room.webp",
"file_size": 125000,
"is_image": true,
"comment": "Living room photo",
"created_at": "2026-02-20T12:00:00+00:00"
}
],
"total": 3,
"stats": {
"total_count": 3,
"total_size": 375000,
"total_size_formatted": "366.21 KB"
}
}
GET Get Document Types
▶Get the list of all available document types with their IDs, allowed extensions, and size limits.
GET /api/v1/document-types
Response (200 OK):
{
"data": [
{"id": 6, "code": "PHOTO_INTERIOR", "allowed_extensions": "jpg,jpeg,png,webp", "max_size_mb": 10},
{"id": 7, "code": "PHOTO_EXTERIOR", "allowed_extensions": "jpg,jpeg,png,webp", "max_size_mb": 10},
{"id": 8, "code": "VIDEO_INTERIOR", "allowed_extensions": "mp4,webm", "max_size_mb": 50},
{"id": 9, "code": "VIDEO_EXTERIOR", "allowed_extensions": "mp4,webm", "max_size_mb": 50},
{"id": 10, "code": "PHOTO_OTHER", "allowed_extensions": "jpg,jpeg,png,webp", "max_size_mb": 10}
]
}
cURL Examples:
curl https://landlordkeeper.com/api/v1/document-types
DELETE Delete Photo
▶Delete a document by its ID. The file and the database record are permanently deleted.
DELETE /api/v1/documents/{documentId}
Response (200 OK):
{"message": "Document deleted successfully"}
cURL Examples
▶1. Upload Photo
curl -X POST https://landlordkeeper.com/api/v1/properties/2/documents \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"document_type_id": 6,
"file_content": "'$(base64 -w 0 photo.webp)'",
"file_name": "living-room.webp",
"mime_type": "image/webp",
"comment": "Living room"
}'
2. List Property Media
curl https://landlordkeeper.com/api/v1/properties/2/documents?type_id=6 \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
3. Delete Photo
curl -X DELETE https://landlordkeeper.com/api/v1/documents/45 \
-H "Authorization: Bearer YOUR_TOKEN_HERE"