---
title: REST and IDM
description: Representational State Transfer (REST) is a software architecture style for exposing resources, using the technologies and protocols of the World Wide Web. REST describes how distributed data objects, or resources, can be defined and addressed.
component: pingoneaic
page_id: pingoneaic:idm-rest-api:rest-and-idm
canonical_url: https://docs.pingidentity.com/pingoneaic/idm-rest-api/rest-and-idm.html
section_ids:
  crest-idm-specifics: ForgeRock REST and IDM
---

# REST and IDM

Representational State Transfer (REST) is a software architecture style for exposing resources, using the technologies and protocols of the World Wide Web. REST describes how distributed data objects, or resources, can be defined and addressed.

IDM provides a RESTful API for accessing managed objects, system objects, workflows, and the system configuration.

## ForgeRock REST and IDM

IDM implements the ForgeRock REST API as described in the previous section, with the exception of the following elements:

* IDM provides limited support for the [in expression clause](../idm-objects/queries.html#query-in). You can use this clause for queries on singleton string properties, not arrays. `in` query expressions are not supported through the IDM admin console.

* The PATCH `transform` action is supported only on the `config` endpoint. Note that this is an optional action and not implemented everywhere across the ForgeRock Identity Platform.

* ForgeRock REST supports PATCH operations by list element index, as shown in the example in [Patch](../developer-docs/crest/patch.html). IDM *does not support* PATCH by list element index. So, for PATCH operations, you cannot use an ordinal when adding or removing list items.

  You can add an item using the special hyphen index, which designates that the element should be added to the end of the list. To remove specific items from a list, you must specify the *value* to be removed, for example:

  ```json
  [
      {
          "operation" : "remove",
          "field" : "/phoneNumber/",
          "value" : "202-555-0185"
      }
  ]
  ```

  |   |                                                                                                                      |
  | - | -------------------------------------------------------------------------------------------------------------------- |
  |   | When you remove items in this way, if the list contains two or more items with the same value, they are all removed. |

* If `_fields` is left blank (null), the server returns all default values. In IDM, this excludes relationships and virtual fields. To include these fields in the output, add `"returnByDefault" : true` in the applicable schema.

  IDM also implements wild-card (`*`) handling with the `_fields` parameter. So, a value of `_fields=*_ref` will return all relationship fields associated with an object. A value of `_fields=*_ref/*` will return all the fields within each relationship.

* IDM does not implement the `ESTIMATE` total paged results policy. The `totalPagedResults` is either the exact total result count (`_totalPagedResultsPolicy=EXACT`) or result counting is disabled (`_totalPagedResultsPolicy=NONE`). For more information, refer to [Page Query Results](../idm-objects/queries.html#paging-query-results).
