Table of contents
iModels
Download API definition:
This operation is a Technical Preview and is available for testing purposes only. Do not use in production.
POST https://api.bentley.com/imodels/{id}/fork

Creates an iModel fork. An iModel fork is a new iModel which is a full or partial clone of the main (source) iModel, but the difference between an iModel fork and an iModel clone is that forks can be edited and then merged back to the main iModel using Merge iModel transformation.

Relationship between main and fork iModels

An iModel fork is a valid standalone iModel. An iModel fork is not deleted if the main iModel is deleted.

When the iModel forking process is completed, no new changes are synchronized to the iModel fork from the main iModel.

iModel Create Operation Details operation can be used to determine if the current iModel is a fork.

iModel fork content and metadata

The iModel fork name and description can be specified when forking an iModel, by default name and description are taken from the main iModel. iModel extent is always taken from the main iModel.

iModel Baseline is always copied from the main iModel to the iModel fork. User can specify until which point Changesets should be copied to the iModel fork, by default all main iModel Changesets are copied. The rest of main iModel entities are not copied.

Operation state

Forking an iModel is an asynchronous operation. To check the status of the operation please follow the link present in Create-iModel-Operation response header. The link points to Get Create iModel Operation details endpoint of the iModel fork. When the iModel fork's Create Operation state property is set to successful it means the forking process is complete and iModel is ready to be used.

mainIModelIsMissingFederationGuids state

If state returned by Get Create iModel Operation details is equal to mainIModelIsMissingFederationGuids, it means that iModel fork creation failed because some elements in the main iModel do not have FederationGuid property set. In order to proceed users must populate missing FederationGuid values in main iModel using Populate Federation Guids transformation and retry the iModel fork creation request.

Authentication

Requires Authorization header with valid Bearer token for scope itwin-platform.

For more documentation on authorization and how to get access token visit OAUTH2 Authorization page.

Authorization

User must have the following permissions:

  • imodels_manage permission at the main iModel iTwin level.
  • imodels_manage permission at the iTwin, in which the iModel fork will be created, level.

If main iModel has iModel level permissions configured, then user must have at least imodels_webview permission assigned.

Alternatively the user should be an Organization Administrator both for the Organization that owns main iModel iTwin and the Organization that owns the iModel fork iTwin.

For more information please refer to Account Administrator documentation section on Access Control API documentation page.

Important: Fork iModel operation is in closed preview mode currently and only selected applications can utilize it.

Rate limits

This operation has a lower rate limit than the rest of iModels API operations. If an application exceeds the rate limit it will receive an HTTP error code 429 "Too Many Requests". The error response includes a Retry-After header that indicates how long clients should wait before retrying.

Tier
Rate limit
Trial
5 calls per minute
Basic, Premium, Enterprise
20 calls per minute


Request parameters

Name
Required?
Description
id
Yes

iModel id

Request headers

Name
Required?
Description
Authorization
Yes

OAuth access token with itwin-platform scope

Accept
Yes

Setting to application/vnd.bentley.itwin-platform.v2+json is recommended.

Request body

ForkiModel (ChangesetId)

Name
Type
Required?
Description
iTwinId
String
Yes

Id of the iTwin in which the new iModel will be created.

changesetId
String, null
No

Id of the latest main iModel Changeset that should be copied to the iModel fork. Changeset can also be specified using an index, see changesetIndex property. If neither changesetId nor changesetIndex are provided, all existing main iModel Changesets are copied to the iModel fork. If "changesetId": "" is specified, no Changesets are copied to the iModel fork, only main iModel Baseline is copied.

changesetIndex
Int64, null
No

Index of the latest main iModel Changeset that should be copied to the iModel fork. Changeset can also be specified using an id, see changesetId property. If neither changesetId nor changesetIndex are provided, all existing main iModel Changesets are copied to the iModel fork. If "changesetIndex": 0 is specified, no Changesets are copied to the iModel fork, only main iModel Baseline is copied. Valid changesetIndex values are non-negative integers.

name
String, null
No

Name of the iModel that will be created. If name is not provided, main iModel name will be used. iModel name must be unique within the iTwin. Valid name values are non-empty strings that are not longer than 255 characters.

description
String, null
No

