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
| Name | Type | Required | Description |
|---|---|---|---|
| unit_id | string | null | no | A unit of this property (properties_units_list); null or left out: the whole property. |
| contact_ids | array<string> | no | The 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_date | string | yes | Lease start, YYYY-MM-DD. rent_net is the rent from this date on. |
| end_date | string | null | no | Lease end, YYYY-MM-DD; left out: open-ended. |
| rent_net | number | yes | Nettokaltmiete 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_target | number | null | no | Market or target rent per month (Miete Soll), EUR; feeds the rent potential only, never the cashflow. |
| operating_costs | number | no | Hausgeld share per month, EUR. |
| operating_costs_transferable | number | no | Tenant prepayment per month (Nebenkostenvorauszahlung), EUR. |
| parking_space_rent | number | no | Rent per parking space per month, EUR. |
| parking_spaces | integer | no | |
| property_id | string | yes | The property (properties_list). |
RESTPOST /api/v1/properties/{id}/tenancies
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
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | yes |
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
| Name | Type | Required | Description |
|---|---|---|---|
| type | string | yes | What 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 |
| value | number | no | The 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. |
| date | string | yes | YYYY-MM-DD; the change applies from this month on. Within the lease: not before the month it starts, not after it ends. |
| tenancy_id | integer | yes | The 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
| Name | Type | Required | Description |
|---|---|---|---|
| tenancy_id | integer | yes | |
| event_id | integer | yes | From the tenancy events of properties_units_list or properties_get. |
RESTDELETE /api/v1/tenancies/{id}/events/{eventId}
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
| Name | Type | Required | Description |
|---|---|---|---|
| start_date | string | no | |
| end_date | string | null | no | |
| rent_net | number | no | |
| rent_net_target | number | null | no | |
| operating_costs | number | no | |
| operating_costs_transferable | number | no | |
| operating_costs_non_transferable | number | null | no | Monthly share of the Hausgeld the owner carries (nicht umlagefähig, per Wirtschaftsplan), at most operating_costs. null: Hausgeld minus prepayment. |
| operating_costs_reserve | number | null | no | Monthly 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_costs | number | no | |
| parking_space_rent | number | no | |
| parking_spaces | integer | no | |
| separate_property_management_costs | number | no | |
| rent_due_on_the_day | integer | null | no | |
| has_vacancy | boolean | no | |
| unit_id | string | null | no | |
| contact_ids | array<string> | no | The 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. |
| id | integer | yes |
RESTPATCH /api/v1/tenancies/{id}