# Tasks and contacts

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

Source: https://leverage.immo/docs/tools/tasks-contacts/

## contacts_create

**Create Contact** · Write · Free

Create a contact. A person needs name (the surname; first_name and position optional; company_name on a person is the employer). An organization needs kind="organization" and company_name, and only company_name: the server mirrors it into name, so do not send both. Every read returns display_name, which is the field to render. Attach roles in the same call with property_links: [{ property_id, role, role_note?, is_primary? }]. The role belongs to the link, so one Hausverwaltung can be weg_manager on one property and sev_manager on another. Use organization_contact_id to say which company a person works for. Put an agreed rate in hourly_rate (EUR per hour, a number) with the conditions in rate_note ("netto, zzgl. Anfahrt"), never as prose in notes, where nothing can calculate with it.

REST: `POST /api/v1/contacts`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `kind` | `string` | no | Values: `person`, `organization` |
| `contact_type` | `string` | no | Values: `property_manager`, `broker`, `notary`, `bank`, `craftsman`, `tenant`, `tax_advisor`, `insurer`, `appraiser`, `lawyer`, `authority`, `seller`, `buyer`, `supplier`, `other` |
| `name` | `string \| null` | no |  |
| `first_name` | `string \| null` | no |  |
| `company_name` | `string \| null` | no |  |
| `position` | `string \| null` | no |  |
| `organization_contact_id` | `string \| null` | no |  |
| `email` | `string \| null` | no |  |
| `email_secondary` | `string \| null` | no |  |
| `phone` | `string \| null` | no |  |
| `phone_secondary` | `string \| null` | no |  |
| `mobile` | `string \| null` | no |  |
| `fax` | `string \| null` | no |  |
| `website` | `string \| null` | no |  |
| `street` | `string \| null` | no |  |
| `house_number` | `string \| null` | no |  |
| `address_addition` | `string \| null` | no |  |
| `post_code` | `string \| null` | no |  |
| `city` | `string \| null` | no |  |
| `country` | `string \| null` | no |  |
| `notes` | `string \| null` | no |  |
| `tags` | `array<string>` | no |  |
| `language` | `string \| null` | no |  |
| `do_not_contact` | `boolean` | no |  |
| `rating` | `integer \| null` | no |  |
| `hourly_rate` | `number \| null` | no |  |
| `rate_note` | `string \| null` | no |  |
| `external_ref` | `string \| null` | no |  |
| `property_links` | `array<object>` | no |  |

## contacts_delete

**Delete Contact** · Write · Destructive · Free

Delete a contact by id. It leaves contacts_list but still comes back with include_deleted, and tenancies that name the contact keep their tenant.

REST: `DELETE /api/v1/contacts/{id}`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes |  |

## contacts_get

**Get Contact** · Read · Free

Get one contact with its property_links (each carrying the role, an optional role_note and a property_label) and, for a person, the organization they work for. Render display_name: it already resolves name vs company_name.

REST: `GET /api/v1/contacts/{id}`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes |  |
| `include_deleted` | `boolean` | no |  |

## contacts_list

**List Contacts** · Read · Free

List contacts (people and companies) with the roles they hold on properties. Filter by property_id and/or role to answer "who is the Hausverwalter of this object" (role weg_manager; sev_manager is the Sondereigentums-/Mietverwalter), by contact_type or kind, or search names and email with q. Use contact_type supplier for a Lieferant with no building attached. Render display_name rather than picking between name and company_name yourself. do_not_contact is a hard opt-out: never draft a message to such a contact. rating is 1-5; null means not rated, not a bad rating.

REST: `GET /api/v1/contacts`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `property_id` | `string` | no |  |
| `role` | `string` | no | Values: `weg_manager`, `sev_manager`, `broker`, `notary`, `seller`, `buyer`, `tenant`, `craftsman`, `caretaker`, `bank`, `tax_advisor`, `insurer`, `appraiser`, `lawyer`, `advisory_board`, `authority`, `supplier`, `other` |
| `contact_type` | `string` | no | Values: `property_manager`, `broker`, `notary`, `bank`, `craftsman`, `tenant`, `tax_advisor`, `insurer`, `appraiser`, `lawyer`, `authority`, `seller`, `buyer`, `supplier`, `other` |
| `kind` | `string` | no | Values: `person`, `organization` |
| `q` | `string` | no |  |
| `include_deleted` | `string` | no | Values: `0`, `1`, `true`, `false` |
| `limit` | `integer` | no |  |
| `offset` | `integer` | no |  |

## contacts_patch

