Image Generation
Generate images from a text prompt.
Generate Image
Endpoint: POST /v1/images/generations
| Parameter | Type | Required | Description |
|---|---|---|---|
model | string | Yes | Model name, e.g. dall-e-3, gpt-image-1. |
prompt | string | Yes | Text description of the desired image. |
n | integer | No | Number of images to generate. Default: 1. |
size | string | No | Image size, e.g. 1024x1024, 1792x1024, 1024x1792. Some models also accept aspect ratios like 1:1, 16:9, 9:16, 4:3. |
quality | string | No | Image quality: low, medium, or high (model-dependent). |
response_format | string | No | Response format: url (default) or b64_json. |
image | string | No | Single reference image URL. When provided, the request is treated as image-to-image; the model must support it. |
image_urls | string[] | No | List of reference image URLs (up to 10 for some models). When provided, treated as image-to-image; model must support it. |
output_format | string | No | Output image format: png (default) or jpeg. Only applies to image-to-image requests. |
wait_for_completion | boolean | No | If true, the request blocks until the image is ready and returns the result directly. Default: false. |
polling_timeout | integer | No | Maximum seconds to wait when wait_for_completion is true. Default: 300. Only takes effect with wait_for_completion: true. |
By default the API returns immediately with a task ID and status: "processing". Poll GET /v1/images/{image_id} to check when the image is ready.
Models that do not support image-to-image will return 400 if image or image_urls is provided. Use a supported model or remove those fields.
Examples
curl -X POST https://silkdock.ai/v1/images/generations \-H "Authorization: Bearer $SILKDOCK_API_KEY" \-H "Content-Type: application/json" \-d '{ "model": "gpt-image-2", "prompt": "An orange cat walking in space, cyberpunk style", "size": "1024x1024", "quality": "high"}'curl -X POST https://silkdock.ai/v1/images/generations ^-H "Authorization: Bearer %SILKDOCK_API_KEY%" ^-H "Content-Type: application/json" ^-d "{\"model\":\"gpt-image-2\"\"prompt\":\"An orange cat walking in space, cyberpunk style\",\"size\":\"1024x1024\",\"quality\":\"hd\"}"http POST https://silkdock.ai/v1/images/generations \Authorization:"Bearer $SILKDOCK_API_KEY" \model=gpt-image-2 \prompt="An orange cat walking in space, cyberpunk style" \size=1024x1024 \quality=hdwget -q -O - https://silkdock.ai/v1/images/generations \--method=POST \--header="Authorization: Bearer $SILKDOCK_API_KEY" \--header="Content-Type: application/json" \--body-data='{ "model": "gpt-image-2", "prompt": "An orange cat walking in space, cyberpunk style", "size": "1024x1024", "quality": "high"}'$headers = @{ "Authorization" = "Bearer $env:SILKDOCK_API_KEY" "Content-Type" = "application/json"}$body = @{ model = "gpt-image-2" prompt = "An orange cat walking in space, cyberpunk style" size = "1024x1024" quality = "high"} | ConvertTo-Json$res = Invoke-RestMethod -Method POST `-Uri "https://silkdock.ai/v1/images/generations" `-Headers $headers `-Body $bodyWrite-Output $res.data[0].urlconst { OpenAI } = require("openai");const client = new OpenAI({apiKey: process.env.SILKDOCK_API_KEY,baseURL: "https://silkdock.ai/v1",});const response = await client.images.generate({model: "gpt-image-2",prompt: "An orange cat walking in space, cyberpunk style",n: 1,size: "1024x1024",quality: "high",});console.log(response.data[0].url);const res = await fetch("https://silkdock.ai/v1/images/generations", {method: "POST",headers: {"Authorization": `Bearer ${process.env.SILKDOCK_API_KEY}`,"Content-Type": "application/json",},body: JSON.stringify({model: "gpt-image-2",prompt: "An orange cat walking in space, cyberpunk style",size: "1024x1024",quality: "high",}),});const { data } = await res.json();console.log(data[0].url);import axios from "axios";const { data } = await axios.post("https://silkdock.ai/v1/images/generations",{model: "gpt-image-2",prompt: "An orange cat walking in space, cyberpunk style",size: "1024x1024",quality: "high",},{headers: {Authorization: `Bearer ${process.env.SILKDOCK_API_KEY}`,"Content-Type": "application/json",},});console.log(data.data[0].url);$.ajax({url: "https://silkdock.ai/v1/images/generations",method: "POST",contentType: "application/json",headers: {Authorization: `Bearer ${SILKDOCK_API_KEY}`,},data: JSON.stringify({model: "gpt-image-2",prompt: "An orange cat walking in space, cyberpunk style",size: "1024x1024",quality: "high",}),success(res) {console.log(res.data[0].url);},});const xhr = new XMLHttpRequest();xhr.open("POST", "https://silkdock.ai/v1/images/generations");xhr.setRequestHeader("Authorization", `Bearer ${process.env.SILKDOCK_API_KEY}`);xhr.setRequestHeader("Content-Type", "application/json");xhr.onload = () => {const { data } = JSON.parse(xhr.responseText);console.log(data[0].url);};xhr.send(JSON.stringify({model: "gpt-image-2",prompt: "An orange cat walking in space, cyberpunk style",size: "1024x1024",quality: "high",}));const request = require("request");request.post({url: "https://silkdock.ai/v1/images/generations",headers: {Authorization: `Bearer ${process.env.SILKDOCK_API_KEY}`,"Content-Type": "application/json",},json: {model: "gpt-image-2",prompt: "An orange cat walking in space, cyberpunk style",size: "1024x1024",quality: "high",},},(err, res, body) => {console.log(body.data[0].url);});const unirest = require("unirest");unirest.post("https://silkdock.ai/v1/images/generations").headers({Authorization: `Bearer ${process.env.SILKDOCK_API_KEY}`,"Content-Type": "application/json",}).send({model: "gpt-image-2",prompt: "An orange cat walking in space, cyberpunk style",size: "1024x1024",quality: "high",}).then((res) => {console.log(res.body.data[0].url);});import OpenAI from "openai";const client = new OpenAI({apiKey: process.env.SILKDOCK_API_KEY,baseURL: "https://silkdock.ai/v1",});const response = await client.images.generate({model: "gpt-image-2",prompt: "An orange cat walking in space, cyberpunk style",n: 1,size: "1024x1024",quality: "high",});console.log(response.data[0].url);const res = await fetch("https://silkdock.ai/v1/images/generations", {method: "POST",headers: {"Authorization": `Bearer ${process.env.SILKDOCK_API_KEY}`,"Content-Type": "application/json",},body: JSON.stringify({model: "gpt-image-2",prompt: "An orange cat walking in space, cyberpunk style",size: "1024x1024",quality: "high",}),});const { data } = await res.json();console.log(data[0].url);import requests, osres = requests.post("https://silkdock.ai/v1/images/generations",headers={"Authorization": f"Bearer {os.getenv('SILKDOCK_API_KEY')}"},json={"model": "gpt-image-2","prompt": "An orange cat walking in space, cyberpunk style","size": "1024x1024","quality": "high",},)print(res.json()["data"][0]["url"])import osfrom openai import OpenAIclient = OpenAI(api_key=os.getenv("SILKDOCK_API_KEY"),base_url="https://silkdock.ai/v1")response = client.images.generate(model="gpt-image-2",prompt="An orange cat walking in space, cyberpunk style",n=1,size="1024x1024",quality="high")print(response.data[0].url)#include <stdio.h>#include <curl/curl.h>int main(void) {CURL *curl = curl_easy_init();if (!curl) return 1; struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: application/json"); headers = curl_slist_append(headers, "Authorization: Bearer " SILKDOCK_API_KEY); const char *body = "{\"model\":\"gpt-image-2\"" "\"prompt\":\"An orange cat walking in space, cyberpunk style\"," "\"size\":\"1024x1024\",\"quality\":\"hd\"}"; curl_easy_setopt(curl, CURLOPT_URL, "https://silkdock.ai/v1/images/generations"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body); curl_easy_perform(curl); curl_slist_free_all(headers); curl_easy_cleanup(curl); return 0;}/_ compile: gcc main.c -lcurl -o main _/#import <Foundation/Foundation.h>NSURLSession *session = [NSURLSession sharedSession];NSURL *url = [NSURL URLWithString:@"https://silkdock.ai/v1/images/generations"];NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];[request setHTTPMethod:@"POST"];[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];[request setValue:[@"Bearer " stringByAppendingString:[NSProcessInfo.processInfo.environment objectForKey:@"SILKDOCK_API_KEY"]]forHTTPHeaderField:@"Authorization"];NSDictionary *payload = @{@"model": @"gpt-image-2",@"prompt": @"An orange cat walking in space, cyberpunk style",@"size": @"1024x1024",@"quality": @"high"};[request setHTTPBody:[NSJSONSerialization dataWithJSONObject:payload options:0 error:nil]];NSURLSessionDataTask *task = [session dataTaskWithRequest:requestcompletionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];NSLog(@"%@", json[@"data"][0][@"url"]);}];[task resume];import com.openai.client.OpenAIClient;import com.openai.client.okhttp.OpenAIOkHttpClient;import com.openai.models.*;OpenAIClient client = OpenAIOkHttpClient.builder().apiKey(System.getenv("SILKDOCK_API_KEY")).baseURL("https://silkdock.ai/v1").build();ImageGenerateResponse response = client.images().generate(ImageGenerateParams.builder().model(ImageModel.DALL_E_3).prompt("An orange cat walking in space, cyberpunk style").size(ImageGenerateParams.Size._1024X1024).quality(ImageGenerateParams.Quality.HD).build());System.out.println(response.data().get(0).url().orElse(""));import java.net.http.*;import java.net.URI;var req = HttpRequest.newBuilder().uri(URI.create("https://silkdock.ai/v1/images/generations")).header("Authorization", "Bearer " + System.getenv("SILKDOCK_API_KEY")).header("Content-Type", "application/json").POST(HttpRequest.BodyPublishers.ofString("""{"model":"gpt-image-2", "prompt":"An orange cat walking in space, cyberpunk style","size":"1024x1024","quality":"high"}""")).build();System.out.println(HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString()).body());import okhttp3.*;OkHttpClient client = new OkHttpClient();RequestBody body = RequestBody.create("{"model":"gpt-image-2"" +""prompt":"An orange cat walking in space, cyberpunk style"," +""size":"1024x1024","quality":"hd"}",MediaType.get("application/json"));Request request = new Request.Builder().url("https://silkdock.ai/v1/images/generations").addHeader("Authorization", "Bearer " + System.getenv("SILKDOCK_API_KEY")).post(body).build();try (Response response = client.newCall(request).execute()) {System.out.println(response.body().string());}import kong.unirest.Unirest;var res = Unirest.post("https://silkdock.ai/v1/images/generations").header("Authorization", "Bearer " + System.getenv("SILKDOCK_API_KEY")).header("Content-Type", "application/json").body("{"model":"gpt-image-2"" +""prompt":"An orange cat walking in space, cyberpunk style"," +""size":"1024x1024","quality":"hd"}").asString();System.out.println(res.getBody());package mainimport ( "context" "fmt" "os" "github.com/openai/openai-go" "github.com/openai/openai-go/option")func main() {client := openai.NewClient(option.WithAPIKey(os.Getenv("SILKDOCK_API_KEY")),option.WithBaseURL("https://silkdock.ai/v1"),) resp, _ := client.Images.Generate(context.Background(), openai.ImageGenerateParams{ Model: openai.F(openai.ImageModelDallE3), Prompt: openai.F("An orange cat walking in space, cyberpunk style"), Size: openai.F(openai.ImageGenerateParamsSize1024x1024), Quality: openai.F(openai.ImageGenerateParamsQualityHD), }, ) fmt.Println(resp.Data[0].URL)}package mainimport ( "bytes" "encoding/json" "fmt" "io" "net/http" "os")func main() {body, _ := json.Marshal(map[string]any{"model": "gpt-image-2","prompt": "An orange cat walking in space, cyberpunk style","size": "1024x1024","quality": "high",})req, _ := http.NewRequest("POST", "https://silkdock.ai/v1/images/generations", bytes.NewReader(body))req.Header.Set("Authorization", "Bearer "+os.Getenv("SILKDOCK*API_KEY"))req.Header.Set("Content-Type", "application/json")resp, * := http.DefaultClient.Do(req)defer resp.Body.Close()data, _ := io.ReadAll(resp.Body)fmt.Println(string(data))}<?php$ch = curl_init("https://silkdock.ai/v1/images/generations");curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "Authorization: Bearer " . getenv("SILKDOCK_API_KEY"), "Content-Type: application/json", ], CURLOPT_POSTFIELDS => json_encode([ "model" => "gpt-image-2", "prompt" => "An orange cat walking in space, cyberpunk style", "size" => "1024x1024", "quality" => "high", ]),]);$res = json_decode(curl_exec($ch), true);echo $res["data"][0]["url"];<?phprequire_once "HTTP/Request2.php";$request = new HTTP_Request2( "https://silkdock.ai/v1/images/generations", HTTP_Request2::METHOD_POST);$request->setHeader(["Authorization" => "Bearer " . getenv("SILKDOCK_API_KEY"),"Content-Type" => "application/json",]);$request->setBody(json_encode([ "model" => "gpt-image-2", "prompt" => "An orange cat walking in space, cyberpunk style", "size" => "1024x1024", "quality" => "high",]));$res = json_decode($request->send()->getBody(), true);echo $res["data"][0]["url"];<?phpuse GuzzleHttpClient;$client = new Client();$res = $client->post("https://silkdock.ai/v1/images/generations", [ "headers" => [ "Authorization" => "Bearer " . getenv("SILKDOCK_API_KEY"), "Content-Type" => "application/json", ], "json" => [ "model" => "gpt-image-2", "prompt" => "An orange cat walking in space, cyberpunk style", "size" => "1024x1024", "quality" => "high", ],]);$body = json_decode($res->getBody(), true);echo $body["data"][0]["url"];<?php$client = new httpClient;$request = new httpClientRequest( "POST", "https://silkdock.ai/v1/images/generations");$request->setHeaders(["Authorization" => "Bearer " . getenv("SILKDOCK_API_KEY"),"Content-Type" => "application/json",]);$body = new httpMessageBody;$body->append(json_encode(["model" => "gpt-image-2","prompt" => "An orange cat walking in space, cyberpunk style","size" => "1024x1024","quality" => "high",]));$request->setBody($body);$client->enqueue($request)->send();$res = json_decode($client->getResponse()->getBody(), true);echo $res["data"][0]["url"];import OpenAIlet client = OpenAI(configuration: .init(token: ProcessInfo.processInfo.environment["SILKDOCK_API_KEY"]!,host: "silkdock.ai",scheme: "https"))let query = ImagesQuery(prompt: "An orange cat walking in space, cyberpunk style",model: "gpt-image-2",n: 1,size: "1024x1024",quality: "high")let result = try await client.images(query: query)print(result.data.first?.url ?? "")import Foundationvar req = URLRequest(url: URL(string: "https://silkdock.ai/v1/images/generations")!)req.httpMethod = "POST"req.setValue("Bearer \(ProcessInfo.processInfo.environment["SILKDOCK_API_KEY"]!)",forHTTPHeaderField: "Authorization")req.setValue("application/json", forHTTPHeaderField: "Content-Type")req.httpBody = try! JSONSerialization.data(withJSONObject: ["model": "gpt-image-2","prompt": "An orange cat walking in space, cyberpunk style","size": "1024x1024","quality": "high",])let (data, _) = try! await URLSession.shared.data(for: req)print(String(data: data, encoding: .utf8)!)using OpenAI;using OpenAI.Images;var client = new ImageClient(model: "gpt-image-2",credential: new System.ClientModel.ApiKeyCredential(Environment.GetEnvironmentVariable("SILKDOCK_API_KEY")!),options: new OpenAIClientOptions {Endpoint = new Uri("https://silkdock.ai/v1")});var result = await client.GenerateImageAsync("An orange cat walking in space, cyberpunk style",new ImageGenerationOptions {Size = GeneratedImageSize.W1024xH1024,Quality = GeneratedImageQuality.High,});Console.WriteLine(result.Value.ImageUri);using System.Net.Http;using System.Net.Http.Json;var client = new HttpClient();client.DefaultRequestHeaders.Add("Authorization",$"Bearer {Environment.GetEnvironmentVariable("SILKDOCK_API_KEY")}");var res = await client.PostAsJsonAsync("https://silkdock.ai/v1/images/generations", new {model = "gpt-image-2",prompt = "An orange cat walking in space, cyberpunk style",size = "1024x1024",quality = "high",});Console.WriteLine(await res.Content.ReadAsStringAsync());require "openai"client = OpenAI::Client.new(access_token: ENV["SILKDOCK_API_KEY"],uri_base: "https://silkdock.ai/v1")response = client.images.generate(parameters: {model: "gpt-image-2",prompt: "An orange cat walking in space, cyberpunk style",size: "1024x1024",quality: "high"})puts response.dig("data", 0, "url")require "net/http"require "json"uri = URI("https://silkdock.ai/v1/images/generations")req = Net::HTTP::Post.new(uri)req["Authorization"] = "Bearer #{ENV['SILKDOCK_API_KEY']}"req["Content-Type"] = "application/json"req.body = {model: "gpt-image-2", prompt: "An orange cat walking in space, cyberpunk style",size: "1024x1024", quality: "high"}.to_jsonres = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }puts JSON.parse(res.body)["data"][0]["url"]import com.openai.client.OpenAIClientimport com.openai.client.okhttp.OpenAIOkHttpClientimport com.openai.models.*val client: OpenAIClient = OpenAIOkHttpClient.builder().apiKey(System.getenv("SILKDOCK_API_KEY")).baseURL("https://silkdock.ai/v1").build()val response = client.images().generate(ImageGenerateParams.builder().model(ImageModel.DALL_E_3).prompt("An orange cat walking in space, cyberpunk style").size(ImageGenerateParams.Size._1024X1024).quality(ImageGenerateParams.Quality.HD).build())println(response.data()[0].url().orElse(""))import java.net.http.*import java.net.URIval req = HttpRequest.newBuilder().uri(URI.create("https://silkdock.ai/v1/images/generations")).header("Authorization", "Bearer ${System.getenv("SILKDOCK_API_KEY")}").header("Content-Type", "application/json").POST(HttpRequest.BodyPublishers.ofString("""{"model":"gpt-image-2", "prompt":"An orange cat walking in space, cyberpunk style","size":"1024x1024","quality":"high"}""")).build()println(HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString()).body())use reqwest::blocking::Client;use serde_json::json;fn main() -> Result<(), Box<dyn std::error::Error>> {let res = Client::new().post("https://silkdock.ai/v1/images/generations").header("Authorization", format!("Bearer {}", std::env::var("SILKDOCK_API_KEY")?)).json(&json!({"model": "gpt-image-2","prompt": "An orange cat walking in space, cyberpunk style","size": "1024x1024","quality": "high"})).send()?;println!("{}", res.text()?);Ok(())}POST /v1/images/generations HTTP/1.1Host: silkdock.aiAuthorization: Bearer <YOUR_API_KEY>Content-Type: application/json{"model": "gpt-image-2","prompt": "An orange cat walking in space, cyberpunk style","size": "1024x1024","quality": "high"}import 'dart:convert';import 'package:http/http.dart' as http;void main() async {final res = await http.post(Uri.parse('https://silkdock.ai/v1/images/generations'),headers: {'Authorization': 'Bearer ${const String.fromEnvironment("SILKDOCK_API_KEY")}','Content-Type': 'application/json',},body: jsonEncode({'model': 'gpt-image-2','prompt': 'An orange cat walking in space, cyberpunk style','size': '1024x1024','quality': 'hd',}),);final data = jsonDecode(res.body);print(data['data'][0]['url']);}library(httr2)req <- request("https://silkdock.ai/v1/images/generations") |>req_headers(Authorization = paste("Bearer", Sys.getenv("SILKDOCK_API_KEY")),"Content-Type" = "application/json") |>req_body_json(list(model = "gpt-image-2",prompt = "An orange cat walking in space, cyberpunk style",size = "1024x1024",quality = "high"))resp <- req_perform(req)cat(resp_body_json(resp)$data[[1]]$url)(* requires cohttp-lwt-unix *)open Cohttp_lwt_unixopen Cohttpopen Lwtlet () =let body = {|{"model":"gpt-image-2", "prompt":"An orange cat walking in space, cyberpunk style","size":"1024x1024","quality":"high"}|} inlet headers = Header.of*list ["Authorization", "Bearer " ^ Sys.getenv "SILKDOCK_API_KEY";"Content-Type", "application/json";] inLwt_main.run (Client.post ~headers ~body:(Cohttp_lwt.Body.of_string body)(Uri.of_string "https://silkdock.ai/v1/images/generations") >>= fun (*, body) -> Cohttp_lwt.Body.to_string body >>= fun s -> print_string s; return_unit)Response
By default, the API returns immediately with a task ID and processing status:
{
"id": "img_abc123",
"status": "processing"
}When wait_for_completion: true is set and the image finishes within polling_timeout seconds, the response includes the generated image data:
{
"id": "img_abc123",
"status": "completed",
"created": 1234567890,
"data": [
{
"url": "https://...",
"revised_prompt": "...",
"b64_json": null
}
]
}Get Image Task
Endpoint: GET /v1/images/{image_id}
Poll this endpoint to check the status of an image generation task created by POST /v1/images/generations.
| Path Parameter | Type | Required | Description |
|---|---|---|---|
image_id | string | Yes | The task ID returned by the generate endpoint. |
Response
While processing:
{
"id": "img_abc123",
"status": "processing"
}On completion:
{
"id": "img_abc123",
"status": "completed",
"created": 1234567890,
"data": [
{
"url": "https://...",
"revised_prompt": "...",
"b64_json": null
}
]
}On failure:
{
"id": "img_abc123",
"status": "failed",
"error": {
"code": "generation_failed",
"message": "The model failed to generate an image for the given prompt."
}
}Polling Example
# 1. Submit the taskRESPONSE=$(curl -s -X POST https://silkdock.ai/v1/images/generations \-H "Authorization: Bearer $SILKDOCK_API_KEY" \-H "Content-Type: application/json" \-d '{"model":"gpt-image-2","prompt":"An orange cat walking in space, cyberpunk style","size":"1024x1024"}')IMAGE_ID=$(echo "$RESPONSE" | jq -r '.id')# 2. Poll until completedwhile true; doSTATUS_RESP=$(curl -s "https://silkdock.ai/v1/images/$IMAGE_ID" \ -H "Authorization: Bearer $SILKDOCK_API_KEY")STATUS=$(echo "$STATUS_RESP" | jq -r '.status')if [ "$STATUS" = "completed" ]; then echo "$STATUS_RESP" | jq -r '.data[0].url' breakelif [ "$STATUS" = "failed" ]; then echo "Generation failed" breakfisleep 3done@echo off:: 1. Submit the taskfor /f "delims=" %%i in ('curl -s -X POST https://silkdock.ai/v1/images/generations ^-H "Authorization: Bearer %SILKDOCK_API_KEY%" ^-H "Content-Type: application/json" ^-d "{\"model\":\"gpt-image-2\",\"prompt\":\"An orange cat walking in space, cyberpunk style\",\"size\":\"1024x1024\"}"') do set RESPONSE=%%ifor /f "tokens=2 delims=:, " %%i in ('echo %RESPONSE% ^| findstr /r "\"id\""') do set IMAGE_ID=%%~i:pollfor /f "delims=" %%s in ('curl -s "https://silkdock.ai/v1/images/%IMAGE_ID%" ^-H "Authorization: Bearer %SILKDOCK_API_KEY%"') do set STATUS_RESP=%%secho %STATUS_RESP% | findstr /r "completed" >nul && (echo %STATUS_RESP% & goto done)echo %STATUS_RESP% | findstr /r "failed" >nul && (echo Generation failed & goto done)timeout /t 3 >nul & goto poll:done# 1. Submit the taskIMAGE_ID=$(http POST https://silkdock.ai/v1/images/generations \Authorization:"Bearer $SILKDOCK_API_KEY" \model=gpt-image-2 \prompt="An orange cat walking in space, cyberpunk style" \size=1024x1024 | jq -r '.id')# 2. Poll until completedwhile true; doRESULT=$(http GET "https://silkdock.ai/v1/images/$IMAGE_ID" \ Authorization:"Bearer $SILKDOCK_API_KEY")STATUS=$(echo "$RESULT" | jq -r '.status')if [ "$STATUS" = "completed" ]; then echo "$RESULT" | jq -r '.data[0].url' breakelif [ "$STATUS" = "failed" ]; then echo "Generation failed" breakfisleep 3done# 1. Submit the taskRESPONSE=$(wget -q -O - \--method=POST \--header="Authorization: Bearer $SILKDOCK_API_KEY" \--header="Content-Type: application/json" \--body-data='{"model":"gpt-image-2","prompt":"An orange cat walking in space, cyberpunk style","size":"1024x1024"}' \https://silkdock.ai/v1/images/generations)IMAGE_ID=$(echo "$RESPONSE" | jq -r '.id')# 2. Poll until completedwhile true; doSTATUS_RESP=$(wget -q -O - \ --header="Authorization: Bearer $SILKDOCK_API_KEY" \ "https://silkdock.ai/v1/images/$IMAGE_ID")STATUS=$(echo "$STATUS_RESP" | jq -r '.status')if [ "$STATUS" = "completed" ]; then echo "$STATUS_RESP" | jq -r '.data[0].url' breakelif [ "$STATUS" = "failed" ]; then echo "Generation failed" breakfisleep 3done$headers = @{ "Authorization" = "Bearer $env:SILKDOCK_API_KEY" "Content-Type" = "application/json"}# 1. Submit the task$submitBody = @{ model = "gpt-image-2"; prompt = "An orange cat walking in space, cyberpunk style"; size = "1024x1024" } | ConvertTo-Json$submit = Invoke-RestMethod -Method POST ` -Uri "https://silkdock.ai/v1/images/generations" ` -Headers $headers -Body $submitBody$imageId = $submit.id# 2. Poll until completedwhile ($true) { $result = Invoke-RestMethod -Method GET ` -Uri "https://silkdock.ai/v1/images/$imageId" ` -Headers $headers if ($result.status -eq "completed") { Write-Output $result.data[0].url; break } if ($result.status -eq "failed") { Write-Output "Generation failed"; break } Start-Sleep -Seconds 3}const baseURL = "https://silkdock.ai/v1";const headers = {Authorization: `Bearer ${process.env.SILKDOCK_API_KEY}`,"Content-Type": "application/json",};// 1. Submit the taskconst { id } = await fetch(`${baseURL}/images/generations`, {method: "POST",headers,body: JSON.stringify({ model: "gpt-image-2", prompt: "An orange cat walking in space, cyberpunk style", size: "1024x1024",}),}).then((r) => r.json());// 2. Poll until completedlet result;while (true) {result = await fetch(`${baseURL}/images/${id}`, { headers }).then((r) => r.json());if (result.status === "completed") break;if (result.status === "failed") throw new Error(result.error.message);await new Promise((r) => setTimeout(r, 3000));}console.log(result.data[0].url);import axios from "axios";const baseURL = "https://silkdock.ai/v1";const headers = { Authorization: `Bearer ${process.env.SILKDOCK_API_KEY}` };// 1. Submit the taskconst { data: { id } } = await axios.post(`${baseURL}/images/generations`, {model: "gpt-image-2",prompt: "An orange cat walking in space, cyberpunk style",size: "1024x1024",}, { headers });// 2. Poll until completedlet result;while (true) {({ data: result } = await axios.get(`${baseURL}/images/${id}`, { headers }));if (result.status === "completed") break;if (result.status === "failed") throw new Error(result.error.message);await new Promise((r) => setTimeout(r, 3000));}console.log(result.data[0].url);const baseURL = "https://silkdock.ai/v1";const authHeader = { Authorization: `Bearer ${SILKDOCK_API_KEY}` };// 1. Submit the taskconst { id } = await $.ajax({url: `${baseURL}/images/generations`,method: "POST",contentType: "application/json",headers: authHeader,data: JSON.stringify({ model: "gpt-image-2", prompt: "An orange cat walking in space, cyberpunk style", size: "1024x1024",}),});// 2. Poll until completedconst sleep = (ms) => new Promise((r) => setTimeout(r, ms));let result;while (true) {result = await $.ajax({ url: `${baseURL}/images/${id}`, headers: authHeader });if (result.status === "completed") break;if (result.status === "failed") throw new Error(result.error.message);await sleep(3000);}console.log(result.data[0].url);const baseURL = "https://silkdock.ai/v1";const apiKey = process.env.SILKDOCK_API_KEY;function xhrJSON(method, url, body) {return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.open(method, url); xhr.setRequestHeader("Authorization", `Bearer ${apiKey}`); if (body) xhr.setRequestHeader("Content-Type", "application/json"); xhr.onload = () => resolve(JSON.parse(xhr.responseText)); xhr.onerror = reject; xhr.send(body ? JSON.stringify(body) : null);});}// 1. Submit the taskconst { id } = await xhrJSON("POST", `${baseURL}/images/generations`, {model: "gpt-image-2",prompt: "An orange cat walking in space, cyberpunk style",size: "1024x1024",});// 2. Poll until completedconst sleep = (ms) => new Promise((r) => setTimeout(r, ms));let result;while (true) {result = await xhrJSON("GET", `${baseURL}/images/${id}`);if (result.status === "completed") break;if (result.status === "failed") throw new Error(result.error.message);await sleep(3000);}console.log(result.data[0].url);const request = require("request");const { promisify } = require("util");const postAsync = promisify(request.post);const getAsync = promisify(request.get);const baseURL = "https://silkdock.ai/v1";const headers = { Authorization: `Bearer ${process.env.SILKDOCK_API_KEY}` };// 1. Submit the taskconst { body: submitBody } = await postAsync({url: `${baseURL}/images/generations`,headers,json: { model: "gpt-image-2", prompt: "An orange cat walking in space, cyberpunk style", size: "1024x1024" },});const id = submitBody.id;// 2. Poll until completedconst sleep = (ms) => new Promise((r) => setTimeout(r, ms));let result;while (true) {({ body: result } = await getAsync({ url: `${baseURL}/images/${id}`, headers, json: true }));if (result.status === "completed") break;if (result.status === "failed") throw new Error(result.error.message);await sleep(3000);}console.log(result.data[0].url);const unirest = require("unirest");const baseURL = "https://silkdock.ai/v1";const authHeader = { Authorization: `Bearer ${process.env.SILKDOCK_API_KEY}` };// 1. Submit the taskconst submitRes = await unirest.post(`${baseURL}/images/generations`).headers(authHeader).send({ model: "gpt-image-2", prompt: "An orange cat walking in space, cyberpunk style", size: "1024x1024" });const id = submitRes.body.id;// 2. Poll until completedconst sleep = (ms) => new Promise((r) => setTimeout(r, ms));let result;while (true) {const res = await unirest.get(`${baseURL}/images/${id}`).headers(authHeader);result = res.body;if (result.status === "completed") break;if (result.status === "failed") throw new Error(result.error.message);await sleep(3000);}console.log(result.data[0].url);const baseURL = "https://silkdock.ai/v1";const headers: Record<string, string> = {Authorization: `Bearer ${process.env.SILKDOCK_API_KEY}`,"Content-Type": "application/json",};// 1. Submit the taskconst { id } = await fetch(`${baseURL}/images/generations`, {method: "POST",headers,body: JSON.stringify({ model: "gpt-image-2", prompt: "An orange cat walking in space, cyberpunk style", size: "1024x1024",}),}).then((r) => r.json());// 2. Poll until completedconst sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));let result: any;while (true) {result = await fetch(`${baseURL}/images/${id}`, { headers }).then((r) => r.json());if (result.status === "completed") break;if (result.status === "failed") throw new Error(result.error.message);await sleep(3000);}console.log(result.data[0].url);import time, os, requestsBASE_URL = "https://silkdock.ai/v1"HEADERS = {"Authorization": f"Bearer {os.getenv('SILKDOCK_API_KEY')}"}# 1. Submit the taskresp = requests.post(f"{BASE_URL}/images/generations", headers=HEADERS, json={ "model": "gpt-image-2", "prompt": "An orange cat walking in space, cyberpunk style", "size": "1024x1024",})image_id = resp.json()["id"]# 2. Poll until completedwhile True: result = requests.get(f"{BASE_URL}/images/{image_id}", headers=HEADERS).json() if result["status"] == "completed": print(result["data"][0]["url"]) break elif result["status"] == "failed": raise RuntimeError(result["error"]["message"]) time.sleep(3)#include <stdio.h>#include <string.h>#include <unistd.h>#include <curl/curl.h>struct Buf { char *ptr; size_t len; };static size_t write_cb(char *data, size_t n, size_t m, struct Buf *b) { size_t new = n * m; b->ptr = realloc(b->ptr, b->len + new + 1); memcpy(b->ptr + b->len, data, new); b->len += new; b->ptr[b->len] = '\0'; return new;}int main(void) { CURL *curl = curl_easy_init(); struct curl_slist *hdrs = NULL; hdrs = curl_slist_append(hdrs, "Content-Type: application/json"); hdrs = curl_slist_append(hdrs, "Authorization: Bearer " SILKDOCK_API_KEY); /* 1. Submit the task */ struct Buf submit = {malloc(1), 0}; const char *body = "{\"model\":\"gpt-image-2\"," "\"prompt\":\"An orange cat walking in space, cyberpunk style\"," "\"size\":\"1024x1024\"}"; curl_easy_setopt(curl, CURLOPT_URL, "https://silkdock.ai/v1/images/generations"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, hdrs); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_cb); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &submit); curl_easy_perform(curl); /* Parse image_id (minimal, assumes "id":"<value>") */ char image_id[128] = {0}; char *p = strstr(submit.ptr, "\"id\":"); if (p) sscanf(p + 6, "\"%127[^\"]", image_id); free(submit.ptr); /* 2. Poll until completed */ char poll_url[256]; snprintf(poll_url, sizeof(poll_url), "https://silkdock.ai/v1/images/%s", image_id); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, NULL); curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L); curl_easy_setopt(curl, CURLOPT_URL, poll_url); while (1) { struct Buf poll = {malloc(1), 0}; curl_easy_setopt(curl, CURLOPT_WRITEDATA, &poll); curl_easy_perform(curl); if (strstr(poll.ptr, "\"completed\"")) { printf("%s\n", poll.ptr); free(poll.ptr); break; } if (strstr(poll.ptr, "\"failed\"")) { printf("Generation failed\n"); free(poll.ptr); break; } free(poll.ptr); sleep(3); } curl_slist_free_all(hdrs); curl_easy_cleanup(curl); return 0;}/* compile: gcc main.c -lcurl -o main */#import <Foundation/Foundation.h>NSString *apiKey = NSProcessInfo.processInfo.environment[@"SILKDOCK_API_KEY"];NSString *baseURL = @"https://silkdock.ai/v1";/* Helper to make a synchronous HTTP request */NSDictionary *(^jsonRequest)(NSString *, NSString *, NSDictionary *) =^(NSString *method, NSString *urlStr, NSDictionary *payload) { NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]]; [req setHTTPMethod:method]; [req setValue:[@"Bearer " stringByAppendingString:apiKey] forHTTPHeaderField:@"Authorization"]; if (payload) { [req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; req.HTTPBody = [NSJSONSerialization dataWithJSONObject:payload options:0 error:nil]; } dispatch_semaphore_t sem = dispatch_semaphore_create(0); __block NSDictionary *result = nil; [[NSURLSession.sharedSession dataTaskWithRequest:req completionHandler:^(NSData *d, NSURLResponse *r, NSError *e) { result = [NSJSONSerialization JSONObjectWithData:d options:0 error:nil]; dispatch_semaphore_signal(sem); }] resume]; dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); return result;};/* 1. Submit the task */NSDictionary *submit = jsonRequest(@"POST", [baseURL stringByAppendingString:@"/images/generations"], @{@"model":@"gpt-image-2", @"prompt":@"An orange cat walking in space, cyberpunk style", @"size":@"1024x1024"});NSString *imageId = submit[@"id"];/* 2. Poll until completed */while (YES) { NSDictionary *result = jsonRequest(@"GET", [NSString stringWithFormat:@"%@/images/%@", baseURL, imageId], nil); NSString *status = result[@"status"]; if ([status isEqualToString:@"completed"]) { NSLog(@"%@", result[@"data"][0][@"url"]); break; } else if ([status isEqualToString:@"failed"]) { NSLog(@"Generation failed"); break; } [NSThread sleepForTimeInterval:3];}import java.net.http.*;import java.net.URI;import java.time.Duration;var client = HttpClient.newHttpClient();var headers = new String[]{ "Authorization", "Bearer " + System.getenv("SILKDOCK_API_KEY"), "Content-Type", "application/json"};// 1. Submit the taskvar submitReq = HttpRequest.newBuilder() .uri(URI.create("https://silkdock.ai/v1/images/generations")) .headers(headers) .POST(HttpRequest.BodyPublishers.ofString( """{"model":"gpt-image-2","prompt":"An orange cat walking in space, cyberpunk style","size":"1024x1024"}""")) .build();var submitBody = client.send(submitReq, HttpResponse.BodyHandlers.ofString()).body();// naive ID extractionString imageId = submitBody.replaceAll(".*\"id\":\"([^\"]+)\".*", "$1");// 2. Poll until completedwhile (true) { var pollReq = HttpRequest.newBuilder() .uri(URI.create("https://silkdock.ai/v1/images/" + imageId)) .headers("Authorization", "Bearer " + System.getenv("SILKDOCK_API_KEY")) .GET().build(); var pollBody = client.send(pollReq, HttpResponse.BodyHandlers.ofString()).body(); if (pollBody.contains("\"completed\"")) { System.out.println(pollBody); break; } if (pollBody.contains("\"failed\"")) { System.out.println("Generation failed"); break; } Thread.sleep(3000);}import okhttp3.*;import org.json.JSONObject;OkHttpClient client = new OkHttpClient();String apiKey = System.getenv("SILKDOCK_API_KEY");MediaType JSON = MediaType.get("application/json");// 1. Submit the taskRequestBody submitBody = RequestBody.create( "{\"model\":\"gpt-image-2\",\"prompt\":\"An orange cat walking in space, cyberpunk style\",\"size\":\"1024x1024\"}", JSON);Request submitReq = new Request.Builder() .url("https://silkdock.ai/v1/images/generations") .addHeader("Authorization", "Bearer " + apiKey) .post(submitBody).build();String submitResp;try (Response r = client.newCall(submitReq).execute()) { submitResp = r.body().string(); }String imageId = new JSONObject(submitResp).getString("id");// 2. Poll until completedwhile (true) { Request pollReq = new Request.Builder() .url("https://silkdock.ai/v1/images/" + imageId) .addHeader("Authorization", "Bearer " + apiKey) .get().build(); JSONObject result; try (Response r = client.newCall(pollReq).execute()) { result = new JSONObject(r.body().string()); } if ("completed".equals(result.getString("status"))) { System.out.println(result.getJSONArray("data").getJSONObject(0).getString("url")); break; } if ("failed".equals(result.getString("status"))) { System.out.println("Generation failed"); break; } Thread.sleep(3000);}import kong.unirest.Unirest;import kong.unirest.json.JSONObject;String apiKey = System.getenv("SILKDOCK_API_KEY");// 1. Submit the taskJSONObject submit = Unirest.post("https://silkdock.ai/v1/images/generations") .header("Authorization", "Bearer " + apiKey) .header("Content-Type", "application/json") .body("{\"model\":\"gpt-image-2\",\"prompt\":\"An orange cat walking in space, cyberpunk style\",\"size\":\"1024x1024\"}") .asJson().getBody().getObject();String imageId = submit.getString("id");// 2. Poll until completedwhile (true) { JSONObject result = Unirest.get("https://silkdock.ai/v1/images/" + imageId) .header("Authorization", "Bearer " + apiKey) .asJson().getBody().getObject(); if ("completed".equals(result.getString("status"))) { System.out.println(result.getJSONArray("data").getJSONObject(0).getString("url")); break; } if ("failed".equals(result.getString("status"))) { System.out.println("Generation failed"); break; } Thread.sleep(3000);}package mainimport ( "bytes" "encoding/json" "fmt" "io" "net/http" "os" "time")func getJSON(url, apiKey string) (map[string]any, error) { req, _ := http.NewRequest("GET", url, nil) req.Header.Set("Authorization", "Bearer "+apiKey) resp, err := http.DefaultClient.Do(req) if err != nil { return nil, err } defer resp.Body.Close() var v map[string]any json.NewDecoder(resp.Body).Decode(&v) return v, nil}func main() { apiKey := os.Getenv("SILKDOCK_API_KEY") // 1. Submit the task submitPayload, _ := json.Marshal(map[string]any{ "model": "gpt-image-2", "prompt": "An orange cat walking in space, cyberpunk style", "size": "1024x1024", }) req, _ := http.NewRequest("POST", "https://silkdock.ai/v1/images/generations", bytes.NewReader(submitPayload)) req.Header.Set("Authorization", "Bearer "+apiKey) req.Header.Set("Content-Type", "application/json") resp, _ := http.DefaultClient.Do(req) body, _ := io.ReadAll(resp.Body) resp.Body.Close() var submit map[string]any json.Unmarshal(body, &submit) imageID := submit["id"].(string) // 2. Poll until completed for { result, _ := getJSON("https://silkdock.ai/v1/images/"+imageID, apiKey) switch result["status"] { case "completed": data := result["data"].([]any) fmt.Println(data[0].(map[string]any)["url"]) return case "failed": fmt.Println("Generation failed") return } time.Sleep(3 * time.Second) }}<?php$apiKey = getenv("SILKDOCK_API_KEY");$baseURL = "https://silkdock.ai/v1";function curlJSON(string $method, string $url, string $apiKey, ?array $payload = null): array { $ch = curl_init($url); $headers = [ "Authorization: Bearer $apiKey", "Content-Type: application/json", ]; curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => $method, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers, ]); if ($payload !== null) { curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload)); } $res = json_decode(curl_exec($ch), true); curl_close($ch); return $res;}// 1. Submit the task$submit = curlJSON("POST", "$baseURL/images/generations", $apiKey, [ "model" => "gpt-image-2", "prompt" => "An orange cat walking in space, cyberpunk style", "size" => "1024x1024",]);$imageId = $submit["id"];// 2. Poll until completedwhile (true) { $result = curlJSON("GET", "$baseURL/images/$imageId", $apiKey); if ($result["status"] === "completed") { echo $result["data"][0]["url"]; break; } if ($result["status"] === "failed") { echo "Generation failed"; break; } sleep(3);}<?phpuse GuzzleHttpClient;$client = new Client();$apiKey = getenv("SILKDOCK_API_KEY");$baseURL = "https://silkdock.ai/v1";$headers = ["Authorization" => "Bearer $apiKey"];// 1. Submit the task$submit = json_decode($client->post("$baseURL/images/generations", [ "headers" => $headers, "json" => [ "model" => "gpt-image-2", "prompt" => "An orange cat walking in space, cyberpunk style", "size" => "1024x1024", ],])->getBody(), true);$imageId = $submit["id"];// 2. Poll until completedwhile (true) { $result = json_decode($client->get("$baseURL/images/$imageId", ["headers" => $headers])->getBody(), true); if ($result["status"] === "completed") { echo $result["data"][0]["url"]; break; } if ($result["status"] === "failed") { echo "Generation failed"; break; } sleep(3);}import Foundationlet apiKey = ProcessInfo.processInfo.environment["SILKDOCK_API_KEY"]!let baseURL = "https://silkdock.ai/v1"func jsonRequest(method: String, url: String, body: [String: Any]? = nil) async throws -> [String: Any] { var req = URLRequest(url: URL(string: url)!) req.httpMethod = method req.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization") if let body { req.setValue("application/json", forHTTPHeaderField: "Content-Type") req.httpBody = try JSONSerialization.data(withJSONObject: body) } let (data, _) = try await URLSession.shared.data(for: req) return try JSONSerialization.jsonObject(with: data) as! [String: Any]}// 1. Submit the tasklet submit = try await jsonRequest(method: "POST", url: "\(baseURL)/images/generations", body: [ "model": "gpt-image-2", "prompt": "An orange cat walking in space, cyberpunk style", "size": "1024x1024",])let imageId = submit["id"] as! String// 2. Poll until completedwhile true { let result = try await jsonRequest(method: "GET", url: "\(baseURL)/images/\(imageId)") let status = result["status"] as? String if status == "completed" { let data = (result["data"] as! [[String: Any]])[0] print(data["url"] as! String) break } else if status == "failed" { print("Generation failed") break } try await Task.sleep(nanoseconds: 3_000_000_000)}using System.Net.Http;using System.Net.Http.Json;using System.Text.Json;var apiKey = Environment.GetEnvironmentVariable("SILKDOCK_API_KEY")!;var baseURL = "https://silkdock.ai/v1";var client = new HttpClient();client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");// 1. Submit the taskvar submitResp = await client.PostAsJsonAsync($"{baseURL}/images/generations", new { model = "gpt-image-2", prompt = "An orange cat walking in space, cyberpunk style", size = "1024x1024",});using var submitDoc = JsonDocument.Parse(await submitResp.Content.ReadAsStringAsync());var imageId = submitDoc.RootElement.GetProperty("id").GetString()!;// 2. Poll until completedwhile (true) { var pollResp = await client.GetAsync($"{baseURL}/images/{imageId}"); using var doc = JsonDocument.Parse(await pollResp.Content.ReadAsStringAsync()); var status = doc.RootElement.GetProperty("status").GetString(); if (status == "completed") { Console.WriteLine(doc.RootElement.GetProperty("data")[0].GetProperty("url").GetString()); break; } if (status == "failed") { Console.WriteLine("Generation failed"); break; } await Task.Delay(3000);}require "net/http"require "json"API_KEY = ENV["SILKDOCK_API_KEY"]BASE_URI = URI("https://silkdock.ai/v1")def json_request(method, path, body: nil)uri = URI("#{BASE_URI}#{path}")http = Net::HTTP.new(uri.host, uri.port)http.use_ssl = truereq = (method == :post ? Net::HTTP::Post : Net::HTTP::Get).new(uri)req["Authorization"] = "Bearer #{API_KEY}"req["Content-Type"] = "application/json" if bodyreq.body = body.to_json if bodyJSON.parse(http.request(req).body)end# 1. Submit the tasksubmit = json_request(:post, "/images/generations", body: { model: "gpt-image-2", prompt: "An orange cat walking in space, cyberpunk style", size: "1024x1024" })image_id = submit["id"]# 2. Poll until completedloop doresult = json_request(:get, "/images/#{image_id}")case result["status"]when "completed" then puts result["data"][0]["url"]; breakwhen "failed" then puts "Generation failed"; breakendsleep 3endimport java.net.http.*import java.net.URIimport kotlinx.serialization.json.*val apiKey = System.getenv("SILKDOCK_API_KEY")val baseURL = "https://silkdock.ai/v1"val client = HttpClient.newHttpClient()fun getJSON(url: String): JsonObject { val req = HttpRequest.newBuilder() .uri(URI.create(url)) .header("Authorization", "Bearer $apiKey") .GET().build() val body = client.send(req, HttpResponse.BodyHandlers.ofString()).body() return Json.parseToJsonElement(body).jsonObject}// 1. Submit the taskval submitReq = HttpRequest.newBuilder() .uri(URI.create("$baseURL/images/generations")) .header("Authorization", "Bearer $apiKey") .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString( """{"model":"gpt-image-2","prompt":"An orange cat walking in space, cyberpunk style","size":"1024x1024"}""")) .build()val submitBody = client.send(submitReq, HttpResponse.BodyHandlers.ofString()).body()val imageId = Json.parseToJsonElement(submitBody).jsonObject["id"]!!.jsonPrimitive.content// 2. Poll until completedwhile (true) { val result = getJSON("$baseURL/images/$imageId") when (result["status"]?.jsonPrimitive?.content) { "completed" -> { println(result["data"]!!.jsonArray[0].jsonObject["url"]!!.jsonPrimitive.content); break } "failed" -> { println("Generation failed"); break } } Thread.sleep(3000)}use reqwest::blocking::Client;use serde_json::{json, Value};use std::{thread, time::Duration};fn main() -> Result<(), Box<dyn std::error::Error>> { let api_key = std::env::var("SILKDOCK_API_KEY")?; let base_url = "https://silkdock.ai/v1"; let client = Client::new(); // 1. Submit the task let submit: Value = client .post(format!("{base_url}/images/generations")) .bearer_auth(&api_key) .json(&json!({ "model": "gpt-image-2", "prompt": "An orange cat walking in space, cyberpunk style", "size": "1024x1024", })) .send()? .json()?; let image_id = submit["id"].as_str().unwrap(); // 2. Poll until completed loop { let result: Value = client .get(format!("{base_url}/images/{image_id}")) .bearer_auth(&api_key) .send()? .json()?; match result["status"].as_str() { Some("completed") => { println!("{}", result["data"][0]["url"]); break; } Some("failed") => { println!("Generation failed"); break; } _ => {} } thread::sleep(Duration::from_secs(3)); } Ok(())}### Step 1 — Submit the taskPOST /v1/images/generations HTTP/1.1Host: silkdock.aiAuthorization: Bearer <YOUR_API_KEY>Content-Type: application/json{"model": "gpt-image-2","prompt": "An orange cat walking in space, cyberpunk style","size": "1024x1024"}### Step 2 — Poll for the result (replace {image_id} with the id from step 1)GET /v1/images/{image_id} HTTP/1.1Host: silkdock.aiAuthorization: Bearer <YOUR_API_KEY>import 'dart:convert';import 'dart:io';import 'package:http/http.dart' as http;void main() async {final apiKey = const String.fromEnvironment('SILKDOCK_API_KEY');final baseURL = 'https://silkdock.ai/v1';final headers = { 'Authorization': 'Bearer $apiKey', 'Content-Type': 'application/json',};// 1. Submit the taskfinal submitRes = await http.post( Uri.parse('$baseURL/images/generations'), headers: headers, body: jsonEncode({ 'model': 'gpt-image-2', 'prompt': 'An orange cat walking in space, cyberpunk style', 'size': '1024x1024', }),);final imageId = jsonDecode(submitRes.body)['id'] as String;// 2. Poll until completedwhile (true) { final pollRes = await http.get( Uri.parse('$baseURL/images/$imageId'), headers: {'Authorization': 'Bearer $apiKey'}, ); final result = jsonDecode(pollRes.body) as Map<String, dynamic>; if (result['status'] == 'completed') { print(result['data'][0]['url']); break; } else if (result['status'] == 'failed') { print('Generation failed'); break; } await Future.delayed(const Duration(seconds: 3));}}library(httr2)api_key <- Sys.getenv("SILKDOCK_API_KEY")base_url <- "https://silkdock.ai/v1"# 1. Submit the tasksubmit <- request(paste0(base_url, "/images/generations")) |>req_headers(Authorization = paste("Bearer", api_key), "Content-Type" = "application/json") |>req_body_json(list( model = "gpt-image-2", prompt = "An orange cat walking in space, cyberpunk style", size = "1024x1024")) |>req_perform() |>resp_body_json()image_id <- submit$id# 2. Poll until completedrepeat {result <- request(paste0(base_url, "/images/", image_id)) |> req_headers(Authorization = paste("Bearer", api_key)) |> req_perform() |> resp_body_json()if (result$status == "completed") { cat(result$data[[1]]$url, "\n"); break }if (result$status == "failed") { cat("Generation failed\n"); break }Sys.sleep(3)}(* requires cohttp-lwt-unix, yojson *)open Cohttp_lwt_unixopen Cohttpopen Lwtlet api_key = Sys.getenv "SILKDOCK_API_KEY"let base_url = "https://silkdock.ai/v1"let json_request meth url body_opt =let headers = Header.of_list [ "Authorization", "Bearer " ^ api_key; "Content-Type", "application/json";] inlet body = match body_opt with | Some s -> Cohttp_lwt.Body.of_string s | None -> Cohttp_lwt.Body.emptyin(match meth with | `POST -> Client.post ~headers ~body (Uri.of_string url) | `GET -> Client.get ~headers (Uri.of_string url) | _ -> assert false)>>= fun (_, b) -> Cohttp_lwt.Body.to_string blet () = Lwt_main.run ((* 1. Submit the task *)let submit_body = {|{"model":"gpt-image-2","prompt":"An orange cat walking in space, cyberpunk style","size":"1024x1024"}|} injson_request `POST (base_url ^ "/images/generations") (Some submit_body) >>= fun resp ->let json = Yojson.Safe.from_string resp inlet image_id = Yojson.Safe.Util.(json |> member "id" |> to_string) in(* 2. Poll until completed *)let rec poll () = json_request `GET (base_url ^ "/images/" ^ image_id) None >>= fun r -> let j = Yojson.Safe.from_string r in let status = Yojson.Safe.Util.(j |> member "status" |> to_string) in if status = "completed" then ( let url = Yojson.Safe.Util.(j |> member "data" |> index 0 |> member "url" |> to_string) in print_string url; return_unit ) else if status = "failed" then ( print_string "Generation failed"; return_unit ) else Lwt_unix.sleep 3.0 >>= pollinpoll ())Last updated on