{"id":53804,"date":"2025-09-11T17:12:23","date_gmt":"2025-09-11T07:12:23","guid":{"rendered":"https:\/\/www.cloudproinc.com.au\/?p=53804"},"modified":"2025-09-11T17:12:25","modified_gmt":"2025-09-11T07:12:25","slug":"add-openapi-to-net-minimal-apis-and-generate-docs","status":"publish","type":"post","link":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/","title":{"rendered":"Add OpenAPI to .NET Minimal APIs and Generate Docs"},"content":{"rendered":"\n<p>In this blog post Add OpenAPI to .NET Minimal APIs and Generate Docs the Right Way we will walk through what OpenAPI is, how it pairs beautifully with .NET Minimal APIs, and the practical steps to produce clean, accurate, and automated API documentation.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>OpenAPI is the industry-standard way to describe HTTP APIs. With it, your API gains a living contract that developers and tools can read, test against, and generate clients from. Minimal APIs in .NET make building lightweight services fast; OpenAPI turns them into discoverable, easy-to-consume products. In Add OpenAPI to <a href=\"https:\/\/www.cloudproinc.com.au\/index.php\/category\/net\/\">.NET<\/a> Minimal APIs and Generate Docs the Right Way we\u2019ll start at a high level, then move into concrete steps you can copy into your projects today.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-is-openapi-and-why-it-matters\">What is OpenAPI and why it matters<\/h2>\n\n\n\n<p>OpenAPI (formerly Swagger) is a language-agnostic specification for describing RESTful APIs. It defines your endpoints, inputs, outputs, errors, and security in a single source of truth. From that, teams can:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Render a friendly, interactive UI for developers.<\/li>\n\n\n\n<li>Generate client SDKs for C#, TypeScript, Java, and more.<\/li>\n\n\n\n<li>Automate contract testing and API governance.<\/li>\n\n\n\n<li>Publish stable, versioned documents for partners and auditors.<\/li>\n<\/ul>\n\n\n\n<p>.NET Minimal APIs embrace convention over ceremony: a few lines to map routes, return results, and you\u2019re shipping. Add the built-in Endpoint API Explorer and an OpenAPI generator (commonly Swashbuckle), and you get up-to-date docs with almost no effort.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-we-ll-build\">What we\u2019ll build<\/h2>\n\n\n\n<p>We\u2019ll add OpenAPI to a Minimal API, customize metadata, secure endpoints, version docs, and generate a static OpenAPI file for CI. You can apply this pattern to new or existing projects.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-prerequisites\">Prerequisites<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>.NET 7 or .NET 8 SDK<\/li>\n\n\n\n<li>A Minimal API project (e.g., created with <code>dotnet new web<\/code> or any existing service)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-step-1-add-the-openapi-packages\">Step 1: Add the OpenAPI packages<\/h2>\n\n\n\n<p>Install the packages that power OpenAPI for Minimal APIs.<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-3f7d179f3b88f7c40f25d5f0167d2fc0\"><code>dotnet add package Swashbuckle.AspNetCore\ndotnet add package Microsoft.AspNetCore.OpenApi<\/code><\/pre>\n\n\n\n<p>Swashbuckle generates the OpenAPI spec and hosts Swagger UI. The <code>Microsoft.AspNetCore.OpenApi<\/code> package provides helpers like <code>WithOpenApi<\/code> to enrich operations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-step-2-wire-up-openapi-in-program-cs\">Step 2: Wire up OpenAPI in Program.cs<\/h2>\n\n\n\n<p>Add the Endpoint API Explorer and Swagger services, then enable middleware. Here\u2019s a compact example with a sample Todo endpoint.<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-1ef2ff56363ada55ae4fb511f090cb2a\"><code>using System.Reflection;\nusing Microsoft.AspNetCore.Authentication.JwtBearer;\nusing Microsoft.OpenApi.Models;\n\nvar builder = WebApplication.CreateBuilder(args);\n\n\/\/ 1) Discover endpoints and generate OpenAPI\nbuilder.Services.AddEndpointsApiExplorer();\nbuilder.Services.AddSwaggerGen(c =&gt;\n{\n    c.SwaggerDoc(\"v1\", new OpenApiInfo\n    {\n        Title = \"Todo API\",\n        Version = \"v1\",\n        Description = \"A minimal API for managing todos\",\n        Contact = new OpenApiContact\n        {\n            Name = \"CloudPro Inc\",\n            Url = new Uri(\"https:\/\/cloudproinc.com.au\")\n        }\n    });\n});\n\nvar app = builder.Build();\n\n\/\/ 2) Enable Swagger in dev (or behind a feature flag)\nif (app.Environment.IsDevelopment())\n{\n    app.UseSwagger();\n    app.UseSwaggerUI(options =&gt;\n    {\n        options.SwaggerEndpoint(\"\/swagger\/v1\/swagger.json\", \"Todo API v1\");\n        options.DocumentTitle = \"Todo API Docs\";\n    });\n}\n\n\/\/ 3) Sample endpoint\napp.MapGet(\"\/todos\/{id}\", (int id) =&gt;\n{\n    var todo = new Todo(id, \"Write blog post\", false);\n    return Results.Ok(todo);\n})\n.WithTags(\"Todos\")\n.WithOpenApi(op =&gt;\n{\n    op.Summary = \"Get a single todo\";\n    op.Description = \"Returns a todo by its ID.\";\n    return op;\n});\n\napp.Run();\n\nrecord Todo(int Id, string Title, bool IsDone);\n<\/code><\/pre>\n\n\n\n<p>Run the app and navigate to <code>\/swagger<\/code>. You should see an interactive UI and a machine-readable spec at <code>\/swagger\/v1\/swagger.json<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-step-3-enrich-your-documentation\">Step 3: Enrich your documentation<\/h2>\n\n\n\n<p>Good docs are more than endpoints\u2014they explain intent. Minimal APIs let you annotate operations without controllers or attributes.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tags<\/strong> group related endpoints in the UI (<code>.WithTags(\"Todos\")<\/code>).<\/li>\n\n\n\n<li><strong>Summaries and descriptions<\/strong> clarify behavior (<code>.WithOpenApi(op => {{...}})<\/code>).<\/li>\n\n\n\n<li><strong>Parameter hints<\/strong> improve discoverability (<code>op.Parameters[i].Description<\/code>).<\/li>\n<\/ul>\n\n\n\n<p>Example of a POST endpoint with richer metadata:<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-3473e7e1bdd6df9efd8321f3a88d00c8\"><code>app.MapPost(\"\/todos\", (Todo todo) =&gt;\n{\n    \/\/ Normally you would save to a database\n    return Results.Created($\"\/todos\/{todo.Id}\", todo);\n})\n.WithTags(\"Todos\")\n.WithOpenApi(op =&gt;\n{\n    op.Summary = \"Create a new todo\";\n    op.Description = \"Creates a todo item and returns it with its new URI.\";\n    \/\/ Describe the request body\n    if (op.RequestBody != null)\n    {\n        var content = op.RequestBody.Content&#91;\"application\/json\"];\n        content.Example = System.Text.Json.JsonDocument.Parse(\n            \"{ \\\"id\\\": 123, \\\"title\\\": \\\"Write docs\\\", \\\"isDone\\\": false }\").RootElement;\n    }\n    return op;\n});\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-use-xml-comments-for-type-and-field-documentation\">Use XML comments for type and field documentation<\/h2>\n\n\n\n<p>XML comments let you document record and DTO properties once and reuse those descriptions in OpenAPI.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Enable XML docs in your project file:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-495143f381adecc3f5c297268a203aee\"><code>&lt;PropertyGroup&gt;\n  &lt;GenerateDocumentationFile&gt;true&lt;\/GenerateDocumentationFile&gt;\n  &lt;NoWarn&gt;$(NoWarn);1591&lt;\/NoWarn&gt; &lt;!-- optional: ignore missing XML warnings --&gt;\n&lt;\/PropertyGroup&gt;\n<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Tell SwaggerGen to include them:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-bec8d06133da54e2479fd6b959c4d946\"><code>builder.Services.AddSwaggerGen(c =&gt;\n{\n    \/\/ ... your SwaggerDoc config\n    var xml = $\"{Assembly.GetExecutingAssembly().GetName().Name}.xml\";\n    var xmlPath = Path.Combine(AppContext.BaseDirectory, xml);\n    c.IncludeXmlComments(xmlPath, includeControllerXmlComments: true);\n});\n<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Add comments to your DTOs:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-5548152f2aaecc940b74c247d193a7f1\"><code>\/\/\/ &lt;summary&gt;Represents a to-do item.&lt;\/summary&gt;\n\/\/\/ &lt;param name=\"Id\"&gt;Unique identifier.&lt;\/param&gt;\n\/\/\/ &lt;param name=\"Title\"&gt;Human-friendly description of the task.&lt;\/param&gt;\n\/\/\/ &lt;param name=\"IsDone\"&gt;Whether the task is completed.&lt;\/param&gt;\npublic record Todo(int Id, string Title, bool IsDone);\n<\/code><\/pre>\n\n\n\n<p>Rebuild and refresh Swagger UI\u2014your types will now carry these descriptions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-version-and-group-your-api\">Version and group your API<\/h2>\n\n\n\n<p>It\u2019s common to ship multiple versions or group endpoints by domain. Minimal APIs support grouping and Swashbuckle can emit separate documents per group.<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-ec64bfe5d568c0e0642793a076b77908\"><code>\/\/ Register multiple docs\nbuilder.Services.AddSwaggerGen(c =&gt;\n{\n    c.SwaggerDoc(\"v1\", new OpenApiInfo { Title = \"Todo API\", Version = \"v1\" });\n    c.SwaggerDoc(\"v2\", new OpenApiInfo { Title = \"Todo API\", Version = \"v2\" });\n});\n\nvar app = builder.Build();\n\n\/\/ Versioned route groups\nvar v1 = app.MapGroup(\"\/v1\").WithGroupName(\"v1\").WithTags(\"Todos\");\nvar v2 = app.MapGroup(\"\/v2\").WithGroupName(\"v2\").WithTags(\"Todos\");\n\nv1.MapGet(\"\/todos\", () =&gt; Results.Ok(new&#91;] { new Todo(1, \"v1 task\", false) }))\n  .WithOpenApi(op =&gt; { op.Summary = \"List todos (v1)\"; return op; });\n\nv2.MapGet(\"\/todos\", () =&gt; Results.Ok(new&#91;] { new Todo(1, \"v2 task\", true) }))\n  .WithOpenApi(op =&gt; { op.Summary = \"List todos (v2)\"; return op; });\n\nif (app.Environment.IsDevelopment())\n{\n    app.UseSwagger();\n    app.UseSwaggerUI(options =&gt;\n    {\n        options.SwaggerEndpoint(\"\/swagger\/v1\/swagger.json\", \"Todo API v1\");\n        options.SwaggerEndpoint(\"\/swagger\/v2\/swagger.json\", \"Todo API v2\");\n    });\n}\n<\/code><\/pre>\n\n\n\n<p>This yields separate, navigable docs for each version. For enterprise-grade versioning semantics, consider the <em>ASP.NET API Versioning<\/em> library, but route groups are often enough for Minimal APIs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-document-security-and-protect-endpoints\">Document security and protect endpoints<\/h2>\n\n\n\n<p>Secure APIs should communicate how to authenticate. Add a Bearer (JWT) scheme and require it on protected routes.<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-1db2b697c193095632b8e25193f55c4d\"><code>using Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Authentication.JwtBearer;\n\nbuilder.Services\n    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)\n    .AddJwtBearer(); \/\/ Configure issuer, audience, keys as needed\n\nbuilder.Services.AddAuthorization();\n\nbuilder.Services.AddSwaggerGen(c =&gt;\n{\n    c.AddSecurityDefinition(\"Bearer\", new OpenApiSecurityScheme\n    {\n        Description = \"JWT Authorization using the Bearer scheme. Example: Bearer {token}\",\n        Name = \"Authorization\",\n        In = ParameterLocation.Header,\n        Type = SecuritySchemeType.Http,\n        Scheme = \"bearer\",\n        BearerFormat = \"JWT\"\n    });\n\n    c.AddSecurityRequirement(new OpenApiSecurityRequirement\n    {\n        {\n            new OpenApiSecurityScheme\n            {\n                Reference = new OpenApiReference\n                {\n                    Type = ReferenceType.SecurityScheme,\n                    Id = \"Bearer\"\n                }\n            }, new string&#91;] {}\n        }\n    });\n});\n\nvar app = builder.Build();\napp.UseAuthentication();\napp.UseAuthorization();\n\napp.MapGet(\"\/me\", () =&gt; Results.Ok(new { Name = \"Ada\" }))\n   .RequireAuthorization()\n   .WithOpenApi(op =&gt; { op.Summary = \"Get the current user\"; return op; });\n<\/code><\/pre>\n\n\n\n<p>Swagger UI now shows a lock icon and an Authorize button. Enter a valid JWT once and try secured endpoints interactively.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-generate-static-openapi-documents-for-ci-cd\">Generate static OpenAPI documents for CI\/CD<\/h2>\n\n\n\n<p>Interactive docs are great, but most teams also need a static, versioned OpenAPI file for reviews, client generation, and publication. Use the Swashbuckle CLI to produce one during builds.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Install the tool (once per machine\/runner):<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-aeed94338414dfa364430fef0b725405\"><code>dotnet tool install --global Swashbuckle.AspNetCore.Cli<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Build and export the spec:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-8e650fe46118cf3e83e00c49761938ce\"><code>dotnet build -c Release\nswagger tofile \\\n  --output .\/openapi\/v1.json \\\n  .\/bin\/Release\/net8.0\/YourApi.dll v1<\/code><\/pre>\n\n\n\n<p>This writes a clean OpenAPI JSON file without hosting your app. Commit it, publish it as a pipeline artifact, or push it to an internal developer portal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-generate-typed-clients-optional-but-powerful\">Generate typed clients (optional but powerful)<\/h2>\n\n\n\n<p>Once you have OpenAPI, you can generate clients to reduce boilerplate and runtime errors. For example, with NSwag:<\/p>\n\n\n\n<pre class=\"wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-da6aad598a9155873f9a8e1ff0ee56a3\"><code>dotnet tool install --global NSwag.ConsoleCore\nnswag openapi2csclient \/input:.\/openapi\/v1.json \/output:.\/Clients\/TodoClient.cs \/namespace:Todo.Client<\/code><\/pre>\n\n\n\n<p>Distribute the generated client alongside your API package or include it in a shared SDK repository.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-troubleshooting-and-tips\">Troubleshooting and tips<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If the UI shows no endpoints, ensure <code>AddEndpointsApiExplorer<\/code> is registered before <code>Build()<\/code> and that you are calling <code>UseSwagger()<\/code>.<\/li>\n\n\n\n<li>Keep <code>UseSwagger()<\/code> enabled only in safe environments, or behind a feature flag, if your docs reveal sensitive shapes.<\/li>\n\n\n\n<li>Prefer explicit return types and consistent status codes; your docs will be clearer and client generation more reliable.<\/li>\n\n\n\n<li>When introducing breaking changes, publish both versions (v1 and v2) and provide a migration guide.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-a-quick-quality-checklist\">A quick quality checklist<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Title, version, and contact info are set in <code>SwaggerDoc<\/code>.<\/li>\n\n\n\n<li>Endpoints grouped with <code>WithTags<\/code> and <code>WithGroupName<\/code>.<\/li>\n\n\n\n<li>Operation summaries and descriptions added with <code>WithOpenApi<\/code>.<\/li>\n\n\n\n<li>XML comments enabled and included for model documentation.<\/li>\n\n\n\n<li>Security scheme defined and enforced where needed.<\/li>\n\n\n\n<li>Static OpenAPI file produced in CI for each release.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-wrap-up\">Wrap-up<\/h2>\n\n\n\n<p>OpenAPI turns your Minimal API into a product: discoverable, testable, and easy to integrate. With a few lines of code, you get interactive docs, strong contracts, and a path to automated client generation. Start small\u2014add <code>AddEndpointsApiExplorer<\/code> and <code>AddSwaggerGen<\/code>\u2014then iterate with summaries, versioning, and security until your documentation reflects the professionalism of your API. Your developers, partners, and future self will thank you.<\/p>\n\n\n\n<ul class=\"wp-block-yoast-seo-related-links yoast-seo-related-links\">\n<li><a href=\"https:\/\/www.cloudproinc.com.au\/index.php\/2024\/09\/13\/effortless-web-app-deployment-with-azure-cli\/\">Effortless Web App Deployment with Azure CLI<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/08\/31\/extracting-structured-data-with-openai\/\">Extracting Structured Data with OpenAI<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/08\/keep-net-app-running-in-docker\/\">Keep .NET App Running in Docker<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.cloudproinc.com.au\/index.php\/2024\/07\/23\/how-to-use-microsoft-graph-security-api\/\">How to Use Microsoft Graph Security API<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.cloudproinc.com.au\/index.php\/2024\/10\/07\/generate-dall-e-images-with-net-c-console-application\/\">Generate DALL-E Images with .NET C# Console Application<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Add OpenAPI to .NET Minimal APIs, customize and secure your docs, and generate shareable contracts in CI with practical, production-ready steps.<\/p>\n","protected":false},"author":1,"featured_media":53806,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_focuskw":"Add OpenAPI to .NET Minimal APIs and Generate Docs","_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"Learn how to add OpenAPI to .NET Minimal APIs and generate docs efficiently. Enhance your API documentation process today.","_yoast_wpseo_opengraph-title":"","_yoast_wpseo_opengraph-description":"","_yoast_wpseo_twitter-title":"","_yoast_wpseo_twitter-description":"","_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[27,13,86],"tags":[],"class_list":["post-53804","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net","category-blog","category-openapi"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Add OpenAPI to .NET Minimal APIs and Generate Docs - CPI Consulting<\/title>\n<meta name=\"description\" content=\"Learn how to add OpenAPI to .NET Minimal APIs and generate docs efficiently. Enhance your API documentation process today.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Add OpenAPI to .NET Minimal APIs and Generate Docs\" \/>\n<meta property=\"og:description\" content=\"Learn how to add OpenAPI to .NET Minimal APIs and generate docs efficiently. Enhance your API documentation process today.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/\" \/>\n<meta property=\"og:site_name\" content=\"CPI Consulting\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-11T07:12:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-11T07:12:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.cloudproinc.com.au\/wp-content\/uploads\/2025\/09\/add-openapi-to-net-minimal-apis-and-generate-docs-the-right-way.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"CPI Staff\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"CPI Staff\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/09\\\/11\\\/add-openapi-to-net-minimal-apis-and-generate-docs\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/09\\\/11\\\/add-openapi-to-net-minimal-apis-and-generate-docs\\\/\"},\"author\":{\"name\":\"CPI Staff\",\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/#\\\/schema\\\/person\\\/192eeeb0ce91062126ce3822ae88fe6e\"},\"headline\":\"Add OpenAPI to .NET Minimal APIs and Generate Docs\",\"datePublished\":\"2025-09-11T07:12:23+00:00\",\"dateModified\":\"2025-09-11T07:12:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/09\\\/11\\\/add-openapi-to-net-minimal-apis-and-generate-docs\\\/\"},\"wordCount\":891,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/09\\\/11\\\/add-openapi-to-net-minimal-apis-and-generate-docs\\\/#primaryimage\"},\"thumbnailUrl\":\"\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/add-openapi-to-net-minimal-apis-and-generate-docs-the-right-way.png\",\"articleSection\":[\".NET\",\"Blog\",\"OpenAPI\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/09\\\/11\\\/add-openapi-to-net-minimal-apis-and-generate-docs\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/09\\\/11\\\/add-openapi-to-net-minimal-apis-and-generate-docs\\\/\",\"url\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/09\\\/11\\\/add-openapi-to-net-minimal-apis-and-generate-docs\\\/\",\"name\":\"Add OpenAPI to .NET Minimal APIs and Generate Docs - CPI Consulting\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/09\\\/11\\\/add-openapi-to-net-minimal-apis-and-generate-docs\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/09\\\/11\\\/add-openapi-to-net-minimal-apis-and-generate-docs\\\/#primaryimage\"},\"thumbnailUrl\":\"\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/add-openapi-to-net-minimal-apis-and-generate-docs-the-right-way.png\",\"datePublished\":\"2025-09-11T07:12:23+00:00\",\"dateModified\":\"2025-09-11T07:12:25+00:00\",\"description\":\"Learn how to add OpenAPI to .NET Minimal APIs and generate docs efficiently. Enhance your API documentation process today.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/09\\\/11\\\/add-openapi-to-net-minimal-apis-and-generate-docs\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/09\\\/11\\\/add-openapi-to-net-minimal-apis-and-generate-docs\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/09\\\/11\\\/add-openapi-to-net-minimal-apis-and-generate-docs\\\/#primaryimage\",\"url\":\"\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/add-openapi-to-net-minimal-apis-and-generate-docs-the-right-way.png\",\"contentUrl\":\"\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/add-openapi-to-net-minimal-apis-and-generate-docs-the-right-way.png\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/2025\\\/09\\\/11\\\/add-openapi-to-net-minimal-apis-and-generate-docs\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Add OpenAPI to .NET Minimal APIs and Generate Docs\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/#website\",\"url\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/\",\"name\":\"Cloud Pro Inc - CPI Consulting Pty Ltd\",\"description\":\"Cloud, AI &amp; Cybersecurity Consulting | Melbourne\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/#organization\",\"name\":\"Cloud Pro Inc - Cloud Pro Inc - CPI Consulting Pty Ltd\",\"url\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/favfinalfile.png\",\"contentUrl\":\"\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/favfinalfile.png\",\"width\":500,\"height\":500,\"caption\":\"Cloud Pro Inc - Cloud Pro Inc - CPI Consulting Pty Ltd\"},\"image\":{\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/#\\\/schema\\\/person\\\/192eeeb0ce91062126ce3822ae88fe6e\",\"name\":\"CPI Staff\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2d96eeb53b791d92c8c50dd667e3beec92c93253bb6ff21c02cfa8ca73665c70?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2d96eeb53b791d92c8c50dd667e3beec92c93253bb6ff21c02cfa8ca73665c70?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2d96eeb53b791d92c8c50dd667e3beec92c93253bb6ff21c02cfa8ca73665c70?s=96&d=mm&r=g\",\"caption\":\"CPI Staff\"},\"sameAs\":[\"http:\\\/\\\/www.cloudproinc.com.au\"],\"url\":\"https:\\\/\\\/www.cloudproinc.com.au\\\/index.php\\\/author\\\/cpiadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Add OpenAPI to .NET Minimal APIs and Generate Docs - CPI Consulting","description":"Learn how to add OpenAPI to .NET Minimal APIs and generate docs efficiently. Enhance your API documentation process today.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/","og_locale":"en_US","og_type":"article","og_title":"Add OpenAPI to .NET Minimal APIs and Generate Docs","og_description":"Learn how to add OpenAPI to .NET Minimal APIs and generate docs efficiently. Enhance your API documentation process today.","og_url":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/","og_site_name":"CPI Consulting","article_published_time":"2025-09-11T07:12:23+00:00","article_modified_time":"2025-09-11T07:12:25+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/www.cloudproinc.com.au\/wp-content\/uploads\/2025\/09\/add-openapi-to-net-minimal-apis-and-generate-docs-the-right-way.png","type":"image\/png"}],"author":"CPI Staff","twitter_card":"summary_large_image","twitter_misc":{"Written by":"CPI Staff","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/#article","isPartOf":{"@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/"},"author":{"name":"CPI Staff","@id":"https:\/\/www.cloudproinc.com.au\/#\/schema\/person\/192eeeb0ce91062126ce3822ae88fe6e"},"headline":"Add OpenAPI to .NET Minimal APIs and Generate Docs","datePublished":"2025-09-11T07:12:23+00:00","dateModified":"2025-09-11T07:12:25+00:00","mainEntityOfPage":{"@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/"},"wordCount":891,"commentCount":0,"publisher":{"@id":"https:\/\/www.cloudproinc.com.au\/#organization"},"image":{"@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2025\/09\/add-openapi-to-net-minimal-apis-and-generate-docs-the-right-way.png","articleSection":[".NET","Blog","OpenAPI"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/","url":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/","name":"Add OpenAPI to .NET Minimal APIs and Generate Docs - CPI Consulting","isPartOf":{"@id":"https:\/\/www.cloudproinc.com.au\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/#primaryimage"},"image":{"@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2025\/09\/add-openapi-to-net-minimal-apis-and-generate-docs-the-right-way.png","datePublished":"2025-09-11T07:12:23+00:00","dateModified":"2025-09-11T07:12:25+00:00","description":"Learn how to add OpenAPI to .NET Minimal APIs and generate docs efficiently. Enhance your API documentation process today.","breadcrumb":{"@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/#primaryimage","url":"\/wp-content\/uploads\/2025\/09\/add-openapi-to-net-minimal-apis-and-generate-docs-the-right-way.png","contentUrl":"\/wp-content\/uploads\/2025\/09\/add-openapi-to-net-minimal-apis-and-generate-docs-the-right-way.png","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/11\/add-openapi-to-net-minimal-apis-and-generate-docs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.cloudproinc.com.au\/"},{"@type":"ListItem","position":2,"name":"Add OpenAPI to .NET Minimal APIs and Generate Docs"}]},{"@type":"WebSite","@id":"https:\/\/www.cloudproinc.com.au\/#website","url":"https:\/\/www.cloudproinc.com.au\/","name":"Cloud Pro Inc - CPI Consulting Pty Ltd","description":"Cloud, AI &amp; Cybersecurity Consulting | Melbourne","publisher":{"@id":"https:\/\/www.cloudproinc.com.au\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.cloudproinc.com.au\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.cloudproinc.com.au\/#organization","name":"Cloud Pro Inc - Cloud Pro Inc - CPI Consulting Pty Ltd","url":"https:\/\/www.cloudproinc.com.au\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.cloudproinc.com.au\/#\/schema\/logo\/image\/","url":"\/wp-content\/uploads\/2022\/01\/favfinalfile.png","contentUrl":"\/wp-content\/uploads\/2022\/01\/favfinalfile.png","width":500,"height":500,"caption":"Cloud Pro Inc - Cloud Pro Inc - CPI Consulting Pty Ltd"},"image":{"@id":"https:\/\/www.cloudproinc.com.au\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.cloudproinc.com.au\/#\/schema\/person\/192eeeb0ce91062126ce3822ae88fe6e","name":"CPI Staff","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/2d96eeb53b791d92c8c50dd667e3beec92c93253bb6ff21c02cfa8ca73665c70?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2d96eeb53b791d92c8c50dd667e3beec92c93253bb6ff21c02cfa8ca73665c70?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2d96eeb53b791d92c8c50dd667e3beec92c93253bb6ff21c02cfa8ca73665c70?s=96&d=mm&r=g","caption":"CPI Staff"},"sameAs":["http:\/\/www.cloudproinc.com.au"],"url":"https:\/\/www.cloudproinc.com.au\/index.php\/author\/cpiadmin\/"}]}},"jetpack_featured_media_url":"\/wp-content\/uploads\/2025\/09\/add-openapi-to-net-minimal-apis-and-generate-docs-the-right-way.png","jetpack-related-posts":[{"id":57005,"url":"https:\/\/www.cloudproinc.com.au\/index.php\/2026\/02\/09\/openai-docs-mcp-server\/","url_meta":{"origin":53804,"position":0},"title":"OpenAI Docs MCP Server","author":"CPI Staff","date":"February 9, 2026","format":false,"excerpt":"Learn how the OpenAI Docs MCP Server brings official documentation into your editor or agent context, so teams ship faster with fewer interruptions and more reliable answers.","rel":"","context":"In &quot;Blog&quot;","block_context":{"text":"Blog","link":"https:\/\/www.cloudproinc.com.au\/index.php\/category\/blog\/"},"img":{"alt_text":"","src":"\/wp-content\/uploads\/2026\/02\/post-17.png","width":350,"height":200,"srcset":"\/wp-content\/uploads\/2026\/02\/post-17.png 1x, \/wp-content\/uploads\/2026\/02\/post-17.png 1.5x, \/wp-content\/uploads\/2026\/02\/post-17.png 2x, \/wp-content\/uploads\/2026\/02\/post-17.png 3x, \/wp-content\/uploads\/2026\/02\/post-17.png 4x"},"classes":[]},{"id":53219,"url":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/04\/18\/getting-started-with-the-openai-responses-api-in-net\/","url_meta":{"origin":53804,"position":1},"title":"Getting Started with the OpenAI Responses API in .NET","author":"CPI Staff","date":"April 18, 2025","format":false,"excerpt":"This blog post provides instructions for getting started with the OpenAI Responses API in .NET using the official OpenAI .NET library to create a console application with the latest OpenAI Responses API. This is your go-to guide for getting started with the OpenAI Responses API in .NET. Table of contentsOResponses\u2026","rel":"","context":"In &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/www.cloudproinc.com.au\/index.php\/category\/ai\/"},"img":{"alt_text":"","src":"\/wp-content\/uploads\/2025\/04\/OpenAI-Responses-API.png","width":350,"height":200,"srcset":"\/wp-content\/uploads\/2025\/04\/OpenAI-Responses-API.png 1x, \/wp-content\/uploads\/2025\/04\/OpenAI-Responses-API.png 1.5x, \/wp-content\/uploads\/2025\/04\/OpenAI-Responses-API.png 2x, \/wp-content\/uploads\/2025\/04\/OpenAI-Responses-API.png 3x, \/wp-content\/uploads\/2025\/04\/OpenAI-Responses-API.png 4x"},"classes":[]},{"id":56928,"url":"https:\/\/www.cloudproinc.com.au\/index.php\/2026\/02\/01\/protect-against-langgrinch-cve-2025-68664-in-langchain\/","url_meta":{"origin":53804,"position":2},"title":"Protect Against LangGrinch CVE-2025-68664 in LangChain","author":"CPI Staff","date":"February 1, 2026","format":false,"excerpt":"Learn what LangGrinch (CVE-2025-68664) means for LangChain-based apps and how to reduce risk with practical guardrails, testing, and operational controls.","rel":"","context":"In &quot;Blog&quot;","block_context":{"text":"Blog","link":"https:\/\/www.cloudproinc.com.au\/index.php\/category\/blog\/"},"img":{"alt_text":"","src":"\/wp-content\/uploads\/2026\/02\/post-1.png","width":350,"height":200,"srcset":"\/wp-content\/uploads\/2026\/02\/post-1.png 1x, \/wp-content\/uploads\/2026\/02\/post-1.png 1.5x, \/wp-content\/uploads\/2026\/02\/post-1.png 2x, \/wp-content\/uploads\/2026\/02\/post-1.png 3x, \/wp-content\/uploads\/2026\/02\/post-1.png 4x"},"classes":[]},{"id":53555,"url":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/07\/29\/counting-tokens-using-the-openai-python-sdk\/","url_meta":{"origin":53804,"position":3},"title":"Counting Tokens Using the OpenAI Python SDK","author":"CPI Staff","date":"July 29, 2025","format":false,"excerpt":"This post provides a comprehensive guide on counting tokens using the OpenAI Python SDK, covering Python virtual environments, managing your OpenAI API key securely, and the role of the requirements.txt file. In the world of Large Language Models (LLMs) and Artificial Intelligence (AI), the term \"token\" frequently arises. Tokens are\u2026","rel":"","context":"In &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/www.cloudproinc.com.au\/index.php\/category\/ai\/"},"img":{"alt_text":"","src":"\/wp-content\/uploads\/2025\/07\/image-23.png","width":350,"height":200,"srcset":"\/wp-content\/uploads\/2025\/07\/image-23.png 1x, \/wp-content\/uploads\/2025\/07\/image-23.png 1.5x, \/wp-content\/uploads\/2025\/07\/image-23.png 2x"},"classes":[]},{"id":53914,"url":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/21\/run-pytorch-in-net-with-torchsharp\/","url_meta":{"origin":53804,"position":4},"title":"Run PyTorch in .NET with TorchSharp","author":"CPI Staff","date":"September 21, 2025","format":false,"excerpt":"Build and ship PyTorch models in .NET using TorchSharp, ONNX, or a Python service. Practical steps, code, and deployment tips for teams on Windows, Linux, and containers.","rel":"","context":"In &quot;.NET&quot;","block_context":{"text":".NET","link":"https:\/\/www.cloudproinc.com.au\/index.php\/category\/net\/"},"img":{"alt_text":"","src":"\/wp-content\/uploads\/2025\/09\/practical-ways-to-run-pytorch-in-net-with-torchsharp-and-more.png","width":350,"height":200,"srcset":"\/wp-content\/uploads\/2025\/09\/practical-ways-to-run-pytorch-in-net-with-torchsharp-and-more.png 1x, \/wp-content\/uploads\/2025\/09\/practical-ways-to-run-pytorch-in-net-with-torchsharp-and-more.png 1.5x, \/wp-content\/uploads\/2025\/09\/practical-ways-to-run-pytorch-in-net-with-torchsharp-and-more.png 2x, \/wp-content\/uploads\/2025\/09\/practical-ways-to-run-pytorch-in-net-with-torchsharp-and-more.png 3x, \/wp-content\/uploads\/2025\/09\/practical-ways-to-run-pytorch-in-net-with-torchsharp-and-more.png 4x"},"classes":[]},{"id":53910,"url":"https:\/\/www.cloudproinc.com.au\/index.php\/2025\/09\/21\/build-a-chat-bot-with-streamlit\/","url_meta":{"origin":53804,"position":5},"title":"Build a Chat Bot with Streamlit","author":"CPI Staff","date":"September 21, 2025","format":false,"excerpt":"A practical, friendly guide to designing, building, and shipping a Streamlit chat bot with modern LLMs, retrieval, and secure deployment for teams.","rel":"","context":"In &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/www.cloudproinc.com.au\/index.php\/category\/ai\/"},"img":{"alt_text":"","src":"\/wp-content\/uploads\/2025\/09\/build-a-chat-bot-with-streamlit-an-end-to-end-guide-for-teams.png","width":350,"height":200,"srcset":"\/wp-content\/uploads\/2025\/09\/build-a-chat-bot-with-streamlit-an-end-to-end-guide-for-teams.png 1x, \/wp-content\/uploads\/2025\/09\/build-a-chat-bot-with-streamlit-an-end-to-end-guide-for-teams.png 1.5x, \/wp-content\/uploads\/2025\/09\/build-a-chat-bot-with-streamlit-an-end-to-end-guide-for-teams.png 2x, \/wp-content\/uploads\/2025\/09\/build-a-chat-bot-with-streamlit-an-end-to-end-guide-for-teams.png 3x, \/wp-content\/uploads\/2025\/09\/build-a-chat-bot-with-streamlit-an-end-to-end-guide-for-teams.png 4x"},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/posts\/53804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/comments?post=53804"}],"version-history":[{"count":1,"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/posts\/53804\/revisions"}],"predecessor-version":[{"id":53808,"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/posts\/53804\/revisions\/53808"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/media\/53806"}],"wp:attachment":[{"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/media?parent=53804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/categories?post=53804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cloudproinc.com.au\/index.php\/wp-json\/wp\/v2\/tags?post=53804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}