Introduction
The Immowelt listing imports API allows you to import listings into the Immowelt platform.
The API provides endpoints for creating, updating, and deleting listings, as well as managing media files associated to listings.
Use this API to integrate with the Immowelt platform and streamline the listing import process.
Authentication
This section covers the authentication and authorization mechanisms required to access the API.
To authorize requests, include the token in the Authorization header as follows:
Authorization: Bearer <your_token>
Available scopes
This section lists the OAuth 2.0 scopes that you might need to request to access this API, depending on the level of access you need. Many scopes overlap, so it’s best to use a scope that is as restrictive as possible.
The access token issued will only contain the requested scopes.
| Scopes | Description |
|---|---|
clim:listings:* |
View and manage your listing across this API |
clim:medias:* |
Manage your media data across this API |
clim:listings:create |
Manage your POST listing endpoint (/listings) across this API |
clim:listings:read |
Manage your GET listing endpoint (/listings, /listings/{externalListingId}) across this API |
clim:listings:update |
Manage your PUT listing endpoint (/listings/{externalListingId}) across this API |
clim:listings:delete |
Manage your DELETE listing endpoint (/listings/{externalListingId}) across this API |
clim:medias:create |
Manage your POST media endpoint (/medias) across this API |
ℹ️ Scopes are case sensitive
API overview
The Immowelt listing imports API is a RESTful API. The API allows you to interact with resources using verbs: POST, GET, PUT, DELETE.
- To create a new resource : use the
POSTverb with the resource name
POST /listings
- To query an existing resource : use the
GETverb with the resource name and its unique identifier
GET /listings/{externalListingId}
- To query a list of resources : use the
GETverb with the resource name
GET /listings
- To update an existing resource : use the
PUTverb with the resource name and its unique identifier
PUT /listings/{externalListingId}
- To delete an existing resource : use the
DELETEverb with the resource name and its unique identifier
DELETE /listings/{externalListingId}
Naming convention
- All the resources names are defined in plural. For instance: “GET /listings”.
- The supported format is JSON.
- The fields are defined in camelCase.
- The boolean fields start by a “is” prefix.
Specification
The Immowelt listing imports API follows the OpenAPI specification.
API features offered
| Feature | Description |
|---|---|
| Listing data lifecycle management | Create, update, delete, query listing data. |
| Media data lifecycle management | Create and upload media data. |
Business Rules
These specific rules apply to listing data at creation and update :
| No. | Rule | Description | Remarks |
|---|---|---|---|
| 1 | Text Length Validation | For all fields with data type “Multi lingual text”, a maximum length validation is applied. If the size exceeds 3999 characters, a specific rejection will be triggered to the producer indicating the violation. | Characters are more easily understood than bytes |
| 2 | Email Format | Fields with email type will be rejected if they don’t follow a valid email format. This rule applies to contact information fields. | Only available in contact |
| 3 | Phone Number Format | Fields with phone number type will be rejected if they don’t follow a valid phone number format. Standard RegEx: /^+?\d{1,3}[- ]?\d{1,4}[- ]?\d{4,10}$/. The / delimiter must be accepted | Only available in contact |
| 4 | Date Format | Fields with date type will be rejected if they don’t follow the accepted format: string($date), e.g., “2019-02-15”. | - |
| 5 | URL Format | Fields with URL type will be rejected if they don’t follow a valid URL format. | - |
| 6 | Estate Type Validation | The estateType must match with estateSubType. Non-matching combinations will be rejected. | - |
| 7 | Distribution Type Validation | The distributionType must match with distributionSubType. Non-matching combinations will be rejected. | To ease handling of complex sales transactions |
| 8 | Project Estate Type Validation | For project classifieds, the projectEstateType must match with projectEstateSubType. Non-matching combinations will be rejected. | May not be mandatory (API don’t support project at this moment) |
| 9 | Project Distribution Type Validation | For project classifieds, the projectDistributionType must match with projectDistributionSubType. Non-matching combinations will be rejected. | For project classifieds (API don’t support project at this moment) |
| 10 | Mandatory API Customer Fields | For API customers, the following fields are mandatory: externalId, offererEstateId, offererMarketingKey, softwareName, externalCustomerId. For project classifieds, externalProjectId and offererEstateGroupId are also mandatory. | For project classifieds (API don’t support project at this moment) |
| 11 | Update Restriction | In update transactions, changing the classified estateType is not allowed. | - |
| 12 | Square Meters Validation | Square meter fields and space fields must be ≥0 and <99999999, with number data type. | - |
| 13 | Count Fields Validation | Number/count fields and parking lot fields must be ≥0 and <999999, with number data type. | - |
| 14 | Price Fields Validation | Price and amount fields must be ≥0 and <9999999999999, with number data type. | - |
| 15 | Date Range Validation | For new builds, availableFromDate and buildingStartDate must be after 1900/01/01. | - |
| 16 | Percentage Values | Percentage values must be between 0 and 100. | - |
| 17 | Rent Transaction Amount Validation | In rent transactions with CLASSIC/standard distributionSubType, either baseRent.amount OR totalRent.amount OR lease.amount must be greater than 0. | - |
| 18 | New Build and Empty Rent Validation | In rent transactions with NEW_BUILD_UNIT or EMPTY distributionSubType, either baseRent.amount OR totalRent.amount OR lease.amount must be greater than 0. | - |
| 19 | Compulsory Auction Validation | In COMPULSORY_AUCTION transactions, minimumBid and overbidSessionStartingPrice must be greater than 0. | - |
| 20 | Brokerage Fee Validation (Buy/Rent) | In BUY/RENT transactions, when hasFee is not false, the brokerage Fee amount or price note must not be empty and must be greater than 0. | - |
| 21 | Text Content Validation | In all create and update events, text entry fields will be rejected if they contain HTML, URLs, email addresses, or phone numbers. | - |
NOTE: The Sandbox environment listings will be automatically deleted after 90 days since the last write/update. The Sandbox environment listings will not be visible on the website, as of now.
Versioning strategy
The Immowelt listing imports API is constantly being worked on to add features, improvements and bugfixes. This means that you should expect changes to be introduced and documented. Whenever we make a significant change to an endpoint, we will increase the version number used in the path of the resource being requested. The current API version is v1 so all the API request must be performed with this version number in the endpoints.
Example:
POST /v1/listings
The API version number being incremented for major versions releases. The minor versions are released without having to increment this API version number enabling API consumers to benefit from non-breaking and backward-compatible changes and fixes seamlessly.
Backward-compatible changes
We consider the following cases as backward-compatible changes (minor releases):
- Adding new optional parameters
- Adding new endpoints
- Adding new fields to existing API responses
- Changing the order of fields in existing API responses
Supported HTTP status codes
- 2xx for successful operations
- 3xx for redirections
- 4xx for client errors
- 5xx for server errors
Errors
The Immowelt listing imports API follow’s the error response format proposed in RFC 7807 also known as Problem Details for HTTP APIs. As with our normal API responses, your client must be prepared to gracefully handle additional members of the response.
However, some error cases need to be accompanied by a human readable documentation. Especially regarding any errors that might be encountered during the API format validation steps (400 Bad Request) in order to give sufficient information needed by API consumers to fix the parameters and/or the request body. This 400 Bad Request is detailed in the section below.
Validation Error
In addition to the information proposed in RFC 7807, we support “errors” and “errorSource” fields to convey the fine-grained details of the API format validation problems.
| Field | Type | Description |
|---|---|---|
| errors | Array | This is an a array of objects composed by name and reason attributes.The name object attribute indicates the field name of the request body causing the error.The reason attribute describes the reason of the error.Example: [{"name": "/data/estateSubTypes/trading", "reason": "must be equal to one of the allowed values: STORE, SHOWROOM_SPACE, SHOPPING_CENTRE, KIOSK, SALES_AREA."}] |
| errorSource | String | Can be one of the following values: body, requestParameter, headers, contentType in order to locate the source of the problem. |
Example
{
"type": "{{API_DOC_URL}}#section/Errors/Validation-Error",
"title": "Bad request",
"detail": "Your request has not been validated",
"instance": "00-652039077ca790cc11d3a80cc29dbeb9-ca5243f0e6c43195-00",
"errors": [
{
"name": "/space",
"reason": "must NOT have additional properties: space."
}
],
"errorSource": "body",
"status": 400
}
- Server 1:https://api.aviv-group.com/import-listings/v1
Production
- Server 2:https://api.aviv-group.com/sandbox/import-listings/v1
Sandbox
bearerAuth (http)
JWT Bearer authentication token