Connect Retool to Trello using a REST API Resource targeting the Trello API (api.trello.com/1). Authenticate with an API key plus user token pair appended as URL parameters to every request. Query boards, lists, and cards to build cross-board management panels, bulk-move cards, generate custom reports, and create Retool dashboards that provide the cross-board overview Trello's native interface cannot show.
| Fact | Value |
|---|---|
| Tool | Trello |
| Category | Productivity |
| Method | REST API Resource |
| Difficulty | Beginner |
| Time required | 25 minutes |
| Last updated | April 2026 |
Why connect Retool to Trello?
Trello's interface is board-centric: you can only view one board at a time, making it impossible to see all cards due today across five different project boards without clicking through each one individually. Teams managing multiple Trello workspaces need a cross-board overview, bulk card operations, and custom reports that Trello Power-Ups and native features cannot provide at scale. Retool gives operations teams, project managers, and team leads a custom panel for managing Trello at the workspace or multi-board level.
The most impactful use case is a cross-board card overview dashboard. A single Retool Table showing all open cards across multiple boards — filtered by member, label, due date, and list — lets a team lead manage work distributed across different project boards without context-switching. Retool's Table component supports row action buttons that directly update card data through the Trello API, enabling bulk priority changes, member assignments, or list moves from a single management interface.
Trello's API follows a board → list → card hierarchy. Every card belongs to a list, every list belongs to a board. The API uses short readable IDs for most resources and provides a flexible fields parameter to control which properties are returned for each resource type. The authentication model is simple: an API key (identifying the application) plus a user token (authorizing access on behalf of a specific Trello user) sent as query parameters. This simplicity makes Trello one of the easiest APIs to integrate with Retool.
Integration method
Trello connects via Retool's REST API Resource targeting the Trello API v1 at https://api.trello.com/1. Authentication uses an API key and user token pair appended as URL parameters (key and token) to every request — Retool's Resource-level URL parameters send these credentials automatically with every query. All API requests proxy through Retool's server-side infrastructure, keeping credentials off the browser. You query boards, lists, and cards to build management panels and reporting dashboards.
Prerequisites
- A Trello account with access to the boards you want to manage
- A Trello API key generated from the Trello developer portal (trello.com/power-ups/admin)
- A Trello user token generated by authorizing the API key for your account
- The board IDs for the Trello boards you want to connect (visible in the board URL)
- A Retool account with Resource creation permissions
Step-by-step guide
Generate a Trello API key and user token
Trello authentication requires two credentials: an API key that identifies your application and a user token that authorizes access to your specific Trello account. Generating both takes about 5 minutes. In a browser, navigate to https://trello.com/power-ups/admin. Log in with your Trello account if not already logged in. Click New (or Create New) to create a new Power-Up (this is Trello's term for an application with API access). Fill in the Power-Up name (e.g., Retool Integration), workspace (select any of your workspaces), iframe connector URL (can be any placeholder like https://example.com), and email. Click Create. The Power-Up detail page shows your API key — copy it. Now generate a user token. In the same Power-Up admin page, click the API Key link to go to the API key page (https://trello.com/app-key). On that page, click the Token link under the API key. A Trello authorization page asks you to allow your application to access your Trello account. Click Allow. Trello displays a 64-character token — copy it immediately. This token authorizes API access on behalf of your Trello account. Note the board IDs for boards you want to query: open a Trello board, click Share in the top right, and the board URL contains the board ID as the last segment (e.g., in trello.com/b/BOARDID/board-name, the BOARDID is what you need). Alternatively, the /members/me/boards API endpoint returns all boards your account can access along with their IDs, which you can use to build a dynamic board selector.
Pro tip: The Trello user token is displayed only once when you click Allow on the authorization page. Copy it immediately and store it in a password manager or directly in Retool's configuration variables. If you lose it, you can regenerate a new token by repeating the authorization flow at https://trello.com/app-key.
Expected result: You have a Trello API key (a 32-character string) and a user token (a 64-character string). Both are required for all Trello API requests.
Configure the Trello API Resource in Retool
In Retool, navigate to the Resources tab and click Add Resource. Select REST API from the list. Name the resource Trello API. In the Base URL field, enter https://api.trello.com/1 — this is the Trello API v1 base URL. Trello's authentication uses URL parameters rather than headers: the API key and token are appended as query parameters to every request. In the URL Parameters section (not Headers), add two parameters that will be sent with every request. First: name key, value {{ config.TRELLO_API_KEY }}. Second: name token, value {{ config.TRELLO_USER_TOKEN }}. Create the configuration variables: navigate to Settings → Configuration Variables. Add TRELLO_API_KEY with your 32-character API key and mark it as secret. Add TRELLO_USER_TOKEN with your 64-character user token and mark it as secret. Storing both as configuration variables prevents them from appearing in browser DevTools network requests even though they are URL parameters, since Retool's server-side proxy is what actually makes the HTTP calls. Click Save on the Trello API Resource. Test the connection by creating a GET query to /members/me/boards — this returns all Trello boards accessible to your account and is a reliable authentication health check. Each board object in the response includes an id, name, and url property.
Pro tip: Even though the Trello key and token are sent as URL parameters (visible in log files), Retool's server-side proxy means they never appear in the browser's network panel. This is the key security advantage of using Retool Resource Queries over direct fetch() calls for Trello API requests.
Expected result: The Trello API Resource is saved with the base URL and key/token URL parameters configured. A test query to /members/me/boards returns a list of Trello boards, confirming credentials are valid.
Query boards, lists, and cards
Trello's data is hierarchical: boards contain lists, lists contain cards. To build a cross-board view, you need to query each level. Create a query to fetch all boards your account can access: Set Method to GET, Path to /members/me/boards, and add a fields URL parameter with value name,id,url,desc to limit the response to just the fields you need. This returns an array of board objects. Store the board list in a state variable or use it to populate a multi-select component for board filtering. Next, create a query to fetch all cards for a selected board: Path /boards/{{ boardsSelect.value }}/cards, with fields parameter value name,id,idList,idBoard,due,labels,idMembers,desc,url,pos. Add include URL parameter with value card_members to embed member information. The response is a flat array of all cards on the board regardless of which list they are in — each card includes an idList field to identify its list. Create a third query to fetch lists for the same board: Path /boards/{{ boardsSelect.value }}/lists with fields name,id,pos. Use the lists data to build a lookup map in a JavaScript transformer, mapping list IDs to list names. Join the card data with list names and member names in a JavaScript query to produce a display-ready dataset without needing to make individual per-card API calls.
1// JavaScript query: join cards with list names and format for display2// Assumes: getCards.data = cards array, getLists.data = lists array3const cards = getCards.data || [];4const lists = getLists.data || [];5const boards = getBoards.data || [];67// Build lookup maps8const listMap = {};9lists.forEach(l => { listMap[l.id] = l.name; });1011const boardMap = {};12boards.forEach(b => { boardMap[b.id] = b.name; });1314const today = new Date().toISOString().split('T')[0];1516return cards.map(card => {17 const dueDate = card.due ? card.due.substring(0, 10) : null;18 const isOverdue = dueDate && dueDate < today;1920 const labels = card.labels?.map(l => l.name || l.color).filter(Boolean) || [];21 const members = card.idMembers || [];2223 return {24 id: card.id,25 name: card.name,26 list_name: listMap[card.idList] || 'Unknown List',27 list_id: card.idList,28 board_name: boardMap[card.idBoard] || 'Unknown Board',29 board_id: card.idBoard,30 due_date: dueDate || '',31 is_overdue: isOverdue,32 due_display: dueDate || 'No due date',33 labels: labels.join(', '),34 member_count: members.length,35 url: card.url || '',36 description: card.desc || ''37 };38}).sort((a, b) => {39 // Overdue cards first, then by due date40 if (a.is_overdue && !b.is_overdue) return -1;41 if (!a.is_overdue && b.is_overdue) return 1;42 if (a.due_date && b.due_date) return a.due_date.localeCompare(b.due_date);43 return 0;44});Pro tip: Trello's /boards/{id}/cards endpoint returns all cards including archived ones by default. Add the filter URL parameter with value open to exclude archived cards and return only active, visible cards. Use filter=all to include archived cards when building audit or history reports.
Expected result: The joined JavaScript query returns cards enriched with list names and board names, sorted by overdue status and due date. The dataset is ready to bind to a Table component.
Build the cross-board management Table
With card data available, build the management dashboard. First, add a multi-select Listbox or Select component for board selection — bind its options to {{ getBoards.data.map(b => ({label: b.name, value: b.id})) }}. Wire the board Select to the cards and lists queries so they re-run when the board selection changes. Drag a Table component onto the canvas and bind it to the joined card transformer output. Configure columns: Card Name, Board, List, Due Date, Labels, and Members. Hide technical fields (id, list_id, board_id, url) from display but keep them available for action buttons. Enable column sorting on all fields. Add conditional row formatting: red background where is_overdue is true. Add Table action buttons (displayed on row hover): a Move Card button that opens a Modal containing a Select dropdown populated with available lists from getLists.data. When the modal confirms, fire a PUT query to /cards/{{ selectedCard.id }} with Body { idList: {{ moveListSelect.value }} } to move the card to the new list. Add a second action button View in Trello that opens {{ currentRow.url }} in a new tab, linking directly to the card in Trello for editing. Add filter dropdowns at the top for list name and label filtering — implement these as client-side filters in a JavaScript query wrapping the joined card data rather than separate API calls. Add Stat components showing: Total Cards, Overdue Cards, and Due Today count.
1// PUT query to move a card to a different list2// Method: PUT, Path: /cards/{{ cardsTable.selectedRow.id }}3// Body type: JSON4{5 "idList": "{{ moveListSelect.value }}",6 "pos": "bottom"7}89// PUT query to update card due date10// Method: PUT, Path: /cards/{{ cardsTable.selectedRow.id }}11// Body type: JSON12{13 "due": "{{ formatDate(newDueDatePicker.value, 'YYYY-MM-DDTHH:mm:ssZ') }}"14}1516// POST query to add a comment to a card17// Method: POST, Path: /cards/{{ cardsTable.selectedRow.id }}/actions/comments18// Body type: JSON19{20 "text": "{{ commentInput.value }}"21}Pro tip: When moving a card to a different list using PUT /cards/{id}, always include the pos parameter set to 'top' or 'bottom' to explicitly set the card's position in the new list. Without pos, Trello places the card in an undefined position based on internal ordering, which can cause cards to appear in unexpected locations.
Expected result: A cross-board management Table displays all cards with list and board context, overdue highlighting, and row actions. The Move Card action successfully moves cards between lists in Trello. Summary Stats show card counts at the top.
Add multi-board overview and member workload panel
Extend the dashboard with a multi-board overview that fetches cards from multiple boards simultaneously and combines them. Create a JavaScript query that triggers parallel fetches for each selected board using Promise.all() referencing multiple board-specific card queries, or use Retool's built-in parallel query execution by selecting multiple boards in a Retool Listbox and triggering an array of queries. Combine the results in a transformer that merges all board card arrays into one unified dataset with board name attached to each card. Drag a Bar Chart to show card count by list across all boards, giving a pipeline fill view. Add a member workload section: from the combined card dataset, aggregate cards by member ID using a JavaScript reduce. Fetch member details from /boards/{id}/members to get member names. Display a Bar Chart of card count per member to identify workload imbalance. Add a pivot Table showing member names as rows and list names as columns with card counts at the intersection — this gives a workload-by-stage view. For large-scale project management tools managing multiple workspaces, dozens of boards, and custom reporting in Retool, RapidDev's team can architect comprehensive project operations platforms.
1// JavaScript query: aggregate cards by member for workload chart2const allCards = joinedCards.data || [];3const members = getMembers.data || [];45// Build member lookup6const memberMap = {};7members.forEach(m => {8 memberMap[m.id] = m.fullName || m.username;9});1011// Count cards per member12const memberCounts = {};13allCards.forEach(card => {14 const cardMembers = card.idMembers || [];15 if (cardMembers.length === 0) {16 memberCounts['unassigned'] = (memberCounts['unassigned'] || 0) + 1;17 } else {18 cardMembers.forEach(memberId => {19 const name = memberMap[memberId] || memberId;20 memberCounts[name] = (memberCounts[name] || 0) + 1;21 });22 }23});2425return Object.entries(memberCounts)26 .map(([name, count]) => ({ member_name: name, card_count: count }))27 .sort((a, b) => b.card_count - a.card_count);Pro tip: Trello API rate limits are 300 requests per 10 seconds per API key and 100 requests per 10 seconds per token. For multi-board dashboards querying many boards in parallel, cache board-specific queries aggressively (5+ minutes) and avoid re-fetching unchanged data on every user interaction.
Expected result: The dashboard shows a multi-board overview with a unified card Table, a pipeline fill Bar Chart, and a member workload Bar Chart. Clicking a member in the workload chart filters the card Table to show that member's cards.
Common use cases
Cross-board card management panel
Build a Retool dashboard showing all cards across multiple Trello boards in a single Table. Filter controls let users narrow by board, list, assigned member, label, or due date. The Table supports inline actions: move a card to a different list (with a Select input and update button), add a member, or archive a card — all wired to Trello API update calls. A summary row shows total card counts by status.
Build a Retool cross-board Trello management panel that queries cards from 3-5 selected boards via the Trello API. Show a unified Table with card name, board name, list name, assigned members, due date, and labels. Add filter dropdowns for board, list, and member. Include row action buttons to move a card to a different list (with a list Select), and an archive button with confirmation dialog.
Copy this prompt to try it in Retool
Kanban board activity and throughput report
Create a Retool report showing cards that moved through lists over the past 30 days, with a cycle time calculation from when a card entered the first list to when it was archived or moved to Done. Query card actions to get movement history and compute throughput metrics. A Bar Chart shows cards completed per week, and a scatter plot shows cycle time distribution.
Build a Retool Trello throughput report that queries card action history for a selected board. Identify cards that moved to the 'Done' list in the past 30 days. Calculate cycle time for each card (first list entry to Done). Show a Table with card name, cycle time in days, and completion date. Add a Bar Chart of weekly completion counts and a Stat showing average cycle time.
Copy this prompt to try it in Retool
Sprint planning and workload distribution panel
Build a Retool sprint planning panel showing how many cards are assigned to each team member across all boards, grouped by list (status). Query board members, cards, and member assignments to build a workload heatmap. The panel highlights team members with more than a threshold number of assigned cards and lets a manager drag-assign cards to rebalance workload using Retool update queries.
Build a Retool Trello sprint planning panel showing open card count per member per board. Group a Table by member with columns for each board showing card count in each list. Highlight cells where count exceeds a threshold from a Number input. Include a card detail Table showing all cards for a selected member, with a member reassign Select bound to the Trello update card endpoint.
Copy this prompt to try it in Retool
Troubleshooting
API returns 401 Unauthorized on every request
Cause: The API key or user token is invalid, expired, or the token parameter name is incorrect in the Resource configuration.
Solution: Verify both the key and token URL parameters are present in the Resource configuration (not in the Headers section). Confirm the API key is the key from your Power-Up admin page, not the token. Confirm the token is the 64-character authorization token. If in doubt, revoke and regenerate the token at https://trello.com/app-key by clicking the Token link and re-authorizing. Update the TRELLO_USER_TOKEN configuration variable with the new token.
Cards query returns cards but idMembers is always an empty array
Cause: Member assignments on cards are not returned by default unless the members=true parameter is included in the query, or the fields parameter explicitly includes idMembers.
Solution: Add members=true as a URL parameter to the /boards/{id}/cards query, or ensure idMembers is included in the fields parameter value. The fields parameter must explicitly list every field you want — using it without idMembers excludes member data even if members=true is set.
PUT request to move a card returns 404 Not Found
Cause: The card ID or target list ID is incorrect, or the card has been archived and cannot be moved.
Solution: Verify the card ID comes from the current row's id field in the Table. Verify the target list ID comes from the getLists query for the same board. Archived cards cannot be moved between lists — check the Table row to confirm the card is not archived. Test the card ID by making a GET request to /cards/{id} before attempting the PUT.
Cards from archived boards appear in the board list query
Cause: The /members/me/boards endpoint returns all boards including closed (archived) boards by default.
Solution: Add filter=open as a URL parameter to the /members/me/boards query to return only open (active) boards. Use filter=all to include both open and closed boards, or filter=closed for only archived boards. Filtering at the API level is more efficient than filtering in a JavaScript transformer.
Best practices
- Store both the Trello API key and user token in Retool configuration variables marked as secret — even though Trello uses URL parameter authentication, Retool's server-side proxy ensures these values never appear in browser network traffic.
- Use the fields URL parameter on every Trello API request to limit the response to only the fields you need — returning all fields (the default) for large boards significantly increases response size and query time.
- Cache board and list data aggressively (15-30 minutes) since board structure changes infrequently — only the card data needs refreshing frequently to show current card status.
- Add the filter=open parameter to card queries to exclude archived cards unless specifically building an archive or audit view — archived cards are included by default and can significantly inflate response sizes for active boards.
- Use Retool's row action buttons for card mutations (move, archive, add member) rather than building separate form panels — row actions appear contextually on hover and keep the management interface clean.
- Implement optimistic updates for card moves: temporarily update the Table data locally after a successful PUT before re-fetching, so the card appears to move instantly rather than after the API refresh cycle.
- For multi-board dashboards, batch board queries in parallel using Retool's parallel query execution rather than sequentially — this reduces total load time proportionally with the number of boards.
Alternatives
Monday.com uses a GraphQL API with more complex query capabilities than Trello's REST API, and offers more structured project management features like dependencies, automations, and dashboards built into the platform.
Asana provides more sophisticated project management with portfolio views, dependencies, and workload management, making it better for enterprise teams with complex multi-project coordination needs.
ClickUp offers more customizable views (list, board, Gantt, calendar) and built-in time tracking, making it better for teams that want more structure than Trello's simple kanban model.
Frequently asked questions
Does the Trello user token expire, and do I need to rotate it?
Trello user tokens can be created with different expiry settings. When you generate a token through the authorization flow at https://trello.com/app-key, you can specify an expiry of 1 hour, 30 days, or Never. For a persistent Retool integration, choose Never expiry. Tokens set to Never do not automatically expire but can be manually revoked from Trello Account Settings → Applications. Update the Retool configuration variable if you ever revoke and regenerate the token.
Can I access boards from other Trello workspaces I'm a member of?
Yes. The /members/me/boards endpoint returns all boards accessible to the token's account, including boards from workspaces where you are a guest member. Add the organizations=true parameter to also include workspace metadata. The board's idOrganization field identifies which workspace it belongs to, allowing you to filter boards by workspace in your Retool dashboard.
What Trello actions can I perform from Retool beyond reading card data?
Retool can perform all Trello write operations via the API: create new cards (POST /cards), move cards between lists (PUT /cards/{id} with idList), add members to cards (POST /cards/{id}/idMembers), add labels, set due dates, add comments (POST /cards/{id}/actions/comments), archive cards (PUT /cards/{id} with closed: true), and create new boards or lists. All write operations require your user token to have write permissions on the target board.
How do I get card activity history (when was a card moved to a list)?
Fetch card actions with GET /cards/{id}/actions and filter by type=updateCard. Each action object includes a date and data.listAfter object showing which list the card moved to, and data.listBefore showing where it came from. This action history enables cycle time calculations, throughput reports, and WIP violation detection in Retool dashboards. Note that Trello stores actions for 30 days on free accounts and indefinitely on paid plans.
Can Retool send notifications or create webhooks to Trello?
Retool can create Trello webhooks via POST /webhooks with a callbackURL pointing to a Retool Workflow webhook endpoint. This enables real-time Trello-to-Retool data flow: when a card is moved or updated in Trello, Trello POSTs the action to the Retool Workflow, which can trigger database updates, Slack notifications, or other downstream actions. The webhook approach is more efficient than polling for near-real-time monitoring.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation