Re-capture a public link snapshot as you
/dashboard/{id}/public-link/{linkId}/refresh
Body `{ consent }` is the reviewed refresh (Update now): re-captures as you, takes the link over and brings a suspended link back; captured with the link's own switches, so it neither adds forms nor takes them away, and `consent.editable_widget_keys` is required while rows_editable is on. Body `{}` refreshes the data only, keeping what the current publisher agreed to: needs `can_refresh_now` (a live link whose current publisher is you), changes nothing about who publishes, and never turns a link on or changes `live_tables` or the form switches (so `live_tables` needs a consent; 400 otherwise). 403 public_link_not_publisher, 409 public_link_expired / public_link_not_active / public_link_dashboard_changed (review it and use Update now) / public_link_switched (forms or row edits were switched while it ran; try again).
Path Parameters
Resource id
Resource id
Request Body
The revision the preview was made from.
The forms whose rows visitors may see and change: a second, separate agreement, required when row edits are on.
The widgets the preview showed.
Only with consent. The refresher becomes the publisher, so live queries would run as them. Absent: kept only if the refresher already was the publisher, otherwise switched off.
Response Body
Only the link's current publisher (the person whose Update now made its current copy) may change how it updates; everyone else with can_refresh takes it over with refresh first.
can_refresh, the link not expired, and form_count above 0.
May the caller switch live_tables on: the same rule as can_change_refresh. Switching off needs only can_manage.
Also needs forms on and edit_form_count above 0.
May the caller refresh the data now without a review: the link is live and the caller is its current publisher. Everyone else uses refresh with a consent, which takes the link over.
Forms on the link's pages whose edit_rows is not off.
At most 5 workflows that write a collection the dashboard reads, among those the caller may see.
Form widgets on the link's pages of the published dashboard; 0 means there is nothing to switch on.
Visitors may fill in the dashboard's forms.
With forms on and the link live: why entries are refused right now, one sentence; null when they are taken.
Viewers may filter, sort, page and export the link's tables live; every query runs as the publisher (snapshot_by).
When the next capture of this link is due, or null when none is waiting. Reflects only the requests the link has received: a workflow run that finishes inside the workflow's own 15-minute gap arms a timer first and has not asked yet, so the link can show nothing pending for up to 15 minutes after such a run.
automationinterval
manualautomationinterval
Set exactly when refresh is interval.
161224null
Why next_refresh_at is waiting: a workflow run asked inside the 15-minute minimum gap since the last capture (min_gap), the last capture failed and is retried (retry_after_failure), or the link's own schedule (interval).
min_gapretry_after_failureintervalnull
Visitors may see and change the rows of the link's editable forms.
When the copy that is being served was captured.
activepausedsuspendedexpiredrevoked
publisher_invalidpublisher_leftsettings_offdashboard_changednull
curl -X POST 'https://api.elaichi.ai/dashboard/<id>/public-link/<linkId>/refresh' \
-H 'Authorization: Bearer $ELAICHI_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"consent":{},"live_tables":true}'const body = {
"consent": {},
"live_tables": true
};
const response = await fetch('https://api.elaichi.ai/dashboard/<id>/public-link/<linkId>/refresh', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + process.env.ELAICHI_API_TOKEN,
'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/dashboard/<id>/public-link/<linkId>/refresh"
headers = {
"Authorization": f"Bearer {os.environ['ELAICHI_API_TOKEN']}",
"Content-Type": "application/json",
}
payload = {
"consent": {},
"live_tables": True
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())