6 Communications & Access
Store all connection details for your property: internet, TV, alarm, video surveillance, smart home — with credentials, documents, and validity dates.
Why Store Communications?
Every property has multiple services and connections: internet, phone, alarm, video surveillance, gate access, smart home systems. Keeping all this information organized in one place saves time and prevents confusion — especially when you manage several properties or need to share access with tenants.
What you can organize
- WiFi and internet provider credentials
- Alarm and video surveillance system access
- Smart home and gate remote control settings
- TV and phone service details
- Attached contracts and manuals for each service
What Information to Store
Each communication record can store the following information:
Passwords are stored in encrypted form and are hidden by default in the interface. While you can use the password field for WiFi codes, alarm PINs, and similar access data, we recommend using the password field only for non-critical codes. For highly sensitive credentials, consider using a dedicated password manager. The service stores data securely, but each user is responsible for deciding what information to save.
How to Add Communications
You can add and manage communications via the web interface or through the API.
In the web interface: open the property page, then click "Communications" in the property menu.
See the full documentation in the Library: Communications.
Communication Types
14 built-in types cover all common property services. Use GET /api/communication-types to get the full list with IDs.
Attached Documents
Each communication can have documents attached — contracts, manuals, invoices. First upload the document to the property (POST /api/properties/{id}/documents), then attach it to the communication by document ID.
Example documents
- Internet provider contract
- Alarm system installation manual
- Smart home app setup guide
- Gate remote programming instructions
For Developers: REST API
Manage property communications via the REST API. The information field supports HTML for rich formatting.
GET Get Communication Types
▶Get the list of all available communication types with their IDs.
GET /api/v1/communication-types
Response (200 OK):
{
"data": [
{"id": 1, "code": "WIFI", "name_key": "communication_type.wifi.name"},
{"id": 5, "code": "INTERNET_FIBER", "name_key": "communication_type.internet_fiber.name"},
{"id": 10, "code": "VIDEO_SURVEILLANCE", "name_key": "communication_type.video_surveillance.name"},
{"id": 11, "code": "ALARM_SYSTEM", "name_key": "communication_type.alarm_system.name"}
]
}
POST Create Communication
▶Create a new communication record for a property. Only communication_type_id is required, all other fields are optional.
POST /api/v1/properties/{id}/communications
Headers:
Authorization: Bearer {token}
Content-Type: application/json
Request Body:
{
"communication_type_id": 1,
"login": "MyNetwork",
"password": "wifi-pass-2026",
"access_address": "192.168.1.1",
"information": "<p>Router: TP-Link Archer AX73</p><p>Provider: Kyivstar Fiber 500 Mbps</p>",
"is_active": true
}
The <code>information</code> field supports HTML formatting (tables, lists, headings, paragraphs, links, inline styles). For security, all HTML is sanitized on the server — scripts, iframes, event handlers, and dangerous attributes are automatically removed.
Response (201 Created):
{
"message": "Communication created successfully",
"data": {
"id": 1,
"property_id": 2,
"communication_type": {"id": 1, "code": "WIFI"},
"login": "MyNetwork",
"password_set": true,
"access_address": "192.168.1.1",
"is_active": true,
"documents_count": 0
}
}
GET List Communications
▶Get all communications for a property.
GET /api/v1/properties/{id}/communications
Query Parameters:
Response (200 OK):
{
"data": [
{
"id": 1,
"communication_type": {"id": 1, "code": "WIFI"},
"login": "MyNetwork",
"password_set": true,
"access_address": "192.168.1.1",
"is_active": true,
"is_currently_active": true,
"documents_count": 1
}
],
"total": 5
}
PUT Update Communication
▶Update any fields of a communication. Only send the fields you want to change.
PUT /api/v1/communications/{communicationId}
Available fields (send only those you want to change):
Request Body:
{
"login": "NewNetwork_5G",
"password": "new-wifi-pass-2026",
"access_address": "192.168.1.1",
"information": "<h3>Updated Router Info</h3><p>Speed: 1 Gbps</p>",
"is_active": true
}
The <code>information</code> field supports HTML formatting (tables, lists, headings, paragraphs, links, inline styles). For security, all HTML is sanitized on the server — scripts, iframes, event handlers, and dangerous attributes are automatically removed.
POST Attach Document
▶Attach an existing property document to a communication. The document must belong to the same property.
POST /api/v1/communications/{communicationId}/documents
Request Body:
{
"document_id": 50,
"comment": "Provider contract"
}
Response (201 Created):
{
"message": "Document attached successfully",
"data": {
"link_id": 12,
"document_id": 50,
"comment": "Provider contract"
}
}
Detach Document
DELETE /api/v1/communications/{communicationId}/documents/{documentId}
cURL Examples
▶1. Create Communication
curl -X POST https://landlordkeeper.com/api/v1/properties/2/communications \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"communication_type_id": 1,
"login": "MyNetwork",
"password": "wifi-pass-2026",
"access_address": "192.168.1.1",
"is_active": true
}'
2. List Communications
curl https://landlordkeeper.com/api/v1/properties/2/communications \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
3. Attach Document
curl -X POST https://landlordkeeper.com/api/v1/communications/1/documents \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"document_id": 50,
"comment": "Provider contract"
}'