Skip to main content

OData V4 Feature Matrix

A structured inventory of everything the OData V4 (4.0 / 4.01) protocol defines — independent of any implementation. This document describes the specification only; it makes no statement about any client or server library.

The companion document odata-v1-v3.md does the same for OData 1.0, 2.0 and 3.0 — those three share one normative specification and one continuous lineage, so they are covered together, with the break placed where it actually is: between 3.0 and 4.0. Coverage of a concrete implementation is tracked separately — for odata2ts itself see feature support.

Scope

  • Covers the complete protocol: not only what a client sends and receives, but also the data model (CSDL), service obligations, conformance levels and security considerations.
  • JSON is the payload format described here. Atom/XML is a defined but rarely used alternative format and is not broken down; CSDL is covered in both its XML and JSON representation.
  • The OData Protocol specification (Part 1) provides the backbone of this document; URL syntax, payload shapes and schema details are pulled in from Parts 2, the JSON Format and the CSDL specification.

Sources

PrefixDocument
ProtocolOData V4.01 Part 1: Protocol
UrlOData V4.01 Part 2: URL Conventions
JsonOData JSON Format V4.01
CsdlOData CSDL XML Representation V4.01
AggOData Data Aggregation Extension V4.0

Legend

SymbolMeaning
4.0Present since OData 4.0
4.01Added in OData 4.01

Required vs. optional — the Role, Conformance and Requirement columns

OData has no flat required/optional split. It defines three conformance levels plus an orthogonal Updatable qualifier, and grades each rule as MUST / SHOULD / MAY. Those are independent axes, so the matrix carries them in three columns.

Roleon whom the obligation falls:

ValueMeaning
ServerThe service has to provide or honour it
ClientThe consumer has to send, follow or tolerate it
BothObligations on both sides
Not an obligation: a modelling construct or a definition

The conformance levels are defined for services, so most rows are Server. Client marks the places where the protocol puts the duty on the consumer — following a nextLink or a delta link, polling an async status monitor, composing batch dependencies. For header rows the value follows the Direction column.

Conformanceat which level the feature is demanded, i.e. the weakest level that requires it:

ValueMeaning
CorePart of the core protocol or data model, not gated by a conformance level at all
MinMinimal conformance level — every conformant service
IntIntermediate conformance level and upwards
AdvAdvanced conformance level and upwards
UpdA service that supports modification (Updatable OData Service)
No level demands it; support is entirely at the service's discretion

Requirementhow hard the demand is, in the sense of RFC 2119:

ValueMeaning
MUSTMandatory at the stated conformance level
SHOULDRecommended; a service may omit it, so a client cannot rely on it
MAYEntirely optional
Not applicable — the row describes a Core construct, which is not phrased as a service obligation

The two columns combine: Min + MUST is the hard floor every service meets, while + MAY is never guaranteed. Two combinations never occur, by construction: SHOULD alongside a conformance level, since a recommendation is not a level requirement; and a graded requirement on a Core row, since those describe what the protocol is rather than what a service has to do. A client that must work against arbitrary services can rely on Core and Min alone.

Values are derived from Protocol §13.1 (4.0) and §13.2 (4.01); where the two versions differ, the stricter one is shown.

How to read this document

The matrix is multi-level. The Overview summarizes the protocol into coarse areas. Each area then has its own section listing its features, and the genuinely complex ones — nested $expand, the $filter expression language, $apply transformations, the schema elements — are broken down one level further into their own subsections.


Overview

#AreaWhat it coversSpec
1Data model & schemaTypes, properties, relationships, containers, annotationsProtocol - Data Model
2Service modelEntity-ids, read/edit URLs, transient entities, namespacesProtocol - Service Model
3Versioning & extensibilityProtocol/model versioning, extension pointsProtocol - Versioning
4Formats & JSON payloadsFormat negotiation, control information, payload shapesJson - Format Design
5Header fields & preferencesRequest/response headers, Prefer and Preference-AppliedProtocol - Header Fields
6Status codes & errorsSuccess/error codes, error body, in-stream errorsProtocol - Status Codes
7Context URL@odata.context per payload kindProtocol - Context URL
8Resource addressingService root, key predicates, path segments, castsUrl - Resource Path
9Querying data$select/$expand, $filter, ordering, paging, countingProtocol - Requesting Data
10Change tracking (delta)track-changes, delta links, delta payloadsProtocol - Requesting Changes
11Data modificationCreate/update/delete, relationships, streams, collectionsProtocol - Data Modification
12OperationsFunctions and actions, binding, overload resolutionProtocol - Operations
13Asynchronous requestsrespond-async, status monitor, result retrievalProtocol - Asynchronous Requests
14Batch requestsMultipart and JSON batch, change sets, dependenciesProtocol - Batch Requests
15Aggregation ($apply)Transformation pipeline, aggregate methods, groupingAgg
16Security & conformanceAuthentication, conformance levels, interoperable clientsProtocol - Conformance

