When building an internal tool on Tooljet, a typical picture: the database does not respond due to a firewall, the REST API returns raw data with nested objects, and security tokens lie in plain view in configs. Each of these problems can stall development for days. We have been through dozens of such projects and have developed an approach that guarantees stable connectivity and security.
In this guide, we will walk through how to configure Tooljet to work with databases (PostgreSQL, MySQL, MongoDB), REST APIs, and SaaS services while avoiding common mistakes. Tooljet cuts internal tool development time by 5x compared to a custom React UI, but only if the data sources are correctly configured. Incorrect connections lead to duplicate queries, data leaks, and wasted time.
What problems do we solve?
- N+1 queries — when each widget makes a separate database query. We optimize by combining queries and caching.
- Token security — sensitive data (API keys, passwords) often ends up in the query configuration. We adopt Constants and environment variables.
- Complex transformations — API responses contain extra fields, amounts in cents, dates in wrong formats. We use JavaScript Transformations.
- Connection errors — incorrect host, port, or SSL certificates. We test every connection via the Test Connection button and fix issues.
How we do it
We start with an audit of the sources: compile a list of all databases, APIs, and SaaS services that need to be integrated. Then we configure connections, create the first queries and transformations. One recent project — connecting PostgreSQL with 15 tables and a billing system’s REST API. Below are example configurations.
PostgreSQL setup example
Name: Production DB Host: db.example.com Port: 5432 Database: app_db Username: tooljet_ro Password: **** The Test Connection button helps catch errors before saving. After a successful test, we add queries like SELECT * FROM orders WHERE status = 'pending' and pass parameters from UI components.
REST API example (GET and POST requests)
{ "path": "/users/{{components.userIdInput.value}}", "method": "GET", "headers": { "X-Trace-Id": "{{utils.uuid()}}" } } { "path": "/orders/{{components.ordersTable.selectedRow.id}}/refund", "method": "POST", "body": { "amount": "{{components.refundInput.value}}", "reason": "{{components.refundReason.value}}", "operator": "{{currentUser.email}}" } } Constants — sensitive values (tokens, keys) are stored in Tooljet Constants, not in the query configuration.
Transformations
const raw = data.orders; return { items: raw.map(o => ({ id: o.id, date: new Date(o.created_at).toLocaleDateString('ru-RU'), amount: `${(o.total / 100).toFixed(2)} $`, status: o.status })), total: raw.length, sum: raw.reduce((s, o) => s + o.total, 0) / 100 }; Event Handling
// Run on query success await queries.getUsersList.run(); components.statusMessage.setText('Successfully updated'); setTimeout(() => components.statusMessage.setText(''), 3000); Why trust professionals with the setup?
We guarantee connection stability, data security, and post-deployment support. Our engineers hold Tooljet certifications and have experience with cloud infrastructures (AWS, Vercel, Docker). You receive:
- Documentation for every source.
- Training for your team on Tooljet.
- Technical support for 2 weeks after launch.
Process
- Analysis — we study your data sources, network constraints, and security requirements.
- Design — define query structure, transformations, and Constants configuration.
- Implementation — set up connections, write queries and transformations, test each connection.
- Testing — verify all scenarios: empty responses, errors, high loads.
- Deploy — roll out the solution in your environment, deliver documentation, and conduct training.
What's included
| Component | Description |
|---|---|
| Source configuration | Connect up to 5 databases and 3 APIs |
| Query creation | 10–15 queries with parameters and transformations |
| Constants setup | Store tokens, keys, environment variables |
| Documentation | Connection schema, query examples, instructions for adding new sources |
| Training | 2-hour session for developers |
| Support | 14 days after delivery — consultations and bug fixes |
Timeline and cost
- Basic setup (3–5 sources) — 1–2 days.
- Extended integration (up to 10 sources + custom transformations) — 3–5 days.
- Comprehensive solution (with training and support) — up to 7 days.
Save up to 40% of your developers' time — Tooljet takes over the routine.
Typical connection errors
Connection issues often arise from common mistakes. Connection refused is usually due to incorrect host or port, or a firewall block. SSL handshake failed appears with certificate problems — temporarily you can disable SSL, but for production it's better to add the correct certificate. Timeout occurs on too long queries or a slow database; the solution is to increase the timeout or optimize indexes. 401 Unauthorized — the token is expired or invalid; update it in Constants. Incorrect data in response — an error in the transformation; debug JavaScript in the Tooljet console.
Advanced setup: Tooljet in Docker with SSL
If your Tooljet runs in a container, add environment variables for SSL certificates and configure network bridges to access internal databases. A sample docker-compose can be found in the official Tooljet documentation (GitHub).
Comparison with custom solutions
| Criteria | Tooljet (our setup) | Custom React/Node.js UI |
|---|---|---|
| Development time | 1–2 days | 2–4 weeks |
| Source support | 50+ built-in | Manual integration each |
| Security | Built-in Constants | Requires own implementation |
| Updates | Automatic | Manual patching |
Order your Tooljet setup today and save up to 40% of your team's time. Leave a request for a consultation — we'll contact you within an hour.







