Setting Up Tooljet for Data Sources
Tooljet supports a wide range of data sources: relational databases, NoSQL, REST API, GraphQL, cloud services, SaaS tools.
Supported Data Sources
Databases: PostgreSQL, MySQL, MSSQL, MongoDB, Redis, InfluxDB, CouchDB, Elasticsearch
Cloud: AWS S3, Google Sheets, BigQuery, Firestore, DynamoDB
SaaS: Stripe, Twilio, Slack, GitHub, Notion, Airtable, Mailgun
PostgreSQL Datasource
Name: Production DB
Host: db.example.com
Port: 5432
Database: app_db
Username: tooljet_ro
Password: ****
Test connection—"Test Connection" button before saving.
REST API Datasource
Name: Internal API
Base URL: https://api.internal.example.com
Authentication: Bearer Token
Token: {{ constants.API_TOKEN }}
Headers:
X-Client: tooljet
Accept: application/json
Using Constants—sensitive values (tokens, keys) stored in Tooljet Constants (like env variables), not in query config.
Parameterized Query
// REST GET request
{
"path": "/users/{{components.userIdInput.value}}",
"headers": {
"X-Trace-Id": "{{utils.uuid()}}"
}
}
// REST POST request
{
"path": "/orders/{{components.ordersTable.selectedRow.id}}/refund",
"body": {
"amount": "{{components.refundInput.value}}",
"reason": "{{components.refundReason.value}}",
"operator": "{{currentUser.email}}"
}
}
Transformations
// Transform API response
const raw = data.orders;
return {
items: raw.map(o => ({
id: o.id,
date: new Date(o.created_at).toLocaleDateString('en-US'),
amount: `${(o.total / 100).toFixed(2)} USD`,
status: o.status
})),
total: raw.length,
sum: raw.reduce((s, o) => s + o.total, 0) / 100
};
Event Handling
// Run on query success
// Refresh table after successful action
await queries.getUsersList.run();
components.statusMessage.setText('Updated successfully');
setTimeout(() => components.statusMessage.setText(''), 3000);
Timeline
Setup 3–5 data sources + initial queries — 1 day.







