Skip to content

365immo

365immo does not use the shared open-deposit body. A deposit is opened from two inputs that Evorest combines:

  1. the tenancy in the ERP report that Evorest reads, and
  2. an opening signal that 365immo sends for that tenancy.

Neither alone opens a deposit. external_contract_id is the tenancy reference in the ERP report. additional_external_contract_id is the 365immo case id. Evorest sends that case id back on every callback and keeps it on the deposit.

POST /webhook/immo365/opening-signal HTTP/1.1
Host: be-api.admin.evorest.ch
Content-Type: application/json
x-api-key: <your-api-key>
x-org-id: <org-id>
{
"external_contract_id": "514.320.02.03",
"additional_external_contract_id": "CASE-100"
}

Both fields are required strings and must not be empty. A number is not accepted. The organization header is x-org-id, not x-external-org-id.

HTTP 200 means the signal was stored:

{
"success": true,
"result": "success"
}

Every failure is HTTP 500, with result: errored and a reason. There is no 400, 401, or 404. The checks run in this order:

reasonWhen
Missing or invalid x-org-id headerNo x-org-id.
Organization not allowed to use featureThe organization id is unknown or not set up for 365immo.
Organization does not have API key configured to use featureEvorest has not issued a key yet.
Not Authorised!x-api-key is missing or wrong.
Missing or invalid external_contract_idThe field is missing, empty, or not a string.
Missing or invalid additional_external_contract_idThe field is missing, empty, or not a string.

The text of reason is for people. Branch on result.

  • Evorest stores the signal as pending. It does not expire.
  • The same signal again changes nothing. A new additional_external_contract_id for the same external_contract_id replaces the case id of the pending signal.
  • The signal can arrive before or after the tenancy shows up in the report. Evorest looks for a match every time it reads the report.
  • When a pending signal and a valid tenancy match, Evorest opens the deposit. The signal is then used up. A later signal for the same tenancy creates a new pending signal.
  • If the deposit could not be opened, for example because the data is incomplete, the signal stays pending and Evorest tries again on the next read.
  • If a deposit with this external_contract_id already exists and was not withdrawn, the tenancy is skipped and the signal stays pending. After a withdrawal the tenancy can be opened again with a new signal.

Evorest reads the tenancy from the ERP’s report interface, which is the same one that GaraioREM v2 uses. Evorest reads it on a regular cycle of minutes during the day, not on request, so an opening is never instant. The report columns and how each one becomes a deposit field are on that page.

For 365immo, a tenancy is opened when:

  • its rental_contract_status is validiert,
  • a pending opening signal with a case id exists for its rental_contract_reference, and
  • no non-withdrawn deposit with that reference exists.

A validiert tenancy without a signal is skipped with the reason No pending opening signal. A tenancy with any other status is skipped with Contract not validated.

If the data in the report is incomplete or invalid, no deposit is created and 365immo is not told. The responsible property manager gets an email that lists what is missing. Ask the property manager to fix the report and Evorest picks it up on the next read.

A deposit for a legal-entity tenant is created as a draft that the property manager completes in the property-manager app.

Evorest POSTs JSON to two URLs you provide at setup, one for the registration link and one for status changes. The header is x-api-key, the same key as above, and the content type is application/json.

Any HTTP 2xx answer counts as received. Evorest waits 30 seconds for an answer. After a failure it tries again straight away, up to ten attempts in total, with a delay that doubles from 0.1 seconds and never exceeds one second. If all attempts fail, Evorest gives up on that message. It is not sent again later, and the deposit on the Evorest side continues. Plan for a missed call: the next status change is sent as usual, and Contract status shows the real state.

Sent once the deposit has been created.

{
"external_contract_id": "514.320.02.03",
"additional_external_contract_id": "CASE-100",
"tenant_registration_url": "https://www.tenant-app.evorest.ch/de/register?email=tenant%40example.com"
}

The tenant does not get an opening email from Evorest when the deposit is first sent. The link is how the tenant gets to Evorest, so pass it on. The language segment of the link is the language code of the tenant in the report. The link is also sent for a draft, before the property manager has completed it.

Sent to the status URL when the deposit reaches a step. The body is only the transition. It does not include an IBAN or an amount.

{
"external_contract_id": "514.320.02.03",
"additional_external_contract_id": "CASE-100",
"status": "opening_signed",
"timestamp": "2026-10-07T12:00:00.000Z"
}
statusWhen
opening_signedAll tenants have signed the opening.
payment_details_readyThe bank account or the insurance is open and payment details are available.
deposit_fully_paidThe deposit is paid in and has become open.

timestamp is when Evorest sent the message, in UTC, ISO 8601. There are only these three statuses. Evorest sends nothing for a withdrawal, a closing, or a pay-out. Use Contract status if you need those.

The IBAN and the documents are not part of these callbacks. If they are set up for your organization, they reach the ERP as the messages described on the GaraioREM v2 page.