1. Data Model & Schema

The model is described in CSDL and consumed by clients through $metadata. Everything a service exposes is declared here.

FeatureDescriptionSinceRoleConformanceRequirementSpec
Entity typeStructured type with an identity (key)4.0CoreCsdl - Entity Type
Complex typeStructured type without identity, used as a property value4.0CoreCsdl - Complex Type
Enumeration typeNamed primitive constants, optionally flags4.0CoreCsdl - Enumeration Type
Type definitionNamed alias/specialization of a primitive type4.0CoreCsdl - Type Definition
Structural propertyPrimitive, complex, enum or collection-valued property4.0CoreCsdl - Structural Property
Navigation propertyTyped relationship to another entity type4.0CoreCsdl - Navigation Property
Entity containerDeclares the exposed entity sets, singletons and imports4.0CoreCsdl - Entity Container
Action & function declarationSignature, binding, return type, overloads4.0CoreCsdl - Action and Function
Annotations & vocabulariesTerms applied to model elements4.0CoreCsdl - Vocabulary and Annotation
CSDL XML representation$metadata as XML4.0ServerAdvMUSTCsdl - XML Representation
CSDL JSON representation$metadata as JSON4.01ServerSHOULDCsdl - CSDL Document
Schema versioningModel evolution, $schemaversion4.01ServerMAYProtocol - Model Versioning

1.1 Keys & Identity

FeatureDescriptionSinceRoleConformanceRequirementSpec
Simple keySingle key property4.0CoreCsdl - Entity Type
Composite keySeveral properties forming the key4.0CoreCsdl - Entity Type
Alternate keysAdditional unique identifiers besides the canonical key4.0ServerMAYUrl - Addressing Entities
Entity-idDurable, globally unique identity of an entity4.0CoreProtocol - Entity-Ids and Entity References

1.2 Relationships

FeatureDescriptionSinceRoleConformanceRequirementSpec
Single-valued navigationTo-one relationship4.0CoreCsdl - Navigation Property
Collection-valued navigationTo-many relationship4.0CoreCsdl - Navigation Property
Partner navigationBidirectional relationship declaration4.0CoreCsdl - Navigation Property
Referential constraintDependent/principal property pairs4.0CoreCsdl - Navigation Property
Containment navigationChild entities addressed only through the parent4.0CoreCsdl - Navigation Property
Navigation property bindingMaps a navigation to a concrete target set4.0CoreCsdl - Entity Container
Integrity constraints on modificationBehavior when a constraint would be violated4.0CoreProtocol - Handling of Integrity Constraints

1.3 Inheritance & Open Types

FeatureDescriptionSinceRoleConformanceRequirementSpec
Type inheritanceDerived entity and complex types4.0CoreCsdl - Entity Type
Abstract typesTypes that cannot be instantiated4.0CoreCsdl - Entity Type
Open typesInstances may carry undeclared (dynamic) properties4.0CoreProtocol - Properties Not Advertised in Metadata
Untyped valuesValues without a declared EDM type4.01CoreJson - Untyped Value

2. Service Model

FeatureDescriptionSinceRoleConformanceRequirementSpec
Service root & service documentEntry point listing entity sets, singletons, imports4.0ServerMinMUSTProtocol - Service Document Request
Metadata document$metadata, the CSDL of the service4.0ServerAdvMUSTProtocol - Metadata Document Request
Entity referencesReferring to an entity by its id instead of its value4.0CoreProtocol - Entity-Ids and Entity References
Read URLs & edit URLsDistinct URLs for reading and modifying an entity4.0ServerUpdMUSTProtocol - Read URLs and Edit URLs
Transient entitiesEntities without a durable id (e.g. operation results)4.01CoreProtocol - Transient Entities
Default namespacesOmitting the namespace when unambiguous4.01ServerMinMUSTProtocol - Default Namespaces

3. Versioning & Extensibility

FeatureDescriptionSinceRoleConformanceRequirementSpec
Protocol versioningOData-Version / OData-MaxVersion negotiation4.0BothMinMUSTProtocol - Protocol Versioning
Model versioningEvolving the schema without breaking clients4.0ServerMAYProtocol - Model Versioning
Custom query optionsService-specific options without $ prefix4.0ServerMAYUrl - Custom Query Options
Query option extensibilityRules for extending the option space4.0BothMinMUSTProtocol - Query Option Extensibility
Payload extensibilityAdditional content in payloads4.0BothMinMUSTProtocol - Payload Extensibility
Action/function extensibilityAdding operations without breaking clients4.0BothMinMUSTProtocol - Action/Function Extensibility
Vocabulary extensibilityDefining and applying custom terms4.0BothMinMUSTProtocol - Vocabulary Extensibility
Header field extensibilityCustom headers4.0BothMinMUSTProtocol - Header Field Extensibility
Format extensibilityAdditional payload formats4.0BothMinMUSTProtocol - Format Extensibility

