Table of contents
iTwins
Download API definition:
GET https://api.bentley.com/itwins/[?subClass][&status][&type][&number][&displayName][&parentId][&iTwinAccountId][&$search][&$select][&$filter][&$orderby][&$top][&$skip][&includeInactive]

Retrieves a list of iTwins that the calling user is a member of.

Max Return

Some users can be members of a very large number of iTwins. The iTwins API uses the X-Max-Return header to limit the number of iTwins returned from any query.

X-Max-Return

  • Default Behavior: If not specified, the maximum number of iTwins returned will default to 1000. For example, if a user has access to 40,000 iTwins, only up to 1000 iTwins can be paged through. Attempting to page past 1000 will not result in an error; it will simply stop returning iTwins.
  • Customizing the Limit: You can set X-Max-Return to any number between 1 and 10,000. Setting a lower value can improve query performance. For instance, if your application displays no more than 500 iTwins, set X-Max-Return to 500.
  • Response Header: The value of X-Max-Return used in the query is also returned in a response header with the same name.

If you need to get more than 10000 iTwins, use the iTwin Exports API. There is no limit to the number of iTwins that can be exported.

OData Queries

We have added support for advanced odata queries. For simple queries, you can still use the other query parameters (status, type, number, displayName, parentId, iTwinAccountId and $search). The odata $filter allows you to build more advanced queries. You cannot use the advanced odata $filter and the simple query parameters (other than subClass) at the same time.

Example: Find Asset or Project iTwins created since September 1, 2024 that have 'abc' in the displayName. Select only the id, displayName and createdDateTime. Order them by displayName.

/itwins?subClass=Asset,Project&$filter=createdDateTime+ge+2024-09-01T00:00:00Z+and+contains('abc',displayName)&$select=id,displayName,createdDateTime&$orderby=displayName

There are more examples in the parameter definition below.

Inactive iTwins

iTwins with status=Inactive are not returned by default. This improves query performance and reduces clutter in user interfaces by filtering out unused iTwins. You should still provide a way for users to see their Inactive iTwins if they request them. In the API, you can do this by setting the status parameter or by using the includeInactive parameter.

If status=Inactive, the API will return only Inactive iTwins.
If includeInactive=true, the API will return all iTwins (Active, Trial and Inactive).

The includeInactive parameter is optional and defaults to false. A 422 error will be returned if you try to use a status parameter at the same time as the includeInactive parameter.

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

Any user can call this endpoint. It will only return iTwins that the user is a member of. Use the Access Control API to manage an iTwin's members.

Request parameters

Name
Required?
Description
subClass
No

Specify a particular subClass that you wish to query on. The subClass is optional but queries will be faster if specified and we recommend specifying it whenever possible. You can specify more than one by using a comma delimited string. Example: subClass=Asset,Project will find all Assets or Projects matching your query criteria.

status
No

Specify a particular status that you wish to query on.

type
No

Specify a particular type that you wish to query on.

number
No

Find all iTwins with the exact number specified. Cannot be used at the same time as the $search parameter.

displayName
No

Find all iTwins with the exact displayName specified. Cannot be used at the same time as the $search parameter.

parentId
No

Find all iTwins that are children of the specified parentId.

iTwinAccountId
No

Find all iTwins that are owned by the specified iTwinAccountId.

$search
No

Find all iTwins that have the search string anywhere in the number or displayName. Cannot be used at the same time as the number or displayName parameters.

$select
No

A comma delimited list of iTwin properties to return. Keep the list as small to improve the performance of the query and limit the size of the data returned. If $select is specified then the Prefer header is ignored. If not specified, then the API will return the minimal representation.

$filter
No

An odata filter used to limit the query results. Use the subClass property to limit to specific subClasses. $filter is used to filter the results even further. All text values in the filter are case insensitive. Example: &filter=parentId+eq+'78202ffd-272b-4207-a7ad-7d2b1af5dafc'+and+(startswith('ABC',number)+or+startswith('ABC',displayName))

