{ "openapi": "3.0.0", "paths": { "/v2/appointments": { "post": { "operationId": "AppointmentsController_createAppointment", "parameters": [], "requestBody": { "required": true, "description": "Appointment to be created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateAppointment" } } } }, "responses": { "201": { "description": "Appointment created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Appointment" } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Create a new appointment", "tags": [ "Appointments" ] } }, "/v2/contacts": { "get": { "description": "List of contacts received from casavi", "operationId": "ContactsController_getContacts", "parameters": [ { "name": "isRegistered", "required": false, "in": "query", "description": "Filter by whether the contact is registered or not", "schema": { "example": true, "type": "boolean" } }, { "name": "isInvited", "required": false, "in": "query", "description": "Filter by whether the contact has been invited or not", "schema": { "example": true, "type": "boolean" } }, { "name": "modifiedAfter", "required": false, "in": "query", "description": "Limit the returned Contacts based on their last modified date. Supports ISO 8601 date format.", "schema": { "example": "2020-05-02T10:00:00", "type": "string" } }, { "name": "role", "required": false, "in": "query", "description": "Enum: `OWNER` `RENTER` `RESIDENT` \n\nFilter by role", "schema": { "example": "OWNER", "type": "string" } }, { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "ContactList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/contacts?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/contacts?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/Contact" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get List of Contacts", "tags": [ "Contacts" ] } }, "/v2/contacts/custom-fields": { "get": { "description": "List of contacts custom fields for received from casavi", "operationId": "ContactsController_getCustomFields", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "CustomFieldList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/contacts/custom-fields?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/contacts/custom-fields?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/CustomField" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get contacts custom fields", "tags": [ "Contacts" ] } }, "/v2/contacts/{contactId}": { "get": { "description": "Get contact by Id", "operationId": "ContactsController_getContactById", "parameters": [ { "name": "contactId", "required": true, "in": "path", "description": "ID of contact to return", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Contact" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Contact not found" } }, "security": [ { "token": [] } ], "summary": "Get contact by Id", "tags": [ "Contacts" ] } }, "/v2/posts": { "post": { "operationId": "PostsController_createPost", "parameters": [], "requestBody": { "required": true, "description": "Post to be published", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatePost" } } } }, "responses": { "201": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Post" } } } }, "400": { "description": "Invalid data supplied" }, "409": { "description": "Conflict - a post with that id already exists" } }, "security": [ { "token": [] } ], "summary": "Publish a new post in the customer portal", "tags": [ "Posts" ] }, "get": { "description": "List of posts ", "operationId": "PostsController_getPosts", "parameters": [ { "name": "propertyId", "required": false, "in": "query", "description": "Property identifier", "schema": { "type": "string" } }, { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "PostList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/posts?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/posts?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/Post" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get all posts", "tags": [ "Posts" ] } }, "/v2/posts/{postId}": { "get": { "operationId": "PostsController_getPost", "parameters": [ { "name": "postId", "required": true, "in": "path", "description": "ID of the post to return", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Post" } } } }, "404": { "description": "Post not found" } }, "security": [ { "token": [] } ], "summary": "Retrieve a post", "tags": [ "Posts" ] }, "put": { "operationId": "PostsController_updatePost", "parameters": [ { "name": "postId", "required": true, "in": "path", "description": "ID of the post to update", "schema": { "type": "string" } } ], "requestBody": { "required": true, "description": "Post to be updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdatePost" } } } }, "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Post" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Post not found" }, "409": { "description": "Conflict - a post with that new id already exists" } }, "security": [ { "token": [] } ], "summary": "Update a post", "tags": [ "Posts" ] }, "delete": { "operationId": "PostsController_deletePost", "parameters": [ { "name": "postId", "required": true, "in": "path", "description": "ID of post to delete", "schema": { "type": "string" } } ], "responses": { "204": { "description": "Successful operation" }, "404": { "description": "Post not found" } }, "security": [ { "token": [] } ], "summary": "Delete a post", "tags": [ "Posts" ] } }, "/v2/authenticate": { "post": { "description": "key and secret can be obtained from your connectivity contact at casavi and give access to a whole casavi account.\n\n**Deprecation:**\n\nBefore this method used three parameters: `apiKey`, `email` and `password`.\nThis is deprecated, but still supported because we are mapping the parameters:\n\n- `secret` equals `password`\n- `key` equals `apiKey` and\n- `email` is just ignored.", "operationId": "AuthenticationController_getToken", "parameters": [], "requestBody": { "required": true, "description": "Data to authenticate into casavi", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenRequest" } } } }, "responses": { "200": { "description": "Token response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenResponse" } } } }, "400": { "description": "Invalid input" }, "401": { "description": "Unauthorized" } }, "summary": "Get access token", "tags": [ "Authentication" ] } }, "/v2/authenticate/refresh": { "post": { "description": "Refresh access token", "operationId": "AuthenticationController_refreshToken", "parameters": [], "requestBody": { "required": true, "description": "Data to authenticate into casavi", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenRefreshRequest" } } } }, "responses": { "200": { "description": "Token response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenResponse" } } } }, "400": { "description": "Invalid input" }, "401": { "description": "Unauthorized" } }, "summary": "Refresh access token", "tags": [ "Authentication" ] } }, "/v2/properties/custom-fields": { "get": { "description": "List of custom fields for properties received from casavi", "operationId": "PropertiesController_getPropertyCustomFields", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "CustomFieldList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/properties/custom-fields?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/properties/custom-fields?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/CustomField" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get properties custom fields", "tags": [ "Properties" ] } }, "/v2/properties": { "get": { "description": "List of properties received from casavi", "operationId": "PropertiesController_getProperties", "parameters": [ { "name": "modifiedAfter", "required": false, "in": "query", "description": "Limit the returned Properties based on their last modified date. Supports ISO 8601 date format.", "schema": { "example": "2020-05-02T10:00:00", "type": "string" } }, { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "PropertyList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/properties?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/properties?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/Property" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get List of Properties", "tags": [ "Properties" ] } }, "/v2/properties/{propertyId}": { "get": { "description": "Get property by Id", "operationId": "PropertiesController_getPropertyById", "parameters": [ { "name": "propertyId", "required": true, "in": "path", "description": "ID of property to return", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Property" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Property not found" } }, "security": [ { "token": [] } ], "summary": "Get property by Id", "tags": [ "Properties" ] } }, "/v2/properties/{propertyId}/units": { "get": { "description": "List of properties received from casavi", "operationId": "PropertiesController_getPropertyUnits", "parameters": [ { "name": "propertyId", "required": true, "in": "path", "description": "ID of property to return", "schema": { "type": "string" } }, { "name": "includeInactiveContracts", "required": false, "in": "query", "description": "Toggle to include inactive contracts in the response", "schema": { "type": "boolean" } }, { "name": "modifiedAfter", "required": false, "in": "query", "description": "Limit the response to include only those units modified after a given date. Supports ISO 8601 date format.", "schema": { "type": "string" } }, { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "UnitList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/properties/P-00451/units?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/properties/P-00451/units?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/Unit" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get all units of a property", "tags": [ "Properties" ] } }, "/v2/properties/{propertyId}/posts": { "get": { "operationId": "PropertiesController_getPropertyPosts", "parameters": [ { "name": "propertyId", "required": true, "in": "path", "description": "ID of property to return", "schema": { "type": "string" } }, { "name": "showOnInfoboard", "required": false, "in": "query", "description": "Limit the response to include only posts that are shown on info board", "schema": { "type": "boolean" } }, { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "PostList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/properties/P-00451/posts?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/properties/P-00451/posts?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/Post" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get all posts of a property", "tags": [ "Properties" ] } }, "/v2/properties/{propertyId}/appointments": { "get": { "description": "List of appointments of the specified property in casavi", "operationId": "PropertiesController_getPropertyAppointments", "parameters": [ { "name": "propertyId", "required": true, "in": "path", "description": "ID of the property of the appointments to be returned", "schema": { "type": "string" } }, { "name": "showOnInfoboard", "required": false, "in": "query", "description": "Limit the response to include only those appointments that are shown on the board", "schema": { "type": "boolean" } }, { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "PropertyAppointmentList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/properties/P-00451/appointments?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/properties/P-00451/appointments?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/PropertyAppointment" }, "type": "array" } } } } } } }, "security": [ { "token": [] } ], "summary": "Get appointments of a property", "tags": [ "Properties" ] } }, "/v2/properties/{propertyId}/responsibilities": { "get": { "operationId": "PropertiesController_getPropertyResponsibilities", "parameters": [ { "name": "propertyId", "required": true, "in": "path", "description": "ID of property", "schema": { "type": "string" } }, { "name": "showOnPortal", "required": false, "in": "query", "description": "Limit the response to include only responsibilities that are shown on portal", "schema": { "type": "boolean" } }, { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "ResponsibilityContactList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/properties/P-00451/responsibilities?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/properties/P-00451/responsibilities?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/ResponsibilityContact" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get responsibilities of a property", "tags": [ "Properties" ] } }, "/v2/consumption/resources": { "get": { "operationId": "ConsumptionController_getResources", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "ConsumptionResourceList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/consumption/resources?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/consumption/resources?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/ConsumptionResource" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get List of Consumption Resources", "tags": [ "Consumptions" ] }, "post": { "operationId": "ConsumptionController_createResource", "parameters": [], "requestBody": { "required": true, "description": "Consumption resource data to be imported into casavi", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateConsumptionResource" } } } }, "responses": { "201": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConsumptionResource" } } } }, "400": { "description": "Invalid data supplied" }, "409": { "description": "Conflict - a resource with that id already exists" } }, "security": [ { "token": [] } ], "summary": "Create Consumption Resource", "tags": [ "Consumptions" ] } }, "/v2/consumption/resources/{resourceId}": { "get": { "operationId": "ConsumptionController_getResource", "parameters": [ { "name": "resourceId", "required": true, "in": "path", "description": "ID of consumption resource to return", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConsumptionResource" } } } }, "404": { "description": "Consumption resource not found" } }, "security": [ { "token": [] } ], "summary": "Get consumption resource by Id", "tags": [ "Consumptions" ] }, "put": { "operationId": "ConsumptionController_updateResource", "parameters": [ { "name": "resourceId", "required": true, "in": "path", "description": "ID of consumption resource to update", "schema": { "type": "string" } } ], "requestBody": { "required": true, "description": "Consumption resource data to be updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateConsumptionResource" } } } }, "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConsumptionResource" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Consumption resource not found" } }, "security": [ { "token": [] } ], "summary": "Update consumption resource", "tags": [ "Consumptions" ] }, "delete": { "operationId": "ConsumptionController_deleteResource", "parameters": [ { "name": "resourceId", "required": true, "in": "path", "description": "ID of consumption resource to delete", "schema": { "type": "string" } } ], "responses": { "204": { "description": "Successful operation" }, "404": { "description": "Consumption resource not found" } }, "security": [ { "token": [] } ], "summary": "Deletes a consumption resource", "tags": [ "Consumptions" ] } }, "/v2/consumption/units/{unitId}/meters": { "get": { "operationId": "ConsumptionController_getMetersByUnit", "parameters": [ { "name": "unitId", "required": true, "in": "path", "description": "ID of unit", "schema": { "type": "string" } }, { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "ConsumptionMeterForUnitList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/consumption/units/P-00451-0001/meters?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/consumption/units/P-00451-0001/meters?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/ConsumptionMeterForUnit" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Unit not found" } }, "security": [ { "token": [] } ], "summary": "Get List of Meters by unit", "tags": [ "Consumptions" ] }, "post": { "operationId": "ConsumptionController_createMeterForUnit", "parameters": [ { "name": "unitId", "required": true, "in": "path", "description": "ID of unit", "schema": { "type": "string" } } ], "requestBody": { "required": true, "description": "Meter data to be imported into casavi", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateConsumptionMeter" } } } }, "responses": { "201": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConsumptionMeterForUnit" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Resource or unit not found" }, "409": { "description": "Conflict - a meter with that id already exists" } }, "security": [ { "token": [] } ], "summary": "Create Meter for unit", "tags": [ "Consumptions" ] } }, "/v2/consumption/properties/{communityId}/meters": { "get": { "operationId": "ConsumptionController_getMetersByCommunity", "parameters": [ { "name": "communityId", "required": true, "in": "path", "description": "ID of community", "schema": { "type": "string" } }, { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "ConsumptionMeterForCommunityList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/consumption/properties/P-00451/meters?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/consumption/properties/P-00451/meters?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/ConsumptionMeterForCommunity" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Community not found" } }, "security": [ { "token": [] } ], "summary": "Get List of Meters by community", "tags": [ "Consumptions" ] }, "post": { "operationId": "ConsumptionController_createMeterForCommunity", "parameters": [ { "name": "communityId", "required": true, "in": "path", "description": "ID of community", "schema": { "type": "string" } } ], "requestBody": { "required": true, "description": "Meter data to be imported into casavi", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateConsumptionMeter" } } } }, "responses": { "201": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConsumptionMeterForCommunity" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Resource or community not found" }, "409": { "description": "Conflict - a meter with that id already exists" } }, "security": [ { "token": [] } ], "summary": "Create Meter for community", "tags": [ "Consumptions" ] } }, "/v2/consumption/meters": { "get": { "operationId": "ConsumptionController_getMeters", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "ConsumptionMeterList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/consumption/meters?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/consumption/meters?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/ConsumptionMeter" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get List of Meters", "tags": [ "Consumptions" ] } }, "/v2/consumption/meters/{meterId}": { "get": { "operationId": "ConsumptionController_getMeter", "parameters": [ { "name": "meterId", "required": true, "in": "path", "description": "ID of consumption meter to return", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConsumptionMeter" } } } }, "404": { "description": "Consumption meter not found" } }, "security": [ { "token": [] } ], "summary": "Get consumption meter by Id", "tags": [ "Consumptions" ] }, "put": { "operationId": "ConsumptionController_updateMeter", "parameters": [ { "name": "meterId", "required": true, "in": "path", "description": "ID of consumption meter to update", "schema": { "type": "string" } } ], "requestBody": { "required": true, "description": "Meter to be updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateConsumptionMeter" } } } }, "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConsumptionMeter" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Consumption meter not found" } }, "security": [ { "token": [] } ], "summary": "Update consumption meter", "tags": [ "Consumptions" ] }, "delete": { "operationId": "ConsumptionController_deleteMeter", "parameters": [ { "name": "meterId", "required": true, "in": "path", "description": "ID of consumption meter to delete", "schema": { "type": "string" } } ], "responses": { "204": { "description": "Successful operation" }, "404": { "description": "Consumption meter not found" } }, "security": [ { "token": [] } ], "summary": "Deletes a consumption meter", "tags": [ "Consumptions" ] } }, "/v2/consumption/meters/{meterId}/measurements": { "get": { "operationId": "ConsumptionController_getMeasurementsByMeter", "parameters": [ { "name": "meterId", "required": true, "in": "path", "description": "ID of meter", "schema": { "type": "string" } }, { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "ConsumptionMeasurementList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/consumption/meters/meter01/measurements?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/consumption/meters/meter01/measurements?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/ConsumptionMeasurement" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Consumption meter not found" } }, "security": [ { "token": [] } ], "summary": "Get List of Consumption Measurements by meter", "tags": [ "Consumptions" ] } }, "/v2/consumption/measurements": { "get": { "description": "This list is paged, so you will always see maximum of 50 items. Control the displayed offset with `page`", "operationId": "ConsumptionController_getMeasurements", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "ConsumptionMeasurementList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/consumption/measurements?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/consumption/measurements?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/ConsumptionMeasurement" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get List of Consumption Measurements", "tags": [ "Consumptions" ] }, "post": { "operationId": "ConsumptionController_createMeasurements", "parameters": [], "requestBody": { "required": true, "description": "Consumption measurements to be imported into casavi", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CreateConsumptionMeasurement" } } } } }, "responses": { "201": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateConsumptionMeasurementsResponse" } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Create bulk Consumption Measurements", "tags": [ "Consumptions" ] } }, "/v2/consumption/measurements/{measurementId}": { "get": { "operationId": "ConsumptionController_getMeasurement", "parameters": [ { "name": "measurementId", "required": true, "in": "path", "description": "ID of consumption measurement to return. This is our internal id", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConsumptionMeasurement" } } } }, "404": { "description": "Consumption measurement not found" } }, "security": [ { "token": [] } ], "summary": "Get consumption measurement by Id", "tags": [ "Consumptions" ] }, "put": { "operationId": "ConsumptionController_updateMeasurement", "parameters": [ { "name": "measurementId", "required": true, "in": "path", "description": "ID of consumption measurement to update. This is our internal id", "schema": { "type": "integer" } } ], "requestBody": { "required": true, "description": "Consumption measurement to be updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateConsumptionMeasurement" } } } }, "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConsumptionMeasurement" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Consumption measurement not found" } }, "security": [ { "token": [] } ], "summary": "Update consumption measurement", "tags": [ "Consumptions" ] }, "delete": { "operationId": "ConsumptionController_deleteMeasurement", "parameters": [ { "name": "measurementId", "required": true, "in": "path", "description": "ID of consumption measurement to delete. This is our internal id", "schema": { "type": "integer" } } ], "responses": { "204": { "description": "Successful operation" }, "404": { "description": "Consumption measurement not found" } }, "security": [ { "token": [] } ], "summary": "Deletes a consumption measurement", "tags": [ "Consumptions" ] } }, "/v2/documents": { "post": { "operationId": "DocumentsController_uploadDocument", "parameters": [], "requestBody": { "required": true, "description": "Each document to be imported needs at least an id, title and either\ncontent (store the document in our file system) or location and resource (keep the document\nin the original storage system and only store the metadata in casavi).\nIf the same document (as identified by the id) is imported again, then existing documents are updated.\n\nDocuments can be deleted when supplied with `delete: true`. Then only an id is needed.\n\n> Attention: The maximum body size for file uploads is 15Mb, however due to the base64 encoding this limit is practically ~10Mb.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateDocument" } } } }, "responses": { "202": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateDocumentResponse" } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Upload a new document or change an existing one.", "tags": [ "Documents", "Documents" ] } }, "/v2/documents/types": { "get": { "operationId": "DocumentsController_getDocumentTypes", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "DocumentTypeList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/documents/types?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/documents/types?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/DocumentType" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get a list of document types", "tags": [ "Documents", "Document types" ] } }, "/v2/documents/{documentId}": { "get": { "operationId": "DocumentsController_getDocument", "parameters": [ { "name": "documentId", "required": true, "in": "path", "description": "id of the document to retrieve", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Document" } } } }, "404": { "description": "Document not found" } }, "security": [ { "token": [] } ], "summary": "Get information about a document", "tags": [ "Documents", "Documents" ] } }, "/v2/documents-octeon": { "post": { "operationId": "DocumentsOcteonController_uploadDocument", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateDocument" } } } }, "responses": { "201": { "description": "" } }, "security": [ { "token": [] } ], "tags": [ "DocumentsOcteon" ] } }, "/v2/files": { "post": { "description": "Upload files to later use them as attachments for tickets and ticket commnts. Maximum request size is 15 MB.", "operationId": "FilesController_uploadFile", "parameters": [ { "name": "Content-Type", "in": "header", "description": "MIME type of the file. Example: `image/jpeg`", "required": true, "schema": { "type": "string" } }, { "name": "X-Filename", "in": "header", "description": "Name of the file to be displayed after download. Example: `my-wonderful-flat.jpg`", "required": true, "schema": { "type": "string" } } ], "requestBody": { "required": true, "description": "Binary data of the file", "content": { "*/*": { "schema": { "$ref": "#/components/schemas/UploadFile" } } } }, "responses": { "201": { "description": "File has been received and stored. It will return the id of the file", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UploadFileResponse" } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "File upload", "tags": [ "Files" ] } }, "/v2/import": { "post": { "description": "The import endpoint takes in a master data object and asynchronously imports it into casavi.\n> Attention: The maximum body size for file uploads is 15Mb. We recommend not sending more than 20k entities at once.", "operationId": "ImportController_importMasterData", "parameters": [], "requestBody": { "required": true, "description": "Data to be imported into casavi", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MasterData" } } } }, "responses": { "202": { "description": "The import has been received and casavi will start the import.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ImportMasterDataResponse" } } } } }, "security": [ { "token": [] } ], "summary": "Import", "tags": [ "Import" ] } }, "/v2/import-octeon": { "post": { "operationId": "ImportOcteonController_importMasterData", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MasterData" } } } }, "responses": { "201": { "description": "" } }, "security": [ { "token": [] } ], "tags": [ "ImportOcteon" ] } }, "/v2/jobs/{jobId}": { "get": { "description": "Returns the status of a running import.", "operationId": "JobsController_getJob", "parameters": [ { "name": "jobId", "required": true, "in": "path", "description": "Id of the import (Returned when starting an import (POST /import))", "schema": { "example": "58eca7a398af3a14a3af2efe", "type": "string" } } ], "responses": { "200": { "description": "Information about the job", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ImportJob" } } } }, "404": { "description": "No job found" } }, "security": [ { "token": [] } ], "summary": "Information about a job", "tags": [ "Import" ] } }, "/v2/restHooks": { "get": { "operationId": "RestHooksController_getHooks", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "RestHookGetResponseList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/restHooks?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/restHooks?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/RestHookGetResponse" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get the list of subscribed webhooks", "tags": [ "REST Hooks" ] }, "post": { "description": "Create a new webhook subscription to receive updates for a specific event. You can find\nthe [structure of the event you will receive](#tag/RestHook-Event-Model) here.\nBy default, only HTTPS endpoints are accepted for webhook subscribers. Besides, we also support Basic Auth\nto keep your endpoint secure. This feature is optional. However, we highly recommend you should use it\nto protect your customers information in a secure manner. The response includes a `Location` header with the url to delete the webhook subscription.", "operationId": "RestHooksController_createHook", "parameters": [], "requestBody": { "required": true, "description": "Webhook data for subscription.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RestHookCreate" } } } }, "responses": { "201": { "description": "Successful operation", "headers": { "Location": { "schema": { "type": "string" }, "description": "Url to delete the webhook" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RestHookCreateResponse" } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Create a new webhook subscription", "tags": [ "REST Hooks" ] } }, "/v2/restHooks/{hookId}": { "delete": { "operationId": "RestHooksController_deleteHook", "parameters": [ { "name": "hookId", "required": true, "in": "path", "description": "id of webhook to delete", "schema": { "example": 11, "type": "number" } } ], "responses": { "204": { "description": "Successful operation" }, "404": { "description": "Hook not found" } }, "security": [ { "token": [] } ], "summary": "Delete webhook subscription by hook id", "tags": [ "REST Hooks" ] } }, "/v2/staff": { "get": { "description": "List of staff members in casavi", "operationId": "StaffController_getStaff", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "StaffMemberList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/staff?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/staff?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/StaffMember" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get List of staff members", "tags": [ "Staff" ] }, "post": { "operationId": "StaffController_createStaffMember", "parameters": [], "requestBody": { "required": true, "description": "Staff member data for create", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StaffMemberCreate" } } } }, "responses": { "201": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StaffMember" } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Create a new staff member", "tags": [ "Staff" ] } }, "/v2/staff/{contactId}": { "get": { "operationId": "StaffController_getStaffMember", "parameters": [ { "name": "contactId", "required": true, "in": "path", "description": "ID of contact to return", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StaffMember" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Staff member not found" } }, "security": [ { "token": [] } ], "summary": "Get staff member by ID", "tags": [ "Staff" ] } }, "/v2/units/custom-fields": { "get": { "description": "List of units custom fields for received from casavi", "operationId": "UnitsController_getCustomFields", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "CustomFieldList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/units/custom-fields?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/units/custom-fields?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/CustomField" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get units custom fields", "tags": [ "Units" ] } }, "/v2/units": { "get": { "operationId": "UnitsController_getAllUnits", "parameters": [ { "name": "includeInactiveContracts", "required": false, "in": "query", "description": "Toggle to include inactive contracts in the response", "schema": { "type": "boolean" } }, { "name": "modifiedAfter", "required": false, "in": "query", "description": "Limit the response to include only those units modified after a given date. Supports ISO 8601 date format.", "schema": { "example": "2020-05-02T10:00:00", "type": "string" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "UnitList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/units?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/units?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/Unit" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get all units", "tags": [ "Units" ] } }, "/v2/units/{unitId}": { "get": { "operationId": "UnitsController_getUnitById", "parameters": [ { "name": "unitId", "required": true, "in": "path", "description": "ID of unit to return", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Unit" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Unit not found" } }, "security": [ { "token": [] } ], "summary": "Get unit by Id", "tags": [ "Units" ] } }, "/v2/tickets": { "get": { "description": "This returns a list of max 50 tickets, use the query parameter page to request the next 50.", "operationId": "TicketsController_getTickets", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } }, { "name": "ticketType", "required": false, "in": "query", "description": "Limit the response to include only those tickets with the given ticket type", "schema": { "type": "string" } }, { "name": "modifiedAfter", "required": false, "in": "query", "description": "Limit the response to include only those tickets modified after a given date. Supports ISO 8601 date format.", "schema": { "example": "2020-05-02T10:00:00", "type": "string" } }, { "name": "createdAfter", "required": false, "in": "query", "description": "Limit the response to include only those tickets created after a given date. Supports ISO 8601 date format.", "schema": { "example": "2020-05-02T10:00:00", "type": "string" } }, { "name": "propertyId", "required": false, "in": "query", "description": "id of a property to filter the list of tickets by", "schema": { "example": "P-00451", "type": "string" } }, { "name": "unitId", "required": false, "in": "query", "description": "id of a unit to filter the list of tickets by", "schema": { "example": "P-00451-004", "type": "string" } }, { "name": "status", "required": false, "in": "query", "description": "Filter by status", "schema": { "type": "array", "items": { "type": "string", "enum": [ "PENDING", "OPEN", "CLOSED", "INPROGRESS", "POSTPONED" ] } } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "TicketSimpleList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/tickets?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/tickets?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/TicketSimple" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get list of Tickets", "tags": [ "Tickets", "Tickets" ] }, "post": { "operationId": "TicketsController_createTicket", "parameters": [], "requestBody": { "required": true, "description": "Ticket data to be imported into casavi", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTicket" } } } }, "responses": { "201": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Ticket" } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Create a new ticket", "tags": [ "Tickets", "Tickets" ] } }, "/v2/tickets/types": { "get": { "operationId": "TicketsController_getTicketTypes", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "TicketTypeList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/tickets/types?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/tickets/types?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/TicketType" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get a list of ticket types", "tags": [ "Tickets", "Ticket types" ] } }, "/v2/tickets/type-groups": { "get": { "operationId": "TicketsController_getTicketTypeGroups", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "TicketTypeGroupList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/tickets/type-groups?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/tickets/type-groups?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/TicketTypeGroup" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get a list of ticket type groups", "tags": [ "Tickets", "Ticket type groups" ] } }, "/v2/tickets/checklists": { "get": { "operationId": "TicketsController_getChecklistsTemplate", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "TicketChecklistTemplateList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/tickets/checklists?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/tickets/checklists?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/TicketChecklistTemplate" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get ticket checklists template", "tags": [ "Tickets", "Ticket checklists" ] } }, "/v2/tickets/orders": { "get": { "operationId": "TicketsController_getOrders", "parameters": [ { "name": "status", "required": false, "in": "query", "description": "Enum: `OPEN` `ACCEPTED` `COMPLETED` `DECLINED`\n\nOrder status", "schema": { "type": "string" } }, { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "TicketOrderCustomList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/tickets/orders?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/tickets/orders?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/TicketOrderCustom" }, "type": "array" } } } } } } }, "security": [ { "token": [] } ], "summary": "Get orders", "tags": [ "Tickets", "Orders" ] } }, "/v2/tickets/{ticketId}": { "get": { "operationId": "TicketsController_getTicketById", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "description": "ID of ticket to return", "schema": { "example": "c8a375b3-d92f-43c2-b836-a5ac315c9c97", "type": "string" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Ticket" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Ticket not found" } }, "security": [ { "token": [] } ], "summary": "Get a ticket by ID", "tags": [ "Tickets", "Tickets" ] }, "put": { "operationId": "TicketsController_updateTicketById", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "description": "ID of ticket to update", "schema": { "example": "c8a375b3-d92f-43c2-b836-a5ac315c9c97", "type": "string" } } ], "requestBody": { "required": true, "description": "Ticket data to be updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateTicket" } } } }, "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Ticket" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Ticket not found" } }, "security": [ { "token": [] } ], "summary": "Update an existing ticket", "tags": [ "Tickets", "Tickets" ] }, "delete": { "operationId": "TicketsController_deleteTicket", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "description": "ID of ticket to delete", "schema": { "example": "c8a375b3-d92f-43c2-b836-a5ac315c9c97", "type": "string" } } ], "responses": { "204": { "description": "Successful operation" }, "404": { "description": "Ticket not found" } }, "security": [ { "token": [] } ], "summary": "Delete a ticket", "tags": [ "Tickets", "Tickets" ] } }, "/v2/tickets/{ticketId}/comments": { "get": { "operationId": "TicketsController_getTicketComments", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "description": "ID of ticket", "schema": { "example": "c8a375b3-d92f-43c2-b836-a5ac315c9c97", "type": "string" } }, { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "TicketCommentList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/tickets/20131/comments?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/tickets/20131/comments?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/TicketComment" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get comments of a ticket", "tags": [ "Tickets", "Ticket comments" ] }, "post": { "description": "Comment on a ticket. Text is required and parsed as markdown upon\ndisplay. If neither authorId nor authorEmail is specified the account name\nwill be used instead.", "operationId": "TicketsController_commentTicket", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "description": "ID of ticket", "schema": { "example": "c8a375b3-d92f-43c2-b836-a5ac315c9c97", "type": "string" } } ], "requestBody": { "required": true, "description": "Comment data to be imported into casavi", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTicketComment" } } } }, "responses": { "201": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketComment" } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Comment ticket", "tags": [ "Tickets", "Ticket comments" ] } }, "/v2/tickets/{ticketId}/comments/{commentId}": { "get": { "description": "Get ticket comment", "operationId": "TicketsController_getTicketComment", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "description": "ID of ticket", "schema": { "example": "c8a375b3-d92f-43c2-b836-a5ac315c9c97", "type": "string" } }, { "name": "commentId", "required": true, "in": "path", "description": "ID of comment to return", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketComment" } } } }, "404": { "description": "Ticket comment not found" } }, "security": [ { "token": [] } ], "summary": "Get ticket comment", "tags": [ "Tickets", "Ticket comments" ] }, "put": { "description": "Update ticket comment", "operationId": "TicketsController_updateTicketComment", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "description": "ID of ticket", "schema": { "example": "c8a375b3-d92f-43c2-b836-a5ac315c9c97", "type": "string" } }, { "name": "commentId", "required": true, "in": "path", "description": "ID of comment to update", "schema": { "type": "string" } } ], "requestBody": { "required": true, "description": "Comments data to be imported into casavi", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateTicketComment" } } } }, "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketComment" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Ticket comment not found" } }, "security": [ { "token": [] } ], "summary": "Update ticket comment", "tags": [ "Tickets", "Ticket comments" ] } }, "/v2/tickets/{ticketId}/surveys": { "post": { "description": "Add new ticket survey", "operationId": "TicketsController_addTicketSurvey", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "description": "ID of ticket", "schema": { "example": "c8a375b3-d92f-43c2-b836-a5ac315c9c97", "type": "string" } } ], "requestBody": { "required": true, "description": "Ticket survey data to be imported into casavi", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTicketSurvey" } } } }, "responses": { "201": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketSurvey" } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Create ticket survey", "tags": [ "Tickets", "Tickets" ] } }, "/v2/tickets/{ticketId}/owner-assembly/{ownerAssemblyId}": { "put": { "operationId": "TicketsController_addConferenceLinkToOwnerAssembly", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "description": "ID of ticket", "schema": { "example": "c8a375b3-d92f-43c2-b836-a5ac315c9c97", "type": "string" } }, { "name": "ownerAssemblyId", "required": true, "in": "path", "description": "ID of owner assembly", "schema": { "example": "5fc9e241-1926-4398-b174-c5a8bb2a5d67", "type": "string" } } ], "requestBody": { "required": true, "description": "Conference link data to be associated with the identified owner assembly", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateConferenceLink" } } } }, "responses": { "204": { "description": "Successful operation" }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Associate conference link with owner assembly", "tags": [ "Tickets", "Owner Assembly" ] } }, "/v2/tickets/{ticketId}/orders": { "post": { "description": "Add new ticket order", "operationId": "TicketsController_createTicketOrder", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "description": "ID of ticket", "schema": { "example": "c8a375b3-d92f-43c2-b836-a5ac315c9c97", "type": "string" } } ], "requestBody": { "required": true, "description": "Orders data to be imported into casavi", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTicketOrder" } } } }, "responses": { "201": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketOrder" } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Create ticket order", "tags": [ "Tickets", "Orders" ] }, "get": { "operationId": "TicketsController_getTicketOrders", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "description": "ID of ticket", "schema": { "example": "c8a375b3-d92f-43c2-b836-a5ac315c9c97", "type": "string" } }, { "name": "status", "required": false, "in": "query", "description": "Enum: `OPEN` `ACCEPTED` `COMPLETED` `DECLINED`\n\nOrder status", "schema": { "type": "string" } }, { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "TicketOrderList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/tickets/1237/orders?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/tickets/1237/orders?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/TicketOrder" }, "type": "array" } } } } } } }, "security": [ { "token": [] } ], "summary": "Get orders of a ticket", "tags": [ "Tickets", "Orders" ] } }, "/v2/tickets/{ticketId}/orders/{orderId}": { "get": { "operationId": "TicketsController_getTicketOrder", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "description": "ID of ticket", "schema": { "example": "c8a375b3-d92f-43c2-b836-a5ac315c9c97", "type": "string" } }, { "name": "orderId", "required": true, "in": "path", "description": "Id of order", "schema": { "example": "T-000987", "type": "string" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketOrderWithComments" } } } }, "404": { "description": "Ticket order not found" } }, "security": [ { "token": [] } ], "summary": "Get ticket order by ID", "tags": [ "Tickets", "Orders" ] }, "put": { "operationId": "TicketsController_updateTicketOrder", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "description": "ID of ticket", "schema": { "example": "c8a375b3-d92f-43c2-b836-a5ac315c9c97", "type": "string" } }, { "name": "orderId", "required": true, "in": "path", "description": "Id of order", "schema": { "example": "T-000987", "type": "string" } } ], "requestBody": { "required": true, "description": "Orders data to be imported into casavi", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateTicketOrder" } } } }, "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TicketOrderWithComments" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Ticket order not found" } }, "security": [ { "token": [] } ], "summary": "Update ticket order", "tags": [ "Tickets", "Orders" ] }, "delete": { "operationId": "TicketsController_deleteTicketOrder", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "description": "ID of ticket", "schema": { "example": "c8a375b3-d92f-43c2-b836-a5ac315c9c97", "type": "string" } }, { "name": "orderId", "required": true, "in": "path", "description": "Id of order", "schema": { "example": "T-000987", "type": "string" } } ], "responses": { "204": { "description": "Successful operation" }, "404": { "description": "Ticket order not found" } }, "security": [ { "token": [] } ], "summary": "Delete ticket order", "tags": [ "Tickets", "Orders" ] } }, "/v2/tickets/orders/types": { "get": { "operationId": "TicketsController_getTicketOrderTypes", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "TicketOrderTypeList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/tickets/orders/types?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/tickets/orders/types?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/TicketOrderType" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get a list of order types", "tags": [ "Tickets", "Order types" ] } }, "/v2/tickets/{ticketId}/checklists": { "get": { "operationId": "TicketsController_getTicketChecklist", "parameters": [ { "name": "ticketId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "TicketChecklistList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/tickets/:ticketId/checklists?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/tickets/:ticketId/checklists?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/TicketChecklist" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get the checklists of a specific ticket", "tags": [ "Tickets", "Ticket checklists" ] } }, "/v2/subcommunities": { "get": { "description": "List of subcommunities received from casavi", "operationId": "SubcommunitiesController_getSubcommunities", "parameters": [ { "name": "page", "required": false, "in": "query", "description": "Page number", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "title": "SubcommunityList", "properties": { "_links": { "description": "Links to nearest pages", "properties": { "self": { "description": "link to self page", "example": "https://api.mycasavi.com/v2/subcommunities?page=1", "type": "string" }, "next": { "description": "link to next page", "example": "https://api.mycasavi.com/v2/subcommunities?page=2", "type": "string" }, "previous": { "description": "link to previous page", "example": null, "type": "string" } } }, "list": { "items": { "$ref": "#/components/schemas/Subcommunity" }, "type": "array" } } } } } }, "400": { "description": "Invalid data supplied" } }, "security": [ { "token": [] } ], "summary": "Get List of subcommunities", "tags": [ "Subcommunities" ] } }, "/v2/subcommunities/{subcommunityId}": { "get": { "description": "Get subcommunity by Id", "operationId": "SubcommunitiesController_getSubcommunityById", "parameters": [ { "name": "subcommunityId", "required": true, "in": "path", "description": "ID of subcommunity to return", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful operation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Subcommunity" } } } }, "400": { "description": "Invalid data supplied" }, "404": { "description": "Subcommunity not found" } }, "security": [ { "token": [] } ], "summary": "Get subcommunity by Id", "tags": [ "Subcommunities" ] } }, "/v2/vulcavo/assembly-topic/status": { "post": { "operationId": "VulcavoController_updateAssemblyTopicStatus", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateAssemblyTopicStatusDto" } } } }, "responses": { "201": { "description": "" } }, "security": [ { "token": [] } ], "tags": [ "Vulcavo" ] } }, "/v2/vulcavo/assembly-topic/{id}": { "patch": { "operationId": "VulcavoController_updateAssemblyTopic", "parameters": [ { "name": "id", "required": true, "in": "path", "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateAssemblyTopicDto" } } } }, "responses": { "200": { "description": "" } }, "security": [ { "token": [] } ], "tags": [ "Vulcavo" ] } }, "/v2/immo-office/webhooks/ticket-upsert": { "post": { "operationId": "ImmoOfficeWebhookController_handleTicketUpsert", "parameters": [], "responses": { "202": { "description": "" } }, "tags": [ "ImmoOfficeWebhook" ] } }, "/v2/immo-office/webhooks/ticket-comment-create": { "post": { "operationId": "ImmoOfficeWebhookController_handleTicketCommentCreate", "parameters": [], "responses": { "202": { "description": "" } }, "tags": [ "ImmoOfficeWebhook" ] } } }, "info": { "title": "casavi manager API", "description": "\n# ⚠ API V1\n\nVersion 2 is now the recommended version of the API. Please reference [API v1](https://api.mycasavi.com/v1/docs/manager) if you are still using that version.\n\n# Introduction\n\n\"casavi\n\ncasavi stands for an open integration culture. Thanks to our powerful API casavi is your\ncentral platform for the complete digitalisation of your property management processes.\nNo duplicate data administration thanks to a direct connection to accounting and ERP systems\n– and through our big partner network there is no limit to your possibilities when it comes to additional\nfunctionality.\n\nUsing this API you can connect to most of the functionality that casavi has to offer.\nAll data is scoped to one customer account. Examples you can do with this API are:\n\n- import & update master data\n- import documents and track if they have been downloaded by customers\n- connect another workflow management system to the ticket system casavi uses.\n\nThis documentation is generated from a Open API 2.0 document. Before we get to all the endpoints we\nexplain the [authentication](#section/Authentication). In the following section we continue with the most\noften found [use cases](#section/Use-cases).\n\n> Attention: The maximum body size for file uploads is 15Mb, however due to the base64 encoding this limit is practically ~10Mb. We recommend not sending more than 20k entities at once.\n\n# Updates\n\nWe are actively developing our API and extend it to cover new use cases. To stay up to date you can\nhave a look at the [Changelog](#tag/Changelog).\n\n# Authentication\n\nYou need an API key & a secret (supplied by your casavi customer service). Then follow these steps to\nauthenticate against this API:\n\n1. POST to `/authenticate` with application/json payload `{ key, secret }`.\n2. You receive back a json with payload `{ token, expiresAt }`.\n3. Use the `token` in the header field `token` of other requests.\n\n# Pagination\n\nWe use cursor pagination with `page` query. We have a page size of 25 items.\nThe response will contain a `_links.next` field with the next page cursor if there are more items.\n\n# Common fields in this API description\n\n## IDs\n\nWhen an endpoint in this API is receiving or returning an `id` this is not the casavi internal database\nid, but instead a customer supplied reference id. This id is also shown in the management view as \"Referenz ID\".\nIt can be anything you want want, so a database id or - as we recommend - an identifier that is human relatable\nlike the property number.\n\n## Dates\n\nDates/Times are always returned in ISO 8601 format (YYYY-MM-DDThh:mm:ss.sssZ). They are also returned in UTC.\n\n# Use cases\n\n* [Import master data (properties, contacts and units) into casavi](#tag/Import)\n* [Synchronize/update tickets](#tag/Tickets)\n\n# Other\n\nWe also have a documentation for the [Community API](/api/community/) which describes the API the community app uses.\n", "version": "2.12.17", "contact": {}, "x-logo": { "url": "https://api.mycasavi.com/v2/docs/manager/casavi-logo-word-pos.svg", "altText": "casavi Logo" } }, "tags": [ { "name": "Authentication", "description": "casavi authentication" }, { "name": "REST Hooks", "description": "Using webhooks or (REST hooks) it is possible to listen to events in casavi and react in your application.\n\nWebhook Trigger Policy:
\nWebhooks are currently triggered only once for each event. In case of delivery failure, the webhook will not be resent.\nPlease ensure that your endpoint is capable of handling the request upon receipt." }, { "name": "Import", "description": "A main process needed to work with casavi is to get master data from the ERP or property management\nsoftware into casavi regularly. For this we use an asynchronous process. Roughly the process is as\nfollows:\n\nSend your data according to the [import model](#tag/ImportModel) to the [import endpoint](#tag/Import).\nAll the data in that request is automatically imported in the correct order, so that contacts and\nproperties are created first, followed by units and finally documents. When supplying individual imports\nto the API this order has to be taken into account as well as no units for example can be imported if there\nis not yet the contact in casavi with a matching reference id.\n\nThe import works asynchronously and with a queue, meaning that not all imports are guaranteed to be imported\nat once. This endpoint will return a job ID that you can use to check the status of the job via\n[jobs/{jobId}](#operation/JobsController_getJob)." }, { "name": "Tickets", "description": "Read/write tickets, change status and post comments" }, { "name": "Ticket comments", "description": "Read/write tickets, change status and post comments" }, { "name": "Ticket checklists", "description": "Read ticket checklists" }, { "name": "Ticket types", "description": "Read ticket types" }, { "name": "Ticket type groups", "description": "Read ticket type groups" }, { "name": "Owner Assembly", "description": "Update the conference link for owner assemblies" }, { "name": "Orders", "description": "Read and write orders" }, { "name": "Order types", "description": "Read order types" }, { "name": "Files", "description": "Upload files for use in tickets & ticket comments" }, { "name": "Properties", "description": "List and get individual properties" }, { "name": "Units", "description": "Get individual units" }, { "name": "Subcommunities", "description": "Get subcommunities" }, { "name": "Contacts", "description": "List and get individual contacts" }, { "name": "Documents", "description": "Retrieve metadata about documents" }, { "name": "Document types", "description": "Read document types" }, { "name": "Posts", "description": "Create content" }, { "name": "Appointments", "description": "Create appointments" }, { "name": "Staff", "description": "List and get staff members" }, { "name": "Consumptions", "description": "Access to casavi consumption data" }, { "name": "ImportModel", "description": "" }, { "name": "TicketModel", "description": "" }, { "name": "RestHook Event Model", "description": "\n\nHere is the list of the resthook events that you can subscribe and the structure of the payload for each one of them.\n\nIn addition, if Basic Auth (i.e. `https://username:password@domain.tld/`) is found in your\n`hookUrl` we sent those credentials as basic auth (`Authorization` header with `Basic`\nfollowed by a space and a base64-encoded string of username:password) to your endpoint.\n\n\n\n## Payload of contact_created\n\n\n\n## Payload of contact_updated\n\n\n\n## Payload of contact_archived\n\n\n\n## Payload of contract_enddate_updated\n\n\n\n## Payload of document_downloaded\n\n\n\n## Payload of ticket_ownerassembly_scheduled\n\n\n\n## Payload of ticket_ownerassembly_deleted\n\n\n\n## Payload of ticket_created\n\n\n\n## Payload of ticket_updated\n\n\n\n## Payload of ticket_status_changed\n\n\n\n## Payload of ticket_comment_created\n\n\n\n## Payload of ticket_comment_updated\n\n\n\n## Payload of order_created\n\n\n\n## Payload of order_updated\n\n\n\n## Payload of order_comment_created\n\n\n\n## Payload of order_comment_updated\n\n\n\n## Payload of ticket_checklist_item_updated\n\n\n\n## Payload of ticket_checklist_item_deleted\n\n\n" }, { "name": "Changelog", "description": "\n## 2.12.1 - 2025-03-06\n\n### Features\n\n- ✨ Included `createdAt` and `updatedAt` fields in the contracts response of GET requests for the following endpoints:\n - Get [units of a property](#operation/PropertiesController_getPropertyUnits)\n - Get [all units](#operation/UnitsController_getAllUnits)\n - Get [unit by Id](#operation/UnitsController_getUnitById)\n - Get [list of contacts](#operation/ContactsController_getContacts)\n - Get [contact by Id](#operation/ContactsController_getContactById)\n\n## 2.12.0 - 2025-02-06\n\n### Features\n\n- ✨ Added new webhook [`ticket_status_changed`](#tag/RestHook-Event-Model/Payload-of-ticket_status_changed)\n\n## 2.11.4 - 2024-11-18\n\n### Changed\n\n- Update the Post payload by adding the `publishAt` field\n\n## 2.11.1 - 2024-10-18\n\n### Changed\n\n- Update [responsibilities of a property](#operation/PropertiesController_getPropertyResponsibilities) response\n\n## 2.11.0 - 2024-10-16\n\n### Features\n\n- ✨ Add new endpoints\n - Get [posts of a property](#operation/PropertiesController_getPropertyPosts)\n - Get [appointments of a property](#operation/PropertiesController_getPropertyAppointments)\n - Get [responsibilities of a property](#operation/PropertiesController_getPropertyResponsibilities)\n\n## 2.10.3 - 2024-07-10\n\n### Changed\n\n- Update the documentation to clarify the response of roles when getting a [document](#operation/DocumentsController_getDocument)\n\n## 2.10.2 - 2024-06-24\n\n- Performance improvements\n- Contacts now sorted by creation date in descending order\n\n## 2.10.1 - 2024-06-12\n\n- ✨ Create [ticket](#operation/TicketsController_createTicket) with supported custom fields for the given ticket type.\n- Clarify api [pagination](#section/Pagination) in the documentation.\n\n## 2.9.4 - 2024-06-04\n\n### Changed\n\n- Add new property called `type` to define the order type and new property called `customFields` to define custom fields if they exist in the order type when [creating](#operation/TicketsController_createTicketOrder) an order.\n\n## 2.9.1 - 2024-05-13\n\n### Changed\n\n- Updated the documentation to clarify supported date format for inputs and queries\n\n## 2.9.0 - 2024-05-02\n\n### Changed\n\n- Update [order types](#operation/TicketsController_getTicketOrderTypes) response to include `responsibilities` and `customFields`\n- ✨ Add new webhooks [`ticket_checklist_item_updated`](#tag/RestHook-Event-Model/Payload-of-ticket_checklist_item_updated) and [`ticket_checklist_item_deleted`](#tag/RestHook-Event-Model/Payload-of-ticket_checklist_item_deleted) to notify changes in checklist items.\n\n## 2.8.0 - 2024-04-18\n\n### Features\n\n- ✨ Add new endpoint to get ticket type groups [/tickets/type-groups](#operation/TicketsController_getTicketTypeGroups)\n- ✨ Add new webhooks [`order_comment_created`](#tag/RestHook-Event-Model/Payload-of-order_comment_created) and [`order_comment_updated`](#tag/RestHook-Event-Model/Payload-of-order_comment_updated) to notify about new and updated comments on orders.\n- ✨ Extend the orders response when getting them from [/tickets/orders](#operation/TicketsController_getOrders) by adding `ticketId`.\n- ✨ Extend the ticket types response when getting them from [tickets/types](#operation/TicketsController_getTicketTypes) by adding `category`, `responsibilities`, `properties`, `checklistTemplates`, `visibleFor` and `customFiels`.\n- 🔧 Fix issue with pagination of ticket orders\n\n## 2.7.10 - 2024-04-12\n\n### Changed\n\n- ✨ Add a query parameter called `includeInactiveContracts` to include inactive contracts when getting units of a specific property [/properties/{propertyId}/units](#operation/PropertiesController_getPropertyUnits) and getting all units [/units](#operation/UnitsController_getAllUnits)\n\n## 2.7.9 - 2024-04-03\n\n### Changed\n\n- ✨ Creating a new webhook subscription will return a response includes a `Location` header with the url to delete the webhook subscription.\n- 🔧 Fix the errors of swagger documentation in json in order to pass the validation.\n\n## 2.7.7 - 2024-03-06\n\n### Features\n\n- ✨ Add new attribute called [triggeredBy](#tag/RestHook-Event-Model) in the webhook payload to show the api key or contact identifier / user full name whether it was fired up from api or frontend.\n\n## 2.7.4 - 2024-02-21\n\n### Changed\n\n- 🔧 Fix issue of overwriting non-existent attributes when importing masterdata.\n- ✨ Share [documents](#operation/DocumentsController_uploadDocument) internally by specifying `internal` in `sharedWith[].roles`.\n\n## 2.7.2 - 2024-02-07\n\n### Features\n\n- ✨ Add new end points\n - Get [orders](#operation/TicketsController_getOrders).\n - Get orders by [`:ticketId`](#operation/TicketsController_getTicketOrders).\n- ✨ Filter [contacts](#operation/ContactsController_getContacts) by `isInivited` query parameter.\n- ✨ Filter [contacts](#operation/ContactsController_getContacts) by `isRegistered` query parameter.\n- ✨ Filter [orders](#operation/TicketsController_getOrders) and [ordersByTicketId](#operation/TicketsController_getTicketOrders) by `status` query parameter.\n- ✨ Filter [tickets](#operation/TicketsController_getTickets) by `ticketType` query parameter.\n- ✨ New attribute called `isInvited` in the contact webhooks payload: [contact_created](#tag/RestHook-Event-Model/Payload-of-contact_created), [contact_updated](#tag/RestHook-Event-Model/Payload-of-contact_updated) and [contact_archived](#tag/RestHook-Event-Model/Payload-of-contact_archived).\n- 🔥 Remove attribute `description` from the ticket webhooks payload: [ticket_created](#tag/RestHook-Event-Model/Payload-of-ticket_created) and [ticket_updated](#tag/RestHook-Event-Model/Payload-of-ticket_updated)\n\n## 2.7.1 - 2024-01-24\n\n### Features\n\n- Retrieving [contacts](#operation/ContactsController_getContacts) have an additional attribute called `isInvited`.\n- Add new attribute called [isTriggeredViaApi ](#tag/RestHook-Event-Model) in the webhook payload to check whether it was fired up from api or frontend.\n- Add new attribute called `appLink` to [Contact](#tag/Contacts), [Property](#tag/Properties), [Unit](#tag/Units) and [Ticket](#tag/Tickets) models to provide a link to casavi web app for the entities.\n\n## 2.7.0 - 2024-01-10\n\n### Features\n\n- Add new endpoints:\n\n - Get ticket types: [/tickets/types](#operation/TicketsController_getTicketTypes)\n - Get ticket checklists template: [/tickets/checklists](#operation/TicketsController_getChecklistsTemplate)\n - Get ticket checklists for a ticket: [/tickets/{ticketId}/checklists](#operation/TicketsController_getTicketChecklist)\n - Get order types: [/orders/types](#operation/TicketsController_getTicketOrderTypes)\n - Get document types: [/documents/types](#operation/DocumentsController_getDocumentTypes)\n - Get properties custom fields: [/properties/custom-fields](#operation/PropertiesController_getPropertyCustomFields)\n - Get units custom fields: [/units/custom-fields](#operation/UnitsController_getCustomFields)\n - Get contacts custom fields: [/contacts/custom-fields](#operation/ContactsController_getCustomFields)\n - Get subscribed webhooks: [/restHooks](#operation/RestHooksController_getHooks)\n\n- Add new webhooks:\n - New ticket: [ticket_created](#tag/RestHook-Event-Model/Payload-of-ticket_created)\n - Update ticket: [ticket_updated](#tag/RestHook-Event-Model/Payload-of-ticket_updated)\n - New ticket comment: [ticket_comment_created](#tag/RestHook-Event-Model/Payload-of-ticket_comment_created)\n - Update ticket comment: [ticket_comment_updated](#tag/RestHook-Event-Model/Payload-of-ticket_comment_updated)\n - New order: [order_created](#tag/RestHook-Event-Model/Payload-of-order_created)\n - Update order: [order_updated](#tag/RestHook-Event-Model/Payload-of-order_updated)\n\n## 2.6.0 - 2023-08-24\n\n### Features\n\n- Add new endpoints for subcommunities:\n - Get list of subcommunities: [/subcommunities](#operation/SubcommunitiesController_getSubcommunities)\n - Get subcommunity by Id: [/subcommunities/{subcommunityId}](#operation/SubcommunitiesController_getSubcommunityById)\n\n## 2.5.0 - 2023-05-12\n\n### Changed\n\n- This release makes api v2 the default api. API v1 users can find a link to the documentation in the introduction.\n\n## 2.4.6 - 2022-04-20\n\n### Changed\n\n- Updating ticket attachments is not possible using the tickets PUT endpoint. The documentation has been corrected. To add an attachment to a ticket, use the [Ticket Comment](#operation/TicketsController_commentTicket) API to explicitly create a new comment. The provided attachment(s) will be connected to the ticket via this comment.\n- The ticket `reportedAt` field may contain an invalid date. In this case the string `Invalid Date` is returned. The documentation has been updated to make this more transparent.\n\n## 2.4.5 - 2022-09-21\n\n### Bugfixes\n\n- Fixed an issue where some tokens were still valid after the key and secret that generated them was deactivated.\n\n### Changed\n\n- Added as a required field either `lastName` or `companyName` when importing [contacts](#operation/ImportController_importMasterData)\n\n## 2.4.4 - 2022-09-08\n\n### Features\n\n- The `propertyMscNumber` on unit to support units belonging to a property/community to have different propertyMscNumber than the property mscNumber\n\n## 2.4.3 - 2022-03-14\n\n### Changed\n\n- Digital Owner Assembly users can now provide a decimal value for `votingShare`.\n\n## 2.4.2 - 2022-03-09\n\n### Features\n\n- Retrieving ticket comments now have the additional attributes `isInternal`, `fallbackToAccount` and `authorEmail`.\n\n## 2.4.1 - 2022-03-03\n\n### Features\n\n- Add new property `address` to the unit entity.\n\n## 2.4.0 - 2022-02-23\n\n### Features\n\n- Introduced new endpoint to get all [posts](#operation/PostsController_getPosts) and added `propertyId` as a query parameter to filter results by property.\n- Retrieving all units now have an additional attribute `propertyId`.\n\n## 2.3.2 - 2022-01-12\n\n### Features\n\n- The `ticket_ownerassembly_scheduled` webhook payload now includes a list of excluded contacts for each of the agenda items within the owner assembly.\n\n## 2.3.1 - 2021-12-17\n\n### Features\n\n- A new PUT endpoint within the Tickets API allows Digital Owner Assembly partners to update the conference link after receiving a `ticket_ownerassembly_scheduled` webhook event.\n- Agenda item rank is now included in the `ticket_ownerassembly_scheduled` webhook payload.\n\n## 2.3.0 - 2021-12-01\n\n### Features\n\n- The unit [/import](#operation/ImportController_importMasterData) model now supports the following standard fields: `area`, `floor`, `rooms`, `mscNumber` and `purpose`. Additionally GET endpoints include these new standard fields in the response\n- For Hybrid Digital Owner Assembly users `votingShare` can now be POSTed over the unit [/import](#operation/ImportController_importMasterData) endpoint and queried using the [/unit](#operation/UnitsController_getUnitById) or [/properties](#operation/PropertiesController_getPropertyUnits) GET endpoints\n- The [property](#tag/Properties) model has been updated to include the following standard fields: `mscNumber`, `mscProviderName`, `mscProviderIdentifier`\n\n## 2.2.3 - 2021-11-24\n\n- [/contacts](#operation/ContactsController_getContacts) endpoint now also returns the relationship between contact and contract (e.g. Renter, Owner, ...) using the `.contracts[i].type` property\n- [/contacts](#operation/ContactsController_getContacts) endpoint now accepts `RESIDENT` as a valid parameter. The `?role=` query parameter can only be defined once\n\n## 2.2.2 - 2021-11-12\n\n### Features\n\n- REST Hooks now include two new subscription types: `ticket_ownerassembly_scheduled` and `ticket_ownerassembly_deleted`.\n\n## 2.2.1 - 2021-11-03\n\n### Changed\n\n- New /units endpoint to fetch all units in all properties the account has access to. Can be filtered by last update time using `modifiedAfter`.\n\n## 2.2.0 - 2021-10-08\n\n> **_NOTE:_** BREAKING\n\n### Changed\n\n- Tickets API previously used a `date` query string parameter to limit the response to just the tickets created after the provided datetime. The name of this paramter has changed to `createdAfter`. The functionality remains the same.\n\n### Features\n\n- Tickets can now be filtered by the datetime they were last modified. Set the `modifiedAfter` query string parameter to do so. Because the created at date is always <= modified date, using this parameter in conjuction with the `createdAfter` parameter is not recommended in cases where you expect tickets modified _or_ created after the given datetimes.\n\n## 2.1.0 - 2021-05-27\n\n### Changed\n\n- Retrieving posts now have the additional attributes `authorName` and `attachments`\n- Retrieving appointments now have the additonal attributes `authorId` and `authorName`\n\n## 2.0.0 Alpha - 2021-05-14\n\nVersion 2 Alpha started. Changes so far:\n\n### Changed\n\n- Added the following query parmeters to the 'get list of [contacts](#tag/Contacts)' endpoint and updated response schema to include unitId as well as propertyId.\n\n - `modifiedAfter`\n - `role`\n\n- Units can now be [imported](#tag/Import) without being nested within a property.\n- We unified the endpoints that return a list of items with the following changes:\n - From now on the following routes are always paginated:\n ```\n // Consumption\n https://api.mycasavi.com/consumption/units/:unitId/meters\n https://api.mycasavi.com/consumption/resources\n https://api.mycasavi.com/consumption/properties/:communityId/meters\n https://api.mycasavi.com/consumption/meters\n https://api.mycasavi.com/consumption/meters/:resourceTypeId/measurements\n https://api.mycasavi.com/consumption/measurements\n // Contacts\n https://api.mycasavi.com/contacts\n // Properties\n https://api.mycasavi.com/properties\n https://api.mycasavi.com/properties/:propertyId/units\n // Staff\n https://api.mycasavi.com/staff\n // Tickets\n https://api.mycasavi.com/tickets\n https://api.mycasavi.com/tickets/:ticketId/comments\n ```\n - If no page number is specified, the first page will be returned.\n - Number of pages now start from 1 always. The following routes worked before with page numbers starting from 0. They were rewritten to work with pagination starting at 1 as other routes:\n ```\n // Contacts\n https://api.mycasavi.com/contacts\n // Properties\n https://api.mycasavi.com/properties/:propertyId/units\n // Tickets\n https://api.mycasavi.com/tickets/:ticketId/comments\n ```\n - Page size was increased from 25 to 50. It can not be changed.\n - All paginated requests have a new response structure with `_links` to the `previous`, `next`, and `self` pages as well as a `list` of entities. If one of these pages does not exist, then the corresponding `link` will have a `null` value. Example:\n ```\n {\n \"_links\": {\n \"self\": \"https://api.mycasavi.com/properties?page=1\",\n \"next\": \"https://api.mycasavi.com/properties?page=2\",\n \"previous\": null\n },\n \"list\": [\n {\n \"id\": \"prop_01\",\n \"name\": \"Test property\",\n ...\n },\n {\n \"id\": \"prop_02\",\n \"name\": \"Test property 2\",\n ...\n },\n ...\n ]\n }\n ```\n- Added `page` query parameter for ticket comments route:\n ```\n // Tickets\n https://api.mycasavi.com/tickets/:ticketId/comments\n ```\n- Added `status` query parameter for tickets route, which can take on the values\n `PENDING`, `OPEN`,`INPROGRESS`,`POSTPONED`,`CLOSED`. For example:\n ```\n // Tickets\n https://api.mycasavi.com/tickets?status=OPEN&status=INPROGRESS&status=POSTPONED\n ```\n- Updated `Ticket` entity model: added `lastModified` field.\n- Deleted ticket activities route:\n ```\n // Tickets\n https://api.mycasavi.com/tickets/:ticketId/activities\n ```\n- Updated API route documentation.\n- Renamed \"ticket tasks\" to \"orders\" as it reflects better the wording in casavi.\n - Task/Order endpoints are moved from `/tickets/{ticketId}/tasks` to `/tickets/{ticketId}/orders`.\n- Ticket survey endpoints are moved from `/tickets/{ticketId}/survey` to\n `/tickets/{ticketId}/surveys` to be in sync with other endpoints that are\n plural as well.\n- Changed information about attachments in `Ticket`, `TicketComment`, `TicketOrder` models. Now instead of fields\n `attachments`, `attachmentLinks` and `attachmentDetails`, all attachment details are in the `attachments` field.\n Important note: there will be no attachments in response for nested comments and orders in ticket,\n and for nested comments in order. To get them you need to get specific order or comment.\n- Fields `comments` and `tasks`/`orders` removed from the response of paginated `GET /tickets` endpoint.\n Ticket comments and orders can be obtained by completing GET request for a single ticket `/tickets/:ticketId`.\n- Changed responses for POST requests to consumption data endpoints. From now they return the created object for\n `ConsumptionMeter` and `ConsumptionResource` models and object with array `createdMeasurementIds` that contains IDs for\n create bulk Consumption Measurements request.\n- Responses to POST requests for `/documents` and `/import` endpoints now have the status 202.\n- We added a request rate limit. The number of requests for a specific route is limited to 100 per minute.\n All next requests will return an error with the status 429.\n\n## 1.10.0 - 2021-05-07\n\n### Fixes\n\n- Fixes `document_downloaded` REST hook not being triggered when a document is downloaded\n\n### Features\n\n- Added new properties `propertyId` and `contactId` to REST hook `document_downloaded` payload\n\n## 1.9.0 - 2021-05-05\n\n### Features\n\n- Getting a ticket by Id now returns custom fields for the ticket\n- Ticket tasks now include attachment data\n- Tickets response schema now includes `attachment` array with reference to file ids\n\n## 1.8.0 - 2021-04-22\n\n### Features\n\n- Added API endpoint for retrieving posts, updating and deleting them\n\n### Bugfixes\n\n- Fixed the endpoint for creating posts always returning an error\n\n## 1.7.0 - 2021-04-21\n\n### Features\n\n- Task/Order endpoints are moved from `/tickets/{ticketId}/task` to\n `/tickets/{ticketId}/tasks` to be in sync with other endpoints that are\n plural as well.\n- Changed endpoint for tasks/orders, so that the `taskId` is renamed\n to `id` to be in line with the other endpoints. Also updated the\n description for orders with new fields that can now be used.\n- Task/Order `completed` property is deprecated and replaced with `status`\n field that can better reflect the different states.\n\n### Bugfixes\n\n- Updated a lot of the documentation to reflect the actual current API\n\n## 1.6.0 - 2021-03-13\n\n### Features\n\n- Appointments can now be created via API\n\n## 1.5.1 - 2021-03-04\n\n### Bugfixes\n\n- Contracts with archived contacts are not returned anymore\n\n## 1.5.0 - 2021-03-02\n\n### Features\n\n- Deprecated GET /tickets/{ticketId}/task\n- Added comments to response of GET /tickets/{ticketId}/tasks/{taskId}\n\n## 1.4.0 - 2021-02-01\n\n### Features\n\n- GET /properties now returns custom fields, like the other endpoints\n\n## 1.3.0 - 2021-01-14\n\n### Features\n\n- Imporing documents now allows for sharing these with custom roles,\n i.e. `\"roles\": [\"owner\", \"custom:Beirat\"]`\n\n## 1.2.0 - 2020-12-01\n\n### Features\n\n- Properties have a new attribute `number` (\"Objektnummer\") that can\n be imported and requested via API\n\n## 1.1.1 - 2020-09-24\n\nStart of the changelog\n" } ], "servers": [ { "url": "https://api.mycasavi.com" } ], "components": { "securitySchemes": { "token": { "type": "apiKey", "in": "header", "name": "token" } }, "schemas": { "AppointmentRoleType": { "type": "string", "enum": [ "owner", "renter", "resident" ], "description": "List of roles who will receive the appointment" }, "CreateAppointment": { "type": "object", "properties": { "id": { "type": "string", "description": "A unique identifier for the appointment. If none is provided, a UUID will be generated automatically", "example": "appointment-177" }, "title": { "type": "string", "description": "The title of the appointment", "example": "Elevator repair" }, "text": { "type": "string", "description": "The body text of the appointment", "example": "Lorem Ipsum dolor sit amet" }, "location": { "type": "string", "description": "Where the appointment takes place", "example": "3rd floor" }, "authorId": { "type": "string", "example": "person412", "description": "Id of the user who creates the appointment" }, "allDay": { "type": "boolean", "example": true, "description": "Determines if the appointment lasts all day.", "default": false }, "showOnInfoboard": { "type": "boolean", "example": true, "description": "Determines if shown on info board.", "default": false }, "propertyIds": { "example": [ "property-412", "property-400", "property-19" ], "description": "Reference IDs of the properties where the appointment is shared.", "type": "array", "items": { "type": "string" } }, "roles": { "type": "array", "description": "List of roles who will receive the appointment", "example": [ "renter", "owner", "resident" ], "items": { "$ref": "#/components/schemas/AppointmentRoleType" } }, "notifyRecipients": { "type": "boolean", "example": true, "description": "Notify all casavi users of appointment by message", "default": false }, "dateStart": { "type": "string", "example": "2017-03-05T11:00:00.000Z", "description": "Date and time appointment begins in ISO 8601 format.", "format": "date-time" }, "dateEnd": { "type": "string", "example": "2017-03-05T14:00:00.000Z", "description": "Date and time appointment ends in ISO 8601 format.", "format": "date-time" } }, "required": [ "title", "propertyIds", "dateStart" ] }, "Appointment": { "type": "object", "properties": { "id": { "type": "string", "description": "Appointment identifier", "example": "appointment-177" }, "title": { "type": "string", "description": "The title of the appointment", "example": "Elevator repair" }, "text": { "type": "string", "description": "The body text of the appointment", "example": "Lorem Ipsum dolor sit amet" }, "location": { "type": "string", "description": "Where the appointment takes place", "example": "3rd floor" }, "allDay": { "type": "boolean", "example": true, "description": "Determines if the appointment lasts all day.", "default": false }, "showOnInfoboard": { "type": "boolean", "example": true, "description": "Determines if shown on info board.", "default": false }, "propertyIds": { "example": [ "property-412", "property-400", "property-19" ], "description": "Reference IDs of the properties where the appointment is shared.", "type": "array", "items": { "type": "string" } }, "roles": { "type": "array", "description": "List of roles who will receive the appointment", "example": [ "renter", "owner", "resident" ], "items": { "$ref": "#/components/schemas/AppointmentRoleType" } }, "dateStart": { "type": "string", "example": "2017-03-05T11:00:00.000Z", "description": "Date and time appointment begins", "format": "date-time" }, "dateEnd": { "type": "string", "example": "2017-03-05T14:00:00.000Z", "description": "Date and time appointment ends", "format": "date-time" }, "authorId": { "type": "string", "description": "Reference ID of the author.", "example": "person412" }, "authorName": { "type": "string", "description": "Name of the author.", "example": "Max Mustermann" } }, "required": [ "id", "title", "propertyIds", "dateStart" ] }, "CustomField": { "type": "object", "properties": { "internalId": { "type": "integer", "example": 1, "description": "The ID of the custom field", "readOnly": true }, "name": { "type": "string", "example": "name", "description": "The name of the custom field" }, "position": { "type": "integer", "example": 1, "description": "The position of the custom field" }, "data": { "type": "object", "description": "The data of the custom field" }, "required": { "type": "boolean", "example": true, "description": "Whether the custom field is required" }, "fieldType": { "type": "string", "description": "The type of the custom field", "enum": [ "TEXTFIELD", "TEXTBOX", "NUMBER", "CHECKBOX", "DROPDOWN", "DATE", "DOCUMENT", "SERVICE_PROVIDER_CONTRACT" ] }, "description": { "type": "string", "example": "This is a custom field", "description": "The description of the custom field" }, "defaultContent": { "type": "string", "example": 1, "description": "Default content of the custom field" } }, "required": [ "internalId", "name", "position", "data", "required" ] }, "ContactContract": { "type": "object", "properties": { "id": { "type": "string", "description": "the contract id", "example": "0135" }, "type": { "type": "string", "description": "type of the relationship between contact and unit", "example": "OWNER", "enum": [ "OWNER", "RENTER", "RESIDENT" ] }, "startDate": { "type": "string", "description": "start date for the contract", "example": "2020-05-02T08:00:00" }, "endDate": { "type": "string", "description": "end date for the contract", "example": "2020-05-03T08:00:00" }, "unitId": { "type": "string", "description": "id for the unit associated with this contract", "example": "A3CD546C-3ECC-4557-8202-4A045112F5FB" }, "propertyId": { "type": "string", "description": "id for the property associated with this contract", "example": "589DE543-0582-46B9-9CA6-E583505DBCFF" }, "createdAt": { "format": "date-time", "type": "string", "description": "Date and time when contract was created, ISO 8601", "example": "2018-08-07T14:54:57Z" }, "updatedAt": { "format": "date-time", "type": "string", "description": "Date and time when contract was updated, ISO 8601", "example": "2019-05-03T08:00:00" } } }, "Contact": { "type": "object", "properties": { "id": { "type": "string", "example": "C-0000312", "description": "External ID of the contact. Should be unique, so further imports can update the contact" }, "internalId": { "type": "integer", "example": 41251, "description": "Our internal database id" }, "title": { "type": "string", "example": "Doctor", "description": "The title of the contact" }, "salutation": { "type": "string", "example": "Family", "description": "The salutation for this contact. Could include things like `Family`, `Mister` or `Madam`" }, "firstName": { "type": "string", "example": "Joe", "description": "First name of the contact" }, "lastName": { "type": "string", "example": "Smith", "description": "Last name of the contact. This is required b/c it is used to represent a contact" }, "companyName": { "type": "string", "example": "ACME Industries", "description": "Name of the company the contact is assigned to. If type is `company` this contact will instead be treated as a company" }, "companyRole": { "type": "string", "example": "Director", "description": "Role inside the company" }, "email": { "type": "string", "example": "joe.smith@acme.com", "description": "Email where the contact can be contacted" }, "telephone": { "type": "string", "example": "+49 (0) 89 132", "description": "Telephone number for the contact. No special format is needed here so anything is valid (i.e. +49 (0) 89 123 or 089 123)" }, "mobile": { "type": "string", "example": "+49 (0) 89 132", "description": "Mobile number for the contact. No special format is needed here so anything is valid (i.e. +49 (0) 89 123 or 089 123)" }, "fax": { "type": "string", "example": "+49 (0) 89 132", "description": "Fax number for the contact. No special format is needed here so anything is valid (i.e. +49 (0) 89 123 or 089 123)" }, "website": { "type": "string", "example": "https://casavi.de", "description": "Website for the contact. No format needed, but correct URLs are preferred." }, "street": { "type": "string", "example": "Example street 7", "description": "Street address" }, "postalCode": { "type": "string", "example": "80331" }, "city": { "type": "string", "example": "Munich" }, "country": { "type": "string", "example": "Germany" }, "note": { "type": "string", "example": "Prefers to be contacted by email, telephone only in working hours", "description": "Additional notes for the contact" }, "isRegistered": { "type": "boolean", "example": true, "description": "Shows whether the contact is registered." }, "preferredWayOfContact": { "type": "string", "example": "LETTER", "enum": [ "LETTER", "ONLINE" ], "description": "How the contact would like to be contacted about new documents in the portal" }, "customFields": { "type": "object", "description": "CustomFields can be created by managers and filled with any data. They have a type and are referenced by their name.", "example": { "Email2": "someemail@domain.tld", "Anschrift": "Max Mustermann und Maria Musterfrau" }, "additionalProperties": { "oneOf": [ { "type": "string", "nullable": true }, { "type": "number" }, { "type": "boolean" } ] } }, "contracts": { "description": "Contract data for this contact", "type": "array", "items": { "$ref": "#/components/schemas/ContactContract" } }, "isInvited": { "type": "boolean", "example": true, "description": "Shows whether the contact is invited or not. If true it means that an invitation code is generated for the contact." }, "appLink": { "type": "string", "description": "A link to the contact in the casavi web app", "example": "https://app.mycasavi.com/tenant/1/manage/contacts/12345" } }, "required": [ "id", "internalId", "lastName", "appLink" ] }, "CreatePost": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique external ID of the post. If none is provided, a UUID will be generated automatically", "example": "5512-4353" }, "title": { "type": "string", "description": "Title of the post", "example": "Aufzug Reperatur" }, "text": { "type": "string", "description": "Main body text of the post", "example": "Lorem Ipsum dolor sit amet" }, "authorId": { "type": "string", "description": "Reference ID of the author.", "example": "person412" }, "propertyId": { "type": "string", "description": "Reference ID of the property where the post is shared.", "example": "property-412" }, "allowComments": { "type": "boolean", "description": "Determines if comments are allowed for this post.", "default": true, "example": false }, "isImportant": { "type": "boolean", "description": "If you select this option, not only casavi users but also unregistered contacts whose email addresses you have entered will be notified by email.", "default": false, "example": false }, "showOnInfoboard": { "type": "boolean", "description": "Determines if the post should be shown on connected MyBoards if any.", "default": false, "example": false } }, "required": [ "title", "text", "authorId", "propertyId" ] }, "AttachmentDetail": { "type": "object", "properties": { "id": { "type": "integer", "description": "Our internal database id", "example": 123 }, "name": { "type": "string", "description": "File name with extension", "example": "example.pdf" }, "title": { "type": "string", "description": "Display title of the attachment - mostly the same as the name", "example": "An example file" }, "type": { "type": "string", "description": "MIME type of the file", "example": "application/pdf" }, "size": { "type": "integer", "description": "File size in bytes", "example": 4523 }, "url": { "type": "string", "description": "Temporary links to the attachments", "example": "https://files.mycasavi.com/some-thing-123" } }, "required": [ "id" ] }, "Post": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique external ID of the post. If none is provided, a UUID will be generated automatically", "example": "5512-4353" }, "internalId": { "type": "integer", "description": "Our internal database id", "example": 591823 }, "title": { "type": "string", "description": "Title of the post", "example": "Aufzug Reperatur" }, "text": { "type": "string", "description": "Main body text of the post", "example": "Lorem Ipsum dolor sit amet" }, "authorId": { "type": "string", "description": "Reference ID of the author.", "example": "person412" }, "authorName": { "type": "string", "description": "Name of the author.", "example": "Max Mustermann" }, "attachments": { "description": "Information about the attachments of the post", "type": "array", "items": { "$ref": "#/components/schemas/AttachmentDetail" } }, "propertyId": { "type": "string", "description": "Reference ID of the property where the post is shared.", "example": "property-412" }, "allowComments": { "type": "boolean", "description": "Determines if comments are allowed for this post.", "default": true, "example": false }, "isImportant": { "type": "boolean", "description": "If you select this option, not only casavi users but also unregistered contacts whose email addresses you have entered will be notified by email.", "default": false, "example": false }, "showOnInfoboard": { "type": "boolean", "description": "Determines if the post should be shown on connected MyBoards if any.", "default": false, "example": false }, "publishAt": { "type": "string", "description": "Publish date. Date formatted according to ISO 8601", "example": "2017-04-11T09:53:42.891Z", "format": "date-time" }, "createdAt": { "type": "string", "description": "Creation date. Date formatted according to ISO 8601", "example": "2017-04-11T09:53:42.891Z", "format": "date-time" } }, "required": [ "id", "internalId", "title", "text", "propertyId" ] }, "UpdatePost": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique external ID of the post. If none is provided, a UUID will be generated automatically", "example": "5512-4353" }, "title": { "type": "string", "description": "Title of the post", "example": "Aufzug Reperatur" }, "text": { "type": "string", "description": "Main body text of the post", "example": "Lorem Ipsum dolor sit amet" }, "authorId": { "type": "string", "description": "Reference ID of the author.", "example": "person412" }, "propertyId": { "type": "string", "description": "Reference ID of the property where the post is shared.", "example": "property-412" }, "allowComments": { "type": "boolean", "description": "Determines if comments are allowed for this post.", "default": true, "example": false }, "isImportant": { "type": "boolean", "description": "If you select this option, not only casavi users but also unregistered contacts whose email addresses you have entered will be notified by email.", "default": false, "example": false }, "showOnInfoboard": { "type": "boolean", "description": "Determines if the post should be shown on connected MyBoards if any.", "default": false, "example": false } } }, "TokenRequest": { "type": "object", "properties": { "key": { "type": "string", "example": "04523b90-9ee1-49f7-af31-b1f24efe84ad", "description": "API key." }, "secret": { "type": "string", "example": "ksdasji0-sf818-nfn81-ms9a-ams9d9a9as", "description": "API secret." } }, "required": [ "key", "secret" ] }, "TokenResponse": { "type": "object", "properties": { "token": { "type": "string", "example": "a2cf47a9-3d2e-455e-a34b-7a79f11aa7f9", "description": "The token to use for authentication" }, "expiresAt": { "type": "string", "example": "1985-12-05T15:31:10Z", "format": "date-time", "description": "UTC date time on which the token is expires" } }, "required": [ "token", "expiresAt" ] }, "TokenRefreshRequest": { "type": "object", "properties": { "apiKey": { "type": "string", "example": "04523b90-9ee1-49f7-af31-b1f24efe84ad", "description": "API key." }, "token": { "type": "string", "example": "a2cf47a9-3d2e-455e-a34b-7a79f11aa7f9", "description": "Old access token." } }, "required": [ "apiKey", "token" ] }, "ResponsibilityContact": { "type": "object", "properties": { "internalId": { "type": "integer", "example": 41251, "description": "Internal ID of the responsibility" }, "type": { "type": "string", "example": "Hausverwaltung", "description": "Type of responsibility" }, "showOnPortal": { "type": "boolean", "example": true, "description": "Shows whether the responsibility is shown on customer portal" }, "showOnDashboard": { "type": "boolean", "example": true, "description": "Shows whether the responsibility is shown on customer pinboard" }, "createdAt": { "format": "date-time", "type": "string", "description": "Date and time when responsibility is created, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "title": { "type": "string", "example": "Doctor", "description": "Title" }, "salutation": { "type": "string", "example": "Family", "description": "Salutation" }, "firstName": { "type": "string", "example": "Joe", "description": "First name of responsible contact" }, "lastName": { "type": "string", "example": "Smith", "description": "Last name of responsible contact" }, "companyName": { "type": "string", "example": "ACME Industries", "description": "Name of the company" }, "companyRole": { "type": "string", "example": "Director", "description": "Role inside the company" }, "email": { "type": "string", "example": "joe.smith@acme.com", "description": "Email" }, "telephone": { "type": "string", "example": "+49 (0) 89 132", "description": "Telephone number" } }, "required": [ "internalId", "type", "lastName" ] }, "Address": { "type": "object", "properties": { "street": { "type": "string", "example": "Main street 14" }, "units": { "type": "array", "items": { "type": "string" } } }, "required": [ "street", "units" ] }, "Responsibility": { "type": "object", "properties": { "contactId": { "type": "string", "example": "C412" }, "contactInternalId": { "type": "number", "example": 553 }, "contactName": { "type": "string", "example": "Max Mustermann" }, "roleName": { "type": "string", "example": "Hausverwaltung" }, "roleType": { "type": "string", "example": "internal", "enum": [ "internal", "external" ] }, "email": { "type": "string", "example": "maxmustermann@hausverwaltung.de" }, "telephone": { "type": "string", "example": "123 23123-0" } }, "required": [ "contactId", "contactInternalId", "contactName", "roleName", "roleType" ] }, "Property": { "type": "object", "properties": { "id": { "type": "string", "example": "P-00451", "description": "External ID of the property" }, "internalId": { "type": "integer", "example": 41251, "description": "Our internal database id", "readOnly": true }, "name": { "type": "string", "example": "Easy Living Apartments" }, "note": { "type": "string", "example": "Test description" }, "country": { "type": "string", "example": "Germany" }, "city": { "type": "string", "example": "Munich" }, "postalCode": { "type": "string", "example": "80331" }, "number": { "type": "string", "example": "12345" }, "mscNumber": { "type": "string", "example": "987654321" }, "mscProviderName": { "type": "string", "example": "Messdienstleistungen GmbH, München" }, "mscProviderIdentifier": { "type": "string", "example": "99" }, "images": { "example": [ "https://s3-eu-central-1.amazonaws.com/..." ], "type": "array", "items": { "type": "string" } }, "addresses": { "type": "array", "items": { "$ref": "#/components/schemas/Address" } }, "responsibilities": { "description": "The responsibilities for this property, both internal and external", "type": "array", "items": { "$ref": "#/components/schemas/Responsibility" } }, "customFields": { "type": "object", "description": "CustomFields can be created by managers and filled with any data. They have a type and are referenced by their name.", "example": { "Info": "Some additional info", "Area": 85.1 }, "additionalProperties": { "oneOf": [ { "type": "string", "nullable": true }, { "type": "number" }, { "type": "boolean" } ] } }, "appLink": { "type": "string", "description": "A link to the property in the casavi web app", "example": "https://app.mycasavi.com/tenant/1/manage/communities/12345" } }, "required": [ "id", "internalId", "name", "appLink" ] }, "CreateConsumptionResource": { "type": "object", "properties": { "id": { "type": "string", "example": "res01", "description": "External identifier of the consumption resource. Should be unique." }, "name": { "type": "string", "example": "Water", "description": "Consumption resource name. Should not be empty." }, "unit": { "type": "string", "example": "qm", "description": "Consumption resource measure unit. Should not be empty" }, "notes": { "type": "string", "example": "Test type", "description": "Consumption resource notes" } }, "required": [ "id", "name", "unit" ] }, "ConsumptionResource": { "type": "object", "properties": { "id": { "type": "string", "example": "res01", "description": "External identifier of the consumption resource. Should be unique." }, "name": { "type": "string", "example": "Water", "description": "Consumption resource name. Should not be empty." }, "unit": { "type": "string", "example": "qm", "description": "Consumption resource measure unit. Should not be empty" }, "notes": { "type": "string", "example": "Test type", "description": "Consumption resource notes" } }, "required": [ "id", "name", "unit" ] }, "UpdateConsumptionResource": { "type": "object", "properties": { "name": { "type": "string", "example": "Water", "description": "Consumption resource name. Should not be empty." }, "unit": { "type": "string", "example": "qm", "description": "Consumption resource measure unit. Should not be empty" }, "notes": { "type": "string", "example": "Test type", "description": "Consumption resource notes" } } }, "CreateConsumptionMeter": { "type": "object", "properties": { "id": { "type": "string", "example": "meter01", "description": "External (database) identifier of the consumption meter. Should be unique. This is chosen by you." }, "number": { "type": "string", "example": "Q2312", "description": "Meter number - this is displayed to the end user. Should equal the actual hardware meters number." }, "notes": { "type": "string", "example": "Test type", "description": "Meter notes." }, "resourceId": { "type": "string", "example": "res01", "description": "Consumption resource identifier." } }, "required": [ "id", "resourceId" ] }, "ConsumptionMeterForUnit": { "type": "object", "properties": { "id": { "type": "string", "example": "meter01", "description": "External (database) identifier of the consumption meter. Should be unique. This is chosen by you." }, "number": { "type": "string", "example": "Q2312", "description": "Meter number - this is displayed to the end user. Should equal the actual hardware meters number." }, "notes": { "type": "string", "example": "Test type", "description": "Meter notes." }, "unitId": { "type": "string", "example": "P-00451-0001", "description": "External ID of the unit." }, "resourceId": { "type": "string", "example": "res01", "description": "Consumption resource identifier." } }, "required": [ "id", "resourceId" ] }, "ConsumptionMeterForCommunity": { "type": "object", "properties": { "id": { "type": "string", "example": "meter01", "description": "External (database) identifier of the consumption meter. Should be unique. This is chosen by you." }, "number": { "type": "string", "example": "Q2312", "description": "Meter number - this is displayed to the end user. Should equal the actual hardware meters number." }, "notes": { "type": "string", "example": "Test type", "description": "Meter notes." }, "propertyId": { "type": "string", "example": "P-00451", "description": "External ID of the property." }, "resourceId": { "type": "string", "example": "res01", "description": "Consumption resource identifier." } }, "required": [ "id", "resourceId" ] }, "ConsumptionMeter": { "type": "object", "properties": { "id": { "type": "string", "example": "meter01", "description": "External (database) identifier of the consumption meter. Should be unique. This is chosen by you." }, "number": { "type": "string", "example": "Q2312", "description": "Meter number - this is displayed to the end user. Should equal the actual hardware meters number." }, "notes": { "type": "string", "example": "Test type", "description": "Meter notes." }, "propertyId": { "type": "string", "example": "P-00451", "description": "External ID of the property." }, "unitId": { "type": "string", "example": "P-00451-0001", "description": "External ID of the unit." }, "resourceId": { "type": "string", "example": "res01", "description": "Consumption resource identifier." } }, "required": [ "id", "resourceId" ] }, "UpdateConsumptionMeter": { "type": "object", "properties": { "number": { "type": "string", "example": "Q2312", "description": "Meter number - this is displayed to the end user. Should equal the actual hardware meters number." }, "notes": { "type": "string", "example": "Test type", "description": "Meter notes." } } }, "CreateConsumptionMeasurement": { "type": "object", "properties": { "value": { "type": "number", "example": 65465.43, "description": "Measurement value. Should not be empty." }, "date": { "type": "string", "example": "2015-09-08", "description": "Measurement date in ISO 8601 format.", "format": "date" }, "meterId": { "type": "string", "example": "meter01", "description": "Measurement consumption meter." }, "notes": { "type": "string", "example": "Test type", "description": "Measurement notes." } }, "required": [ "value", "date", "meterId" ] }, "CreateConsumptionMeasurementsResponse": { "type": "object", "properties": { "createdMeasurementIds": { "example": [ 123, 124, 125 ], "description": "IDs of created measurements.", "type": "array", "items": { "type": "integer" } } }, "required": [ "createdMeasurementIds" ] }, "ConsumptionMeasurement": { "type": "object", "properties": { "id": { "type": "integer", "example": 20131, "description": "Identifier of the measurement. Should be unique. This is our internal id, so only in response" }, "value": { "type": "number", "example": 65465.43, "description": "Measurement value. Should not be empty." }, "date": { "type": "string", "example": "2015-09-08", "format": "date", "description": "Measurement date in ISO 8601 format." }, "meterId": { "type": "string", "example": "meter01", "description": "Measurement consumption meter." }, "notes": { "type": "string", "example": "Test type", "description": "Measurement notes." } }, "required": [ "id", "value", "date", "meterId" ] }, "UpdateConsumptionMeasurement": { "type": "object", "properties": { "value": { "type": "number", "example": 65465.43, "description": "Measurement value. Should not be empty." }, "date": { "type": "string", "example": "2015-09-08", "description": "Measurement date in ISO 8601 format.", "format": "date" }, "notes": { "type": "string", "example": "Test type", "description": "Measurement notes." } } }, "DocumentType": { "type": "object", "properties": { "internalId": { "type": "integer", "description": "Internal Id of the document type. It is unique.", "example": 12 }, "name": { "type": "string", "description": "Name of document type.", "example": "Document type #1" }, "parentId": { "type": "integer", "nullable": true, "description": "Internal Id of the document type parent, if it has one.", "example": 1 }, "createdAt": { "type": "string", "format": "datetime", "description": "Date and time when document type was created, ISO 8601.", "example": "2022-08-07T14:54:57Z" } } }, "SharedWithProperty": { "type": "object", "properties": { "with": { "type": "string", "enum": [ "unit", "property" ], "description": "Value: `property`", "example": "property" }, "propertyId": { "type": "string", "description": "Reference-ID of the property", "example": "P-00451" }, "roles": { "description": "Can be one of `owner`, `renter`, `resident`, `all`, `internal`, or the name of\na custom service provider type prefixed with `custom:`. The service provider type will be\ncreated if it does not currently exist. If the roles array is\nempty in the request, the default behavior is to share with `all`. Sharing with\n`all` shares with the default roles `owner`, `renter`, and\n`resident` only. `internal` takes precedence over `all` and `all` takes precedence over other types defined in the array.\nIf shared with `internal`, the response when getting the document will be an empty array.", "example": [ "owner", "renter", "custom:Board" ], "type": "array", "items": { "type": "string" } } }, "required": [ "with", "propertyId", "roles" ] }, "SharedWithUnit": { "type": "object", "properties": { "with": { "type": "string", "enum": [ "unit", "property" ], "description": "Value: `unit`", "example": "unit" }, "propertyId": { "type": "string", "description": "Reference-ID of the property", "example": "P-00451" }, "roles": { "description": "Can be one of `owner`, `renter`, `resident`, `all`, `internal`, or the name of\na custom service provider type prefixed with `custom:`. The service provider type will be\ncreated if it does not currently exist. If the roles array is\nempty in the request, the default behavior is to share with `all`. Sharing with\n`all` shares with the default roles `owner`, `renter`, and\n`resident` only. `internal` takes precedence over `all` and `all` takes precedence over other types defined in the array.\nIf shared with `internal`, the response when getting the document will be an empty array.", "example": [ "owner", "renter", "custom:Board" ], "type": "array", "items": { "type": "string" } }, "unitId": { "type": "string", "description": "Reference-ID of the unit", "example": "P-00451-0001" } }, "required": [ "with", "propertyId", "roles", "unitId" ] }, "SharedWithContact": { "type": "object", "properties": { "with": { "type": "string", "description": "Value: `contact`", "example": "contact" }, "contactId": { "type": "string", "description": "ID of the contact", "example": "C-0000312" }, "unitId": { "type": "string", "description": "Reference-ID of the unit", "example": "P-00451-0001" } }, "required": [ "with", "contactId", "unitId" ] }, "SharedWithContract": { "type": "object", "properties": { "with": { "type": "string", "description": "Value: `contract`", "example": "contract" }, "contractId": { "type": "string", "description": "ID of the contract", "example": "P-00451-0001-01" } }, "required": [ "with", "contractId" ] }, "CreateDocument": { "type": "object", "properties": { "id": { "type": "string", "example": "5512-4353" }, "title": { "type": "string", "example": "Musterstraße 3 - Whg 5 - Abrechnung 2021" }, "name": { "type": "string", "example": "Musterstraße_3-Whg_5-Abrechnung_2021.pdf" }, "type": { "example": [ "RootDocumentType", "ParentDocumentType1", "ParentDocumentType2", "DocumentType" ], "type": "array", "items": { "type": "string" } }, "publishedAt": { "type": "string", "example": "2017-04-11T09:53:42.891Z", "format": "date-time", "description": "Date of the document in ISO 8601 date format - will default to the import date." }, "contentType": { "type": "string", "example": "application/pdf", "description": "MIME type of the file." }, "content": { "type": "string", "example": "U3dhZ2dlciByb2Nrcw==", "format": "byte", "description": "Base64 encoded file contents" }, "location": { "type": "string", "example": "https://dms.customer.com/repository/gj82-j8g2-agj8-af81", "description": "Location where to find the document. Might be a full URI or just an ID. This is to be used in conjunction with `resource` - specifying which storage provider should be used. This depends on the storage provider implementation." }, "resource": { "type": "string", "example": "this_custom_dms", "description": "Specifies the storage provider. This has to be one of the supported ones." }, "sharedWith": { "type": "array", "description": "Please note that it is important to select the correct sharedWith type. Especially when a document\n\t\t\t\tis shared in a unit or property, then the role includes also future owners and renters. If the document\n\t\t\t\tshould only be visibile for the current owner or renter, then `sharedWith: 'contact'` should be used.\n\t\t\t", "items": { "oneOf": [ { "$ref": "#/components/schemas/SharedWithProperty" }, { "$ref": "#/components/schemas/SharedWithUnit" }, { "$ref": "#/components/schemas/SharedWithContact" }, { "$ref": "#/components/schemas/SharedWithContract" } ] } }, "delete": { "type": "boolean", "example": false, "description": "Set to true to delete any existing document. If delete is set to true then only the id is required." } }, "required": [ "id" ] }, "CreateDocumentResponse": { "type": "object", "properties": { "jobId": { "type": "string", "example": "5f91a8499ac9ecd53f039848", "description": "Job ID for the document import. Can be used to [get information about the state of the import](#operation/JobsController_getJob)" } }, "required": [ "jobId" ] }, "Document": { "type": "object", "properties": { "id": { "type": "string", "example": "5512-4353" }, "internalId": { "type": "integer", "example": 4215213, "description": "Our internal database id for this document" }, "title": { "type": "string", "example": "Musterstraße 3 - Whg 5 - Abrechnung 2021" }, "type": { "type": "string", "example": "DocumentType" }, "sharedWith": { "type": "array", "items": { "oneOf": [ { "$ref": "#/components/schemas/SharedWithProperty" }, { "$ref": "#/components/schemas/SharedWithUnit" }, { "$ref": "#/components/schemas/SharedWithContact" }, { "$ref": "#/components/schemas/SharedWithContract" } ] } }, "resource": { "type": "string", "example": "someDMS", "description": "Name of the storage provider used to retrieve this document" }, "fileSize": { "type": "integer", "example": 20 }, "publishedAt": { "type": "string", "example": "2017-04-11T09:53:42.891Z", "format": "date", "description": "Date of the document - will default to the import date" }, "downloadCount": { "type": "integer", "example": 26, "description": "The amount of times the document has been downloaded" }, "firstDownloadAt": { "type": "string", "example": "2017-04-15", "format": "date", "description": "The date when the document has been downloaded the first time" } }, "required": [ "id", "internalId", "title", "sharedWith" ] }, "UploadFile": { "type": "object", "properties": { "file": { "type": "string", "format": "binary" } }, "required": [ "file" ] }, "UploadFileResponse": { "type": "object", "properties": { "id": { "type": "integer", "example": 345, "description": "id for the file. Can be used as attachment for tickets and ticket comments" } }, "required": [ "id" ] }, "ContactImport": { "type": "object", "properties": { "id": { "type": "string", "example": "C-0000312", "description": "External ID of the contact. Should be unique, so further imports can update the contact" }, "title": { "type": "string", "example": "Doctor", "description": "The title of the contact" }, "salutation": { "type": "string", "example": "Family", "description": "The salutation for this contact. Could include things like `Family`, `Mister` or `Madam`" }, "firstName": { "type": "string", "example": "Joe", "description": "First name of the contact" }, "lastName": { "type": "string", "example": "Smith", "description": "Last name of the contact. This is required only if `companyName` is empty or not defined. It is used to represent a contact" }, "companyName": { "type": "string", "example": "ACME Industries", "description": "Name of the company the contact is assigned to. This is required only if `lastName` is empty or not defined. If type is `company` this contact will instead be treated as a company" }, "companyRole": { "type": "string", "example": "Director", "description": "Role inside the company" }, "email": { "type": "string", "example": "joe.smith@acme.com", "description": "Email where the contact can be contacted" }, "telephone": { "type": "string", "example": "+49 (0) 89 132", "description": "Telephone number for the contact. No special format is needed here so anything is valid (i.e. +49 (0) 89 123 or 089 123)" }, "mobile": { "type": "string", "example": "+49 (0) 89 132", "description": "Mobile number for the contact. No special format is needed here so anything is valid (i.e. +49 (0) 89 123 or 089 123)" }, "fax": { "type": "string", "example": "+49 (0) 89 132", "description": "Fax number for the contact. No special format is needed here so anything is valid (i.e. +49 (0) 89 123 or 089 123)" }, "website": { "type": "string", "example": "https://casavi.de", "description": "Website for the contact. No format needed, but correct URLs are preferred." }, "street": { "type": "string", "example": "Example street 7", "description": "Street address" }, "postalCode": { "type": "string", "example": "80331" }, "city": { "type": "string", "example": "Munich" }, "country": { "type": "string", "example": "Germany" }, "note": { "type": "string", "example": "Prefers to be contacted by email, telephone only in working hours", "description": "Additional notes for the contact" }, "preferredWayOfContact": { "type": "string", "example": "LETTER", "enum": [ "LETTER", "ONLINE" ], "description": "How the contact would like to be contacted about new documents in the portal" }, "customFields": { "type": "object", "example": { "Email2": "someemail@domain.tld", "Anschrift": "Max Mustermann und Maria Musterfrau" }, "additionalProperties": { "oneOf": [ { "type": "string", "nullable": true }, { "type": "number" }, { "type": "boolean" } ] } }, "delete": { "type": "boolean", "description": "Flag that the contact should be deleted. If delete is set to true then only the id is required.", "default": false, "example": false } }, "required": [ "id", "lastName", "companyName" ] }, "ContractImport": { "type": "object", "properties": { "id": { "type": "string", "example": "P-00451-0001-01", "description": "External ID of the contract. Should be unique across all contracts" }, "contacts": { "example": [ "C-0000312" ], "description": "IDs of the contacts assigned to this unit", "type": "array", "items": { "type": "string" } }, "type": { "type": "string", "example": "renter", "description": "Type of the relationship between contact and unit", "enum": [ "renter", "owner" ] }, "startDate": { "type": "string", "example": "2017-04-11T09:53:42.891Z", "format": "date" }, "endDate": { "type": "string", "example": "2019-04-11T09:53:42.891Z", "format": "date" } }, "required": [ "contacts", "type" ] }, "UnitImport": { "type": "object", "properties": { "id": { "type": "string", "example": "P-00451-0001", "description": "External ID of the unit. Must be unique across all units" }, "name": { "type": "string", "example": "Unit 49812-1312-1", "description": "Display name of the unit" }, "area": { "type": "number", "example": 50.2, "description": "The unit area in square meters" }, "floor": { "type": "string", "example": "3", "description": "The floor where the unit is located" }, "rooms": { "type": "number", "example": 2, "description": "The number of rooms in the unit" }, "mscNumber": { "type": "string", "example": "14", "description": "The ID unit for the measuring service company" }, "propertyMscNumber": { "type": "string", "example": "14", "description": "The ID for the property by measuring service company" }, "purpose": { "type": "string", "example": "private", "description": "The intended usage or purpose of the unit", "enum": [ "parking", "commercial", "private" ] }, "votingShare": { "type": "number", "example": 33.333, "description": "The unit voting share (MEA) needed to determine value based voting principle for this unit. Only relevant for Hybrid Digital Owner Assembly users" }, "number": { "type": "string", "example": "0001", "description": "Sequential ID of the unit. Should be unique only in the property" }, "note": { "type": "string", "example": "Description for a unit" }, "contracts": { "description": "Contracts in units are the only models inside the import that automatically\nremoves items that are not in the current import. So if there are existing\ncontracts in casavi for a unit and an import imports a different contract\n(identified by the associated contacts) the preexisting contacts are set\nto end at the date of the import, effectively ending access for those contacts.", "type": "array", "items": { "$ref": "#/components/schemas/ContractImport" } }, "customFields": { "type": "object", "example": { "Type": "Commercial", "Area": 85.1 }, "additionalProperties": { "oneOf": [ { "type": "string", "nullable": true }, { "type": "number" }, { "type": "boolean" } ] } }, "delete": { "type": "boolean", "description": "Flag that the unit should be deleted. If delete is set to true then only the id is required.", "default": false, "example": false } }, "required": [ "id", "name" ] }, "AddressImport": { "type": "object", "properties": { "street": { "type": "string", "example": "Main street 14" }, "units": { "type": "array", "items": { "$ref": "#/components/schemas/UnitImport" } } }, "required": [ "street" ] }, "PropertyImport": { "type": "object", "properties": { "id": { "type": "string", "example": "P-00451", "description": "External ID of the property. Should be unique, so further imports can update the property" }, "name": { "type": "string", "example": "Easy Living Apartments" }, "note": { "type": "string", "example": "Test description" }, "country": { "type": "string", "example": "Germany" }, "city": { "type": "string", "example": "Munich" }, "postalCode": { "type": "string", "example": "80331" }, "number": { "type": "string", "description": "Sequential identifier of the property. Normally used for storing the object number", "example": "Munich" }, "mscNumber": { "type": "string", "description": "Property ID for a measuring service company", "example": "987654321" }, "mscProviderName": { "type": "string", "description": "Measuring service company name", "example": "Messdienstleistungen GmbH, München" }, "mscProviderIdentifier": { "type": "string", "description": "Measuring service company ID", "example": "99" }, "addresses": { "type": "array", "items": { "$ref": "#/components/schemas/AddressImport" } }, "customFields": { "type": "object", "example": { "Type": "Commercial", "Area": 234.23 }, "additionalProperties": { "oneOf": [ { "type": "string", "nullable": true }, { "type": "number" }, { "type": "boolean" } ] } }, "delete": { "type": "boolean", "description": "Flag that the property should be deleted. If delete is set to true then only the id is required.", "default": false, "example": false } }, "required": [ "id", "name" ] }, "ResponsibilityImport": { "type": "object", "properties": { "name": { "type": "string", "example": "Property Management", "description": "Name of the responsibility type" }, "contactId": { "type": "string", "example": "C-0000312", "description": "ID of the contact that should be associated" }, "propertyId": { "type": "string", "example": "P-00451", "description": "ID of the property" }, "email": { "type": "string", "example": "contactme@acme.com", "description": "Email address that should be shown to the users. Will be automatically filled with the contact email address. Set to null to disable this" }, "telephone": { "type": "string", "example": "+49 89 12312312313", "description": "Telephone number that should be shown to the users. Will be automatically filled with the contact telephone number. Set to null to disable this" }, "showOnDashboard": { "type": "boolean", "example": false, "description": "Flag that the responsibility should be shown on the community dashboard", "default": false }, "showInCommunity": { "type": "boolean", "example": false, "description": "Flag that the responsibility should be shown in the community detail view for responsibilities", "default": false }, "delete": { "type": "boolean", "description": "Flag that the responsibility should be deleted", "default": false, "example": false } }, "required": [ "name", "contactId", "propertyId" ] }, "TopLevelUnitImport": { "type": "object", "properties": { "id": { "type": "string", "example": "P-00451-0001", "description": "External ID of the unit. Must be unique across all units" }, "name": { "type": "string", "example": "Unit 49812-1312-1", "description": "Display name of the unit" }, "area": { "type": "number", "example": 50.2, "description": "The unit area in square meters" }, "floor": { "type": "string", "example": "3", "description": "The floor where the unit is located" }, "rooms": { "type": "number", "example": 2, "description": "The number of rooms in the unit" }, "mscNumber": { "type": "string", "example": "14", "description": "The ID unit for the measuring service company" }, "propertyMscNumber": { "type": "string", "example": "14", "description": "The ID for the property by measuring service company" }, "purpose": { "type": "string", "example": "private", "description": "The intended usage or purpose of the unit", "enum": [ "parking", "commercial", "private" ] }, "votingShare": { "type": "number", "example": 33.333, "description": "The unit voting share (MEA) needed to determine value based voting principle for this unit. Only relevant for Hybrid Digital Owner Assembly users" }, "number": { "type": "string", "example": "0001", "description": "Sequential ID of the unit. Should be unique only in the property" }, "note": { "type": "string", "example": "Description for a unit" }, "contracts": { "description": "Contracts in units are the only models inside the import that automatically\nremoves items that are not in the current import. So if there are existing\ncontracts in casavi for a unit and an import imports a different contract\n(identified by the associated contacts) the preexisting contacts are set\nto end at the date of the import, effectively ending access for those contacts.", "type": "array", "items": { "$ref": "#/components/schemas/ContractImport" } }, "customFields": { "type": "object", "example": { "Type": "Commercial", "Area": 85.1 }, "additionalProperties": { "oneOf": [ { "type": "string", "nullable": true }, { "type": "number" }, { "type": "boolean" } ] } }, "delete": { "type": "boolean", "description": "Flag that the unit should be deleted. If delete is set to true then only the id is required.", "default": false, "example": false }, "propertyId": { "type": "string", "description": "Id of the property this unit belongs to", "example": "P-00451" }, "addressId": { "type": "string", "description": "Id of the address this unit belongs to", "example": "P-00451-01" }, "addressName": { "type": "string", "description": "Name of the address this unit belongs to", "example": "Main street 14" } }, "required": [ "id", "name" ] }, "MasterData": { "type": "object", "properties": { "contacts": { "type": "array", "items": { "$ref": "#/components/schemas/ContactImport" } }, "properties": { "type": "array", "items": { "$ref": "#/components/schemas/PropertyImport" } }, "responsibilities": { "type": "array", "items": { "$ref": "#/components/schemas/ResponsibilityImport" } }, "units": { "type": "array", "items": { "$ref": "#/components/schemas/TopLevelUnitImport" } } } }, "ImportMasterDataResponse": { "type": "object", "properties": { "jobId": { "type": "string", "example": "5f91a8499ac9ecd53f039848", "description": "Job ID for the import. Can be used to [get information about the state of the import](#operation/JobsController_getJob)" } }, "required": [ "jobId" ] }, "ImportError": { "type": "object", "properties": { "model": { "type": "string", "example": "Contact" }, "field": { "type": "string", "example": "id" }, "reason": { "type": "string", "example": "not_found" } } }, "ImportFailure": { "type": "object", "properties": { "entity": { "type": "object", "description": "Entity that was transmitted to importer (Contact/Property/Unit/...)" }, "errors": { "type": "array", "items": { "$ref": "#/components/schemas/ImportError" } } } }, "ImportJobResult": { "type": "object", "properties": { "created": { "type": "integer", "example": 21 }, "updated": { "type": "integer", "example": 214 }, "deleted": { "type": "integer", "example": 0 }, "failed": { "type": "array", "items": { "$ref": "#/components/schemas/ImportFailure" } } } }, "ImportJobResults": { "type": "object", "properties": { "contacts": { "$ref": "#/components/schemas/ImportJobResult" }, "properties": { "$ref": "#/components/schemas/ImportJobResult" }, "units": { "$ref": "#/components/schemas/ImportJobResult" }, "documents": { "$ref": "#/components/schemas/ImportJobResult" }, "responsibilities": { "$ref": "#/components/schemas/ImportJobResult" } } }, "ImportJob": { "type": "object", "properties": { "id": { "type": "string", "example": "58eca7a398af3a14a3af2efe" }, "tenantId": { "type": "number", "example": 1 }, "createdAt": { "type": "string", "format": "date-time", "example": "2017-04-10T09:53:42.891Z" }, "completedAt": { "type": "string", "format": "date-time", "example": "2017-04-11T09:53:42.891Z" }, "completed": { "type": "boolean", "example": true }, "contactName": { "type": "string", "example": null }, "integrationType": { "type": "string", "example": "DOCUMENTS" }, "results": { "$ref": "#/components/schemas/ImportJobResults" }, "updateExisting": { "type": "boolean", "example": true }, "fileContainHeaders": { "type": "boolean", "example": null }, "mapping": { "type": "object", "example": null }, "uploadType": { "type": "string", "example": "api" }, "hasContent": { "type": "boolean", "example": true }, "progress": { "type": "number", "example": 1 }, "running": { "type": "boolean", "example": false } }, "required": [ "id" ] }, "RestHookGetResponse": { "type": "object", "properties": { "internalId": { "type": "integer", "description": "Internal id of webhook subscription.", "example": 11 }, "eventName": { "type": "string", "description": "Type of event.", "example": "contact_created" }, "hookUrl": { "type": "string", "description": "The endpoint URL called from our side.", "example": "https://custom.tld/casavi-events" }, "username": { "type": "string", "description": "Username used in the hookUrl", "example": "user" }, "createdAt": { "type": "string", "format": "datetime", "description": "Date and time when ticket was created, ISO 8601.", "example": "2022-08-07T14:54:57Z" } } }, "RestHookCreate": { "type": "object", "properties": { "eventName": { "type": "string", "description": "Type of event that will trigger the webhook call.", "enum": [ "contact_created", "contact_updated", "contact_archived", "document_downloaded", "contract_enddate_updated", "ticket_ownerassembly_scheduled", "ticket_ownerassembly_deleted", "ticket_created", "ticket_updated", "ticket_status_changed", "ticket_comment_created", "ticket_comment_updated", "order_created", "order_updated", "order_comment_created", "order_comment_updated", "ticket_checklist_item_deleted", "ticket_checklist_item_updated" ] }, "hookUrl": { "type": "string", "description": "The endpoint URL that will be called from our side.", "example": "https://user:password@custom.tld/casavi-events" } }, "required": [ "eventName", "hookUrl" ] }, "RestHookCreateResponse": { "type": "object", "properties": { "id": { "type": "integer", "description": "id of webhook subscription.", "example": 11 } }, "required": [ "id" ] }, "StaffMemberCreate": { "type": "object", "properties": { "id": { "type": "string", "description": "External ID of the staff member. Should be unique, so further imports\ncan update the staff member", "example": "C-0000312" }, "firstName": { "type": "string", "description": "First name of the staff member.", "example": "Joe" }, "lastName": { "type": "string", "description": "Last name of the staff member.", "example": "Smith" }, "email": { "type": "string", "description": "Email where the staff member can be contacted", "example": "joe.smith@acme.com" }, "role": { "type": "string", "enum": [ "MANAGER", "ADMIN", "EDITOR" ], "description": "Role of the staff member in tenant", "example": "MANAGER" } }, "required": [ "id", "firstName", "lastName", "role" ] }, "StaffMember": { "type": "object", "properties": { "id": { "type": "string", "description": "External ID of the staff member. Should be unique, so further imports\ncan update the staff member", "example": "C-0000312" }, "internalId": { "type": "integer", "description": "Our internal database id", "example": 41251 }, "firstName": { "type": "string", "description": "First name of the staff member.", "example": "Joe" }, "lastName": { "type": "string", "description": "Last name of the staff member.", "example": "Smith" }, "email": { "type": "string", "description": "Email where the staff member can be contacted", "example": "joe.smith@acme.com" }, "role": { "type": "string", "enum": [ "MANAGER", "ADMIN", "EDITOR" ], "description": "Role of the staff member in tenant", "example": "MANAGER" } }, "required": [ "id", "internalId", "firstName", "lastName", "role" ] }, "Contract": { "type": "object", "properties": { "id": { "type": "string", "example": "P-00451-0001-01", "description": "External ID of the contract. Should be unique across all contracts" }, "contacts": { "example": [ "C-0000312" ], "description": "IDs of the contacts assigned to this unit", "type": "array", "items": { "type": "string" } }, "type": { "type": "string", "example": "renter", "description": "Type of the relationship between contact and unit", "enum": [ "renter", "owner" ] }, "startDate": { "type": "string", "example": "2017-04-11T09:53:42.891Z", "format": "date-time" }, "endDate": { "type": "string", "example": "2019-04-11T09:53:42.891Z", "format": "date-time" }, "createdAt": { "format": "date-time", "type": "string", "description": "Date and time when contract was created, ISO 8601", "example": "2018-08-07T14:54:57Z" }, "updatedAt": { "format": "date-time", "type": "string", "description": "Date and time when contract was updated, ISO 8601", "example": "2019-04-11T09:53:42.891Z" } }, "required": [ "contacts", "type" ] }, "Unit": { "type": "object", "properties": { "id": { "type": "string", "example": "P-00451-0001", "description": "External ID of the unit. Must be unique across all units" }, "internalId": { "type": "integer", "example": 41251, "description": "Our internal database id", "readOnly": true }, "number": { "type": "string", "example": "0001", "description": "Sequential ID of the unit. Should be unique only in the property" }, "area": { "type": "string", "example": "50.2", "description": "The unit area in square meters" }, "floor": { "type": "string", "example": "3", "description": "The floor where the unit is located" }, "rooms": { "type": "string", "example": "2", "description": "The number of rooms in the unit" }, "mscNumber": { "type": "string", "example": "15", "description": "The ID unit for the measuring service company" }, "propertyMscNumber": { "type": "string", "example": 15, "description": "The ID for the property by measuring service company" }, "purpose": { "type": "string", "example": "private", "description": "The intended usage or purpose of the unit", "enum": [ "parking", "commercial", "private" ], "nullable": true }, "votingShare": { "type": "number", "example": 3.141, "description": "The unit voting share (MEA) needed to determine the value based voting principle for this unit. This will only be present in the response if the Hybrid Digital Owner Assembly feature is active." }, "name": { "type": "string", "example": "Unit 49812-1312-1", "description": "Display name of the unit" }, "note": { "type": "string", "example": "Description for a unit" }, "propertyId": { "type": "string", "example": "lbef1d5a-hbae-4620-81cd-65f7911ac623", "description": "External ID of the property" }, "address": { "type": "string", "example": "Main street 5", "description": "Street name of the unit" }, "contracts": { "description": "Contracts in units are the only models inside the import that automatically\nremoves items that are not in the current import. So if there are existing\ncontracts in casavi for a unit and an import imports a different contract\n(identified by the associated contacts) the preexisting contacts are set\nto end at the date of the import, effectively ending access for those contacts.", "type": "array", "items": { "$ref": "#/components/schemas/Contract" } }, "customFields": { "type": "object", "description": "CustomFields can be created by managers and filled with any data. They have a type and are referenced by their name.", "example": { "Type": "Commercial", "Area": 85.1 }, "additionalProperties": { "oneOf": [ { "type": "string", "nullable": true }, { "type": "number" }, { "type": "boolean" } ] } }, "appLink": { "type": "string", "description": "A link to the unit in the casavi web app", "example": "https://app.mycasavi.com/tenant/1/manage/communities/123/units/12345" } }, "required": [ "id", "internalId", "purpose", "name", "appLink" ] }, "TicketSimple": { "type": "object", "properties": { "id": { "type": "string", "description": "External ID of the ticket. Should be unique.", "example": "20131" }, "internalId": { "type": "integer", "description": "Our internal database id", "example": 41251 }, "number": { "type": "integer", "description": "Consecutive ticket number", "example": 414 }, "title": { "type": "string", "description": "Ticket title. Should not be empty", "example": "Test ticket" }, "description": { "type": "string", "description": "Ticket description", "example": "Test description" }, "type": { "type": "string", "description": "Ticket type", "example": "Test type" }, "typeGroup": { "type": "string", "description": "Ticket type group", "example": "Testing" }, "propertyId": { "type": "string", "description": "External ID of the property", "example": "P-00451" }, "unitId": { "type": "string", "description": "External ID of the unit", "example": "P-00451-0001" }, "status": { "type": "string", "enum": [ "PENDING", "OPEN", "CLOSED", "INPROGRESS", "POSTPONED" ], "description": "Ticket status", "example": "OPEN" }, "statusText": { "type": "string", "description": "Custom ticket status label. If set, the customers will see this\ntext instead of a translation for what's provided in the attribute status.", "example": "Rejected" }, "contactId": { "type": "string", "description": "External ID of the contact that created the ticket", "example": "C-0000312" }, "contactName": { "type": "string", "description": "Contact name", "example": "John Doe" }, "contactTelephone": { "type": "string", "description": "Contact telephone", "example": "+345353632" }, "contactEmail": { "type": "string", "description": "Contact email", "example": "john@casavi.de" }, "sharedWithContacts": { "example": [ "C-0000312", "C-0000450" ], "description": "IDs of contacts the ticket should be shared with", "type": "array", "items": { "type": "string" } }, "sharedWithProperty": { "type": "boolean", "example": true, "description": "Shows if the ticket is shared with the property" }, "assignedToName": { "type": "string", "description": "The managers name that is assigned to the ticket", "example": "Miriam Manager" }, "assignedToId": { "type": "string", "description": "Manager reference ID that is assigned to the ticket", "example": "M-000113" }, "createdAt": { "type": "string", "description": "Date and time when ticket was created, ISO 8601", "example": "2015-08-07T14:54:57Z" }, "lastModified": { "type": "string", "description": "Date and time when ticket was last updated, ISO 8601", "example": "2015-08-19T12:43:30Z" }, "closedAt": { "type": "string", "description": "Date and time when ticket was closed, ISO 8601", "example": "2015-09-08T15:14:53Z" }, "reportedAt": { "type": "string", "description": "Date and time when ticket was reported, ISO 8601. Returns \"Invalid Date\" if the date is invalid.", "example": "2015-08-07T14:54:57Z" }, "attachments": { "description": "Information about the attachments of the ticket", "type": "array", "items": { "$ref": "#/components/schemas/AttachmentDetail" } }, "appLink": { "type": "string", "description": "A link to the ticket in the casavi web app", "example": "https://app.mycasavi.com/tenant/1/manage/tickets/12345" } }, "required": [ "id", "internalId", "title", "propertyId", "appLink" ] }, "PropertyForTicketType": { "type": "object", "properties": { "id": { "type": "string", "example": "P-00451", "description": "External ID of the property" }, "name": { "type": "string", "example": "Easy Living Apartments", "description": "Name of the property" } } }, "TicketChecklistTemplate": { "type": "object", "properties": { "internalId": { "type": "integer", "description": "Internal Id of the ticket checklist template. It is unique.", "example": 11 }, "name": { "type": "string", "description": "Name of ticket checklist template.", "example": "Ticket check #1" }, "items": { "description": "Ticket checklist template items.", "example": [ "Option #1", "Option #2" ], "type": "array", "items": { "type": "string" } }, "createdAt": { "type": "string", "format": "datetime", "description": "Date and time when ticket checklist template was created, ISO 8601.", "example": "2022-08-07T14:54:57Z" } } }, "CustomFieldTicketType": { "type": "object", "properties": { "name": { "type": "string", "example": "name", "description": "The name of the custom field" }, "description": { "type": "string", "example": "This is a custom field", "description": "The description of the custom field" }, "required": { "type": "boolean", "example": true, "description": "Whether the custom field is required" }, "fieldType": { "type": "string", "description": "The type of the custom field", "enum": [ "TEXTFIELD", "TEXTBOX", "NUMBER", "CHECKBOX", "DROPDOWN", "DATE", "DOCUMENT", "SERVICE_PROVIDER_CONTRACT" ] }, "options": { "example": [ "Option 1", "Option 2", "Option 3" ], "default": [], "description": "Available dropdown options (only present when fieldType is DROPDOWN)", "type": "array", "items": { "type": "string" } }, "withTime": { "type": "boolean", "example": false, "default": false, "description": "Indicates whether the date field includes time selection (only present when fieldType is DATE)" }, "decimalPlaces": { "type": "integer", "example": 2, "default": 0, "description": "Number of decimal places for numeric input (only present when fieldType is NUMBER)" } } }, "TicketType": { "type": "object", "properties": { "internalId": { "type": "integer", "description": "Internal Id of the ticket type. It is unique.", "example": 11 }, "name": { "type": "string", "description": "Name of ticket type.", "example": "General information" }, "description": { "type": "string", "description": "Ticket type description.", "example": "Description example" }, "category": { "type": "string", "description": "Ticket type category.", "example": "Category #1" }, "responsibilities": { "description": "Ticket type responsibilities. Can be `all` if it is available for all roles", "example": [ "Role #1", "Role #2" ], "type": "array", "items": { "type": "string" } }, "properties": { "description": "Ticket type properties", "type": "array", "items": { "$ref": "#/components/schemas/PropertyForTicketType" } }, "checklistTemplates": { "description": "Ticket type checklist templates", "type": "array", "items": { "$ref": "#/components/schemas/TicketChecklistTemplate" } }, "visibleFor": { "description": "Visibility in the customer portal for certain roles.", "example": [ "Resident", "Tenant", "Owner" ], "type": "array", "items": { "type": "string" } }, "customFields": { "description": "Custom fields of the ticket type", "type": "array", "items": { "$ref": "#/components/schemas/CustomFieldTicketType" } }, "createdAt": { "type": "string", "format": "datetime", "description": "Date and time when ticket type was created, ISO 8601.", "example": "2022-08-07T14:54:57Z" } } }, "OrderTypeCustomField": { "type": "object", "properties": { "name": { "type": "string", "example": "name", "description": "The name of the custom field" }, "description": { "type": "string", "example": "This is a custom field", "description": "The description of the custom field" }, "required": { "type": "boolean", "example": true, "description": "Whether the custom field is required" }, "fieldType": { "type": "string", "description": "The type of the custom field", "enum": [ "TEXTFIELD", "TEXTBOX", "NUMBER", "CHECKBOX", "DROPDOWN", "DATE", "DOCUMENT", "SERVICE_PROVIDER_CONTRACT" ] }, "options": { "example": [ "Option 1", "Option 2", "Option 3" ], "default": [], "description": "Available dropdown options (only present when fieldType is DROPDOWN)", "type": "array", "items": { "type": "string" } }, "withTime": { "type": "boolean", "example": false, "default": false, "description": "Indicates whether the date field includes time selection (only present when fieldType is DATE)" }, "decimalPlaces": { "type": "integer", "example": 2, "default": 0, "description": "Number of decimal places for numeric input (only present when fieldType is NUMBER)" } } }, "TicketOrderType": { "type": "object", "properties": { "internalId": { "type": "integer", "description": "Internal Id of the order type. It is unique.", "example": 11 }, "name": { "type": "string", "description": "Name of order type.", "example": "General information" }, "responsibilities": { "description": "Order type responsibilities. Can be `all` if it is available for all roles", "example": [ "Role #1", "Role #2" ], "type": "array", "items": { "type": "string" } }, "customFields": { "description": "Custom fields of the order type", "type": "array", "items": { "$ref": "#/components/schemas/OrderTypeCustomField" } }, "createdAt": { "type": "string", "format": "datetime", "description": "Date and time when order type was created, ISO 8601.", "example": "2022-08-07T14:54:57Z" } } }, "TicketChecklistItem": { "type": "object", "properties": { "text": { "type": "string", "description": "Item text", "example": "Option #1" }, "checked": { "type": "boolean", "description": "Status of the checklist item", "example": true }, "createdAt": { "type": "string", "format": "datetime", "description": "Date and time when ticket checklist item was created, ISO 8601.", "example": "2022-08-07T14:54:57Z" } } }, "TicketChecklist": { "type": "object", "properties": { "internalId": { "type": "integer", "description": "Internal Id of the ticket checklist. It is unique.", "example": 11 }, "name": { "type": "string", "description": "Name of ticket checklist.", "example": "Ticket check #1" }, "items": { "type": "array", "items": { "$ref": "#/components/schemas/TicketChecklistItem" } }, "createdAt": { "type": "string", "format": "datetime", "description": "Date and time when ticket checklist was created, ISO 8601.", "example": "2022-08-07T14:54:57Z" } } }, "TicketTypeGroup": { "type": "object", "properties": { "internalId": { "type": "integer", "description": "Internal Id of the ticket type group. It is unique.", "example": 11 }, "name": { "type": "string", "description": "Name of ticket type group.", "example": "General group" }, "description": { "type": "string", "description": "Ticket type group description.", "example": "Description example" }, "createdAt": { "type": "string", "format": "datetime", "description": "Date and time when ticket type group was created, ISO 8601.", "example": "2022-08-07T14:54:57Z" } } }, "TicketOrderCustom": { "type": "object", "properties": { "id": { "type": "string", "description": "ID of the order. Should be unique in ticket. Also called internal order number and visible in the UI", "example": "T-000987" }, "title": { "type": "string", "description": "Order title. Should not be empty", "example": "Please fix broken water pipe in Musterstraße 33" }, "description": { "type": "string", "description": "Order description", "example": "Hello,\n\nplease repair the broken water pipe. It has been leaking since a few days.\nThe address is Musterstraße 33, please contact us for an appointment." }, "createdById": { "type": "string", "description": "External ID of the contact the order is created by", "example": "E-000482" }, "assignedToId": { "type": "string", "description": "External ID of the contact the order is assigned to", "example": "E-000481" }, "completed": { "type": "boolean", "deprecated": true, "description": "If order completed or not. This has been replaced by `status` as there are more possibilities.", "example": false }, "status": { "type": "string", "enum": [ "OPEN", "ACCEPTED", "COMPLETED", "DECLINED" ], "description": "The current status for this order", "example": "OPEN" }, "type": { "type": "string", "description": "Order type", "example": "General information" }, "ticketId": { "type": "string", "description": "Reference ID of the ticket.", "example": "ABR-4556" }, "createdAt": { "type": "string", "description": "Creation date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "acceptedAt": { "type": "string", "description": "Acceptance date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "completedAt": { "type": "string", "description": "Completion date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "declinedAt": { "type": "string", "description": "Decline date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "attachments": { "description": "Information about the attachments of the ticket order", "type": "array", "items": { "$ref": "#/components/schemas/AttachmentDetail" } }, "appLink": { "type": "string", "description": "A link to the order in the casavi web app", "example": "https://app.mycasavi.com/tenant/1/manage/tickets/12345/orders/98765" } } }, "CreateTicket": { "type": "object", "properties": { "id": { "type": "string", "description": "External ID of the ticket. Should be unique.", "example": "20131" }, "number": { "type": "integer", "description": "Consecutive ticket number", "example": 414 }, "title": { "type": "string", "description": "Ticket title. Should not be empty", "example": "Test ticket" }, "description": { "type": "string", "description": "Ticket description", "example": "Test description" }, "type": { "type": "string", "description": "Ticket type", "example": "Test type" }, "propertyId": { "type": "string", "description": "External ID of the property", "example": "P-00451" }, "unitId": { "type": "string", "description": "External ID of the unit", "example": "P-00451-0001" }, "status": { "type": "string", "enum": [ "PENDING", "OPEN", "CLOSED", "INPROGRESS", "POSTPONED" ], "description": "Ticket status", "example": "OPEN" }, "statusText": { "type": "string", "description": "Custom ticket status label. If set, the customers will see this\ntext instead of a translation for what's provided in the attribute status.", "example": "Rejected" }, "contactId": { "type": "string", "description": "External ID of the contact that created the ticket", "example": "C-0000312" }, "sharedWithContacts": { "example": [ "C-0000312", "C-0000450" ], "description": "IDs of contacts the ticket should be shared with", "type": "array", "items": { "type": "string" } }, "assignedToId": { "type": "string", "description": "Manager reference ID that is assigned to the ticket", "example": "M-000113" }, "comment": { "type": "string", "description": "Can be used as a shorthand when changing the status via PUT method", "example": "We started working on your issue and will update you with the progress." }, "suppressRatingRequest": { "type": "boolean", "description": "When closing a ticket and the feature is active, a request to rate the process will be sent out.\nOne can suppress this by setting this flag to true.", "example": true }, "customFields": { "type": "object", "description": "A-key value pair of custom fields for the given Ticket Type", "example": { "Title": "Lost key", "Description": "Please send a Locksmith!" }, "additionalProperties": { "oneOf": [ { "type": "string", "nullable": true }, { "type": "number" }, { "type": "boolean" } ] } } }, "required": [ "id", "title", "propertyId" ] }, "TicketCommentSimple": { "type": "object", "properties": { "id": { "type": "integer", "description": "Internal ID of the ticket comment. Should be unique", "example": 20131 }, "text": { "type": "string", "description": "Ticket comment text. Should not be empty", "example": "Test ticket comment" }, "isInternal": { "type": "boolean", "description": "Reflect if comment is internal", "example": false }, "fallbackToAccount": { "type": "boolean", "description": "If author is not found via email address or id, don't throw an\nerror but instead use the account name as the authors name", "example": false }, "authorId": { "type": "string", "description": "External ID of the manager that created this comment", "example": "E-000481" }, "authorName": { "type": "string", "description": "Contact name", "example": "John Doe" }, "authorEmail": { "type": "string", "description": "Email of the contact", "example": "manager1@propertymanagement.com" }, "createdAt": { "type": "string", "description": "Creation date. Date formatted according to ISO 8601", "example": "2016-08-05" } }, "required": [ "id", "text" ] }, "TicketOrderSimple": { "type": "object", "properties": { "id": { "type": "string", "description": "ID of the order. Should be unique in ticket. Also called internal order number and visible in the UI", "example": "T-000987" }, "title": { "type": "string", "description": "Order title. Should not be empty", "example": "Please fix broken water pipe in Musterstraße 33" }, "description": { "type": "string", "description": "Order description", "example": "Hello,\n\nplease repair the broken water pipe. It has been leaking since a few days.\nThe address is Musterstraße 33, please contact us for an appointment." }, "completed": { "type": "boolean", "deprecated": true, "description": "If order completed or not. This has been replaced by `status` as there are more possibilities.", "example": false }, "status": { "type": "string", "enum": [ "OPEN", "ACCEPTED", "COMPLETED", "DECLINED" ], "description": "The current status for this order", "example": "OPEN" }, "type": { "type": "string", "description": "Order type", "example": "General information" }, "ticketId": { "type": "string", "description": "Reference ID of the ticket.", "example": "ABR-4556" }, "createdAt": { "type": "string", "description": "Creation date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "acceptedAt": { "type": "string", "description": "Acceptance date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "completedAt": { "type": "string", "description": "Completion date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "declinedAt": { "type": "string", "description": "Decline date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "customFields": { "type": "object", "description": "A list of custom fields that can be added for order if they exist in the order type", "example": { "Issue": "Lost key", "Description": "Please send a Locksmith!" }, "additionalProperties": { "oneOf": [ { "type": "string", "nullable": true }, { "type": "number" }, { "type": "boolean" } ] } }, "appLink": { "type": "string", "description": "A link to the order in the casavi web app", "example": "https://app.mycasavi.com/tenant/1/manage/tickets/12345/orders/98765" } }, "required": [ "id", "title" ] }, "Ticket": { "type": "object", "properties": { "id": { "type": "string", "description": "External ID of the ticket. Should be unique.", "example": "20131" }, "internalId": { "type": "integer", "description": "Our internal database id", "example": 41251 }, "number": { "type": "integer", "description": "Consecutive ticket number", "example": 414 }, "title": { "type": "string", "description": "Ticket title. Should not be empty", "example": "Test ticket" }, "description": { "type": "string", "description": "Ticket description", "example": "Test description" }, "type": { "type": "string", "description": "Ticket type", "example": "Test type" }, "typeGroup": { "type": "string", "description": "Ticket type group", "example": "Testing" }, "propertyId": { "type": "string", "description": "External ID of the property", "example": "P-00451" }, "unitId": { "type": "string", "description": "External ID of the unit", "example": "P-00451-0001" }, "status": { "type": "string", "enum": [ "PENDING", "OPEN", "CLOSED", "INPROGRESS", "POSTPONED" ], "description": "Ticket status", "example": "OPEN" }, "statusText": { "type": "string", "description": "Custom ticket status label. If set, the customers will see this\ntext instead of a translation for what's provided in the attribute status.", "example": "Rejected" }, "contactId": { "type": "string", "description": "External ID of the contact that created the ticket", "example": "C-0000312" }, "contactName": { "type": "string", "description": "Contact name", "example": "John Doe" }, "contactTelephone": { "type": "string", "description": "Contact telephone", "example": "+345353632" }, "contactEmail": { "type": "string", "description": "Contact email", "example": "john@casavi.de" }, "sharedWithContacts": { "example": [ "C-0000312", "C-0000450" ], "description": "IDs of contacts the ticket should be shared with", "type": "array", "items": { "type": "string" } }, "sharedWithProperty": { "type": "boolean", "example": true, "description": "Shows if the ticket is shared with the property" }, "assignedToName": { "type": "string", "description": "The managers name that is assigned to the ticket", "example": "Miriam Manager" }, "assignedToId": { "type": "string", "description": "Manager reference ID that is assigned to the ticket", "example": "M-000113" }, "createdAt": { "type": "string", "description": "Date and time when ticket was created, ISO 8601", "example": "2015-08-07T14:54:57Z" }, "lastModified": { "type": "string", "description": "Date and time when ticket was last updated, ISO 8601", "example": "2015-08-19T12:43:30Z" }, "closedAt": { "type": "string", "description": "Date and time when ticket was closed, ISO 8601", "example": "2015-09-08T15:14:53Z" }, "reportedAt": { "type": "string", "description": "Date and time when ticket was reported, ISO 8601. Returns \"Invalid Date\" if the date is invalid.", "example": "2015-08-07T14:54:57Z" }, "comments": { "description": "Ticket comments. Will be available only for single ticket response.", "type": "array", "items": { "$ref": "#/components/schemas/TicketCommentSimple" } }, "orders": { "description": "Ticket orders. Will be available only for single ticket response.", "type": "array", "items": { "$ref": "#/components/schemas/TicketOrderSimple" } }, "attachments": { "description": "Information about the attachments of the ticket", "type": "array", "items": { "$ref": "#/components/schemas/AttachmentDetail" } }, "customFields": { "type": "object", "description": "A list of custom fields and their values for this ticket", "example": { "Issue": "Lost key", "Description": "Please send a Locksmith!" }, "additionalProperties": { "oneOf": [ { "type": "string", "nullable": true }, { "type": "number" }, { "type": "boolean" } ] } }, "appLink": { "type": "string", "description": "A link to the ticket in the casavi web app", "example": "https://app.mycasavi.com/tenant/1/manage/tickets/12345" } }, "required": [ "id", "internalId", "title", "propertyId", "appLink" ] }, "UpdateTicket": { "type": "object", "properties": { "id": { "type": "string", "description": "External ID of the ticket. Should be unique.", "example": "20131" }, "number": { "type": "integer", "description": "Consecutive ticket number", "example": 414 }, "title": { "type": "string", "description": "Ticket title. Should not be empty", "example": "Test ticket" }, "description": { "type": "string", "description": "Ticket description", "example": "Test description" }, "type": { "type": "string", "description": "Ticket type", "example": "Test type" }, "unitId": { "type": "string", "description": "External ID of the unit", "example": "P-00451-0001" }, "status": { "type": "string", "enum": [ "PENDING", "OPEN", "CLOSED", "INPROGRESS", "POSTPONED" ], "description": "Ticket status", "example": "OPEN" }, "statusText": { "type": "string", "description": "Custom ticket status label. If set, the customers will see this\ntext instead of a translation for what's provided in the attribute status.", "example": "Rejected" }, "contactId": { "type": "string", "description": "External ID of the contact that created the ticket", "example": "C-0000312" }, "sharedWithContacts": { "example": [ "C-0000312", "C-0000450" ], "description": "IDs of contacts the ticket should be shared with", "type": "array", "items": { "type": "string" } }, "assignedToId": { "type": "string", "description": "Manager reference ID that is assigned to the ticket", "example": "M-000113" }, "comment": { "type": "string", "description": "Can be used as a shorthand when changing the status via PUT method", "example": "We started working on your issue and will update you with the progress." }, "suppressRatingRequest": { "type": "boolean", "description": "When closing a ticket and the feature is active, a request to rate the process will be sent out.\nOne can suppress this by setting this flag to true.", "example": true }, "customFields": { "type": "object", "description": "A-key value pair of custom fields for the given Ticket Type", "example": { "Title": "Lost key", "Description": "Please send a Locksmith!" }, "additionalProperties": { "oneOf": [ { "type": "string", "nullable": true }, { "type": "number" }, { "type": "boolean" } ] } }, "propertyId": { "type": "string", "description": "External ID of the property", "example": "P-00451" } } }, "CreateTicketComment": { "type": "object", "properties": { "id": { "type": "integer", "description": "ID of the ticket comment. Should be unique. If none is provided, a UUID will be generated automatically", "example": "C-0000231" }, "text": { "type": "string", "description": "Ticket comment text. Should not be empty", "example": "Test ticket comment" }, "isInternal": { "type": "boolean", "description": "Reflect if comment is internal", "default": false, "example": false }, "authorId": { "type": "string", "description": "External ID of the manager that created this comment.", "example": "E-000481" }, "authorEmail": { "type": "string", "description": "Email of the contact", "example": "manager1@propertymanagement.com" }, "fallbackToAccount": { "type": "boolean", "description": "If author is not found via email address or id, don't throw an\nerror but instead use the account name as the authors name", "example": false }, "attachments": { "example": [ 512, 321 ], "description": "IDs of files that should be attached to the comment. Files need\nto be uploaded to /files beforehand (returns an id).", "type": "array", "items": { "type": "integer" } } }, "required": [ "text" ] }, "TicketComment": { "type": "object", "properties": { "id": { "type": "integer", "description": "Internal ID of the ticket comment. Should be unique", "example": 20131 }, "text": { "type": "string", "description": "Ticket comment text. Should not be empty", "example": "Test ticket comment" }, "isInternal": { "type": "boolean", "description": "Reflect if comment is internal", "example": false }, "fallbackToAccount": { "type": "boolean", "description": "If author is not found via email address or id, don't throw an\nerror but instead use the account name as the authors name", "example": false }, "authorId": { "type": "string", "description": "External ID of the manager that created this comment", "example": "E-000481" }, "authorName": { "type": "string", "description": "Contact name", "example": "John Doe" }, "authorEmail": { "type": "string", "description": "Email of the contact", "example": "manager1@propertymanagement.com" }, "createdAt": { "type": "string", "description": "Creation date. Date formatted according to ISO 8601", "example": "2016-08-05" }, "attachments": { "description": "Information about the attachments of the comment", "type": "array", "items": { "$ref": "#/components/schemas/AttachmentDetail" } } }, "required": [ "id", "text" ] }, "UpdateTicketComment": { "type": "object", "properties": { "id": { "type": "integer", "description": "ID of the ticket comment. Should be unique. If none is provided, a UUID will be generated automatically", "example": "C-0000231" }, "isInternal": { "type": "boolean", "description": "Reflect if comment is internal", "default": false, "example": false }, "text": { "type": "string", "description": "Ticket comment text. Should not be empty", "example": "Test ticket comment" } } }, "CreateChoice": { "type": "object", "properties": { "value": { "type": "integer", "description": "Value of the choice. Should be unique", "example": 1 }, "label": { "type": "string", "description": "Label of the choice. Should be unique", "example": "Answer 1" } }, "required": [ "value", "label" ] }, "CreateTicketSurvey": { "type": "object", "properties": { "id": { "type": "string", "description": "Identifier of the ticket survey. Should be unique", "example": "1" }, "assignedToId": { "type": "string", "description": "External ID of the contact the survey is assigned to", "example": "E-000481" }, "title": { "type": "string", "description": "Survey title. Should not be empty", "example": "Test survey" }, "text": { "type": "string", "description": "Survey text to be shown additionally", "example": "Some description to clarify what this question is about." }, "choices": { "type": "array", "items": { "$ref": "#/components/schemas/CreateChoice" } } }, "required": [ "id", "assignedToId", "title", "choices" ] }, "TicketSurvey": { "type": "object", "properties": { "id": { "type": "string", "description": "Identifier of the ticket survey. Should be unique", "example": "1" }, "title": { "type": "string", "description": "Survey title. Should not be empty", "example": "Test survey" }, "text": { "type": "string", "description": "Survey text to be shown additionally", "example": "Some description to clarify what this question is about." } }, "required": [ "id", "title" ] }, "CreateConferenceLink": { "type": "object", "properties": { "conferenceLink": { "type": "string", "description": "A valid URL that will link users to the virtual conference from the casavi UI", "example": "https://example.de" } }, "required": [ "conferenceLink" ] }, "CreateTicketOrder": { "type": "object", "properties": { "id": { "type": "string", "description": "ID of the order. Should be unique in ticket. Also called internal order number and visible in the UI", "example": "T-000987" }, "title": { "type": "string", "description": "Ticket order title. Should not be empty", "example": "Please fix broken water pipe in Musterstraße 33" }, "description": { "type": "string", "description": "Order description", "example": "Hello,\n\nplease repair the broken water pipe. It has been leaking since a few days.\nThe address is Musterstraße 33, please contact us for an appointment." }, "createdById": { "type": "string", "description": "External ID of the contact the order is created by", "example": "E-000482" }, "assignedToId": { "type": "string", "description": "External ID of the contact the order is assigned to", "example": "E-000481" }, "completed": { "type": "boolean", "deprecated": true, "description": "If order completed or not. This has been replaced by `status` as there are more possibilities.", "example": true }, "status": { "type": "string", "enum": [ "OPEN", "ACCEPTED", "COMPLETED", "DECLINED" ], "description": "The current status for this order", "example": "OPEN" }, "type": { "type": "string", "description": "Specify the order type", "example": "General type" }, "attachments": { "example": [ 512, 321 ], "description": "IDs of files that should be attached to the ticket order. Files need\nto be uploaded to /files beforehand (returns an id).", "type": "array", "items": { "type": "number" } }, "customFields": { "type": "object", "description": "A list of custom fields that can be added for order if they exist in the order type", "example": { "Issue": "Lost key", "Description": "Please send a Locksmith!" }, "additionalProperties": { "oneOf": [ { "type": "string", "nullable": true }, { "type": "number" }, { "type": "boolean" } ] } } }, "required": [ "id", "title" ] }, "TicketOrder": { "type": "object", "properties": { "id": { "type": "string", "description": "ID of the order. Should be unique in ticket. Also called internal order number and visible in the UI", "example": "T-000987" }, "title": { "type": "string", "description": "Order title. Should not be empty", "example": "Please fix broken water pipe in Musterstraße 33" }, "description": { "type": "string", "description": "Order description", "example": "Hello,\n\nplease repair the broken water pipe. It has been leaking since a few days.\nThe address is Musterstraße 33, please contact us for an appointment." }, "createdById": { "type": "string", "description": "External ID of the contact the order is created by", "example": "E-000482" }, "assignedToId": { "type": "string", "description": "External ID of the contact the order is assigned to", "example": "E-000481" }, "completed": { "type": "boolean", "deprecated": true, "description": "If order completed or not. This has been replaced by `status` as there are more possibilities.", "example": false }, "status": { "type": "string", "enum": [ "OPEN", "ACCEPTED", "COMPLETED", "DECLINED" ], "description": "The current status for this order", "example": "OPEN" }, "type": { "type": "string", "description": "Order type", "example": "General information" }, "ticketId": { "type": "string", "description": "Reference ID of the ticket.", "example": "ABR-4556" }, "createdAt": { "type": "string", "description": "Creation date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "acceptedAt": { "type": "string", "description": "Acceptance date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "completedAt": { "type": "string", "description": "Completion date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "declinedAt": { "type": "string", "description": "Decline date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "attachments": { "description": "Information about the attachments of the ticket order", "type": "array", "items": { "$ref": "#/components/schemas/AttachmentDetail" } }, "customFields": { "type": "object", "description": "A list of custom fields that can be added for order if they exist in the order type", "example": { "Issue": "Lost key", "Description": "Please send a Locksmith!" }, "additionalProperties": { "oneOf": [ { "type": "string", "nullable": true }, { "type": "number" }, { "type": "boolean" } ] } }, "appLink": { "type": "string", "description": "A link to the order in the casavi web app", "example": "https://app.mycasavi.com/tenant/1/manage/tickets/12345/orders/98765" } }, "required": [ "id", "title" ] }, "TicketOrderWithComments": { "type": "object", "properties": { "id": { "type": "string", "description": "ID of the order. Should be unique in ticket. Also called internal order number and visible in the UI", "example": "T-000987" }, "title": { "type": "string", "description": "Order title. Should not be empty", "example": "Please fix broken water pipe in Musterstraße 33" }, "description": { "type": "string", "description": "Order description", "example": "Hello,\n\nplease repair the broken water pipe. It has been leaking since a few days.\nThe address is Musterstraße 33, please contact us for an appointment." }, "createdById": { "type": "string", "description": "External ID of the contact the order is created by", "example": "E-000482" }, "assignedToId": { "type": "string", "description": "External ID of the contact the order is assigned to", "example": "E-000481" }, "completed": { "type": "boolean", "deprecated": true, "description": "If order completed or not. This has been replaced by `status` as there are more possibilities.", "example": false }, "status": { "type": "string", "enum": [ "OPEN", "ACCEPTED", "COMPLETED", "DECLINED" ], "description": "The current status for this order", "example": "OPEN" }, "type": { "type": "string", "description": "Order type", "example": "General information" }, "ticketId": { "type": "string", "description": "Reference ID of the ticket.", "example": "ABR-4556" }, "createdAt": { "type": "string", "description": "Creation date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "acceptedAt": { "type": "string", "description": "Acceptance date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "completedAt": { "type": "string", "description": "Completion date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "declinedAt": { "type": "string", "description": "Decline date. Date formatted according to ISO 8601", "example": "2016-08-05T23:30:00Z", "format": "date-time" }, "attachments": { "description": "Information about the attachments of the ticket order", "type": "array", "items": { "$ref": "#/components/schemas/AttachmentDetail" } }, "customFields": { "type": "object", "description": "A list of custom fields that can be added for order if they exist in the order type", "example": { "Issue": "Lost key", "Description": "Please send a Locksmith!" }, "additionalProperties": { "oneOf": [ { "type": "string", "nullable": true }, { "type": "number" }, { "type": "boolean" } ] } }, "appLink": { "type": "string", "description": "A link to the order in the casavi web app", "example": "https://app.mycasavi.com/tenant/1/manage/tickets/12345/orders/98765" }, "comments": { "description": "Ticket comments", "type": "array", "items": { "$ref": "#/components/schemas/TicketCommentSimple" } } }, "required": [ "id", "title" ] }, "UpdateTicketOrder": { "type": "object", "properties": { "title": { "type": "string", "description": "Ticket order title. Should not be empty", "example": "Please fix broken water pipe in Musterstraße 33" }, "description": { "type": "string", "description": "Order description", "example": "Hello,\n\nplease repair the broken water pipe. It has been leaking since a few days.\nThe address is Musterstraße 33, please contact us for an appointment." }, "createdById": { "type": "string", "description": "External ID of the contact the order is created by", "example": "E-000482" }, "assignedToId": { "type": "string", "description": "External ID of the contact the order is assigned to", "example": "E-000481" }, "completed": { "type": "boolean", "deprecated": true, "description": "If order completed or not. This has been replaced by `status` as there are more possibilities.", "example": true }, "status": { "type": "string", "enum": [ "OPEN", "ACCEPTED", "COMPLETED", "DECLINED" ], "description": "The current status for this order", "example": "OPEN" }, "attachments": { "example": [ 512, 321 ], "description": "IDs of files that should be attached to the ticket order. Files need\nto be uploaded to /files beforehand (returns an id).", "type": "array", "items": { "type": "number" } } } }, "Subcommunity": { "type": "object", "properties": { "id": { "type": "string", "example": 123, "description": "Internal ID of the subcommunity" }, "name": { "type": "string", "example": "House A" }, "units": { "type": "array", "items": { "$ref": "#/components/schemas/Unit" } } }, "required": [ "id", "name", "units" ] }, "UpdateAssemblyTopicStatusDto": { "type": "object", "properties": {} }, "UpdateAssemblyTopicDto": { "type": "object", "properties": {} }, "RestHookEvent": { "type": "object", "properties": { "eventId": { "type": "string", "description": "A random ID generated per event. This can be used de-duplication in your application.", "example": "8f87e477-7cfd-4470-bca3-c11f0a44a22" }, "eventName": { "type": "string", "description": "The trigger type is repeated here to be used on the recipient side", "example": "contract_enddate_updated" }, "eventTimestamp": { "type": "string", "description": "Timestamp when the event was created in the backend.", "example": "2017-04-11T09:53:42.891Z" }, "tenantId": { "type": "string", "description": "The casavi internal database id for the account", "example": 3215 }, "payload": { "type": "object", "description": "The actual payload of the event. This is different per event, please look the relevant data up", "example": { "contractId": "A-0024", "tenantId": 1, "contactId": 200, "propertyId": "P-00451", "unitId": "P-00451-0001", "startAt": "2020-09-01T00:00:00.000Z", "endAt": "2022-10-01T00:00:00.000Z" } }, "isTriggeredViaApi": { "type": "boolean", "description": "Shows whether the resthook is triggered from api or not", "example": true }, "triggeredBy": { "type": "string", "description": "Shows the API key if the resthook is triggered from API and the contact identifier or user full name if it is triggered from UI", "example": "465yuny16161" } } }, "RestHookEventPayload_contact_created": { "type": "object", "properties": { "id": { "type": "string", "description": "Reference ID of the contact that can be used to get more information via the API.", "example": "C-31076" }, "internalId": { "type": "integer", "description": "Internal ID of the contact that is the unique identification in casavi.", "example": 995398 }, "isRegistered": { "type": "boolean", "description": "Identify if the contact has registered in casavi successfully.", "example": true }, "isInvited": { "type": "boolean", "description": "Identify if the contact has been invited in casavi successfully.", "example": true } } }, "RestHookEventPayload_document_downloaded": { "type": "object", "properties": { "id": { "type": "string", "description": "Reference ID of the document. Can be used to access the document via the API.", "example": "67d936f0-3571-42c4-a840-2d06617ec142" }, "internalId": { "type": "integer", "description": "Internal ID of the document that is the unique indentification in casavi.", "example": 5235 }, "title": { "type": "string", "description": "Title of the document.", "example": "Musterstraße 3 - Whg 5 - Abrechnung 2021" }, "downloadCount": { "type": "number", "description": "Number of times the document has been accessed or downloaded. This is not specific to the contact (see `contactId`) but the overral downloads for this document.", "example": 35 }, "contactId": { "type": "string", "description": "Reference ID of the contact that downloaded the document.", "example": "C-31076" }, "propertyId": { "type": "string", "description": "Reference ID of the property in which the contact downloaded the document.\nAs one document can be shared in multiple properties this can vary between downloads\nof the same document.", "example": "P-00451" }, "documentType": { "type": "string", "description": "Type of the document that was downloaded", "example": "Abrechnungen 2021" } } }, "RestHookEventPayload_contract_enddate_updated": { "type": "object", "properties": { "contractId": { "type": "string", "description": "Contract number is given in the contract", "example": "A-0024" }, "tenantId": { "type": "string", "description": "Internal ID of customer that is unique indentification in casavi.", "example": 1897 }, "contactId": { "type": "string", "description": "Reference ID of the contact that is connected to the contract. This is limited to the first contact of the contract. It can be used to get more information via the API.", "example": "C-31076" }, "propertyId": { "type": "string", "description": "Reference ID of the property that the contract is part of. It can be used to get more information via the API.", "example": "P-00451" }, "unitId": { "type": "string", "description": "Reference ID of the unit that the contract includes. It can be used to get more information via the API.", "example": "P-00451-0001" }, "startAt": { "type": "string", "description": "The new start date of the contract.", "example": "2020-09-01T00:00:00.000Z", "format": "datetime" }, "endAt": { "type": "string", "description": "The new end date of the contract.", "example": "2022-10-01T00:00:00.000Z", "format": "datetime" } } }, "OwnerAssemblyContact": { "type": "object", "properties": { "id": { "type": "string", "example": "C-0000312", "description": "External ID of the contact. Should be unique, so further imports can update the contact" }, "internalId": { "type": "integer", "example": 41251, "description": "Our internal database id" }, "title": { "type": "string", "example": "Doctor", "description": "The title of the contact" }, "salutation": { "type": "string", "example": "Family", "description": "The salutation for this contact. Could include things like `Family`, `Mister` or `Madam`" }, "firstName": { "type": "string", "example": "Joe", "description": "First name of the contact" }, "lastName": { "type": "string", "example": "Smith", "description": "Last name of the contact. This is required b/c it is used to represent a contact" }, "companyName": { "type": "string", "example": "ACME Industries", "description": "Name of the company the contact is assigned to. If type is `company` this contact will instead be treated as a company" }, "companyRole": { "type": "string", "example": "Director", "description": "Role inside the company" }, "email": { "type": "string", "example": "joe.smith@acme.com", "description": "Email where the contact can be contacted" }, "telephone": { "type": "string", "example": "+49 (0) 89 132", "description": "Telephone number for the contact. No special format is needed here so anything is valid (i.e. +49 (0) 89 123 or 089 123)" }, "mobile": { "type": "string", "example": "+49 (0) 89 132", "description": "Mobile number for the contact. No special format is needed here so anything is valid (i.e. +49 (0) 89 123 or 089 123)" }, "fax": { "type": "string", "example": "+49 (0) 89 132", "description": "Fax number for the contact. No special format is needed here so anything is valid (i.e. +49 (0) 89 123 or 089 123)" }, "website": { "type": "string", "example": "https://casavi.de", "description": "Website for the contact. No format needed, but correct URLs are preferred." }, "street": { "type": "string", "example": "Example street 7", "description": "Street address" }, "postalCode": { "type": "string", "example": "80331" }, "city": { "type": "string", "example": "Munich" }, "country": { "type": "string", "example": "Germany" }, "note": { "type": "string", "example": "Prefers to be contacted by email, telephone only in working hours", "description": "Additional notes for the contact" }, "isRegistered": { "type": "boolean", "example": true, "description": "Shows whether the contact is registered." }, "preferredWayOfContact": { "type": "string", "example": "LETTER", "enum": [ "LETTER", "ONLINE" ], "description": "How the contact would like to be contacted about new documents in the portal" } }, "required": [ "internalId", "lastName" ] }, "OwnerAssemblyParticipant": { "type": "object", "properties": { "id": { "type": "string", "example": "C-0000312", "description": "External ID of the contact. Should be unique, so further imports can update the contact" }, "internalId": { "type": "integer", "example": 41251, "description": "Our internal database id" }, "title": { "type": "string", "example": "Doctor", "description": "The title of the contact" }, "salutation": { "type": "string", "example": "Family", "description": "The salutation for this contact. Could include things like `Family`, `Mister` or `Madam`" }, "firstName": { "type": "string", "example": "Joe", "description": "First name of the contact" }, "lastName": { "type": "string", "example": "Smith", "description": "Last name of the contact. This is required b/c it is used to represent a contact" }, "companyName": { "type": "string", "example": "ACME Industries", "description": "Name of the company the contact is assigned to. If type is `company` this contact will instead be treated as a company" }, "companyRole": { "type": "string", "example": "Director", "description": "Role inside the company" }, "email": { "type": "string", "example": "joe.smith@acme.com", "description": "Email where the contact can be contacted" }, "telephone": { "type": "string", "example": "+49 (0) 89 132", "description": "Telephone number for the contact. No special format is needed here so anything is valid (i.e. +49 (0) 89 123 or 089 123)" }, "mobile": { "type": "string", "example": "+49 (0) 89 132", "description": "Mobile number for the contact. No special format is needed here so anything is valid (i.e. +49 (0) 89 123 or 089 123)" }, "fax": { "type": "string", "example": "+49 (0) 89 132", "description": "Fax number for the contact. No special format is needed here so anything is valid (i.e. +49 (0) 89 123 or 089 123)" }, "website": { "type": "string", "example": "https://casavi.de", "description": "Website for the contact. No format needed, but correct URLs are preferred." }, "street": { "type": "string", "example": "Example street 7", "description": "Street address" }, "postalCode": { "type": "string", "example": "80331" }, "city": { "type": "string", "example": "Munich" }, "country": { "type": "string", "example": "Germany" }, "note": { "type": "string", "example": "Prefers to be contacted by email, telephone only in working hours", "description": "Additional notes for the contact" }, "isRegistered": { "type": "boolean", "example": true, "description": "Shows whether the contact is registered." }, "preferredWayOfContact": { "type": "string", "example": "LETTER", "enum": [ "LETTER", "ONLINE" ], "description": "How the contact would like to be contacted about new documents in the portal" }, "password": { "type": "string", "example": "12345", "deprecated": true }, "username": { "type": "string", "example": "iamjoesmith", "deprecated": true } }, "required": [ "internalId", "lastName" ] }, "OwnerAssemblyExcludedContact": { "type": "object", "properties": { "internalId": { "type": "number", "description": "Internal database id for the excluded contact", "example": 1592, "nullable": false }, "fullName": { "type": "string", "description": "First and last name for the excluded contact", "example": "Max Mustermann", "nullable": false } }, "required": [ "internalId", "fullName" ] }, "OwnerAssemblySubCommunity": { "type": "object", "properties": { "internalId": { "type": "number", "description": "internal database id for the sub community", "example": 12, "nullable": false }, "name": { "type": "string", "description": "name of the subcommunity", "example": "Grand Villa", "nullable": false } }, "required": [ "internalId", "name" ] }, "OwnerAssemblyAgendaItem": { "type": "object", "properties": { "id": { "type": "string", "example": "847f37cf-2719-48fa-a325-cec03a5405e5" }, "internalId": { "type": "number", "example": 17839 }, "name": { "type": "string", "example": "Introduce new members" }, "description": { "type": "string", "example": "Brief round of introductions for new candidates" }, "isVoting": { "type": "boolean", "example": false }, "votingQuestion": { "type": "string", "example": "Should the candidate join the group?" }, "votingMechanism": { "type": "string", "example": "HEAD", "enum": [ "VALUE", "HEAD", "UNIT" ], "nullable": true }, "requiredMajority": { "type": "number", "example": 75.01, "nullable": true }, "votingMechanism2": { "type": "string", "example": "UNIT", "enum": [ "VALUE", "HEAD", "UNIT" ], "nullable": true }, "requiredMajority2": { "type": "number", "example": 75.01, "nullable": true }, "durationInMinutes": { "type": "number", "example": 60, "nullable": true }, "rank": { "type": "number", "description": "Determines the sort order for agenda items", "example": 20211214132700 }, "parentId": { "type": "number", "example": 3454, "description": "Shows the relationship between agenda items and their subordinating agenda items", "nullable": true }, "excludedContacts": { "type": "array", "items": { "$ref": "#/components/schemas/OwnerAssemblyExcludedContact" } }, "subcommunities": { "type": "array", "items": { "$ref": "#/components/schemas/OwnerAssemblySubCommunity" } } }, "required": [ "internalId", "name" ] }, "RestHookEventPayload_ticket_ownerassembly_scheduled": { "type": "object", "properties": { "id": { "type": "string", "example": "3bf61b84-662a-4970-9e5c-9771d5e1afc8", "description": "External Id of the OwnerAssembly, Should be unique." }, "internalId": { "type": "number", "example": 1201, "description": "Our internal database Id" }, "location": { "type": "string", "example": "EG Linker Seitenflügel" }, "remarks": { "type": "string", "example": "Please book your seats in advance" }, "name": { "type": "string", "example": "Example Assembly" }, "conferenceLink": { "type": "string", "example": "https://example.com", "deprecated": true }, "provider": { "type": "string", "enum": [ "VULCAVO", "MANUAL" ] }, "status": { "type": "string", "enum": [ "DRAFT", "FINALIZED", "DONE", "CALLED_OFF" ] }, "startAt": { "format": "date-time", "type": "string", "example": "2021-11-05T10:15:00+01:00" }, "endAt": { "format": "date-time", "type": "string", "example": "2021-11-05T10:45:00+01:00" }, "ticketId": { "type": "string", "example": "128004c1-5ddf-439f-b1fb-f57ded66849b", "description": "External id which can be used to reference additional ticket data over the API" }, "propertyId": { "type": "string", "example": "128004c1-5ddf-439f-b1fb-f57ded66849b", "description": "External id which can be used to reference additional property data over the API" }, "chairContact": { "nullable": true, "allOf": [ { "$ref": "#/components/schemas/OwnerAssemblyContact" } ] }, "assessorContact": { "nullable": true, "allOf": [ { "$ref": "#/components/schemas/OwnerAssemblyContact" } ] }, "advisoryLeaderContact": { "nullable": true, "allOf": [ { "$ref": "#/components/schemas/OwnerAssemblyContact" } ] }, "appointeeContact": { "$ref": "#/components/schemas/OwnerAssemblyContact" }, "participations": { "type": "array", "items": { "$ref": "#/components/schemas/OwnerAssemblyParticipant" } }, "agendaItems": { "type": "array", "items": { "$ref": "#/components/schemas/OwnerAssemblyAgendaItem" } } } }, "RestHookEventPayload_ticket_ownerassembly_deleted": { "type": "object", "properties": { "id": { "type": "string", "example": "3bf61b84-662a-4970-9e5c-9771d5e1afc8", "description": "External Id of the OwnerAssembly, Should be unique." }, "status": { "type": "string", "example": "CALLED_OFF", "description": "The status will be CALLED_OFF", "enum": [ "DRAFT", "FINALIZED", "DONE", "CALLED_OFF" ] } } }, "RestHookEventPayload_ticket_created": { "type": "object", "properties": { "id": { "type": "string", "description": "Reference ID of the ticket that can be used to get more information via the API.", "example": "T-31076" }, "internalId": { "type": "integer", "description": "Internal ID of the ticket that is the unique identification in casavi.", "example": 995398 }, "status": { "type": "string", "enum": [ "PENDING", "OPEN", "CLOSED", "INPROGRESS", "POSTPONED" ], "description": "Ticket status", "example": "OPEN" }, "title": { "type": "string", "description": "Ticket title. Should not be empty", "example": "Test ticket" }, "number": { "type": "integer", "description": "Consecutive ticket number.", "example": 995398 }, "propertyId": { "type": "string", "description": "Reference ID of the property", "example": 451 }, "unitId": { "type": "string", "description": "Reference ID of the unit", "example": 564546 }, "ticketTypeId": { "type": "integer", "description": "Internal ID of ticket type", "example": 15 }, "contactId": { "type": "string", "description": "External ID of the contact", "example": 87 }, "statusText": { "type": "string", "description": "Custom ticket status label. If set, the customers will see this\ntext instead of a translation for what's provided in the attribute status.", "example": "New" }, "reportedAt": { "format": "date-time", "type": "string", "description": "Date and time when ticket was created, ISO 8601", "example": "2021-11-05T10:45:00+01:00" } } }, "RestHookEventPayload_ticket_updated": { "type": "object", "properties": { "id": { "type": "string", "description": "Reference ID of the ticket that can be used to get more information via the API.", "example": "T-31076" }, "internalId": { "type": "integer", "description": "Internal ID of the ticket that is the unique identification in casavi.", "example": 995398 }, "status": { "type": "string", "enum": [ "PENDING", "OPEN", "CLOSED", "INPROGRESS", "POSTPONED" ], "description": "Ticket status", "example": "OPEN" }, "title": { "type": "string", "description": "Ticket title. Should not be empty", "example": "Test ticket" }, "number": { "type": "integer", "description": "Consecutive ticket number.", "example": 995398 }, "propertyId": { "type": "string", "description": "Reference ID of the property", "example": 451 }, "unitId": { "type": "string", "description": "Reference ID of the unit", "example": 564546 }, "ticketTypeId": { "type": "integer", "description": "Internal ID of ticket type", "example": 15 }, "contactId": { "type": "string", "description": "External ID of the contact", "example": 87 }, "statusText": { "type": "string", "description": "Custom ticket status label. If set, the customers will see this\ntext instead of a translation for what's provided in the attribute status.", "example": "New" }, "reportedAt": { "format": "date-time", "type": "string", "description": "Date and time when ticket was created, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "closedAt": { "format": "date-time", "type": "string", "description": "Date and time when ticket was closed, ISO 8601", "example": "2021-11-05T10:45:00+01:00" } } }, "RestHookEventPayload_ticket_status_changed": { "type": "object", "properties": { "id": { "type": "string", "description": "Reference ID of the ticket that can be used to get more information via the API.", "example": "T-31076" }, "internalId": { "type": "integer", "description": "Internal ID of the ticket that is the unique identification in casavi.", "example": 995398 }, "status": { "type": "string", "enum": [ "PENDING", "OPEN", "CLOSED", "INPROGRESS", "POSTPONED" ], "description": "Ticket status", "example": "OPEN" }, "propertyId": { "type": "string", "description": "Reference ID of the property", "example": 451 }, "unitId": { "type": "string", "description": "Reference ID of the unit", "example": 564546 } } }, "RestHookEventPayload_ticket_comment_created": { "type": "object", "properties": { "id": { "type": "string", "description": "Reference ID of the ticket comment that can be used to get more information via the API.", "example": "T-31076" }, "internalId": { "type": "integer", "description": "Internal ID of the ticket comment that is the unique identification in casavi.", "example": 995398 }, "ticketId": { "type": "string", "description": "Reference ID of the ticket.", "example": 5165 }, "text": { "type": "string", "description": "Ticket comment text", "example": "Test ticket comment" }, "createdAt": { "format": "date-time", "type": "string", "description": "Date and time when comment is created, ISO 8601", "example": "2021-11-05T10:45:00+01:00" } } }, "RestHookEventPayload_ticket_comment_updated": { "type": "object", "properties": { "id": { "type": "string", "description": "Reference ID of the ticket comment that can be used to get more information via the API.", "example": "T-31076" }, "internalId": { "type": "integer", "description": "Internal ID of the ticket comment that is the unique identification in casavi.", "example": 995398 }, "ticketId": { "type": "string", "description": "Reference ID of the ticket.", "example": 5165 }, "text": { "type": "string", "description": "Ticket comment text", "example": "Test ticket comment" }, "createdAt": { "format": "date-time", "type": "string", "description": "Date and time when comment is created, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "deletedAt": { "format": "date-time", "type": "string", "description": "Date and time when comment is deleted, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "deletedByName": { "type": "string", "description": "Name of the contact who deleted the comment", "example": "John Doe" }, "editedAt": { "format": "date-time", "type": "string", "description": "Date and time when comment is edited, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "editedByName": { "type": "string", "description": "Name of the contact who edited the comment", "example": "John Doe" }, "convertedAt": { "format": "date-time", "type": "string", "description": "Date and time when comment is converted, ISO 8601", "example": "2021-11-05T10:45:00+01:00" } } }, "RestHookEventPayload_order_created": { "type": "object", "properties": { "id": { "type": "string", "description": "Reference ID of the order that can be used to get more information via the API.", "example": "T-31076" }, "internalId": { "type": "integer", "description": "Internal ID of the order that is the unique identification in casavi.", "example": 995398 }, "ticketId": { "type": "string", "description": "Reference ID of the ticket.", "example": 995398 }, "title": { "type": "string", "description": "Ticket order title.", "example": "Test ticket comment" }, "description": { "type": "string", "description": "Order description", "example": "Test description" }, "locationStreet": { "type": "string", "description": "Street of the location", "example": "Test street" }, "locationInfo": { "type": "string", "description": "Info location", "example": "Test info" }, "locationPostalCode": { "type": "string", "description": "Postal code location", "example": "Test postal code" }, "locationCountry": { "type": "string", "description": "Country of the location", "example": "Test country" }, "dueAt": { "format": "date-time", "type": "string", "description": "Due date of order, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "status": { "type": "string", "enum": [ "OPEN", "ACCEPTED", "COMPLETED", "DECLINED" ], "description": "The current status for this order", "example": "OPEN" }, "createdAt": { "format": "date-time", "type": "string", "description": "Date and time when comment is created, ISO 8601", "example": "2021-11-05T10:45:00+01:00" } } }, "RestHookEventPayload_order_updated": { "type": "object", "properties": { "id": { "type": "string", "description": "Reference ID of the order that can be used to get more information via the API.", "example": "T-31076" }, "internalId": { "type": "integer", "description": "Internal ID of the order that is the unique identification in casavi.", "example": 995398 }, "ticketId": { "type": "string", "description": "Reference ID of the ticket.", "example": 995398 }, "title": { "type": "string", "description": "Ticket order title.", "example": "Test ticket comment" }, "description": { "type": "string", "description": "Order description", "example": "Test description" }, "locationStreet": { "type": "string", "description": "Street of the location", "example": "Test street" }, "locationInfo": { "type": "string", "description": "Info location", "example": "Test info" }, "locationPostalCode": { "type": "string", "description": "Postal code location", "example": "Test postal code" }, "locationCountry": { "type": "string", "description": "Country of the location", "example": "Test country" }, "dueAt": { "format": "date-time", "type": "string", "description": "Due date of order, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "status": { "type": "string", "enum": [ "OPEN", "ACCEPTED", "COMPLETED", "DECLINED" ], "description": "The current status for this order", "example": "OPEN" }, "createdAt": { "format": "date-time", "type": "string", "description": "Date and time when comment is created, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "acceptedAt": { "format": "date-time", "type": "string", "description": "Date and time when order is accepted, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "completedAt": { "format": "date-time", "type": "string", "description": "Date and time when order is completed, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "remindAt": { "format": "date-time", "type": "string", "description": "Remind datetime, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "originalDueAt": { "format": "date-time", "type": "string", "description": "Original due date of order, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "statusChangedAt": { "format": "date-time", "type": "string", "description": "Status changed date of order, ISO 8601", "example": "2021-11-05T10:45:00+01:00" } } }, "RestHookEventPayload_order_comment_created": { "type": "object", "properties": { "id": { "type": "string", "description": "Reference ID of the ticket comment that can be used to get more information via the API.", "example": "T-31076" }, "internalId": { "type": "integer", "description": "Internal ID of the ticket comment that is the unique identification in casavi.", "example": 995398 }, "ticketId": { "type": "string", "description": "Reference ID of the ticket.", "example": 5165 }, "text": { "type": "string", "description": "Ticket comment text", "example": "Test ticket comment" }, "createdAt": { "format": "date-time", "type": "string", "description": "Date and time when comment is created, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "orderId": { "type": "string", "description": "Reference ID of the order.", "example": "OC-1234" } } }, "RestHookEventPayload_order_comment_updated": { "type": "object", "properties": { "id": { "type": "string", "description": "Reference ID of the ticket comment that can be used to get more information via the API.", "example": "T-31076" }, "internalId": { "type": "integer", "description": "Internal ID of the ticket comment that is the unique identification in casavi.", "example": 995398 }, "ticketId": { "type": "string", "description": "Reference ID of the ticket.", "example": 5165 }, "text": { "type": "string", "description": "Ticket comment text", "example": "Test ticket comment" }, "createdAt": { "format": "date-time", "type": "string", "description": "Date and time when comment is created, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "orderId": { "type": "string", "description": "Reference ID of the order.", "example": "OC-1234" }, "deletedAt": { "format": "date-time", "type": "string", "description": "Date and time when comment is deleted, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "deletedByName": { "type": "string", "description": "Name of the contact who deleted the comment", "example": "John Doe" }, "editedAt": { "format": "date-time", "type": "string", "description": "Date and time when comment is edited, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "editedByName": { "type": "string", "description": "Name of the contact who edited the comment", "example": "John Doe" }, "convertedAt": { "format": "date-time", "type": "string", "description": "Date and time when comment is converted, ISO 8601", "example": "2021-11-05T10:45:00+01:00" } } }, "RestHookEventPayload_ticket_checklist_item_updated": { "type": "object", "properties": { "checklistInternalId": { "type": "number", "description": "Internal ID of the checklist item", "example": 1 }, "internalId": { "type": "number", "description": "Internal ID of the checklist item", "example": 1 }, "label": { "type": "string", "description": "Label of the checklist item", "example": "Test Checklist Item" }, "checked": { "type": "boolean", "description": "Checklist item is checked or not", "example": true }, "checkedAt": { "format": "date-time", "type": "string", "description": "Date and time when checklist item is checked, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "updatedAt": { "format": "date-time", "type": "string", "description": "Date and time when checklist item is updated, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "updatedBy": { "type": "number", "description": "Internal ID of the contact who updated the checklist item", "example": 1234 }, "ticketId": { "type": "string", "description": "Reference ID of the ticket.", "example": "1" } } }, "RestHookEventPayload_ticket_checklist_item_deleted": { "type": "object", "properties": { "checklistInternalId": { "type": "number", "description": "Internal ID of the checklist item", "example": 1 }, "internalId": { "type": "number", "description": "Internal ID of the checklist item", "example": 1 }, "label": { "type": "string", "description": "Label of the checklist item", "example": "Test Checklist Item" }, "checked": { "type": "boolean", "description": "Checklist item is checked or not", "example": true }, "checkedAt": { "format": "date-time", "type": "string", "description": "Date and time when checklist item is checked, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "updatedAt": { "format": "date-time", "type": "string", "description": "Date and time when checklist item is updated, ISO 8601", "example": "2021-11-05T10:45:00+01:00" }, "updatedBy": { "type": "number", "description": "Internal ID of the contact who updated the checklist item", "example": 1234 }, "ticketId": { "type": "string", "description": "Reference ID of the ticket.", "example": "1" }, "deletedAt": { "format": "date-time", "type": "string", "description": "Date and time when checklist item is deleted, ISO 8601", "example": "2021-11-05T10:45:00+01:00" } } }, "PropertyAppointment": { "type": "object", "properties": { "id": { "type": "string", "description": "Appointment identifier", "example": "appointment-177" }, "title": { "type": "string", "description": "The title of the appointment", "example": "Elevator repair" }, "text": { "type": "string", "description": "The body text of the appointment", "example": "Lorem Ipsum dolor sit amet" }, "location": { "type": "string", "description": "Where the appointment takes place", "example": "3rd floor" }, "allDay": { "type": "boolean", "example": true, "description": "Determines if the appointment lasts all day.", "default": false }, "showOnInfoboard": { "type": "boolean", "example": true, "description": "Determines if shown on info board.", "default": false }, "dateStart": { "type": "string", "example": "2017-03-05T11:00:00.000Z", "description": "Date and time appointment begins", "format": "date-time" }, "dateEnd": { "type": "string", "example": "2017-03-05T14:00:00.000Z", "description": "Date and time appointment ends", "format": "date-time" }, "authorId": { "type": "string", "description": "Reference ID of the author.", "example": "person412" }, "authorName": { "type": "string", "description": "Name of the author.", "example": "Max Mustermann" } }, "required": [ "id", "title", "dateStart" ] } } }, "x-tagGroups": [ { "name": "Authentication", "tags": [ "Authentication" ] }, { "name": "Master data", "tags": [ "Import", "Properties", "Units", "Contacts", "ImportModel" ] }, { "name": "Ticket Management", "tags": [ "Tickets", "Ticket comments", "Ticket checklists", "Ticket types", "Ticket type groups", "Subcommunities", "Owner Assembly", "Orders", "Order types", "Files", "TicketModel" ] }, { "name": "Events", "tags": [ "REST Hooks", "RestHook Event Model" ] }, { "name": "Other Routes", "tags": [ "Documents", "Document types", "Posts", "Appointments", "Staff", "Consumptions" ] }, { "name": "Other", "tags": [ "Changelog" ] } ] }