4. Formats & JSON Payloads

FeatureDescriptionSinceRoleConformanceRequirementSpec
Format negotiationAccept header and $format query option4.0BothMinMUSTProtocol - Formats
$formatFormat as a query option instead of a header4.0ServerMAYProtocol - $format
Metadata levelodata.metadata=full / minimal / none4.0BothMAYJson - Amount of Control Information
Number representationIEEE754Compatible for Edm.Int64 / Edm.Decimal4.0ServerMAYJson - Representation of Numbers
Relative URLsShortened URLs resolved against the context4.0CoreJson - Relative URLs
Payload ordering constraintsRequired ordering of control information4.0ServerMinMUSTJson - Payload Ordering Constraints
Instance annotations@ns.term on objects, arrays and primitives4.0ServerMAYJson - Instance Annotations

4.1 Control Information

Metadata carried inside the payload. In 4.0 every name is prefixed (@odata.context); 4.01 allows the short form (@context), and consumers must accept both.

Control informationMeaningSinceRoleConformanceRequirementSpec
@odata.contextDescribes the shape of the payload4.0ServerMinMUSTProtocol - Context URL
@odata.metadataEtagETag of the metadata document4.0ServerMAYJson - Control Information
@odata.typeType of the instance, for derived/ambiguous types4.0ServerMinMUSTJson - Control Information
@odata.countTotal count of a collection4.0ServerMinMUSTJson - Control Information
@odata.nextLinkLink to the next page (server-driven paging)4.0ServerMinMUSTJson - Control Information
@odata.deltaLinkLink for subsequent change tracking4.0ServerMAYJson - Delta Payload
@odata.idEntity-id of the instance4.0ServerMAYJson - Control Information
@odata.editLink / @odata.readLinkEdit and read URL of the instance4.0ServerUpdMUSTJson - Control Information
@odata.etagConcurrency token of the instance4.0ServerMAYJson - Control Information
@odata.navigationLink / @odata.associationLinkLinks to a related entity and its reference4.0ServerMAYJson - Navigation Link
@odata.mediaEditLink, @odata.mediaReadLink, @odata.mediaContentType, @odata.mediaEtagMedia stream links and metadata4.0ServerMAYJson - Media Entity
@odata.bindBinds a navigation property to an existing entity4.0ServerMAYJson - Bind Operation
@odata.removedMarks a deleted entity in a delta payload4.0ServerMAYJson - Delta Payload
Prefix-less form (@context, @count, …)Short spelling of all control information4.01ServerMinMUSTJson - Control Information

4.2 Payload Shapes

PayloadDescriptionSinceRoleConformanceRequirementSpec
Service documentList of exposed resources4.0ServerMinMUSTJson - Service Document
EntitySingle entity4.0ServerMinMUSTJson - Entity
Collection of entitiesEntity set or navigation collection4.0ServerMinMUSTJson - Collection of Entities
Structural propertyPrimitive, complex, and collections thereof4.0ServerMinMUSTJson - Structural Property
Entity reference$ref payload carrying only the entity-id4.0ServerMAYJson - Entity Reference
Expanded navigation propertyRelated entities inlined4.0ServerAdvMUSTJson - Expanded Navigation Property
Stream property & media entityBinary content and its links4.0ServerMAYJson - Stream Property
Operation responseResult of a function or action4.0ServerMAYJson - Individual Property or Operation Response
Collection of operation responsesResults of several operations4.01ServerMAYJson - Collection of Operation Responses
Delta payloadChanges since a delta link4.0ServerMAYJson - Delta Payload
Collection ETagETag covering a whole collection4.01ServerMAYJson - Collection ETag

5. Header Fields & Preferences

