API
Files
Upload and manage files for use with other API features.
Operations
| Method | Path | Description |
|---|---|---|
POST | /v1/files | Upload a file. |
GET | /v1/files | List uploaded files. |
GET | /v1/files/{file_id} | Retrieve file metadata. |
DELETE | /v1/files/{file_id} | Delete a file. |
Upload Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
file | file | Yes | File to upload (multipart/form-data). |
purpose | string | Yes | Intended 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) }.bodyimport 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