# Microsoft .NET > Microsoft .NET is a free, cross-platform, open-source developer platform. Its one public, callable > HTTP API is the NuGet Server API (V3) at https://api.nuget.org/v3 — anonymous for all reads, > API-key authenticated for publishing. The other .NET surfaces in this profile (the API Browser, > the dotnet CLI, ASP.NET Core, .NET Aspire) are documentation, tooling and frameworks rather than > callable web APIs. Generated by API Evangelist from apis.yml and this repository's artifacts; > Microsoft does not publish an llms.txt on any .NET host (probed 2026-08-29, all 404). ## Start here - [NuGet V3 service index](https://api.nuget.org/v3/index.json): The entry point. Do not hardcode resource URLs — read resources[] and match on @type. - [NuGet Server API overview](https://learn.microsoft.com/en-us/nuget/api/overview): The protocol specification. - [.NET documentation](https://learn.microsoft.com/en-us/dotnet/): Platform documentation root. - [.NET API Browser](https://learn.microsoft.com/en-us/dotnet/api/): Class-library reference across .NET 10, .NET Standard and .NET Framework. ## APIs - [NuGet Service Index API](openapi/microsoft-net-serviceindex-api-openapi.yml): getServiceIndex — GET /index.json. - [NuGet Search API](openapi/microsoft-net-search-api-openapi.yml): searchPackages — GET /query with q, skip, take, prerelease, semVerLevel, packageType. - [NuGet Registration API](openapi/microsoft-net-registration-api-openapi.yml): getRegistrationIndex, getRegistrationLeaf — package metadata. IDs must be lowercased. - [NuGet Package Content API](openapi/microsoft-net-packagecontent-api-openapi.yml): listPackageVersions, downloadPackage, downloadNuspec — the flat container. ## Agent surfaces - [MCP servers](mcp/microsoft-net-mcp.yml): Two first-party Microsoft servers. The Microsoft Learn Docs MCP server is REMOTE and anonymous at https://learn.microsoft.com/api/mcp (microsoft_docs_search, microsoft_code_sample_search, microsoft_docs_fetch). The NuGet MCP server is LOCAL-STDIO only — `dnx NuGet.Mcp.Server --yes`, requires a .NET 10 SDK on the machine first. - [Tool crosswalk](mcp/microsoft-net-tool-crosswalk.yml): The MCP and REST surfaces do not overlap; all 7 REST operations are rest_only. - [Agent skills](skills/_index.yml): Packaged operating instructions grounded in real operationIds. - No A2A agent card is served on any Microsoft .NET host (probed 2026-08-29). ## Contracts and conventions - [Authentication](authentication/microsoft-net-authentication.yml): X-NuGet-ApiKey header, write operations only. All reads are anonymous. - [Conventions](conventions/microsoft-net-conventions.yml): Service-index discovery, lowercased IDs, offset pagination, two-layer versioning, reversibility. - [Errors](errors/microsoft-net-problem-types.yml): Not RFC 9457. Two envelopes — a V3 JSON {statusCode,message} and a V2 OData XML m:error. - [Rate limits](rate-limits/microsoft-net-rate-limits.yml): Published per-endpoint IP and API-key limits. No RateLimit-* response headers; the wait is prose inside the body. - [Lifecycle](lifecycle/microsoft-net-lifecycle.yml): Annual November majors, LTS 3 years / STS 2 years. V2 OData custom queries deprecated 2021-03-09 (HTTP 400, code NuGet.V2.Deprecated). - [Conformance](conformance/microsoft-net-conformance.yml): OData v2 ($metadata CSDL published), NuGet V3 protocol, SemVer 2.0.0, RFC 9116. - [Data model](data-model/microsoft-net-data-model.yml): Hypermedia-linked; the natural key is (id, version). ## Before you write - nuget.org does NOT support permanent package deletion. A push is effectively permanent. - DELETE on the publish endpoint is an UNLIST, not a delete. It is reversible with POST on the same URL (relist). - Pushing a package ID and version that already exists returns HTTP 409. There is no idempotency key. - Rehearse against the separate pre-production gallery: https://apiint.nugettest.org/v3/index.json (see sandbox/microsoft-net-sandbox.yml). Production and test API keys look identical — the --source argument is the entire safety boundary. ## Packages - [First-party packages](packages/microsoft-net-packages.yml): 21 first-party NuGet packages with versions and publish dates. No first-party client library exists on npm, PyPI, RubyGems, Packagist, crates.io, Maven Central or pkg.go.dev. ## Operations - [Status](https://status.nuget.org/) - [Release notes](https://github.com/dotnet/core/blob/main/release-notes/README.md) and the machine-readable [releases index](https://raw.githubusercontent.com/dotnet/core/main/release-notes/releases-index.json) - [Support policy](https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core) - [Breaking changes](https://learn.microsoft.com/en-us/dotnet/core/compatibility/) - [Roadmap](https://github.com/dotnet/core/blob/main/roadmap.md) - [Security disclosure](https://www.microsoft.com/.well-known/security.txt) via MSRC - [GitHub organization](https://github.com/dotnet) - [Blog](https://devblogs.microsoft.com/dotnet/)