HeaderDirectionDescriptionSinceRoleConformanceRequirementSpec
Content-TypebothPayload format incl. parameters4.0BothMinMUSTProtocol - Content-Type
Content-EncodingbothCompression4.0BothMAYProtocol - Content-Encoding
Content-LanguagebothNatural language of the payload4.0BothMAYProtocol - Content-Language
Content-LengthbothPayload size4.0BothMAYProtocol - Content-Length
OData-VersionbothVersion of the payload4.0BothMinMUSTProtocol - OData-Version
AcceptrequestRequested format4.0ClientMinMUSTProtocol - Accept
Accept-CharsetrequestRequested charset4.0ClientMAYProtocol - Accept-Charset
Accept-LanguagerequestRequested language4.0ClientMAYProtocol - Accept-Language
If-MatchrequestOptimistic concurrency for update/delete4.0ClientUpdMUSTProtocol - If-Match
If-None-MatchrequestConditional read, upsert protection4.0ClientMAYProtocol - If-None-Match
OData-Isolationrequestsnapshot isolation across requests4.0ClientMAYProtocol - Isolation
OData-MaxVersionrequestHighest version the client understands4.0ClientMinMUSTProtocol - OData-MaxVersion
PreferrequestBehavioral hints, see 5.14.0ClientMAYProtocol - Prefer
ETagresponseConcurrency token4.0ServerMAYProtocol - ETag
LocationresponseURL of a created or async resource4.0ServerUpdMUSTProtocol - Location
OData-EntityIdresponseEntity-id when no body is returned4.0ServerUpdMUSTProtocol - OData-EntityId
OData-ErrorresponseSignals an in-stream error4.01ServerMAYProtocol - OData-Error
Preference-AppliedresponseWhich preferences were honored4.0ServerMAYProtocol - Preference-Applied
Retry-AfterresponseDelay before polling again4.0ServerMAYProtocol - Retry-After
AsyncResultresponseStatus of an asynchronous request4.0ServerMAYProtocol - AsyncResult
VaryresponseCache-relevant request headers4.0ServerMAYProtocol - Vary

5.1 Preferences

All preferences are hints: a service may ignore them, and reports what it applied via Preference-Applied.

PreferenceEffectSinceRoleConformanceRequirementSpec
allow-entityreferencesService may return entity references instead of entities4.0BothMAYProtocol - allow-entityreferences
callbackAsynchronous notification via a callback URL4.0BothMAYProtocol - callback
continue-on-errorBatch continues after a failing request4.0BothMAYProtocol - continue-on-error
include-annotationsWhich instance annotations to include4.0BothMAYProtocol - include-annotations
maxpagesizeHint for the server-driven page size4.0BothMAYProtocol - maxpagesize
omit-values=nulls|defaultsOmit null/default values from the payload4.01BothMAYProtocol - omit-values
return=representation|minimalWhether modifications return the full entity4.0BothMAYProtocol - return
respond-asyncProcess the request asynchronously4.0BothMAYProtocol - respond-async
track-changesRequest a delta link for change tracking4.0BothMAYProtocol - track-changes
waitHow long the client will wait for a response4.0BothMAYProtocol - wait

6. Status Codes & Error Handling

FeatureDescriptionSinceRoleConformanceRequirementSpec
200 OKRequest succeeded with a body4.0ServerMinMUSTProtocol - 200 OK
201 CreatedEntity created4.0ServerUpdMUSTProtocol - 201 Created
202 AcceptedAsynchronous processing started4.0ServerMAYProtocol - 202 Accepted
204 No ContentSuccess without a body4.0ServerMinMUSTProtocol - 204 No Content
3xx / 304 Not ModifiedRedirection and conditional-read result4.0ServerMAYProtocol - 3xx Redirection
404, 405, 406, 410, 412, 424Client error responses4.0ServerMinMUSTProtocol - Client Error Responses
501 Not ImplementedUnsupported feature4.0ServerMinMUSTProtocol - 501 Not Implemented
Error response bodycode, message, target, details, innererror4.0ServerMinMUSTProtocol - Error Response Body
In-stream errorsFailure after the response body has started4.0ServerMAYProtocol - In-Stream Errors
Error in a success payloadError information alongside partial results4.01ServerMAYJson - Error Information in a Success Payload

7. Context URL

@odata.context tells the consumer how to interpret the payload. The specification defines a distinct form per payload kind.

Context forSinceRoleConformanceRequirementSpec
Service document4.0ServerMinMUSTProtocol - Service Document
Collection of entities / single entity4.0ServerMinMUSTProtocol - Collection of Entities
Singleton4.0ServerMinMUSTProtocol - Singleton
Derived entities (collection and single)4.0ServerMAYProtocol - Collection of Derived Entities
Projected entities ($select)4.0ServerIntMUSTProtocol - Collection of Projected Entities
Expanded entities ($expand)4.0ServerAdvMUSTProtocol - Collection of Expanded Entities
Entity references ($ref)4.0ServerMAYProtocol - Collection of Entity References
Property value4.0ServerIntMUSTProtocol - Property Value
Complex or primitive type (and collections)4.0ServerMinMUSTProtocol - Complex or Primitive Type
Operation result4.0ServerMAYProtocol - Operation Result
Delta payload and its items4.0ServerMAYProtocol - Delta Payload Response
$all / $crossjoin responses4.0ServerMAYProtocol - $all Response

8. Resource Addressing

How a URL identifies a resource. Query options are covered in section 9.

