Changelog

This page records partner-visible changes: operations in the published API Reference, documented behaviour in the published guides, and insight-type semantics. Internal changes with no external effect are not listed here.

2026.09.09.1

  • Caliper ingest accepts SessionEvent with the Archived action: a Person actor delivers an inline SessionRecording object (proctored status, webcam usage, recording times, storage key, subject, extensions) for an existing session, and the platform applies the same session-metadata writes as POST /insights/1.0/sessions. The event never creates a session and never changes session start or end times. See Caliper Events Reference and Session Management. Non-breaking.

2026.09.08.2

  • Rostering users (GET /rostering/1.0/users, GET /rostering/1.0/users/{sourcedId}, and the role-scoped user lists): the agents array now contains only open agent relationships. Relationships the roster has ended (inactive, or carrying an end date) are excluded, matching the /users/{sourcedId}/agents and /users/{sourcedId}/linkedUsers endpoints. Breaking for integrators that read agents as the full relationship history.

2026.09.08.1

  • Webhooks: proctoring_enforcement.recorded now also fires for exited_mid_test (client-written when the student leaves the mid-test readiness screen without resuming). Filter on data.enforcementType. Analytics: proctoring_enforcement_actions.action_type includes that kind. Non-breaking.
  • Webhooks: proctoring_enforcement.recorded now also fires for blocked_mid_test (platform-minted when a CLIENT START fact carried a trusted READINESS_GATE mark) and unblocked_mid_test (client-written when the mid-test readiness dialog dismissed). Filter on data.enforcementType. Analytics: insight_events.enforcement_surface is READINESS_GATE when that mark was trusted, otherwise null. Non-breaking.
  • Store refunds: storefront purchases use an optional per-app refund window (default 7 days) set with set_app_refund_window; in-app refunds stay on the global 7-day window. Non-breaking.

2026.09.07.2

  • Breaking: IRI-only actor and edApp values that have no Caliper entity yet are defined from the matching OneRoster user or LTI application. If neither registry has a match, ingest rejects the event instead of creating a stub. Other entity references keep stub semantics. See General Concepts.

2026.09.07.1

  • Analytics schema: proctoring_enforcement_actions and insight_notifications withhold internal catalogue rule identities instead of dropping those rows. When the resolved type visibility is internal, insight_type and insight_group are null and the new rule_visibility column is internal. insight_notifications.insight_type is now nullable (zero current rows affected). Non-breaking for callers that already treated those identity columns as optional on enforcement actions.

2026.09.03.1

  • Store Discount Codes guide: documents POST /apps/v1/discount-codes/validate (Cognito client-credentials, same purchases.write scope as in-app purchases). Parent checkout remains POST /store/v1/discount-codes/validate with a parent session. Non-breaking.
  • Insights guide: insightGroup is required when the resulting type is not Journal. A Journal type may omit it (insightGroup: null). An update whose merged state is a non-Journal type without a group is refused. Previously the guide said a group was required on every new type. Non-breaking.

2026.09.01.1

  • New insight findings are no longer hidden by insights_config.is_visible or org insightTypeConfigOverrides.isVisible. Hide vs publish is rollout_state and org policy only. The override JSON key is still accepted and ignored. Non-breaking for readers; operators who hid a detector only via that boolean should use a SHADOW org policy.

2026.08.31.1

  • Insights guide and webhooks: new findings default to SHADOW when the session has no pinned rollout stage for that type. Remaining rolloutState nulls will be filled to SHADOW; until that fill, a null stage still passes the customer-read gate. New unpinned detections stay off the customer read API and insight.* events.

2026.08.28.2

  • Insight types can carry a minimum occurrence duration. Occurrences shorter than that minimum are stored as suppressed rows and are absent from the Insights API, webhooks, and coaching analytics views. Types with no minimum configured are unchanged. Non-breaking.

2026.08.27.2

  • Insights types IgnoringHelp and TopicShopping stop producing new detections in this release. GET /insights/1.0/types keeps both in the catalog with deprecated: true and sunsetAt: 2026-11-26T00:00:00.000Z; after that datetime they leave the catalog. Insights already recorded against either type remain readable. Non-breaking.

2026.08.27.1

  • Insights guide: customer reads of detections now also require insights_insight.outcome = raised. Segments whose context predicate failed (for example an academic-integrity signal on a standard session, or minutes outside an assessment window) are stored as suppressed rows and are absent from the Insights API, webhooks, and coaching analytics views. Non-breaking for callers that already consumed only raised detections; suppressed minutes no longer inflate waste or integrity totals.

2026.08.26.1

  • Insights API Reference: GET /insights/1.0/types now returns deprecated (boolean, always present) and sunsetAt (nullable RFC 3339 datetime) on each type. During a deprecation window the type stays in the catalog; after sunsetAt it leaves the catalog and stops producing new insights. Previously recorded insights remain readable. Non-breaking.

2026.08.24.1

  • Webhooks guide: org.config.updated is now in the event catalog. It fires when an organization's config row set is written through PUT /rostering/1.0/orgs/{sourcedId}/config (any key write). Payload: { orgId }. Subscription routing follows the standard org-scope rule. Non-breaking.

2026.08.17.1

  • Insights API Reference: GET /insights/1.0/insight-groups is now published. It returns the registered insight groups with family, membership rule, and a count of types visible to the caller in each group. Non-breaking.

2026.08.11.1

  • Insights API Reference: GET /insights/1.0/catalog has been removed from the published surface. It returned locale-keyed message bundles for catalog-managed proctoring insights and was consumed at session start. Breaking for integrators that called it directly.

2026.08.03.1

  • The insight types the guide used to list are marked deprecated: they are being retired and will stop being populated. Pull the current list from the type catalog. Breaking for integrators that hard-coded those slugs.