Skip to main content
RapidDev - Software Development Agency
retool-integrationsREST API Resource

How to Integrate Retool with TYPO3

Connect Retool to TYPO3 by creating a REST API Resource pointing to your TYPO3 instance's REST API endpoints (enabled via extensions like EXT:rest or custom backend modules). Authenticate with JWT or Basic Auth, then build visual queries in the Retool query editor to read and update CMS content, pages, and records for enterprise multi-site content management panels.

What you'll learn

  • How to enable and configure REST API access on a TYPO3 installation
  • How to create a REST API Resource in Retool with JWT or Basic Auth for TYPO3
  • How to build queries that read pages, content elements, and custom records from TYPO3
  • How to write JavaScript transformers to reshape TYPO3 API responses for Retool Tables and Charts
  • How to build a multi-site content review dashboard for enterprise TYPO3 installations
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Advanced15 min read45 minutesCMSLast updated April 2026RapidDev Engineering Team
TL;DR

Connect Retool to TYPO3 by creating a REST API Resource pointing to your TYPO3 instance's REST API endpoints (enabled via extensions like EXT:rest or custom backend modules). Authenticate with JWT or Basic Auth, then build visual queries in the Retool query editor to read and update CMS content, pages, and records for enterprise multi-site content management panels.

Quick facts about this guide
FactValue
ToolTYPO3
CategoryCMS
MethodREST API Resource
DifficultyAdvanced
Time required45 minutes
Last updatedApril 2026

Why Connect Retool to TYPO3?

TYPO3's native backend editor is powerful for content authors but can be cumbersome for operations teams who need cross-site reporting, bulk record management, or integration with other data sources. By connecting TYPO3 to Retool via its REST API, your team can build lightweight admin panels that surface the content records, page trees, and workflow states that matter most — without requiring editors to navigate TYPO3's complex backend interface.

Enterprise TYPO3 installations often span dozens of sites and languages, making cross-site content auditing difficult in the native UI. A Retool dashboard can query multiple TYPO3 siteroot pages in a single view, show translation coverage across languages, flag pages missing metadata or canonical URLs, and expose content approval queues for editorial review workflows — all within a single Retool app that can be shared with non-TYPO3 users on your team.

The integration also enables combining TYPO3 content data with other business systems. For example, you can join TYPO3 page records with analytics data from Google Analytics or your own database to build an SEO performance dashboard that shows both content status and traffic metrics side by side. Because Retool proxies all requests server-side, your TYPO3 credentials are never exposed to browser clients, and you can safely connect to internal TYPO3 instances behind a VPN or corporate firewall.

Integration method

REST API Resource

TYPO3 exposes content data through REST APIs enabled by community extensions such as EXT:rest or custom backend modules that return JSON. Retool connects by creating a REST API Resource with your TYPO3 base URL and configuring JWT Bearer Token or Basic Auth. Once configured, all API calls are proxied server-side through Retool's backend, keeping credentials off the client and eliminating CORS errors. You can then build queries in Retool's visual query editor to read pages, records, and content elements, or trigger updates through write endpoints.

Prerequisites

  • A TYPO3 installation (version 10 LTS or higher recommended) with administrative access
  • A REST API extension installed and configured on TYPO3 (e.g., EXT:rest, EXT:headless, or a custom extbase plugin exposing JSON endpoints)
  • A TYPO3 backend user or API user account with appropriate page and record access rights
  • JWT or Basic Auth credentials for the REST API, or an API token if your TYPO3 extension supports it
  • A Retool account (Cloud or self-hosted) with permission to add Resources

Step-by-step guide

1

Configure REST API access on your TYPO3 installation

