GaraioREM v2
GaraioREM v2 does not call the shared webhook. Evorest pulls a GraphQL report from GaraioREM on a regular cycle during the day and opens deposits from that report. One organization can have more than one GaraioREM instance. Each instance is read on its own.
Evorest then publishes messages to a RabbitMQ recipient agreed for that organization. Evorest only publishes. It does not read messages from you. The report and the messages are set up together with Evorest, including credentials, the recipient, the routing keys, and the report.
Report
Section titled “Report”What Evorest asks for
Section titled “What Evorest asks for”Evorest asks for the rental contracts that start from five years in the past to a horizon in the future. The report is one table with one row per rental contract, and at most 5000 rows, with no paging. The column titles are snake_case.
Which rows open a deposit
Section titled “Which rows open a deposit”A row is opened when its rental_contract_status is aktiviert. Other statuses are skipped with the reason Contract not active. A row is also skipped when:
- it has no
rental_contract_reference, - a deposit with the same
rental_contract_referencealready exists in the organization and was not withdrawn (Contract with external ID already exists). A deposit that was withdrawn is opened again as a new one, - the reference is on an ignore list set up with Evorest.
Evorest never updates a deposit from a later report. Changes to an existing deposit are made in the property-manager app.
Columns
Section titled “Columns”| Column | Becomes |
|---|---|
rental_contract_reference | externalContractId. This is the id you see in every message below. |
rental_contract_id | The id of the contract in GaraioREM. Used for the link back in import-error tasks. |
rental_contract_status | Gate, see above. |
rental_contract_start | rentalStart. |
security_deposit | rentalDeposit, rounded to the nearest 0.05. |
street, street_number, zip, city | The leased property. |
owner_type (J or N), owner_name, owner_first_name, owner_last_name, owner_street, owner_street_number, owner_zip, owner_city | The owner. J is a company and uses owner_name. N is a person and uses the first and last name. |
property_manager_email, property_manager_first_name, property_manager_last_name, property_manager_language | The responsible property manager, as described in Open a deposit. |
assistent_email, assistent_first_name, assistent_last_name, assistent_language | The assistant who is copied on notifications. |
tenant_, tenant_2_, tenant_3_, tenant_4_ followed by person_type (J or N), first_name, last_name, email, phone_number, title, date_of_birth, nationality_code, language_code, company_name, uid_id, address_country_code, address_street, address_st_number, address_postal_code, address_city | Up to four tenants. J is a legal entity. |
The property id of the deposit is the reference without its last .segment: 13000.01.005.01 gives 13000.01.005.
How the data is read
Section titled “How the data is read”- The property address, owner address, and street rules are those of Open a deposit. An owner with a foreign or incomplete address is replaced by the organization’s address with
c/o, as there. tenant_language_codeof the first tenant must bede,fr,it, oren. Any other value makes the rowerrored. The languages of the other tenants are ignored.- The tenant email is taken from entries of the form
Email P,Email G,Email Anderefollowed by the address, in that order of preference. The phone number is taken fromTel Mobil,Tel P,Tel G,Tel Andere, in that order. A phone number without a country code is Swiss. titleHerris Mr.Frau,keine,Andere, anddare Ms.- The civil status is always
other. NationalityXZis read asXK. A UID without theCHE-prefix gets it. - A tenant after the first one with an incomplete address takes the address of the first tenant.
- Legal-entity and natural tenants should not be mixed. If a deposit has natural tenants, the legal tenants at positions 2 to 4 are removed. More than two legal tenants is an error.
Legal-entity tenants are drafts
Section titled “Legal-entity tenants are drafts”A deposit with a legal-entity tenant is always created as a draft. The responsible property manager completes it in the property-manager app. Evorest does not send the draft to the tenant. The company name is tenant_company_name. The legal form is inferred from it (ag, gmbh, otherwise other). The first signatory is the legal row, or else the first natural tenant. A second natural person becomes the second signatory.
After the import
Section titled “After the import”- Not pre-signed organizations. The deposit waits in
openingfor the property manager to sign in the property-manager app. A “ready to sign” task is sent to GaraioREM and an email to the property manager. - Pre-signed organizations. Evorest signs for the property manager and sends the deposit to the tenant without waiting for anyone, unless the organization has set a send delay.
Errors
Section titled “Errors”A row with missing or invalid data creates no deposit. The responsible property manager and the assistant get an email with the full list of problems, and a task is sent to GaraioREM (see Tasks). The same problem for the same contract is not reported again for 24 hours. The row is read again at every cycle, so correcting the data in GaraioREM is enough. No other message tells GaraioREM that the import failed.
Messages Evorest publishes
Section titled “Messages Evorest publishes”Each message is a JSON body { "eventType": "<key>", "data": { ... } }. The recipient you agreed with Evorest is in the AMQP header recipient. The routing keys are agreed at setup. The examples use <deposit-updates-key> and <documents-key>. eventType is the routing key of that message, except for tasks.
Delivery is best effort. Evorest does not wait for a confirmation from the broker, and a pay-in that fails halfway can be sent again with messages that you already have. Treat every message as possibly delivered twice. For deposit updates, the latest message per reference wins. For documents, relatedToReference plus fileName identify a document.
reference is the rental_contract_reference. remoteUrl is https://www.pm-app.evorest.ch/deposits/external-id/{reference}. It opens the deposit in the property-manager app.
Deposit updates
Section titled “Deposit updates”Pay-in. Sent when the deposit has become open. paidAmount is the full deposit in CHF, as a number.
{ "eventType": "<deposit-updates-key>", "data": { "reference": "514.320.02.03", "paidAmount": 3000, "remoteUrl": "https://www.pm-app.evorest.ch/deposits/external-id/514.320.02.03" }}Pay-out. refundedByInfo is the total paid to the tenant in CHF, as a number. refundedAt is when the deposit was paid out, an ISO 8601 UTC timestamp, or null if that time is not recorded yet.
{ "eventType": "<deposit-updates-key>", "data": { "reference": "514.320.02.03", "refundedAt": "2026-03-04T10:15:00.000Z", "refundedByInfo": 3000, "remoteUrl": "https://www.pm-app.evorest.ch/deposits/external-id/514.320.02.03" }}Payment details. Sent when the bank account is open. depositAccountNumber is the IBAN to pay into. custodianReference is present when one is agreed for your organization.
{ "eventType": "<deposit-updates-key>", "data": { "reference": "514.320.02.03", "depositAccountNumber": "CH0000000000000000000", "remoteUrl": "https://www.pm-app.evorest.ch/deposits/external-id/514.320.02.03", "processingState": { "de": "...", "fr": "...", "it": "...", "en": "..." } }}For a deposit with the insurance product, Evorest sends the same message without depositAccountNumber when the insurance is opened, and one with depositAccountNumber set to SwissCaution-ID: <id> and paidAmount set to the deposit when it is activated.
Processing state
Section titled “Processing state”processingState is an object with the same text in de, fr, it, and en. It is sent alone, with reference and remoteUrl, whenever the step of a deposit changes:
{ "eventType": "<deposit-updates-key>", "data": { "reference": "514.320.02.03", "remoteUrl": "https://www.pm-app.evorest.ch/deposits/external-id/514.320.02.03", "processingState": { "de": "Evorest: ...", "fr": "Evorest: ...", "it": "Evorest: ...", "en": "Evorest: In opening, tenant signature pending" } }}These are the English texts. The values are for people. Do not parse them.
| English text | Step |
|---|---|
| Evorest: In opening, property manager signature pending | Imported. The property manager has to sign. |
| Evorest: In opening, tenant signature pending | Sent to the tenant. |
| Evorest: Draft (import), further details required in Evorest | Imported as a draft. |
Evorest: Import error - see e-mail to <name> | The import failed. |
| Evorest: In opening, signed by tenant | The tenant signed. |
| Evorest: In opening, payment slip sent | The bank account is open. |
| Evorest: In opening, payment information sent | The insurance is open. |
| Evorest: Paid-in | Paid in. |
| Evorest: Insured | The insurance is active. |
| Evorest: In opening, co-signing required | A co-signature is needed on the opening. |
| Evorest: In closing, tenant signature pending | The closing was sent to the tenant. |
| Evorest: In closing, Signed by tenant | The tenant signed the closing. |
| Evorest: In closing, co-signing required | A co-signature is needed on the closing. |
| Evorest: Paid-out | Paid out. |
There is no message for a withdrawal.
Documents
Section titled “Documents”The PDF is not in the message. fetchUrl is a download link that stays valid for one hour. Fetch it right away.
{ "eventType": "<documents-key>", "data": { "relatedToReference": "514.320.02.03", "fetchUrl": "https://example.com/document.pdf", "docType": "Dokument", "relatedToType": "letting-tenancy-agreement", "fileName": "Evorest_01_PayInConfirmation_Example_45.1.42_07-10-2026.pdf" }}fileName starts with a prefix for the kind of document, followed by a name that Evorest translates into the tenant’s language.
| Prefix | Document |
|---|---|
Evorest_01_ | Pay-in confirmation. |
Evorest_02_ | Payment slip (QR bill). |
Evorest_03_ | Pay-out confirmation. |
Evorest_04_ | Insurance opening confirmation. |
Evorest_05_ | Signed Evorest deposit agreement, if agreed for your organization. |
Evorest_06_ | Insurance certificate. |
If tasks are switched on for your organization, Evorest also publishes a task to GaraioREM for each step that needs a person (a signature, an import error, a co-signature). They go to a separate routing key agreed at setup, and eventType is always Notification.Message.Created.
{ "eventType": "Notification.Message.Created", "data": { "subject": "514.320.02.03 - Missing information for opening via import", "message": "Opening via import for contract 514.320.02.03 failed. Reason: see e-mail", "backlinkUrl": "https://www.pm-app.evorest.ch/deposits/external-id/514.320.02.03", "sender": "Evorest", "externalReference": "<random uuid>", "masterdataReference": "514.320.02.03", "mimetype": "text/plain", "categoryCode": "SIC" }}recipientResponsibility (ASSISTANT, PROPERTY_MANAGER, or PROPERTY_ACCOUNTANT) and recipientUsername are present when a recipient is agreed. The language of subject and message is that of the property manager, and German if unknown. For an import error backlinkUrl points to the contract in GaraioREM.