# IRPCPropertyDefs.GetPropertyDefs

Location: [gRPC API](https://developer.m-files.com/APIs/gRPC-API/index.md) > [Vault API](https://developer.m-files.com/APIs/gRPC-API/vault/index.md) > [Property definitions and classes](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCPropertyDefs/index.md)

HTML version: https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCPropertyDefs/GetPropertyDefs/

Badges: `Vault API / core` `read` `session or assertion` `idempotent` `returns metadata structure version`

Gets all property definitions that the user is allowed to see.

- **Service:** [Property definitions and classes](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCPropertyDefs/index.md) `MFiles.IRPCPropertyDefs`
- **gRPC method:** `/MFiles.IRPCPropertyDefs/GetPropertyDefs`
- **HTTP (mf-http-grpc):** `POST /grpc/v1/get-property-defs`
- **Request:** [`GetPropertyDefsRequest`](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCPropertyDefs/GetPropertyDefs/index.md#request)
- **Response:** [`GetPropertyDefsResponse`](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCPropertyDefs/GetPropertyDefs/index.md#response)
- **Book and level:** Vault API, core
- **Kind:** read
- **Session:** Required: a session (mfiles-session-id-bin metadata) or a session assertion (x-mf-session-assertion metadata).
- **Idempotent:** yes
- **Returns metadata structure version:** yes (in the mfiles-metadata-version-bin trailer)
- **Streaming:** none (unary)

<a id="remarks"></a>

## Remarks

- Requires a vault session. No special vault rights are needed.
- Property definitions that the user cannot see (because of the property definition's
  permissions) are left out. The owner property definitions of built-in object types that can
  never have an owner are also left out.
- Names are in the session language when the vault has translations for it.
- **Change check:** send the `current_version` of the previous response as `known_version`. If
  nothing has changed, the response has the same `current_version` and an **empty**
  `property_defs`: keep your cached list, do not treat it as "no property definitions". Send 0
  to always get the full list. This version counter is separate from the class version of
  [GetObjectClassesAndGroups](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCPropertyDefs/GetObjectClassesAndGroups/index.md).
- Whether a property is required depends on the class, not on the property definition: read
  `associated_property_defs` of [ObjectClass](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.ObjectClass/index.md).
- Cacheable by metadata structure version.

<a id="request"></a>

## Request: GetPropertyDefsRequest

> Nested message fields are expanded to depth 3; follow a type link for deeper levels and for the type's own page.

| Field | Type | Description |
|---|---|---|
| `call_importance` | [`CallImportance`](https://developer.m-files.com/APIs/gRPC-API/Reference/Enums/MFiles.CallImportance/index.md) | The importance level of this call. Leave unset or use `CALL_IMPORTANCE_NORMAL`. Values: `CALL_IMPORTANCE_DEFAULT` (0), `CALL_IMPORTANCE_NORMAL` (1), `CALL_IMPORTANCE_CAN_BE_REJECTED` (2). |
| `include_icons` | `bool` | Ignored by the server; the response is the same for true and false. |
| `known_version` | `int32` | The `current_version` from the caller's previous response, or 0 to get all property definitions. If it equals the server's current version, `property_defs` is empty. |

<a id="response"></a>

## Response: GetPropertyDefsResponse

> Nested message fields are expanded to depth 3; follow a type link for deeper levels and for the type's own page. Fields marked (recursive) refer to a type already on their path.

| Field | Type | Description |
|---|---|---|
| `current_version` | `int32` | The current version of the property definitions on the server. Store it and send it as `known_version` next time. |
| `property_defs[]` | repeated [`PropertyDef`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.PropertyDef/index.md) | The property definitions the user can see, or empty if `known_version` was current. See [PropertyDef](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.PropertyDef/index.md). |
| `property_defs[].id` | `int32` | The property definition ID. Built-in property definitions (0 Name or title, 20 Created, 100 Class, ...) have the same ID in every vault. IDs 1-19 are never used by real property definitions. |
| `property_defs[].name` | `string` | The name of the property. |
| `property_defs[].tooltip` | `string` | The tip text of this property. |
| `property_defs[].data_type` | [`Datatype`](https://developer.m-files.com/APIs/gRPC-API/Reference/Enums/MFiles.Datatype/index.md) | The data type of the values. Lookup properties use `DATATYPE_LOOKUP` (one item) or `DATATYPE_MULTI_SELECT_LOOKUP` (several items). |
| `property_defs[].content_type` | [`ContentType`](https://developer.m-files.com/APIs/gRPC-API/Reference/Enums/MFiles.ContentType/index.md) | Content type (sub-datatype). Values: `CONTENT_TYPE_GENERIC` (0), `CONTENT_TYPE_EMAIL_ADDRESS` (1), `CONTENT_TYPE_URL` (2), `CONTENT_TYPE_RTF` (3), `CONTENT_TYPE_HTML` (4). |
| `property_defs[].is_based_on_value_list` | `bool` | True for lookup properties; `value_list` then names the list. Test this flag, not `value_list != 0`: 0 is a valid list ID (the Document object type). |
| `property_defs[].enable_automatic_permissions` | `bool` | True to allow automatic permissions via this property def. |
| `property_defs[].is_conflict_reference` | `bool` | True if this is the conflict property of the object type in `value_list`. |
| `property_defs[].disallow_as_grouping_level` | `bool` | True to disallow using this property def as a grouping level in views. |
| `property_defs[].value_list` | `int32` | With `is_based_on_value_list`, the ID of the value list or object type whose items are the property's values. |
| `property_defs[].value_list_item_filter[]` | repeated [`SearchCondition`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.SearchCondition/index.md) | A static filter on the items of `value_list`. The server applies it when this property is passed as `filtering_property_def` or `LookupItemRequest.property_def`; such conditions cannot be sent in `search_conditions` directly. |
| `property_defs[].value_list_item_filter[].expression` | [`Expression`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.Expression/index.md) | The left side of the condition: what is evaluated for each object, such as a property value, a status value or any field (full-text search). |
| `property_defs[].value_list_item_filter[].type` | [`ConditionType`](https://developer.m-files.com/APIs/gRPC-API/Reference/Enums/MFiles.ConditionType/index.md) | The comparison operator. |
| `property_defs[].value_list_item_filter[].value` | [`TypedValue`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.TypedValue/index.md) | The right side of the condition: the value to compare with. Its data type must suit the expression, for example a lookup for a lookup property, Boolean for `STATUS_TYPE_IS_DELETED`. |
| `property_defs[].update_type` | [`UpdateType`](https://developer.m-files.com/APIs/gRPC-API/Reference/Enums/MFiles.UpdateType/index.md) | The update behaviour of the property. Values: `UPDATE_TYPE_NORMAL` (0), `UPDATE_TYPE_SET_BY_SERVER` (1), `UPDATE_TYPE_SET_BY_CLIENT_CODE` (2). |
| `property_defs[].automatic_value_type` | [`AutomaticValueType`](https://developer.m-files.com/APIs/gRPC-API/Reference/Enums/MFiles.AutomaticValueType/index.md) | Defines the type of the automatic value of this field, if any. Values: `AUTOMATIC_VALUE_TYPE_NONE` (0), `AUTOMATIC_VALUE_TYPE_CALCULATE_WITH_TEMPLATE` (1), `AUTOMATIC_VALUE_TYPE_CALCULATED_WITH_CODE` (2), `AUTOMATIC_VALUE_TYPE_FIXED_VALUE_WITH_INCREMENT` (3), `AUTOMATIC_VALUE_TYPE_FIXED_VALUE_WITH_CODE` (4). |
| `property_defs[].default_value` | [`TypedValue`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.TypedValue/index.md) | If set, specifies a fixed default value for this property. |
| `property_defs[].default_value.is_null_value` | `bool` | True if the value is empty. `data` is then unset. |
| `property_defs[].default_value.type` | [`Datatype`](https://developer.m-files.com/APIs/gRPC-API/Reference/Enums/MFiles.Datatype/index.md) | The data type of the value. |
| `property_defs[].default_value.data` | [`TypedValueUnion`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.TypedValueUnion/index.md) | The value, in the member that matches `type`. Unset for an empty value. |
| `property_defs[].icon` | [`Bytes`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.Bytes/index.md) | If set, contains an icon in .ICO format (contains multiple sizes and color depths). |
| `property_defs[].icon.value` | `bytes` | Array of bytes. |
| `property_defs[].is_predefined` | `bool` | True if this is a predefined PropertyDef. Predefined PropertyDefs cannot be deleted and modifying them is restricted. |
| `property_defs[].allow_for_all_object_types` | `bool` | True if this property definition can be used with all object types. |
| `property_defs[].is_owner` | `bool` | True if this is the owner property of the object type in `value_list`. |
| `property_defs[].is_default` | `bool` | True if this is the default property of the object type in `value_list` (`ValueList.default_property_def`). |
| `property_defs[].owner_property_def_info` | [`OwnerPropertyDef`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.OwnerPropertyDef/index.md) | For a lookup property, the property whose value limits this property's values. For example, Workflow State (39) is limited by Workflow (38). A `property_def` of -106 means that the owner property is determined automatically. |
| `property_defs[].owner_property_def_info.property_def` | `int32` | The ID of the owner property definition, or -106 if the owner property is determined automatically. |
| `property_defs[].owner_property_def_info.dependency_relation` | [`DependencyRelation`](https://developer.m-files.com/APIs/gRPC-API/Reference/Enums/MFiles.DependencyRelation/index.md) | How this property depends on its owner property: `DEPENDENCY_RELATION_FILTER` limits its values to those that belong to the owner property's value, `DEPENDENCY_RELATION_FILL` fills it automatically from the owner property's value. Values: `DEPENDENCY_RELATION_NOTHING` (0), `DEPENDENCY_RELATION_FILL` (1), `DEPENDENCY_RELATION_FILTER` (2). |
| `property_defs[].owner_property_def_info.data` | [`DependentPropertyDefUnion`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.DependentPropertyDefUnion/index.md) | Details of the `DEPENDENCY_RELATION_FILL` relation. |
| `property_defs[].object_type` | `int32` | If `allow_for_all_object_types` is false, the object type whose objects use this property; otherwise ignored. |
| `property_defs[].acl` | [`AccessControlList`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.AccessControlList/index.md) | If set, specifies the ACL that defines the visibility and editability of this property in objects. |
| `property_defs[].acl.checked_out_to_user` | `int32` | Specifies the ID of the user who has extended rights because of the checkout operation performed by her. 0 if such user does not exist. |
| `property_defs[].acl.is_fully_authoritative` | `bool` | Specifies whether this access control list is set to ignore the secondary permissions that come from the latest checked in version. |
| `property_defs[].acl.custom_component` | [`AccessControlListComponent`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.AccessControlListComponent/index.md) | Accesses the custom component of this ACL. |
| `property_defs[].acl.restrictive_components[]` | repeated [`AccessControlListComponentMapEntry`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.AccessControlListComponentMapEntry/index.md) | Accesses the restrictive automatic components of this ACL. |
| `property_defs[].acl.secondary_access_control_list` | [`AccessControlList`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.AccessControlList/index.md) (recursive) | Secondary ACL used for latest version ACL. Not used for access check if null. |
| `property_defs[].acl.additive_components[]` | repeated [`AccessControlListComponentMapEntry`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.AccessControlListComponentMapEntry/index.md) | Accesses the additive automatic components of this ACL. |
| `property_defs[].property_def_permissions` | [`PropertyDefPermissionsForClient`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.PropertyDefPermissionsForClient/index.md) | What the caller may do with values of this property: see them and edit them. Set when the property definition has permissions. |
| `property_defs[].property_def_permissions.current_user_can_see` | `bool` | The property def is visible for the current user (provided for symmetry). |
| `property_defs[].property_def_permissions.current_user_can_edit` | `bool` | The current user can edit the values. |
| `property_defs[].value_list_sorting_type` | [`VLSortingType`](https://developer.m-files.com/APIs/gRPC-API/Reference/Enums/MFiles.VLSortingType/index.md) | The sorting type of value list items. Values: `VLSORTING_TYPE_BY_DISPLAY_NAME` (0), `VLSORTING_TYPE_BY_EXTERNAL_ID` (1). |
| `property_defs[].value_list_sort_ascending` | `bool` | True to sort in ascending order, false to sort in descending order. |
| `property_defs[].validation_type` | [`ValidationType`](https://developer.m-files.com/APIs/gRPC-API/Reference/Enums/MFiles.ValidationType/index.md) | How values are validated; `validation_string` holds the rule. Values: `VALIDATION_TYPE_NONE` (0), `VALIDATION_TYPE_REGEX` (1), `VALIDATION_TYPE_CODE` (2). |
| `property_defs[].validation_string` | `string` | The validation rule; its meaning depends on `validation_type`. |
| `property_defs[].formatting_type` | [`FormattingType`](https://developer.m-files.com/APIs/gRPC-API/Reference/Enums/MFiles.FormattingType/index.md) | How values are formatted; `formatting_string` holds the format. Values: `FORMATTING_TYPE_NONE` (0). |
| `property_defs[].formatting_string` | `string` | The format; its meaning depends on `formatting_type`. |
| `property_defs[].guid` | `string` | The GUID of the property definition, with braces. |
| `property_defs[].options` | [`PROPERTYDEFFLAGS`](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.PROPERTYDEFFLAGS/index.md) | Flags such as `can_use_in_search`. See [PROPERTYDEFFLAGS](https://developer.m-files.com/APIs/gRPC-API/Reference/Messages/MFiles.PROPERTYDEFFLAGS/index.md). |
| `property_defs[].options.all` | `bool` | Specifies all flags set; Including any future flags. |
| `property_defs[].options.can_use_in_search` | `bool` | Are objects searchable by this property? |
| `property_defs[].options.can_use_in_history_search` | `bool` | Are history versions of objects searchable by this property? |
| `property_defs[].options.show_only_filtered_values` | `bool` | Should only the values matching the property filter be shown on the metadata card? |
| `is_property_def_required[]` | repeated `bool` | Always empty. Required properties are defined per class: see `ObjectClass.associated_property_defs`. |

<a id="related"></a>

## Related methods

- [GetObjectClassesAndGroups](https://developer.m-files.com/APIs/gRPC-API/Reference/MFiles.IRPCPropertyDefs/GetObjectClassesAndGroups/index.md): Gets all classes and class groups that the user is allowed to see.
