ndovuscim

SCIM SPEC · RFC 9865 / 9944 / 9967

The new RFCs

Cursor pagination, device schemas, and security events: what the 2025-2026 RFCs change on the wire, arranged along the IANA SCIM registry all three amend.

the first new SCIM RFCs in a decadeall changes opt-in by design
01 · One registry, three amendments

The IANA group "System for Cross-domain Identity Management (SCIM) Schema URIs" atiana.org/assignments/scim was established by RFC 7643 Section 10, and it is the spine the three new RFCs hang from: each one mutates rows there, and each one is discovered at runtime through the ServiceProviderConfig document rather than versioned into the protocol. Nothing in the three RFCs makes anything mandatory for an existing server; a 2015-era deployment that ignores all of them remains conformant to the 2015 texts.

RFCPublishedRelationshipIANA action
RFC 9865October 2025updates RFC 7643 and RFC 7644adds references to the ListResponse, SearchRequest, and ServiceProviderConfig rows
RFC 9944May 2026purely additive (no Updates line)registers 12 schema URIs: 2 core resources plus 10 extension schemas
RFC 9967May 2026updates RFC 7643 and RFC 7644creates the SCIM Event URIs sub-registry and registers the Set-Txn HTTP field name

Sources: the RFC texts and the RFC Editor updated-by headers (retrieved 2026-11-01); the registry rows at iana.org/assignments/scim.

02 · RFC 9865: cursor pagination

Published October 2025 as the first new SCIM RFC in a decade, RFC 9865 exists because SCIM service providers are usually wrappers over backends that already paginate with cursors. Translating cursors to RFC 7644's index pagination forces the server to iterate and materialize full result sets; the RFC names that cost "pagination translation" and adds a cursor mode alongside it. The mode engages when a client uses the cursor parameter on a GET search or a POST SearchRequest.

AttributeLives onContract
cursorquery parameter / SearchRequest bodyan opaque value from a previous nextCursor; MUST be empty or omitted on the first request; restricted to RFC 3986 unreserved characters
countquery parameter / SearchRequest bodypage size; 0 returns only totalResults; the SP MUST NOT return more than requested and MAY return fewer
nextCursorListResponseMUST appear in every paged response except the last; omission is the end-of-results signal
previousCursorListResponseOPTIONAL back-pointer; MUST NOT appear on the first page
paginationServiceProviderConfigcursor and index booleans (both REQUIRED), defaultPaginationMethod, defaultPageSize, maxPageSize, cursorTimeout; absence of the block means cursor pagination is unsupported

Source: RFC 9865 Sections 2 to 4 (rfc-editor.org, retrieved 2026-11-01).

The client contract is deliberately narrow: repeat the initial query with all parameters identical except the cursor. Three scimType values extend RFC 7644's error table for the mode, all on 400:invalidCursor, expiredCursor, and invalidCount (the count must match the initial query's). Two design rules matter to implementers adding cursors to an index-paginated server: the SP MAY force cursor pagination by returning nextCursor even when the client did not ask for it, and if both methods are supported the SP MUST pick and advertise a default, with the RFC's own guidance to keep index as the default for compatibility. One relaxation rides along: totalResults MAY be omitted by cursor-paginating SPs that cannot estimate it, which a 7644-era client must therefore treat as optional in the wild.

The security considerations are worth reading in full: possession of a cursor confers no privilege and authorization is re-checked per page; SPs SHOULD invalidate a user's cursors on permission changes or keep counts consistent; out-of-scope and non-existent pages MUST return identical errors so cursors cannot be probed; and large anonymous cursor queries remain subject to the 400 tooManyceiling.

03 · RFC 9944: device schemas

