Bielu.AspNetCore.ApiCatalog
2.0.0
Prefix Reserved
dotnet add package Bielu.AspNetCore.ApiCatalog --version 2.0.0
NuGet\Install-Package Bielu.AspNetCore.ApiCatalog -Version 2.0.0
<PackageReference Include="Bielu.AspNetCore.ApiCatalog" Version="2.0.0" />
<PackageVersion Include="Bielu.AspNetCore.ApiCatalog" Version="2.0.0" />
<PackageReference Include="Bielu.AspNetCore.ApiCatalog" />
paket add Bielu.AspNetCore.ApiCatalog --version 2.0.0
#r "nuget: Bielu.AspNetCore.ApiCatalog, 2.0.0"
#:package Bielu.AspNetCore.ApiCatalog@2.0.0
#addin nuget:?package=Bielu.AspNetCore.ApiCatalog&version=2.0.0
#tool nuget:?package=Bielu.AspNetCore.ApiCatalog&version=2.0.0
Bielu.AspNetCore.ApiCatalog
Serves an RFC 9727 API catalog at
/.well-known/api-catalog: one well-known URL listing every API description your app serves, so a
client, gateway or crawler can find them without knowing their URLs in advance.
The catalog is an RFC 9264 Linkset. Each document is a
service-desc link with its media type, discovered from the app's own endpoints:
- every document of
MapAsyncApi()(application/vnd.aai.asyncapi+json) - every document of
MapArazzo()(application/vnd.oai.workflows+json) - every document of
MapOpenApi()(application/vnd.oai.openapi+json)
Installation
dotnet add package Bielu.AspNetCore.ApiCatalog
Usage
builder.Services.AddOpenApi();
builder.Services.AddAsyncApi();
builder.Services.AddApiCatalog(options => options
.AddServiceDoc("/scalar", "API reference") // service-doc link
.AddItem("https://payments.example.com/.well-known/api-catalog")); // another API or catalog
var app = builder.Build();
app.MapOpenApi();
app.MapAsyncApi();
app.MapApiCatalog(); // GET and HEAD /.well-known/api-catalog
{
"linkset": [
{
"anchor": "https://localhost:5001/.well-known/api-catalog",
"item": [ { "href": "https://localhost:5001/" } ]
},
{
"anchor": "https://localhost:5001/",
"service-desc": [
{ "href": "https://localhost:5001/openapi/v1.json", "type": "application/vnd.oai.openapi+json", "title": "OpenAPI document 'v1'" },
{ "href": "https://localhost:5001/asyncapi/v1.json", "type": "application/vnd.aai.asyncapi+json", "title": "AsyncAPI document 'v1'" }
]
}
]
}
AddApiCatalog() is optional; call it only to change the defaults. If MapOpenApi() uses a
non-default route, set OpenApiRoutePattern to it, because OpenAPI's endpoint is recognized by its
route.
An API served from an endpoint rather than a document, such as an MCP server, is listed as an item
with WithApiCatalogItem(): app.MapMcp("/mcp").WithApiCatalogItem("MCP server");.
Documentation
Feedback & Contributing
Copyright (c) 2025 Arkadiusz Biel. Released under the MIT license. Bug reports and contributions are welcome at the GitHub repository.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Bielu.AspNetCore.ApiDescriptions (>= 2.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.0.0 | 65 | 10/25/2026 |
| 2.0.0-beta.20261025083222 | 53 | 10/25/2026 |
| 2.0.0-beta.20261025073559 | 47 | 10/25/2026 |
| 2.0.0-beta.20261024233532 | 50 | 10/24/2026 |
| 2.0.0-beta.20261024230848 | 60 | 10/24/2026 |
| 2.0.0-beta.20261024191358 | 57 | 10/24/2026 |
| 2.0.0-beta.20261024185247 | 53 | 10/24/2026 |
| 2.0.0-beta.20261024184446 | 54 | 10/24/2026 |
| 2.0.0-beta.20261024163851 | 58 | 10/24/2026 |
| 2.0.0-beta.20261024153849 | 58 | 10/24/2026 |
| 2.0.0-beta.20261024142609 | 52 | 10/24/2026 |