#### [Abblix\.SecurityEvents\.CAEP](https://www.abblix.com/en/docs/api/abblix-securityevents-caep 'index')
### [Abblix\.SecurityEvents\.CAEP](https://www.abblix.com/en/docs/api/abblix-securityevents-caep/Abblix.SecurityEvents.CAEP 'Abblix\.SecurityEvents\.CAEP')

## CaepEventPayload Class

The claims every CAEP event may carry \(CAEP 1\.0 Section 2\): when it happened, who set it in
motion, and why \- the latter twice, because the administrator's log line and the sentence an
end user should read are different texts in different languages\.

```csharp
public abstract record CaepEventPayload : Abblix.SecurityEvents.Events.IEventPayload, System.IEquatable<Abblix.SecurityEvents.CAEP.CaepEventPayload>
```

Inheritance [System\.Object](https://learn.microsoft.com/en-us/dotnet/api/system.object 'System\.Object') → CaepEventPayload

Derived  
↳ [AssuranceLevelChangePayload](https://www.abblix.com/en/docs/api/abblix-securityevents-caep/Abblix.SecurityEvents.CAEP.AssuranceLevelChangePayload 'Abblix\.SecurityEvents\.CAEP\.AssuranceLevelChangePayload')  
↳ [CredentialChangePayload](https://www.abblix.com/en/docs/api/abblix-securityevents-caep/Abblix.SecurityEvents.CAEP.CredentialChangePayload 'Abblix\.SecurityEvents\.CAEP\.CredentialChangePayload')  
↳ [DeviceComplianceChangePayload](https://www.abblix.com/en/docs/api/abblix-securityevents-caep/Abblix.SecurityEvents.CAEP.DeviceComplianceChangePayload 'Abblix\.SecurityEvents\.CAEP\.DeviceComplianceChangePayload')  
↳ [RiskLevelChangePayload](https://www.abblix.com/en/docs/api/abblix-securityevents-caep/Abblix.SecurityEvents.CAEP.RiskLevelChangePayload 'Abblix\.SecurityEvents\.CAEP\.RiskLevelChangePayload')  
↳ [SessionEstablishedPayload](https://www.abblix.com/en/docs/api/abblix-securityevents-caep/Abblix.SecurityEvents.CAEP.SessionEstablishedPayload 'Abblix\.SecurityEvents\.CAEP\.SessionEstablishedPayload')  
↳ [SessionPresentedPayload](https://www.abblix.com/en/docs/api/abblix-securityevents-caep/Abblix.SecurityEvents.CAEP.SessionPresentedPayload 'Abblix\.SecurityEvents\.CAEP\.SessionPresentedPayload')  
↳ [SessionRevokedPayload](https://www.abblix.com/en/docs/api/abblix-securityevents-caep/Abblix.SecurityEvents.CAEP.SessionRevokedPayload 'Abblix\.SecurityEvents\.CAEP\.SessionRevokedPayload')  
↳ [TokenClaimsChangePayload](https://www.abblix.com/en/docs/api/abblix-securityevents-caep/Abblix.SecurityEvents.CAEP.TokenClaimsChangePayload 'Abblix\.SecurityEvents\.CAEP\.TokenClaimsChangePayload')

Implements [IEventPayload](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Events.IEventPayload 'Abblix\.SecurityEvents\.Events\.IEventPayload'), [System\.IEquatable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.iequatable-1 'System\.IEquatable\`1')[CaepEventPayload](https://www.abblix.com/en/docs/api/abblix-securityevents-caep/Abblix.SecurityEvents.CAEP.CaepEventPayload 'Abblix\.SecurityEvents\.CAEP\.CaepEventPayload')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.iequatable-1 'System\.IEquatable\`1')
### Properties

## CaepEventPayload\.EventTimestamp Property {#Abblix.SecurityEvents.CAEP.CaepEventPayload.EventTimestamp}

OPTIONAL\. When the event described by the SET occurred \- each event type binds this to
its own moment, such as when the session was revoked or the credential changed
\(CAEP 1\.0 Sections 2, 3\)\. Travels as unix seconds\.

```csharp
public System.Nullable<System.DateTimeOffset> EventTimestamp { get; init; }
```

#### Property Value
[System\.Nullable&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.nullable-1 'System\.Nullable\`1')[System\.DateTimeOffset](https://learn.microsoft.com/en-us/dotnet/api/system.datetimeoffset 'System\.DateTimeOffset')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.nullable-1 'System\.Nullable\`1')

## CaepEventPayload\.InitiatingEntity Property {#Abblix.SecurityEvents.CAEP.CaepEventPayload.InitiatingEntity}

OPTIONAL\. The entity that invoked the event, one of
[InitiatingEntities](https://www.abblix.com/en/docs/api/abblix-securityevents-caep/Abblix.SecurityEvents.CAEP.CaepEventPayload.InitiatingEntities 'Abblix\.SecurityEvents\.CAEP\.CaepEventPayload\.InitiatingEntities') \(CAEP 1\.0 Section 2\)\.

```csharp
public string? InitiatingEntity { get; init; }
```

#### Property Value
[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')

## CaepEventPayload\.ReasonAdmin Property {#Abblix.SecurityEvents.CAEP.CaepEventPayload.ReasonAdmin}

OPTIONAL\. The administrative message for logging and auditing, keyed by BCP 47 language
tag \(CAEP 1\.0 Section 2\)\.

```csharp
public System.Collections.Generic.IReadOnlyDictionary<string,string>? ReasonAdmin { get; init; }
```

#### Property Value
[System\.Collections\.Generic\.IReadOnlyDictionary&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlydictionary-2 'System\.Collections\.Generic\.IReadOnlyDictionary\`2')[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')[,](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlydictionary-2 'System\.Collections\.Generic\.IReadOnlyDictionary\`2')[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlydictionary-2 'System\.Collections\.Generic\.IReadOnlyDictionary\`2')

### Remarks
Optional to CAEP 1\.0, and required of a TRANSMITTER by the CAEP Interoperability Profile 1\.0: each
of the three use cases in its Section 3 demands a non\-empty object here\. The property stays
nullable because the base specification permits its absence \- Section 2 makes the common claims
optional and Section 3\.1\.1 defines no event\-specific claim for `session-revoked` \- so an
empty payload is well\-formed and a receiver must be able to hold one\. A deployment claiming the
profile registers [CaepInteropProfilePolicy](https://www.abblix.com/en/docs/api/abblix-securityevents-caep/Abblix.SecurityEvents.CAEP.CaepInteropProfilePolicy 'Abblix\.SecurityEvents\.CAEP\.CaepInteropProfilePolicy'), which refuses the event rather than the
type\.

One rule here is the base specification's rather than the profile's: "The object MUST contain one
or more key/value pairs" (CAEP 1.0 Section 2). An empty object is wrong wherever it appears, with
or without the profile.

## CaepEventPayload\.ReasonUser Property {#Abblix.SecurityEvents.CAEP.CaepEventPayload.ReasonUser}

OPTIONAL\. The message for display to an end user, keyed by BCP 47 language tag
\(CAEP 1\.0 Section 2\)\.

```csharp
public System.Collections.Generic.IReadOnlyDictionary<string,string>? ReasonUser { get; init; }
```

#### Property Value
[System\.Collections\.Generic\.IReadOnlyDictionary&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlydictionary-2 'System\.Collections\.Generic\.IReadOnlyDictionary\`2')[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')[,](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlydictionary-2 'System\.Collections\.Generic\.IReadOnlyDictionary\`2')[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.ireadonlydictionary-2 'System\.Collections\.Generic\.IReadOnlyDictionary\`2')