FeatureSyntaxSinceRoleConformanceRequirementSpec
Service roothttps://host/service/4.0ServerMinMUSTUrl - Service Root URL
Metadata endpoint/$metadata4.0ServerAdvMUSTUrl - Addressing the Model
Batch endpoint/$batch4.0ServerAdvMUSTUrl - Addressing the Batch Endpoint
Entity set & singleton/Products, /Me4.0ServerMinMUSTUrl - Addressing Entities
Canonical key predicate/Products(1), /Products('abc')4.0ServerMinMUSTUrl - Addressing Entities
Composite key/OrderItems(OrderID=1,ItemNo=2)4.0ServerMinMUSTUrl - Addressing Entities
Key-as-segment/Products/14.0ServerMAYUrl - Addressing Entities
Navigation path/Orders(1)/Items4.0ServerMinMUSTUrl - Addressing Entities
Property access/Products(1)/Name4.0ServerIntMUSTUrl - Addressing a Property
Raw value/Products(1)/Name/$value4.0ServerIntMUSTUrl - Addressing a Property Value
Media stream/Products(1)/$value4.0ServerIntMUSTUrl - Addressing the Media Stream
Entity references/Orders(1)/Items/$ref4.0ServerUpdMUSTUrl - Addressing References
Count of a collection/Products/$count4.0ServerAdvMUSTUrl - Addressing the Count
Type cast segment/Products/Namespace.DiscountedProduct4.0ServerIntMUSTUrl - Addressing Derived Types
Member of a collection/Products(1)/Tags addressed by value4.01ServerMAYUrl - Addressing a Member
Member of an ordered collection/Tags/$index(2)4.01ServerMAYUrl - Addressing a Member of an Ordered Collection
Subset of a collection/Items/$filter(@expr)4.01ServerMAYUrl - Addressing a Subset
Each member/Products/$each4.01ServerMAYUrl - Addressing Each Member
Cross join/$crossjoin(Products,Categories)4.0ServerMAYUrl - Cross Join
All entities/$all4.0ServerMAYUrl - Addressing All Entities
Resolve an entity-id/$entity?$id=…4.0ServerMAYProtocol - Resolving an Entity-Id
Operation invocation/Products(1)/Namespace.Rate4.0ServerMAYUrl - Addressing Operations
Query options in the bodyPOST /Products/$query with text/plain body4.01ServerMAYUrl - Passing Query Options in the Request Body

9. Querying Data

FeatureDescriptionSinceRoleConformanceRequirementSpec
Shaping the result$select and $expand, see 9.14.0ServerIntMUSTProtocol - Specifying Properties to Return
Filtering$filter, see 9.24.0ServerIntMUSTProtocol - $filter
Sorting, paging, counting$orderby, $top, $skip, $count, see 9.34.0ServerAdvMUSTProtocol - Querying Collections
Free-text search$search with its own expression grammar4.0ServerAdvMUSTProtocol - $search
Computed properties$compute adds derived properties to the result4.01ServerSHOULDProtocol - $compute
Aggregation$apply, see section 154.0ServerMAYAgg
Parameter aliases@name placeholders reused across options4.0ServerIntMUSTUrl - Parameter Aliases
Custom query optionsService-defined, without $ prefix4.0ServerMAYUrl - Custom Query Options
Individual entities & propertiesReading a single entity, property or raw value4.0ServerMinMUSTProtocol - Requesting Individual Entities
Related entitiesReading across a navigation property4.0ServerMinMUSTProtocol - Requesting Related Entities
Entity referencesReading $ref instead of entities4.0ServerMAYProtocol - Requesting Entity References
Schema version selection$schemaversion4.01ServerMAYProtocol - $schemaversion

9.1 $select & $expand

$select narrows the properties returned; $expand inlines related entities. Both accept paths, and $expand additionally carries nested query options, which is what makes it the most complex option in the protocol.

FeatureSyntaxSinceRoleConformanceRequirementSpec
Select properties$select=Name,Price4.0ServerIntMUSTProtocol - $select
Select all$select=*4.0ServerIntMUSTProtocol - $select
Select with type cast$select=Namespace.SubType/Prop4.0ServerIntMUSTProtocol - $select
Select an operation$select=Namespace.Action advertises it4.0ServerMAYProtocol - $select
Expand a navigation property$expand=Category4.0ServerAdvMUSTProtocol - $expand
Expand all$expand=*4.0ServerMAYProtocol - $expand
Expand references$expand=Items/$ref4.0ServerAdvMUSTProtocol - $expand
Expand a count$expand=Items/$count4.0ServerMAYProtocol - $expand
Expand with type cast$expand=Namespace.SubType/Nav4.0ServerAdvMUSTProtocol - $expand

9.1.1 Nested Expand Options