Before connecting Retool, ensure your TYPO3 instance exposes a REST API. TYPO3 does not include a built-in REST API by default — you need a backend extension to enable JSON endpoints. The most common options are EXT:rest (the typo3-rest-api extension from TYPO3 Packagist), EXT:headless (for headless TYPO3 with JSON responses), or a custom Extbase plugin controller configured to return JSON output. If using EXT:rest, install it via Composer in your TYPO3 project root and activate it in the TYPO3 Extension Manager. Configure the allowed resources in the extension's TypoScript setup — at minimum, allow access to the 'pages' and 'tt_content' tables. Set up an API user account in the TYPO3 backend (Admin panel → Backend Users) with limited permissions: read access to the pages and content tables you need, and optionally write access if you plan to update records from Retool. For JWT authentication (recommended over Basic Auth), configure EXT:rest or your chosen extension to issue JWT tokens via a /auth endpoint when supplied with a backend username and password. Note the base URL pattern your TYPO3 extension uses — typically something like https://your-typo3-site.com/api/v1/ or https://your-typo3-site.com/rest/. Write down this base URL, your API username, and your password or JWT token for use in the next step.

Pro tip: If you cannot install a REST extension, TYPO3's eID mechanism or a simple Extbase controller returning JSON can serve as a lightweight API. Point your Retool resource at the eID URL with a type parameter, and send the eID identifier as a query parameter.