Published May 2026 and purely additive (its header carries no Updates line; it extends SCIM through RFC 7643's extension mechanism alone), RFC 9944 registers two core resources. Device(urn:ietf:params:scim:schemas:core:2.0:Device) carries a REQUIRED booleanactive, an optional displayName, mudUrl (an RFC 8520 Manufacturer Usage Description URL), and read-only groups. EndpointApp covers the client applications that control devices or receive telemetry, with a REQUIRED immutableapplicationType of deviceControl or telemetry, and a credential model that returns either server-generated clientToken or acceptedcertificateInfo. Group membership extends to both: the members type may be"Device" or "EndpointApp".

Two aspects make the document worth a close read beyond its schema tables. First, the role reversal: in the device model the SCIM server lives in the deployment receiving device records, while the SCIM clients are the vendors and onboarding apps pushing those records. The RFC states the consequence plainly: the SCIM database "is therefore essentially equivalent to a network's AAA database". The provisioning direction has not changed; the authority relationship has. Second, the appendices: RFC 9944 ships non-normative JSON Schema and OpenAPI renderings of its schemas, artifact forms SCIM never had in 2015, which change what tooling can consume a SCIM schema directly.

The registry footprint is the largest of the three RFCs: 12 URIs, two core plus ten extensions covering BLE (with four nested pairing-method schemas), Wi-Fi Easy Connect, Ethernet MAB, FIDO Device Onboard, Zigbee, and the endpoint-apps extension for non-IP devices behind application-layer gateways. The ethernet-MAB extension carries the RFC's own warning that MAC-address authentication is weak and incompatible with MAC randomization.

04 · RFC 9967: events and asynchronous SCIM

Published May 2026, RFC 9967 profiles Security Event Tokens (RFC 8417) for SCIM: a SCIM Event is a SET whose events claim carries URNs under urn:ietf:params:scim:event. Subjects are identified with the RFC 9493 sub_id claim in a SCIM-specific format whoseuri member is REQUIRED (the path after the Base URI); the JWT sub claim MUST NOT be used. Alongside the event identity ride four payload claims: txn (a transaction identifier shared across every SET from one state change, REQUIRED for async and replication use),version (the resulting ETag), data (a full resource representation), andattributes (the changed-attribute names, in RFC 7644 path syntax). Exactly one ofdata and attributes MUST be present where a payload is defined, never both.

The event URIs split into three classes, and the notice/full suffix encodes the payload choice:

Event URIMeaning
urn:ietf:params:scim:event:feed:adda resource joined a feed; the resource still exists, so this is not create
urn:ietf:params:scim:event:prov:create:{notice|full}provisioning create; full carries the data payload, notice carries only the attributes list; exactly one of the two MUST be present
urn:ietf:params:scim:event:prov:patch:{notice|full}the same pairing for PATCH changes
urn:ietf:params:scim:event:prov:put:{notice|full}the same pairing for PUT replacements
urn:ietf:params:scim:event:prov:deleteno payload; issuing it SHALL NOT be accompanied by feed:remove
urn:ietf:params:scim:event:prov:activate / prov:deactivateno payloads; meanings are agreed between publisher and receiver
urn:ietf:params:scim:event:misc:asyncrespasynchronous request completion; the payload mirrors one bulk-response operation, with the Section 3.12 error attributes on failure

Source: RFC 9967 Section 2 and the initial SCIM Event URIs registry contents (retrieved 2026-11-01); the registry is the authoritative row list.

The protocol update is the asynchronous request flow. A client sends POST, PUT, PATCH, or DELETE withPrefer: respond-async (RFC 7240); the SP returns either the normal response or 202 Accepted with an empty body, a Set-Txn header whose value MUST match the txn claim of the future completion event, Preference-Applied: respond-async, and a Location that retrieves that event. For asynchronous bulk requests, each operation in the originalOperations array gets its own completion event, with txn suffixed:<zero-based index> of the operation it completes; the bulkId value MUST NOT be used for this. The ServiceProviderConfig gains an OPTIONAL securityEvents block withasyncRequest (none, long, or request) and an informational eventUris list; absent block, no support. Discovery stays in the same document the 2015 spec established.

Appendix A defines the two usage modes that give the event model its deployment shapes:Domain-Based Replication, where one administrative owner replicates full state between systems that share authority (full-data events), and Coordinated Provisioning, where independent systems coordinate through notice events plus callback reads of the changed resource. The security section binds the modes to practice: TLS is REQUIRED for sensitive SETs, receivers MUST persist events before acknowledging (recovery depends on it), JWS signature verification is REQUIRED when the publisher is not communicating directly (which also protects through TLS-terminating proxies), and the async result URI MUST require authentication. High-churn groups get explicit guidance: prefer PATCH over PUT, use notice events with periodic GETs, and aggregate PATCHes, because a PUT of a 100k-member group floods every event payload.

05 · The extension-design pattern

Read together, the three RFCs teach a repeatable design pattern for extending SCIM without fragmenting it. Each capability is optional and discovered in the ServiceProviderConfig, never inferred; an absent attribute means the feature is unsupported, with no probing grammar. Servers keep control of defaults (RFC 9865's SP MAY force cursors, and its keep-index-default guidance for dual-mode servers). Registry rows, not document prose, carry the machine-readable identity of every new schema and event. The drafts on the drafts tracker follow the same shape: attribute pagination, tenancy, and agent governance all propose ServiceProviderConfig discovery blocks of their own.

Adoption has started, unevenly: UnboundID's scim2 6.1.0 and SCIM-SDK 1.35.0 both advertise RFC 9865 cursor pagination and RFC 9944 device management in their release notes as of 2026-11-01; RFC 9967 support had not shown up in those notes at retrieval time. For a protocol that sat still from 2015 to 2025, the presence of any implementation signal within months is the adoption story to watch.

06 · References

Normative - the three RFCs and what they build on:

Informative - registry, adoption, and context: