Retool
Gate AI-initiated actions in Retool internal tools — database writes, bulk updates, and external API calls — behind a human approval step using Cheqpoint's inbound webhooks.
Use case
Retool is often used to build admin panels where AI assists with bulk data operations. Cheqpoint provides a safety valve: before your Retool Workflow executes a query that mutates data, it hits Cheqpoint and waits for a human verdict. This prevents "hallucinated" bulk edits from reaching your production database.
Prerequisites
- Retool workspace with Workflows or Apps enabled.
- Cheqpoint Connection Key.
Sample request payload — bulk role update
{
"action": "bulk_update_user_roles",
"summary": "AI tool requesting bulk role upgrade for 340 users",
"details": {
"role_from": "viewer",
"role_to": "editor",
"user_count": 340,
"filter_criteria": "active_last_30_days"
}
}Sample Cheqpoint response
{
"status": "approved",
"modifiedDetails": {
"user_count": 290,
"filter_criteria": "tenure_months > 3"
},
"decisionNote": "Approved with tighter filter — exclude recently onboarded users."
}Implementation in Retool Workflows
Use a REST API block or a JavaScript block to communicate with Cheqpoint.
// Retool Workflow JS block to gate a sensitive action
const CQ_API_KEY = process.env.CQ_API_KEY;
const response = await fetch('https://cheqpoint.co/api/webhooks/inbound', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': CQ_API_KEY
},
body: JSON.stringify({
action: "db_bulk_delete",
summary: "AI requesting deletion of inactive users",
details: {
userIds: [102, 441, 502],
reason: "Inactive for > 12 months"
}
})
});
const approval = await response.json();
if (approval.status === 'approved') {
// Use modifiedDetails if available, otherwise original
const finalIds = approval.modifiedDetails?.userIds || [102, 441, 502];
return await db_delete_query.trigger({ userIds: finalIds });
} else if (approval.status === 'pending') {
// Handle async: either poll or use a callback URL
throw new Error("Approval pending. Workflow will resume on callback.");
} else {
throw new Error(`Rejected: ${approval.decisionNote}`);
}Async handling
For long-running human reviews, pass a callbackUrl in your request. Cheqpoint will POST the decision to that URL, which can trigger a second Retool Workflow to resume the process.
Get your Connection Key at cheqpoint.co/signup.