Connect your CRM, agency software, or custom platform to IMO360. Upload property listings, enrich them with market intelligence, and reach verified buyers.
# Publish a listing
curl -X POST http://api2.imo360.ro/api/integration/estates \
-H "X-API-Key: <your-key>" \
-H "Content-Type: application/json" \
-d '{
"providerIdentifier": "my-crm",
"externalId": "listing-456",
"title": "Apartament 3 camere Herastrau",
"transaction": "SALE",
"type": "APARTMENT",
"price": 185000,
"currency": "EUR",
"rooms": 3,
"totalArea": 85.5
}'
Four steps to go from API key to live listings with market analytics.
Contact us to receive an API key with publish.estates permission. Include the key in every request.
# All requests require the X-API-Key header
curl -H "X-API-Key: imo360_ak_your_key_here" ...
Push property listings with full details including inline agency and agent data. Same providerIdentifier + externalId = update (idempotent upsert). Agency and agent are auto-created/updated.
POST /api/integration/estates
{
"providerIdentifier": "my-crm",
"externalId": "listing-456",
"title": "Apartament 3 camere, zona Herastrau",
"transaction": "SALE",
"type": "APARTMENT",
"price": 185000,
"currency": "EUR",
"rooms": 3,
"totalArea": 85.5,
"latitude": 44.4812,
"longitude": 26.0766,
"constructionYear": 2020,
"floor": 4,
"floorMax": 10,
"partitioning": "DETACHED",
"imageUrls": ["https://example.com/img1.jpg"],
"agency": {
"name": "VIB Imobiliare",
"phone": "+40721000000"
},
"agent": {
"name": "Ana Popescu",
"phone": "+40721000001"
}
}
Push multiple listings in a single request. Each item follows the same schema. Failed items don't block the rest.
POST /api/integration/estates/bulk
{
"items": [
{ "providerIdentifier": "my-crm", "externalId": "listing-1", ... },
{ "providerIdentifier": "my-crm", "externalId": "listing-2", ... }
]
}
# Response shows per-item results:
{ "count": 2, "results": [
{ "index": 0, "success": true, "data": { "id": 12345 } },
{ "index": 1, "success": true, "data": { "id": 12346 } }
]}
When a property is sold, update its status. Re-activate by setting "status": "active".
# Re-post with same externalId to update status
POST /api/integration/estates
{
"providerIdentifier": "my-crm",
"externalId": "listing-456",
"title": "Apartament 3 camere, zona Herastrau",
"transaction": "SALE",
"price": 185000,
"currency": "EUR",
"status": "sold"
}
| Method | Endpoint | Description | Permission |
|---|---|---|---|
| POST | /api/integration/estates |
Create or update a listing (with inline agency/agent) | publish.estates |
| POST | /api/integration/estates/bulk |
Batch create/update multiple listings | publish.estates |
| GET | /api/integration/reference |
Enum values, estate types, and field specifications | ROLE_API |
Everything you need to know about the integration.
Same providerIdentifier + externalId always updates the existing listing. Safe to re-send without creating duplicates.
Providers, agencies, and agents are auto-created from estate payloads. Just include the data inline.
Images from imageUrls are automatically downloaded and stored on our CDN for optimal delivery.
Identifiers are auto-generated as providerIdentifier:name for agencies/agents and providerIdentifier:externalId for estates.
API keys are scoped to specific permissions like publish.estates. Keys can have expiration dates.
Published listings are immediately available for market explorer, pricing insights, investment scoring, and zone-level analytics.
Send X-API-Key header on all /api/integration/* calls. Keys are scoped by permission and can have expiration dates.
POST to /authentication_token with email/password to get a JWT. Required for POST /api/keys to create new API keys.
Use the Integration API docs to explore schemas, try requests, and download the OpenAPI spec for client generation.