Description of the iModel that will be created. If description is not provided, main iModel description will be used. Valid description values are non-empty strings that are not longer than 255 characters.

preserveHistory
Boolean, null
No

Option to control how Changesets are copied from the main iModel to the iModel fork. If set to true, Changesets will be copied individually and the history will be preserved. If set to false, Changesets will be squashed and applied to the Baseline resulting in an iModel fork without Changeset history. The default value is false.

Example

json
{
    "iTwinId": "98418aa0-9059-458b-b9e4-245cf6131a55",
    "changesetId": "1f2e04b666edce395e37a795e2231e995cbf8349",
    "name": "Target iModel name",
    "description": "Target iModel description",
    "preserveHistory": true
}

ForkiModel (ChangesetIndex)

Name
Type
Required?
Description
iTwinId
String
Yes

Id of the iTwin in which the new iModel will be created.

changesetId
String, null
No

Id of the latest main iModel Changeset that should be copied to the iModel fork. Changeset can also be specified using an index, see changesetIndex property. If neither changesetId nor changesetIndex are provided, all existing main iModel Changesets are copied to the iModel fork. If "changesetId": "" is specified, no Changesets are copied to the iModel fork, only main iModel Baseline is copied.

changesetIndex
Int64, null
No

Index of the latest main iModel Changeset that should be copied to the iModel fork. Changeset can also be specified using an id, see changesetId property. If neither changesetId nor changesetIndex are provided, all existing main iModel Changesets are copied to the iModel fork. If "changesetIndex": 0 is specified, no Changesets are copied to the iModel fork, only main iModel Baseline is copied. Valid changesetIndex values are non-negative integers.

name
String, null
No

Name of the iModel that will be created. If name is not provided, main iModel name will be used. iModel name must be unique within the iTwin. Valid name values are non-empty strings that are not longer than 255 characters.

description
String, null
No

Description of the iModel that will be created. If description is not provided, main iModel description will be used. Valid description values are non-empty strings that are not longer than 255 characters.

preserveHistory
Boolean, null
No

Option to control how Changesets are copied from the main iModel to the iModel fork. If set to true, Changesets will be copied individually and the history will be preserved. If set to false, Changesets will be squashed and applied to the Baseline resulting in an iModel fork without Changeset history. The default value is false.

Example

json
{
    "iTwinId": "98418aa0-9059-458b-b9e4-245cf6131a55",
    "changesetIndex": 5
}

ForkiModel (ITwinIdOnly)

Name
Type
Required?
Description
iTwinId
String
Yes

Id of the iTwin in which the new iModel will be created.

changesetId
String, null
No

Id of the latest main iModel Changeset that should be copied to the iModel fork. Changeset can also be specified using an index, see changesetIndex property. If neither changesetId nor changesetIndex are provided, all existing main iModel Changesets are copied to the iModel fork. If "changesetId": "" is specified, no Changesets are copied to the iModel fork, only main iModel Baseline is copied.

changesetIndex
Int64, null
No

Index of the latest main iModel Changeset that should be copied to the iModel fork. Changeset can also be specified using an id, see changesetId property. If neither changesetId nor changesetIndex are provided, all existing main iModel Changesets are copied to the iModel fork. If "changesetIndex": 0 is specified, no Changesets are copied to the iModel fork, only main iModel Baseline is copied. Valid changesetIndex values are non-negative integers.

name
String, null
No

Name of the iModel that will be created. If name is not provided, main iModel name will be used. iModel name must be unique within the iTwin. Valid name values are non-empty strings that are not longer than 255 characters.

description
String, null
No

Description of the iModel that will be created. If description is not provided, main iModel description will be used. Valid description values are non-empty strings that are not longer than 255 characters.

preserveHistory
Boolean, null
No

Option to control how Changesets are copied from the main iModel to the iModel fork. If set to true, Changesets will be copied individually and the history will be preserved. If set to false, Changesets will be squashed and applied to the Baseline resulting in an iModel fork without Changeset history. The default value is false.

Example

json
{
    "iTwinId": "98418aa0-9059-458b-b9e4-245cf6131a55"
}

Response 202 Accepted

Accepted

Response headers

Name
Description
Location

The resource location which is a URL to the new iModel.

Create-iModel-Operation

