#### [Abblix\.SharedSignals\.MinimalApi](https://www.abblix.com/en/docs/api/abblix-sharedsignals-minimalapi 'index')
### [Abblix\.SharedSignals\.MinimalApi](https://www.abblix.com/en/docs/api/abblix-sharedsignals-minimalapi/Abblix.SharedSignals.MinimalApi 'Abblix\.SharedSignals\.MinimalApi')

## SharedSignalsEndpointRouteBuilderExtensions Class

Maps the Shared Signals endpoints as Minimal API route handlers: the whole transmitter
management surface in one call, its configuration document in another\. The handlers translate
transport to the host\-agnostic services and nothing else \- authentication is the host's
middleware, and the receiver identity is read per [SharedSignalsEndpointOptions](https://www.abblix.com/en/docs/api/abblix-sharedsignals-minimalapi/Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointOptions 'Abblix\.SharedSignals\.MinimalApi\.SharedSignalsEndpointOptions')\.

Push delivery is not here. RFC 8935 carries any Security Event Token, not this framework's in
particular, so its intake belongs to the package that owns the token - a receiver maps it with
`MapPushDeliveryEndpoint` from `Abblix.SecurityEvents.MinimalApi`.

```csharp
public static class SharedSignalsEndpointRouteBuilderExtensions
```

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

## SharedSignalsEndpointRouteBuilderExtensions\.MapSharedSignalsConfigurationDocument\(this IEndpointRouteBuilder\) Method {#Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointRouteBuilderExtensions.MapSharedSignalsConfigurationDocument(thisMicrosoft.AspNetCore.Routing.IEndpointRouteBuilder)}

Maps the transmitter's configuration document \(SSF 1\.0 Section 7\.2\) on its own: at
[ConfigurationDocumentRoute](https://www.abblix.com/en/docs/api/abblix-sharedsignals-minimalapi/Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointOptions#Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointOptions.ConfigurationDocumentRoute 'Abblix\.SharedSignals\.MinimalApi\.SharedSignalsEndpointOptions\.ConfigurationDocumentRoute'), or at the well\-known
address the issuer resolves to when that option is null\.

```csharp
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapSharedSignalsConfigurationDocument(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints);
```
#### Parameters

###### `endpoints` [Microsoft\.AspNetCore\.Routing\.IEndpointRouteBuilder](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.routing.iendpointroutebuilder 'Microsoft\.AspNetCore\.Routing\.IEndpointRouteBuilder') {#Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointRouteBuilderExtensions.MapSharedSignalsConfigurationDocument(thisMicrosoft.AspNetCore.Routing.IEndpointRouteBuilder).endpoints}

The route builder\.

#### Returns
[Microsoft\.AspNetCore\.Builder\.IEndpointConventionBuilder](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.builder.iendpointconventionbuilder 'Microsoft\.AspNetCore\.Builder\.IEndpointConventionBuilder')

### Remarks
[MapSharedSignalsTransmitterEndpoints\(this IEndpointRouteBuilder\)](https://www.abblix.com/en/docs/api/abblix-sharedsignals-minimalapi/Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointRouteBuilderExtensions#Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointRouteBuilderExtensions.MapSharedSignalsTransmitterEndpoints(thisMicrosoft.AspNetCore.Routing.IEndpointRouteBuilder) 'Abblix\.SharedSignals\.MinimalApi\.SharedSignalsEndpointRouteBuilderExtensions\.MapSharedSignalsTransmitterEndpoints\(this Microsoft\.AspNetCore\.Routing\.IEndpointRouteBuilder\)') calls this by default, so a plain host never
            needs it\. It exists for the deployment where the canonical address is answered by
            something in front of the application: a gateway or CDN serving a cached copy \(set
            [MapWellKnownConfiguration](https://www.abblix.com/en/docs/api/abblix-sharedsignals-minimalapi/Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointOptions#Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointOptions.MapWellKnownConfiguration 'Abblix\.SharedSignals\.MinimalApi\.SharedSignalsEndpointOptions\.MapWellKnownConfiguration') to false and do not call
            this\), or a reverse proxy rewriting paths, where the document must exist on an internal
            route the proxy maps the canonical address onto\. The document advertises
            [AdvertisedPrefix](https://www.abblix.com/en/docs/api/abblix-sharedsignals-minimalapi/Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointOptions#Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointOptions.AdvertisedPrefix 'Abblix\.SharedSignals\.MinimalApi\.SharedSignalsEndpointOptions\.AdvertisedPrefix') \- the prefix as the outside world
            reaches it\. The EXTERNAL address never moves: receivers derive it from the issuer, not
            from configuration, so the route option is deployment plumbing, not a protocol choice\.

## SharedSignalsEndpointRouteBuilderExtensions\.MapSharedSignalsTransmitterEndpoints\(this IEndpointRouteBuilder\) Method {#Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointRouteBuilderExtensions.MapSharedSignalsTransmitterEndpoints(thisMicrosoft.AspNetCore.Routing.IEndpointRouteBuilder)}

Maps the transmitter's endpoints: the Event Stream Management API under
[ManagementPrefix](https://www.abblix.com/en/docs/api/abblix-sharedsignals-minimalapi/Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointOptions#Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointOptions.ManagementPrefix 'Abblix\.SharedSignals\.MinimalApi\.SharedSignalsEndpointOptions\.ManagementPrefix'), poll delivery beside it, and the
configuration document at the well\-known address the issuer resolves to
\(SSF 1\.0 Section 7\.2\)\. Every route comes from [SharedSignalsEndpointOptions](https://www.abblix.com/en/docs/api/abblix-sharedsignals-minimalapi/Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointOptions 'Abblix\.SharedSignals\.MinimalApi\.SharedSignalsEndpointOptions'), so one
options object states the whole topology\.

```csharp
public static Microsoft.AspNetCore.Routing.RouteGroupBuilder MapSharedSignalsTransmitterEndpoints(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints);
```
#### Parameters

###### `endpoints` [Microsoft\.AspNetCore\.Routing\.IEndpointRouteBuilder](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.routing.iendpointroutebuilder 'Microsoft\.AspNetCore\.Routing\.IEndpointRouteBuilder') {#Abblix.SharedSignals.MinimalApi.SharedSignalsEndpointRouteBuilderExtensions.MapSharedSignalsTransmitterEndpoints(thisMicrosoft.AspNetCore.Routing.IEndpointRouteBuilder).endpoints}

The route builder\.

#### Returns
[Microsoft\.AspNetCore\.Routing\.RouteGroupBuilder](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.routing.routegroupbuilder 'Microsoft\.AspNetCore\.Routing\.RouteGroupBuilder')

### Remarks
The returned group carries the management and poll endpoints \- attach the host's
authorization to it\. The well\-known endpoint is deliberately mapped OUTSIDE the group:
discovery must answer before any receiver has credentials, so the group's authorization
does not cover it\.

A route the HOST adds to this group is not scope-checked, and that is worth knowing before
adding one. The filter is attached to the GROUP, so it is in that route's pipeline - but it
judges a route by the requirement the route declares, and only the routes mapped here declare
one. A route with none is let through. So a host route beside them is admitted for any caller the
host's own authorization admits, in a deployment where every neighbouring route answers 403 to
that same caller.

The scope requirement is deliberately not something a host can declare: making it so would put
the metadata type into this package's public surface for a need nobody has stated. The scopes
themselves are already public - `SsfScopes` carries their names and the profile's inclusion
rule - so a host that wants its route scoped reads the granted scopes and asks
`SsfScopes.Satisfies`, rather than needing a requirement this package would then have to
honour forever.
