Semantic Kernel .NET defaults to gpt-image-1: it fails Oct 23

The .NET OpenAI connector in Semantic Kernel defaults to gpt-image-1, which OpenAI removes Oct 23, 2026. What breaks, and a C# call to Sume that does not.

5 min readSume
All posts

If your .NET app uses the Semantic Kernel OpenAI text-to-image service without naming a model, it asks for gpt-image-1, and OpenAI removes that model on October 23, 2026. Pass an explicit model id before that date. If you would rather not depend on one vendor's id, the Sume Image API takes the same prompt as a JSON POST and returns a hosted image URL.

The facts below come from a public issue on the Semantic Kernel repository and from OpenAI's deprecations page, both read on 2026-10-07.

What the issue reports

The issue (number 14526, filed October 2, 2026) says gpt-image-1 is the default image model in the .NET OpenAI connector. It points at two places: OpenAITextToImageService.cs at line 39 and ClientCore.TextToImage.cs at line 44. It also says OpenAI's replacement is gpt-image-2, and that apps relying on the default will see errors after the shutdown.

OpenAI's deprecations page gives the dates. The gpt-image-1 entry was announced April 22, 2026 and the model is removed October 23, 2026. OpenAI lists gpt-image-2.5-sunburst and gpt-image-2.5-flare as the replacements.

gpt-image-1 default in the .NET connector (read 2026-10-07)
ItemValue
Default model in the connectorgpt-image-1
Files named in the issueOpenAITextToImageService.cs:39, ClientCore.TextToImage.cs:44
OpenAI announcementApril 22, 2026
OpenAI removal dateOctober 23, 2026
OpenAI replacementsgpt-image-2.5-sunburst, gpt-image-2.5-flare

Three ways to stop depending on the default

The safe change is the same in every case: name the model in your own code, so a library default can never decide it for you.

  • Set the model id explicitly where you build the text-to-image service, and keep it in configuration, not in a constant inside a library.
  • Search the solution for the string gpt-image-1, including appsettings files, tests and sample code, before October 23.
  • Add one test that creates an image through your real configuration, so a retired id fails in CI and not in production.

The same call to Sume from C#

Sume's Image API is a plain JSON POST to /v1/images. ChatGPT Image 2.5 is the id openai/gpt-image-2.5 (Flare), with openai/gpt-image-2.5-sunburst as the second variant; both take quality, up to 16 reference images, an optional mask_url and a background setting, per the Image API docs.

The program below needs only the framework. It reads the key from SUME_API_KEY, sends the request, and prints the image URL on a 200. The route waits up to 30 seconds; a slower job returns 202 with a job envelope, so the code branches on the status.

using System.Net.Http.Json;
using System.Text.Json;

var key = Environment.GetEnvironmentVariable("SUME_API_KEY");
if (string.IsNullOrEmpty(key)) throw new InvalidOperationException("SUME_API_KEY is not set");

using var http = new HttpClient { BaseAddress = new Uri("https://api.sume.com") };
http.DefaultRequestHeaders.Authorization = new("Bearer", key);

var body = new
{
    model = "openai/gpt-image-2.5",
    prompt = "A flat illustration of a lighthouse at dawn",
    quality = "medium",
    image_size = new { width = 1024, height = 1024 }
};

using var res = await http.PostAsJsonAsync("/v1/images", body);
var text = await res.Content.ReadAsStringAsync();
Console.WriteLine((int)res.StatusCode);

if ((int)res.StatusCode == 200)
{
    using var doc = JsonDocument.Parse(text);
    Console.WriteLine(doc.RootElement.GetProperty("data")[0].GetProperty("url").GetString());
}
else
{
    Console.WriteLine(text); // 202: poll status_url, then read result_url
}

What changes besides the id

Sume returns data[].url, a hosted address, not base64 bytes, so code that decodes b64_json needs a download step instead. Reference images must be public HTTPS URLs, and an edit is JSON, not multipart.

If you leave quality out, Sume treats it as high. State it: medium costs far less than high on this model, and the choice belongs in your configuration next to the model id.

Before October 23

Treat the default as a bug report you can file against yourself. Set the model, add the CI check, and decide whether the id is OpenAI's or Sume's. The issue was found by a deprecation-watching tool, which is a reminder that library defaults age silently.

A practical order of work: first grep for the string, then pin the id in configuration, then run one real generation in a staging environment. If the call goes through OpenAI directly, remember that gpt-image-1-mini and gpt-image-1.5 follow on December 1, 2026, so choosing either as a stopgap only moves the problem by about five weeks.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume