> For the complete documentation index, see [llms.txt](https://api-docs.everreal.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://api-docs.everreal.co/endpoints/units/units-mutation.md).

# Units Mutation

### Mutation Types

{% hint style="info" %}
Mutations are responsible to insert or update a specific register, the operation insert or update is defined by **`externalId`**, in case this unit was imported previously, this mutation will updated the resource, otherwise will create the unit.
{% endhint %}

```graphql
type Mutation {
    upsertUnit(unit: UnitInput): Unit
    deleteUnit(externalId: String): Boolean  
}
```

Here are details on the capabilities of different mutations

* The `upsertUnit`  mutation is used to create or update a unit in Everreal system and unit added to the system cannot be modified by Everreal and if needs to be modified it should be done via the same endpoint itself.
* The `deleteUnit`  mutation is used to delete the unit relation with the external integration source, doing this will not delete the unit but instead it will remain as a detached unit from integration and can be modified using Everreal.

### Schema Definition

{% hint style="warning" %}
&#x20;items with **!** notation are required
{% endhint %}

```graphql
input UnitInput {
  externalUnitId: String! #externalId by which the unit will be identified
  propertyId: String! #propertyId by which the unit will be attached to. You have to either pass propertyId or externalpropertyId 
  externalPropertyId: String! #externalPropertyId by which the unit will be attached to. You have t
  ownerId: String! #ownerId by which the unit will be attached to. You have to either pass ownerId or externalOwnerId 
  externalOwnerId: String! #externalOwnerId by which the unit will be attached to. You have to either pass ownerId or externalOwnerId
  category: UNIT_CATEGORY!
  type: UNIT_TYPE!
  name: String
  subtype: UNIT_SUBTYPES!
  netFloorSurface: Float
  livingSurface: Float
  rooms: UnitRoomsInput
  mainStorage: Boolean!
  floorNo: Int!
  amenities: AmenitiesInput
  descriptions: IUnitDescriptionInput
  financingType: UNIT_FINANCING_TYPE!
  targetRent: Float
  surcharges: Float
  currentRent: Float
  availableFrom: Date # date in YYYY-MM-DD fromat
  lettingReadinessStatus: UNIT_LETTING_READINESS_STATUS
  lettingReadinessSubReason: UNIT_LETTING_READINESS_SUB_REASON
  unitResponsibleId: String
  meta: MetaInformation!
}

input UnitParkingTypeInput {
  type: PARKING_TYPES
  quantity: Int
}

input UnitRoomsInput {
  rooms: Float
  bathrooms: Float
  bedrooms: Float
}


input IUnitDescriptionInput {
  object: String
  amenities: String
  location: String
  other: String
}

input MetaInformation {
  source: String!
}

enum UNIT_ON_HOLD_REASON {
  FIRST_TIME_USE
  CONSTRUCTION_MEASURES
  OCCUPANCY_RIGHT
  INTERNAL_USE
  RESERVED
  OTHER
}

enum UNIT_FINANCING_TYPE {
  PRIVATELY_FINANCED
  PUBLICLY_SUBSIDIZED
}

enum AMENITIES_INCLUDED {
  BUILTIN_KITCHEN
  ELEVATOR
  GOODS_LIFT
  BALCONY_OR_TERRACE
  GUEST_TOILET
  GARDEN
  BASEMENT
  STEPLESS_ENTRY
  LIVING_QUALIFICATION_CERTIFICATE
  SUITABLE_FOR_SHARED_APARTMENT
  SUITABLE_FOR_HOLIDAY
  CAFETERIA
  HIGH_VOLTAGE
  RAMP
  HYDRAULIC_RAMP
  TERRACE
  HAS_CRANE_RUNWAY
}

input AmenitiesInput {
  amenitiesIncluded: [AMENITIES_INCLUDED]
  hasParking: Boolean
  parking: UnitParkingType
  qualityOfAmenities: QUALITY_OF_AMENITIES
  condition: AMENITIES_CONDITION
  lastRenovationYear: Int
  heatingType: HEATING_TYPE
  mainEnergySource: ENERGY_SOURCE_TYPE
  energyPerformanceCertificateAvailability: ENERGY_PERFORMANCE_CERTIFICATE_AVAILABILITY
  energyCertificateCreationDate: ENERGY_CERTIFICATE_CREATION_DATE
  buildingEnergyRatingType: BUILDING_ENERGY_RATING_TYPE
  thermalCharacteristic: Float
  energyConsumptionContainsWarmWater: Boolean
  energyEfficiencyClass: ENERGY_EFFICIENCY_CLASS
  hasLanCables: YES_NO_BYAPPOINTMENT
  hasAirConditioning: YES_NO_BYAPPOINTMENT
  floorType: COMMERCIAL_UNIT_FLOORTYPE
  goodsLiftLoad: Float
  floorLoad: Float
  supplyType: STORE_SUPPLY_TYPE
  powerSupplyLoad: Float
  craneRunwayLoad: Float
}

enum STORE_SUPPLY_TYPE {
  DIRECT_APPROACH
  NO_DIRECT_APPROACH
  CAR_APPROACH
  APPROACH_TO_THE_FRONT
  APPROACH_TO_THE_BACK
  FULL_TIME
  FORENOON
  NO_INFORMATION
}

enum ENERGY_SOURCE_TYPE {
  NO_INFORMATION
  GEOTHERMAL
  SOLAR_HEATING
  PELLET_HEATING
  GAS
  OIL
  DISTRICT_HEATING
  ELECTRICITY
  COAL
  ACID_GAS
  SOUR_GAS
  LIQUID_GAS
  STEAM_DISTRICT_HEATING
  WOOD
  WOOD_CHIPS
  COAL_COKE
  LOCAL_HEATING
  HEAT_SUPPLY
  BIO_ENERGY
  HYDRO_ENERGY
  ENVIRONMENTAL_THERMAL_ENERGY
  COMBINED_HEAT_AND_POWER_FOSSIL_FUELS
  COMBINED_HEAT_AND_POWER_RENEWABLE_ENERGY
  COMBINED_HEAT_AND_POWER_REGENERATIVE_ENERGY
  COMBINED_HEAT_AND_POWER_BIO_ENERGY
}

enum PARKING_TYPES {
  GARAGE
  OUTSIDE_PARKING_SPOT
  CARPORT
  DUPLEX
  PARKING_GARAGE
  UNDERGROUND_PARKING
  NO_INFORMATION
}

enum HEATING_TYPE {
  BLOCK_HEATING_STATION
  ELECTRIC_HEATING
  SELF_CONTAINED_CENTRAL_HEATING
  TELEHEATING
  FLOOR_HEATING
  GAS_HEATING
  WOOD_PELLET_HEATER
  NIGHT_STORAGE_HEATER
  STOVE_HEATING
  OIL_HEATING
  SOLAR_HEATING
  HEAT_PUMP
  CENTRAL_HEATING
}

enum QUALITY_OF_AMENITIES {
  LUXURIOUS
  UPSCALE
  NORMAL
  BASIC
}

```

### Enum table maps

**Field `sub_type` use the following table**

<table><thead><tr><th width="224.91933325967324">UNIT_TYPE</th><th width="150">Default</th><th>Possible Values</th></tr></thead><tbody><tr><td>APARTMENT</td><td>NO_INFORMATION</td><td><code>NO_INFORMATION</code> | <code>APARTMENT</code> | <code>STUDIO</code> | <code>GROUND_FLOOR</code> | <code>TERRACE_APARTMENT</code> | <code>PENTHOUSE</code> | <code>MAISONETTE</code> | <code>LOFT</code> | <code>ROOM</code> | <code>HOUSE</code> | <code>ATTIC_FLOOR</code> | <code>SOUTERRAIN</code> | <code>MEZZANINE</code></td></tr><tr><td>HOUSE</td><td>NO_INFORMATION</td><td><code>SINGLE_FAMILY_HOUSE</code> | <code>MID_TERRACE_HOUSE</code> | <code>END_TERRANCE_HOUSE</code> | <code>MULTI_FAMILY_HOUSE</code> | <code>BUNGALOW</code> | <code>FARMHOUSE</code> | <code>SEMIDETACHED_HOUSE</code> | <code>MANSION</code> | <code>TOWN_HOUSE</code> | <code>SPECIAL_REAL_ESTATE</code> | <code>NO_INFORMATION</code></td></tr><tr><td>PARKING</td><td>NO_INFORMATION</td><td><code>GARAGE</code> | <code>OUTSIDE_PARKING_SPOT</code> | <code>CARPORT</code> | <code>DUPLEX</code> | <code>PARKING_GARAGE</code> | <code>UNDERGROUND_PARKING</code> | <code>NO_INFORMATION</code></td></tr><tr><td>OFFICE</td><td>OFFICE</td><td><code>LOFT</code> | <code>STUDIO</code> | <code>OFFICE</code> | <code>OFFICE_FLOOR</code> | <code>OFFICE_CENTER</code> | <code>OFFICE_STORAGE_BUILDING</code> | <code>SURGERY</code> | <code>SURGERY_FLOOR</code> | <code>SURGERY_BUILDING</code> | <code>COMMERCIAL_CENTER</code> | <code>LIVING_AND_COMMERICAL_BUILDING</code> | <code>OFFICE_AND_COMMERICAL_BUILDING</code></td></tr><tr><td>STORE</td><td>STORE</td><td><code>SHOWROOM_SPACE</code> | <code>SHOPPING_CENTER</code> | <code>FACTORY_OUTLET</code> | <code>DEPARTMENT_STORE</code> | <code>KIOSK</code> | <code>STORE</code> | <code>SELF_SERVICE_MARKET</code> | <code>SALES_AREA</code> | <code>SALES_HALL</code></td></tr><tr><td>GASTRONOMY</td><td>CAFE</td><td><code>BAR_LOUNGE</code> | <code>CAFE</code> | <code>CLUB_DISCO</code> | <code>GUESTHOUSE</code> | <code>TAVERN</code> | <code>HOTEL</code> | <code>HOTEL_RESIDENCE</code> | <code>HOTEL_GARNI</code> | <code>PENSION</code> | <code>RESTAURANT</code> | <code>BUNGALOW</code></td></tr><tr><td>INDUSTRY</td><td>HALL</td><td><code>SHOWROOM_SPACE</code> | <code>HALL</code> | <code>HIGH_LACK_STORAGE</code> | <code>INDUSTRY_HALL</code> | <code>COLD_STORAGE</code> | <code>MULTIDECK_CABINET_STORAGE</code> | <code>STORAGE_WITH_OPEN_AREA</code> | <code>STORAGE_AREA</code> | <code>STORAGE_HALL</code> | <code>SERVICE_AREA</code> | <code>SHIPPING_STORAGE</code> | <code>REPAIR_SHOP</code></td></tr><tr><td>SPECIAL_PURPOSE</td><td>SPECIAL_ESTATE</td><td><code>RESIDENCE</code> | <code>FARM</code> | <code>HORSE_FARM</code> | <code>VINEYARD</code> | <code>REPAIR_SHOP</code> | <code>LEISURE_FACILITY</code> | <code>SPECIAL_ESTATE</code> | <code>COMMERCIAL_CENTER</code> | <code>INDUSTRIAL_AREA</code></td></tr></tbody></table>

**Field `UNIT_LETTING_READINESS_SUB_REASON` use the following table**

<table><thead><tr><th width="224.61328125">UNIT_LETTING_READINESS_STATUS</th><th width="150.0625">Default</th><th>Possible Values</th></tr></thead><tbody><tr><td>LETTABLE_WITH_RENOVATION</td><td></td><td><code>MINOR_RENOVATION</code> | <code>RENOVATION_2X_CAPEX</code> | <code>RENOVATION_EXCEEDS_2X_CAPEX</code> | <code>RENOVATION_EXCEEDS_3_YEARS_RENT</code></td></tr><tr><td>NOT_LETTABLE</td><td></td><td><code>NO_ACCESS</code> | <code>BLOCKED_BUILDING_CONDITION</code> | <code>BLOCKED_DUE_SALE</code> | <code>BLOCKED_REGULATORY</code> | <code>BLOCKED_STRATEGIC</code> | <code>RENTAL_PRICE_APPROVAL</code> | <code>RENTAL_AUTHORIZATION</code> | <code>FIRST_TIME_USE</code> | <code>CONSTRUCTION_MEASURES</code> | <code>OCCUPANCY_RIGHT</code> | <code>INTERNAL_USE</code> | <code>INTERNAL_USE_FOR_RENTAL_PURPOSE</code> | <code>RESERVED</code> | <code>OTHER</code></td></tr><tr><td>UNKNOWN</td><td></td><td><code>NOT_YET_ASSESSED</code></td></tr></tbody></table>

**Other enum fields**

<table><thead><tr><th width="150">ENUM</th><th width="150">Default</th><th>Possible Value</th></tr></thead><tbody><tr><td>UNIT_TYPE</td><td>APARTMENT</td><td><code>APARTMENT</code> | <code>HOUSE</code> | <code>PARKING</code> | <code>OFFICE</code> | <code>STORE</code> | <code>GASTRONOMY</code> | <code>INDUSTRY</code> | <code>SPECIAL_PURPOSE</code> | <code>LAND</code></td></tr><tr><td>UNIT_CATEGORY</td><td>RESIDENTIAL</td><td><code>COMMERCIAL</code> | <code>RESIDENTIAL</code></td></tr><tr><td>ENERGY_PERFORMANCE_CERTIFICATE_AVAILABILITY</td><td>AVAILABLE_AT_VIEWING</td><td><code>AVAILABLE</code> | <code>AVAILABLE_AT_VIEWING</code> | <code>NOT_REQUIRED</code></td></tr><tr><td>ENERGY_CERTIFICATE_CREATION_DATE</td><td></td><td><code>BEFORE_01_MAY_2014</code> | <code>FROM_01_MAY_2014</code></td></tr><tr><td>BUILDING_ENERGY_RATING_TYPE</td><td></td><td><code>ENERGY_REQUIRED</code> | <code>ENERGY_CONSUMPTION</code></td></tr><tr><td>ENERGY_EFFICIENCY_CLASS</td><td></td><td><code>NO_INFORMATION</code> | <code>A_PLUS</code> | <code>A</code> | <code>B</code> | <code>C</code> | <code>D</code> | <code>E</code> | <code>F</code> | <code>G</code> | <code>H</code></td></tr><tr><td>YES_NO_BYAPPOINTMENT</td><td>NO_INFORMATION</td><td><code>YES</code> | <code>NO</code> | <code>BY_APPOINTMENT</code> | <code>NO_INFORMATION</code></td></tr><tr><td>COMMERCIAL_UNIT_FLOORTYPE</td><td>NO_INFORMATION</td><td><code>CONCRETE</code> | <code>EPOXY_RESIN</code> | <code>TILES</code> | <code>PLANKS</code> | <code>LAMINATE</code> | <code>PARQUET</code> | <code>PVC</code> | <code>CARPET</code> | <code>ANTISTATIC_FLOOR</code> | <code>OFFICE_CARPET</code> | <code>STONE</code> | <code>CUSTOMIZABLE</code> | <code>WITHOUT</code> | <code>NO_INFORMATION</code></td></tr><tr><td>AMENITIES_CONDITION</td><td>WELL_KEPT</td><td><code>FIRST_TIME_USE</code> | <code>FIRST_TIME_USE_AFTER_REFURBISHMENT</code> | <code>AS_GOOD_AS_NEW</code> | <code>REFURBISHED</code> | <code>UPGRADED</code> | <code>FULLY_RENOVATED</code> | <code>WELL_KEPT</code> | <code>IN_NEED_OF_RENOVATION</code> | <code>NEGOTIABLE</code> | <code>DILAPIDATED</code></td></tr><tr><td>UNIT_LETTING_READINESS_STATUS</td><td></td><td><code>LETTABLE_WITHOUT_ISSUES</code> | <code>LETTABLE_WITH_RENOVATION</code> | <code>NOT_LETTABLE</code> | <code>UNKNOWN</code></td></tr></tbody></table>

Below we are providing a full example how to create or update a unit, all this information is not required, only the ones that was using **!** notation previously.

{% tabs %}
{% tab title="graphQL" %}

```graphql

mutation {
  upsertUnit(
    unit: {
      meta: { source: "INTEGRATION_TYPE" }
      name: "Appartmert"
      externalUnitId: "910011000009"
      propertyId: "b7ecfa0c-6dfc-4236-abac-0a92d90ce032"
      externalOwnerId: "2255"
      category: RESIDENTIAL
      type: APARTMENT
      subtype: APARTMENT
      rooms: {
        bedrooms: 0
        rooms: 4
      }
      amenities:{
        condition: FULLY_RENOVATED
        lastRenovationYear: 2012
        qualityOfAmenities: LUXURIOUS,
        energyConsumptionContainsWarmWater: true
        energyEfficiencyClass: A_PLUS
        energyCertificateCreationDate: FROM_01_MAY_2014
        hasLanCables: YES
      }
      descriptions: {
        object: "Property Group 01: child-rich parts of the city.ss",
        amenities: "Property Group 01: Completely furnished with high-quality custom-made fittings",
        location: "Property Group 01: Langenhagen The city of Langenhagen connects directly to the settlement area of ​​Hanover in the north.",
        other: "Property Group 01: See more Infosys at www.myclimate.org and in Kundenportal."
      }
    }
  ) {
    id
  }
}
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer ....");
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Cookie", "accept-language=de-DE");

var graphql = JSON.stringify({
  query: "\r\nmutation {\r\n  upsertUnit(\r\n    unit: {\r\n      meta: { source: \"INTEGRATION_TYPE\" }\r\n      name: \"Appartmert\"\r\n      externalUnitId: \"910011000009\"\r\n      propertyId: \"b7ecfa0c-6dfc-4236-abac-0a92d90ce032\"\r\n      externalOwnerId: \"2255\"\r\n      category: RESIDENTIAL\r\n      type: APARTMENT\r\n      subtype: APARTMENT\r\n      rooms: {\r\n        bedrooms: 0\r\n        rooms: 4\r\n      }\r\n      amenities:{\r\n        condition: FULLY_RENOVATED\r\n        lastRenovationYear: 2012\r\n        qualityOfAmenities: \"LUXURIOUS\",\r\n        energyConsumptionContainsWarmWater: true\r\n        energyEfficiencyClass: A_PLUS\r\n        energyCertificateCreationDate: FROM_01_MAY_2014\r\n        hasLanCables: YES\r\n      }\r\n      descriptions: {\r\n        object: \"Property Group 01: child-rich parts of the city.ss\",\r\n        amenities: \"Property Group 01: Completely furnished with high-quality custom-made fittings\",\r\n        location: \"Property Group 01: Langenhagen The city of Langenhagen connects directly to the settlement area of ​​Hanover in the north.\",\r\n        other: \"Property Group 01: See more Infosys at www.myclimate.org and in Kundenportal.\"\r\n      }\r\n    }\r\n  ) {\r\n    id\r\n  }\r\n}",
  variables: {}
})
var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: graphql,
  redirect: 'follow'
};

fetch("https://acme-qa.everreal.co/api/reporting/graphql", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

{% endtab %}
{% endtabs %}
