'@odata.type' is an invalid instance annotation name
This message shows up in 4 different situations. Pick the one that matches yours:
- POST /views takes an SP.View body — ViewTypeKind fails, and @odata.type passes only under OData v4ViewTypeKind from the creation-information docs 400s, and an @odata.type annotation passes only with OData-Version: 4.0; measured recipe for view + scope + column orderCause and fix →
- Drop __metadata from write bodies — odata=verbose needs OData v3, and SPHttpClient sends v4Old-tutorial payloads 400 as plain JSON, and switching to odata=verbose 400s again under SPHttpClient, which sends odata-version: 4.0; write plain JSON without the type hint, or blank odata-version where the verbose form is really neededCause and fix →
- A new Choice value in your provisioning code never reaches already-deployed sitesCreate-if-missing never updates an existing field; a new Choice value in the manifest no-ops on deployed sites; reconcile with a post-hook SP.FieldChoice MERGE (plain JSON with @odata.type under SPHttpClient) that only ever widens the set — Choices is replace, so a failed read of the current values turns the union into the manifest and deletes the rest, while items keep the values the definition no longer knowsCause and fix →
- A library with NoCrawl returns nothing from Search — and silently blinds anything built on SearchExcluded containers return 0 with HTTP 200 and no log, so Search-backed AI never sees them; provisioning that excludes data lists must not inherit that onto content libraries; reindex can't be forced over REST (SP.PropertyValues won't MERGE); indexing is not a permission change — Search trims per user; and Hidden is a separate axis from NoCrawl, so hiding a library does not take it out of the index (measured before/after)Cause and fix →