SilkDock
API

Image Generation

Generate images from a text prompt.

Generate Image

Endpoint: POST /v1/images/generations

ParameterTypeRequiredDescription
modelstringYesModel name, e.g. dall-e-3, gpt-image-1.
promptstringYesText description of the desired image.
nintegerNoNumber of images to generate. Default: 1.
sizestringNoImage size, e.g. 1024x1024, 1792x1024, 1024x1792. Some models also accept aspect ratios like 1:1, 16:9, 9:16, 4:3.
qualitystringNoImage quality: low, medium, or high (model-dependent).
response_formatstringNoResponse format: url (default) or b64_json.
imagestringNoSingle reference image URL. When provided, the request is treated as image-to-image; the model must support it.
image_urlsstring[]NoList of reference image URLs (up to 10 for some models). When provided, treated as image-to-image; model must support it.
output_formatstringNoOutput image format: png (default) or jpeg. Only applies to image-to-image requests.
wait_for_completionbooleanNoIf true, the request blocks until the image is ready and returns the result directly. Default: false.
polling_timeoutintegerNoMaximum 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=hd
wget -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].url
const { 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 ParameterTypeRequiredDescription
image_idstringYesThe 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 3end
import 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

On this page