SilkDock
API

Files

Upload and manage files for use with other API features.

Operations

MethodPathDescription
POST/v1/filesUpload a file.
GET/v1/filesList uploaded files.
GET/v1/files/{file_id}Retrieve file metadata.
DELETE/v1/files/{file_id}Delete a file.

Upload Parameters

ParameterTypeRequiredDescription
filefileYesFile to upload (multipart/form-data).
purposestringYesIntended use: "assistants", "fine-tune", "vision".

Examples

# Uploadcurl -X POST https://silkdock.ai/v1/files \-H "Authorization: Bearer $SILKDOCK_API_KEY" \-F "purpose=assistants" \-F "[email protected]"# Listcurl https://silkdock.ai/v1/files \-H "Authorization: Bearer $SILKDOCK_API_KEY"# Deletecurl -X DELETE https://silkdock.ai/v1/files/file-abc123 \-H "Authorization: Bearer $SILKDOCK_API_KEY"
import { readFileSync } from "fs";const headers = { "Authorization": `Bearer ${process.env.SILKDOCK_API_KEY}` };// Uploadconst form = new FormData();form.append("purpose", "assistants");form.append("file", new Blob([readFileSync("document.pdf")], { type: "application/pdf" }), "document.pdf");const upload = await fetch("https://silkdock.ai/v1/files", {method: "POST", headers, body: form,});const { id } = await upload.json();console.log("File ID:", id);// Listconst list = await fetch("https://silkdock.ai/v1/files", { headers });console.log(await list.json());// Deleteconst del = await fetch(`https://silkdock.ai/v1/files/${id}`, { method: "DELETE", headers });console.log(await del.json());
import { readFileSync } from "fs";const headers = { "Authorization": `Bearer ${process.env.SILKDOCK_API_KEY}` };// Uploadconst form = new FormData();form.append("purpose", "assistants");form.append("file", new Blob([readFileSync("document.pdf")], { type: "application/pdf" }), "document.pdf");const upload = await fetch("https://silkdock.ai/v1/files", {method: "POST", headers, body: form,});const { id } = await upload.json() as { id: string };console.log("File ID:", id);// Deleteawait fetch(`https://silkdock.ai/v1/files/${id}`, { method: "DELETE", headers });
import requests, osheaders = {"Authorization": f"Bearer {os.getenv('SILKDOCK_API_KEY')}"}# Uploadwith open("document.pdf", "rb") as f:  res = requests.post(      "https://silkdock.ai/v1/files",      headers=headers,      files={"file": ("document.pdf", f, "application/pdf")},      data={"purpose": "assistants"},  )file_id = res.json()["id"]print("File ID:", file_id)# Listprint(requests.get("https://silkdock.ai/v1/files", headers=headers).json())# Deleteprint(requests.delete(f"https://silkdock.ai/v1/files/{file_id}", headers=headers).json())
import java.net.http.*;import java.net.URI;import java.nio.file.*;import java.util.UUID;String boundary = UUID.randomUUID().toString();byte[] fileBytes = Files.readAllBytes(Path.of("document.pdf"));var buf = new java.io.ByteArrayOutputStream();buf.write(("--" + boundary + "
Content-Disposition: form-data; name="purpose"

assistants
").getBytes());buf.write(("--" + boundary + "
Content-Disposition: form-data; name="file"; filename="document.pdf"
Content-Type: application/pdf

").getBytes());buf.write(fileBytes);buf.write(("
--" + boundary + "--
").getBytes());var req = HttpRequest.newBuilder()  .uri(URI.create("https://silkdock.ai/v1/files"))  .header("Authorization", "Bearer " + System.getenv("SILKDOCK_API_KEY"))  .header("Content-Type", "multipart/form-data; boundary=" + boundary)  .POST(HttpRequest.BodyPublishers.ofByteArray(buf.toByteArray()))  .build();System.out.println(HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString()).body());
package mainimport (  "bytes"  "fmt"  "io"  "mime/multipart"  "net/http"  "os"  "path/filepath")func main() {  var buf bytes.Buffer  w := multipart.NewWriter(&buf)  w.WriteField("purpose", "assistants")  f, _ := os.Open("document.pdf")  defer f.Close()  part, _ := w.CreateFormFile("file", filepath.Base("document.pdf"))  io.Copy(part, f)  w.Close()  req, _ := http.NewRequest("POST", "https://silkdock.ai/v1/files", &buf)  req.Header.Set("Authorization", "Bearer "+os.Getenv("SILKDOCK_API_KEY"))  req.Header.Set("Content-Type", w.FormDataContentType())  resp, _ := http.DefaultClient.Do(req)  defer resp.Body.Close()  data, _ := io.ReadAll(resp.Body)  fmt.Println(string(data))}
<?php// Upload$ch = curl_init("https://silkdock.ai/v1/files");curl_setopt_array($ch, [  CURLOPT_POST           => true,  CURLOPT_RETURNTRANSFER => true,  CURLOPT_HTTPHEADER     => ["Authorization: Bearer " . getenv("SILKDOCK_API_KEY")],  CURLOPT_POSTFIELDS     => [      "purpose" => "assistants",      "file"    => new CURLFile("document.pdf", "application/pdf", "document.pdf"),  ],]);$res = json_decode(curl_exec($ch), true);$fileId = $res["id"];echo "File ID: $fileId";// List$ch2 = curl_init("https://silkdock.ai/v1/files");curl_setopt_array($ch2, [  CURLOPT_RETURNTRANSFER => true,  CURLOPT_HTTPHEADER     => ["Authorization: Bearer " . getenv("SILKDOCK_API_KEY")],]);echo curl_exec($ch2);
import Foundationlet boundary = UUID().uuidStringlet headers: [String: String] = [  "Authorization": "Bearer \(ProcessInfo.processInfo.environment["SILKDOCK_API_KEY"]!)",  "Content-Type": "multipart/form-data; boundary=\(boundary)",]var body = Data()body.append("--\(boundary)\r\nContent-Disposition: form-data; name=\"purpose\"\r\n\r\nassistants\r\n".data(using: .utf8)!)let fileData = try! Data(contentsOf: URL(fileURLWithPath: "document.pdf"))body.append("--\(boundary)\r\nContent-Disposition: form-data; name=\"file\"; filename=\"document.pdf\"\r\nContent-Type: application/pdf\r\n\r\n".data(using: .utf8)!)body.append(fileData)body.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!)var req = URLRequest(url: URL(string: "https://silkdock.ai/v1/files")!)req.httpMethod = "POST"headers.forEach { req.setValue($1, forHTTPHeaderField: $0) }req.httpBody = bodylet (data, _) = try! await URLSession.shared.data(for: req)print(String(data: data, encoding: .utf8)!)
using System.Net.Http;var client = new HttpClient();client.DefaultRequestHeaders.Add("Authorization",  $"Bearer {Environment.GetEnvironmentVariable("SILKDOCK_API_KEY")}");// Uploadusing var form = new MultipartFormDataContent();form.Add(new StringContent("assistants"), "purpose");form.Add(new ByteArrayContent(await File.ReadAllBytesAsync("document.pdf")), "file", "document.pdf");var res = await client.PostAsync("https://silkdock.ai/v1/files", form);Console.WriteLine(await res.Content.ReadAsStringAsync());// Listvar list = await client.GetAsync("https://silkdock.ai/v1/files");Console.WriteLine(await list.Content.ReadAsStringAsync());
require "net/http"require "json"headers = { "Authorization" => "Bearer #{ENV['SILKDOCK_API_KEY']}" }# Uploaduri = URI("https://silkdock.ai/v1/files")form = Net::HTTP::Post::Multipart.new(uri.path,"purpose" => "assistants","file"    => UploadIO.new("document.pdf", "application/pdf"))form["Authorization"] = headers["Authorization"]res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(form) }file_id = JSON.parse(res.body)["id"]puts "File ID: #{file_id}"# Listreq = Net::HTTP::Get.new(URI("https://silkdock.ai/v1/files"))req["Authorization"] = headers["Authorization"]puts Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }.body
import java.net.http.*import java.net.URIimport java.nio.file.*import java.util.UUIDval boundary = UUID.randomUUID().toString()val fileBytes = Files.readAllBytes(Path.of("document.pdf"))val bodyBytes = buildString {  append("--$boundary
")  append("Content-Disposition: form-data; name="purpose"

assistants
")  append("--$boundary
")  append("Content-Disposition: form-data; name="file"; filename="document.pdf"
")  append("Content-Type: application/pdf

")}.toByteArray() + fileBytes + "
--$boundary--
".toByteArray()val req = HttpRequest.newBuilder()  .uri(URI.create("https://silkdock.ai/v1/files"))  .header("Authorization", "Bearer ${System.getenv("SILKDOCK_API_KEY")}")  .header("Content-Type", "multipart/form-data; boundary=$boundary")  .POST(HttpRequest.BodyPublishers.ofByteArray(bodyBytes))  .build()println(HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString()).body())
use reqwest::blocking::{Client, multipart};fn main() -> Result<(), Box<dyn std::error::Error>> {  let client = Client::new();  let auth = format!("Bearer {}", std::env::var("SILKDOCK_API_KEY")?);  // Upload  let form = multipart::Form::new()      .text("purpose", "assistants")      .file("file", "document.pdf")?;  let res = client.post("https://silkdock.ai/v1/files")      .header("Authorization", &auth)      .multipart(form)      .send()?;  println!("{}", res.text()?);  // List  let res = client.get("https://silkdock.ai/v1/files")      .header("Authorization", &auth)      .send()?;  println!("{}", res.text()?);  Ok(())}
POST /v1/files HTTP/1.1Host: silkdock.aiAuthorization: Bearer <YOUR_API_KEY>Content-Type: multipart/form-data; boundary=----boundary------boundaryContent-Disposition: form-data; name="purpose"assistants------boundaryContent-Disposition: form-data; name="file"; filename="document.pdf"Content-Type: application/pdf<binary file data>------boundary--
import 'package:http/http.dart' as http;void main() async {final headers = {  'Authorization': 'Bearer ${const String.fromEnvironment("SILKDOCK_API_KEY")}',};// Uploadfinal req = http.MultipartRequest('POST', Uri.parse('https://silkdock.ai/v1/files'))  ..headers.addAll(headers)  ..fields['purpose'] = 'assistants'  ..files.add(await http.MultipartFile.fromPath('file', 'document.pdf'));final res = await req.send();print(await res.stream.bytesToString());// Listfinal list = await http.get(Uri.parse('https://silkdock.ai/v1/files'), headers: headers);print(list.body);}
library(httr2)auth <- paste("Bearer", Sys.getenv("SILKDOCK_API_KEY"))# Uploadreq <- request("https://silkdock.ai/v1/files") |>req_headers(Authorization = auth) |>req_body_multipart(  purpose = "assistants",  file    = curl::form_file("document.pdf", type = "application/pdf"))resp <- req_perform(req)cat(resp_body_string(resp))# Listreq2 <- request("https://silkdock.ai/v1/files") |>req_headers(Authorization = auth)resp2 <- req_perform(req2)cat(resp_body_string(resp2))
(* Upload using curl subprocess *)let () =let key = Sys.getenv "SILKDOCK_API_KEY" inlet cmd = Printf.sprintf  {|curl -s -X POST https://silkdock.ai/v1/files     -H "Authorization: Bearer %s"     -F "purpose=assistants"     -F "[email protected]"|}  keyinprint_string (Unix.open_process_in cmd |> (fun ch ->  let buf = Buffer.create 256 in  (try while true do Buffer.add_channel buf ch 1 done   with End_of_file -> ());  Buffer.contents buf))

Response

{
  "id": "file-abc123",
  "object": "file",
  "bytes": 512000,
  "created_at": 1714000000,
  "filename": "document.pdf",
  "purpose": "assistants"
}

Last updated on

On this page