Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Every query begins with a collection of entities. Entity collections can be:
- EntitySet resources: One of the Web API EntitySetcollections.
- Filtered collections: A set of entities returned by a collection-valued navigation property for a specific record.
- An expanded collection-valued navigation property.
- A collection returned by a function.
EntitySet resources
To find all the EntitySet resources available in your environment, send a GET request to the Web API service document:
Request:
GET [Organization URI]/api/data/v9.2/
Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0
Response:
HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal  
OData-Version: 4.0  
{
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata",
    "value": [
        {
            "name": "aadusers",
            "kind": "EntitySet",
            "url": "aadusers"
        },
        {
            "name": "accountleadscollection",
            "kind": "EntitySet",
            "url": "accountleadscollection"
        },
        {
            "name": "accounts",
            "kind": "EntitySet",
            "url": "accounts"
        },
      ... <Truncated for brevity>
   [
}
Tip
These values are usually the plural name of the table, but they can be different. Use the results of this request to confirm you're using the correct EntitySet resource name.
For example, start with the accounts EntitySet resource to retrieve data from the account entity type.
GET [Organization URI]/api/data/v9.2/accounts
Filtered collections
You can query any collection of entities represented by a collection-valued navigation property of a specified record. For example, if you want to retrieve data from the account entity type where a specific user is the OwningUser, you can use the user_accounts collection-valued navigation property from the specified systemuser record.
GET [Organization URI]/api/data/v9.2/systemusers(<systemuserid value>)/user_accounts?$select=name
To locate the name of the collection-valued navigation property:
- For any Dataverse tables and relationships, you can check the Web API Entity Type Reference
- For any custom tables or relationships, look for the collection-valued navigation properties within the $metadata service document
Retrieve Data
To retrieve data from a collection, send a GET request to the collection resource. The following example shows retrieving data from the account entity type.
This example also demonstrates:
- Limiting the columns returned using $select. Learn more about selecting columns
- Ordering results using $orderby. Learn more about ordering columns
- Limiting the rows returned using $top. Learn about limiting the number of rows
- Showing formatted values using the request header: Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue". Learn about formatted values
Request:
GET [Organization URI]/api/data/v9.2/accounts?$select=name,statecode,statuscode&$orderby=name&$top=1
Accept: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Response:
HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal  
OData-Version: 4.0  
Preference-Applied: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
{
   "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts(name,statecode,statuscode)",
   "value": [
      {
         "@odata.etag": "W/\"112430907\"",
         "name": "A. Datum Corporation (sample)",
         "statecode@OData.Community.Display.V1.FormattedValue": "Active",
         "statecode": 0,
         "statuscode@OData.Community.Display.V1.FormattedValue": "Active",
         "statuscode": 1,
         "accountid": "4b757ff7-9c85-ee11-8179-000d3a9933c9"
      }
   ]
}
Refine your query
After you select the table to start your query with, refine the query to get the data you need. The following articles explain how to complete your query.
| Article | Task | 
|---|---|
| Select columns | Specify which columns of data to return. | 
| Join tables | Specify which related tables to return in the results. | 
| Order rows | Specify the sort order of the rows to return. | 
| Filter rows | Specify which rows of data to return. | 
| Page results | Specify how many rows of data to return with each request. | 
| Aggregate data | How to group and aggregate the data returned. | 
| Count number of rows | How to get a count of the number of rows returned. | 
| Performance optimizations | How to optimize performance | 
OData query options
Use these options to change the results returned from a collection. The following table describes the OData query options the Dataverse Web API supports.
| Option | Use to | More information | 
|---|---|---|
| $select | Request a specific set of properties for each entity or complex type. | Select columns | 
| $expand | Specify the related resources to be included in line with retrieved resources. | Join tables | 
| $orderby | Request resources in a particular order. | Order rows | 
| $filter | Filter a collection of resources. | Filter rows | 
| $apply | Aggregate and group your data. | Aggregate data | 
| $top | Specify the number of items in the queried collection to be included in the result. | Limit the number of rows | 
| $count | Request a count of the matching resources included with the resources in the response. | Count number of rows | 
To apply multiple options, separate query options from the resource path with a question mark (?). Separate each option after the first with an ampersand (&). Option names are case-sensitive.
Use parameter aliases with query options
You can use parameter aliases for $filter and $orderby query options, but not inside the $expand option. Parameter aliases allow you to use the same value multiple times in a request. If the alias isn't assigned a value, it is null.
Without parameter aliases:
GET [Organization URI]/api/data/v9.2/accounts?$select=name,revenue
&$orderby=revenue asc,name desc
&$filter=revenue ne null
With parameter aliases:
GET [Organization URI]/api/data/v9.2/accounts?$select=name,revenue
&$orderby=@p1 asc,@p2 desc
&$filter=@p1 ne @p3&@p1=revenue&@p2=name
You can also use parameter aliases when using functions. Learn to use Web API functions
Unsupported OData query options
The Dataverse Web API doesn't support the following OData query options: $skip,$search,$format.
URL length limitations
The length of a URL in a GET request is limited to 32 KB (32,768 characters). Including many complex OData query options as a parameter in the URL can reach the limit. You can execute a $batch operation using a POST request as a way to move the OData query options out of the URL and into the body of the request where the limit is twice as long. Sending a GET request within a $batch allows for URLs up to 64 KB (65,536 characters) in length. Learn more about batch operations using the Web API.
Limit the number of rows
To limit the number of rows returned, use the $top OData query option. Without this limit, Dataverse returns up to 5,000 standard table rows, 500 elastic table rows.
Alternatively, specify a number of records to return using paging. Don't use $top when you request pages of data. Learn how to request paged results
Limitations
There are some things that you can do using FetchXml that OData doesn't support.
- You can't join tables without any relationship. OData only allows using the - $expandquery option to join tables using navigation properties that are part of the relationships in the data model.
- Aggregation limitations lists the following limitations for aggregations using OData: 
- Perform cross table column comparisons. OData supports filtering on column values in the same row, but they must be in the same table. 
- You don't need to override the default sort order for choice columns. The default behavior when sorting choice columns is to use the integer values rather than the localized label value. 
- You can't use the Late Materialize query performance optimization. 
Community tools
Note
Tools created by the community aren't supported by Microsoft. If you have questions or issues with community tools, contact the publisher of the tool.
The Dataverse REST Builder is an open source project that provides a user interface that helps you do many things using the Dataverse Web API, including composing queries.
The XrmToolBox FetchXMLBuilder is a free tool to compose and test FetchXml requests, but it also generates code for OData queries using the same designer experience.
OData version 4.0 features
The Dataverse Web API is an OData version 4.0 service. These sections of the OData 4.0 specification describe how to retrieve data:
- OData Version 4.0. Part 1: Protocol Plus Errata 03 11.2 Requesting Data
- OData Version 4.0. Part 2: URL Conventions Plus Errata 03 5 Query Options
This article and the other articles in this section describe the parts of the 4.0 OData specification implemented by the Dataverse Web API and how you can use it to retrieve business data from Dataverse.
Note
The OData version 4.01 is the latest version. It includes enhancements and more features not available in version 4.0, and therefore not currently available in the Dataverse Web API.
Next steps
Learn how to select columns.