Add a row through a public form
/public/dashboard/{token}/widget/{key}/row
No session; the token is the credential. Served in the organization's region gateway. Every failure of the link itself (unknown, paused, expired, suspended or revoked token, setting off) is 404 not_found; a form that cannot serve right now, for any reason, is the one 409 public_form_unavailable. 400 validation_error, 429 rate_limited with Retry-After, 503 unavailable. Always an INSERT, even when the widget's mode is upsert. 201, or 200 when replayed; row_id is null unless the form is a row editor on this link. 400 form_invalid with issues (a protected or undeclared field reads as "<key> isn't part of this form"; a value of the wrong shape is refused), 400 turnstile_failed, 409 public_form_duplicate for a unique-key conflict, 409 form_row_exists for a single-row form that already has its row, 409 idempotency_key_reused, 413 form_too_large (256 KB).
Path Parameters
The unguessable link token
Widget key
Query Parameters
The visitor's IANA time zone, for a read-only $today default. An unknown zone reads as UTC.
Request Body
One per submission: a retry with the same id replays the first write.
The Turnstile token (action public_form) the page solved; required when the deployment has a secret set, else 400 turnstile_failed.
Response Body
The form's success message.
curl -X POST 'https://api.elaichi.ai/public/dashboard/<token>/widget/<key>/row' \
-H 'Content-Type: application/json' \
-d '{"values":{},"submission_id":"your_submission_id","turnstile_token":"your_turnstile_token"}'const body = {
"values": {},
"submission_id": "your_submission_id",
"turnstile_token": "your_turnstile_token"
};
const response = await fetch('https://api.elaichi.ai/public/dashboard/<token>/widget/<key>/row', {
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>/row"
headers = {
"Content-Type": "application/json",
}
payload = {
"values": {},
"submission_id": "your_submission_id",
"turnstile_token": "your_turnstile_token"
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())