**Update Contact** · Write · Destructive · Free

Update a contact's fields by id; partial body. property_links is a replace-set: omit it to leave the links alone, or send the complete array (including []) to replace them. Rename an organization through company_name; name follows on its own. Send rating: null to clear a rating back to "not rated" (1-5 are the only ratings; there is no 0).

REST: `PATCH /api/v1/contacts/{id}`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `kind` | `string` | no | Values: `person`, `organization` |
| `contact_type` | `string` | no | Values: `property_manager`, `broker`, `notary`, `bank`, `craftsman`, `tenant`, `tax_advisor`, `insurer`, `appraiser`, `lawyer`, `authority`, `seller`, `buyer`, `supplier`, `other` |
| `name` | `string \| null` | no |  |
| `first_name` | `string \| null` | no |  |
| `company_name` | `string \| null` | no |  |
| `position` | `string \| null` | no |  |
| `organization_contact_id` | `string \| null` | no |  |
| `email` | `string \| null` | no |  |
| `email_secondary` | `string \| null` | no |  |
| `phone` | `string \| null` | no |  |
| `phone_secondary` | `string \| null` | no |  |
| `mobile` | `string \| null` | no |  |
| `fax` | `string \| null` | no |  |
| `website` | `string \| null` | no |  |
| `street` | `string \| null` | no |  |
| `house_number` | `string \| null` | no |  |
| `address_addition` | `string \| null` | no |  |
| `post_code` | `string \| null` | no |  |
| `city` | `string \| null` | no |  |
| `country` | `string \| null` | no |  |
| `notes` | `string \| null` | no |  |
| `tags` | `array<string>` | no |  |
| `language` | `string \| null` | no |  |
| `do_not_contact` | `boolean` | no |  |
| `rating` | `integer \| null` | no |  |
| `hourly_rate` | `number \| null` | no |  |
| `rate_note` | `string \| null` | no |  |
| `external_ref` | `string \| null` | no |  |
| `property_links` | `array<object>` | no |  |
| `id` | `string` | yes |  |

## tasks_create

**Create Task** · Write · Free

Create a task. Requires title; optional links are validated.

REST: `POST /api/v1/tasks`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `title` | `string` | yes |  |
| `description` | `string \| null` | no |  |
| `category` | `string` | no | Values: `general`, `bank`, `taxes`, `cashflow`, `rental` |
| `due_date` | `string \| null` | no |  |
| `property_id` | `string \| null` | no |  |
| `linked_unit_id` | `string \| null` | no |  |
| `linked_tenancy_id` | `integer \| null` | no |  |
| `linked_dd_issue_id` | `integer \| null` | no |  |
| `is_checked` | `boolean` | no |  |

## tasks_delete

**Delete Task** · Write · Destructive · Free

Delete a task by id.

REST: `DELETE /api/v1/tasks/{id}`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `integer` | yes |  |

## tasks_get

**Get Task** · Read · Free

Get one task with full linked context (property, unit, tenancy, DD issue).

REST: `GET /api/v1/tasks/{id}`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `integer` | yes |  |
| `include_deleted` | `boolean` | no |  |

## tasks_list

**List Tasks** · Read · Free

List tasks with optional filters (property_id, is_checked, category, include_deleted, limit, offset).

REST: `GET /api/v1/tasks`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `property_id` | `string` | no |  |
| `linked_dd_issue_id` | `integer` | no |  |
| `is_checked` | `string` | no | Values: `0`, `1`, `true`, `false` |
| `category` | `string` | no | Values: `general`, `bank`, `taxes`, `cashflow`, `rental` |
| `include_deleted` | `string` | no | Values: `0`, `1`, `true`, `false` |
| `limit` | `integer` | no |  |
| `offset` | `integer` | no |  |

## tasks_patch

**Update Task** · Write · Destructive · Free

Update a task's editable fields (e.g. title, checked state, category, linked property) by numeric id; partial body.

REST: `PATCH /api/v1/tasks/{id}`

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `title` | `string` | no |  |
| `description` | `string \| null` | no |  |
| `category` | `string` | no | Values: `general`, `bank`, `taxes`, `cashflow`, `rental` |
| `due_date` | `string \| null` | no |  |
| `property_id` | `string \| null` | no |  |
| `linked_unit_id` | `string \| null` | no |  |
| `linked_tenancy_id` | `integer \| null` | no |  |
| `linked_dd_issue_id` | `integer \| null` | no |  |
| `is_checked` | `boolean` | no |  |
| `id` | `integer` | yes |  |