A URL which points to Get Create iModel Operation details endpoint for the new iModel.

Response 401 Unauthorized

This response indicates that request lacks valid authentication credentials. Access token might not been provided, issued by the wrong issuer, does not have required scopes or request headers were malformed.

json
{
    "error": {
        "code": "HeaderNotFound",
        "message": "Header Authorization was not found in the request. Access denied."
    }
}

Response 403 Forbidden

User is not authorized to fork iModel.

json
{
    "error": {
        "code": "InsufficientPermissions",
        "message": "The user has insufficient permissions for the requested operation."
    }
}

Response 404 Not Found

Specified target iTwin, main iModel or main iModel Changeset were not found.

json
{
    "error": {
        "code": "iTwinNotFound",
        "message": "Requested iTwin is not available."
    }
}

Response 409 Conflict

iModel with the same name already exists in the iTwin or the main iModel is not initialized.

json
{
    "error": {
        "code": "iModelExists",
        "message": "iModel with the same name already exists within the iTwin."
    }
}

Response 415 Unsupported Media Type

This response indicates that the user has specified not supported media type in the request.

json
{
    "error": {
        "code": "UnsupportedMediaType",
        "message": "Media Type is not supported."
    }
}

Response 422 Unprocessable Entity

The 422 (Unprocessable Entity) status code indicates that the request cannot be processed by the server due to a client error (e.g. malformed request syntax)

json
{
    "error": {
        "code": "InvalidiModelsRequest",
        "message": "Cannot fork iModel.",
        "details": [{
                "code": "InvalidRequestBody",
                "message": "Failed to parse request body. Make sure it is a valid JSON."
            },
            {
                "code": "MissingRequiredProperty",
                "message": "Required property is missing.",
                "target": "iTwinId"
            },
            {
                "code": "InvalidValue",
                "message": "'' is not a valid 'name' value. The value cannot be empty or consist only of whitespace characters.",
                "target": "name"
            }
        ]
    }
}

Response 429 Too many requests

This response indicates that the user has sent too many requests in a given amount of time.

json
{
    "error": {
        "code": "TooManyRequests",
        "message": "More requests were received than the subscription rate-limit allows."
    }
}

Response headers

Name
Description
retry-after

The number of requests exceeds the rate-limit for the client subscription.

Fork iModel Request

Information that should be provided to start iModel fork creation.

Name
Type
Description
iTwinId
String

Id of the iTwin in which the new iModel will be created.

changesetId
String, null

Id of the latest main iModel Changeset that should be copied to the iModel fork. Changeset can also be specified using an index, see changesetIndex property. If neither changesetId nor changesetIndex are provided, all existing main iModel Changesets are copied to the iModel fork. If "changesetId": "" is specified, no Changesets are copied to the iModel fork, only main iModel Baseline is copied.

changesetIndex
Int64, null

Index of the latest main iModel Changeset that should be copied to the iModel fork. Changeset can also be specified using an id, see changesetId property. If neither changesetId nor changesetIndex are provided, all existing main iModel Changesets are copied to the iModel fork. If "changesetIndex": 0 is specified, no Changesets are copied to the iModel fork, only main iModel Baseline is copied. Valid changesetIndex values are non-negative integers.

name
String, null

Name of the iModel that will be created. If name is not provided, main iModel name will be used. iModel name must be unique within the iTwin. Valid name values are non-empty strings that are not longer than 255 characters.

description
String, null

Description of the iModel that will be created. If description is not provided, main iModel description will be used. Valid description values are non-empty strings that are not longer than 255 characters.

preserveHistory
Boolean, null

Option to control how Changesets are copied from the main iModel to the iModel fork. If set to true, Changesets will be copied individually and the history will be preserved. If set to false, Changesets will be squashed and applied to the Baseline resulting in an iModel fork without Changeset history. The default value is false.

Error

Contains error information.

Name
Type
Description
code
String

One of a server-defined set of error codes.

message
String

A human-readable representation of the error.

target
String, null

The target of the error.

Error Response

Gives details for an error that occurred while handling the request. Note that clients MUST NOT assume that every failed request will produce an object of this schema, or that all of the properties in the response will be non-null, as the error may have prevented this response from being constructed.

Name
Type
Description
error

Error information.