Expected result: Visiting your TYPO3 REST API endpoint (e.g., https://your-typo3-site.com/api/v1/pages) in a browser or API client returns a JSON response with page records, confirming the API is active and accessible.

2

Create a REST API Resource in Retool for TYPO3

Open Retool and navigate to the Resources tab in the left sidebar (or click Resources in the top navigation of the Retool home page). Click the blue Add Resource button in the top right. In the resource type search field, type 'REST' and select REST API from the list. This opens the REST API resource configuration form. In the Base URL field, enter your TYPO3 API base URL — for example, https://your-typo3-site.com/api/v1/. This base URL will be prepended to all query paths you define later. For authentication, scroll to the Authentication section and choose your method: If using JWT Bearer Token: Select 'Bearer Token' from the authentication dropdown. In the Token field, enter your JWT token directly, or reference a Retool configuration variable with {{ retoolContext.configVars.TYPO3_JWT_TOKEN }}. JWT tokens typically expire, so plan for token refresh — you can store a long-lived refresh token in a configuration variable and use a pre-query JavaScript step to fetch a fresh token if needed. If using Basic Auth: Select 'Basic Auth' from the authentication dropdown. Enter the TYPO3 backend username and password. Retool will Base64-encode these and send them as an Authorization header with every request. Add any global headers your TYPO3 extension requires, such as 'Accept: application/json' or a custom API version header. Give the resource a descriptive name like 'TYPO3 Production API' and click Save Changes.

Pro tip: Store your TYPO3 JWT token or Basic Auth password in a Retool configuration variable (Settings → Configuration Variables, mark as secret) rather than pasting it directly into the resource form. This prevents credentials from being visible in the resource configuration UI to non-admin Retool users.

Expected result: The TYPO3 REST API Resource appears in your Resources list. When you test a query against it, you receive a valid JSON response from TYPO3 without authentication errors.

3

Build a query to fetch TYPO3 page records

With the resource configured, open or create a Retool app. In the bottom Code panel, click the + button to create a new query. Select your TYPO3 REST API resource from the Resource dropdown. The query editor switches to REST API mode, showing Method, Path, Query Params, Headers, and Body sections. Set the HTTP method to GET. In the Path field, enter the endpoint path for pages — typically /pages or /pages/list depending on your TYPO3 extension. Add query parameters to control the response: - limit: set to {{ pagination.pageSize || 50 }} to support pagination - offset: set to {{ (pagination.page - 1) * pagination.pageSize || 0 }} - site: optionally filter by TYPO3 site root UID - language: optionally filter by sys_language_uid for multilingual installations Click the Advanced tab on the query and add a JavaScript transformer to reshape the API response into a flat array suitable for Retool's Table component. TYPO3 REST APIs often return nested JSON with metadata wrappers. Set the query's Run mode to 'Automatically run when inputs change' so the table refreshes when pagination changes. Drag a Table component from the Component panel onto your app canvas. Set the Table's Data property to {{ pagesQuery.data }} (replace with your actual query name). Configure the Table columns to show relevant fields: uid, title, slug, lastModified, hidden, and siteRootTitle.

pagesTransformer.js
1// JavaScript transformer to reshape TYPO3 pages API response
2// Add this as a transformer on the pages query
3const response = data; // raw TYPO3 API response
4// TYPO3 REST APIs often wrap results in a data or results key
5const pages = Array.isArray(response) ? response : (response.data || response.results || []);
6return pages.map(page => ({
7 uid: page.uid,
8 title: page.title || '(no title)',
9 slug: page.slug || '',
10 lastModified: page.tstamp ? new Date(page.tstamp * 1000).toLocaleDateString() : 'Unknown',
11 hidden: page.hidden === 1 ? 'Hidden' : 'Visible',
12 navTitle: page.nav_title || '',
13 seoTitle: page.seo_title || '',
14 languageUid: page.sys_language_uid || 0
15}));

Pro tip: TYPO3 stores timestamps as Unix epoch integers (tstamp field), not ISO strings. Always multiply by 1000 before passing to JavaScript Date() constructor to get the correct date.

Expected result: A Table component in your Retool app displays TYPO3 page records with readable column values. Pagination controls navigate through the full page tree.

4

Query content elements (tt_content) for a selected page

To build a content review panel, create a second query that fetches tt_content (content elements) for whichever page is selected in the pages table. This creates a master-detail layout common in editorial workflows. In the Code panel, create a new query targeting your TYPO3 REST API resource. Set Method to GET and Path to /content or /tt_content (depending on your TYPO3 extension's routing). Add a query parameter: - pid: set to {{ table1.selectedRow.uid }} — this references the UID of the row selected in your pages table - language: set to {{ languageSelect.value || 0 }} to filter by language In the query's trigger settings, enable 'Automatically run when inputs change' and check 'Only run when all referenced variables have valid values'. This prevents the query from running when no page is selected (which would send pid as undefined). Create a second Table component on your canvas for content elements. Set its Data to {{ contentQuery.data }}. Configure columns for: uid, CType (content element type), header, bodytext preview (truncated), colPos (column position), and sorting order. Add a Text component below the tables that shows the full bodytext of the selected content element: {{ contentTable.selectedRow.bodytext }}. For complex content types like EXT:flux-based FCE elements or EXT:gridelements, your transformer may need to handle nested data structures specific to your TYPO3 setup.

contentTransformer.js
1// Transformer for tt_content records
2const items = Array.isArray(data) ? data : (data.data || data.results || []);
3return items.map(el => ({
4 uid: el.uid,
5 type: el.CType || el.ctype || 'unknown',
6 header: el.header || '(no header)',
7 bodyPreview: el.bodytext ? el.bodytext.substring(0, 120) + '...' : '',
8 bodytext: el.bodytext || '',
9 colPos: el.colPos,
10 sorting: el.sorting,
11 hidden: el.hidden === 1 ? 'Hidden' : 'Visible',
12 language: el.sys_language_uid
13}));

Pro tip: If your TYPO3 extension does not expose tt_content via REST, you can query TYPO3's database directly through a separate Retool database resource pointing to the TYPO3 MySQL or PostgreSQL database — this gives you full SQL query flexibility over all TYPO3 tables.

Expected result: Selecting a page row in the first table triggers the content elements query. The second table populates with all tt_content records belonging to that page. Selecting a content row shows its full body text.

5

Update a TYPO3 record and handle the response

For write operations — such as approving content by setting hidden=0, updating SEO metadata, or changing page properties — configure a query with HTTP method PATCH or PUT against your TYPO3 REST API's update endpoint. Create a new query in the Code panel. Set Method to PATCH. Set Path to /pages/{{ table1.selectedRow.uid }} (or the appropriate update endpoint for your extension). In the Body section, select JSON as the body type and enter the fields to update: Add a Form component to your canvas with input fields for seo_title, nav_title, and a hidden toggle checkbox. Bind the form fields to the PATCH query body using dynamic references: {{ form1.data.seo_title }}, {{ form1.data.nav_title }}, and {{ form1.data.hidden ? 1 : 0 }}. Set the query Trigger to Manual (not Auto). Wire a Save button's click event handler to trigger this PATCH query. In the query's Success event handler, add a second action to re-run your pages query (to refresh the table with updated values) and show a Retool success notification. In the query's Failure event handler, add a Show notification action with error severity so users see the TYPO3 API error message. Reference {{ query5.error.message }} in the notification body to show the actual error. For complex integrations involving multiple Resources, custom transformers, and Workflows, RapidDev's team can help architect and build your Retool solution.

updatePageBody.json
1{
2 "seo_title": "{{ form1.data.seo_title }}",
3 "nav_title": "{{ form1.data.nav_title }}",
4 "hidden": {{ form1.data.hidden ? 1 : 0 }},
5 "tstamp": {{ Math.floor(Date.now() / 1000) }}
6}

Pro tip: If your TYPO3 REST extension requires a CSRF token or session-based authentication for write operations, use Retool's Custom Auth to first fetch a token via a login endpoint, store it in a variable, and inject it as a header in subsequent write queries.

Expected result: Submitting the update form sends a PATCH request to TYPO3. The pages table refreshes and shows the updated SEO title and hidden status. A success notification confirms the save.

Common use cases

Build a multi-site content audit dashboard

Create a Retool dashboard that queries all TYPO3 page records across multiple site roots, displaying page title, last modification date, content author, and SEO metadata status. Editors can filter by site, language, or content type and click into any record to review its content elements. This gives content managers a cross-site overview that would require dozens of separate TYPO3 backend sessions to replicate natively.

Retool Prompt

Build a content audit panel that queries all pages from the TYPO3 REST API, displays them in a Table with columns for uid, title, slug, last_modification, and seo_title, with filters for site_root and sys_language_uid. Add a detail panel that shows page content elements when a row is selected.

Copy this prompt to try it in Retool

Content translation status tracker

Build a Retool app that shows which pages have been translated into each configured language and which are still showing the default language fallback. The dashboard lists all pages with a colored indicator for each language's translation state — translated, outdated, or missing. Content managers can use this panel to prioritize translation work without manually checking each page in TYPO3's backend.

Retool Prompt

Create a translation tracker that fetches pages from the TYPO3 API for each sys_language_uid (0=EN, 1=DE, 2=FR), then uses a JavaScript transformer to produce a matrix of page uid vs. language showing translation coverage. Display as a Table with conditional row coloring based on missing translations.

Copy this prompt to try it in Retool

Editorial workflow approval queue

Create a content approval panel that pulls TYPO3 page and content element records with a custom hidden/disabled workflow flag. Editorial managers can review pending content, preview the page URL, and approve or reject records by calling TYPO3's update endpoints. The panel replaces manual TYPO3 backend approvals with a streamlined queue that can notify reviewers via a connected Slack resource when new items appear.

Retool Prompt

Build an editorial approval panel that fetches TYPO3 page records with hidden=1 and shows them in a Table with approve and reject buttons. On approve, call the TYPO3 REST API PATCH endpoint to set hidden=0, then trigger a Slack notification with the page title and URL.

Copy this prompt to try it in Retool

Troubleshooting

All API requests return 401 Unauthorized or 403 Forbidden despite correct credentials

Cause: The TYPO3 backend user account may not have sufficient permissions for the tables being accessed, or the REST extension requires a specific user group membership. Alternatively, JWT tokens may have expired if they have a short TTL.

Solution: In the TYPO3 backend, verify the API user account has read/write access to the relevant tables (pages, tt_content) under Access Lists in the backend user configuration. If using JWT, check the token's expiry and refresh it. For EXT:rest, ensure the tables are listed in the extension's allowed resources TypoScript configuration.

API requests time out or return 'Connection refused' when Retool is in Cloud mode

Cause: Your TYPO3 instance is hosted on a private network or behind a corporate firewall that blocks inbound requests from Retool Cloud's IP ranges.

Solution: Whitelist Retool Cloud's outbound IP CIDR ranges (35.90.103.132/30 and 44.208.168.68/30 for us-west-2) in your firewall or TYPO3 server's iptables rules. Alternatively, deploy a self-hosted Retool instance within your private network for direct connectivity without IP whitelisting.

TYPO3 API returns HTML error page instead of JSON (500 Internal Server Error with HTML body)

Cause: TYPO3's REST extension encountered a PHP error and TYPO3 rendered its default error page as HTML instead of a JSON error response. This often happens when a required extension is not installed or a TypoScript configuration is missing.

Solution: Enable TYPO3 debug mode temporarily (set $GLOBALS['TYPO3_CONF_VARS']['SYS']['displayErrors'] = 1 in LocalConfiguration.php) and check the TYPO3 backend log (Admin panel → Log). Fix the underlying PHP or TypoScript error. Also ensure your REST extension's JSON content-type header is set — add 'Accept: application/json' as a global header in the Retool resource configuration to signal that you expect JSON.

Page record fields like bodytext or seo_title are missing from the API response

Cause: Many TYPO3 REST extensions expose only a default set of fields and require explicit configuration to include additional columns from the pages or tt_content tables.

Solution: Check your REST extension's TypoScript configuration for a fieldset or allowedFields setting. For EXT:rest, add the desired fields to the resource definition in setup.typoscript. For custom endpoints, update your Extbase action to include the additional fields in the returned data transfer object.

Best practices

  • Create a dedicated TYPO3 backend user for Retool API access with the minimum required permissions — read-only access for dashboards, specific write permissions only for fields Retool will update.
  • Store JWT tokens and Basic Auth passwords in Retool configuration variables (Settings → Configuration Variables, marked as secret) rather than hardcoding them in resource or query configurations.
  • Use Retool's pagination parameters in your TYPO3 API queries (limit + offset) to avoid loading thousands of page records at once — TYPO3 installations can have very large page trees.
  • Always add a JavaScript transformer to normalize TYPO3's API responses into flat arrays before binding to Retool Table components, since TYPO3 extensions vary in their response envelope structure.
  • Build separate read and write queries — one GET query for fetching records, separate PATCH/PUT queries for updates — and set write queries to Manual trigger mode to prevent accidental modifications.
  • Test all integration patterns against a TYPO3 staging environment before connecting to production, since TYPO3 REST extensions may behave differently across TYPO3 versions and extension configurations.
  • For multi-site TYPO3 installations, add a site selector component to your Retool dashboard that filters by siteroot page UID, keeping the displayed data scoped to the relevant site.

Alternatives

Frequently asked questions

Does TYPO3 have a built-in REST API that Retool can connect to?

TYPO3 does not ship with a built-in REST API in its core. You need to install a community extension such as EXT:rest, EXT:headless, or build a custom Extbase controller that returns JSON responses. TYPO3 v12+ introduced a JSON API for the backend, but frontend REST access still requires an extension or custom implementation.

Can Retool connect to TYPO3's database directly instead of using the REST API?

Yes. TYPO3 uses MySQL or PostgreSQL as its database backend. You can create a database Resource in Retool pointing directly to the TYPO3 database and write SQL queries against tables like pages, tt_content, sys_file, and fe_users. This gives you full query flexibility but bypasses TYPO3's permission model — use a read-only database user for dashboards to prevent accidental data modification.

How do I handle TYPO3's multi-language content in a Retool dashboard?

TYPO3 stores language variants as separate records with a sys_language_uid field. Add a language selector component (Select or RadioGroup) to your Retool app and filter your API queries by {{ languageSelect.value }}. For translation coverage reporting, fetch records for each language UID in separate queries and use a JavaScript transformer to merge and compare the results.

Is it safe to use Retool Cloud with an internal TYPO3 installation?

Retool Cloud proxies all API requests through its server-side backend, so your TYPO3 credentials never reach browser clients. However, your TYPO3 server must be accessible from Retool Cloud's outbound IP ranges (published on Retool's documentation). For fully private TYPO3 installations, use self-hosted Retool deployed in the same private network as your TYPO3 server to avoid exposing any endpoints to the internet.

Can I trigger TYPO3 cache clearing from Retool?

Yes, if your TYPO3 REST extension or custom endpoint exposes a cache flush endpoint, you can create a POST query in Retool that calls it and wire it to a 'Clear Cache' button in your admin panel. TYPO3's backend API (available in v12+) also exposes cache management endpoints that can be triggered with appropriate backend user credentials.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Integrations are where projects stall

We wire Retool integrations like this one every week — auth, webhooks, edge cases included. Fixed-price builds from $13K, delivered in 6–10 weeks.

Talk to an integration engineer

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.