Migration guide from iModelHub API to iModels API

iModelHub API is deprecated

Old iModelHub API (accessible https://imodelhubapi.bentley.com/sv1.1/Repositories/*) is deprecated and is in its retirement path. Moving forward, we will not make any new changes into old iModelHub API. Only necessary security-related fixes will be applied. Investments in new features and functionalities are only made in iModels API.

Client packages

Open source TypeScript client packages are available for iModels API:

Please check the general documentation for explanation on the difference between the packages.

General API differences

iModels API have been designed to be intuitive for the developer and adhere to modern REST API standards. The new API has extensive documentation on developer portal.

Relationships exchanged for links

Instead of providing very flexible querying mechanism to the client applications new API has been designed either to contain mostly used properties within the queried entity or it contains the links which could be used to query additional information about related entities.

Example

Get user information who created an iModel

Old iModelHub API GET https://imodelhubapi.bentley.com/sv1.1/Repositories/iModel--{iModelId}/iModelScope/iModel?$select=*,HasCreatorInfo-forward-UserInfo.* operation returns the following response body:

{
  "instances": [
    {
      "instanceId": "5e19bee0-3aea-4355-a9f0-c6df9989ee7d",
      "schemaName": "iModelScope",
      "className": "iModel",
      "properties": {
        "Description": "Overall model of wind and solar farms in Sun City",
        "Name": "Sun City Renewable-energy Plant",
        "UserCreated": "42101fba-847a-4f4e-85a8-a4bed89065e4",
        "CreatedDate": "2020-10-20T10:51:33.1700000Z",
        "Initialized": true,
        "DataLocationId": "d69db76c-eb42-435e-8bbd-33e62b4c4908",
        "Type": 0,
        "Secured": false,
        "Shared": false,
        "iModelTemplate": "Empty",
        "ContextId": "9016df17-962a-4d1a-8e6d-6f0ae7d56c3b"
      },
      "relationshipInstances": [
        {
          "instanceId": "",
          "schemaName": "iModelScope",
          "className": "HasCreatorInfo",
          "direction": "forward",
          "properties": {},
          "relatedInstance": {
            "instanceId": "42101fba-847a-4f4e-85a8-a4bed89065e4",
            "schemaName": "iModelScope",
            "className": "UserInfo",
            "properties": {
              "Id": "42101fba-847a-4f4e-85a8-a4bed89065e4",
              "Name": "Hanson",
              "Surname": "Deck",
              "Email": "hanson.deck@cohesivecompanies.com",
              "IsServiceAccount": false
            }
          }
        }
      ]
    }
  ]
}

New iModels API Get iModel details (GET https://api.bentley.com/imodels/{id}) operation returns the following response body:

{
  "iModel": {
    "id": "5e19bee0-3aea-4355-a9f0-c6df9989ee7d",
    "displayName": "Sun City Renewable-energy Plant",
    "dataCenterLocation": "East US",
    "name": "Sun City Renewable-energy Plant",
    "description": "Overall model of wind and solar farms in Sun City",
    "state": "initialized",
    "createdDateTime": "2020-10-20T10:51:33.1700000Z",
    "iTwinId": "9016df17-962a-4d1a-8e6d-6f0ae7d56c3b",
    "isSecured": false,
    "extent": null,
    "_links": {
      "creator": {
        "href": "https://api.bentley.com/imodels/5e19bee0-3aea-4355-a9f0-c6df9989ee7d/users/42101fba-847a-4f4e-85a8-a4bed89065e4"
      },
      "changesets": {
        "href": "https://api.bentley.com/imodels/5e19bee0-3aea-4355-a9f0-c6df9989ee7d/changesets"
      },
      "namedVersions": {
        "href": "https://api.bentley.com/imodels/5e19bee0-3aea-4355-a9f0-c6df9989ee7d/namedversions"
      }
    }
  }
}

New API returns information in more concise way. Information about the user who created the iModel could be accessed in two ways:

  1. Following the "creator" link and doing a second request to iModels API.
  2. If application renders more than 1 iModel then the recommendation is to query Get iModel Users operation, cache the results on the client side and then compare the "creator" link of Get iModel details response with "self" link of each User entity in Get iModel Users response.

Batch requests removed

Batch $changeset requests which were supported by iModelHub API are not supported in iModels API.

Breaking functionality

The table summarizes functionality which has been deprecated and won't be available in the new iModels API or this functionality has been moved to other services.

Feature
Endpoint
Alternative
Extend Briefcase expiration
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Briefcase/{instanceId}
Deprecated. Feature is not used.
Cancel seed file upload
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/SeedFile/{instanceId}
Deprecated.
Reserve Code
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Code
Deprecated. Available via iTwin.js Code Service only.
Get all Codes in iModel
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Code
Deprecated. Available via iTwin.js Code Service only.
Get Code data
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Code/{instanceId}
Deprecated. Available via iTwin.js Code Service only.
Update Code
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Code/{instanceId}
Deprecated. Available via iTwin.js Code Service only.
Delete Code
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Code/{instanceId}
Deprecated. Available via iTwin.js Code Service only.
Reserve multiple Codes
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/MultiCode
Deprecated. Available via iTwin.js Code Service only.
Get multiple Codes of an iModel
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/MultiCode
Deprecated. Available via iTwin.js Code Service only.
Update multiple Codes
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/MultiCode/{instanceId}
Deprecated. Available via iTwin.js Code Service only.
Delete multiple Codes
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/MultiCode/{instanceId}
Deprecated. Available via iTwin.js Code Service only.
Generate next code value
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/CodeSequence
Deprecated. No replacement planned.
Get iModel Lock info
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/iModelLock
Locks and MultiLocks have been unified into Locks API.
Acquire iModel Lock
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/iModelLock
Locks and MultiLocks have been unified into Locks API.
Get iModel Lock info
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/iModelLock/{instanceId}
Locks and MultiLocks have been unified into Locks API.
Release iModel Lock
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/iModelLock/{instanceId}
Locks and MultiLocks have been unified into Locks API.
Request Global Events SAS
/sv1.1/Repositories/Global--Global/GlobalScope/GlobalEventSAS
For Bentley cloud services only. Use iTwin Events.
Subscribe to Global Events
/sv1.1/Repositories/Global--Global/GlobalScope/GlobalEventSubscription
For Bentley cloud services only. Use iTwin Events.
Get Global Events subscription info
/sv1.1/Repositories/Global--Global/GlobalScope/GlobalEventSubscription/{instanceId}
For Bentley cloud services only. Use iTwin Events.
Update Global Events subscription
/sv1.1/Repositories/Global--Global/GlobalScope/GlobalEventSubscription/{instanceId}
For Bentley cloud services only. Use iTwin Events.
Unsubscribe from Global Events
/sv1.1/Repositories/Global--Global/GlobalScope/GlobalEventSubscription/{instanceId}
For Bentley cloud services only. Use iTwin Events.
Request iModel Events SAS
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/EventSAS
Subscribe to iModel Events
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/EventSubscription
Update iModel Events subscription
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/EventSubscription/{instanceId}
Unsubscribe from iModel Events
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/EventSubscription/{instanceId}

New operation mappings

The table summarizes a mapping between old iModelHub API endpoint and new iModels API endpoints with a link to the documentation of new API.

Operation
iModelHub API endpoint
iModels API endpoint
Get iModels in iTwin
/sv1.1/Repositories/Context--{ContextId}/ContextScope/iModel
Create iModel
/sv1.1/Repositories/Context--{ContextId}/ContextScope/iModel
Get iModel
/sv1.1/Repositories/Context--{ContextId}/ContextScope/iModel/{instanceId}
Get iModel
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/iModel
Update iModel
/sv1.1/Repositories/Context--{ContextId}/ContextScope/iModel/{instanceId}
Delete iModel
/sv1.1/Repositories/Context--{ContextId}/ContextScope/iModel/{instanceId}
Clone iModel
/sv1.1/Repositories/Context--{ContextId}/ContextActions/CloneiModel
Get Clone iModel Action info
/sv1.1/Repositories/Context--{ContextId}/ContextActions/CloneiModel/{instanceId}
Get list of clone actions
/sv1.1/Repositories/Context--{ContextId}/ContextActions/CloneiModel
Not available currently.
Provide baseline file metadata
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/SeedFile
Get baseline file details
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/SeedFile
Get baseline file details
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/SeedFile/{instanceId}
Update baseline file details
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/SeedFile/{instanceId}
Acquire Briefcase
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Briefcase
Get Briefcase
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Briefcase/{instanceId}
Release Briefcase
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Briefcase/{instanceId}
Get Briefcases of an iModel
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Briefcase
Create Changeset
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/ChangeSet
Update Changeset
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/ChangeSet/{instanceId}
Get Changeset
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/ChangeSet/{instanceId}
Get iModel Changesets
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/ChangeSet
Get Checkpoint
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Checkpoint
Get Checkpoint V2
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/CheckpointV2
Create named version
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Version
Get named version
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Version/{instanceId}
Update named version
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Version/{instanceId}
Get named versions of an iModel
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Version
Acquire Lock
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Lock
Update Lock
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Lock/{instanceId}
Get Lock
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Lock/{instanceId}
Get Locks of an iModel
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Lock
Release Lock
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Lock/{instanceId}
Acquire multiple Locks
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/MultiLock
Update multiple Locks
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/MultiLock/{instanceId}
Get multiple Locks of an iModel
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/MultiLock
Release multiple Locks
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/MultiLock/{instanceId}
Get iModel users
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/UserInfo
Get iModel user details
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/UserInfo/{instanceId}
Get user permissions for iModel
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/Permission
Upload iModel Thumbnail
/sv1.1/Repositories/Context--{ContextId}/ContextScope/Thumbnail/{instanceId}/$file
Get Large iModel Thumbnail
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/LargeThumbnail/{instanceId}/$file
Get Small iModel Thumbnail
/sv1.1/Repositories/iModel--{iModelId}/iModelScope/SmallThumbnail/{instanceId}/$file