#### [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')

## CaepInteropProfilePolicy Class

What the CAEP Interoperability Profile 1\.0 demands of a TRANSMITTER's payload, on top of what CAEP 1\.0
permits: each of its three use cases requires `reason_admin` to carry a non\-empty object\.

```csharp
public sealed class CaepInteropProfilePolicy : Abblix.SecurityEvents.Events.IEventPayloadPolicy
```

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

Implements [IEventPayloadPolicy](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Events.IEventPayloadPolicy 'Abblix\.SecurityEvents\.Events\.IEventPayloadPolicy')

### Remarks
Section 3\.1 says "The reason\_admin field of the event MUST be populated with a non\-empty object";
Sections 3\.2 and 3\.3 name the actor outright, "Transmitters MUST populate this value with a non\-empty
object"\. The obligation is the transmitter's alone \- neither document asks a receiver to reject an
event without it\.

CAEP 1.0 leaves the member optional - Section 2, "The following claims are optional unless otherwise
specified in the event definition" - and defines no event-specific claim for `session-revoked`
(Section 3.1.1), so an empty payload is well-formed under the base specification and the property stays
nullable. What CAEP 1.0 does say about the member once it appears is "The object MUST contain one or
more key/value pairs", so an EMPTY object is outside the base specification too and this policy is not
the only thing that would be wrong to emit it.

Registering it is how a deployment claims the profile. A host that does not is emitting CAEP 1.0
events, which is a smaller claim and a valid one.
### Constructors

## CaepInteropProfilePolicy\(\) Constructor {#Abblix.SecurityEvents.CAEP.CaepInteropProfilePolicy.CaepInteropProfilePolicy()}

Claims all three use cases\.

```csharp
public CaepInteropProfilePolicy();
```

### Remarks
Spelled out rather than left to the parameter's default, because a container cannot satisfy a
`params` array: without this, the natural registration
`AddSingleton<IEventPayloadPolicy, CaepInteropProfilePolicy>()` compiles and then fails
when the policy is first resolved\.

## CaepInteropProfilePolicy\(string\[\]\) Constructor {#Abblix.SecurityEvents.CAEP.CaepInteropProfilePolicy.CaepInteropProfilePolicy(string[])}

What the CAEP Interoperability Profile 1\.0 demands of a TRANSMITTER's payload, on top of what CAEP 1\.0
permits: each of its three use cases requires `reason_admin` to carry a non\-empty object\.

```csharp
public CaepInteropProfilePolicy(params string[] claimedUseCases);
```
#### Parameters

###### `claimedUseCases` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')[\[\]](https://learn.microsoft.com/en-us/dotnet/api/system.array 'System\.Array') {#Abblix.SecurityEvents.CAEP.CaepInteropProfilePolicy.CaepInteropProfilePolicy(string[]).claimedUseCases}

The use cases this deployment claims, by event type; empty claims all three\. The profile's Section 1
says "Support for all use cases listed herein is not required in order to be considered compliant with
this profile\. An implementation can choose specific use cases to support", so a deployment conforming
through one of them may still emit the others as plain CAEP 1\.0 events\. Naming the claimed ones is how
it keeps that freedom, and the default is deliberately the strict reading: a transmitter that has not
thought about it is better refused than quietly non\-conformant\.

### Remarks
Section 3\.1 says "The reason\_admin field of the event MUST be populated with a non\-empty object";
Sections 3\.2 and 3\.3 name the actor outright, "Transmitters MUST populate this value with a non\-empty
object"\. The obligation is the transmitter's alone \- neither document asks a receiver to reject an
event without it\.

CAEP 1.0 leaves the member optional - Section 2, "The following claims are optional unless otherwise
specified in the event definition" - and defines no event-specific claim for `session-revoked`
(Section 3.1.1), so an empty payload is well-formed under the base specification and the property stays
nullable. What CAEP 1.0 does say about the member once it appears is "The object MUST contain one or
more key/value pairs", so an EMPTY object is outside the base specification too and this policy is not
the only thing that would be wrong to emit it.

Registering it is how a deployment claims the profile. A host that does not is emitting CAEP 1.0
events, which is a smaller claim and a valid one.
### Methods

## CaepInteropProfilePolicy\.RefusalOf\(string, IEventPayload\) Method {#Abblix.SecurityEvents.CAEP.CaepInteropProfilePolicy.RefusalOf(string,Abblix.SecurityEvents.Events.IEventPayload)}

Why this deployment will not emit the event, or null when it will\.

```csharp
public string? RefusalOf(string eventType, Abblix.SecurityEvents.Events.IEventPayload? payload);
```
#### Parameters

###### `eventType` [System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String') {#Abblix.SecurityEvents.CAEP.CaepInteropProfilePolicy.RefusalOf(string,Abblix.SecurityEvents.Events.IEventPayload).eventType}

The event type URI the payload is carried under\.

###### `payload` [IEventPayload](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Events.IEventPayload 'Abblix\.SecurityEvents\.Events\.IEventPayload') {#Abblix.SecurityEvents.CAEP.CaepInteropProfilePolicy.RefusalOf(string,Abblix.SecurityEvents.Events.IEventPayload).payload}

The payload the application built; null for an event that carries none\.

Implements [RefusalOf\(string, IEventPayload\)](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Events.IEventPayloadPolicy#Abblix.SecurityEvents.Events.IEventPayloadPolicy.RefusalOf(string,Abblix.SecurityEvents.Events.IEventPayload) 'Abblix\.SecurityEvents\.Events\.IEventPayloadPolicy\.RefusalOf\(System\.String,Abblix\.SecurityEvents\.Events\.IEventPayload\)')

#### Returns
[System\.String](https://learn.microsoft.com/en-us/dotnet/api/system.string 'System\.String')  
An operator\-facing sentence naming what is missing, or null to let the event go\.
