Download file

Download current file bytes. Generated documents use compiled artifacts, returning 409 while compiling and 413 above the rendered-size ceiling. Downloading records an audit event. HEAD checks access with the same authorization as GET but skips side effects, returning an empty 200 without payload headers on success. HEAD omits Content-Length and cannot determine the download size.

OAuth scope: api:read.

GET/api/v2/files/{fileId}
X-API-Key<token>

Send a personal or workspace API key in X-API-Key. See key types and access; operations that reject workspace keys say so in their description.

In: header

Request examples use an API key. For OAuth, replace the X-API-Key header with Authorization: Bearer YOUR_ACCESS_TOKEN.

curl -X GET "https://www.sim.ai/api/v2/files/string?workspaceId=string" \  -H "X-API-Key: YOUR_API_KEY"
fetch("https://www.sim.ai/api/v2/files/string?workspaceId=string", {  method: "GET",  headers: {    "X-API-Key": "YOUR_API_KEY"  }})
package mainimport (  "fmt"  "net/http"  "io/ioutil")func main() {  url := "https://www.sim.ai/api/v2/files/string?workspaceId=string"  req, _ := http.NewRequest("GET", url, nil)  req.Header.Add("X-API-Key", "YOUR_API_KEY")  res, _ := http.DefaultClient.Do(req)  defer res.Body.Close()  body, _ := ioutil.ReadAll(res.Body)  fmt.Println(res)  fmt.Println(string(body))}
import requestsurl = "https://www.sim.ai/api/v2/files/string?workspaceId=string"response = requests.request("GET", url, headers = {  "X-API-Key": "YOUR_API_KEY"})print(response.text)
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.net.http.HttpResponse.BodyHandlers;import java.time.Duration;HttpClient client = HttpClient.newBuilder()  .connectTimeout(Duration.ofSeconds(10))  .build();HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()  .uri(URI.create("https://www.sim.ai/api/v2/files/string?workspaceId=string"))  .header("X-API-Key", "YOUR_API_KEY")  .GET()  .build();try {  HttpResponse<String> response = client.send(requestBuilder.build(), BodyHandlers.ofString());  System.out.println("Status code: " + response.statusCode());  System.out.println("Response body: " + response.body());} catch (Exception e) {  e.printStackTrace();}
using System;using System.Net.Http;using System.Text;var client = new HttpClient();client.DefaultRequestHeaders.Add("X-API-Key", "YOUR_API_KEY");var response = await client.GetAsync("https://www.sim.ai/api/v2/files/string?workspaceId=string");var responseBody = await response.Content.ReadAsStringAsync();
"string"
{
  "error": {
    "code": "BAD_REQUEST",
    "message": "Invalid request"
  }
}
{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Authentication required"
  }
}
{
  "error": {
    "code": "FORBIDDEN",
    "message": "Insufficient workspace permissions",
    "details": {
      "code": "INSUFFICIENT_WORKSPACE_ROLE"
    }
  }
}
{
  "error": {
    "code": "NOT_FOUND",
    "message": "Not found"
  }
}
{
  "error": {
    "code": "CONFLICT",
    "message": "The request conflicts with the current resource state"
  }
}
{
  "error": {
    "code": "PAYLOAD_TOO_LARGE",
    "message": "Request body is too large"
  }
}
{
  "error": {
    "code": "RATE_LIMITED",
    "message": "API rate limit exceeded",
    "details": {
      "retryAfter": "2026-01-01T00:00:30.000Z"
    }
  }
}
{
  "error": {
    "code": "INTERNAL_ERROR",
    "message": "Internal server error"
  }
}
{
  "error": {
    "code": "SERVICE_UNAVAILABLE",
    "message": "Service temporarily unavailable"
  }
}

Path parameters

fileId*string

File identifier.

Match^[A-Za-z0-9_-]+$
Length1 <= length <= 128

Query parameters

workspaceId*string

Workspace that owns the file.

Length1 <= length <= 128

Response body

application/octet-stream

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json