Export a live public table
/public/dashboard/{token}/widget/{key}/export
No session; the token is the credential. Body `{ format: "csv" | "ndjson", vc?, filters? }`: `vc` the controls as JSON (not base64), `filters` the view's `f.<key>` values as a `{ key: value }` map. The same gates and 404s as the data route, plus 403 export_not_allowed unless the author set viewer_controls.export. Streams every matching row read as the publisher (no protected field, members as "A member", the column pick applied), with Content-Disposition and Cache-Control no-store. More than 1,000,000 rows, or any failure mid-stream, aborts the connection (an NDJSON export ends with an {"_error":...} line), so a short file never looks complete. 6 exports per link and 2 per viewer per minute (429 rate_limited). Nothing is saved to Files and nothing is audited.
Path Parameters
The unguessable link token
The table widget key
Query Parameters
IANA zone for dates; an invalid one reads as UTC.
Request Body
csvndjson
curl -X POST 'https://api.elaichi.ai/public/dashboard/<token>/widget/<key>/export' \
-H 'Content-Type: application/json' \
-d '{"format":"csv","vc":{},"filters":{}}'const body = {
"format": "csv",
"vc": {},
"filters": {}
};
const response = await fetch('https://api.elaichi.ai/public/dashboard/<token>/widget/<key>/export', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(body),
});
const data = await response.json();
console.log(data);import os
import requests
url = "https://api.elaichi.ai/public/dashboard/<token>/widget/<key>/export"
headers = {
"Content-Type": "application/json",
}
payload = {
"format": "csv",
"vc": {},
"filters": {}
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())