$orderby
No

Used to order the results. Example: $orderby=displayName ASC

$top
No

The $top query option requests the number of items in the queried collection to be included in the result. The default is 100. The max is 1000. This sets the page size and should not be confused with the X-Max-Return header.

$skip
No

The $skip query option requests the number of items in the queried collection that are to be skipped and not included in the result.

includeInactive
No

By default, the query will not return Inactive iTwins unless you set includeInactive=true. Cannot be used at the same time as the status parameter.

Request headers

Name
Required?
Description
X-Max-Return
No

The maximum number of iTwins that will be returned from the query. The default value is 1000 but you can set this to any number between 1 and 10,000. Setting a lower value can improve query performance. Do not confuse this with $top. $top controls the size of a single page. X-Max-Return controls the total count returned from all pages combined.

X-iTwin-Query-Scope
No

MemberOfiTwin - (Default) The results will be limited to the iTwins that the user is a member of. Use the Access Control API to manage an iTwin's members. OrganizationAdmin - The results will be limited to the iTwins that belong to the users organization. It can only be used by an organization admin. It is useful for admins that want to query all iTwins in their organization.

Authorization
Yes

OAuth access token with itwin-platform scope

Accept
Yes

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

Prefer
No

Indicates a level of details in the response. Valid values are 'return=representation' or 'return=minimal'. The default is 'return=minimal'.

Response 200 OK

OK

json
{
    "iTwins": [{
            "id": "dc914a84-e0c9-40e2-9d14-faf5ed84147f",
            "class": "Endeavor",
            "subClass": "Project",
            "type": "Construction Project",
            "number": "00001-ds-3902795",
            "displayName": "White River"
        },
        {
            "id": "dd50fa65-ff23-4778-831b-c2caa5471a97",
            "class": "Endeavor",
            "subClass": "Project",
            "type": "Construction Project",
            "number": "f7sa7fas89d",
            "displayName": "Battle Creek 3"
        }
    ],
    "_links": {
        "self": {
            "href": "https://api.bentley.com/iTwins/?$skip=0&$top=10"
        },
        "next": {
            "href": "https://api.bentley.com/iTwins/?$skip=10&$top=10"
        }
    }
}

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 422 Unprocessable Entity

Invalid request to get iTwins

json
{
    "error": {
        "code": "InvalidiTwinsRequest",
        "message": "Cannot query iTwins.",
        "details": [{
                "code": "InvalidValue",
                "message": "The $top query option must be a positive integer that does not exceed 1000.",
                "target": "$top"
            },
            {
                "code": "InvalidValue",
                "message": "The $skip query option must be a non-negative integer.",
                "target": "$skip"
            },
            {
                "code": "InvalidParameter",
                "message": "$search cannot be used in conjuction with displayName or number.",
                "target": "$search"
            },
            {
                "code": "InvalidValue",
                "message": "A valid iTwin SubClass was not specified in the query.",
                "target": "subClass"
            },
            {
                "code": "InvalidValue",
                "message": "Status value is incorrect. Valid values are Active, Inactive and Trial.",
                "target": "status"
            },
            {
                "code": "InvalidParameter",
                "message": "The includeInactive parameter should not be used at the same time as the status parameter.",
                "target": "includeInactive"
            },
            {
                "code": "InvalidValue",
                "target": "$select",
                "message": "The $select string contains an unknown property."
            },
            {
                "code": "InvalidParameter",
                "target": "$filter",
                "message": "$filter contains an invalid or unsupported statement."
            },
            {
                "code": "InvalidValue",
                "target": "$filter",
                "message": "The $filter contains an invalid property."
            },
            {
                "code": "InvalidValue",
                "target": "$orderby",
                "message": "'PropertyName' is not a supported orderBy value."
            },
            {
                "code": "InvalidHeaderValue",
                "target": "X-Max-Return",
                "message": "X-Max-Return value is incorrect. Must be less than 10000."
            },
            {
                "code": "InvalidHeaderValue",
                "target": "X-iTwin-Create-Scope",
                "message": "X-iTwin-Create-Scope contains an invalid value."
            }
        ]
    }
}

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.

