Retool + OpenAI API: How to Add AI to Retool internal tools (2026)
Complete integration guide for Retool and OpenAI API
Retool + OpenAI API Integration Guide 2026
Overview
This guide shows you exactly how to add AI to Retool internal tools using Retool and OpenAI API. We cover setup, core integration, and production-ready patterns.
Prerequisites
Installation
bash
Install required packages
npm install openai-api retool-sdk
or
pip install openai_api retool
Quick Setup
javascript
// Initialize OpenAI API client
import { OpenAIAPIClient } from 'openai-api';const client = new OpenAIAPIClient({
apiKey: process.env.OPENAI_API_API_KEY,
// Additional config based on your Retool setup
});
Core Integration Code
typescript
// Complete Retool + OpenAI API integration
import { OpenAI } from 'openai';
import express from 'express';// AI endpoint
app.post('/api/ai', async (req, res) => {
const { message, context } = req.body;
try {
const response = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: [
{ role: 'system', content: You are integrated with Retool. Help with add AI to Retool internal tools. },
{ role: 'user', content: message }
],
stream: false
});
res.json({
response: response.choices[0].message.content,
usage: response.usage
});
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.listen(3000);
Retool-Specific Integration
javascript
// Retool specific patterns for OpenAI API integration// Pattern 2: Service layer
class AIService {
constructor(private readonly client: typeof openai) {}
async process(input: string, systemPrompt: string = ''): Promise {
const response = await this.client.chat.completions.create({
model: 'gpt-4o-mini',
messages: [
...(systemPrompt ? [{ role: 'system' as const, content: systemPrompt }] : []),
{ role: 'user' as const, content: input }
]
});
return response.choices[0].message.content || '';
}
}
// Pattern 3: React hook (if applicable)
function useAI() {
const [response, setResponse] = useState('');
const [loading, setLoading] = useState(false);
const query = async (message: string) => {
setLoading(true);
try {
const res = await fetch('/api/ai', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ message })
});
const data = await res.json();
setResponse(data.response);
} finally {
setLoading(false);
}
};
return { response, loading, query };
}
Streaming Support
typescript
// Add streaming for better UX
app.post('/api/ai/stream', async (req, res) => {
const { message } = req.body;
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
const stream = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: [{ role: 'user', content: message }],
stream: true
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) {
res.write(data: ${JSON.stringify({ content })}\n\n);
}
}
res.write('data: [DONE]\n\n');
res.end();
});
Testing the Integration
bash
Unit test
curl -X POST http://localhost:3000/api/ai \
-H "Content-Type: application/json" \
-d '{"message": "Test message for add AI to Retool internal tools"}'Expected:
{"response": "AI response...", "usage": {...}}
Load test
ab -n 100 -c 10 -p test-payload.json -T application/json http://localhost:3000/api/ai
Production Deployment
yaml
docker-compose.yml
services:
app:
build: .
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- NODE_ENV=production
ports:
- "3000:3000"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
Common Issues
Issue: Rate limit errors Solution: Implement exponential backoff and request queuing
Issue: Slow response times Solution: Use streaming and show loading states to users
Conclusion
The Retool + OpenAI API integration is powerful and relatively straightforward. This guide gives you the foundation to add AI to Retool internal tools in production.
*Retool + OpenAI API integration guide | May 2026*
Also available in 中文.