Contents
View as Markdown

Tenancies

5 tools. Generated from the MCP server: names, inputs and prices match the code.

Create Tenancy

Create one tenancy on a property, for a unit (unit_id from properties_units_list) and tenants who are already contacts (contact_ids from contacts_list or contacts_create, in lease order). A couple or a WG on one lease is one tenancy with every tenant in contact_ids, not one tenancy each. rent_net is the rent at the lease start; record later rent changes with tenancies_events_create. For many tenants from a rent roll use properties_rent_roll_apply. A retry with the same tenants, unit and start_date returns the existing tenancy (reused: true) unchanged; change it with tenancies_patch. Another tenancy on the same unit at the same time is not refused (a shared flat can hold two leases) but comes back in warnings as tenancy_overlaps: ask the user before you keep both, since both rents count.

Inputs

NameTypeRequiredDescription
unit_idstring | nullnoA unit of this property (properties_units_list); null or left out: the whole property.
contact_idsarray<string>noThe tenants, your contacts (contacts_list, contacts_create), in the order the lease names them; at most 20. A couple or a WG on one lease gets every tenant. Left out or []: no tenant yet.
start_datestringyesLease start, YYYY-MM-DD. rent_net is the rent from this date on.
end_datestring | nullnoLease end, YYYY-MM-DD; left out: open-ended.
rent_netnumberyesNettokaltmiete per month at the lease start, EUR. Required: a tenancy without a known rent is a vacancy, which this call does not create.
rent_net_targetnumber | nullnoMarket or target rent per month (Miete Soll), EUR; feeds the rent potential only, never the cashflow.
operating_costsnumbernoHausgeld share per month, EUR.
operating_costs_transferablenumbernoTenant prepayment per month (Nebenkostenvorauszahlung), EUR.
parking_space_rentnumbernoRent per parking space per month, EUR.
parking_spacesintegerno
property_idstringyesThe property (properties_list).

RESTPOST /api/v1/properties/{id}/tenancies

tenancies_delete

WriteDestructiveFree

Delete Tenancy

Delete a tenancy by id, for good, with its tenancy events. Use it for a tenancy that should never have existed (a duplicate, a wrong import). A lease that really ended is not deleted: set its end_date with tenancies_patch. The tenant contacts stay; a tenant link goes when no other tenancy backs it.

Inputs

NameTypeRequiredDescription
idintegeryes

RESTDELETE /api/v1/tenancies/{id}

Record Tenancy Event

Record a dated change on a tenancy: a rent increase (Mieterhöhung, Staffel- or Indexstufe), a month without rent (Mietausfall), new operating costs, a new tenant prepayment, new separate management costs or new parking. From the month of date on, the cashflow and the key figures use value instead of the tenancy field; earlier months keep the old one. value is the new monthly amount, never the difference. Record the rent history as one event per change, oldest first is fine; an announced future increase is an event with its future date, never rent_net_target. date must lie within the lease. Repeating the same change returns the stored event; a different value for the same type and date is refused (event_exists): to correct one, tenancies_events_delete it first.

Inputs

NameTypeRequiredDescription
typestringyesWhat changes; it decides what value means. rent_adjustment: a rent increase or decrease (Mieterhöhung, Staffel- or Indexstufe). rent_loss: no rent in that one month (Mietausfall). The others change operating costs, the tenant prepayment, separate management costs, parking rent per space or the number of parking spaces.Values:rent_adjustmentrent_lossoperating_cost_adjustmentoperating_cost_transferable_adjustmentseparate_property_management_adjustmentparking_space_rent_adjustmentparking_spaces_adjustment
valuenumbernoThe NEW monthly amount from that month on, never the difference. rent_adjustment: the new Nettokaltmiete, EUR 0 to 10000. operating_cost_adjustment: the new Hausgeld share, EUR 0 to 5000. operating_cost_transferable_adjustment: the new tenant prepayment (Nebenkosten), EUR 0 to 5000. separate_property_management_adjustment: EUR 0 to 650. parking_space_rent_adjustment: the new rent per space, EUR 0 to 1000. parking_spaces_adjustment: the new number of spaces, a whole number 0 to 60. rent_loss: leave it out.
datestringyesYYYY-MM-DD; the change applies from this month on. Within the lease: not before the month it starts, not after it ends.
tenancy_idintegeryesThe tenancy: properties_units_list, or properties_get for a tenancy without a unit.

RESTPOST /api/v1/tenancies/{id}/events

Delete Tenancy Event

Delete one dated change of a tenancy (event_id from properties_units_list or properties_get). The cashflow is computed as if it never happened.

Inputs

NameTypeRequiredDescription
tenancy_idintegeryes
event_idintegeryesFrom the tenancy events of properties_units_list or properties_get.

RESTDELETE /api/v1/tenancies/{id}/events/{eventId}

tenancies_patch

WriteDestructiveFree

Update Tenancy

Update a tenancy by id (from properties_units_list or properties_tenancies_import); partial body. Correct start_date/end_date, rent_net, operating_costs (total, Hausgeld share) or operating_costs_transferable (tenant prepayment, Nebenkosten), set operating_costs_non_transferable (the share the owner carries per Wirtschaftsplan; null derives it as Hausgeld minus prepayment) and operating_costs_reserve (the WEG reserve inside that share, not tax-deductible yet), move it with unit_id, or replace the tenants with contact_ids (the whole list, in lease order; [] removes every tenant). Set end_date to record a lease that ended (Auszug, Räumung); end_date null reopens it. Dates are YYYY-MM-DD. rent_net is the rent from start_date on, for every month of the lease: a rent that changed later (Mieterhöhung, Staffel, Index) is never patched here, it is a dated change with tenancies_events_create.

Inputs

NameTypeRequiredDescription
start_datestringno
end_datestring | nullno
rent_netnumberno
rent_net_targetnumber | nullno
operating_costsnumberno
operating_costs_transferablenumberno
operating_costs_non_transferablenumber | nullnoMonthly share of the Hausgeld the owner carries (nicht umlagefähig, per Wirtschaftsplan), at most operating_costs. null: Hausgeld minus prepayment.
operating_costs_reservenumber | nullnoMonthly WEG reserve (Erhaltungsrücklage) inside that owner share, per Wirtschaftsplan: a cost, but not tax-deductible until the WEG spends it. At most the owner share. null: none stated.
other_monthly_costsnumberno
parking_space_rentnumberno
parking_spacesintegerno
separate_property_management_costsnumberno
rent_due_on_the_dayinteger | nullno
has_vacancybooleanno
unit_idstring | nullno
contact_idsarray<string>noThe tenants, your contacts (contacts_list, contacts_create), in the order the lease names them; at most 20. Replaces every tenant of the tenancy: send the whole list, also the ones that stay. A couple or a WG on one lease gets every tenant. []: no tenant. Left out: the tenants stay.
idintegeryes

RESTPATCH /api/v1/tenancies/{id}