Options applied inside an $expand, in parentheses and separated by ; — e.g. $expand=Items($select=Name;$filter=Price gt 10;$top=5). They apply to the related collection, not the parent.

Nested optionApplies toSinceRoleConformanceRequirementSpec
$selectRelated entities4.0ServerSHOULDProtocol - Expand Options
$expandFurther nesting, recursively4.0ServerMAYProtocol - Expand Options
$filterCollection-valued navigation only4.0ServerAdvMUSTProtocol - Expand Options
$orderbyCollection-valued navigation only4.0ServerSHOULDProtocol - Expand Options
$top / $skipCollection-valued navigation only4.0ServerSHOULDProtocol - Expand Options
$countCollection-valued navigation only4.0ServerSHOULDProtocol - Expand Options
$searchCollection-valued navigation only4.0ServerSHOULDProtocol - Expand Options
$computeRelated entities4.01ServerMAYProtocol - Expand Options
$applyCollection-valued navigation only4.0ServerMAYAgg
$levelsRecursive expansion depth ($levels=3, $levels=max)4.0ServerSHOULDProtocol - Expand Option $levels

9.2 $filter Expression Language

A boolean expression evaluated per item. Operands are property paths, literals, parameter aliases and function calls; $it, $this and lambda range variables provide access to the current instance.

9.2.1 Operators

GroupOperatorsSinceRoleConformanceRequirementSpec
Comparisoneq, ne, gt, ge, lt, le4.0ServerIntMUSTProtocol - Built-in Filter Operations
Logicaland, or, not4.0ServerSHOULDProtocol - Built-in Filter Operations
Arithmeticadd, sub, mul, div, mod4.0ServerSHOULDProtocol - Built-in Filter Operations
Integer divisiondivby4.01ServerSHOULDProtocol - Built-in Filter Operations
Grouping( … )4.0ServerIntMUSTProtocol - Built-in Filter Operations
Membershipin — value against a list4.01ServerIntMUSTProtocol - Built-in Filter Operations
Enum/flag testhas4.0ServerSHOULDProtocol - Built-in Filter Operations

9.2.2 Built-in Functions

GroupFunctionsSinceRoleConformanceRequirementSpec
Stringconcat, contains, endswith, startswith, indexof, length, substring, tolower, toupper, trim4.0ServerSHOULDProtocol - Built-in Query Functions
String (4.01)matchesPattern, substring with two arguments4.01ServerSHOULDProtocol - Built-in Query Functions
Collectionhassubset, hassubsequence4.01ServerSHOULDProtocol - Built-in Query Functions
Date & timeyear, month, day, hour, minute, second, fractionalseconds, date, time, totaloffsetminutes, totalseconds, now, mindatetime, maxdatetime4.0ServerSHOULDProtocol - Built-in Query Functions
Arithmeticround, floor, ceiling4.0ServerSHOULDProtocol - Built-in Query Functions
Typecast, isof4.0ServerSHOULDProtocol - Built-in Query Functions
Conditionalcase4.0ServerSHOULDProtocol - Built-in Query Functions
Geogeo.distance, geo.intersects, geo.length4.0ServerMAYProtocol - Built-in Query Functions

9.2.3 Lambda Operators & Path Expressions

FeatureSyntaxSinceRoleConformanceRequirementSpec
anyItems/any(i: i/Price gt 10)4.0ServerAdvMUSTProtocol - Built-in Filter Operations
allItems/all(i: i/InStock)4.0ServerAdvMUSTProtocol - Built-in Filter Operations
any without a predicateItems/any() — collection is non-empty4.0ServerAdvMUSTProtocol - Built-in Filter Operations
$itThe current instance4.0ServerMAYProtocol - Built-in Filter Operations
$thisThe current instance inside a lambda4.01ServerMAYProtocol - Built-in Filter Operations
$rootAbsolute reference to the service root4.0ServerMAYProtocol - Built-in Filter Operations
Parameter alias$filter=Name eq @n&@n='X'4.0ServerIntMUSTProtocol - Parameter Aliases

9.3 Ordering, Paging & Counting

FeatureSyntaxSinceRoleConformanceRequirementSpec
Sorting$orderby=Name desc,Price asc4.0ServerAdvMUSTProtocol - $orderby
Client-driven paging$top=10&$skip=204.0ServerIntMUSTProtocol - $top
Inline count$count=true4.0ServerAdvMUSTProtocol - $count
Count of a collection/Products/$count as a raw value4.0ServerAdvMUSTProtocol - Requesting the Number of Items
Server-driven paging@odata.nextLink, maxpagesize preference4.0ServerMinMUSTProtocol - Server-Driven Paging
Skip tokenOpaque continuation inside nextLink4.0ServerMinMUSTProtocol - Server-Driven Paging
Member of an ordered collection$index4.01ServerMAYProtocol - Requesting an Individual Member