iTwin (summary)

Minimal representation of a iTwin that contains only id, class, subClass, type, number and displayName.

Name
Type
Description
id
String

The iTwin Id.

class

The Class of your iTwin.

subClass

The subClass your iTwin.

type
String, null

An open ended property to better define your iTwin's Type.

number
String

A unique number or code for the iTwin. This is the value that uniquely identifies the iTwin within your organization.

displayName
String

A display name for the iTwin.

status

Must be one of Active, Inactive or Trial. The default value is Active. By default, Inactive iTwins are not returned from the Get my iTwins API unless requested using the includeInactive parameter.

iTwin

Full representation of a iTwin.

Name
Type
Description
id
String

The iTwin Id.

class

The Class of your iTwin.

subClass

The subClass your iTwin.

type
String, null

An open ended property to better define your iTwin's Type.

number
String

A unique number or code for the iTwin. This is the value that uniquely identifies the iTwin within your organization.

displayName
String

A display name for the iTwin.

geographicLocation
String, null

An optional field specifying the location of the iTwin. This is typically an address or city.

latitude
Double, null

An optional field specifying the latitude of the iTwin.

longitude
Double, null

An optional field specifying the longitude of the iTwin.

ianaTimeZone
String, null

An optional field specifying the time zone of the iTwin. This must be a valid [IANA] (https://www.iana.org/time-zones) time zone id.

dataCenterLocation
String

The data center where the data for this iTwin will be persisted. Default is East US. Valid Values: East US, North Europe, West Europe, Southeast Asia, Australia East, UK South, Canada Central, Central India, Japan East.

status

Must be one of Active, Inactive or Trial. The default value is Active. By default, Inactive iTwins are not returned from the Get my iTwins API unless requested using the includeInactive parameter.

parentId
String, null

The Id of the parent of this iTwin. For example, a Project iTwin could be a child of an Asset iTwin.

iTwinAccountId
String, null

The Id of the Account that owns this iTwin. The Account is also the root of any iTwin hierarchy.

imageName
String, null

The name of the image. The name is unique and will only change if the image changes.

image
String, null

The URL of the image. This is a small, thumbnail image that was created using the Upload iTwin Image API. The URL will be valid for a minimum of 1 hour.

createdDateTime
Date-time

The date that the iTwin was created.

createdBy
String, null

The Id of the user that created the iTwin.

lastModifiedDateTime
Date-time

The date that the iTwin was last updated.

lastModifiedBy
String, null

The Id of the user that last updated the iTwin.

iTwins (prefer return=minimal)

A list of iTwins in the minimal representation format.

Name
Type
Description
iTwins

A list of iTwins in the minimal representation format.

_links

Contains the hyperlinks to the previous and next pages of results.

iTwins (prefer return=representation)

A list of iTwins in the full representation format.

Name
Type
Description
iTwins

A list of iTwins in the full representation format.

_links

Contains the hyperlinks to the previous and next pages of results.

links (paging)

URLs for redoing the current request, getting to the previous or next page of results, if applicable containg.

Name
Type
Description
self

URL for redoing the current request.

next

URL for getting the next page of results.

prev

URL for getting the previous page of results.

link

Hyperlink container.

Name
Type
Description
href
String

Hyperlink container.

iTwin Status

One of 'Active', 'Inactive', 'Trial'

Name
Type
Description
Active
String
Inactive
String
Trial
String

iTwin Class

The Class of your iTwin.

Name
Type
Description
Account
String
Thing
String
Endeavor
String

iTwin SubClass

The subClass your iTwin.

Name
Type
Description
Account
String
Portfolio
String
Asset
String
Program
String
Project
String
WorkPackage
String

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.