curl --request GET \
--url 'https://www.rundesert.com/p/{workspaceId}/~file/{filePath}'import requests
url = "https://www.rundesert.com/p/{workspaceId}/~file/{filePath}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://www.rundesert.com/p/{workspaceId}/~file/{filePath}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.rundesert.com/p/{workspaceId}/~file/{filePath}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.rundesert.com/p/{workspaceId}/~file/{filePath}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.rundesert.com/p/{workspaceId}/~file/{filePath}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.rundesert.com/p/{workspaceId}/~file/{filePath}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"error": "rate limited"
}{
"error": "<string>",
"detail": "<string>"
}Download a file
Files an automation produced: PDFs, photographs, spreadsheets.
~file is not a folder. It is a marker the platform reads and removes before passing the rest of the path to your workspace, so /~file/api/reports/x.pdf and /api/reports/x.pdf reach the same handler. The difference is who carries the bytes.
With ~file, the platform wakes the workspace if it is asleep and then redirects you to it, so the download goes straight from the workspace to you. Without it, the file is relayed through the platform and is capped at 4MB.
Follow the redirect. Every HTTP client does by default.
The only endpoint that needs no API key. A file link is made to be clicked, and a browser following a link cannot be asked to set a header — so the unguessable URL is the whole credential here. Treat a file link like the file itself.
curl --request GET \
--url 'https://www.rundesert.com/p/{workspaceId}/~file/{filePath}'import requests
url = "https://www.rundesert.com/p/{workspaceId}/~file/{filePath}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://www.rundesert.com/p/{workspaceId}/~file/{filePath}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.rundesert.com/p/{workspaceId}/~file/{filePath}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.rundesert.com/p/{workspaceId}/~file/{filePath}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.rundesert.com/p/{workspaceId}/~file/{filePath}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.rundesert.com/p/{workspaceId}/~file/{filePath}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"error": "rate limited"
}{
"error": "<string>",
"detail": "<string>"
}Path Parameters
The path your workspace serves the file at, slashes and all, for example api/reports/report-2026-08-20.pdf.
Response
Follow the Location header to the workspace, which is now awake.