10. Change Tracking (Delta)

FeatureDescriptionSinceRoleConformanceRequirementSpec
Request change trackingPrefer: track-changes4.0BothMAYProtocol - track-changes
Delta link@odata.deltaLink returned with the result4.0ServerMAYProtocol - Delta Links
Using a delta linkFetching changes since the previous response4.0ClientMAYProtocol - Using Delta Links
Delta payloadAdded/changed entities, deletions, link changes4.0ServerMAYProtocol - Delta Payloads
Deleted entity@removed with a reason4.0ServerMAYJson - Delta Payload
Added / deleted linkRelationship changes as their own entries4.0ServerMAYJson - Added Link
Nested delta in expanded propertiesDelta inside $expand4.01ServerMAYJson - Delta Responses

11. Data Modification

FeatureMethodSinceRoleConformanceRequirementSpec
Create an entityPOST to an entity set4.0ServerUpdMUSTProtocol - Create an Entity
Update an entityPATCH (merge)4.0ServerUpdMUSTProtocol - Update an Entity
Replace an entityPUT (full replace)4.0ServerSHOULDProtocol - Update an Entity
UpsertPATCH/PUT on a non-existing key4.0ServerUpdMUSTProtocol - Upsert an Entity
Delete an entityDELETE4.0ServerUpdMUSTProtocol - Delete an Entity
Optimistic concurrencyIf-Match / If-None-Match with ETags4.0ServerUpdMUSTProtocol - Use of ETags
Returning resultsPrefer: return=representation|minimal4.0ServerMAYProtocol - Returning Results
DateTimeOffset handlingNormalization rules on modification4.0ServerMinMUSTProtocol - Handling of DateTimeOffset
Undeclared propertiesBehavior for open/dynamic properties4.0ServerMAYProtocol - Properties Not Advertised
FeatureDescriptionSinceRoleConformanceRequirementSpec
Deep insertCreate an entity together with related ones4.0ServerSHOULDProtocol - Create Related Entities
Bind on create@odata.bind / @id to link existing entities4.0ServerMAYProtocol - Link to Related Entities
Deep updateNested changes inside PATCH4.01ServerSHOULDProtocol - Update Related Entities
Add a referencePOST to …/Nav/$ref4.0ServerUpdMUSTProtocol - Add a Reference
Remove a referenceDELETE on …/Nav/$ref4.0ServerUpdMUSTProtocol - Remove a Reference
Change a single-valued referencePUT on …/Nav/$ref4.0ServerUpdMUSTProtocol - Change the Reference
Replace all referencesPUT on a collection-valued …/Nav/$ref4.0ServerSHOULDProtocol - Replace all References

11.2 Properties, Values & Collections

FeatureDescriptionSinceRoleConformanceRequirementSpec
Update a primitive propertyPUT on the property URL4.0ServerSHOULDProtocol - Update a Primitive Property
Set a value to nullDELETE on the property URL4.0ServerSHOULDProtocol - Set a Value to Null
Update a complex propertyPATCH/PUT on the property URL4.0ServerSHOULDProtocol - Update a Complex Property
Update a collection propertyReplace the whole collection4.0ServerMAYProtocol - Update a Collection Property
Update a collection of entitiesDelta-style collection update4.01ServerMAYProtocol - Update a Collection of Entities
Update members of a collectionPATCH via $each4.01ServerMAYProtocol - Update Members of a Collection
Delete members of a collectionDELETE via $each4.01ServerMAYProtocol - Delete Members of a Collection
Ordered collectionsManaging members by position4.01ServerMAYProtocol - Managing Members of an Ordered Collection
Positional insert$index on insert4.01ServerMAYProtocol - Positional Inserts

11.3 Media Entities & Streams

FeatureDescriptionSinceRoleConformanceRequirementSpec
Create a media entityPOST the stream, then patch the properties4.0ServerMAYProtocol - Create a Media Entity
Update a media streamPUT on /$value4.0ServerMAYProtocol - Update a Media Entity Stream
Delete a media entityDELETE on the entity4.0ServerMAYProtocol - Delete a Media Entity
Update a stream propertyPUT on the stream property4.0ServerMAYProtocol - Update Stream Values
Delete a stream propertyDELETE on the stream property4.0ServerMAYProtocol - Delete Stream Values

12. Operations (Functions & Actions)

FeatureDescriptionSinceRoleConformanceRequirementSpec
FunctionSide-effect free, GET, composable4.0ServerMAYProtocol - Functions
ActionMay have side effects, POST, not composable4.0ServerMAYProtocol - Actions
Unbound operationInvoked via an import at the service root4.0ServerMAYProtocol - Operations
Bound operationBound to an entity, collection or complex type4.0ServerMAYProtocol - Binding an Operation
Function parameters in the URL/Rate(value=4)4.0ServerMAYProtocol - Invoking a Function
Inline parameter syntaxParameters as query options4.01ServerMAYProtocol - Inline Parameter Syntax
Action parameters in the bodyJSON object with named parameters4.0ServerMAYProtocol - Invoking an Action
Overload resolutionSelecting among overloads by parameter names4.0ServerMAYProtocol - Function overload resolution
Composable functionsFurther path segments and options on the result4.0ServerMAYProtocol - Functions
Operation advertisementAvailable operations announced in the payload4.0ServerMAYProtocol - Advertising Available Operations

13. Asynchronous Requests

FeatureDescriptionSinceRoleConformanceRequirementSpec
Request async processingPrefer: respond-async4.0BothSHOULDProtocol - respond-async
Status monitor202 Accepted plus Location for polling4.0ServerMAYProtocol - Asynchronous Requests
Polling intervalRetry-After4.0ClientMAYProtocol - Retry-After
Fetching the resultFinal response once processing finished4.0ClientMAYProtocol - Asynchronous Requests
CancellationDELETE on the status monitor4.0ClientMAYProtocol - Asynchronous Requests
CallbackPrefer: callback instead of polling4.0BothMAYProtocol - callback
Asynchronous batchAsync processing of a batch request4.0ServerMAYProtocol - Asynchronous Batch Requests

14. Batch Requests

FeatureDescriptionSinceRoleConformanceRequirementSpec
Multipart batchmultipart/mixed body4.0BothAdvMUSTProtocol - Multipart Batch Format
JSON batchBatch as a JSON document4.01BothMAYJson - Batch Requests and Responses
Change setsGroup of modifications treated atomically4.0ServerAdvMUSTProtocol - Multipart Batch Request Body
Request identificationid per request4.01ClientMAYProtocol - Identifying Individual Requests
Request dependenciesdependsOn between requests4.01ClientMAYProtocol - Request Dependencies
Referencing new entities$<id> referring to a previous result4.0ClientAdvMUSTProtocol - Referencing New Entities
Referencing an ETagUsing an ETag from an earlier response4.0ClientMAYProtocol - Referencing an ETag
Referencing response valuesUsing values from earlier response bodies4.01ClientMAYProtocol - Referencing Values from Response Bodies
Continue on errorPrefer: continue-on-error4.0ClientMAYProtocol - continue-on-error
Batch headersHeaders applying to the batch as a whole4.0BothAdvMUSTProtocol - Batch Request Headers

15. Aggregation ($apply)

Defined by the Data Aggregation Extension, not by the core protocol. $apply is a pipeline: each transformation consumes the previous result set.

TransformationDescriptionRoleConformanceRequirementSpec
aggregateAggregate values with sum, min, max, average, countdistinct, $countServerMAYAgg - aggregate
groupbyGroup by properties, optionally with a nested transformationServerMAYAgg - groupby
filterFilter within the pipelineServerMAYAgg - filter
computeAdd computed propertiesServerMAYAgg - compute
expandExpand within the pipelineServerMAYAgg - groupby with navigation
concatConcatenate several result setsServerMAYAgg - concat
identityNeutral transformationServerMAYAgg - identity
orderbyOrder within the pipelineServerMAYAgg - orderby
skip / topPaging within the pipelineServerMAYAgg - top
topcount / bottomcountTop or bottom N by an expressionServerMAYAgg - topcount/bottomcount
toppercent / bottompercentTop or bottom N percentServerMAYAgg - toppercent/bottompercent
topsum / bottomsumMembers contributing to a share of a sumServerMAYAgg - topsum/bottomsum
searchFree-text search within the pipelineServerMAYAgg - search
join / outerjoinJoin across navigation propertiesServerMAYAgg - join/outerjoin
traverseTraverse a recursive hierarchyServerMAYAgg - traverse
ancestors / descendantsHierarchy navigationServerMAYAgg - ancestors/descendants
Custom aggregatesService-defined aggregation methodsServerMAYAgg - Custom Aggregates

16. Security & Conformance

FeatureDescriptionSinceRoleConformanceRequirementSpec
AuthenticationNot prescribed; delegated to HTTP mechanisms4.0CoreProtocol - Authentication
Security considerationsInjection, information disclosure, resource exhaustion4.0CoreProtocol - Security Considerations
4.0 conformance levelsMinimal, Intermediate, Advanced4.0CoreProtocol - OData 4.0 Conformance Levels
4.01 conformance levelsRevised level definitions4.01CoreProtocol - OData 4.01 Conformance Levels
Interoperable clientsWhat a client must tolerate to be interoperable4.0CoreProtocol - Interoperable OData Clients