# Setting up an AI agent for your app
Source: https://docs.base44.com/Building-your-app/AI-agents-for-apps
Turn chats into smart assistants that take action, connect to tools, and help you get more done in your Base44 app.
AI agents turn simple chats into actions in your Base44 app. Instead of only replying with text, they update records, trigger workflows, and connect to tools so you can run more of your process through one conversation.
Each agent understands your app's data and can search the web, call backend functions, and follow detailed guidelines you define. You can shape its tone and persona, decide which tools it can use, and choose the AI model that powers its reasoning. By default, agents use an **Automatic** model that is optimized for fast, cost-effective responses, so everything keeps working the same as before unless you decide to change it.
Memory is on by default for new agents, so every interaction feels more personal and consistent from the start. Your agent can remember important details across conversations, such as preferences, past choices, or shared knowledge, and bring that context back the next time someone reaches out.
Agents automatically figure out which tool to use based on your app and request.
Examples:
* "Mark my summer vacation booking as done" → uses the **update\_task** tool.
* "What was the most visited location in Europe in 2024?" → uses the **google\_search** tool.
* "Add 15 new tasks" → uses the **insert\_task\_records** tool.
***
## Setting up an AI agent
Before you can start working with AI agents, you need to enable them in your app dashboard. Then you can start creating them using the AI chat.
You can enable agents for all new apps by default in your account settings in your workspace.
When you chat with an AI agent, Base44 uses **integration credits**. Pricing starts at around **3 integration credits per message** with the default model and then varies based on the model you select and the length of the response.
**To set up an AI agent:**
1. Go to **Dashboard** in your app editor.
2. Click **Agents**.
3. Choose a suggested agent template or click **Create from scratch** to define your own.
**Tips:**
* Use a suggested template to get started quickly with a pre-built agent role and instructions you can customize.
* If you choose **Create from scratch**, describe what you want in the AI chat and the agent will be built based on your input.
* You can enable agents for all new apps by default in your account settings.
***
## Customizing your AI agent
Each agent has its own configuration panel with the following sections:
* **Guidelines:** Define the agent's behavior, persona, AI model, and context files.
* **Tools:** Control what data and tools the agent can use.
* **Connectors:** Let app users connect their own external accounts to the agent via OAuth.
* **Skills:** Add reusable instruction sets that give the agent specific behaviors or expertise.
* **Memory:** Decide how the agent remembers information across conversations.
* **WhatsApp:** Connect the agent to WhatsApp so people can chat from their phone.
* **Telegram:** Connect the agent to Telegram so people can chat from anywhere.
* **LINE:** Connect the agent to LINE so people can chat from the LINE app.
### Configuring guidelines
Use the **Guidelines** tab to set how your agent behaves and which AI model it uses.
**To customize your agent's guidelines:**
1. Go to **Dashboard** in your app editor.
2. Click **Agents**.
3. Click **Edit Agent** on the relevant agent.
4. Click **Guidelines**.
5. Update the **Description** to define the agent's role and high-level behavior.
6. Update **Instructions** with detailed rules your agent should follow.
7. Under **Context Files**, click **Upload files** or **Choose from library** to add reference material the agent can use to answer questions. For example, product manuals, pricing documents, policies, or FAQs. You can add up to 10 files.
8. Under **AI Model**, select the model that powers your agent. Keep **Automatic** selected for fast, cost-effective responses, or choose a model from Google Gemini, OpenAI GPT, or Anthropic Claude for more advanced reasoning.
9. Click **Save**.
For most agents you can use the **Automatic** option. It is optimized for general-purpose tasks and interactive workflows and typically costs about **3 integration credits per message**.
If you need more control, you can pick a different model. Below is an estimation of credit usage with different models:
| Model | Best for | Approx. credits / message |
| -------------- | -------------------------------------------- | ------------------------- |
| Automatic | General-purpose, fast responses | \~3 |
| Gemini 3 Flash | Stronger reasoning at moderate cost | \~5 |
| GPT-5.5 | Complex analysis and accuracy-critical tasks | \~40 |
Credits are approximate and vary based on response length. Lighter models use fewer credits, while more powerful models use more. You can switch models at any time if your needs change.
If you are not sure which model to use, leave **Automatic** selected. You can always move to a more powerful model later for advanced reasoning or analysis-heavy workflows.
### Allowing anonymous access
By default, people need to log in to your app before they can use an agent. You can let visitors chat with an agent without signing in by turning on anonymous access for that agent, so anyone can start a conversation straight away.
You can view anonymous conversations in the **Users** tab in your **Agents** dashboard, just like logged-in user conversations. [See how to view agent conversations.](#viewing-who-uses-your-agents)
When anonymous access is on, visitors can chat with the agent without signing in, on the web and on connected channels (WhatsApp and Telegram). Anonymous users can't access per-user private data, so keep this off for agents that manage personal data. Anonymous conversations also draw integration credits from your workspace pool, the same as logged-in users, so only turn this on for agents you want open to everyone. The setting is off by default and you control it per agent.
**To allow anonymous access for an agent:**
1. Go to **Dashboard** in your app editor.
2. Click **Agents**.
3. Click **Edit Agent** on the relevant agent.
4. Click **Guidelines**.
5. Turn on the **Allow anonymous access** toggle.
6. Click **Save**.
### Managing tools and data access
Use the **Tools** tab to decide what your agent can do and which data it can access.
You can ask the AI chat to add or update tools for your agent. Describe what you want the agent to do and the AI configures the right tools automatically, without you having to set them up in the **Tools** tab.
**To manage an agent's tools:**
1. Go to **Dashboard** in your app editor.
2. Click **Agents**.
3. Click **Edit Agent** on the relevant agent.
4. Click **Tools**.
5. Choose which tools the agent can use. For example:
* Entity tools to create, read, update, or delete records.
* Backend functions to send notifications, trigger automations, or call external APIs.
6. Adjust any tool-specific permissions so the agent only accesses the data it needs.
7. Click **Save**.
You can add or remove tools at any time as your app evolves. For example, you might start with read-only entity tools and later allow updates once you have tested the agent.
### Adding user connectors
Use the **Connectors** tab to let your app users connect their own external accounts to the agent. When a connector is enabled, the agent can create OAuth connect links so each person can authorize access to their own account in that service directly from a conversation.
For example, in a travel advisor app, each user could connect their own Google Calendar so the agent can plan and schedule itineraries on their behalf.
[Learn more about setting up connectors for app users.](https://docs.base44.com/Integrations/user-connectors)
**To add a user connector for your agent:**
1. In the AI chat, ask the agent to add a user connector, for example: `I want my app users to connect their own LinkedIn account to this agent.`
2. When the form appears, fill in the required details. These vary by provider but typically include a connector name, Client ID, Client Secret, and the scopes your app needs.
3. Follow the on-screen instructions to authorize the connector and choose the permissions your app users will be asked to grant.
4. Click **Approve**.
**Tips:**
* Before filling in the form when adding a connector, make sure you have already created an OAuth app in the provider's developer console and have your Client ID, Client Secret, and required scopes ready.
* If a user connector is already set up in your workspace, it appears in the **Connectors** tab automatically. Go to **Edit Agent**, click **Connectors**, toggle it on, and click **Save**.
* The **Connectors** tab also shows which backend functions are using each connector, so you can see exactly what the agent can do with it.
### Adding agent skills
Skills are reusable instruction sets you attach to an agent to give it specific behaviors, expertise, or policies. You can attach up to 10 skills per agent.
There are two types of skills:
* **App Skills:** Skills you create for a specific app. Once created, they can be reused across all agents in that app.
* **Workspace Skills:** Skills shared across your workspace. [Learn more about managing workspace skills.](https://docs.base44.com/documentation/using-your-workspaces/adding-workspace-skills)
**To add an app skill to your agent:**
1. Go to **Dashboard** in your app editor.
2. Click **Agents**.
3. Click **Edit Agent** on the relevant agent.
4. Click **Skills**.
5. Click **Add Skill** under **App Skills**.
6. Choose how to create the skill:
* Select **Start from scratch** to write your own instructions.
* Select a template such as **refund-policy**, **support-escalation**, **pricing-and-plans**, or **brand-voice** to start from a ready-made structure.
7. Enter a **Skill name**, an optional **Description**, and your **Instructions**.
8. Turn on the **Enable for current agent** toggle if you want the skill to be active right away.
9. Click **Create Skill**.
10. Click **Save**.
To use a workspace skill, scroll to **Workspace Skills** and toggle on any skill you want to enable for this agent.
### Configuring memory
Agent memory lets your agent remember important information across conversations, such as preferences, key facts, or shared knowledge. You control whether memories are shared across everyone or kept specific to each person. Your agent also manages its own memory size: when its memory reaches around 50,000 characters, it automatically condenses older entries to stay within the limit, keeping the most relevant information.
Memory is turned on by default for new agents.
**To turn on memory for your agent:**
1. Go to **Dashboard** in your app editor.
2. Click **Agents**.
3. Click **Edit Agent** on the relevant agent.
4. Click **Memory**.
5. Click the **Enable Memory** toggle to turn memory on.
6. Under **Memory Scope**, choose how this agent saves memories:
* **Global & Per User:** The agent can create shared memories for everyone and personal memories for each person.
* **Global Only:** The agent creates memories that are shared across everyone who chats with it.
* **Per User Only:** The agent creates memories that are specific to each person.
7. In **Memory Instructions**, enter guidance that explains when to save memories and what to include.
8. After your agent has a few conversations, review **Saved Memories** to see what the agent has stored. Click **Refresh** to load new memories.
9. Click **Save**.
Use memory instructions to keep your agent focused. For example:
* Save global memories for product updates, company announcements, and shared knowledge.
* Save user memories for personal preferences such as communication style, tone, and specific interests.
***
## Connecting to messaging channels
Connect your agent to outside messaging apps so people can chat with it without opening your app. Each connected channel has the same capabilities as your in-app agent, and you set up and connect each one separately.
### WhatsApp
Connect your agent to WhatsApp so people can message your app's agent directly from their phone, without even opening the app.
A WhatsApp-connected agent can do everything your in-app agent does. This includes creating, reading, updating, or deleting entities in your app, triggering backend functions such as sending notifications or starting automations, and managing your app's data, like updating tasks and adding records. If your agent can do it inside your app, it can do it in WhatsApp too.
* This feature is available for free on all plans.
* A total of 3 in-app agents can be connected to WhatsApp across all your apps. This limit is separate from [Superagent WhatsApp connections](/superagents/customizing-your-superagent#whatsapp-and-whatsapp-groups), which have their own pool. If you try to connect more than 3, you'll be prompted to disconnect one before continuing.
* Each agent is assigned its own WhatsApp number.
* WhatsApp agents use **integration credits only**. No message credits are charged. Each message sent or received uses **1 integration credit** for the WhatsApp relay, plus additional integration credits for agent actions such as LLM calls, image generation, or sending emails.
* Your app visitors don't need to install anything to use WhatsApp agents. They simply tap the WhatsApp button in your app to start a chat. People must send the first message, to help prevent spam and keep them safe. Once the conversation begins, the agent can reply just like it does inside your app.
* WhatsApp conversation supports both images and voice messages.
* When your agent needs approval to install a skill, it asks right in your WhatsApp chat with it. Reply **Yes** to install or **No** to cancel. Other actions that need your approval are handled from the Base44 agent dashboard instead.
* If your app is public, people need to log in to your app before they can use the WhatsApp agent. This makes sure the agent can identify who it is chatting with and respond based on their data. To let people chat without logging in, turn on **Allow anonymous access** in the agent's **Guidelines** tab. Anonymous users can't access per-user private data.
**To enable WhatsApp for your agent:**
1. Go to **Dashboard** in your app editor.
2. Click **Agents**.
3. Click **Edit Agent** on the relevant agent.
4. Click **WhatsApp**.
5. Click **Send to Chat** under **Add WhatsApp to Your App** to add a WhatsApp button to your app.
6. Customize the WhatsApp welcome message.
7. Click **Save**.
### Telegram
Connect your agent to Telegram so people can message it directly from Telegram, without opening your app.
A Telegram-connected agent has the same capabilities as your in-app agent. It can create, read, update, or delete records, trigger backend functions, and manage your app's data.
* All web chat features work seamlessly in Telegram, including tools and data access.
* Users can send voice notes and images for natural interaction.
* Your Telegram bot is created and connected instantly with no manual configuration needed.
* To start a conversation, users open your bot in Telegram and send `/start`.
* You can add a Telegram button to your app so users can open the bot directly from your app.
**To enable Telegram for your agent:**
1. Go to **Dashboard** in your app editor.
2. Click **Agents**.
3. Click **Edit Agent** on the relevant agent.
4. Click **Telegram**.
5. Click **Connect Telegram Bot**.
6. Follow the prompts in Telegram to create and connect your bot.
7. Click **Send to Chat** under **Add Telegram to Your App** to add a Telegram button to your app.
8. Customize the Telegram welcome message.
9. Click **Save**.
### LINE
Connect your agent to LINE so people can message it directly from the LINE app, without opening your app.
A LINE-connected agent has the same capabilities as your in-app agent. It can create, read, update, or delete records, trigger backend functions, and manage your app's data.
**Notes:**
* LINE is only available in Japan.
* LINE replies are plain text only. Avoid using markdown or HTML in your welcome message or guidelines.
**To enable LINE for your agent:**
1. Go to **Dashboard** in your app editor.
2. Click **Agents**.
3. Click **Edit Agent** on the relevant agent.
4. Click **LINE**.
5. Scan the QR code or copy the activation code, open LINE on your phone, add the Base44 bot, and send the activation code to connect.
6. Click **Send to Chat** under **Add LINE to Your App** to add a LINE button to your app.
7. Customize the LINE welcome message.
8. Click **Save**.
Activation codes expire after 30 minutes. If yours has expired, click **Regenerate Code** to get a new one.
***
## Viewing who uses your agents
The **Users** tab in your **Agents** dashboard shows every app user who has chatted with one of your agents. For each user you can see their role, how many agents they have used, their total conversations, and credits used. You can sort the list by agents, conversations, or credits.
You can drill down from a user into their conversations with a specific agent, and open any conversation to read the full transcript.
**To view agent users:**
1. Go to **Dashboard** in your app editor.
2. Click **Agents**.
3. Click the **Users** tab.
4. Click a user row to see which agents they have chatted with and how many conversations and credits each agent used.
5. Click **View** next to an agent to see that user's full conversation list for it.
6. Click a conversation to read the full transcript, including messages, tool calls, and credits used.
**Tips:**
* Use the search bar to find someone by name or email.
* Use **Filter by** to filter by agent or role (User, Editor, or Admin).
* Use the date picker to filter by today, the last 7 days, the last 30 days, or all time.
* Click a column header to sort by agents, conversations, or credits.
***
## FAQs
Click a question below to learn more about AI agents.
This can happen if there's an empty entity in the agent's **Tools and Capabilities** settings.
**To resolve this:**
1. Open your agent's settings.
2. Click the **Tools and Capabilities** tab.
3. Either update or remove the empty entity.
4. Click **Save**.
After updating, you should be able to send messages without errors.
Yes. Agents are available on all plans, including the Free plan.
You can turn agents on by default for every new app you create.
When the **Enable agents for new apps by default** toggle is on in your **Account settings**, each new app automatically has the **AI Agents** toggle enabled in its dashboard so you can start adding and configuring agents right away.
This setting does not change existing apps. To enable or disable agents for an existing app, open that app's **Dashboard**, click **Agents**, and adjust the **AI Agents** toggle there.
**To turn on agents by default for new apps:**
1. Click your profile icon at the top right of your workspace.
2. Click **Settings**.
3. Click **Account settings**.
4. Turn on the **Enable agents for new apps by default** toggle in the **Default Agents** section.
Agents are flexible powerful tools that help you:
* Automate repetitive tasks.
* Get informed, real-time answers.
* Keep your workflow inside one app.
* Pick the right tools automatically.
Go to **Dashboard**, click **Agents**, and click the **Users** tab. Click a user to see their conversations per agent, then click **View** to open the conversation list. Click any conversation to read the full transcript.
The AI model you choose affects both how your agent behaves and how many integration credits it uses.
* The default **Automatic** option (based on Gemini 2.5 Flash) gives you fast, general-purpose responses at around **3 credits per message**.
* Models such as **Gemini 3 Flash** provide stronger reasoning at a moderate increase in credits.
* Higher-end models such as **GPT-5.5** are designed for complex analysis and accuracy-critical decisions and generally use more credits per message.
If you are not sure which model to use, keep **Automatic** selected so you get a good balance of speed, quality, and cost.
You can attach up to 10 skills per agent. Skills can be a mix of app skills you create yourself and workspace skills shared across your workspace.
From **Agents** in your app's dashboard, you can see the total credits used by an agent directly below its name.
App skills are created inside a specific app and can be reused across all agents in that app. Workspace skills are shared across your entire workspace and are managed in your workspace settings. You can toggle workspace skills on or off for individual agents without editing the skill itself.
Yes. You can set up an in-app agent automation that runs the moment a new conversation starts with your agent. Use this to get notified when a customer reaches out, add them to your contacts automatically, or send yourself a summary at the end of the day.
When you click **New Automation**, Base44 shows suggestions based on your app's context. If your app has an agent, in-app agent triggers appear in the **Suggested for you** list automatically. You can also click **Create from scratch** and select **In-app agent** as the trigger type.
[Learn more about creating automations.](/Building-your-app/Creating-automations)
# Using the AI Chat in Base44
Source: https://docs.base44.com/Building-your-app/AI-chat-modes
Describe your idea, and the AI builds it for you. Use chat modes and AI controls to fine-tune your app and get the results you want.
## About the AI chat
The Base44 AI chat is more than just a code generator. It works as your intelligent assistant, understands your goal, and uses the right tools to get you there. Your apps become more accurate, context-aware, and flexible, so you can focus on building complex features quickly, with smart automation working in the background.
Unlike traditional AI that only responds with text, the agentic AI knows when to search the web, check your files, or pull in data from other sources. It also uses automatic model selection to choose state-of-the-art models based on what your prompt needs, so you get real solutions without needing to manage models or technical details yourself.
* Share a public website link with the chat to instantly copy the design, layout, and visible content into your app. For example: "Copy the layout from `https://example.com`."
* Ask the agent to help you follow best practices by searching for ready-made code or common solutions. For example: "Show me the standard pattern for user authentication."
* Pull lists or content from other websites and use it in your app, such as importing product catalogs or gathering site text and images. For example: "Import the product list from `https://example.com`."
* Directly update your app's database with simple, clear instructions. For example: "Give Emily a point for doing her homework."
After the AI applies your changes, it automatically checks the output in the background and fixes any errors it finds, without interrupting your workflow or requiring any input from you.
The AI chat also suggests useful next steps as you build. These suggestions appear below the chat and are tailored to your current workflow, helping you discover new features and make the most of your app.
***
## Using the AI chat modes
Base44's [AI app builder](https://base44.com/ai-app-builder) includes 3 chat modes for building your app:
* **Default:** Acts instantly on your prompts.
* **Discuss:** Lets you plan and refine ideas safely before applying changes.
* **Edit:** Lets you click elements in your preview to adjust visuals directly.
You can switch between modes anytime to brainstorm ideas, make design tweaks, or apply instant changes, all in one chat.
### Default mode
Type what you need, and the AI acts right away. This mode is perfect for quick edits and feature requests. To get the best results, be as specific as possible. The more detail you give, the more precisely the AI builds your app.
> **For example:** Ask the AI to create a new page to your app.
For more examples and prompt frameworks, check out the [Prompt Guide](/Getting-Started/Prompt-guide).
### Discuss mode
Click **Discuss** in the AI chat to have a conversation with the AI to brainstorm, clarify, or explore ideas before making any changes to your app. It is a safe space to ask questions, get suggestions, or talk through options without affecting your project. In Discuss mode, you can freely chat and refine your goals with the AI, but no app changes take place. Each message in Discuss mode uses 0.3 credits.
Discuss mode helps you save credits by avoiding unnecessary trial and error before finalizing changes.
Once you are ready for the AI to implement changes in your app, turn off **Discuss** and ask the AI to make the changes.
> **For example:** Discuss the best way for users to invite their friends to their app.
Discuss mode uses its own AI model regardless of the model you have selected in your app. This keeps Discuss mode costs low and consistent at 0.3 credits per message.
### Edit mode
Use **Edit** mode to make changes to the design of your app. You can do it manually or ask the AI to make the changes for you.
Your edits save automatically as you work. You can undo and redo up to 50 steps within the same visual edit session using the undo/redo buttons at the top of the editor, and your edits remain through preview reloads.
If you try to leave with unsaved changes, your browser warns you before you go. Your edits also appear in [**Version History**](#restoring-or-publishing-a-previous-version), so you can restore a previous set of manual edits at any time.
**To make changes to the design of your app:**
1. Go to the AI chat in your app editor.
2. Click **Edit**.
3. Make changes to the design:
* **Manually:** Select an element in your app preview to make the changes directly. For example, you can change background colors, text colors, or spacing. You can also quickly access the element's code to make changes, adjust tailwind classes directly to fine-tune spacing, typography, layout, and responsiveness, or remove the selected element or section with the **Delete** icon in the Edit toolbar. This method does not use credits.
* **Using the AI chat:** Select an element in the app preview and then click **Edit Element**. Write what you want to change about the element and the AI will take care of it. This method uses message credits. The number of credits depends on the size and complexity of the change.
If you have multiple elements that repeat, you can apply bulk changes to them. Click the element and all repeating elements are highlighted, so you can apply changes to all of them at once.
***
## Queuing messages in the chat
When the AI chat is already working on a prompt, you do not need to wait before asking something else. You can keep typing, add more prompts, and attach files. The AI chat adds them to a message queue and sends them one by one as each response finishes.
**Notes:**
* The queue appears above the chat input and shows all pending prompts in the order they will run.
* You can queue up to 7 messages at once.
* Queued messages do not send if you close the app editor. When you reopen the editor, any queued messages will resume.
You can edit your queue at any time. Drag and drop messages to change their order, edit a queued message inline before it is sent, remove individual messages or clear the entire queue if you change your mind. You can also pause or resume the queue whenever you need.
***
## Customizing the AI chat
You can tailor how the AI behaves and set custom controls.
### Choosing your AI model
Choose a model manually when you want more control. Each model brings unique strengths, so you can pick the best fit for your prompt.
**Before you choose a model:**
* You need a [**Builder plan**](https://base44.com/pricing) or higher to choose an AI model.
* When you choose a model manually, credit usage varies by model and may use more credits than **Automatic**. Check the exact cost under **Credits Used** for each message.
* Some models are rolling out gradually and may not be available to all accounts yet.
You can choose your model from your first prompt, or change it at any time while building. Expand an option below to see how.
Set your model before you send your first prompt, so your first build uses the one you want.
1. On the Base44 homepage, below the prompt box, click the model selector.
2. Select the model you want, or keep **Automatic**.
Switch models at any time while building your app from the app editor.
1. Go to your app editor.
2. Click the **Settings** icon at the bottom of the chat.
3. Click **AI Model**.
4. Select the model you want to use, or keep **Automatic** to let Base44 pick the best model for each request.
* **Base 1:** Base44's first in-house model, trained on real building patterns from across the platform. A well-rounded, general-purpose choice for both everyday building and conversation.
* **Sonnet 5:** A well-balanced choice for day-to-day building, writing, refactoring, and troubleshooting, with a strong mix of quality and speed.
* **Opus 4.8:** The most advanced reasoning model, built for the hardest problems. Use it for complex multi-step logic, intricate architecture decisions, and edge cases where you need the highest level of accuracy.
* **Fable 5:** Great for complex, multi-step builds and detailed debugging, when you want thorough, high-quality results.
* **GPT-5.5:** A strong choice for complex reasoning and multi-step planning, with improved accuracy and consistency across large or evolving projects.
* **GPT-5.6 Terra:** A cost-efficient GPT-5.6 option for complex reasoning and multi-step planning, at a lower credit cost.
* **GPT-5.6 Sol:** The most capable GPT-5.6 option, for the hardest reasoning and large, evolving projects. Uses more credits.
Not sure which model to choose? Keep **Automatic** and Base44 selects the best model for each request.
### Setting AI controls
AI controls let you define how the AI interacts with your app. They help you set consistent rules and protect important areas from accidental edits.
Click the **Settings** icon at the bottom of the chat, then select **AI Controls** to open the panel:
* **Custom Instructions:** Add default guidance for every AI interaction, such as tone, design standards, or preferred behavior.
* **Freeze Files:** Lock specific files or entities so the AI does not modify them.
Clear, well-defined AI controls keep your app consistent and prevent accidental overwrites.
***
## Reverting changes
Experiment freely and try new ideas, knowing you can always undo your changes at any time. You can roll your app back to a specific prompt, restore a previous version into the editor, or publish a previous version directly from Version History without changing what you are currently working on.
### Reverting a specific prompt
Hover over the relevant message in your chat history and click the **Revert** icon under it to roll your app back to the state it was in just before that change. Any changes made after that point are also undone, so you can quickly return to an earlier version of your app.
If you want to change what you asked instead of just undoing it, click the **Edit** icon on that earlier message. The chat opens an **Edit this message and resend** panel. When you resend, Base44 reverts any changes made after that message and then applies your updated request.
### Restoring or publishing a previous version
Click the **Version History** icon at the top of the chat to open your version list. From there you can preview versions, publish a previous version without changing your current draft, revert your editor to an older version, view the code, or jump back to the chat message that created that version.
Click a version in the list to load it in the preview. For each version, click the **More Actions** icon and choose:
* **Publish this version:** Publish this version to your live app while keeping your current draft open in the editor so you can keep working.
* **Revert to this version:** Replace your current draft in the app editor with this version.
* **View code:** Open the code for this version.
* **Go to message in chat:** Jump to the chat message that created this version.
***
## FAQs
Click a question below to learn more about AI chat modes and controls.
Click the **Hide chat panel** icon above the preview window to display your app exactly as visitors see it, without any editor panels or chat tools.
When Base44 detects a JavaScript error in your app preview, an **Issues Found** notification appears in the editor with a description of the error and where it occurred.
Click **Resolve with AI** to send the error details to the AI chat. The AI reviews the error and applies a fix. This does not count toward your message credits.
To dismiss the notification without fixing it, click **X** to close it.
If your app freezes or behaves unexpectedly, try these steps to get back on track:
* **Refresh the page** to reload your latest working version.
* **Clear your browser cache** and reload your app to remove any stored conflicts.
* **Try a private window** or another browser to rule out extension conflicts.
* **Disable browser extensions** temporarily if the issue persists.
* **Check your credits and plan limits**, since running out of credits can interrupt AI actions.
* **Revert the last AI action** in the chat by clicking the **Revert** icon under that message, or use **Version History** to roll back to a stable version.
For more help, see the [Troubleshooting guide](/Community-and-support/Troubleshooting).
Base44 does not offer refunds or credit reversals for AI actions. You can use [**Version History**](#reverting-changes) to undo changes and restore your app.
The agentic AI uses a wide range of tools to help you build and manage your app, including:
**Database tools:**
* Read, create, update, and delete records in your app's database. It can filter, sort, paginate, or update or delete in bulk. For example, add test people, mark old messages as read, or remove expired records.
**Web tools:**
* Perform web searches to find relevant documentation or features. This works like a search engine with relevant pages, titles, and descriptions.
* Fetch website data from any URL. Retrieve markdown or HTML, for example to scrape documentation or get live page content.
**Code and file tools:**
* Smart file search. Quickly find files or code snippets needed for your workflow.
* Read the contents of any project file before editing. This is useful for reviewing your app's code structure.
* Modify files in your project. Edit pages, components, entities, functions, or layouts, and support targeted partial edits. For example, fix bugs, add features, or update styling.
* Inspect logs and console output to help with debugging or understanding errors.
**Configuration tools:**
* Set or update environment variables and secrets as needed. For example, add or update API keys like `OPENAI_API_KEY` or `STRIPE_SECRET_KEY`.
The agent automatically chooses and combines these tools based on what you need, so you can focus on describing your goals instead of the technical steps.
The agentic AI can fetch and interpret content from public website pages and other static data, but it cannot automatically access or migrate complex backend logic, databases, or private integrations. If your project requires backend features, connections to other services, or secure data, you still need to set these up manually.
For example, if you ask the agent to copy content or features from another app, it can match layouts, text, and the overall look based on what is visible on the public site, but it does not copy any backend logic, migrate private integrations, or access protected database content.
For any work that goes beyond the public front end, manual setup is required to complete your app.
All times in the Base44 builder are managed and displayed using Coordinated Universal Time (UTC). This keeps everything consistent across different regions and makes it easier to coordinate actions or schedules, no matter where you or the people using your app are located. There is no option to change the time zone within the builder at this time.
Yes, you can use your voice to interact with the AI chat in Base44. Click the microphone icon in the chat box to turn on speech-to-text, then speak your question or request. The AI transcribes your speech and responds as usual, so you can get help hands-free.
If AI chat is unresponsive, gets stuck processing, or does not undo changes as expected, there are ways to recover.
Check out the full troubleshooting guide for step-by-step solutions, including how to:
* Use Version History or **Revert** under a previous message to safely undo actions.
* Unstick a frozen prompt or stop button.
* Get help if the chat panel is completely unresponsive.
For detailed instructions and workarounds, see the [Troubleshooting Issues](/Community-and-support/Troubleshooting) article.
Base44 uses automatic model selection to match each request with the engine best suited for the job. Design tweaks, layout changes, and deep logic updates may all use different AI models. The chat handles this in the background, so you can stay focused on describing what you want to build.
* For small visual or copy tweaks, it chooses fast, efficient models that optimize for speed and responsiveness.
* For larger architectural changes or data flows, it uses deeper reasoning models that can plan across files, entities, and logic.
* When something fails or runs into an error, it can switch strategies or models to recover and try again.
Note that Discuss mode uses its own fixed model regardless of your selection. [Learn more about Discuss mode.](https://docs.base44.com/Building-your-app/AI-chat-modes#discuss-mode)
# Using the canvas
Source: https://docs.base44.com/Building-your-app/Canvas
View and work on all your app pages at once. Add notes, drawings, and images, collaborate with your team in real time, and send ideas straight to the AI chat.
The canvas lets you view and work on all your app pages at once. Every page appears as a live-preview frame on an infinite board that you can arrange, annotate, and build on together with your team. Everything saves automatically as you work.
Use the canvas to plan your app layout, leave notes and feedback for yourself or your team, sketch ideas with drawings, or send instructions straight to the AI chat for implementation.
You can use **Edit** mode on the canvas just as you would in the regular editor. Click **Edit** in the top bar to select and style elements on any page frame.
***
## Accessing the canvas
To access the canvas, open your app editor and click the Canvas icon in the top bar.
When you open the canvas for the first time, it fits all your app pages into view. After that, your zoom level and position are saved per device, so the canvas reopens where you left off.
***
## Collaborating on the canvas
Multiple people can work on the canvas at the same time. Each collaborator's cursor appears as a named pointer as they move around. Colored outlines show which elements each person has selected.
You can add collaborators to your app from the top of the editor. [Learn more about collaborators](/Setting-up-your-app/Managing-access#inviting-collaborators-to-your-app)
***
## Managing the page frames
Every page in your app appears as a frame on the canvas, showing a live preview of that page.
You can do several actions on your page frames.
Click the frame to select it first, then click and drag the frame to move it wherever you want on the canvas.
Each frame has a viewport dropdown in the top right of its header. Click it to switch between **Desktop**, **Tablet**, and **Phone** to see how the page looks on different screen sizes.
Click the frame to select it. Resize handles appear on the edges. Drag any handle to adjust the frame's width and height.
Right-click the frame and select **Refresh** to reload the page preview.
Pages cannot be deleted from the canvas. To remove a page, ask the AI chat to delete it for you.
***
## Using the canvas toolbar
The toolbar on the right side of the canvas gives you access to the main tools.
See what you can do with the toolbar:
| | **Tool** | **Shortcut** | **What it does** |
| ----------------------------- | --------------- | ------------ | ------------------------------------------------ |
| | **Select** | V | Select, move, and resize elements |
| | **Hand** | H | Pan around the canvas without selecting anything |
| | **Draw** | D | Freehand drawing |
| | **Sticky note** | N | Add sticky notes |
| | **Image** | I | Add images |
Press **Escape** at any time to return to the **Select** tool.
***
### Sticky notes
Sticky notes are the main way to leave ideas, feedback, and instructions directly on the canvas.
Learn more about sticky notes:
**To add a sticky note:**
1. Click the **Sticky note** tool in the toolbar or press **N**.
2. Click anywhere on the canvas to place the note.
3. Double-click the note to start typing.
The avatar of the person who created the note appears at the bottom left.
When a sticky note is selected, a toolbar appears below it with formatting options:
* **Color**: choose a background color for the note.
* **Aa** **Font family**: choose from four styles: default, handwriting, mono, or serif.
* **S** **Font size**: Small, Medium, Large, or Extra large.
* **B** **Bold**: make the text bold.
* **Bullet list**: format the note as a bulleted list.
Each sticky note has a **Status** dropdown at the top. Click it to set the status:
* To do (orange)
* In progress (blue)
* Done (green)
Connect a sticky note to a page frame to show which page it relates to.
**To connect a sticky note to a page:**
1. Hover over the note to reveal the connection handles on its edges.
2. Drag from a handle to the page frame you want to connect.
Once you write a note, you can send its content to the AI chat for implementation. Hover over or select the note, then click **Send to chat** at the bottom right of the note.
* If the note is connected to a page frame, the AI applies the change to that specific page.
* If the note is not connected to a page, the AI decides which page to update based on the content of the note.
***
### Drawings
The draw tool lets you sketch freehand anywhere on the canvas.
Learn more about drawing on the canvas:
**To draw on the canvas:**
1. Click the **Draw** tool in the toolbar or press **D**.
2. Click and drag on the canvas to draw.
When the draw tool is active, you can customize it:
* **Stroke color** : Click the drawing to open the color picker and choose your drawing color, or enter a hex value directly.
* **Stroke weight** : Click the drawing and drag the slider to adjust the thickness of your stroke.
* **Flip**: Right-click a drawing and select **Flip horizontal** or **Flip vertical**, or use the **⇧H** and **⇧V** shortcuts.
***
### Images
You can add images to the canvas from multiple sources. Images are placed in the center of your current view.
Learn more about adding images to the canvas:
**To add an image:**
1. Click the **Image** tool in the toolbar or press **I**.
2. Choose where to get the image from:
* **Upload from computer**: Select a file from your device.
* **Import from Drive**: Pick a file from your connected Google Drive.
* **Add from file library**: Choose from your app's existing assets.
Select the image to access the toolbar below it:
* **Replace image:** Swap the image for a different one.
* **Crop:** Trim the image.
* **Border:** Add or adjust a border around the image.
* **Flip:** Right-click to flip the image horizontally or vertically.
***
### Right-click actions
Right-click any sticky note, drawing, or image to open its context menu. The following actions are available:
| Action | Keyboard shortcut |
| ------------------------------------- | ------------------- |
| Cut | ⌘X |
| Copy | ⌘C |
| Paste | ⌘V |
| Paste to replace | ⇧⌘R |
| Duplicate | ⌘D |
| Delete | Delete or Backspace |
| Bring to front | ] |
| Send to back | \[ |
| Flip horizontal (drawings and images) | ⇧H |
| Flip vertical (drawings and images) | ⇧V |
| Lock / Unlock | ⇧⌘L |
***
## Adding arrows
You can connect any two elements on the canvas with an arrow to show relationships, for example linking a sticky note to the page it refers to.
**To create an arrow:**
1. Hover over an element to reveal the connection handles on its edges.
2. Drag from a handle to another element.
To remove an arrow, select it and press **Delete** on your keyboard.
***
## Locking elements
Locking an element prevents anyone from moving, resizing, or editing it until it is unlocked. This helps avoid conflicts when multiple people are working on the same canvas. You can lock sticky notes, drawings, and images.
**To lock or unlock an element:**
* Right-click the element and select **Lock** or **Unlock**.
* Or select the element and press **⇧⌘L**.
***
## Undoing and redoing changes
You can undo and redo your recent canvas edits using keyboard shortcuts or the undo/redo buttons that appear in the toolbar when there is history to step through.
Undo and redo cover most canvas actions: creating, moving, resizing, editing, deleting, locking, and connecting elements.
| Action | Mac | Windows |
| ------ | --- | ---------------------- |
| Undo | ⌘Z | Ctrl+Z |
| Redo | ⇧⌘Z | Ctrl+Shift+Z or Ctrl+Y |
Undo and redo are personal. Your history is separate from your collaborators', so undoing a change only reverses your own edits, not theirs. The canvas keeps up to 50 steps of history.
***
## Zoom and navigation
The zoom bar sits at the bottom right of the canvas.
| Control | Shortcut | Action |
| --------------- | -------- | ------------------------------------------------ |
| **Zoom to fit** | ⌘1 | Fit the whole canvas into view |
| **−** | ⌘- | Zoom out one step |
| Percentage | | Click to open a dropdown with preset zoom levels |
| **+** | ⌘+ or ⌘= | Zoom in one step |
| | ⌘0 | Reset to 100% |
# Adding components to your app
Source: https://docs.base44.com/Building-your-app/Components-library
Browse the components library in your app editor to add polished, ready-made UI components that Base44 rebuilds to match your app's theme, fonts, and content.
## What is the components library?
The components library is a collection of polished, ready-made UI components that you can add to your app straight from the AI chat in your app editor. Instead of describing a layout from scratch, you browse curated components, pick the one you want, and Base44 rebuilds it inside your app.
When you add a component, Base44 themes it to match your site, adapting its colors, fonts, and content to fit your app rather than dropping in a generic block. You can always customize the design further by asking the AI chat.
***
## Opening the components library
You open the components library from the plus menu in your AI chat, next to where you type your prompts.
**Before you begin:** Switch your AI chat to Build mode before you add a component. For more on chat modes, see [AI chat modes](/Building-your-app/AI-chat-modes).
**To open the components library:**
1. Go to your app editor.
2. In the AI chat, click the plus icon next to the prompt box.
3. Click **Explore components library**.
***
## Browsing and previewing components
The components library opens in a full window with a search bar and category tabs across the top. **For You** shows recommended components, and the remaining tabs group components by purpose, such as **Commerce**, **Content**, **Dashboards & Analytics**, and **Navigation**.
You have two ways to find a component:
* **Search:** Type a keyword in the search bar to filter across all components.
* **Categories:** Click a category tab to browse components for that purpose.
Click a component to open its preview, then interact with it to try its different states before you add it.
***
## Adding a component to your app
You add one component at a time. Clicking **Add to chat** places the component in your AI chat with a message that you can edit before you send it. When you send the message, Base44 rebuilds the component as React code inside your app and adapts its styling, fonts, and copy to match your design.
**To add a component to your app:**
1. In the components library, click the component you want.
2. Click **Add to chat**.
3. Add any extra instructions in the prompt box, then send your message.
If a component relies on a code library your app does not have yet, Base44 asks you to approve installing it as part of building the component. For more on how this works, see [Adding and using npm packages](/Building-your-app/NPM-packages).
***
## FAQs
Click a question below to learn more.
You add one component per message. To add another, open the components library again and repeat the steps.
No. Adding a component is a standard build message, so it uses credits the same way any other prompt does. There is no separate charge for browsing or adding a component.
Yes. A component becomes part of your app once it is built, so you can ask the AI chat to restyle it, change its content, or adjust its layout like any other part of your app.
# Creating automations for your app
Source: https://docs.base44.com/Building-your-app/Creating-automations
Run backend work automatically, on a schedule or when data changes.
Use automations when you want to take work off your plate, such as sending summary emails, generating reports, syncing or cleaning up data, or running recurring maintenance tasks.
When [building an app](https://base44.com/ai-app-builder) in Base44, automations help you run backend functions automatically, on a schedule, when data changes, or when a connected integration sends an event through a connector. You create and manage automations using the AI chat in your app's dashboard.
**Workflows is replacing automations.** You can now switch all of your automations to workflows in one step, keeping their triggers, schedules, and run history. See [Switching automations to workflows](/Building-your-app/Creating-workflows#switching-automations-to-workflows).
You can use automations for any backend work you want to happen automatically. Common examples include:
* Sending emails or messages, such as daily welcome emails or weekly newsletters.
* Generating reports or summaries, for example a daily revenue report.
* Checking conditions and alerting only when something changes, such as low inventory.
* Reacting to changes in your data, such as sending admins a message when a new product is added.
* Scheduling posts on social media.
* Running recurring maintenance or housekeeping tasks, like archiving old records or refreshing caches.
* Backing up your app's data (e.g. to Google Drive) every week.
* Sending notifications to external tools when something happens, for example posting salon booking updates into a Slack channel when calendar events change.
***
## How automations work
When you create an automation, you choose how it starts. It can run on a schedule you define, in response to a data event such as a record being created, updated, or deleted, when an app user starts a conversation with an in-app agent, or when a connected integration sends an event using a connector. Each automation runs a backend function in your app and records the run so you can see what happened.
Every automation has logs so you can always see when it ran, whether it succeeded, and any errors that occurred. This keeps everything transparent and easy to debug.
**Important:**
* You must have a **Builder plan** or higher to use automations.
* Each time an automation runs, it uses **1 integration credit**.
* Each automation run can last for a maximum of 3 minutes. If it takes longer, the run fails. For example, if your automation sends 1,000 emails but can only send 600 within 3 minutes, only the first 600 are sent and the rest are not processed.
* The minimum interval between automation runs is 5 minutes.
***
## Types of automations
There are 4 types of automations you can create. When describing what you want to the AI chat, it helps to know which type fits your use case.
### Scheduled automations
Scheduled automations run at a time or interval you define. Use these for recurring tasks like daily digests, weekly reports, or regular maintenance jobs.
Example prompts:
* `Send me a daily summary of all new orders to my email every morning at 8:00.`
* `Archive trip records that have been completed for more than 30 days, every Sunday at midnight.`
### Data event automations
Data event automations run in response to changes in your app's data, such as a record being created, updated, or deleted. Use these to react to activity in real time.
Example prompts:
* `Send a push notification whenever I add a new WishlistPlace and write any needed backend function for me.`
* `Send the admin an email whenever a new booking is created.`
### In-app agent automations
In-app agent automations run when an app user starts a new conversation with an in-app agent. Use these to stay on top of who is reaching out, for example to get notified when a customer starts a chat, automatically add them to your contacts, or send yourself a summary at the end of the day.
Example prompts:
* `Email me whenever someone starts a new conversation with my agent.`
* `Add the person to my Contacts list when they start a chat with my agent.`
### Connector automations
Connector automations run when a connected integration sends an event, such as a new email arriving in Gmail or a calendar event being updated in Google Calendar. Use these to keep your app in sync with external tools.
Example prompts:
* `When a new email arrives in Gmail with the subject "Book appointment", parse it and add a new booking to my app.`
* `When a Google Calendar event is cancelled, update the booking in my app and post a message in the #salon-general Slack channel.`
Connector automations are currently available for Gmail, Google Calendar, Google Drive, Microsoft Outlook and Microsoft OneDrive.
***
## Creating an automation
When you click **New Automation**, Base44 shows suggestions based on your app's context. You can pick one of those or click **Create from scratch** to choose your automation type and describe what you want in the AI chat.
### Using a suggestion
Each suggestion includes a short description of what it does. Clicking one sends a pre-filled prompt to the AI chat, where you can review and adjust it before the AI sets it up.
**To create an automation from a suggestion:**
1. Click **Dashboard** in your app editor.
2. Click **Automations**.
3. Click **New Automation**.
4. Browse the suggestions under **Suggested for you**.
5. Click a suggestion to send it to the AI chat as a pre-filled prompt.
6. Review the prompt, make any changes, and send it.
7. The AI sets up the automation and adds it to your **Automations** list.
***
### Creating from scratch
If none of the suggestions fit what you need, create your automation from scratch. You choose the trigger type first, then describe what you want in the AI chat.
**To create an automation from scratch:**
1. Click **Dashboard** in your app editor.
2. Click **Automations**.
3. Click **New Automation**.
4. Click **Create from scratch**.
5. Select the trigger type: **Scheduled**, **Data event**, **In-app agent**, or **Connector**.
6. In the AI chat, describe the automation you want. For example: `Set up recurring email reminders to my email name@email.com for my tasks on my to-do list every Sunday at 17:00.`
7. The AI creates the automation and adds it to your **Automations** list.
If you need a new backend function for your automation, just mention it in your prompt and the AI will write it for you.
***
## Managing automations
After you start using automations, you can control when they run, change their settings, trigger them on demand, or clean up automations you no longer need. You can pause automations without deleting them, and you can duplicate an existing automation when you want a similar setup with small changes.
When you turn an automation off, Base44 stops scheduling future runs, but existing logs stay available. You can turn the automation back on at any time.
### Turning an automation on or off
Pause an automation at any time if you want to stop it running, and turn it on again when you need it.
**To turn an automation on or off:**
1. Click **Dashboard** in your app editor.
2. Click **Automations**.
3. Click the toggle on the left of the automation name to turn it on or off.
**Automatic pause for failing automations:** If a scheduled automation fails repeatedly, Base44 pauses it automatically and notifies you so you can investigate and fix the issue before re-enabling it.
***
### Editing an automation
Make changes to an automation at any time. The changes affect future runs only.
**To edit an automation:**
1. Click **Dashboard** in your app editor.
2. Click **Automations**.
3. Click the **More Actions** icon on the automation.
4. Click **Edit automation**.
5. Update the automation details.
6. Click **Save**.
***
### Duplicating an automation
Create new automations by duplicating existing ones and editing the new automation.
**To duplicate an automation:**
1. Click **Dashboard** in your app editor.
2. Click **Automations**.
3. Click the **More Actions** icon on the automation.
4. Click **Duplicate**.
5. Update the new automation's details if needed, and click **Save**.
***
### Running an automation immediately
Run an automation right away when you want to trigger its backend function on demand. This helps you test changes, confirm that your configuration works, or handle something urgent between scheduled runs.
Run now triggers the backend function one time in addition to any schedule or data event you configured. The run appears in the automation logs.
**To run an automation:**
1. Click **Dashboard** in your app editor.
2. Click **Automations**.
3. Click the **More Actions** icon on the automation.
4. Select **Run now**.
***
### Archiving an automation
If you do not need an automation anymore, you can move it to Archive to keep your active list clean.
**To archive an automation:**
1. Click **Dashboard** in your app editor.
2. Click **Automations**.
3. Find the relevant automation in the list.
4. Click the **More Actions** icon on the automation.
5. Click **Archive**.
***
## Monitoring runs and using logs
Every automation keeps its own log so you can see when it ran, how long it took, and whether it succeeded. When something goes wrong, logs help you understand what failed and where to look in your backend code, without guessing.
Use logs to confirm that new automations are running at the right time after you first set them up.
**To view logs for an automation:**
1. Click **Dashboard** in your app editor.
2. Click **Automations**.
3. Click the automation you want to inspect.
4. Click the **Logs** tab.
5. Review the list of runs, including the timestamp, duration, and status of each run.
***
## Automations and integration credits
Each automation run uses at least 1 integration credit, plus additional credits for any built-in integrations called inside it. For example, an automation that calls invokeLLM and sends an email costs the 1-credit automation run plus credits for each action it triggers. [See the full credit breakdown.](/Account-and-billing/Credits#integration-credit-examples)
Automations that run frequently or chain several actions can drain your credit balance quickly. Here are some ways to keep usage under control:
* **Add specific trigger conditions.** Narrow the criteria that cause an automation to fire so it does not run unnecessarily.
* **Consolidate redundant automations.** If multiple automations perform overlapping tasks, combine them into fewer, smarter workflows.
* **Resolve failing automations promptly.** Automations that error can still consume credits on each retry. Check your logs regularly and fix or disable problem automations as soon as you spot them.
* **Review the frequency of scheduled tasks.** Consider whether recurring automations, such as daily reports or reminders, need to run as often as configured.
* **Minimize invokeLLM calls.** Each invokeLLM call inside an automation is a separate credit charge. Only call the LLM when the result cannot be pre-determined.
* **Test in a controlled environment first.** Run automations manually on a small dataset and check the execution logs to estimate the per-run credit cost before enabling them at scale.
* **Use Discuss mode when designing automations.** Discuss mode costs roughly 0.3 message credits and lets you plan automation logic before applying changes, reducing trial and error.
***
## FAQs
Click a question below to learn more.
Yes. Ask the AI chat to add trigger conditions to any automation. For example:
```text theme={null}
Only run this automation when the order status is "pending".
```
The automation then only fires when the trigger event also matches the conditions you describe. Conditions are shown in the **Advanced** section of the automation panel once set, and can only be changed by asking the AI chat — they cannot be edited manually.
When an automation fails, you see a **Failed** label in the **Last run** column and a **Fix with AI** option on the same row.
**To fix a failed run:**
1. Click **Dashboard** in your app editor.
2. Click **Automations**.
3. Click **Fix with AI** on the failed automation.
4. In the AI chat, review the explanation of what went wrong and how it affects your automation. Accept the suggested fix so the AI can update your code or automation configuration.
5. When the AI finishes applying the fix, use the **Run now** action from **Automations** and check the logs to confirm the automation succeeds.
For more detail about what happened, open the automation, go to the **Logs** tab, and review the failed run entry. You can also ask the AI in your dashboard to explain any error messages that appear.
If a **scheduled** automation fails several times in a row, Base44 automatically pauses it to protect your app and your credits, and notifies you. Fix the underlying issue, then turn the automation back on from the **Automations** page.
The available events depend on which connector you are using. Here is a full list:
| Connector | Event | Description |
| ------------------ | ------------ | -------------------------------------------------------------------- |
| Gmail | mailbox | New emails arriving in your mailbox |
| Google Calendar | events | Any calendar event change, including created, updated, and deleted |
| Google Drive | changes | Any change in the drive, including files added, modified, or deleted |
| Google Drive | file | Any change to a specific file (requires a file ID) |
| Google Drive | file.update | File content or properties changed (requires a file ID) |
| Google Drive | file.trash | File moved to trash (requires a file ID) |
| Google Drive | file.untrash | File restored from trash (requires a file ID) |
| Google Drive | file.delete | File permanently deleted (requires a file ID) |
| Microsoft Outlook | created | A new email, calendar event, or contact is created |
| Microsoft Outlook | updated | An email or calendar event is updated |
| Microsoft Outlook | deleted | An email or calendar event is deleted |
| Microsoft OneDrive | updated | Any file or folder change, including created, modified, and deleted |
Make sure the connector is connected and configured in **Integrations** in your app's dashboard before creating a connector automation.
# Creating workflows for your app
Source: https://docs.base44.com/Building-your-app/Creating-workflows
Automate multi-step work that runs on a schedule, when data changes, or when a connected tool sends an event.
Use workflows when you want to take work off your plate, such as welcoming new customers, sending summary emails, syncing data between tools, or running multi-step processes that wait, check conditions, and react automatically.
When [building an app](https://base44.com/ai-app-builder) in Base44, workflows run backend work for you automatically. A workflow can start on a schedule, when your data changes, when an app user talks to an in-app agent, or when a connected integration sends an event. You create and manage workflows using the AI chat in your app's dashboard.
Workflows is available on the Builder plan and above. If you are on the Free plan, upgrade to a [Builder plan or higher](/Account-and-billing/Billing-and-plans) to create and run workflows.
**Important:** Workflows replaces automations. Apps created from July 6, 2026 use workflows, while apps created before then may still use [automations](/Building-your-app/Creating-automations). Your app has one or the other, not both. Everything you could do with automations, you can do with workflows, plus more:
* **Multiple steps:** Chain several actions together in one flow, instead of a single action.
* **Conditions:** Take different paths depending on your data, so the right steps run in each situation.
* **Delays:** Pause for minutes, hours, or even days between steps, then continue automatically.
* **Step-by-step visibility:** Watch each run in real time and see exactly which step succeeded or failed.
Workflows handle almost any backend work you want to happen automatically, especially when a task takes more than one step. For example:
* **Nurture leads:** When a new lead signs up, send a welcome email, wait 2 days, then follow up only if they have not replied or booked a call.
* **Alert on conditions:** Check inventory on a schedule and message your admins only when an item drops below its threshold.
* **React to data changes:** When a new product is added, notify your team and create a task to review it before it goes live.
* **Keep tools in sync:** When a Google Calendar event is cancelled, update the matching booking and email the customer.
* **Send scheduled summaries:** Every morning, email yourself a recap of the previous day's orders and post the total to a Slack channel.
***
## How workflows work
A workflow is made of a trigger and one or more steps. The trigger decides when the workflow starts. The steps decide what happens, in order, each time it runs: a step can run a backend function (code the AI writes for you), wait for a set amount of time, or take a different path based on a condition.
When you describe what you want in the AI chat, Base44 builds the workflow for you. It appears in two places: your app's file tree and the **Workflows** dashboard. Opening it shows a visual diagram that flows from the trigger through each step. Each run is recorded, so you can review what happened and fix any issues quickly.
> **Example: welcoming a new lead.** When a lead is created, the workflow sends a welcome email matched to their fitness goal, waits 2 days, then checks whether they booked a call. If they did, it adds the call to your calendar; if not, it sends a follow-up nudge.
***
## Choosing a trigger
There are 4 ways a workflow can start. When describing what you want to the AI chat, it helps to know which trigger fits your use case. Read more about each one below.
| Trigger | Best for | Keep in mind |
| --------------------------------- | -------------------------------------------------- | -------------------------------------------------- |
| [**Scheduled**](#scheduled) | Recurring jobs, or a one-time job at a set time | Recurring runs happen at most once every 5 minutes |
| [**Entity**](#entity) | Reacting to changes in your app's data | Add a condition so it does not run on every change |
| [**In-app agent**](#in-app-agent) | Reacting when someone starts an agent conversation | Runs once per new conversation, not per message |
| [**Connector**](#connector) | Reacting to events from a connected tool | The tool must support workflow triggers |
### Scheduled
Scheduled workflows run at a time you define in your timezone. You can run one time, on a recurring schedule, or on an interval, for example every 30 minutes. Use these for recurring tasks like daily digests and weekly reports, or for a one-time job at a specific date and time.
Example prompts:
* `Send me a daily summary of all new orders to my email every morning at 8:00.`
* `Archive trip records that have been completed for more than 30 days, every Sunday at midnight.`
Keep these in mind for scheduled workflows:
* Recurring schedules run at most once every 5 minutes, and you can set them to end on a date or after a number of runs.
* A schedule that reaches its end, including a one-time schedule after it runs, is archived automatically.
* A recurring schedule with no end keeps running until you deactivate or archive it.
### Entity
Entity workflows run in response to changes in your app's data, such as a record being created, updated, or deleted. Use these to react to activity in real time.
Example prompts:
* `Send a push notification whenever I add a new WishlistPlace and write any needed backend function for me.`
* `Send the admin an email whenever a new booking is created.`
Keep an entity workflow focused:
* Add a condition so it only runs when it should, for example only when an order's status changes to shipped, rather than on every update.
* Avoid having a workflow update the same record that triggers it, which can make it run in a loop.
### In-app agent
In-app agent workflows run once when an app user starts a new conversation with an in-app agent, not on every message they send. Use these to stay on top of who is reaching out, for example to get notified when a customer starts a chat, add them to your contacts, or send yourself a summary at the end of the day.
Example prompts:
* `Email me whenever someone starts a new conversation with my agent.`
* `Add the person to my Contacts list when they start a chat with my agent.`
### Connector
Connector workflows run when a connected tool sends an event, such as a new email arriving in Gmail or a calendar event being updated in Google Calendar. The tool must be connected first, and it must support workflow triggers, such as Gmail, Google Calendar, Google Drive, Microsoft Outlook, Microsoft OneDrive, and Slack.
You can add a condition so a workflow only runs for the events you care about. This matters most for busy tools like Slack, where you might want to run only for messages in a certain channel or from a certain person.
Example prompts:
* `When a new email arrives in Gmail with the subject "Book appointment", parse it and add a new booking to my app.`
* `When a Google Calendar event is cancelled, update the booking in my app and post a message in the #salon-general Slack channel.`
If a tool does not support workflow triggers, you can still bring its events in. For example, to act on new Stripe payments, use a webhook or backend function to save each payment as a record in your app, then use an [Entity](#entity) workflow that runs when a new payment record is created. Or, instead of waiting for the tool to notify you, run a scheduled workflow that checks the tool on a regular basis, for example every hour, and handles anything new since the last check.
***
## Creating a workflow
To create a workflow, click **Create workflow** in your app dashboard. Base44 opens a **Create a new workflow** canvas, where you either start from a trigger or pick one of the suggestions based on your app. From there, you describe what you want in the AI chat and it creates the workflow, asking any questions it needs. You keep refining it in the chat until it works the way you need.
### Starting from a trigger
Start from a trigger when you already know how the workflow should begin.
**To create a workflow from a trigger:**
1. Click **Dashboard** in your app editor.
2. Click **Workflows**.
3. Click **Create workflow**.
4. On the canvas, click **Add trigger**, then choose how the workflow starts: a scheduled trigger (**One time**, **Recurring**, or **On an interval**), a **connector**, an **in-app agent**, or an **entity**.
5. In the AI chat, describe what the workflow should do, and answer any follow-up questions the AI asks.
6. The AI creates the workflow and adds it to your **Workflows** list.
### Starting from a suggestion
Start from a suggestion when you want a ready-made idea tailored to your app.
**To create a workflow from a suggestion:**
1. Click **Dashboard** in your app editor.
2. Click **Workflows**.
3. Click **Create workflow**.
4. Under **Or start from these suggestions**, choose a suggestion.
5. Review the pre-filled prompt in the AI chat, adjust it if needed, and send it.
6. The AI creates the workflow and adds it to your **Workflows** list.
Get the best results from the AI:
* Describe each step and outcome clearly so they show up in the diagram.
* For a condition, give each path a distinct action, otherwise the AI might put the logic inside a single backend function instead of showing a separate path.
* If a step needs a new backend function, just mention it and the AI writes it for you.
***
## Switching automations to workflows
If your app still uses automations, you can move all of them to workflows in one step. Base44 recreates each automation as a workflow, so you do not have to rebuild anything.
**What happens when you switch:**
* **Your automations become workflows:** Each automation is recreated as a workflow, keeping its original trigger and schedule.
* **Your history carries over:** Run counts and stats move with each workflow. Past run logs stay with your original automations, which are kept as archived.
* **Archived automations come across too:** Any automations you already archived move over as well and stay archived.
* **Nothing stops running:** Your automations keep running until the switch finishes.
**To switch from automations to workflows:**
1. Click **Dashboard** in your app editor.
2. Click **Automations**.
3. Click **Switch to Workflows**.
4. Review what happens when you switch, then click **Start now**.
***
## Managing workflows
After you start using workflows, you can control when they run, change what they do, rename them, trigger them on demand, or clean up workflows you no longer need. Each workflow shows an **Active** or **Inactive** status, and you can deactivate one to pause it and reactivate it whenever you need it.
### Turning a workflow on or off
Deactivate a workflow when you want to stop it running, and activate it again when you need it. Deactivating stops new runs from starting, but the run history stays available.
**To turn a workflow on or off:**
1. Click **Dashboard** in your app editor.
2. Click **Workflows**.
3. Click the **More Actions** icon on the workflow.
4. Click **Deactivate** or **Activate**.
You can also open a workflow and use the **Active** toggle in the details panel.
### Editing a workflow
To change what a workflow does, edit it from its diagram or just describe the change in the AI chat. Every edit option opens the AI chat with a pre-filled prompt and the AI makes the change for you, so there is nothing to edit by hand.
Click a step's **Edit** icon to change what the step does or replace it with a different step.
* Click the trigger's **Edit** icon to change which events trigger the workflow.
* Click the **Replace trigger** icon to switch to a different trigger, such as a scheduled, connector, in-app agent, or entity trigger.
Click the add button below a step, then choose **Action** or **Condition**.
Changing a workflow's steps creates a new version. Runs already in progress finish on the version they started with, and new runs use the latest version.
### Renaming a workflow
Give a workflow a clearer name at any time. Renaming does not create a new version.
**To rename a workflow:**
1. Click **Dashboard** in your app editor.
2. Click **Workflows**.
3. Click the **More Actions** icon on the workflow.
4. Click **Rename** and enter the new name.
### Running a workflow immediately
Run a workflow right away when you want to start it on demand. This helps you test changes, confirm that your configuration works, or handle something urgent between scheduled runs.
**Important:** Run now executes real actions using your current configuration, such as sending real emails or updating real records. It is a one-time manual run that does not affect your schedule or trigger, and it appears in the run history labeled as a test. When earlier runs exist, you can also replay the workflow using the data from a previous run.
**To run a workflow:**
1. Click **Dashboard** in your app editor.
2. Click **Workflows**.
3. Click the workflow to open it.
4. Click **Run now** in the details panel.
5. In the confirmation dialog, click **Run now** again.
### Cancelling a run
If a workflow is running and you need to stop it, you can cancel the run while it is still in progress. The cancelled run shows as **Cancelled** in the run history.
**To cancel a run:**
1. Click **Dashboard** in your app editor.
2. Click **Workflows**.
3. Click the workflow to open it.
4. Click the run that is in progress, then click **Cancel run**.
### Archiving a workflow
If you do not need a workflow anymore, you can archive it to keep your active list clean.
**To archive a workflow:**
1. Click **Dashboard** in your app editor.
2. Click **Workflows**.
3. Click the **More Actions** icon on the workflow.
4. Click **Archive**.
To see or restore archived workflows, click the **More Actions** icon next to **Create workflow**, then click **View archive**.
***
## Monitoring runs
Every workflow records each run so you can watch it happen in real time and review it afterward. Review a single workflow's runs from its details panel, or see runs across all your workflows on the **Activity** tab.
As a workflow runs, each step in the diagram shows a green checkmark when it completes successfully, so you can confirm at a glance that it works and see exactly where it stops if a step fails.
### Viewing a workflow's runs
When you open a workflow, the details panel shows its **Success rate**, **Avg. runtime**, and a **Run history** of every run. When something goes wrong, the run shows the exact step that failed and the error, so you know where to look without guessing.
**To view a workflow's runs:**
1. Click **Dashboard** in your app editor.
2. Click **Workflows**.
3. Click the workflow you want to inspect.
4. In the details panel, review **Run history**, where each run shows its time and status, such as **Completed**.
5. Click a run to open its **Run log**, including the start time, end time, and runtime.
### Using the Activity tab
The **Activity** tab under **Workflows** in your app dashboard brings together runs from all your workflows in one place.
Runs you start with **Run now** are labeled **TEST**, so you can tell them apart from runs that fired automatically.
**To view activity across workflows:**
1. Click **Dashboard** in your app editor.
2. Click **Workflows**.
3. Click the **Activity** tab.
4. Review the list of runs, where each one shows its workflow, status, start time, and run time. Filter by status (**Running**, **Completed**, **Failed**, or **Cancelled**) or by time range.
5. Click **View** on a run to open it in the workflow's diagram alongside its run log.
***
## Workflows and integration credits
Workflows are billed by the steps that run. Each step that runs a backend function uses a fraction of an integration credit, and the charges add up across all the steps in a single run. Built-in integrations that a step uses, such as sending an email or calling an AI model, can use credits too, as they do elsewhere in your app.
A workflow with several steps therefore costs more per run than a single-step one, so keep an eye on how often your workflows run and what each step does. If you run out of integration credits while a run is in progress, that run is cancelled. [Learn more about credits.](/Account-and-billing/Credits)
Workflows that run frequently or chain several actions can drain your credit balance quickly. Here are some ways to keep usage under control:
* **Add specific trigger conditions:** Narrow the criteria that start a workflow so it does not run unnecessarily.
* **Use conditions to skip unneeded steps:** Branch the workflow so expensive steps only run when they are actually needed.
* **Consolidate redundant workflows:** If several workflows perform overlapping tasks, combine them into fewer, smarter ones.
* **Resolve failing workflows promptly:** Workflows that error can still consume credits on each retry. Check your run history regularly and fix or disable problem workflows as soon as you spot them.
* **Review the frequency of scheduled workflows:** Consider whether recurring workflows, such as daily reports or reminders, need to run as often as configured.
* **Be sparing with AI calls:** If a step calls an AI model, that uses credits too, so only call it when you actually need the result.
* **Test on a small dataset first:** Run a workflow manually and check its run history to estimate the per-run credit cost before enabling it at scale.
***
## FAQs
Click a question below to learn more.
Yes. Ask the AI chat to add conditions to any workflow or step. For example:
```text theme={null}
After the wait, only send the reminder when the task is still incomplete.
```
The workflow then takes different paths based on the conditions you describe, so different steps run depending on your data. A condition can have several paths, plus a catch-all for anything that does not match, and the diagram shows each path separately.
Open the workflow and check its **Run history** to find the step that failed. Ask the AI in your dashboard to explain the error and suggest a fix, then use **Run now** to confirm the workflow succeeds.
If a workflow keeps failing, Base44 deactivates it automatically and emails you, so you can fix it before turning it back on. A scheduled workflow is deactivated after 5 consecutive failures, because it runs the same way every time, so repeated failures usually mean something is wrong. Workflows with any other trigger are deactivated after 50 consecutive failures, because their incoming data varies and the occasional failure is more expected. Fixing the workflow and reactivating it resets the count.
It depends on how the workflow starts. A scheduled workflow can run on demand at any time, because it does not need any input. A workflow that starts from an entity, connector, or in-app agent trigger needs the trigger's data to run, such as the specific task that was created, so **Run now** replays the data from a previous run. This means the workflow has to run at least once before you can run it on demand.
If you see **No previous runs**, trigger the workflow for real once, for example by creating a task for the task follow-up workflow, and then use **Run now** to replay that run.
Yes. Ask the AI to activate, deactivate, archive, or restore a workflow, and it makes the change for you without opening the dashboard menus.
# Customizing the design of your app
Source: https://docs.base44.com/Building-your-app/Design
Customize your Base44 app's look with the Theme panel, Edit mode, and AI chat: colors, fonts, per-element styling, themes, and motion.
Base44 gives you several ways to design your app: the **Theme** panel for global colors and fonts, **Edit** mode for per-element styling, and AI chat for broader changes. This page covers each approach with prompts and examples you can use directly.
For building a consistent design system, working with images, responsive layout, and accessibility, see [Design foundations and layout](/Building-your-app/Design-foundations-and-layout).
To define a reusable brand at the workspace level, such as colors, fonts, logo, and components shared across all your apps, see [Design system](/Building-your-app/Design-system). This page covers design changes within a single app.
***
## Working with AI on design
AI is at the center of how you design in Base44. You can just describe what you want in natural language, and AI updates code, styles, and components for you. **Edit** mode lets you tweak what you see on screen, and AI Controls help you set boundaries.
The AI chat is ideal for global changes and design decisions that affect many parts of your app. You can define a persona and brief once, then build on that:
```text theme={null}
You are my product designer for this app.
Design brief:
- Purpose: Help content teams plan, write, and ship articles faster.
- People: Busy content leads and writers on laptops during the workday.
- Feel: Calm, focused, modern, trustworthy.
Use this brief as the basis for all design suggestions and decisions.
```
Helpful patterns:
* Ask for a critique before asking for changes.
* Ask for a plan in Discuss mode, approve it, and then ask AI to implement it.
* Always clarify the scope of the design: the whole app, one page, or one element.
Example:
```text theme={null}
Critique the design of this dashboard only.
Focus on layout, hierarchy, color, typography, and spacing.
Then propose a short plan of small changes.
Wait for my approval before you apply anything.
```
After you review:
```text theme={null}
Apply the plan you proposed for this dashboard.
Make changes in small groups and describe each group briefly as you go.
```
**Edit** mode is ideal when you want to adjust what you see without rewriting everything.
Click **Edit** in the chat and then select the element you want to change. You can:
* Select a section and adjust colors, spacing, and layout visually.
* Ask AI to restyle just one component instance.
* Delete elements you no longer need using the **Delete** icon .
* Use it as a safe sandbox before you roll a pattern out to the rest of your app.
Click **Edit Element** on the Edit toolbar to ask the AI to make changes. For example:
```text theme={null}
In this selected section:
- Lighten the background slightly
- Increase vertical spacing between the heading and content
- Use the primary button style for the main action and secondary style for the others
```
```text theme={null}
For this card only:
- Increase padding
- Move the icon to the left of the title
- Use a softer shadow that matches other cards in the app
```
Use the [AI Controls](/Building-your-app/AI-chat-modes#setting-ai-controls) in the chat to guide and protect your design.
You can:
* Set design guidelines that apply to every prompt.
* Freeze specific files or pages so AI does not change them.
* Establish a tone such as minimal, bold, or playful.
Example guidelines:
```text theme={null}
Global design guidelines:
- Prefer calm, minimal visuals with plenty of white space
- Use rounded corners with radius 12 on cards and buttons
- Avoid heavy gradients and glass effects
- Keep animations subtle and respect reduced motion preferences
```
Always be explicit about scope in your prompts. The same change can apply to the whole app, one page, or a single element, and AI will follow your lead:
```text theme={null}
Update the primary button style and propagate it to all places where the primary button component is used.
Do not change secondary buttons.
```
```text theme={null}
Update only the hero section on the homepage:
- Change the background to a soft gradient
- Increase the heading size
- Use the primary button style for the main call to action
Do not change other sections or pages.
```
To protect areas you are happy with while experimenting elsewhere:
* Use AI Controls to freeze specific files or pages so AI does not change them.
* Use the **Revert** option on individual prompts to undo a single change.
* Use version history to roll back to an earlier state.
You can use the AI chat to explore different directions before you commit.
Critique loop:
```text theme={null}
Act as a senior product designer.
Review this page and describe three specific visual issues.
For each issue, write a Base44 prompt that would fix it.
Do not make any changes yet.
```
Alternative directions:
```text theme={null}
Create two visual options for this dashboard:
- Option A: very minimal, mostly neutral with a single accent color
- Option B: more expressive, with richer color and slightly larger typography
Keep content and layout the same.
Describe each option in a short summary and wait for me to choose.
```
Once you pick an option, you can ask AI to apply that direction to similar pages.
When you ask the AI to change the design or layout of a section or element, it may present visual options for you to choose from instead of applying a change right away. Each option shows a preview so you can see what it will look like before committing.
Select the option you want and click **Submit**, or click **Skip** to let the AI decide.
***
## Global changes
The **Theme** panel lets you set colors and fonts for your entire app from one place. Any change you make applies everywhere instantly, so you do not have to update elements one by one.
The panel shows a preview of your current palette at the top, followed by a list of color roles you can customize, such as background, foreground, primary, secondary, card, and popover. Click **Fonts** at the top of the panel to set your app's font instead.
### Theme colors
Click any color role to update it across your entire app.
**To change a color in your theme:**
1. Click the **Theme** icon at the top of your app editor.
2. Click any color role in the list to open the color picker. The bar at the top of the panel is a preview of your current palette and is not clickable.
3. Choose your color by dragging the picker, entering a hex value, using the eyedropper to sample any color on screen, or picking from a palette using the dropdown at the bottom of the picker.
4. Click **Apply** to preview the change in your app.
5. Click **Save & Apply** in the **Theme** panel to apply it everywhere.
Start with your primary color and background, then let those guide your other choices. Keeping foreground and background colors high contrast makes text readable across all components.
If your theme colors do not match your app's current colors, you can ask the AI chat to sync them. For example: `Update my theme to match the colors used in my app`.
### Fonts
Set your app's fonts from the **Fonts** tab in the **Theme** panel. A dropdown appears for each font your app uses.
**To change your app fonts:**
1. Click the **Theme** icon at the top of your app editor.
2. Click the **Fonts** tab.
3. Click a dropdown and select a font. You can search by name or browse **Brand Fonts** and **All Fonts**.
4. Click **Save & Apply** to apply the changes across your app.
If you don't see a **Fonts** tab, your app may not have theme font variables set up yet. Ask the AI chat to add them: `Add theme font variables to my app so I can change fonts from the Theme panel`.
***
## Element changes
When you are in **Edit** mode, you can style any individual element directly. Select an element and use the icons in the Edit toolbar to change its colors, typography, spacing, corner radius, opacity, or add custom Tailwind classes. The options available in the toolbar change depending on the type of element you select.
### Colors
You can set the background and text color of any element using the colors defined in your theme or a custom color.
**To change the color of an element:**
1. Click **Edit** at the top of the editor.
2. Select the element you want to change.
3. Click the **Colors** icon in the Edit toolbar.
4. Select the part you want to change, such as background or text.
5. Choose your color:
* **Theme:** pick from the color roles defined in your theme, such as background, foreground, card, and primary.
* **Custom:** drag the picker, enter a hex value, use the eyedropper to sample any color on screen, or pick from a palette using the dropdown at the bottom of the picker.
6. Click **Apply** to confirm the change.
For image elements, the toolbar shows a **Replace** button instead of the Colors option. Click **Replace** to swap the image.
### Typography
When you select a text element, the Edit toolbar shows controls for font family and size. A separate **Text Style** panel gives access to alignment, case, and decoration.
**To edit text content:**
1. Click **Edit** at the top of the editor.
2. Select the text element.
3. Click the **T** icon in the Edit toolbar.
4. Type your changes in the **Text Content** field.
If the text content is dynamically generated, the Text Content panel shows a message that it cannot be edited directly. Use the AI chat to change dynamic text.
**To change the font:**
1. Click **Edit** at the top of the editor.
2. Select the text element.
3. Click the font family dropdown in the Edit toolbar.
4. Search or browse fonts and click one to apply it. Hover over a font with a **>** arrow to see available weights, then click a weight to apply it.
To use a custom font, click **Upload Fonts** at the bottom of the dropdown. You can upload TTF, OTF, WOFF, or WOFF2 files up to 5 MB. Uploaded fonts appear under **Custom Fonts** in the filter.
**To change the font size:**
1. Click **Edit** at the top of the editor.
2. Select the text element.
3. Click the size dropdown in the Edit toolbar.
4. Choose a size. Available sizes range from 12 to 128.
**To change text style:**
1. Click **Edit** at the top of the editor.
2. Select the text element.
3. Click the **Text Style** icon in the Edit toolbar.
4. Adjust the settings you want to change:
* **Alignment:** left, center, right, or justify.
* **Case:** none, uppercase, lowercase, or capitalize.
* **Decoration:** none, underline, strikethrough, or italic.
### Spacing
You can set the margin and padding for any element in px, controlling each side independently.
**To change the spacing of an element:**
1. Click **Edit** at the top of the editor.
2. Select the element you want to change.
3. Click the **Spacing** icon in the Edit toolbar.
4. Enter values in px for margin and padding. Use the horizontal and vertical shorthand controls to set both sides at once.
### Corner radius
You can round the corners of any element by entering a value in px.
**To change the corner radius of an element:**
1. Click **Edit** at the top of the editor.
2. Select the element you want to change.
3. Click the **Corners** icon in the Edit toolbar.
4. Enter a value in px or use the arrows to adjust it.
### Opacity
You can make any element fully opaque, semi-transparent, or anywhere in between.
**To change the opacity of an element:**
1. Click **Edit** at the top of the editor.
2. Select the element you want to change.
3. Click the **Opacity** icon in the Edit toolbar.
4. Drag the slider or enter a value from 0 (fully transparent) to 100 (fully opaque).
### Tailwind classes
For styling not covered by the other options, you can enter any Tailwind CSS class directly.
**To add Tailwind classes to an element:**
1. Click **Edit** at the top of the editor.
2. Select the element you want to change.
3. Click the **Tailwind Classes** icon in the Edit toolbar.
4. Type any Tailwind CSS class. For example, `shadow-lg` adds a large shadow and `border border-gray-200` adds a subtle border.
***
## Themes and modes
Visual direction is the overall tone of your app. Themes are ways to express that tone using depth, color, and effects. In Base44, you can lean into a theme and still keep your brand intact.
### Design themes
Soft, extruded elements that look pressed into or raised from the background.
Best for calm tools with simple content.
Key features:
* Subtle inner and outer shadows
* Soft, monochromatic palettes
* Minimal depth and clean shapes
Prompt idea:
```text theme={null}
Give this app a soft neumorphic touch:
- Keep the current color palette
- Add subtle shadows to cards and primary buttons
- Avoid heavy contrast backgrounds
- Keep text contrast high for readability
```
Frosted glass surfaces with transparency and blur effects.
Best for overlays, side panels, and selected cards.
Key features:
* Backdrop blur
* Transparent panels with subtle borders
* Light glow and reflection effects
Prompt idea:
```text theme={null}
Apply a subtle glass effect to overlays and side panels only:
- Use translucent surfaces with blur and a thin border
- Keep backgrounds simple so text remains readable
- Maintain strong text contrast on glass surfaces
Do not apply glass effects to all cards or main content.
```
Structured, grid based layout with clear elevation and bold color.
Best for dashboards, admin tools, and data heavy apps.
Key features:
* Clear elevation layers
* Clean grids and alignment
* Purposeful motion
Prompt idea:
```text theme={null}
Move this app toward a soft material style:
- Use clear card elevation for key sections
- Clean up alignment and grids so content lines up
- Use bold, flat colors rather than strong gradients
- Keep transitions subtle and purposeful
```
Soft, puffy elements with rounded shapes and gentle shadows.
Best for playful apps, onboarding, or lighter experiences.
Key features:
* Rounded corners
* Pastel or soft color palettes
* Soft, even shadows
Prompt idea:
```text theme={null}
Add a light clay feel to key components:
- Round the corners of cards and primary buttons more
- Use softer shadows under those components
- Keep backgrounds neutral so the app remains readable
Apply this style only to interactive elements, not long text sections.
```
Deliberately bold, with strong color blocks and thick borders.
Best for landing pages and internal tools where personality matters more than subtlety.
Key features:
* High contrast color combinations
* Thick borders and strong shapes
* Raw typography and simple grids
Prompt idea:
```text theme={null}
Apply a controlled neo brutalist feel to the marketing pages:
- Use one bold accent color, one dark, and one light neutral
- Add thick borders and clear sections
- Make headings large and confident
- Keep body text highly readable
Do not apply this style to data tables or dense forms.
```
### Light and dark themes
Light and dark themes let people choose what feels best and can help in different environments.
You can ask the AI chat to add theme support and a toggle.
Prompt:
```text theme={null}
Add light and dark mode support:
- Light mode: soft gray backgrounds and dark text
- Dark mode: near black backgrounds, light text, and subtle borders
- Primary and accent colors should remain readable and consistent in both modes
Add a theme toggle in the header and remember the choice per visitor.
```
Theme support touches many components, so it can take AI some time to wire everything up. You can also specify changes that should apply only in light mode or only in dark mode.
***
## Motion and feedback
Motion and feedback help people understand what is happening on screen. You can use them to make clicks feel responsive, show that something is loading, and explain what to do next. In Base44, AI can add these patterns for you, so you do not have to hand code every animation.
Use this section when your app already works, but feels a bit flat or static, and you want it to feel more alive and reassuring.
Micro interactions are small visual reactions to what someone does, for example:
* A button that slightly grows and brightens on hover.
* A card that lifts when you move the mouse over it.
* An icon that gives a small checkmark animation when something is saved.
These effects make the app feel responsive without turning it into a cartoon.
You can ask AI to introduce a consistent set of interactions:
```text theme={null}
Add subtle interactions:
- Fade in each page on load with a short duration
- Make primary buttons gently grow and brighten on hover and focus
- Add a small lift effect to cards on hover
Respect reduced motion preferences and avoid any rapid flashing.
```
For marketing or promo pages, you can use a stronger tone:
```text theme={null}
On marketing pages only:
- Slide hero sections in from the side on first load
- Animate icons when a feature card becomes focused or hovered
- Keep animations short so the page still feels fast
```
Add motion after you are happy with colors, layout, and typography. Motion should support clarity, not hide weak structure.
Loading, empty, and error states are the places where people often feel stuck. Good feedback here can make your app feel much more polished and forgiving.
Examples:
* Loading: skeleton shapes that match the final layout instead of a generic spinner.
* Empty: a friendly message that explains what will appear here and a button to create or connect something.
* Error: a short, human explanation and a clear way to retry or get help.
You can ask AI to create these patterns across the app:
```text theme={null}
Improve feedback states:
- For each main list and dashboard, add a skeleton loader that matches the layout
- Design an empty state with an icon, one line explanation, and a primary action
- Add a clear error state with a short message and a retry button where relevant
Use the existing color and typography system.
```
These changes do not affect your data or logic, they only change how your app communicates to people when something is loading, missing, or has gone wrong.
***
## Quick tricks
If you want fast improvements, these short recipes can help you get a lot of value with a few prompts.
* Introduce a simple color system and apply it globally.
* Define clear text roles and increase line height.
* Add basic card and button components and reuse them.
Prompt:
```text theme={null}
Polish this prototype:
- Create a simple color system and apply it across the app
- Define typography roles for titles, headings, and body text
- Standardize buttons and cards and use them consistently
Keep content and logic the same.
```
* Increase row height slightly and add subtle separators.
* Move actions into a consistent column or menu.
* Add filters in a clear top bar.
* Add loading, empty, and error states.
Prompt:
```text theme={null}
Clean up this table page:
- Increase row height and add subtle row separators
- Move row actions into a consistent column at the end
- Add a simple filter bar above the table
- Add clear loading, empty, and error states
```
* Adjust spacing and hierarchy.
* Update card and button shapes.
* Introduce subtle micro interactions.
Prompt:
```text theme={null}
Give this app a soft visual refresh:
- Keep brand colors the same
- Improve spacing and hierarchy on each page
- Round card and button corners slightly and soften shadows
- Add subtle hover and focus states to primary actions
```
***
## FAQs
Click a question below to learn more about designing your app.
Tailwind CSS is a utility first CSS framework. Instead of writing custom CSS rules, you add small class names directly to your elements to control color, spacing, typography, and layout. Each class name usually maps to a single visual rule, so you can "read" the design from the classes themselves.
Common examples you might see:
* Colors: `bg-blue-500` sets a blue background, `text-white` sets white text.
* Spacing: `p-4` adds padding on all sides, `m-2` adds margin on all sides.
* Typography: `font-bold` makes text bold, `text-lg` sets a larger text size.
* Layout: `flex` creates a flex container, `grid` creates a grid container, `items-center` vertically centers items in a flex or grid row.
When you see Tailwind classes in Base44, you can combine them to describe the full style of an element. For example, `bg-blue-500 text-white p-4 flex items-center` gives you a blue bar with white text, padding, and centered content.
For deeper reference and the full list of utilities, you can check the official Tailwind CSS documentation.
You can use design version control in the AI chat to roll back changes.
* Each AI prompt has a **Revert** option that instantly undoes everything that specific prompt changed in your app.
* The clock icon in the AI chat opens version history. You can choose an earlier saved version of your app and roll back to it in one step.
Learn more about [AI chat modes and version history](/Building-your-app/AI-chat-modes).
You can ask the AI chat to remove the specific element, or click **Edit** in the AI chat and select the element, then click the **Delete** icon .
# Design foundations and layout
Source: https://docs.base44.com/Building-your-app/Design-foundations-and-layout
Keep your Base44 app consistent and well-structured: design systems, images and visual assets, responsive layout, page types, advanced customization, and accessibility.
Once you know how to [customize your app's design](/Building-your-app/Design), these foundations help you keep it consistent, well-structured, and accessible as it grows. This page covers building a consistent design, working with images and visual assets, responsive layout and page types, advanced customization, and accessibility.
***
## Keeping your design consistent
These sections cover how to establish consistent, app-wide design patterns using the AI chat, so your colors, type, spacing, and components feel cohesive across your app.
### Color system
Color is one of your strongest tools to set mood and guide attention. Start by defining roles rather than random hex codes. Aim for:
* 1 primary brand color
* 1 secondary color
* 1 accent color for highlights
* 3 to 5 neutral grays for backgrounds, surfaces, and borders
* Clear colors for success, warning, and error states
You can ask AI to propose and apply a full system from scratch:
```text theme={null}
Create a color system for this app:
- 1 primary brand color
- 1 secondary color
- 1 accent color for highlights
- 4 neutral grays for backgrounds, surfaces, and borders
Map colors to roles such as primary, surface, border, success, warning, error.
Ensure text on backgrounds meets accessibility contrast levels.
Apply this system across the app and replace one off colors.
```
Keep color meaning consistent. For example, only use your success color for positive states and your error color for problems, not for decoration.
If you already have hex codes from a brand guide or an external tool, paste them in and let AI map them to roles:
```text theme={null}
Use this palette and assign each hex to a role:
- #1D4ED8
- #6366F1
- #10B981
- #F3F4F6
- #111827
Define which are primary, secondary, accent, and neutral roles.
Replace hard coded colors with tokens or Tailwind classes that follow these roles.
```
You can upload a screenshot or image of your color palette directly to the AI chat and ask it to apply the colors to your app:
```text theme={null}
Apply the colors from this image to my app.
Map each color to a role such as primary, background, foreground, and accent.
Replace existing colors across the app to match.
```
***
### Typography system
Typography controls how readable and scannable your app feels. It is better to have a few clear text styles than many similar ones.
Define roles such as:
* Page title
* Section heading
* Body text
* Small metadata such as labels and timestamps
You can ask the AI to set this up and apply it everywhere:
```text theme={null}
Set up a typography system:
- Page titles: largest size, bold, modern sans serif
- Section headings: medium size, semibold
- Body text: standard size, regular weight
- Metadata: small uppercase with extra letter spacing
Apply these roles consistently across all pages and remove ad hoc font sizes.
```
You can also target sizes more directly:
```text theme={null}
Make typography more readable:
- Increase base body text size slightly
- Increase line height for paragraphs
- Ensure headings are at least 1.4x the size of body text
Keep font families the same.
```
You can use custom fonts and apply them through your layout.
1. Get the embed snippet (for example from Google Fonts at [https://fonts.google.com](https://fonts.google.com)).
2. Ask AI to add it to `Layout.js` and wire it into your type system.
Example prompt:
```text theme={null}
Import the "Raleway" font from Google Fonts.
Use it for page titles and section headings.
Keep the current body font for paragraphs.
Update styles across the app to follow this rule.
```
Try to limit yourself to one or two font families. Too many fonts make the interface feel unstructured and harder to maintain.
***
### Spacing and density
Spacing and density control how comfortable your app feels to use. A simple spacing scale prevents random gaps and cramped sections.
You can define a scale such as 4, 8, 12, 16, 24 and ask AI to apply it:
```text theme={null}
Normalize spacing using this scale: 4, 8, 12, 16, 24.
- Use larger values between major sections
- Use medium values inside cards and panels
- Use small values between labels and inputs
Reduce areas that feel cramped and avoid random spacing values.
```
If a page feels crowded or too empty, you can let the AI chat diagnose and fix it:
```text theme={null}
Look at this page and adjust spacing:
- Add more top and bottom padding around each section
- Increase the gap between rows of cards
- Ensure long paragraphs have a comfortable line length
Keep the existing colors and content.
```
***
### Core elements and states
Once color, type, and spacing are in place, standardize the building blocks you use everywhere.
Focus on:
* Buttons (primary, secondary, and text only)
* Cards and panels
* Navigation bars and sidebars
* Form fields (default, focus, error, disabled)
* Chips, tags, and badges if you use them
You can ask AI to detect and unify patterns:
```text theme={null}
Standardize core elements:
- Buttons: define primary, secondary, and text only styles
- Cards: define corner radius, padding, shadow, and header/body layout
- Navigation: define active, hover, and disabled states
- Form fields: define default, focus, error, and disabled states
Apply these patterns across the app and replace mismatched styles.
```
This gives you a reusable language so new pages look like they belong to the same product.
***
## Images and visual assets
Visual assets such as images, icons, and videos shape how your app feels. AI can help you create, place, style, and connect them to your data and code.
Upload images or videos to the AI chat to give it visual context for your app's style, layout, or content.
You can ask the AI chat to add hero images directly to your pages:
```text theme={null}
Add a full width hero image to the homepage that matches the current color palette.
Use a placeholder image that suggests a modern analytics dashboard.
```
To replace a placeholder image:
1. Open the relevant page file such as `Store.js` in code view.
2. Find the `` tag.
3. Update the `src` attribute with your own image URL.
You can also upload images for entities in the **Data** section and bind them to components so cards and lists display the right images automatically.
Ask the AI chat to generate short videos for visual sections such as heroes, product previews, tutorials, or onboarding screens.
Example prompt:
```text theme={null}
Create a short onboarding video for my fitness app showing a simple morning workout routine. Add it to the welcome screen above the Get Started button.
```
Generating videos from the AI chat requires a [Starter plan](/Account-and-billing/Billing-and-plans) or higher. Each generated video uses the prompt's message credits plus 1 additional message credit.
You can also let people generate videos in your live app. Learn more about [generating videos](/Integrations/built-in-integrations#generating-videos).
Reference images help you steer design visually by showing the AI chat a style, layout, color palette, or visual direction you want to use.
1. Click the **Upload icon (+)** on the AI chat.
2. Upload an inspiration image or screenshot.
3. Tell AI exactly what you want to borrow and what to ignore.
Prompt ideas:
```text theme={null}
Use this reference as inspiration.
Keep my layout and content, but:
- Match the button shapes and shadows
- Match the card corner radius and border style
- Apply a similar soft gradient only to the top header
Do not copy the exact colors, just the structure and feel.
```
```text theme={null}
From this screenshot, extract design rules for:
- Color roles
- Font sizes and weights
- Corner radius and shadows
- Spacing between sections and cards
Explain the rules, then apply a similar style using my current brand colors.
```
You can copy visual styles directly from a design tool such as Figma and ask Base44 to apply them, instead of trying to describe every detail in words.
**To copy from Figma:**
1. In Figma, select the element whose style you want to copy.
2. Switch to **Dev mode** and view the **Code** panel.
3. Copy the relevant CSS line, for example a gradient background: `background: linear-gradient(180deg, #C2C9B5 -1.25%, #EBEBEB 68.58%, #E6FC88 104.25%);`
4. In Base44, open **Visual Edit** and select the matching element.
5. Paste the style into an AI prompt and tell Base44 exactly what to change, for example:
```text theme={null}
Change the background style of this element to:
background: linear-gradient(180deg, #C2C9B5 -1.25%, #EBEBEB 68.58%, #E6FC88 104.25%);
Keep all other styles the same.
```
This lets you match gradients, shadows, borders, and other styles from your design file very precisely.
Icons should support meaning, not just decoration. Consistency is key.
Common tasks:
* Replace generic icons with more meaningful ones.
* Align icon sizes and stroke widths.
* Pair icons with text labels where clarity matters.
You can use icon libraries such as Lucide and ask the AI chat to wire them in:
```text theme={null}
Replace generic icons with more meaningful ones:
- Use icons that clearly match each navigation item and main action
- Keep icon size and stroke width consistent
- Align icons neatly with labels in navigation, lists, and buttons
```
```text theme={null}
Update all primary call to action buttons:
- Use the "sparkles" icon to the left of the label
- Keep icon size small and padding even
- Do not add icons to secondary or destructive buttons
```
***
## Layout and responsiveness
Layout controls how information is grouped and scanned. Responsiveness ensures that layout works on every device.
Think in page types rather than one off screens:
* Landing and marketing pages
* Dashboards
* Lists and tables
* Detail pages
* Forms and wizards
* Settings and profile pages
You can ask the AI chat to detect and standardize patterns:
```text theme={null}
Identify the main page types in this app (landing, dashboard, list, detail, form, settings).
For each type:
- Propose a consistent layout structure
- Suggest which existing components to reuse
Apply those layouts to all pages of the same type, without changing content.
```
Hierarchy and white space help people see what matters at a glance.
Ideas you can ask AI to apply:
```text theme={null}
Improve visual hierarchy and white space on this page:
- Make the page title clearly stand out above other text
- Use consistent section headings to group content
- Add more top and bottom padding around each section
- Increase the gap between rows of cards
Avoid adding new colors or fonts.
```
Whitespace is especially important for dense content such as dashboards and tables, so give key elements room to breathe.
Your app needs to feel natural on phones, tablets, and desktops.
You can encode responsive rules in a single prompt:
```text theme={null}
Make this layout responsive:
- On phones, use a single vertical column and stack sections
- On tablets, use two columns for cards where space allows
- On desktops, use three or four columns for cards
Keep images in a 4:3 aspect ratio.
Collapse the sidebar into a top menu on smaller screens.
Avoid horizontal scrolling at all breakpoints.
```
Use the device preview in the Base44 editor to check how these rules behave on different screen sizes, then refine them with follow up prompts.
### Customizing your app for mobile
Your Base44 app automatically adjusts its layout for any device, but you can use the editor's mobile preview and customization tools to fine-tune how your app looks and works on mobiles. This lets you create a comfortable, seamless experience for mobile users.
**To customize your app for mobile:**
1. Go to your app editor.
2. Click the **Screen** icon at the top and select **Mobile**.
3. Review your layout, navigation, and content.
4. Make changes as needed either by:
* Asking the AI chat to make changes to mobile.
* Using **Edit** mode in the AI chat to change the design or layout of specific elements.
**Tips to make your app look good on mobile:**
* Make sure the text is readable
* Resize elements to fit the mobile screen
* Hide or show elements as needed
* Ensure buttons and icon buttons are easy to tap
* Check that images look good
***
## Page types
Different page types need different design choices. You can use these patterns as starting points and adapt them with AI.
Focus on a clear promise, one main call to action, and strong visual hierarchy.
Design tips:
* Use a simple header with minimal navigation.
* Make the hero section clear and focused, with a short headline and one primary button.
* Use supporting sections for benefits, features, and social proof.
* Keep forms short and above the fold when possible.
Prompt example:
```text theme={null}
Design the homepage as a focused landing page:
- Clean hero section with a short headline, one supporting sentence, and one primary call to action
- Follow with three key benefits in cards
- Add a simple social proof section with logos
- Keep navigation minimal
Use my existing color and typography system.
```
Dashboards should answer "How am I doing?" at a glance.
Design tips:
* Put the most important metric or status near the top left.
* Group related metrics in cards with clear titles and short descriptions.
* Avoid too many chart types on one screen, reuse a few standard ones.
* Keep filters and time ranges clearly visible and consistent.
Prompt example:
```text theme={null}
Restructure this dashboard:
- Place the main KPI at the top left in a prominent card
- Group related metrics into a 2x2 grid of cards
- Move filters and date range controls into a clean top bar
- Reduce visual noise in charts by using consistent colors and styles
```
Lists and tables let people scan and act on many items.
Design tips:
* Use clear column headings with enough spacing.
* Keep row height comfortable, not too tight.
* Use zebra striping or subtle row separators for large tables.
* Keep actions either at the end of the row or in a consistent menu.
* Add empty, loading, and error states.
Prompt example:
```text theme={null}
Clean up this table view:
- Increase row height slightly
- Use subtle row separators or zebra striping
- Align actions in a consistent column at the end
- Add a clear empty state with a short message and primary action
```
Detail pages should make the main object and its key actions obvious.
Design tips:
* Put the object title and primary actions near the top.
* Use a clear layout with one main content column and optional side panel.
* Group related information with headings or tabs.
* Keep destructive actions visually distinct and placed carefully.
Prompt example:
```text theme={null}
Improve this detail page:
- Move the main title and primary actions to the top of the page
- Use a two column layout with main content on the left and secondary info on the right
- Group related fields under small headings
- Make destructive actions clearly labeled and visually distinct
```
Forms are where many key flows happen. They should feel simple and forgiving.
Design tips:
* Group related fields under headings.
* Use a single column layout for most forms.
* Show progress for long, multi step flows.
* Place error messages near the fields and make them clear.
* Use clear labels and helper text.
Prompt example:
```text theme={null}
Redesign this form for clarity:
- Use a single column layout
- Group related fields under short headings
- Add clear labels and helper text where needed
- Show inline error messages under each field when validation fails
Use my existing typography and spacing system.
```
***
## Advanced customization
When you want to go beyond what AI and **Edit** mode give you out of the box, you can bring in your own code and npm packages. AI can still help you wire and align everything.
You can use [npm packages](/Building-your-app/NPM-packages) to bring richer motion, visual effects, and interactive components into your Base44 app without building everything from scratch. Packages come from the public npm registry and are installed through the AI chat in your app editor, so you stay inside the same workflow.
**Design-focused examples include:**
* Animation libraries (for example, anime.js) to add transitions, hover effects, and micro interactions.
* UI component or motion libraries to handle modals, tooltips, carousels, or step flows with built in interaction patterns.
* Chart and graph utilities to visualize data with custom colors, typography, and spacing that match your app.
* Drag and drop or gesture libraries to make layouts feel more tactile and interactive.
* Date and time helpers to format timestamps and schedules in a way that fits your UI.
**After a package is installed, you can use AI chat to:**
* Import the right functions or components from the package.
* Wire them into your existing layout and design tokens (colors, typography, spacing, radius).
* Adjust props, variants, and motion so they feel consistent with the rest of the app.
* Check accessibility details like focus states, keyboard navigation, and reduced motion preferences.
**Prompt example**
```text theme={null}
I added the framer-motion npm package. Refactor the existing card grid so each card animates on hover using framer-motion:
- Keep the current layout and copy
- Use the existing color tokens, border radius, and typography
- Respect prefers-reduced-motion and keep keyboard focus outlines clear
```
All npm packages are third party code. Base44 cannot guarantee their quality or security, so make sure you review the package README, test it in your app, and confirm it meets your project's design and performance requirements.
Base44 apps often use Tailwind CSS utilities. AI can help you refactor messy styles into something more systematic.
Tasks you can ask AI to do:
* Replace inline styles with Tailwind utilities.
* Extract repeated patterns into reusable components.
* Map color values to design tokens and Tailwind config.
Example:
```text theme={null}
Refactor these components to use consistent Tailwind classes:
- Replace inline style attributes with Tailwind utilities
- Use the design tokens for colors, spacing, and typography
- Document the main class combinations for navigation, cards, and buttons
```
Sometimes you want precise control over layout, animation, or component structure. You can [open code files](/documentation/building-your-app/editing-code) directly and either edit them yourself or ask AI to do it.
Common design related edits:
* Updating `Layout.js` to change global wrappers, headers, or footers.
* Adjusting theme providers or context.
* Changing how components are composed and which props they accept.
To edit the code:
1. Open the relevant file.
2. Paste a code snippet into AI chat.
3. Ask for a change, then review the diff or preview.
Example:
```text theme={null}
Here is my Layout.js component.
Adjust it so:
- The header is sticky on scroll
- The main content has a max width and is centered on large screens
- The background color uses the surface token from my design system
Explain what you changed in comments.
```
Design choices affect [performance](/Performance-and-SEO/App-performance), especially when you introduce packages and heavy visuals.
Keep in mind:
* Use optimized image sizes rather than huge background assets.
* Avoid loading many heavy animations or large libraries on initial load.
* Lazy load rarely used sections such as deep reports or advanced filters.
* Reuse shared components instead of many near copies.
You can ask AI for a performance focused review:
```text theme={null}
Review this app's design from a performance perspective:
- Identify heavy visual or code related elements that might slow loading
- Suggest lighter alternatives that keep the same overall look
- Propose specific places where lazy loading or code splitting would help
```
***
## Accessibility
Accessibility is part of good design. It helps more people use your app comfortably and can improve clarity for everyone.
Color choices have a direct impact on readability.
Good practices:
* Use strong contrast between text and background.
* Avoid using color alone to convey meaning.
* Keep interactive elements such as buttons and links clearly visible in all states.
* Check both light and dark modes if you support themes.
Prompt example:
```text theme={null}
Audit this app for color contrast:
- Identify text or icons with low contrast against their backgrounds
- Strengthen contrast while keeping the same general palette
- Ensure primary buttons and links are clearly distinguishable
Describe the main fixes you applied.
```
Readable text is about more than font choice.
Good practices:
* Use comfortable font sizes on all devices.
* Use enough line height for paragraphs.
* Avoid very light weight fonts on light backgrounds.
* Keep line length reasonable, especially on wide screens.
Prompt example:
```text theme={null}
Improve text readability:
- Increase base body font size slightly
- Increase line height for paragraphs
- Ensure headings are clearly larger than body text
- Reduce very long line lengths on wide screens
```
People should be able to use your app with a keyboard and see where they are.
Good practices:
* Make sure Tab moves through interactive elements in a logical order.
* Ensure focus styles are visible and distinct.
* Avoid keyboard traps where focus cannot move away.
Prompt example:
```text theme={null}
Improve keyboard and focus accessibility:
- Ensure all interactive elements can be reached with Tab
- Add visible focus styles to buttons, links, and form fields
- Fix any focus order issues on this page
Describe any major changes you made.
```
Motion can help or hurt. Some people prefer less of it.
Good practices:
* Respect reduced motion preferences.
* Avoid rapid flashing or strong flicker.
* Use subtle, purposeful animations rather than constant motion.
Prompt example:
```text theme={null}
Adjust animations for accessibility:
- Respect the user's reduced motion preference
- Remove or simplify large continuous animations
- Keep only short, subtle motion that helps understanding
```
Clear language and descriptions help everyone, including people using assistive tech.
Good practices:
* Use clear, descriptive labels for buttons and links.
* Provide meaningful alt text for important images.
* Use headings to structure content.
* Avoid vague link text such as "click here".
Prompt example:
```text theme={null}
Improve accessibility of labels and alt text:
- Make button and link labels more descriptive where needed
- Add or improve alt text for important images
- Ensure headings follow a clear structure
Keep the tone and brand voice the same.
```
***
## FAQs
Click a question below to learn more about design foundations and layout.
Design for mobile, tablet, and desktop separately, then check how your layouts adapt.
Use these guidelines when you design in Base44:
* Mobile: Use a single vertical column, keep one clear primary action per screen, and make tap targets large with enough spacing. Keep text short so people do not need to zoom.
* Tablet: Treat tablet as a hybrid. You can use side menus or split layouts, but keep buttons touch friendly and avoid very small tables or dense controls.
* Desktop: Use the extra width for multi column layouts and sidebars. You can add hover effects, but any important action must also work with a click or tap.
* All devices: Use readable font sizes, avoid horizontal scrolling, and let elements stack instead of overlap when space is tight. Avoid fixed heights that cut off content.
You can also ask AI to apply responsive rules, for example:
```text theme={null}
Make this layout responsive for mobile, tablet, and desktop.
Avoid horizontal scrolling and keep primary actions visible without excessive scrolling.
```
Design choices have a direct impact on how fast your app loads and feels. When you design in Base44, keep these guidelines in mind:
* Use optimized image sizes so large assets do not slow down initial load. Prefer compressed formats and avoid uploading images much larger than they appear on screen.
* Limit heavy animations and complex effects, especially in mobile heavy apps. Short, simple transitions are fine, but avoid constant motion or large animated backgrounds.
* Keep layouts clean and focused. Fewer layers, overlays, and nested components usually mean faster rendering, especially on lower end devices.
* Reuse components instead of creating many slightly different versions. Shared components are easier to cache and maintain.
* Avoid loading everything at once. Where possible, load non critical content later, for example secondary sections, long lists, or rarely used panels.
* Be careful with third party embeds such as maps, video players, and widgets. Only include them where they add real value, and avoid stacking many embeds on a single screen.
# Design system
Source: https://docs.base44.com/Building-your-app/Design-system
Create a workspace design system in Base44 to define your brand's colors, fonts, logo, and components once, then apply one consistent look across your apps.
A design system saves your brand's look and feel at the workspace level: its colors, fonts, logo, and a set of matching components. Create it once, set it as your default, and every new app you build starts on-brand, so you do not have to redefine your style each time.
You do not need to be a designer. With just a few details, such as your logo, a short description of your brand, the feel you want, and any design files you have, Base44 creates an entire design system for you, so all your apps look professional and on brand.
**Availability:**
* Design systems are available on the [**Builder plan**](https://base44.com/pricing) and above.
* Workspaces on the Builder plan and above include 1 design system. Enterprise workspaces have no limit.
* Design systems apply to web apps. They are not applied to mobile apps, apps imported from Figma, or apps started from a URL.
* Creating and using a design system does not cost credits.
***
## What's included
When you create a design system, Base44 fills in everything that keeps your apps looking consistent and on brand, and shows it all in a live preview. Change a color or a font, and every example updates right away, so you always see how it looks.
A design system covers three things:
* **Your brand basics:** Your logo, brand name, tagline, and a short description, plus your brand's core values, tone of voice, and design guidelines for how it should look.
* **Your look and feel:** Your colors, your fonts, how rounded your corners are, how much shadow sits under things, and how much space goes between them.
* **Ready-made pieces:** Buttons, icons, and cards that already match your brand, ready to drop into any app.
***
## Creating a design system
You create a design system from your workspace settings. In one form you can combine a short description, your logo, an import from Figma or a website, and your own design files, and Base44 generates a complete design system from whatever you provide.
**To create a design system:**
1. Click your workspace name at the bottom left, then click **Settings**.
2. Click **Design system**.
3. Click **Create**. If your workspace already has a design system, click **Create new design system** instead.
4. In **Create your design system**, add any of the following:
* **Describe your brand:** Write a short description of your brand, and add your logo in the square beside it.
* **Import from Figma or URL:** Switch between **Figma file** and **Website URL**, then attach a `.fig` file or paste a website address. Only use URLs where you have the rights to the content.
* **Upload your design resources:** Add images, fonts, a `design.md` file, or other design files, up to 10 files.
5. Click **Create**. Generating your design system can take a few minutes, and you can leave and come back while it runs.
6. Review the generated design system in the preview, then adjust anything you want.
You can import from a Figma file or a website URL, but not both in the same design system. When you attach a Figma file, you can attach all of its pages and frames or choose specific ones. Base44 processes the file to generate your design system and does not store the original file.
***
## Editing your design system
When you open a design system, you edit it in a two-panel editor. On the left are all of your brand and design settings. On the right, a live **Preview** shows those styles applied to real buttons, icons, and cards, the way they look in your app or website. As you change a setting on the left, the preview updates instantly.
Your design system's name and tagline sit at the top of the page. Click either one to edit it in place.
On the left, you can edit each part of your design system:
A short description of your brand. Base44 uses it to keep everything it generates on brand.
Add your brand logos, or generate one with AI. Click **Add logo** to upload a logo, or **Generate logo** to describe one and let Base44 create it. One logo is marked as **Primary**, and you can set a different one as primary from its **More actions** menu.
Choose your heading and body fonts, or upload your own. You can also fine-tune the weight of each font style.
Click a color to edit it, or click **Generate palette** and describe the colors you want.
Defines how your brand communicates. Click **Add tone** to add a trait, or click the generate icon to let Base44 suggest a new set.
The principles your brand stands for. Click **Add value** to add one, or click the generate icon to let Base44 suggest a new set.
Set how rounded your components look.
Fine-tune how much space goes between elements.
Set how elevated your components look. Click a shadow to adjust its position, blur, spread, and color.
Rules that keep your app's visual language consistent. Click **Add guideline** to add one, or open the **More actions** menu on a guideline to edit or delete it.
Your edits are not applied until you save them. Click **Save changes** to keep them, or **Reset changes** to undo edits you have not saved yet. A design system needs a name and an overview before you can save it.
***
## Managing your design systems
Manage a design system from its card in the **Design system** section. Open the **More actions** icon on a design system to edit it, set it as your default, or delete it.
**Who can manage design systems:**
* **Owners and admins:** Can create, edit, set the default, and delete any design system.
* **Editors:** Can create and edit design systems. Only owners and admins can set the default or delete a design system.
### Setting a default design system
Set a design system as your workspace default so new apps start with it automatically.
**To set your default design system:**
1. Click your workspace name at the bottom left, then click **Settings**.
2. Click **Design system**.
3. On the design system you want, click the **More actions** icon and click **Set as default**.
To stop using a design system as your default, open the same menu and click **Remove default**.
### Deleting a design system
Delete a design system you no longer need.
Deleting a design system from its card takes effect immediately, and it cannot be undone.
**To delete a design system:**
1. Click your workspace name at the bottom left, then click **Settings**.
2. Click **Design system**.
3. On the design system you want, click the **More actions** icon and click **Delete**.
***
## Using your design system when building
When you start a new app, your default design system is preselected, so the app is built to match your brand from the first prompt. To choose a different design system, click the **Add** icon in the AI chat, select **Use a design system**, then pick the one you want.
You can also apply a design system to an app you are already working on, from the same **Add** icon in the AI chat. When your workspace has one design system, the option shows its name, and clicking it attaches the design system to your next prompt.
Applying a design system takes effect on a build turn in the AI chat. If your chat is set to a non-building mode such as **Discuss**, switch to **Build** first.
Applying a design system to an app that is already built rebuilds the app to match, rather than restyling it in place. Apply it early, or expect the app to be regenerated.
***
## FAQs
Click a question below to learn more about design systems.
No. Describe your brand in a few words, or import from a website, a Figma file, or your logo, and Base44 generates a complete design system for you. You can then adjust any part of it.
On the Builder plan and above you have 1 design system per workspace, so use a separate workspace for each client or project that needs its own brand. Enterprise workspaces have no limit.
# Managing your app data
Source: https://docs.base44.com/Building-your-app/Managing-your-app-data
Stay organized and power your app with easy, flexible data management.
***
In Base44, your app’s data is the information that brings everything to life. It includes all the information that your app holds, such as people who sign in, the content you show, orders you process, and the activities that happen in your app.
***
## Understanding your data
All of your app's data is organized in tables, just like a spreadsheet. Each table groups one type of info (such as people or products) and sorts it into columns called fields, such as names, dates, or prices.
For example, if you [create an app](https://base44.com/ai-app-builder) to run your shop’s business, you can use the data tables in Base44 to keep everything organized. You might have a **Users** data table to store your customers' names and email addresses, a **Products** table listing what you sell, and an **Orders** table to track every purchase.
Each new customer, product, or order is automatically added as a new row in the right table, so you can quickly find, update, or manage your shop’s information.
***
## Data field types
When you, or the AI, add a field (column) to your table, you choose what type of information it stores. Some common field types include:
* **Text:** For words, phrases, or descriptions (such as customer names or product details)
* **Number:** For prices, quantities, or measurements
* **Yes/No (Boolean):** For fields that are true or false (such as “Is active?”)
* **Date/Time:** To save dates such as sign-up day, order date, or event time
* **File:** For images, documents, or other files
* **Reference:** To link this table to another table (for example, linking each order to the right customer)
* **Object:** For advanced cases, this lets you add structured information such as a JSON object
***
## Accessing your app's data
It is easy to see all the information your app collects. You can view your data at any time from the dashboard, where each table gives you a clear, organized look at your people, products, orders, and more. This helps you track what is happening in your app and keep everything up to date.
### Viewing your app's data
The **Data** page shows every table in your app as a card. Click a card to open its records.
1. Click **Dashboard** in your app editor.
2. Click **Data**.
3. Select the relevant data set (table).
Each card has a **More Actions** icon with quick options for that table: **View Data**, **Export**, **Schema**, **Recently Deleted**, and **Delete All**. A warning icon on a card means the table has a row-level security risk. See [Fixing permission risks](#fixing-permission-risks) to review and fix who can access its data.
You can also access an entity's data table directly from **Edit** mode. Click any element that displays data from an entity and select **Edit data**.
### Searching for specific data
Use the search bar above the table to quickly find relevant rows. The search looks through all text fields in your data, so you can jump straight to a specific row instead of scrolling.
**To search for data:**
1. Click **Dashboard** in your app editor.
2. Click **Data**.
3. Enter a word, number or phrase in the search bar above the table.
### Filtering your data
Use filters to turn a long table into a focused view, for example to see only shipped features, items owned by your team, or work planned for a specific quarter.
The filters displayed come from the fields in your data set, so each table has its own relevant list of filter options.
**To filter your data:**
1. Click **Dashboard** in your app editor.
2. Click **Data**.
3. Click **Filters** in the top right of the table and select your filters.
***
## Adding and updating data
Base44 automatically collects and updates your app’s data as people interact with your app. The AI sets up your tables so the right information is saved and kept up to date for you. However, if you want to manually add information (for example, add a product, update a record, or input test data), you can do it easily from your app’s dashboard inside your app editor.
### Manually adding data
1. Click **Dashboard** in your app editor.
2. Click **Data**.
3. Select the relevant data set (table).
4. Click **Add Item**.
5. Enter the data and click **Submit**.
### Editing data
To edit a data record, click the row of the table that you want to edit, complete the details and click **Submit**.
### Deleting data
Delete your app's data at any time.
**Note:** You can view and restore recently deleted records from any data table. Deleted records are kept for 30 days, so you have time to recover information if needed. Click the **More Actions** icon on the top of the data table and click **Recently Deleted** to see and restore deleted records. After 30 days the data is permanently deleted and cannot be restored.
On Elite and Enterprise plans, [data version history](/Enterprise/data-version-history) keeps automatic snapshots of each entity's records, so you can review, download, and restore an earlier version if data is edited, imported, or deleted by mistake.
To delete a single record, click the **Delete** icon on the relevant row of the table.
To delete all the records in a table, click the **More Actions** icon on the data entity and click **Delete All**.
You can also ask the AI chat to delete records for you. The AI prepares the delete action and asks for your approval before anything is removed.
**To delete data with the AI chat:**
1. Open the AI chat in your app editor.
2. Describe what you want to delete, for example: `Delete the data for Italy in the TripItem entity.`
3. Review the delete request that the AI suggests, including the entity name.
4. Click **Approve** to confirm the deletion, or **Reject** to cancel.
***
## Importing data
Sometimes you want to bring in lots of information to your app at once. You can import data in 2 ways, depending on whether you want to work directly in the dashboard or ask the AI chat to help.
Imports add new rows to your tables. They do not update or overwrite existing records. If you want your file to replace the data in a table, first delete the current records in that table, then run the import again with your file.
### Using the AI chat
Use the AI chat to turn existing data files into entities and records in your app. This is helpful when you already have information in a spreadsheet or JSON file and want to bring it into Base44. You can upload structured data files and ask the AI to create or update entities for you, including setting up tables and mapping fields.
Supported formats for importing data:
* CSV (.csv)
* Excel (.xlsx, .xls)
* JSON (.json)
If you upload an Excel file with multiple sheets, you can ask the AI to import a single sheet or import all sheets into their matching entities.
* `Import this data into the Customers entity.`
* `Import this JSON file into my Orders entity.`
* `Import the ‘Orders’ sheet into the Orders entity.`
* `Here is a CSV of my Products. Create a Products entity with matching fields and import these rows.`
**To import data using the AI chat:**
1. Create the entity you want to import into (for example, Products, Contacts, Orders).
2. Open the AI chat in your app editor.
3. Click the **Upload files** icon and select your data file.
4. Ask the AI to import the data.
5. Review the response and approve the import in the chat.
When you import data this way, Base44 analyzes your file structure and maps columns to your entity fields. It can create or update entities if your schema needs to change, adding new entities or fields, or adjusting field types to match your file. It does not update or overwrite existing records; it always appends new rows.
If something does not match, the AI updates the schema where it is safe to do so, then retries the import so you do not need to fix everything manually.
For file size limits and more details about uploading files to the AI chat, see [Uploading and managing files](/Building-your-app/Using-media).
**To use the AI chat to replace existing data:**
If you want the content of a file to replace all the current records in an entity, you need to clear the entity first, then import the new rows from your file.
**Tip:** Before you delete records, consider exporting the table so you have a backup copy of your original data.
1. Ask the AI chat to delete the records in the relevant entity (for example, `Delete all records from the Orders entity.`).
2. Confirm that you want to delete the records.
3. Click the **Upload files** icon and select your data file.
4. Ask the AI chat to import the file into the same entity.
### Directly in the dashboard
Use this option when you already have a CSV that matches your table and you simply want the rows to appear in your data. Dashboard imports currently support CSV (.csv) files.
**To import data from the dashboard:**
1. Click **Dashboard** in your app editor.
2. Click **Data**.
3. Select the relevant data set (table).
4. Click the **More Actions** icon and click **Import**.
5. Choose your CSV file and click **Open**.
**Note:** Imports from the dashboard also add new rows only. They do not update or overwrite existing records. If you want to replace everything in a table with the content of a CSV file, first click **Delete All** on that table to clear the records, then import the CSV.
Example: Export your customer list from another tool as a CSV, adjust the columns to match your **Customers** table, then import the file so you can manage those customers directly in Base44.
***
## Exporting data
You might want to take your app's data out for backup, analysis, or to use in other tools. To do this, you can use the **Export** option. For example, you might want to export your store orders or people lists to share with your accountant, or use the data to create custom reports.
Your data downloads as a CSV file you can open in spreadsheet software such as Excel or Google Sheets.
**To export your app's data:**
1. Click **Dashboard** in your app editor.
2. Click **Data**.
3. Select the relevant data set (table).
4. Click the **More Actions** icon and click **Export**.
***
## Changing data permissions
Each data table has its own security settings, controlling who can **read** and **write** its data.
**Read Access**: Who can view records\
**Write Access**: Who can create, update, or delete records
**Note:** For more detailed explanations, see the [Managing security settings guide](/Setting-up-your-app/Managing-security-settings).
**To change the permissions for your data:**
1. Click **Dashboard** in your app editor.
2. Click **Security**.
3. Click the relevant data entity and set the permissions.
### Fixing permission risks
When a table has a row-level security risk, a warning icon appears on its card on the **Data** page. Open the table to see a **Permission risks detected** banner that explains the risk and the recommended rules.
* Click **Fix** to apply the recommended rules automatically.
* Click **More details** to review the risk and the suggested changes first.
***
## Connecting your data to another app
You can let another app read or write data from your Base44 app. This is useful if you want to sync information, automate tasks, or give access to outside tools.
1. Click **Dashboard** in your app editor.
2. Click **API**.
3. Select the relevant data entity from the drop-down menu.
4. Choose which code sample you need (for example, JavaScript or Python).
5. Copy the provided code for reading or updating data.
6. Paste this code into the other app or tool, so it knows how to connect to your table.
***
## FAQs
Select a question below to learn more about your app's data.
It is not currently possible to automatically merge two separate apps into a single app in Base44. Each app is managed as an independent project with its own codebase, settings, permissions, and integrations.
If you want to combine the features of two apps, you need to manually recreate or copy code, components, and settings from one app to the other. After combining the code and functionality, thoroughly test the new app to make sure everything works as expected.
Yes, to delete your data, go to **Data** in your app's dashboard. On the relevant data tab, click **More Actions** and then **Delete All**. You can access and restore the deleted data for 30 days but after that it is permanently deleted.
You can access and restore your deleted data for 30 days. After that, deleted data is permanently removed and cannot be restored.
Yes. You can safely ask the AI chat to add mock data for testing. By default, it adds new records without changing or removing existing ones, so your important information stays protected.
For structured testing, it is better to use the built-in test data feature instead of adding ad hoc mock records to your live tables. Test data lets you quickly generate, reset, and remove sample records without affecting your real production data. Learn more in [Testing your data](/documentation/managing-app-data/testing-your-data).
If you do choose to add test records directly to a table with the AI chat, you can clear them later from the dashboard by deleting those records.
The AI chat focuses on adding and importing data. It does not remove records unless you clearly ask it to delete data from a specific entity and confirm the action.
If you want to replace all data in an entity with the content of a file, the safe pattern is:
* Export the current table if you want a backup.
* Ask the AI chat to delete the records in the relevant entity.
* Upload your file and ask the AI chat to import it into the same entity.
This makes sure the entity is cleared first, then filled with the new rows from your file.
If you want to add a new column (field) or make other changes to your data tables, ask the AI chat to do it for you. The AI chat handles updates to your data schema, you just need to describe what you want to change.
For example, if you want to add a "Notes" column to one of your data tables, prompt the chat to add it. It is best if you use Discuss mode in the chat to help the AI decide how to go about the change before implementing it.
Starting November 27, 2025, there is a limit of 5,000 items per request to help keep performance fast, stable, and reliable.
If your app currently pulls everything in one large request, you may need to update it to load data in smaller pieces. Once this change goes live, double-check your flows to make sure everything still works as expected.
**Tip:** To make sure you are within the limitation, you can paste this message into the Base44 AI chat: “Make sure all data pull requests are limited to 5,000 items.”
You have not lost your data. When a collection has more than 5,000 records, the system limits how many items can load at once to protect performance. What you see depends on where you are looking:
* **In your dashboard**: The data table only shows up to 5,000 items, even if your collection contains more. All of your records are still stored. To review everything, export the collection to CSV from the dashboard so you can see all items outside the table view.
* **In your app pages**: Pages that try to fetch the entire collection in one request also only show up to 5,000 items. The rest of the records are still there, but they are not loaded on that page. Set up pagination so your app loads data in smaller chunks, for example 50 to 200 items at a time. You can ask the AI chat to add pagination for you.
Yes. If the data is stored inside your Base44 app, you can read from your entities and display it on any plan, including the free plan. Basic data fetching and display does not require backend functions or a paid plan.
Backend functions are only needed when you want to connect to an external service or API outside of Base44, such as Strava, Stripe, or a third-party database. Connecting to external APIs requires the **Builder plan** or higher.
Yes. You can build a full role and hierarchy system in your app, including managers, teams, and even separate spaces for each customer if you are building a SaaS app.
At a high level, the pattern works like this:
* People sign up and sign in through the normal Base44 login flow. Their account details are stored in the built-in **User** entity. You do not change the security rules of this entity.
* You create your own entities to model your business, for example Company, Team, and TeamMember.
* Each record in these entities links back to a User record using a reference field, such as userId. This lets you connect login accounts with your own business roles.
* You use data permissions and row-level security on your entities so each person only sees the records they should see.
For example:
* In a SaaS app, each Company record can represent one of your customers. Data permissions make sure people from one company cannot see another company’s data.
* Within each company, TeamMember records can store fields such as role, manager, and team. You can then set rules so managers see all records for their team, while individual team members only see their own records or items assigned to them.
* Global admins in your app can have a role that allows them to see and manage all records across companies and teams.
This approach lets you support complex, multi-level apps (sometimes called “User of User” or UoU) while Base44 continues to manage login and the core User entity securely. To design the exact rules, use the data permissions and row-level security options described in the [Managing security settings](/Setting-up-your-app/Managing-security-settings) guide.
# Creating and using your app on mobile
Source: https://docs.base44.com/Building-your-app/Mobile-experience
Create, edit, and manage your Base44 app from your mobile device. Let anyone open and use your app right from their own home screen, just like a native app.
Base44 gives you full flexibility on mobile. Build and edit from a mobile browser or the Base44 app, share your app with users so they can add it to their home screen, and submit it to the App Store or Google Play when you're ready.
***
## Using Base44 from a mobile browser
You can create, edit, and manage your apps directly from a mobile browser, without needing to download anything. This lets you capture ideas, make quick changes, and keep your work moving wherever you are.
### Creating an app on mobile
Start a new app project wherever you are, using just your mobile device. This helps you capture ideas, build quickly, and manage your work even when you're away from your computer.
**To create a new app from your mobile browser:**
1. Open your browser on your mobile device.
2. Go to [**base44.com**](http://base44.com) and tap **Start Building.**
3. Sign up or log in.
4. Write your prompt and start building.
### Editing your app on mobile
Update your app directly from your mobile browser, making it easy to adjust content, add features, or make quick changes while on the go.
Some features such as connecting a domain and managing your app's security are not available on mobile. You need to go to a desktop to make changes to these.
**To edit your app from your mobile browser:**
1. Open your browser on your mobile device.
2. Go to [**base44.com**](http://base44.com) and tap **Start Building.**
3. Log in to your account.
4. Tap your app.
5. Tap **Chat to Edit** to make changes using AI.
***
## Base44 mobile apps
Download the Base44 app to build, edit, and manage your apps on the go.
### Android
The Base44 Android app is available on Google Play. Download it to build, edit, and manage your apps directly from your Android device. [Download from Google Play](https://play.google.com/store/apps/details?id=com.base44.android\&pcampaignid=web_share)
### iOS
The Base44 iOS app is available on the Apple App Store. Download it to build, edit, and manage your apps directly from your iPhone or iPad. [Download from the App Store](https://apps.apple.com/il/app/base44-build-with-ai/id6757432427)
**Important:**
* The price shown in the iOS app may differ from the price on base44.com, as Apple applies its own fees.
* To manage, change, or cancel your subscription, go to your Apple ID subscription settings. You cannot do this from your Base44 account.
* If you have a billing issue with a subscription purchased through the iOS app, you need to contact Apple Support directly. We are not able to help with billing issues processed by Apple.
***
## Sharing and installing your app
Your app works in any mobile browser without needing to be in an app store. [Share the link](https://docs.base44.com/Setting-up-your-app/Managing-access#sharing-your-app) to your published app and let your users know they do not need to download anything.
For the best experience, recommend that your users add the app to their home screen. When someone adds your app to their home screen, their device uses your app's logo as the icon. It appears alongside other apps and opens with a single tap, just like a native app.
Your app updates automatically, so everyone opening it from the home screen always sees the latest version.
**To add your app to the home screen:**
1. Open the app link in your mobile browser.
2. Tap the share option in your browser.
3. Tap **Add to Home Screen**.
4. Edit the shortcut name if you want, then tap **Add**.
***
## Submitting your app to app stores
You can prepare your app for the Apple App Store and Google Play directly from the app editor. Scan your app against store guidelines, use AI to fix issues, and generate the IPA and AAB files that you need to upload in your Apple and Google developer accounts.
You need a [Builder plan or higher](https://app.base44.com/billing) to download the files for app stores.
Learn how to [submit your app to app stores](/documentation/building-your-app/uploading-to-app-stores).
***
## Exporting your app
If you have a Builder plan or higher, you can export your app's code to GitHub or download it as a ZIP file. This lets you work with external tools and workflows outside of Base44.
You can then use third-party tools such as Capacitor, PWABuilder, or Trusted Web Activities (TWA) to wrap your app's URL or exported code, making it possible to distribute your app on mobile app stores. These wrappers are managed outside of Base44, and any native-only features like push notifications must be set up separately.
If you export your frontend and data, you can host the frontend elsewhere and connect it to your own backend system if you wish.
**Frontend (app codebase) and functions:** Your app's code by clicking the export button in the top-right corner of the app editor (GitHub or ZIP). The export includes all client-side code (HTML, CSS, JavaScript, assets) and backend functions.
**Backend (data):** Your database collections as CSV files. Go to **Data** in your app editor, select a collection, click the More Actions icon and then **Export**.
Managed hosting, authentication system, or database infrastructure.
For advanced help and community support, visit the [Base44 Discord community](https://discord.com/channels/1303811506080841758/1368653043071058100) to connect with other builders and share tips.
***
## FAQs
Click a question below to learn more about using your app on mobile.
Yes. Your app automatically adjusts its layout for any device, but you can fine-tune how it looks and works on mobile. See [Customizing your app for mobile](/documentation/building-your-app/design#customizing-your-app-for-mobile) in the design doc.
Push notifications are not currently supported in Base44 apps. There are no push notification settings in the dashboard or app settings. If you want native push notifications in the future, you can suggest or upvote this feature on the Feedback board.
[Add your vote on the feature request for push notifications.](https://feedback.base44.com/p/feature-request-native-push-notifications-support)
No. Any time you make or publish changes, your visitors automatically see the latest version.
Yes, every element, form, and feature of your app works on both desktop and mobile devices. We recommend testing your entire app on mobile and making any necessary adjustments in the app editor to ensure the best experience for your users.
You do not need to create or upload a manifest.json file for your app. Base44 automatically generates and manages the manifest.json for you.
You can view your app's manifest at:\
`https://yourdomain.com/api/apps/manifests/YOUR_APP_ID/manifest.json`
To change what appears in the manifest, update your app information instead of editing the file directly:
1. Go to your **App Dashboard** and click **Overview**.
2. Update your app name, descriptions, icons, and other branding details.
These changes are reflected automatically in your manifest.json file.
Some features in Base44 are only available from desktop so you can manage them more easily on a larger screen. These include Visual Edits, security settings (RLS), editing code, working with APIs, app templates, and more.
If you do not see a feature in the mobile app editor, open it from a desktop browser to access the full set of options.
# Adding and using npm packages
Source: https://docs.base44.com/Building-your-app/NPM-packages
Extend your app with pre-built code libraries.
## What are npm packages?
Use npm packages to add powerful features and tools to your Base44 applications without having to build everything yourself. Base44 is an [ai app builder](https://base44.com/ai-app-builder) that gives you access to reliable, up-to-date code libraries for things like animations, data formatting, and charts, all created by expert developers.
When you use npm packages, you can add advanced features in minutes, rely on well-tested code, and focus on creating what makes your app unique.
Think of npm packages as little boxes of ready-made code you can plug into your app. Someone else already wrote the code. You just need to install the package and can use all its abilities instantly.
Base44 makes it simple to add npm packages to your app. You can request to add npm packages, review the request, and approve installation, all from the AI chat inside your app editor.
* Animation libraries (for example, anime.js)
* Chart and graph utilities
* Date and time helpers
* UI components
* Drag and drop logic
**Important:**
All npm packages are created and maintained by third parties. Base44 can’t guarantee the quality, reliability, or security of any external package you install. Always test and validate packages carefully to make sure they work correctly in your app. You are responsible for ensuring that any third-party packages you use meet your project’s needs.
***
## Browsing npm packages
You can find npm packages in the public registry. Each package README includes detailed instructions, usage examples, and peer dependency details, so you can get started right away.
Use the Base44 [**npm Playground**](https://NPM-Playground.base44.app) to preview npm packages in action and plug them directly into your app.
**To browse Base44 npm packages:**
1. Go to [npmjs.com](https://npmjs.com) to see all available public packages.
2. Click the package you want to use to open its details page.
***
## Adding an npm package to your app
In Base44, you can add npm packages by chatting with the AI. No terminal or manual install commands required.
**To add an npm package to your app:**
1. Go to your app editor.
2. Type in the AI chat the npm package you want to install.
3. When prompted, click **Approve** in the chat.
***
## Example of using an npm package
You can use anime.js to create polished entrance animations for your app’s pages and elements. For example, you might want to animate cards, buttons, or charts when a page loads to make your site feel more engaging.
Simply add a prompt such as:
```text theme={null}
Install the npm anime.js and make my app beautiful
```
The AI chat will ask you to approve the installation and the package is installed right into your app.
Once it is installed, you can use anime.js to animate page sections, icons, and more.
***
## FAQs
Click a question below to learn more.
Base44 does not currently offer a public SDK. However, you can vote for this feature on our [Product Roadmap](https://feedback.base44.com/roadmap/main?q=sdk).
For advanced developers, the `npm-base44/sdk` package is available. This package allows you to perform specific backend functions.
If your npm package does not install or gets stuck on pending, try these steps:
1. Check the chat messages for error details. Sometimes, the AI chat will explain about dependency or compatibility issues with the package you are requesting to install.
2. Make sure your request matches the exact package name and version.
3. If install requires approval, verify that you have approved the request in the chat panel.
4. If the install fails, try re-requesting the package using the chat.
Yes. You can ask the AI chat in your app editor to remove or update an npm package for you. To remove a package, tell the chat which package to uninstall. To update one, ask the chat to update it.
Removing a package is a good way to keep your dependencies tidy, though an unused package that stays installed has no effect on how your app runs.
To find out which npm packages you have installed on your app, you can ask the AI chat.
Choose the right npm packages by following the recommendations below. Doing a little research on each package, instead of installing it immediately, can help you find reliable options and prevent issues down the line.
* **Download statistics:** Look up how many downloads the package has on npm. Packages with a strong download history are generally seen as dependable within the development community.
* **Documentation quality:** Well-documented packages usually make setup and troubleshooting much easier. Look for clear usage instructions, examples, and API references.
* **License type:** Make sure the package’s license fits your project’s requirements, especially if you’re building something commercial or open-source.
* **Bundle size and dependencies:** Consider how the package will affect your app’s performance and whether it adds many new dependencies. Lightweight, focused packages reduce potential conflicts and bloat.
* **Update activity:** Review the project’s repository, such as on GitHub, to see if updates are recent and if maintainers are addressing questions or bug reports. Packages that are kept up to date are usually safer and more compatible with modern tools.
* **Community input:** Explore comments, ratings, and discussions from npm, GitHub, or programming forums. Other developers’ experiences can alert you to potential issues or give you a better sense of how the package performs in practice.
# Uploading and managing media
Source: https://docs.base44.com/Building-your-app/Using-media
Make your app stand out with images, videos, documents, data files, audio, and your own branding.
Media files such as images, videos, audio, documents, and data files help you create a rich, interactive app experience for people using your app. You can upload files while [building your app](https://base44.com/ai-app-builder) and in your live app, giving people new ways to share and engage.
You can also add a custom logo that appears when someone adds your app to their home screen. The logo is also used as the browser favicon, so your app always looks professional and on-brand from both desktop and mobile.
***
## Using your file library
Your app has its own file library where Base44 stores files that you upload or generate while you build. This gives you one place to organize and reuse media and reference files across your app. You can keep images, videos, brand guides, PRDs, and data exports in your file library, then use them in your app or add them to the AI chat as context.
Any images and videos the AI generates and any files you upload from the editor or AI chat are automatically stored in the file library, and when you add a file from the library to the AI chat, the AI uses it as context for your prompts.
The file library is per app. Files saved in one app's library are not shared with other apps in your workspace.
**To access your file library:**
1. Go to your app editor.
2. Click the **Add** icon in the AI chat.
3. Click **Choose from library**.
***
## Adding files to your app
You can add files to your app from your file library, from your computer, or from Google Drive. All files you add this way are stored in your app's file library so you can reuse them across your app and in the AI chat.
For example, you can keep product photos or demo videos in your file library and then attach them in the AI chat when you ask the AI to design a new section.
You can also ask the AI to generate and add images or videos to your app.
### From your file library
Use your file library whenever you want to reuse existing media instead of uploading a new file.
**To add a file from the library in the AI chat:**
1. Go to your app editor.
2. Click the **Add** icon in the AI chat.
3. Click **Choose from library**.
4. In the **Select files** dialog, search or browse to find the file you want.
5. Select the file and click **Add**.
6. Type your message to explain what you want the AI to do with the file, then send it.
You can replace standalone images in your app using **Edit** mode. This does not work for images that are part of components, such as a gallery. For that, use the AI chat or edit the data directly from **Data** in the dashboard.
**To replace an image using your file library:**
1. Go to your app editor.
2. Click **Edit** in the chat.
3. Click the file you want to change.
4. Click **Replace**.
5. Search or browse your file library to find the new file.
6. Select the file and click **Replace**.
### From your computer
Upload files that are saved locally on your device when you want to share images, videos, documents, or data files directly with the AI chat.
**To upload a file from your computer:**
1. Go to your app editor.
2. Click the **Add** icon in the AI chat.
3. Click **Upload from computer**.
4. Select the file you want to use and confirm.
5. Type your message to explain what you want the AI to do with the file, then send it.
### From Google Drive
Connect Google Drive if you want the AI chat to work directly with Docs, Sheets, and Slides stored in your Drive without downloading them first.
When you connect Google Drive, only the files you select are accessed. Base44 stores a copy of each selected file in your app's file library so the AI chat can use the content as context.
**To add a file from Google Drive:**
1. Go to your app editor.
2. Click the **Add** icon in the AI chat.
3. Click **Add from Google Drive**.
4. Review the information in the **Connect to Google Drive** window and click **Connect Google Drive**.
5. Complete the Google sign-in flow and approve access if this is your first time connecting.
6. Choose the Docs, Sheets, or Slides files you want to use from your Google Drive and confirm.
7. Type your message to explain what you want the AI to do with the file content, then send it.
**Tip:** You can also add files from Google Drive in your very first prompt:
### File upload limits
These limits apply to files you upload into your app's file library while building your app, whether you add them from the AI chat or directly from the editor.
**Images:** PNG, JPG, JPEG, GIF, WEBP, SVG
* Max size: 40MB (SVG: 5MB)
* Max dimensions: 1024x1024 pixels (larger images are resized automatically)
* Example: Upload a screenshot of a website you like and say: "Use this header style for my homepage."
**Videos:** MP4, WEBM, MOV, AVI, MKV, M4V, WMV, OGV, 3GP, 3G2
* Max size: 100MB per video
* Example: Upload a product demo, walkthrough, or reference video and ask the AI to use it as context while building your app.
**Documents and text files:** PDF, TXT, HTML, DOCX, MD
* Max size:
* PDF: 10MB
* TXT and HTML: 5MB
* DOCX and MD: 5MB
* Example: Upload a PRD or brand guide so the AI follows your product and style rules, or share a markdown file with requirements for a new app.
**Data files:** CSV, XLS, XLSX, JSON
* Max size:
* CSV and JSON: 10MB
* XLS and XLSX: 15MB
* Example: Upload a CSV, Excel, or JSON file with your existing business data and ask the AI to analyze it, suggest entities and fields, propose a data model for your app, or prepare the data for import. To learn how to import the data into your tables, see [Managing your app data](/Building-your-app/Managing-your-app-data).
**Audio:** MP3, WAV
* Max size: 100MB
**Zip files**
* Max size: 25MB
***
## Sharing media on your live app
Let your users upload media directly in your live app. You and your users can share, download, or interact with content to create a more engaging experience.
Just tell the AI chat what you want your users to be able to do, and the AI will set it up for you. This feature uses the built-in UploadFile integration.
### File upload limits for your app
These limits apply to files that people upload through your live app using the UploadFile integration.
* **Images:** PNG, JPG, JPEG, WEBP, SVG (max size: 50MB)
* **Documents:** PDF, TXT, HTML (max size: 50MB)
* **Data files:** CSV, XLS, XLSX, JSON (max size: 50MB)
* **Videos:** MP4, WEBM, MOV, AVI, MKV, M4V, WMV, OGV, 3GP, 3G2 (max size: 100MB per video)
* **Audio:** MP3, WAV (max size: 50MB)
***
## Customizing your app's logo
Personalize your app by adding a logo. Your logo is visible to users when they add your [app to their home screen](/Building-your-app/Mobile-experience#installing-your-app-to-the-home-screen) and also appears as the browser favicon.
### Changing your logo
1. Go to your app's dashboard and click **Overview**.
2. Click the **Edit** icon on the logo and either:
* Upload your own image file
* Click **Generate Logo** to create a new one with the AI
Logos generated in Base44 can only be used within your app and cannot be exported.
### File limits for your logo
Use these limits when you choose or generate a logo image for your app.
* **Image formats:** PNG, JPG, JPEG
* **Max size:** 5MB
* **Max dimensions:** 1024x1024 pixels (larger images are resized automatically)
For best results, use a clear, square image with a transparent background.
***
## Setting your social image
Add a social image to control how your app looks when someone shares its link on social platforms like Slack, WhatsApp, or iMessage. The image appears in the preview card alongside your app name and description.
**To add a social image:**
1. Go to your app's dashboard and click **Settings**.
2. Click **App Settings**.
3. In the **App Info** section, click or drag an image into the **Social image** upload area.
Use an image that is 1200x630 pixels for the best results across platforms.
**To replace or remove your social image:**
1. Go to your app's dashboard and click **Settings**.
2. Click **App Settings**.
3. In the **App Info** section, hover over the social image:
* Click the **Upload** icon to replace it with a new image.
* Click the **Delete** icon to remove it.
### File limits for your social image
* **Image formats:** PNG, JPG, WEBP
* **Recommended size:** 1200x630 pixels
* **Max size:** 5MB
For best results, avoid text-heavy images as they may be cropped on some platforms.
***
## FAQs
Click a question below to learn more.
If your file isn't uploading to the chat, it's most likely because the file is too large or the wrong format. Review the limits above and try again.
This error can happen if you upload a file that was renamed without converting it properly. For example, changing the file name from `.webp` to `.png` or from one video format to another does not convert the file.
**To fix this:**
* Try reverting your last message if you just uploaded the file.
* Check that your file is one of the supported formats listed in the [Media guide](/Building-your-app/Using-media) and has not simply been renamed from another file type.
* Make sure your file does not exceed the size limits set in the Media guide.
* Try uploading your file again using a supported format.
If you still have trouble after these steps, [contact support](/Community-and-support/Contacting-support) for help.
You can disconnect Google Drive at any time from your account settings.
**To disconnect Google Drive:**
1. Click your profile icon at the top-right of Base44.
2. Click **Settings**.
3. Click **Account settings** under **Account**.
4. Scroll to the **Chat Settings** section.
5. In the **Google Drive** card, click **Disconnect**.
6. Confirm the disconnection.
Yes, you can replace your logo image at any time from your dashboard inside the app editor. The new logo appears once your changes are published.
No, a social image is optional. If you do not set one, social platforms show a generic preview when your app link is shared. Adding a social image gives you control over how your app appears and can make it more recognizable.
There is no hard storage limit per app. You can store as many files as your app needs. The only constraints are on individual file sizes, see the limits above for each file type.
# Exploring app logs
Source: https://docs.base44.com/Building-your-app/exploring-app-logs
Use the Logs page to review everything that happens in your app, from user activity and function calls to schema and integration changes, and fix issues fast.
The **Logs** page gives you a searchable history of everything that happens in your app, from user actions and function calls to schema and integration changes. Use it to troubleshoot problems, confirm that automations ran, and review who did what in your app.
***
## Accessing your logs
Your logs live on the **Logs** page in your app dashboard. It opens the **Logs Explorer**, a table of events with a **Type**, **User**, and **Timestamp** column. Click any row to expand its full details.
**To access your logs:**
1. Go to your app editor.
2. Click **Dashboard**.
3. Click **Logs** in the sidebar.
***
## Understanding log categories
Logs are grouped into two categories.
* **Runtime:** Activity that happens while people use your app. This includes entity operations (created, updated, deleted, restored), user events (registered, login, invited, role changed, page visits), access requests, function calls, integration and automation executions, agent conversations, data imports, file uploads, and security checks.
* **Setup:** Changes to how your app is built and configured. This includes app lifecycle events (created, published, unpublished), entity schema changes, payment and OAuth integration setup, and domain changes.
To focus on one category, use the category dropdown above the table and select **All Categories**, **Runtime**, or **Setup**.
The Logs page shows events for this app only. Workspace-level events, such as member and billing changes, are available to enterprise workspaces through the [Audit Logs API](/developers/references/audit-logs-api/get-started/overview).
***
## Filtering logs
Use the controls above the table to focus on the events you care about.
* **All Events dropdown:** Filter by a specific event type, such as **Entity Updated** or **Function Call**.
* **Filter by email:** Enter an email address to see one person's activity.
* **Errors only:** Turn this on to show only failed events.
Use **Refresh** to load the latest events, and the **X** next to the filters to clear them.
Troubleshooting a report from one of your app users? Filter by their email and turn on **Errors only** to see exactly which of their actions failed.
***
## Viewing event details
Click a log row to expand it. Depending on the event, you can switch between different views.
* **Details:** The full metadata of the event, such as the entity and fields involved.
* **Outputs:** What the event produced, for example a function's response.
* **Error:** The error message, when the event failed.
To copy the full event data, click the **Copy** icon in the expanded row.
***
## FAQs
Click a question below to learn more about your app logs.
Logs appear once there is activity in your app. If the table stays empty, open your app, perform an action such as creating a record, then click **Refresh**.
No. Analytics summarizes traffic and usage trends, while logs record individual events with full details. Use analytics to understand how your app performs and logs to investigate specific actions.
Yes. Filter the event type to **Function Call** to see each invocation. For live debugging while you build, you can also use the activity monitor in the code editor.
# Managing your app pages
Source: https://docs.base44.com/Building-your-app/managing-your-pages
Learn how to add pages, move between them, control which pages appear in your navigation, and understand how pages relate to login and visibility in Base44.
Pages are the core screens of your Base44 app. Each page has its own URL path (such as `/`, `/Home`, or `/Products`) and appears in the page drop-down at the top of the [app editor](https://base44.com/ai-app-builder). You can add new pages, access pages, and decide which pages are visible in your menus or used for login and landing experiences.
***
## Adding pages
You can add pages at any time. The fastest way is to describe the page you want in AI chat.
### Adding a new page
1. Go to your app editor.
2. In AI chat, describe the page you want. For example:\
`Create a new About page with a hero section, text about our company, and a contact button.`
### Duplicating a page
1. Open the page you want to reuse in the editor.
2. In AI chat, describe what you want to duplicate. For example:\
`Duplicate this page and keep the same layout, but change the title to "Pricing".`
3. After the AI chat has finished, open the new page from the page drop-down to customize the content.
***
## Switching between pages
You can move between pages from the page drop-down above the preview.
**To switch pages in the app editor:**
1. Go to your app editor.
2. Click the page drop-down.
3. Click the page you want to open.
If you are not sure what a page is called, ask the AI: `Show me a list of all pages in this app and what each one does.`
***
## Searching for pages
When your app has many pages, it can be hard to remember every page name. Start typing the page name in the pages drop-down to search for the one you need.
**Tip:** You can also ask AI chat to help you find the right page by name, URL path, or purpose. For example:
* `Which page is used as the checkout page?`
* `Which page handles the /Success route?`
* `Find the page that shows the list of projects.`
***
## Managing your page navigation
A clear navigation menu helps people move between pages, discover key areas of your app, and understand how your content is organized. It also improves internal linking, which can help search engines understand your app structure.
Some apps start with a single page and do not have a visible navigation menu at first. As you add more pages, you can ask the AI to create a header, sidebar, or footer menu and wire it up to your main routes.
Use the AI chat to create a navigation menu when your app does not yet have a header, sidebar, or footer with links.
If you want the same navigation on every page, ask AI to make the menu global. For example: `Add the header navigation to all pages in the app.`
### Adding a header menu
1. Go to your app editor.
2. In the AI chat, describe the menu you want. For example:
* `Add a header navigation bar with links to /Home and /Products.`
* `Create a top navigation menu that includes Home and Contact.`
3. Once the AI has finished, check the preview to make sure the new navigation appears where you expect and test the links.
### Adding a sidebar menu
1. Go to your app editor.
2. In AI chat, explain what you need. For example:
* `Add a vertical sidebar navigation on the left with links to /Dashboard, /Reports, and /Settings.`
* `Add a footer navigation with links to Privacy Policy and Terms of Service.`
3. Once the AI has finished, check the preview to make sure the new navigation appears where you expect and test the links.
### Changing the menu style
You can use different navigation styles to match your app’s layout and audience, such as a horizontal bar, tabs, or a hamburger menu that collapses on smaller screens.
**To change your navigation style with AI chat:**
1. Go to your app editor.
2. In AI chat, describe the style you want. For example:
* Tabs: `Change the main navigation into a tab-style menu at the top of the page.`
* Sidebar: `Move the navigation into a vertical sidebar on the left.`
* Hamburger menu: `Turn the main navigation into a hamburger menu that opens a panel on the right.`
3. Once the AI has finished, check the preview to make sure the navigation appears where you expect and test the links.
You can combine styles. For example, keep a horizontal menu with tabs on desktop and use a hamburger menu on smaller screens. Describe both behaviors clearly in your AI prompt.
### Changing the menu items
Once a navigation menu exists, you can add, remove, or rename links so people can reach the right pages. Make sure the page you want to link to already exists if you are adding a new item.
**To manage your menu items with AI chat:**
1. Go to your app editor.
2. In AI chat, describe how the menu should change. For example:
* `Add a "Shop" link to the main navigation that points to the /Products page.`
* `Add an "About" item to the top menu that links to /About and place it after Home.`
* `Remove the "Blog" link from the header navigation.`
* `Rename the "Shop All" menu item to "All Products".`
* `Reorder the menu so that Home, Shop, About, and Contact appear in that order.`
3. Check the preview and click your menu items to confirm that everything looks and behaves as expected.
If your app uses multiple navigation areas (such as a top menu and a footer menu), be specific in your prompt. For example: `Update only the header navigation, not the footer links.`
***
## Working with hidden pages
Some pages are meant to be internal, such as admin dashboards, success screens, or callback pages. You may want them available in your app without showing them in navigation or search results.
### Hiding pages from your menu
You can remove any page from your visible menus while still keeping it live and functional.
**To hide a page from your navigation with AI chat:**
1. Go to your app editor.
2. In AI chat, describe what should be hidden. For example:\
`Remove the /Success page from all visible navigation, but keep it working as a redirect after checkout.`
3. Check that the link no longer appears in the header, sidebar, or footer.
A page that is hidden from your navigation can still be opened directly if someone knows its URL, or if you add a button or link to it elsewhere in your app.
### Creating an admin-only area
You can keep sensitive pages, such as dashboards or management tools, available only to admins by placing them in an admin section of your navigation and protecting access.
**To create an admin-only navigation area with AI chat:**
1. Go to your app editor.
2. In AI chat, describe the admin section you want. For example:
* `Add an Admin section in the sidebar that only admins can see, and move the /Wishlist page into it.`
* `Create an admin-only area in the header navigation with links to /AdminDashboard and /Reports.`
To test your admin-only pages with **Act as**, click **Act as** in the preview toolbar, choose an admin role and check that the admin section and its pages are visible to them, then use **Act as** again to switch to a non-admin role and confirm that the admin section is hidden from the navigation and that admin-only pages cannot be opened directly.
### Hiding pages from search results
Base44 automatically includes all public, published pages in your sitemap at `/sitemap.xml` so search engines can find them. There are no per-page SEO switches such as “noindex” or page-level robots.txt controls.
To keep a page out of search engines, make sure the page is not public, or avoid linking to that page from any public parts of your app.
For full details on how indexing works, see our [SEO guide](/Performance-and-SEO/SEO-and-search-visibility).
***
## Public landing page with private pages
Base44 does not currently support making some pages public and others private using visibility settings alone. Instead, you can use a combination of a public landing page and logic that redirects people to login for private areas.
**To set up a public landing page with login for other pages:**
1. Set your app to **Public (no login required)** in your app visibility settings.
2. Use the AI chat to create a landing page, for example:\
`Create a landing page with login and sign-up buttons and make it my main page.`
3. Ask the AI to require login on the rest of your app. For example:\
`Require login for all non-landing pages and redirect visitors who are not logged in back to the landing page.`
It is not currently possible to mark individual pages as public or private using a per-page visibility setting. All visibility is controlled at the app level, combined with your routing and data access rules.
***
## FAQs
Click a question below to learn more about pages, login, and navigation.
**To change your landing page:**
1. Click **Dashboard** in your app editor.
2. Click **Settings** and then **App Settings**.
3. In the **Main Page** drop-down under **General Settings**, select the page you want as your default landing page.
You can also ask AI chat to change your landing page.
Yes. Base44 apps support up to 600 pages. However, page count is not the only factor that affects build stability — the total number of files in your app and your overall source size also matter.
If your app has more than 600 pages, or has a very large number of files or source code (for example, thousands of JavaScript files or tens of megabytes of source), you may see issues such as:
* The builder becoming unavailable or very slow.
* Pages not loading correctly in the editor or live app.
* Publishing failures or out-of-memory errors when you build or deploy updates.
* The AI returning incomplete edits.
**To stay within the limits:**
1. Review your existing pages and remove any that are no longer needed.
2. Consolidate similar content into fewer pages when possible.
3. Use entities and filtered views instead of creating a separate static page for every item.
4. Keep your overall file count and source size as lean as possible, especially if your app has many components.
Keeping your app below 600 pages and managing overall file count and source size helps the editor stay responsive and keeps your app stable.
# Working with branches
Source: https://docs.base44.com/Building-your-app/working-with-branches
Create branches to build and test new ideas safely, work on several in parallel, then merge them into your app when they are ready.
Branches let you try new ideas, features, or redesigns without affecting your app. Each branch has its own chat and its own live preview, and you can **work on several branches in parallel**, then merge each one into your app when you are happy with the result.
Try a new look for your app and compare it with the current version. If you change your mind, simply leave the branch behind.
When a small fix comes up mid-project, fix and publish it from main right away. Your bigger work in progress stays safely on its branch.
Work ahead of a release and keep the feature on a branch until launch day.
Build on several branches at the same time, and work with your team on different ideas at once, each on their own branch.
You can manage your app's versions with either branches or GitHub, not both. [Learn more about managing app versions](#faqs).
***
## How branches work
Your app's main version is called **main**. When you create a branch, Base44 starts a separate line of work from the current state of main.
**Each branch has its own:**
* **Chat.** The conversation on a branch is separate from main, and the AI keeps the context of what you built before.
* **Preview.** You see the branch's changes in a dedicated live preview, while main stays untouched.
* **Copy of your app's design and pages.** Changes you make on a branch stay on that branch until you merge them.
* **Build.** Each branch builds on its own, so **branches run in parallel** and work on one keeps going while you build on another.
**Shared between main and every branch:**
* **Your app's data.** Branches read and write the same live records as main.
* **Connections and automation.** Integrations, secrets, automations, workflows, and in-app agents.
* **App settings and publishing.** Your app's settings, domains, and published version.
A branch previews your app with your real, live data. Records you add, change, or delete while previewing a branch affect the same data your app uses everywhere.
To experiment on a branch without touching your live data, switch your preview to test data while you work. Test data is available on the [**Builder plan**](https://base44.com/pricing) and higher. Learn more about [testing your app with test data](/documentation/managing-app-data/testing-your-data).
***
## Creating a branch
Describe what you want to build, and Base44 creates the branch, names it based on your first message, and starts building right away.
**Before you begin:** If your app was built a while ago, you may need to make one change on main before you can create your first branch. If that applies to your app, Base44 tells you when you try.
**To create a branch:**
1. In the app editor, click your app's name at the top of the chat panel.
2. Click **Create new branch**.
3. Pick one of the suggestions, or type what you want to build in the chat box.
4. Send the message.
Branches always start from main. If you create a branch while you are on another branch, the new branch still starts from main.
***
## Working on a branch
While you are on a branch, the branch's name replaces your app's name at the top of the chat panel, and a spinning icon shows when the AI is working. You build on a branch the same way you build on main: describe what you want in the chat.
A few things work differently on a branch:
* **Merge to main** replaces the **Publish** button. You publish changes from main after merging.
* The preview shows the branch's version of your app.
* The page URL includes the branch, so you can share a link that opens the app editor on that branch.
**Branches run in parallel.** Send a request on one branch, switch to another, and keep building there while the first one finishes. Your app runs up to 5 builds at the same time, so you and your team can move on several ideas at once, each on their own branch.
The branch menu shows which branches are building, so you can check on them as you go.
Branches are for changes to your app's design, pages, and frontend behavior. Some actions are only available on main:
* Publishing your app
* Editing your data structure (entity schemas)
* Creating or changing secrets, connectors, automations, workflows, and in-app agents
* Editing code directly in the code editor
* Changing your app's theme settings
* Restoring an earlier version from version history
If you ask for one of these on a branch, Base44 asks you to do it on main or merge the branch first.
Support for building backend functions on a branch is rolling out gradually. If it is not available in your app yet, Base44 asks you to make backend changes on main.
***
## Switching between branches
You can move between main and your branches at any time, and every branch keeps its changes until you merge it. On a branch, you can also click the **X** next to **Merge to main** to exit back to main.
**To switch to another branch or back to main:**
1. Click the branch name at the top of the chat panel.
2. Select a branch from the list, or select **Main chat** to return to main.
Each branch in the list shows its current status:
| Status | Meaning |
| ----------- | ------------------------------------------------------------------------------ |
| **Active** | The branch is open and ready to build on. |
| **Working** | The AI is building on this branch right now. |
| **Merging** | The branch is being merged into main. |
| **Merged** | The branch was merged into main. Its chat stays readable, but it is read-only. |
You can switch branches while the AI is building, and it keeps working on the branch you left. Save or discard any edits on main first.
***
## Updating a branch with changes from main
If main changes while your branch is open, a banner appears above the chat box on the branch. It tells you how much changed on main and whether any of it overlaps with your branch.
When you update, the AI combines main's changes with your branch. If some changes overlap, the AI resolves them for you. If the two versions genuinely conflict, the AI asks you a question in the chat so you can decide what to keep.
**To bring main's latest changes into your branch:**
1. On the branch, find the update banner above the chat box.
2. Click **Update branch**.
If an update runs into a problem, Base44 rolls it back and your branch's work stays unchanged.
***
## Merging a branch into main
Merging brings everything you built on the branch into main. Your changes reach your app's users only when you publish from main, so you decide exactly what goes out and when.
After the merge, a summary of the branch's changes appears in main's chat, and the branch stays in your branch list as merged, so you can still read its chat history, but it becomes read-only.
**To merge a branch:**
1. On the branch, click **Merge to main** at the top of the editor.
2. Review the confirmation, then click **Merge to main**.
If the branch conflicts with changes made on main, Base44 asks you to update it first. [Update the branch from main](#updating-a-branch-with-changes-from-main) to resolve the conflicts, then merge again.
***
## FAQs
Click a question below to learn more about branches.
No. Publishing always happens from main. On a branch, the **Publish** button is replaced by **Merge to main**. Merge the branch first, then publish from main.
No. All branches share the same live data as main. If you add, change, or delete records while previewing a branch, those changes affect your app's real data everywhere. To keep experiments separate from your live data, switch your preview to [test data](/documentation/managing-app-data/testing-your-data) while you work on the branch.
There is no set limit. You can keep as many branches going at once as you want, and merge each one whenever it is ready.
The branch stays in your branch list, marked as merged, and becomes read-only. You can open it and read its chat history at any time. To continue from where it left off, create a new branch from main.
Yes. Each collaborator can open a different branch and chat there, and each branch builds on its own. Your app runs up to 5 builds at the same time, and anything beyond that waits in the queue and runs in order.
No. Building on a branch uses credits the same way as building on main, from the same credit balance.
No. Apps connected to [GitHub](/developers/app-code/local-development/github) manage branches through GitHub instead, so if you try to create a branch, Base44 lets you know it is not available. To use branches on that app, disconnect the repository first. Disconnecting brings your latest code from GitHub back into Base44.
Merge your open branches first, then connect. Branches you merged before connecting stay available to read.
# Data version history
Source: https://docs.base44.com/Enterprise/data-version-history
Review, download, and restore earlier versions of your app data on Elite and Enterprise plans.
Base44 automatically saves snapshots of your app data as it changes. You can review, download, and restore an earlier version of an entity's records if data is edited, imported, or deleted by mistake.
Data version history is available on the [**Elite**](https://base44.com/pricing) and [**Enterprise**](https://base44.com/enterprise) plans. Elite workspaces keep 7 days of history, and Enterprise workspaces keep 30 days.
***
## How version history works
Data version history runs automatically on eligible plans, so there is nothing to switch on. As your data changes, Base44 saves earlier versions so they are available to review, download, and restore. Data version history applies to Base44-managed entity data.
**Good to know:**
* Version history applies to the whole workspace, and versions are recorded from the time the feature becomes active on your plan.
* How far back you can go depends on your plan: versions are available for up to 7 days back on Elite, and up to 30 days back on Enterprise.
* Only people with editor access to an app, such as its owner or an invited editor, can view, download, and restore versions.
***
## Viewing versions
Each entity keeps its own version history, with the newest version at the top. Open it from the entity in your app's data dashboard.
**To view an entity's versions:**
1. Click **Dashboard** in your app editor.
2. Click **Data**, then select the entity you want.
3. Click the **More Actions** icon and select **Data version history**.
4. Use the date filter to narrow the list to the period you want.
***
## Restoring a version
Restoring replaces the entity's current data with the data from an earlier version.
Editing pauses while a restore is in progress. Changing or editing the table is unavailable until the restore finishes, and how long it takes depends on the number of records affected.
**To restore a version:**
1. Click **Dashboard** in your app editor.
2. Click **Data**, then select the entity you want.
3. Click the **More Actions** icon and select **Data version history**.
4. Find the version you want, using the date filter if needed, then click the **Restore** icon .
5. Review the confirmation, then click **Restore data**.
Base44 saves your current data as a backup version before a restore. To undo a restore, open the version history again and restore that backup.
***
## Downloading a version
Download an earlier version as a CSV file to keep a copy of that data outside Base44 or to review it separately.
**To download a version:**
1. Click **Dashboard** in your app editor.
2. Click **Data**, then select the entity you want.
3. Click the **More Actions** icon and select **Data version history**.
4. Find the version you want, using the date filter if needed, then click the **Download** icon to save it as a CSV file.
# Using app templates
Source: https://docs.base44.com/Getting-Started/App-templates
Explore ready-to-use app templates from the Base44 community and from your workspace. Find inspiration, launch your next project in minutes, or share your own templates to earn revenue or reuse them across your team.
## About the template marketplace
The template marketplace is your shortcut to [building great apps](https://base44.com/ai-app-builder) on Base44. Browse a wide range of ready-made templates created by talented creators in the community. If you are unsure where to start or want to skip hiring a partner, templates make it easy to get going right away. Just choose a template and customize it to fit your needs.
If you prefer to keep templates private to your team, you can create workspace templates instead of listing them publicly. Workspace templates reuse your app across a single workspace without appearing in the public marketplace. Learn how to [create and manage workspace templates](https://docs.base44.com/Account-and-billing/Managing-your-workspaces#managing-workspace-templates).
You can also earn money by publishing public templates for others to use in the marketplace. Set your own price or make them free and reach a wider audience while showcasing your skills. For internal-only use, keep templates as workspace templates so they are available only to your team.
***
## Accessing templates
Go to [**App Templates**](https://base44.com/templates) in the **Community** tab in your workspace to browse all available templates. Templates with reviews display an average rating to help you evaluate them before choosing one.
App Templates include:
* **Community:** Templates shared by the community and available to all Base44 users. These listings can be free or sold for a price.
* **Workspace:** Templates created and saved by your team. Workspace templates are private to your workspace, and only members of your workspace can see them.
When you use a template, it is copied into your own workspace where you can rename it, change the content, update the design, and modify how it works.
**Notes:**
* You need to be logged in to your Base44 account to view and use app templates.
* If you want to use a template that uses backend functions, you need to have a Builder plan or higher.
**To access app templates:**
1. In your Base44 workspace, go to [App Templates](https://app.base44.com/app-templates).
2. Hover over a template and click **View details** to see more information, images, usage stats, ratings, and reviews.
3. (Optional) Use the **Workspace** tab to view templates created and saved in your workspace. These templates are only visible to members of your workspace.
4. Click **Use Template** (for free templates) or **Purchase** (for paid templates).
***
## Publishing and selling public templates
You don’t need to create something complex to share as a public template. Simple apps, reusable layouts, or creative tools can all be helpful to others. If you have made something useful or fun, you can add it to the community app templates library. You can choose to offer your template for free or set a price for others to use it via the marketplace.
When managing your template, keep in mind how updates work. If you publish changes to your app's functionality (like bug fixes), new users receive the latest version automatically without you needing to resubmit anything. However, if you change the listing details (like the description or price), you must resubmit the listing for approval.
**Notes:**
* When someone uses one of your public templates, it is copied into their workspace and your original app stays the same.
* You can only publish a public template if you own the app and have published it at least once.
* Selling public templates for a price is currently in Beta and requires a Starter plan or higher. You receive the price you set, with no commission taken by Base44.
* Earnings from paid templates are paid out once your total confirmed earnings reach at least USD 200, following the payout timelines in the Base44 Marketplace Terms.
**Before submitting your app, make sure:**
* You test it to ensure it works and includes full functionality.
* You add real-looking sample content.
* Your app is secure. [Learn more about security and using the security check](/Setting-up-your-app/running-a-security-scan).
**To publish a public template:**
1. Go to your app's editor.
2. Click **Dashboard**.
3. Click **Settings**.
4. Click **App Template**.
5. Select **Public template** and click **Create**.
6. Enter the **Basic info** for your template:
* **Template Name:** Enter a clear name for your template.
* **Description:** Describe what makes your app worth trying.
* **Select Categories:** Select the checkboxes next to the categories that best describe your app (e.g. Education, Operations).
7. Select a listing type in the **Template Pricing** section:
* **Free listing:** Offer your template for free.
* **Paid listing:** Set a price for your template. Enter the price details.
8. In the **Template Screenshots** section, click **Add Images** and upload at least one screenshot of your published app.\
**Tip:** Click **Preview App** to open your published app and take screenshots.
9. Select the **I agree to the Base44 Terms and Marketplace Terms** checkbox.
10. Click **Create** at the top right.
***
## Improving your listing
If you want your template to stand out, start by focusing on solving a clear problem for others and choosing a catchy title. Add a helpful image and description that show your app in action and make its purpose easy to understand.
The most successful templates have clear and friendly language, and include strong visuals that highlight your app’s value.
**Images:**
* Show your app in action with real-looking data
* Use clean, full-screen views
* Avoid blurry or empty screens
* Use horizontal images: 1200x675 pixels (16:9)
**Description:**
* Say clearly what your app is for and who it helps
* Use short, friendly sentences
* Avoid overly technical or complex language
**Tags and categories**
* Pick tags that describe what your app does (like "productivity" or "social")
* Avoid adding too many tags
***
## The approval process
After you submit your listing, the Base44 team reviews it to make sure it meets community guidelines. Listings that don’t follow these guidelines may be rejected. If your app is approved, it appears in App Templates for others to discover and use.
**Base44 may decline or remove a listing if:**
* **Spam or broken:** The app listing is spam or is not functioning.
* **Private setting:** The app is set to private, which prevents others from viewing it.
* **Community rules violation:** The app includes content that breaks community rules.
* **Screenshots do not match:** The submitted screenshots do not reflect the actual appearance or features of the app.
* **Missing security settings:** Apps must complete a security check to be eligible for publishing.
* **Broken functionality:** Some features in the app are not working as intended.
* **Invalid or non-compliant app name:** The app name uses terms like "template," version numbers, or other values not allowed by store policy.
* **Duplicated app without chat:** If your app is a duplicate and does not include chat functionality, please send the original app with chat history.
* **Mismatched categories:** The categories selected do not match the app’s purpose or functionality.
* **App has never been published:** Apps must be published at least once before being submitted for review.
**Important:**
* Final approval depends on Base44’s internal guidelines. The team may remove listings that do not meet broader community quality standards, even if a specific reason is not listed above.
* The approval process may take some time. We appreciate your patience.
***
## Managing your listings
From your app's dashboard you can manage your template listing.
**To manage a template listing:**
1. Go to your app's editor.
2. Click **Dashboard**.
3. Click **Settings**.
4. Click **App Templates**.
5. Choose what you want to do:
* **Edit your listing:** Click **Submit Update** and make the changes to the listing. Then click **Submit Update** to confirm.
* **See your app in the marketplace:** Click the **More Actions** icon and click **See on App Templates.**
* **Remove your template from the marketplace:** Click the **More Actions** icon and click **Remove from App Templates.**
***
## FAQs
Click a question below to learn more.
Yes! When you click your template in App Templates, you can see how many times your app has been used.
You become eligible for payout once your total earnings reach USD 200. Payouts are generally processed within 90 days after you reach this threshold, in accordance with the [Base44 Marketplace Terms](https://app.base44.com/marketplace/terms). The paid template feature is in Beta and payout details may change over time.
Yes, you can publish any number of templates, and each listing is reviewed individually to ensure it meets Base44’s guidelines.
In App Templates, click the **My Templates** tab to view templates created by you or others in your workspace.
Yes. How the update works depends on what you are changing:
* **App functionality (e.g. bug fixes, new features):** Simply publish the changes in your app editor. New users who install the template automatically receive the latest version. You do **not** need to resubmit the template.
* **Listing details (e.g. description, price, name):** You must submit an update in the **App Template** settings.
* **Workspace templates:** The listing updates automatically.
* **Public templates:** The update requires approval from Base44 before appearing in the library.
**Note:** In all cases, changes do not affect users who have already installed the template.
No, removing or hiding your template does not impact anyone who has already added it to their workspace.
Backend functions or secrets included in a template will not transfer to users who add the template. Each user needs to set up their own backend functions and secrets in their own workspace for security and privacy.
If your template uses paid third-party services, users who add your template to their workspace will need to set up their own accounts and connect those services themselves.
Yes, you can change your template’s price at any time in the settings. This will only affect future users, not those who have already used your template.
No. Once purchased, the user can create as many copies as they wish.
# Hiring a Base44 partner
Source: https://docs.base44.com/Getting-Started/Hiring-a-partner
Find Base44 partners for development, design, consulting, and integrations, and learn how to choose and work with the right expert.
[Base44 Partners](https://base44.com/hire-a-partner) helps you find experts, freelancers, and agencies who specialize in Base44 apps and workflows. Whether you need help building features, customizing your workflow, or creating an integration, you can connect with a partner who matches your needs.
Browse Base44 Partners, choose a partner, and contact them directly.
Payments and agreements are managed directly between you and the partner you choose.
***
## Choosing a Base44 partner
Choosing the right partner helps set your project up for success. Each partner lists their skills, experience, and pricing options, so you can make an informed choice. You can also filter the partners by services and languages to find the best match for you.
* **Check their profile:** Review the partner’s profile, website, and portfolio to see their past work and experience.
* **Meet with them:** Arrange an intro call to align on expectations.
* **Request a clear proposal:** Include scope, pricing, deliverables, and timeline.
* **Check availability:** Make sure the partner can meet your timeline before work begins.
* **Look for transparency:** Reliable partners explain what they can deliver, how long the work takes, and what you receive.
***
## Contacting a Base44 partner
You can search partner profiles, filter by service or language, and contact a partner directly from Base44 Partners.
**To contact a partner:**
1. Go to [Base44 Partners](https://app.base44.com/partners).
2. Search for a partner or use the **Service** and **Language** filters.
3. Review the partner’s profile card, including their services, languages, and pricing.
4. Click **Contact** on the partner you want to reach.
5. Fill out the form with your project details and contact information.
***
## Collaborating with your partner
Once you have found the right partner, set your project up for a productive and secure experience.
* **Communicate clearly:** Maintain open and professional communication with your partner at every stage of the project. Define milestones and delivery checkpoints early so expectations stay aligned.
* **Keep records:** Document all agreements in writing, even a short email is enough. Confirm the project scope, pricing, payment schedule, and timeline **before** work begins.
* **Agree on payments:** Each partner sets their own pricing model. Some charge an hourly rate, others a fixed project fee, or both. You can also use milestone-based payments, such as a deposit followed by installments as work progresses. Decide together which approach works best and use a payment method you trust.
Base44 does not charge commissions and does not mediate disputes or payments.
***
If you build apps or services for clients, you may be eligible to join the Base44 Partner Program. Learn about eligibility, partner tools, and setting up your partner profile.
***
## FAQs
Click a question below to learn more about Base44 partners.
No. Base44 does not charge a fee to use Base44 Partners. You agree on project payments directly with the partner you choose.
Yes, you can hire multiple partners for your project. Many people choose to work with different experts for areas like design, development, and integrations.
Yes, you can switch partners during a project if needed. Keep in mind that changing partners may involve additional costs, but it’s often better to make a change than continue with a partnership that isn’t working.
Some partners, such as legally registered freelancers or agencies, can provide invoices or receipts. Be sure to confirm this with your partner before starting the project.
When you click **Contact**, you fill out a short form with your project details and contact information. Base44 sends your request to the partner, and you continue the conversation directly from there.
Yes. In addition to Base44 Partners, you may see an option to connect with an expert at Fiverr directly from the [Base44 Partners page](https://app.base44.com/partners).
This experience is provided by Fiverr, not Base44. It is designed for quick help, such as reviews, targeted troubleshooting, or small changes. You can chat instantly or schedule a time soon, and get offers at a fixed hourly rate shown in Fiverr.
For larger or ongoing projects, complex integrations, or long-term strategic work, a Base44 partner may be a better fit.
The Fiverr option is not available to everyone yet.
Contact us for questions, issues, or suggestions about Base44 Partners.
# Writing effective prompts in Base44
Source: https://docs.base44.com/Getting-Started/Prompt-guide
Describe the app you want in plain words, and Base44 builds it. Learn how to write prompts that get you there faster.
A prompt is simply a description of what you want, written in your own words. There is no code, no syntax, and no special commands to learn. You describe your app, and Base44 builds it.
Because your whole app is built from what you type, your words are your building material. The clearer the picture you paint, the closer the result will be to what you had in mind. This guide walks you through painting that picture, from your very first prompt to the small refinements that make an app feel finished.
***
## How building with prompts works
Building in Base44 is a loop, not a single instruction you have to get right on the first try. You describe, Base44 builds, and you shape the result together over a few rounds.
Each round looks like this:
* **Describe:** You say what you want in plain language.
* **Build:** Base44 creates or updates your app in seconds.
* **Review:** You look at what changed and decide what comes next.
* **Refine:** You give feedback, and the app updates again.
Treat your first result as a rough draft you can mold, not a final answer. That mindset takes the pressure off, and it is how the best apps come together.
***
## Writing your first prompt
Your first prompt is the foundation for everything that follows, so aim to describe the heart of your app rather than every detail. You can always add more later. Focus on what the app is, who it is for, and the main things people should be able to do.
A quick way to shape this is to think through the who, what, and why of your app:
* **Who:** Who will use it, such as freelancers, students, or your whole team.
* **What:** What it helps them do, such as track expenses or book appointments.
* **Why:** Why it is useful to them, such as saving time or keeping everything in one place.
Here is that thinking turned into a prompt:
```text theme={null}
Build an expense tracker for freelancers who bill several clients at once.
People can log an expense, tag it to a client and a category, and see a
monthly total for each client. The goal is to make tax season painless.
```
Not sure where to start? Turn on **Plan mode** before your first build. Toggle **Plan** in the prompt box and Base44 asks you a few questions about your app, then turns your answers into a structured plan you can adjust before anything is built. It costs only a fraction of a credit per message. [Learn more about plan mode](/Getting-Started/starting-from-your-first-prompt#using-plan-mode)
Take me to Base44 to build my app
***
## Describing your app clearly
The gap between a rough result and a great one usually comes down to how much of the picture you share. These 5 moves help Base44 build the app you actually pictured, whether it is your first prompt or your fiftieth.
### Paint the screen, not just the idea
Base44 fills in anything you leave out with its best guess, so describe what you want to see on the page. The more concrete you are, the less it has to invent.
* **Vague:** "Make a dashboard for my sales."
* **Clear:** "Make a sales dashboard with 3 cards along the top for total revenue, deals won, and deals lost, then a bar chart below showing revenue by month."
### Say why you want it
When you explain the reason behind a request, Base44 can make smarter choices about the details you did not spell out. The why is often more useful than the what.
* **Just the what:** "Put the sign-up button at the top."
* **With the why:** "Put the sign-up button at the top so it is the first thing a new visitor sees."
### Borrow from apps you already like
You do not have to describe a look from nothing. Naming an app people know is a fast shortcut to the feel you want, as long as you say which part you mean.
* "Organize it like Trello, with cards I can drag between columns."
* "Make it feel as calm and uncluttered as Notion, but keep my own brand colors."
### Build one piece at a time
Packing an entire app into a single prompt makes the result harder to get right and harder to fix when something is off. Start with the core, get it working, then layer features on one by one.
```text theme={null}
Start: Build a booking app where clients pick a service and an open time slot.
Next: Now email the client a confirmation as soon as they book.
Next: Now hide time slots that are already taken so nothing gets double-booked.
```
Focused prompts also tend to be gentler on your credits, because a small, clear change is less work behind the scenes than a broad one that touches many pages. Dragging elements or editing text yourself with Visual Edits does not use credits at all. [Learn more about credits](/Account-and-billing/Credits)
### Ask for the fix, not the flaw
When something looks off, describe where you want to end up rather than only what is wrong. Base44 builds from your target, not from your frustration.
* **The flaw:** "The homepage looks cluttered and cramped."
* **The fix:** "Give the homepage more room to breathe: fewer items per row and more space between the sections."
***
## A recipe for look and feel
When the design matters to you, describe 3 things together: what the app does, how it is laid out, and the mood it should have. Combining them gives Base44 a full picture in a single prompt.
### Function
Tell Base44 the job your app is doing, because an online store and a personal portfolio should not look the same. A store needs clear product grids and a fast path to checkout, while a portfolio needs personality and a strong first impression.
### Layout
Tell Base44 how to arrange things on the screen so it does not have to guess. For example:
* **Grid of cards:** Content sits in tidy boxes, which suits dashboards and feature-heavy apps.
* **One long scroll:** The app is a single page where sections appear as you scroll, which suits stories and landing pages.
* **Split screen:** The screen is divided in 2, often with text on one side and a visual on the other.
### Visual style
Tell Base44 the mood you want, and go further than "clean" or "modern." For example:
* **Calm and professional:** Soft colors, plenty of white space, and simple type.
* **Bold and playful:** Bright colors, rounded shapes, and friendly icons.
* **Sleek and premium:** A dark background, high contrast, and elegant fonts.
***
## Refining your app as you go
Once your app exists, most of your time goes into refining it through the AI chat. The phrases below are reliable ways to ask for a change, each with a tip to sharpen the result.
| Technique | When to use it | Example | Pro tip |
| :------------------------------------- | :---------------------------------------------- | :---------------------------------------------------------- | :------------------------------------------------------------------------------------------------ |
| "Make it more..." or "Make it less..." | Adjusting tone, layout, or emphasis | "Make the header less bold." | Add the reason: "Make the call to action more prominent because it is the last step people take." |
| "Add a..." or "Remove the..." | Adding or removing a feature or section | "Add a comments section to each task." | Group related changes: "Add a comments section and place it below the task list." |
| "Change \[this] to \[that]" | Editing text, colors, or components | "Change the Submit button to say Send request." | Layer in context: "Change the button text to match the friendly tone used across the app." |
| "It should feel like..." | Borrowing a familiar app's style | "It should feel like a mix of Duolingo and Airtable." | Say which parts: "Use Duolingo's playful tone and Airtable's table layout." |
| "Add logic for..." | Adding a rule or flow without code | "Hide completed items from the default view." | Describe the outcome: "Remind people if they have not logged in for a week." |
| "Group or organize..." | Structuring content for clarity | "Group tasks by category." | Mention the reason: "Group tasks by category so people find what they need quickly." |
| "Only show\... when..." | Adding behavior that depends on a condition | "Only show the download button after payment is confirmed." | Start simple, then expand: "Add this condition first, then I will add variations per user type." |
| "Let people..." | Framing a feature from the user's point of view | "Let people bookmark resources for later." | Add the value: "Let people tag their documents so they can find them again easily." |
***
## Getting more from Base44's tools
The chat box is not your only way to communicate. These tools let you point, plan, and protect your work, and they often reach the result faster than words alone.
* **Point instead of describe:** With Visual Edits, click straight on the element you mean and describe the change right there. It is the clearest way to say "this one, not that one." [Learn more about the AI chat](/Building-your-app/AI-chat-modes)
* **Plan before you build:** Use Discuss mode to talk an idea through with the AI before it changes anything, so you can agree on a plan without touching your live app or spending credits on changes. [Learn more about the chat modes](/Building-your-app/AI-chat-modes)
* **Show, do not just tell:** If you have a design in mind, [import it from Figma](/Getting-Started/import-from-figma) so Base44 can match something real instead of a description.
* **Set your rules once:** Use AI controls to add instructions the AI should remember on every prompt, and to limit changes to only the areas you want touched. [Learn more about AI controls](/Building-your-app/AI-chat-modes#setting-ai-controls)
* **Experiment without fear:** Restore any earlier version of your app at any time, so you can try bold ideas knowing you can always go back. [Learn more about reverting changes](/Building-your-app/AI-chat-modes#reverting-changes)
Browse the Prompt library for ready-made prompts you can copy, remix, and build on.
***
## Common mistakes to avoid
A few habits trip people up early on. Keeping these in mind will save you time and lead to better results.
* **Being too vague:** Requests like "make it better" or "fix it" give Base44 nothing to work with. Say what you want changed and how.
* **Asking for everything at once:** Cramming payments, reviews, analytics, and inventory into one prompt invites confusion. Build the core first, then add features step by step.
* **Assuming the AI remembers other chats:** If you are picking up an idea from a different conversation or a while back, briefly remind Base44 of the context.
* **Expecting it to read your mind:** If you have a specific layout or flow in your head, describe it as clearly as you can rather than hoping Base44 lands on it.
***
## FAQs
Here are answers to common questions about writing prompts and working with the AI chat.
It can take a few attempts to land on the right result, especially when a request is open to interpretation. To get closer faster:
* Use Visual Edits to click the exact element you want to change and describe the change there.
* Explain what you want to happen, rather than what looks wrong.
* If a prompt is not working after a couple of tries, rephrase it and use words like redesign or rebuild.
* Keep your language simple and natural. The clearer the request, the more accurate the result.
Use AI controls to limit the AI's changes to only the areas you want updated. This is especially helpful when other parts of your app keep getting altered unintentionally. [Learn more about AI controls](/Building-your-app/AI-chat-modes#setting-ai-controls)
Use Discuss mode at the bottom of the AI chat. It lets you talk through ideas, review logic, and plan steps with the AI before any changes are made or credits are used. [Learn more about the chat modes](/Building-your-app/AI-chat-modes)
If the AI is taking too long or seems stuck, try refreshing the page or resending your prompt. This usually gets things moving again.
Some features might not be supported yet. If you are unsure whether something is possible, ask in our [Discord](https://discord.gg/ThpYPZpVts) help channel.
# Prompt library
Source: https://docs.base44.com/Getting-Started/Prompt-library
A collection of ready-made prompts you can copy, remix, and build on to start your next app in minutes.
This library is your go-to source of proven prompts for building with Base44, a [no-code app builder](https://base44.com/ai-app-builder). Every prompt here is designed to be copied, pasted, and made your own. Use one as-is to get started fast, or tweak the details to match your idea.
**Two ways to shape a stronger prompt:**
* **Use the formula:** Describe the function, the layout, and the visual style you want. See how in the [Prompt guide](/Getting-Started/Prompt-guide).
* **Turn on Plan mode:** Toggle **Plan** in the prompt box before you build. Base44 asks you a few questions about your app, then expands your answers into a full, structured prompt you can adjust. It costs only a fraction of a credit per message. [Learn more about plan mode](/Getting-Started/starting-from-your-first-prompt#using-plan-mode).
***
## Starter prompts
These are simple, flexible prompts that get you building in minutes. They work well on their own, and they are easy to extend once your app is running.
**Task manager:**
```text theme={null}
Build a task manager where I can add tasks, check them off, and sort them into
categories. Show a streak counter for tasks I complete several days in a row.
```
**Idea tracker:**
```text theme={null}
Create a private app where I can log business and product ideas. Each entry
should have a title, notes, a category, and a rating for how excited I am
about it.
```
**Daily journal:**
```text theme={null}
Build a journaling app where I can write one entry per day and tag my mood.
Include a calendar view and a way to search past entries by keyword.
```
**Event RSVP tracker:**
```text theme={null}
Create an RSVP app for small events. Hosts can enter event details, guests can
RSVP and leave a note, and hosts can see all responses in a simple dashboard.
```
***
## Business and productivity apps
These prompts help you build tools for running a business, managing clients, and staying organized.
**Client portal:**
```text theme={null}
Build a client portal where clients log in to view their deliverables, leave
comments, and approve or request revisions. I can upload new versions and mark
projects as complete.
```
Level this up by adding email notifications, per-project permissions, or invoicing.
**Proposal generator:**
```text theme={null}
Create an app where I fill out a short form and generate a branded proposal.
Include preset pricing tiers and editable sections, and let me export the
proposal as a PDF.
```
**Invoice tracker:**
```text theme={null}
Build an app for freelancers to create invoices, track whether each one is paid,
and get a reminder when a payment is overdue. Include an option to export
invoices as a PDF.
```
**Time tracker:**
```text theme={null}
Build an app where I can start and stop a timer to log hours against different
projects. Show total hours per week and let me export the data.
```
***
## Knowledge and content tools
These prompts help you organize and share information with very little setup.
**Knowledge base:**
```text theme={null}
Create an internal tool where my team can write, tag, and search help articles.
Include a way to flag an article as outdated so we know to review it.
```
**Course companion:**
```text theme={null}
Build an app where an instructor posts weekly lessons and uploads files, and
each student gets a private dashboard to view lessons and track their progress.
```
**Content calendar:**
```text theme={null}
Create a content calendar where I can plan blog posts and social updates. Each
item has a title, a channel, a status of idea, drafting, or published, and a
publish date shown on a calendar.
```
***
## Personal and lifestyle apps
These prompts are great for hobbies, side projects, and everyday life.
**Meal planner:**
```text theme={null}
Build a meal planner where I can plan meals for the week and generate a shopping
list from the recipes I choose. Include filters for dietary needs like
vegetarian or gluten-free.
```
**Habit tracker:**
```text theme={null}
Create a habit tracker where I can set daily habits and mark them complete.
Show my streaks and a weekly chart of how consistent I have been.
```
Grow this one over time: start with the tracker, add friendly challenges, then add rewards for hitting streaks.
**Gift list organizer:**
```text theme={null}
Build a private app to track gift ideas for friends and family. Each idea has
the person's name, a budget, notes, and whether I have bought it yet.
```
***
## Experimental and niche apps
These prompts are a starting point for more unusual or ambitious ideas.
**Personal AI assistant:**
```text theme={null}
Build an app where I can chat with an AI assistant tailored to my profession,
such as a teacher, marketer, or wellness coach. Let me pick the role and save
past conversations.
```
**Feedback collector:**
```text theme={null}
Create an app where I can build feedback forms and view all responses in one
place. Summarize the overall sentiment and let me filter responses by tag.
```
**File summary tool:**
```text theme={null}
Build an app where I upload a document and get a short AI summary of it. Save
each summary so I can search and reread them later.
```
***
## Just-for-fun apps
These prompts are pure fun, and they make great first projects for getting comfortable with Base44.
**Internet name generator:**
```text theme={null}
Create an app that generates funny, charming names for internet-famous animals.
Let me pick a category like animal, food, or place, then get a random result
with a short backstory.
```
**Conspiracy theory generator:**
```text theme={null}
Build an app that generates lighthearted, obviously fake conspiracy theories
with made-up evidence and charts. Include a randomizer and a share button.
```
**Beige flag analyzer:**
```text theme={null}
Create an app where I type in a quirky dating habit and the app labels it a
green, red, or beige flag, complete with an emoji rating and a short
explanation.
```
***
## Prompt pathways
The best apps grow one step at a time. A prompt pathway is a sequence of prompts that turns a simple idea into a richer app, adding one feature per round so each change is easy to review.
**To build up a client portal step by step:**
1. "Create a basic client portal where clients can log in and see their project status."
2. "Add file uploads with versions, plus approve and request-changes buttons."
3. "Send an email notification when a file is uploaded or a project is marked complete."
4. "Add a chat for each project so clients and I can message about it."
***
## Micro-prompts to add polish
Small refinements can take your app from functional to delightful. These work well once your app is running, and you can also fold them into your first prompt for a more styled result from the start.
* Add hover effects so buttons gently lift when I point at them.
* Use a clean, modern style similar to Notion.
* Add soft drop shadows around cards for a subtle sense of depth.
* Use a rounded sans-serif font and a calm, muted color palette.
* Add smooth transitions between tabs and sections.
* Show a confetti animation when someone completes a task.
* Make it feel like a friendly mobile app, with large touch targets and playful icons.
# Building an app
Source: https://docs.base44.com/Getting-Started/Quick-start-guide
Learn how to build your first Base44 app, use the editor, and manage your credits.
## How to use Base44
Base44 is an AI-powered website and [app builder](https://base44.com/ai-app-builder). You do not need any coding or tech skills. Just describe what you want to build, and Base44 will bring your idea to life.
You can build something simple for yourself or create a full product for your business. Base44 takes care of everything behind the scenes, including design, databases, signups, user permissions, and hosting.
* Prototype a new business idea
* Create a personal to-do list
* Set up an event signup page with reminders
* Build a survey and see answers instantly
* Track projects or sales on a dashboard
* Create a secure booking system or CRM
* Share files privately with clients
* Launch a community site with chat and analytics
Build my app now
***
## Step 1 | Describe your idea
Start by going to [Base44](https://app.base44.com/) and telling it what you want to build in your own words.
When you begin, you will be asked to sign up. This makes sure your work is saved, so you can return to your app anytime.
There are a few ways to start, depending on what you already have. Pick the one that fits, then follow the full walkthrough in [Starting from your first prompt](/Getting-Started/starting-from-your-first-prompt).
Describe your app in plain language and let Base44 build it. See [Using a prompt](/Getting-Started/starting-from-your-first-prompt#using-a-prompt).
Shape your app with the AI first, then turn the plan into a build. See [Using plan mode](/Getting-Started/starting-from-your-first-prompt#using-plan-mode).
Begin from a website you already own and refine it in the app editor. See [Starting from an existing URL](/Getting-Started/starting-from-your-first-prompt#starting-from-an-existing-url).
Turn a Figma frame into a working app. See [Starting from a Figma design](/Getting-Started/starting-from-your-first-prompt#starting-from-a-figma-design).
Bring in tools like Google Workspace, Slack, and GitHub from your first prompt. See [Connecting your tools](/Getting-Started/starting-from-your-first-prompt#connecting-your-tools).
***
## Step 2 | See your app come to life
Once you share your idea, Base44's AI handles the rest. It automatically designs your app's appearance, choosing colors, arranging buttons, and organizing menus to make everything look clean and function smoothly. If you need special pages or features like a calendar, forms, or a task list, Base44 adds those right away so your app is ready to use.
All the complex parts are also taken care of for you in the background. Base44 securely stores all your app's data, manages account and login systems if you need them, and keeps the technology that powers your app running smoothly. You do not need to set up or manage anything yourself; Base44 handles every detail so you can focus on your ideas.
Watch your app appear in the preview window as Base44 works. You can explore your app right away and try out any features by clicking the preview.
***
## Step 3 | Customize your app
Once your app is built, you can make it truly your own. The easiest way is with the AI chat. Just type what you want to change or add, and Base44 updates your app for you. For example, you can say "Change the main color to green," or "Add a signup page that collects full name and company."
If you want to brainstorm or ask questions first, use Discuss mode in the AI chat. Discuss mode lets you talk about your ideas without making changes until you are ready. This mode also uses less credits. [Learn more about the different AI chat modes.](/Building-your-app/AI-chat-modes)
There are lots of ways you can change and improve your app to fit your needs. You can:
Add new features or change how your app works. With the AI chat, you can:
* Add buttons or forms for users to interact with
* Create automated workflows, like sending a welcome email when someone signs up
* Set up notifications, reminders, or automated messages
* Ask the AI to add or update pages (for example, "Add a calendar page for events")
* Adjust the logic behind how your app responds to users or manages different tasks
Customize the colors, layout, and style of your app just by chatting with the AI. You can:
* Change the background color, text color, or font style
* Rearrange sections, move buttons, or update images and icons
* Apply changes globally or on just one page (for example, "Apply this new font to every screen," or "Change only the login page background")
You can also use Edit mode to manually make changes to specific elements of your app.
Decide what information your app uses and collects.
* Use the AI chat to build or change data flows (for example, "Add a field to the signup form for company name").
* Create or update forms to collect details from users, like signups, feedback, or orders.
* From **Data** in your app's dashboard, you can organize the data that your app collects, set rules for who can add, edit, or see information, and export your data to use elsewhere.
[Learn more about managing your app's data](/Building-your-app/Managing-your-app-data)
Control who can access your app and what they can do. From **Settings** in your app's dashboard, you can:
* Set permissions so only certain people or roles can see or edit information (like making some pages visible only to admins)
* Decide if your app is public, invite-only, or restricted to specific users or workspace members
* Set up secure login and registration, including social logins like Google
* Add custom user roles and specify exactly what each role can do (for example, "Create a role called Event Organizer who can add and edit events, but not change app settings")
* Adjust privacy and security rules to keep sensitive data safe
You can review and update settings at any time to match your needs as your app grows.
***
## Step 4 | Test your app
Before you share your app, test how everything works from different perspectives.
Interact with the preview like an end user. Click, fill out forms, and check every feature.
Click the **More Actions** icon in the top bar and select **Act as a user** to view the app as a specific person or role.
Ask the AI chat to help you test key flows or edge cases, such as "Test as a guest" or "See what an admin can do."
Create test user profiles with different roles or permissions to review what each can access.
Use an incognito or private browser window to see what a first-time visitor would experience.
Check your app on both desktop and mobile to catch layout or navigation issues.
***
## Step 5 | Share and publish your app
When you are ready to share your app, click **Publish** in the top bar.
From there you can, you can:
* Copy your app's web URL.
* Click **Connect a custom domain** or **Get Domain** to connect your own address.
* Click **Share your app** to get a link you can share by email or on social.
* Use **App Visibility** to choose who can access your app.
* Click **Publish App** to push your latest changes live.
***
## Guided tour of the app editor
There are 3 main working areas inside the app editor: the AI chat, the preview, and your app's dashboard. The top bar sits above them and gives you quick access to preview, dashboard, code, testing tools, and publishing.
### AI chat
This is where you chat to Base44. Simply type what you want into the chat on the left side of the app editor, and Base44 turns your ideas into reality.
You can use different AI chat modes, including Discuss and Visual Edit, depending on how you want to work and use credits. [Learn more about the AI chat modes](/Building-your-app/AI-chat-modes)
If you ever need to undo a prompt, find that message in the chat and click the **Revert** icon under it to take your app back to just before that step. You can also click the **Edit** icon on an earlier message and resend it. When you resend, Base44 reverts any changes made after that message and applies your updated request.
### Preview
On the right side of your screen, you see a preview version of your app as it updates in real time. You can use the preview to interact with your app exactly as your users will. Click the different parts of your app to see how it works, or make design changes using Visual Edit.
### App dashboard
Go to your app's dashboard whenever you want to manage your app. In the dashboard, you can invite teammates, track analytics and user activity, control access, set your app to public or private, add a custom domain, and more.
Use the sidebar search in your app's dashboard to quickly find pages, sections, entities, and connectors. Results update as you type and support dynamic keywords, including entity and connector names.
***
## FAQs
Click a question below to learn more.
Your first build uses a small, fixed amount, about 1 credit, no matter how detailed your prompt is or which AI model you choose. After that, each change you ask for costs credits based on how much work it involves and the model you use.
Credits are used only when the AI builds or updates something for you, so previewing your app and clicking through it are always free. Learn more about [credits](/Account-and-billing/Credits) and [plans](/Account-and-billing/Billing-and-plans).
Yes. Base44 automatically adapts your app for mobile devices. Use the device menu in the top bar to switch to the mobile view, check how everything appears, and make sure your layout, buttons, and text are easy to use on any screen size.
If you want to make any changes to the mobile layout, simply ask the AI chat to do it for you.
Yes. You can clone your app at any time. This is useful if you want to test major changes without affecting your live app, or use an existing app as the starting point for a new project.
**To clone from your Apps page:**
1. Go to your [**Apps page**](https://app.base44.com/apps).
2. Click the **More actions** icon on the app card.
3. Click **Clone App**.
**To clone from the app dashboard:**
1. Click **Dashboard** in your app editor.
2. Click **Settings**.
3. Click **App Settings**.
4. Click **Create Copy** next to **Clone App**.
The cloned app opens automatically and includes the suffix (Copy).
We take care of it automatically. Base44 comes with built-in hosting, so there is no deployment process. When your app is created, it is instantly live and shareable.
Yes, you can export your app's code as a ZIP file or to GitHub on a [Builder plan](https://base44.com/pricing) or higher.
* **Export as a ZIP file:** Click **Code** in the top bar and then click the **Export project as ZIP** icon at the top right of the code view.
* **Export to GitHub:** Click the **GitHub** icon in the top bar and follow the setup flow.
For self-serve guidance while you work, click your avatar in your workspace and select **Help Center** to open our docs, or go to [https://docs.base44.com/](https://docs.base44.com/).
If you need more hands-on help, you have a few options to get expert help with your Base44 app.
You can work with a [Base44 Partner](/Getting-Started/Hiring-a-partner) for tailored, one-on-one support on larger or ongoing projects. Partners can help you plan and build full apps, handle complex integrations, and provide long-term strategic guidance. [Choose your partner](https://app.base44.com/partners) →
If you would like feedback from other people building with Base44, you can also [join our Discord community](https://discord.com/invite/ThpYPZpVts). It is a great space to connect with others who can share advice, help, and tips from their own projects.
Yes. You can unpublish your app at any time. When the app is unpublished, people cannot access it until you publish it again. All your data and settings is saved when you unpublish.
**To unpublish your app:**
1. Go to your app dashboard.
2. Click **Settings**, then **App Settings**.
3. Scroll to **Danger Zone**, and click **Unpublish App**, then **Unpublish** in the dialog.
Base44 is built to work smoothly on all major modern browsers that support ES6+ JavaScript, CSS Grid, Flexbox, and modern DOM APIs. You can use Base44 with current and recent versions of the following browsers:
* **Google Chrome** (version 51 and above for ES6, 57+ for CSS Grid, 29+ for Flexbox)
* **Mozilla Firefox** (version 54 and above for ES6, 52+ for CSS Grid, 28+ for Flexbox)
* **Microsoft Edge (Chromium-based)** (full support since launch)
* **Safari** (version 10.1+ for CSS Grid, 9+ for Flexbox, 10+ for ES6)
* **Opera** (version 38+ for ES6, 44+ for CSS Grid, 12.1+ for Flexbox)
There is limited or no support for Internet Explorer 11 and earlier, and some older Android WebView or legacy browsers may not display content correctly.
As a general guideline, you are covered if you use a modern, auto-updating browser. Internet Explorer 11 is outdated and not recommended for Base44.
Yes, you can charge people to use your app if you are on the Builder plan or higher. You can connect a payment provider, such as Stripe or another service that supports APIs, to accept payments from your app users. Use the Secrets tab to securely store your API keys.
See how to [set up payments](https://docs.base44.com/Setting-up-your-app/setting-up-wix-payments) for your app.
The platform badge is a label that appears at the bottom right of your live app with the text 'Edit with Base44'. It lets people know that you built your app with Base44, and allows anyone to create a copy of your app into their own account so that they can edit their own version.
**Notes:**
* Removing the platform badge is not available on the free plan. You need to upgrade to a paid plan to hide it.
* If your app is set to private, the badge is not displayed.
* If your app is set to public, everyone can see the badge. If somebody clicks it, it creates a copy of your app into their own account so that they can edit their own version of the app.
**To show or hide the badge:**
1. Go to your app's dashboard and click **Settings**.
2. Click **App Settings**.
3. Enable or disable the **Platform Badge** toggle.
Yes. Press **Cmd+K** (Mac) or **Ctrl+K** (Windows) to open the command palette. From there, you can navigate between views, switch pages, open files, jump to entities, trigger quick actions like publishing or inviting collaborators, and search Base44 documentation without leaving the app. The command palette is available from both the workspace home screen and the app editor.
**Need more help or inspiration?**
Explore [Base44's templates](https://app.base44.com/app-templates) to get ideas or start with a base for your app.
# Building a website
Source: https://docs.base44.com/Getting-Started/building-a-website
Build a website on Base44 that looks great, works for everyone, and gets found in search. Describe your idea, customize the design, connect a domain, and optimize for SEO and AI visibility.
## Why build your website with Base44
Base44 is not only for building apps. It is also an [AI-powered website builder](https://base44.com/ai-website-builder), so you can create a full website just by describing what you want. You do not need any coding or design skills. Base44 builds it for you, including the design, pages, content, hosting, and everything running behind the scenes.
A website is one of the most popular things to build on Base44. Whether you want a simple page to share your work or a full site for your business, Base44 handles the technical side so you can focus on your content and your brand.
* A business or agency website
* A landing page for a product or event
* A personal portfolio or resume site
* An online store or product catalog
* A blog or content site
* A booking or contact page for your services
Build my website now
***
## Step 1 | Describe your website
Start by going to [Base44](https://app.base44.com/) and telling it what kind of website you want in your own words. You can describe the purpose, the pages you need, and the style you are going for. For example, "a clean one-page site for my photography business with a gallery and a contact form."
When you begin, you are asked to sign up so your work is saved and you can return to your website anytime.
There are a few ways to start, depending on what you already have. Pick the one that fits, then follow the full walkthrough in [Starting from your first prompt](/Getting-Started/starting-from-your-first-prompt).
Describe your website in plain language and let Base44 build it. See [Using a prompt](/Getting-Started/starting-from-your-first-prompt#using-a-prompt).
Shape your website with the AI first, then turn the plan into a site. See [Using plan mode](/Getting-Started/starting-from-your-first-prompt#using-plan-mode).
Begin from a website you already own and refine it. See [Starting from an existing URL](/Getting-Started/starting-from-your-first-prompt#starting-from-an-existing-url).
Turn a Figma frame into a working website. See [Starting from a Figma design](/Getting-Started/starting-from-your-first-prompt#starting-from-a-figma-design).
Bring in tools like Google Workspace, Slack, and GitHub from your first prompt. See [Connecting your tools](/Getting-Started/starting-from-your-first-prompt#connecting-your-tools).
***
## Step 2 | See your website come to life
Once you share your idea, Base44 builds your website automatically. It designs the layout, chooses colors and fonts, arranges your sections, and adds the pages and features you asked for, such as a contact form, a gallery, or a booking section.
Base44 keeps simple sites lean, so your website may start as a single page. Ask the AI to add more pages, such as an About or Contact page, whenever you need them.
Everything technical is handled for you in the background, including hosting, data storage, and any login or signup flows your site needs. Watch your website appear in the preview window as Base44 works, and click through it to try it out right away.
***
## Step 3 | Customize your design and content
Once your website is built, you can make it your own. The easiest way is with the AI chat. Type what you want to change, and Base44 updates your site. For example, "Change the main color to deep green," or "Add an About page with our team photos and a short story."
To brainstorm or ask questions before making changes, use Discuss mode in the AI chat. It uses fewer credits. [Learn more about the AI chat modes](/Building-your-app/AI-chat-modes).
There are lots of ways to shape your website:
Change colors, fonts, spacing, and styling to match your brand. You can apply changes across the whole site or to a single page. See [Customizing the design of your app](/Building-your-app/Design).
Set up a design system, responsive layouts, and reusable page structures so every page feels part of the same site. See [Design foundations and layout](/Building-your-app/Design-foundations-and-layout).
Add new pages, control which pages appear in your navigation, and decide which are public. See [Managing your app pages](/Building-your-app/managing-your-pages).
Upload your logo, photos, videos, and other files to make your website stand out. See [Uploading and managing media](/Building-your-app/Using-media).
***
## Step 4 | Make your website accessible
An accessible website works for everyone, including people who use screen readers, navigate with a keyboard, or need larger text and clear contrast. Accessibility also improves your search visibility, since the same structure that helps people helps search engines understand your pages.
Keep this checklist in mind as you build:
Use clear heading levels so each page has one main heading and a logical structure.
Add descriptive alt text to your images so screen readers can describe them.
Choose color combinations with enough contrast between text and background.
Write descriptive link text, such as "Read our pricing," instead of "Click here."
Make sure people can reach every menu, button, and form using only a keyboard.
You can ask the AI chat to help, for example "Check my homepage for accessibility issues and fix the color contrast." For more on building an accessible, well-structured site, see [Design foundations and layout](/Building-your-app/Design-foundations-and-layout).
***
## Step 5 | Test your website
Before you share your website, test how it looks and works from your visitors' perspective.
Click through the preview like a visitor, following your menus and checking every link.
Check your site on both desktop and mobile to catch layout or navigation issues.
Open your site in an incognito or private browser window to see what a first-time visitor experiences.
Test every form, signup, and payment flow end to end to confirm they work and you receive the data.
Proofread your text and check that images and buttons look and work as expected.
Ask the AI chat to help you test key flows, such as submitting your contact form.
***
## Step 6 | Connect a domain
Your website is live on a Base44 web address as soon as it is built. Connecting your own domain, such as `yourbusiness.com`, makes your site look professional, easier to remember, and easier to share. It also has a big impact on your search ranking, since search engines treat sites on a custom domain as more trustworthy than ones on a shared subdomain.
**You have a few ways to set up a domain:**
* Buy a domain directly from Base44 for the simplest setup, with DNS and SSL handled for you. See [Buying a domain from Base44](/Setting-up-your-app/Buying-a-domain-from-Base44).
* Connect a domain you already own by updating your DNS records. See [Connecting an external domain](/Setting-up-your-app/Connecting-an-external-domain).
* Send your website's emails from your own domain, such as `hello@yourbusiness.com`. See [Sending emails from a custom domain](/Setting-up-your-app/Sending-emails-from-a-custom-domain).
For an overview of how domains work in Base44, see [Connecting a domain to your app](/Setting-up-your-app/Setting-up-your-custom-domain).
***
## Step 7 | Publish and share your website
When you are ready to go live, click **Publish** in the top bar. Publishing pushes your latest changes to your live website so visitors can see them.
**From the publish menu, you can:**
* Copy your website's web address.
* Click **Connect a custom domain** or **Get Domain** to use your own address.
* Click **Share your app** to get a link you can send by email or post on social.
* Use **App Visibility** to choose who can access your site.
* Click **Publish App** to push your latest changes live.
***
## Step 8 | Optimize for search and AI visibility
Once your website is published and connected to a domain, you can help people find it. Base44 handles the technical foundation of search engine optimization (SEO) and generative engine optimization (GEO) for you, so your site can show up both in search engines like Google and in AI tools like ChatGPT and Gemini.
Your website must be published before search engines and AI tools can reach it. Connecting a custom domain is the single biggest improvement you can make to your search visibility.
The **SEO & GEO** page in your app dashboard is where you manage this. Run a scan to get a score and a prioritized checklist, set custom titles and descriptions for each page, and control indexing and structured data.
**To get your website found:**
1. Learn the fundamentals in [Getting your app found in search](/Performance-and-SEO/SEO-and-search-visibility).
2. Run a scan and fix issues from your dashboard. See [Optimizing your app's SEO & GEO](/Performance-and-SEO/checking-your-seo-and-geo).
***
## Step 9 | Promote and grow your website
With your website live, you can start bringing people to it.
* Generate a social promotion strategy and ready-to-post content for your site. See [Promoting your app](/promoting-your-app/social-content).
* Submit your site to Launchpad for a chance to get featured and reach the Base44 community. See [Submitting your app to Launchpad](/promoting-your-app/submitting-to-launchpad).
***
## FAQs
Click a question below to learn more.
Your first build uses a small, fixed amount, about 1 credit, no matter how detailed your prompt is or which AI model you choose. After that, each change you ask for costs credits based on how much work it involves and the model you use.
Credits are used only when the AI builds or updates something for you, so previewing your website and clicking through it are always free. Learn more about [credits](/Account-and-billing/Credits) and [plans](/Account-and-billing/Billing-and-plans).
No. Your website is live on a Base44 web address as soon as it is built, and you can share that address right away. A custom domain is optional, but it makes your site look more professional and has a big impact on your search ranking.
Yes. Base44 automatically adapts your website for mobile devices. Use the device menu in the top bar to switch to the mobile view and check how everything looks. If you want to adjust the mobile layout, ask the AI chat to do it for you.
Publish your website, connect a custom domain, then run an SEO & GEO scan from your app dashboard and fix the issues it finds. For the full process, see [Optimizing your app's SEO & GEO](/Performance-and-SEO/checking-your-seo-and-geo).
Yes. The **Meta tags** tab on the **SEO & GEO** page lets you set a custom title and description for each public page. These control what appears in search results and when someone shares a link to your site. See [Optimizing your app's SEO & GEO](/Performance-and-SEO/checking-your-seo-and-geo).
Yes. Keep editing your website with the AI chat or manual changes at any time. Your changes go live the next time you click **Publish**.
Yes. You can unpublish your website at any time. When it is unpublished, people cannot access it until you publish it again. All your data and settings are saved when you unpublish.
**To unpublish your website:**
1. Go to your app dashboard.
2. Click **Settings**, then **App Settings**.
3. Scroll to **Danger Zone**, and click **Unpublish App**, then **Unpublish** in the dialog.
Yes, on the Builder plan or higher. You can connect a payment provider such as Stripe to accept payments. See how to [set up payments](/Setting-up-your-app/setting-up-wix-payments) for your site.
For self-serve guidance while you work, click your avatar in your workspace and select **Help Center** to open our docs, or go to [https://docs.base44.com/](https://docs.base44.com/).
If you need more hands-on help, you have a few options to get expert help with your Base44 website.
You can work with a [Base44 Partner](/Getting-Started/Hiring-a-partner) for tailored, one-on-one support on larger or ongoing projects. Partners can help you plan and build full sites and apps, handle complex integrations, and provide long-term strategic guidance. [Choose your partner](https://app.base44.com/partners) →
If you would like feedback from other people building with Base44, you can also [join our Discord community](https://discord.com/invite/ThpYPZpVts). It is a great space to connect with others who can share advice, help, and tips from their own projects.
**Need more help or inspiration?**
Explore [Base44's templates](https://app.base44.com/app-templates) to start your website from a ready-made base.
# Importing from Figma
Source: https://docs.base44.com/Getting-Started/import-from-figma
Turn your Figma designs into working apps and pages. Import a frame to start a new app, or add Figma pages to an existing app at any point in the app editor.
Base44 connects to Figma so you can build directly from your designs. Import a Figma frame when starting a new app, or add pages from Figma to an existing app at any point during development.
* **Figma seat:** You must have an Editor seat. Figma blocks API access for View and Collaborator accounts.
* **Design file:** You must use a Figma Design file. FigJam, Slides, and other file types are not supported.
* **Public frame link:** Your frame link must be set to **Anyone with the link – Can view**. In Figma, click **Share** to update this. You can set it back to private after the import.
You can connect one Figma account per workspace.
***
## Start a new app from Figma
Use **Import from Figma** on the home screen to turn a Figma frame into a new Base44 app. Base44 recreates the layout, structure, and visual style of your design as a starting point.
**To start a new app from a Figma design:**
1. Go to [Base44](https://base44.com).
2. Click the **+** icon in the prompt box.
3. Click **Import from Figma**.
4. Click **Connect to Figma**.
5. Follow the on-screen instructions to give Base44 access to Figma.
6. Paste your Figma link and click **Generate**.
The import focuses on the selected frame or section. Other parts of the Figma file are not included unless you import them separately.
***
## Add a page from Figma
Once your app is in the app editor, you can add Figma frames as new pages at any point. You are not limited to the initial import. Editor access is required to add pages from Figma. Viewers cannot add pages, and you must wait for any active generation to finish before adding a page.
**To add a page from Figma:**
1. Open your app in the app editor.
2. In the AI chat, click the **+** icon and select **Add page from Figma**.
3. In Figma, right-click the **frame or section** you want to import.
4. Choose **"Copy/Paste as"**, then select **"Copy link to selection"**.
5. Paste the link into the dialog and click **Add page**.
***
## Figma import guidelines
Preparing your Figma file before you import helps Base44 read your design and recreate it as a clean, accurate layout. Follow these guidelines to get the best results.
### Structuring your Figma layout
A clear structure in Figma makes it easier for Base44 to build a responsive layout that matches your intent.
A well-structured home page with clear sections and consistent components gives the best results when you extend the design into a full app.
* **Divide the page into logical sections:** Wrap related content (for example, a hero, feature row, or footer) inside frames or groups so each area of the page is clearly defined.
* **Use auto layout for hierarchy:** Apply `Auto Layout` to components such as cards, navigation bars, and repeating content blocks. For example, an info card with an image, title and description should be grouped as `Frame` or `Group`, or preferably `Auto Layout`. This helps Base44 understand how elements relate to each other and how they should resize.
* **Keep nesting meaningful:** Group elements that belong together (for example, image + title + description in a card), and avoid deep, unnecessary nesting that does not reflect the visual structure.
* **Align and space consistently:** Use consistent padding, gaps, and alignment inside your frames so Base44 can preserve your spacing and hierarchy.
### Working with vectors and shapes
Cleaning up vector elements before import makes positioning and rendering more accurate. Flattening and simplifying vectors reduces surprises in how elements align, scale, and render once they are in Base44.
* **Flatten complex vectors:** If a vector is built from many separate paths (for example, an icon made from multiple shapes), flatten it into a single vector whenever you can.
* **Outline strokes before flattening:** For lines, circles, stars, and similar shapes:
* Use **Outline Stroke** then flatten the result into a single vector element.
* **Remove hidden elements:** Delete layers that are completely hidden or pushed far off canvas so they do not interfere with the imported layout.
* **Simplify fills:** If an element has multiple fills, keep only what you actually need. Base44 only imports the last fill on an element.
### Fonts, effects, and other limitations
Some parts of your Figma design are adapted during import so the resulting layout works reliably in Base44.
* **Fonts:**
* Only Google Fonts are fully supported.
* Custom fonts are replaced with a default font during import. You can update typography later inside Base44.
* **Design effects that may not be preserved exactly:**
* Image filters
* Multiple background layers on a single element
* Variables and variable-driven styles
* **Layout refinements:**
* Fine-tune spacing, responsiveness, and interactions after import using the AI chat or Visual Edit mode.
* If something does not look right, adjust the structure directly in Base44 or update your Figma file and import again from a cleaner frame.
If your design relies heavily on unsupported effects or complex variable setups, expect visual differences after import and plan to refine the result inside Base44.
### Building the rest of your app
Once your Figma frame is imported, you can treat the new page as the foundation for a full app or website.
* Use the imported page as your **home page** and main reference for structure, layout, and visual language.
* Ask the AI chat to:
* Identify which additional pages are missing (for example, About, Pricing, Blog, or Contact).
* Create new pages that follow the same design language and layout principles.
* Connect buttons, menus, and links on the home page to the new internal pages.
**You can use a prompt like:**
> `Review the home page carefully, including both its content and its design style. Use the home page as the main reference to understand the website's structure and design language. Identify which additional pages are needed to create a complete website. Create the missing pages while maintaining the same design language, layout principles, and visual style as the home page, so they feel like a direct continuation and not disconnected. When finished, return to the home page and connect all relevant buttons and links so each one navigates to the appropriate internal page.`
If you see repeated patterns in your imported design (such as cards, feature rows, or call-to-action blocks), mention them in your prompt so the AI can reuse those patterns on the new pages.
# Import from Figma into Base44
Source: https://docs.base44.com/Getting-Started/import-from-figma-guidelines
Guidelines to help you prepare your Figma designs so the Import from Figma feature creates clean, accurate layouts in Base44.
## Before you import from Figma
Preparing your Figma file correctly helps Base44 read your design and recreate it as a working layout.
* Make sure you are working in a **Figma Design** file. FigJam, Slides, and other file types are not supported.
* Select a **single frame or section** that you want to import. Do not use a full document or page-level link.
* In Figma, click **Share** and under **Who has access**, set the link to **Anyone with the link – Can view**. Copy the link for the selected frame or section and paste it into **Import from Figma** in Base44. After the import is complete, you can set the Figma file permissions back to private if you prefer.
Import from Figma focuses on the selected frame or section. Other parts of the Figma file are not brought into Base44 unless you import them separately.
***
## Structuring your Figma layout
A clear structure in Figma makes it easier for Base44 to build a responsive layout that matches your intent.
A well-structured home page with clear sections and consistent components gives the best results when you extend the design into a full app.
* **Divide the page into logical sections:** Wrap related content (for example, a hero, feature row, or footer) inside frames or groups so each area of the page is clearly defined.
* **Use auto layout for hierarchy:** Apply `Auto Layout` to components such as cards, navigation bars, and repeating content blocks. For example, an info card with an image, title and description should be grouped as `Frame` or `Group`, or preferably `Auto Layout`. This helps Base44 understand how elements relate to each other and how they should resize.
* **Keep nesting meaningful:** Group elements that belong together (for example, image + title + description in a card), and avoid deep, unnecessary nesting that does not reflect the visual structure.
* **Align and space consistently:** Use consistent padding, gaps, and alignment inside your frames so Base44 can preserve your spacing and hierarchy.
***
## Working with vectors and shapes
Cleaning up vector elements before import makes positioning and rendering more accurate. Flattening and simplifying vectors reduces surprises in how elements align, scale, and render once they are in Base44.
* **Flatten complex vectors:** If a vector is built from many separate paths (for example, an icon made from multiple shapes), flatten it into a single vector whenever you can.
* **Outline strokes before flattening:** For lines, circles, stars, and similar shapes:
* Use **Outline Stroke** then flatten the result into a single vector element.
* **Remove hidden elements:** Delete layers that are completely hidden or pushed far off canvas so they do not interfere with the imported layout.
* **Simplify fills:** If an element has multiple fills, keep only what you actually need. Base44 only imports the last fill on an element.
***
## Fonts, effects, and other limitations
Some parts of your Figma design are adapted during import so the resulting layout works reliably in Base44.
* **Fonts:**
* Only Google Fonts are fully supported.
* Custom fonts are replaced with a default font during import. You can update typography later inside Base44.
* **Design effects that may not be preserved exactly:**
* Image filters
* Multiple background layers on a single element
* Variables and variable-driven styles
* **Layout refinements:**
* Fine-tune spacing, responsiveness, and interactions after import using the AI chat or Visual Edit mode.
* If something does not look right, adjust the structure directly in Base44 or update your Figma file and import again from a cleaner frame.
If your design relies heavily on unsupported effects or complex variable setups, expect visual differences after import and plan to refine the result inside Base44.
***
## Add a page from Figma
Once your app is in the builder, you can keep adding Figma frames as new pages. You are not limited to the initial import: each frame you add becomes a new page in your app.
**To add a page from Figma:**
1. Open your app in the builder.
2. In the chat input, click the **+** icon.
3. Select **Add page from Figma**.
4. Paste a link to the Figma frame you want to import.
5. Click **Add page**.
Base44 generates a new page from your design and adds it to your app. The same file setup requirements apply: make sure your frame link is set to **Anyone with the link – Can view** before you add it.
Editor access is required to add pages from Figma. Viewers cannot add pages. The app also cannot be processing another prompt at the same time. Wait for any active generation to finish before adding a page.
Importing frames from the same Figma file keeps fonts, colors, and spacing consistent across pages. After adding a page, ask the AI chat to connect navigation between your existing pages and the new one.
***
## Building the rest of your app
Once your Figma frame is imported, you can treat the new page as the foundation for a full app or website.
* Use the imported page as your **home page** and main reference for structure, layout, and visual language.
* Ask the AI chat to:
* Identify which additional pages are missing (for example, About, Pricing, Blog, or Contact).
* Create new pages that follow the same design language and layout principles.
* Connect buttons, menus, and links on the home page to the new internal pages.
**You can use a prompt like:**
> `Review the home page carefully, including both its content and its design style. Use the home page as the main reference to understand the website’s structure and design language. Identify which additional pages are needed to create a complete website. Create the missing pages while maintaining the same design language, layout principles, and visual style as the home page, so they feel like a direct continuation and not disconnected. When finished, return to the home page and connect all relevant buttons and links so each one navigates to the appropriate internal page.`
If you see repeated patterns in your imported design (such as cards, feature rows, or call-to-action blocks), mention them in your prompt so the AI can reuse those patterns on the new pages.
# Migrating a project to Base44
Source: https://docs.base44.com/Getting-Started/migrating-an-existing-app
Bring your existing apps, projects or websites into Base44 from other platforms, including your actual data, schema, and frontend code.
You can migrate an existing project from another platform directly into Base44. Base44 connects to your source and brings over not just the design and structure, but your actual data too: contacts, products, pages, and more. Pick up right where you left off, without starting from scratch.
This works with both SaaS tools like Salesforce, HubSpot, Shopify, and WordPress, and vibe-coding platforms like Lovable and Bolt.new.
***
## What gets migrated
What Base44 imports depends on the platform. Click your platform below to see what's included.
* 24 standard CRM objects (e.g., Account, Contact, Lead, Opportunity)
* All custom objects
* All scalar and reference fields (with proper types preserved)
* Cross-object relationships
* Contacts, Companies, Deals, Line items
* Owners
* Contact, Company, and Deal schemas
* Products; Orders; Customers; Collections; Pages
* Articles (blog posts); Discounts
* Frontend theme code
* Storefront URL preserved
* Posts, Pages, Categories, Tags
* Media library metadata, Comments
* Users (self-hosted only)
* Site frontend structure
* WooCommerce add-on: Products, Orders, Customers with standard fields
Custom fields are not currently imported. If you need custom fields support, submit a request at [feedback.base44.com](https://feedback.base44.com).
* All user-created tables in the public schema (schema + data)
* Column schema
* Primary keys and foreign keys
* Row level security flag
* Frontend source from GitHub repo
Moving from Lovable? Learn more about [migrating from Lovable to Base44](https://base44.com/migrate/lovable-migration).
Base44 imports 100 items from each entity first so you can preview your app before committing. Once you're happy with the result, you'll be prompted to migrate all your data.
***
## Migrating an app
Select your platform below to get started.
Import your data and pipelines
Import contacts, companies, and deals
Import your store data
Import an existing website
Migrate entities, data, and frontend code
Migrate entities, data, and frontend code
***
### Salesforce
Base44 connects to your Salesforce account via a secure OAuth connection. Once connected, you can review and select exactly which data to import.
Base44 only reads your data and connects via OAuth. Nothing in your Salesforce org will be modified.
**To migrate from Salesforce:**
1. From the Base44 home page, click **+** on the prompt box.
2. Click **Migrate from another platform**.
3. In the **Import existing project** panel, select **Salesforce**.
4. Select your environment: **Production** or **Sandbox**.
5. Click **Connect** and complete the authorization.
6. Go back to Base44, and in the **Choose entities to migrate** panel, select the entities you want to bring over and click **Import & Continue**.
7. On the home page, review the pre-filled prompt and click **Send** to start building your app.
***
### HubSpot
Base44 uses your Private App token to read your HubSpot CRM data. You'll need to create one in HubSpot with the required read scopes before connecting.
Your Private App token lets Base44 read your CRM data. Base44 only reads your data and nothing in your HubSpot portal will be modified.
**To migrate from HubSpot:**
1. From the Base44 home page, click **+** on the prompt box.
2. Click **Migrate from another platform**.
3. In the **Import existing project** panel, select **HubSpot**.
4. Enter your **Private App access token**. To find this:
1. In HubSpot, go to **Settings** > **Integrations** > **Private Apps** > **Create a private app**.
2. Select these read scopes: `crm.objects.contacts.read`, `crm.objects.companies.read`, `crm.objects.deals.read`, `crm.objects.line_items.read`, `crm.objects.owners.read`, `crm.schemas.contacts.read`, `crm.schemas.companies.read`, `crm.schemas.deals.read`.
3. Copy the access token and paste it into Base44.
5. Click **Connect**.
6. In the **Choose entities to migrate** panel, select the entities you want to bring over and click **Import & Continue**.
7. On the home page, review the pre-filled prompt and click **Send** to start building your app.
***
### Shopify
Base44 uses your Shopify app credentials to securely read your store data. Once connected, you can review and select exactly which data to import.
Connecting your Shopify credentials lets Base44 securely read your store data during migration only. Nothing in your Shopify store will be modified.
**To migrate from Shopify:**
1. From the Base44 home page, click **+** on the prompt box.
2. Click **Migrate from another platform**.
3. In the **Import existing project** panel, select **Shopify**.
4. Enter your **Store URL** (format: `https://mystore.myshopify.com`).
Make sure to include `http://` or `https://` in the URL.
5. Enter your **Client ID** and **Client Secret**. To find this:
1. In Shopify, click your store name at the top right and select **View Dev Dashboard**.
2. Select your app from the list.
3. Go to **Settings**.
4. Find your **Client ID** and **Client Secret** under **Credentials**.
6. Click **Connect**.
7. Go back to Base44, and in the **Choose entities to migrate** panel, select the entities you want to bring over and click **Import & Continue**.
8. On the home page, review the pre-filled prompt and click **Send** to start building your app.
***
### WordPress
Base44 reads your site content to rebuild it in Base44. Once connected, you can review and select exactly which data to import.
Base44 securely reads your site content during migration only. Nothing on your WordPress site will be modified.
Custom fields are not imported. If you need custom fields support, submit a request at [feedback.base44.com](https://feedback.base44.com).
**To migrate from WordPress:**
1. From the Base44 home page, click **+** on the prompt box.
2. Click **Migrate from another platform**.
3. In the **Import existing project** panel, select **WordPress**.
4. Enter your **Site URL**.
5. If you are on a self-hosted WordPress site, also enter your **Username** and **Application Password**.
* Find your Application Password in WordPress under **Users** > **Profile** > **Application Passwords**.
* WordPress.com sites don't require these fields.
6. Click **Connect**.
7. Go back to Base44, and in the **Choose entities to migrate** panel, select the entities you want to bring over and click **Import & Continue**.
8. On the home page, review the pre-filled prompt and click **Send** to start building your app.
***
### Lovable
Lovable stores your app's data in Supabase. Base44 uses your Supabase credentials to read your database schema and data and bring it into Base44.
Base44 securely reads your database schema and data during migration only. Nothing in your Supabase project will be modified.
**To migrate from Lovable:**
1. From the Base44 home page, click **+** on the prompt box.
2. Click **Migrate from another platform**.
3. In the **Import existing project** panel, select **Lovable**.
4. (Optional) Click **Connect** next to **GitHub** to import your source code.
5. Enter your **Supabase URL** (format: `https://xxx.supabase.co`).
6. Enter your **Service Role Key**.
1) Go to [supabase.com](https://supabase.com) and sign in with the account linked to your project.
* **Not sure which account?** In Lovable, go to **Settings** > **Connectors** > **Supabase** to see your linked account.
* **Not got a Supabase account?** If Supabase isn't connected yet, go to **Settings** > **Connectors** > **Supabase** and click **Connect Supabase**, then complete the authorization. Use the same email to create an account in Supabase as Lovable.
2) Open your project.
3) Click **Copy** next to the URL at the top of the project homepage and select **Project URL**.
1. In your Supabase project, go to **Settings**, then **API Keys**.
2. Click the **Legacy anon, service\_role API keys** tab.
3. Click **Reveal** next to `service_role` and copy the key.
7. Click **Connect**.
8. In the **Choose entities to migrate** panel, select the entities you want to bring over and click **Import & Continue**.
9. On the home page, review the pre-filled prompt and click **Send** to start building your app.
***
### Bolt.new
Bolt.new stores your app's data in Supabase. Base44 uses your Supabase credentials to read your database schema and data and bring it into Base44.
Base44 securely reads your database schema and data during migration only. Nothing in your Supabase project will be modified.
**To migrate from Bolt.new:**
1. From the Base44 home page, click **+** on the prompt box.
2. Click **Migrate from another platform**.
3. In the **Import existing project** panel, select **Bolt.new**.
4. (Optional) Click **Connect** next to **GitHub** to import your source code.
5. Enter your **Supabase URL** (format: `https://xxx.supabase.co`).
6. Enter your **Service Role Key**.
1) Go to [supabase.com](https://supabase.com) and sign in with the account linked to your project.
* **Not sure which account?** In Bolt.new, go to **Settings** > **Connectors** > **Supabase** to see your linked account.
* **Not got a Supabase account?** If Supabase isn't connected yet, go to **Settings** > **Connectors** > **Supabase** and click **Connect Supabase**, then complete the authorization. Use the same email to create an account in Supabase as Bolt.new.
2) Open your project.
3) Click **Copy** next to the URL at the top of the project homepage and select **Project URL**.
1. In your Supabase project, go to **Settings**, then **API Keys**.
2. Click the **Legacy anon, service\_role API keys** tab.
3. Click **Reveal** next to `service_role` and copy the key.
7. Click **Connect**.
8. In the **Choose entities to migrate** panel, select the entities you want to bring over and click **Import & Continue**.
9. On the home page, review the pre-filled prompt and click **Send** to start building your app.
***
## FAQs
Click a question below to learn more about migrating to Base44.
**Start from URL** captures the look and feel of any public webpage, with no credentials needed.
**Migrate from another platform** connects to your actual account and brings over your real data, schema, and frontend code. It requires credentials and is designed for users who want to carry their existing work into Base44, not just replicate a design.
Yes. After connecting, Base44 shows you what's available and lets you select what to bring over before the migration runs.
Large datasets can take a while depending on the size of your data. You can leave the page and your migration will continue running in the background.
All third party trademarks depicted in this product are the property of their respective owners. No affiliation or endorsement is implied.
# Starting from your first prompt
Source: https://docs.base44.com/Getting-Started/starting-from-your-first-prompt
The ways to begin building on Base44 from your first prompt, including writing a plain-language prompt, using plan mode, starting from an existing URL, and importing a Figma design.
Every app and website on Base44 starts with your first prompt. Go to [Base44](https://app.base44.com/) and describe what you want to build in your own words. There are a few ways to begin, depending on what you already have.
When you begin, you are asked to sign up so your work is saved and you can return to your project anytime.
***
## Using a prompt
Writing what you want in plain language is the simplest way to start. Share as much detail as you like, and refine the design, copy, and structure later.
Describe your idea in your own words. For example, "a simple to-do list," "a client portal where users can log in," or "a clean one-page site for my photography business with a gallery and a contact form." This first prompt gets things started, and you can add features or make changes at any time.
You can dictate instead of typing. Click the **Speech to text** icon in the prompt box to speak your prompt.
Not sure where to start? Browse the [Prompt library](/Getting-Started/Prompt-library) for ready-made prompts you can copy and adapt, then use the [Prompt guide](/Getting-Started/Prompt-guide) to shape your own.
***
## Using plan mode
Use plan mode when you want help shaping your app or website before you start building. It turns a short conversation into a structured plan you can adjust before Base44 builds anything.
In the prompt box, open the Mode dropdown (it shows **Build** by default) and choose **Plan**. The AI asks questions about what you want to build, such as who it is for, what it should do, and what you want to include. As you answer, it turns your ideas into a structured plan you can adjust as you go.
**Plan mode helps you:**
* Get a higher-quality first build by aligning it with your intent
* Reduce back-and-forth later by adding key details up front
* Think through your idea without needing to know what to specify in advance
* Capture more complete requirements, including flows, roles, and constraints
* Move faster from idea to execution while staying in a focused flow
When the plan appears, review sections like the problem, audience, core flows, and design preferences. If something is missing or needs to change, keep typing in the same conversation to add more details or update what is there.
When you are ready, click **Start building**. Your final plan is sent into the AI chat in the app editor, so you can always scroll back to it later. Base44 opens the app editor and starts building from your plan.
**Important:**
* Plan mode costs only a fraction of a credit per message. Once you click **Start building**, your first build uses about 1 credit, and further changes cost credits based on the work involved and the model you use.
* You can keep editing in the app editor after the build using prompts and manual changes.
* To use plan mode again, start a new build from the home screen and choose **Plan** in the prompt box's Mode dropdown.
**To start a new build using plan mode:**
1. Go to [Base44](https://app.base44.com/).
2. Enter your first prompt, then click the dropdown arrow next to **Build** in the prompt box and choose **Plan**.
3. Answer the questions and add more details as needed.
4. Click **Start building** on the plan when you are ready.
***
## Starting from an existing URL
Use **Start from URL** to begin from a website you already own. Base44 recreates the visible front end, including the page structure, key content sections, visual hierarchy, and familiar UI patterns such as hero sections, cards, and lists. This gives you a recognizable starting point in the app editor to refine with AI instead of rebuilding from scratch.
You can choose how Base44 uses the site:
* **Content & Design:** Recreates the site's content and layout to build a similar site.
* **Design only:** Uses the site's visual style to create a new site with the same look and feel.
If you are moving a whole existing site or project onto Base44, see [Migrating a project to Base44](/Getting-Started/migrating-an-existing-app).
**Starting from a URL helps you:**
* Recreate sites you own without redesigning from scratch
* Preserve your brand, layout, and visual hierarchy
* Start migrations with a solid page structure instead of guesswork
* Create high-fidelity prototypes that look and feel real
For example, you can recreate a personal website, upgrade a small-business site into a smarter app with entities like Orders and Customers, turn a landing page into a product with authentication and dashboards, or convert a public concept page into an internal tool. After the build finishes, refine it with prompts to adjust the structure, connect entities and APIs, and add flows and logic.
**Important:**
* This feature is available on all plans, including the Free plan.
* Starting from a URL uses credits during generation.
* You must be the rightful owner of the website you start from, or have full rights to its content, design, and images. Do not use third-party or copyrighted sites without permission.
* Starting from a URL does not copy private backend code, hidden data, or third-party integrations, so you still need to set up those parts manually.
**To start from an existing URL:**
1. Go to [Base44](https://app.base44.com/).
2. Click the **+** icon in the prompt box.
3. Click **Start from URL**.
4. Paste the URL of the website you want to use. Make sure you have the rights to use its content.
5. Select **Content & Design** or **Design only**, depending on what you want to reuse.
6. Click **Add**.
***
## Starting from a Figma design
Use **Import from Figma** to turn an existing Figma design into a working app or website. Base44 recreates the layout, structure, and visual style from your frame, so you continue from a familiar starting point instead of rebuilding from scratch.
For steps, requirements, and guidelines, see [Importing from Figma](/Getting-Started/import-from-figma).
You can also add a page from Figma later on, from inside the app editor, not just at your first prompt.
***
## Attaching files
Attach files to your first prompt so Base44 can build from your own content, data, or reference material instead of starting from a blank page. You can attach images, PDFs, documents, and spreadsheets, among other file types.
Base44 uses what you attach as context for your build:
* Images and PDFs become visual reference, so Base44 can match a design, a screenshot, or a document.
* Spreadsheets and CSV files are read for their columns and sample data, so Base44 can build around your data.
* Word documents, text, and Markdown files are read to inform your content and structure.
Click the **+** menu in the prompt box, choose **Attach files**, then upload from your computer or from Google Drive. The first time you use Google Drive, you are asked to connect your Google account.
***
## Connecting your tools
You can connect your app or website to tools you already use, like Google Workspace, Slack, and GitHub, so Base44 builds with your data and services in mind from your very first prompt. For example, connect Google Calendar so your app can read and create events, or Slack so it can post updates to your team.
Click the **+** menu in the prompt box, choose **Connectors**, select the tools you want, then send your prompt. Learn more in [Setting up shared connectors](/Integrations/setting-up-shared-connectors).
***
## FAQs
Click a question below to learn more.
Yes. Your first prompt is only the starting point. Once you are inside the app editor, you can keep building and change everything using the AI chat or manual edits. [Learn how to work with the AI chat](/Building-your-app/AI-chat-modes).
Yes, on a [Builder plan](/Account-and-billing/Billing-and-plans) or higher. Click the **Tools** icon in the prompt box to choose which AI model powers your build. [Learn more about the AI chat and its controls](/Building-your-app/AI-chat-modes).
# Building a Superagent
Source: https://docs.base44.com/Getting-Started/superagent
Build Superagents that handle tasks, connect your tools, and automate work across your workspace.
Build [Superagents](https://base44.com/superagents) to handle work for you. Tell your Superagent what you need, and it can turn everyday work into tasks, updates, reports, and automated actions.
Your Superagent can act like a personal assistant, support rep, marketer, or analyst, depending on the job you give it. It can monitor updates, capture leads, prepare reports, manage recurring automations, send updates, and respond through chat or connected channels.
* Act like a personal assistant, support rep, marketer, or analyst, depending on the task.
* Monitor systems, tools, and connected services for important updates.
* Run scheduled automations, such as daily summaries, weekly reports, and recurring reminders.
* Respond when a trigger happens, such as new app data or activity in a connected tool.
* Capture leads, track competitors, prepare reports, and organize follow-ups.
* Connect to tools like Google Workspace, Slack, GitHub, Notion, and HubSpot.
* Use files, memory, and connected tools to respond with more context.
* Browse the web to research topics, look things up, and complete tasks for you.
* Communicate through channels like WhatsApp, Telegram, iMessage, Slack, and LINE.
Create a Superagent, connect your tools, and start giving it work to do.
***
## Chat
Give your Superagent work to do. Describe the outcome you want, ask follow-up questions, refine results, and add context as you go. You can upload files, paste images, or use speech to text to help your Superagent understand the task.
As you interact, your Superagent suggests relevant prompts, connectors, automations, and workflows based on your goals. Suggestions can appear directly in the chat input, match the language you use with your Superagent, and be refreshed when you want a different starting point.
Start with a real task you handle often, such as finding new leads, tracking competitors, preparing reports, monitoring emails, or summarizing updates across tools.
You can interact with your Superagent in different ways:
* Type a message in the chat input.
* Use **Speech to text** to dictate a message.
* Use **Voice mode** to have a live conversation.
* Share your screen or camera during a voice call so your Superagent can see what you're working on.
When your Superagent sends you a file it created, such as an image or PDF, the file appears as a preview card in chat. From the card, click **Preview** to open the file, or click the **File options** icon to rename it or select **View in Files** to open it in the Files tab.
For heavy or parallel work, your Superagent can delegate tasks to background subagents so several run at once while you keep chatting. Learn more in [Subagents](/superagents/subagents).
***
## Automations
Run actions on a schedule or when a trigger happens. Use automations to handle recurring work, alerts, reminders, follow-ups, and actions based on changes in your apps or connected tools.
You can set up automations by chatting with your Superagent, choosing a suggested automation, or clicking **+ New Automation** from the Automations page. Need a starting point? Open **Automations** and browse suggestions you can send to chat.
From **Automations**, you can manage:
* **Scheduled Automations:** Run at specific times, such as daily summaries, weekly reports, or recurring reminders. Filter by Active, Paused, or Completed.
* **Triggered Automations:** Run when a trigger happens, such as when app data changes or activity happens in a connected tool.
Your Superagent can also control automation runs while they are in progress. If an automation is looping or not working as expected, your Superagent can pause or stop the run to prevent unnecessary credit usage. Scheduled automations that fail repeatedly are paused automatically, and you receive a notification so you can review and reactivate them once the issue is resolved.
***
## Plugins
Use Plugins to connect your Superagent to services and add skills it can run.
* **Connectors:** Services your Superagent can connect to, such as Google Workspace, Slack, GitHub, Notion, or HubSpot.
* **Skills:** Reusable instruction sets that give your Superagent new capabilities. Browse curated Base44 skills, explore the full catalog by category, or create and upload your own.
***
## Browsing the web
Your Superagent can browse the web to research topics, look things up, and complete tasks for you. It uses a secure cloud browser that runs in the background, so you can watch it work right from the chat. You do not need to install anything to use it.
***
## Files
Store documents, folders, and other resources your Superagent can reference, including ones you upload and ones it creates while working. You can upload files, upload folders, or create folders to organize your Superagent's workspace.
***
## Memory
Keep useful context from your conversations. Your Superagent uses short-term memory, saved facts, and daily session summaries to respond with more relevant context over time, alongside connected tools and files.
***
## Data
View and manage the data your Superagent stores. You can browse records, add and edit them inline, export a table to CSV, inspect a table's structure, and restore recently deleted records.
***
## Customize
Customize your Superagent to control how it looks, works, and connects to your tools.
* **General:** Choose the AI models your Superagent uses for chat and automations, pick its voice, set its appearance, clone it, share it as a template, move it to another workspace, or delete it.
* **Sharing & access:** Invite collaborators and create a public template link.
* **Personalization:** Update your Superagent's name, avatar, and identity.
* **Channels:** Connect messaging apps like WhatsApp, Telegram, iMessage, Slack, and LINE.
* **Security:** Manage permissions, store secrets, and set connector rules.
* **Developer:** Connect to your Superagent through the API and webhooks.
***
## Channels
Connect your Superagent to channels so you can interact with it anywhere, including Base44 chat and messaging apps like WhatsApp, Telegram, iMessage, Slack, and LINE. Once connected, it can respond to messages, run automations and workflows, and format responses for the channel you are using.
You can also install the **Browser extension** to let your Superagent work in Chrome. Learn more about [browsing with your Superagent](/superagents/browser-control).
You can also interact with your Superagent in the Base44 mobile app. Download Base44 from the [App Store](https://apps.apple.com/us/app/base44-build-with-ai/id6757432427) or [Google Play](https://play.google.com/store/apps/details?id=com.base44.android).
***
## FAQs
Click a question below to learn more about building a Superagent.
Most Superagents are built in four steps:
1. Define the goal.
2. Connect your tools.
3. Add files, memory, and context.
4. Create automations.
You can start simple and refine your Superagent over time.
Both approaches work.
You can create one central Superagent that manages everything across your workspace, or multiple specialized Superagents for specific tasks.
You can also start with focused Superagents and later bring those workflows into your main Superagent.
A Superagent works across your workspace and tools.
An app agent works inside a specific app and is limited to that environment.
Superagents can run scheduled automations and triggered automations.
Scheduled automations run at specific times, such as daily summaries, weekly reports, or recurring reminders.
Triggered automations run when a trigger happens, such as when app data changes or activity happens in a connected tool.
Yes. Superagents can connect to external tools like Slack, Gmail, Google Calendar, GitHub, and more using connectors.
Superagents use message credits when processing messages and running automations. They use integration credits for actions such as image generation, file processing, file upload, and creating download links.
No. Base44 does not store recordings of your voice, screen, or camera. Text transcripts of the conversation are saved as part of your chat history, the same as your text messages.
Yes. You can add collaborators to work with the same Superagent, or share your Superagent as a template so others can create their own copy.
When you share a Superagent as a template, you can choose whether to include skills, agent memory, files, and automations. Connectors are not included, and anyone who creates a copy must reconnect their own accounts and services.
Agent memory may include sensitive data. Review what you include before creating and sharing a template link.
Superagents are personal by default. They run at the account level, not the workspace level. Other workspace members cannot access your Superagent, conversations, memory, or connectors unless you add them as collaborators or share it using an available sharing option.
Workspace admins cannot view your Superagent conversations by default.
Base44 may access relevant Superagent data when needed to provide support, investigate issues, maintain security, or operate the service.
Yes. Enterprise admins can disable Superagents from their workspace settings.
**To disable Superagents:**
1. Go to your workspace settings.
2. Click **Basic information**.
3. Turn on the **Disable Superagent** toggle.
Yes. You can transfer your Superagent, including its full conversation history, to a different workspace.
**To move your Superagent:**
1. Open your Superagent.
2. Click **Customize**.
3. Click **General**.
4. Click **Move agent**.
5. Select the target workspace from the dropdown.
6. Click **Move agent** to confirm.
Conversation history is preserved after the move. The agent belongs to you in the new workspace. This action cannot be undone.
You must be a member of the target workspace to move an agent to it. In Enterprise workspaces, only the workspace owner can move agents between workspaces.
Yes. Deleting a Superagent permanently removes it and all associated data.
This action cannot be undone.
Create your Superagent, connect your tools, and give it work to handle.
# AI Integrations in Base44
Source: https://docs.base44.com/Integrations/AI-integrations
Connect your Base44 app to popular AI services like OpenAI, Claude, Groq, Mistral or any other AI platform that uses an API key.
Note: AI integrations are available on the Builder plan and above. If you're on the Free plan, you'll need to upgrade your app to use backend functions and payment features.
# Step-by-step setup
## Part 1: The AI provider's side
If you already have your secrets or API keys, you can skip ahead to "The Base44 side" setup
1. Open your provider’s developer portal in a new browser tab
We're using OpenAI for this example and their developer portal is at: [https://platform.openai.com](https://platform.openai.com)
2. Log in or create a new account
3. Go to the **API keys** section
1. Go to your provider’s **billing** or \*\*payment \*\*section.
To obtain and utilize an OpenAI API key, a paid account is required. While creating an OpenAI account is free, using the API necessitates funding the account with a credit balance or having a billing method on file. OpenAI operates on a pay-per-use model for its API services, where charges are incurred based on the actual usage of the models.
2. Add a valid payment method such as a credit card or PayPal.
3. (Optional) Set up a spending limit to control costs.
4. Make sure your account has active credits if your provider requires it.
1. In your provider’s API keys section, click **Create new API key**
Note: The button text may be different across providers. Sometimes it may be called "Create new secret"
2. Copy the generated key immediately because you may not be able to see it again.
## Part 2: The Base44 Side
Head to Base44 and click on **Integrations**
Make sure you're logged into Base44 to view the [Integrations catalog page](https://app.base44.com/integrations-catalog)
2. Use the search bar or scroll to find your **AI provider**
3. Select your **AI provider** and click **“Use this integration**” \
(in this example we are using OpenAI)
1. Type out your app idea inside the AI chat box
2. Paste the key when prompted
Example: For OpenAI you might see: OPENAI\_API\_KEY
Optional: You can save your key securely in **Dashboard → Secrets** so you can reuse it later.
Important: Never paste API keys into public code, visible components, or prompts.
1. Once your app has been created, in the Base44 chat, describe the task you want the AI to perform
2. Base44 will create the backend and frontend components for you.
3. You can improve the AI’s behavior with follow-up prompts.
1. Try your AI feature with test inputs or example prompts.
2. Check the AI’s output.
3. Experiment with different styles, tones, or examples until it works the way you want.
When running tests, do not paste real customer data. Use sample or dummy content.
Once everything works:
* Preview your app on different devices
* Deploy it and share with others
* Monitor your **API usage** in your provider’s dashboard
## **Recap**
What you did (no coding required)
* Selected an AI provider for your use case.
* Connected it securely with an API key.
* Let Base44 handle the backend setup.
* Used prompts to design your AI’s behavior.
* Tested and launched your AI-powered app.
You now have a working AI integration. You can repeat these steps for any provider that uses API keys, not just OpenAI.
## FAQ
You can still connect it with help from the Base44 AI. The process is a little more manual, but the AI will guide you step by step.
Say: `"Use the provider “[provider name]”. I have an api key. Help me connect it and create a simple test. Ask me for the details you need."`
Keep your API key somewhere safe until the AI asks for it. You will also need a few details from your provider’s documentation.
**Some important requirements for manual setup**\
Your provider needs to offer a standard online API that works over https (often called a “REST API”). This means:
* A web address (URL) where Base44 can send requests.
* An API key for authentication.\
Instructions from the provider on what information to send and how it should be formatted.
* Details on how the provider will send responses back, ideally in a format like JSON (a common way to send structured text).
Store it in Base44’s **Secrets** section or a password manager. Never share it in public code, screenshots, or chat messages.
Your AI integration will stop working until you add more credits or update your billing settings with the provider.
No. You can set everything up by following the steps in the guide and writing prompts in plain language.
Yes. You can connect to a different provider at any time. You will need to add the new API key in Base44 and may need to update your prompts or components so they work with the new provider’s API.
Most AI providers let you set spending limits or usage caps in your account’s billing settings. You can also monitor your usage in their dashboard. For testing, try shorter prompts or smaller requests to keep costs low. Keep in mind that each provider’s cost controls work a little differently, so it’s a good idea to check their help docs.
Make your prompt more specific. Include clear instructions, important context, and examples of what you want. If possible, tell the AI what *not* to include. You can also try switching to a different model if your provider offers one that is more focused on accuracy. If the problem continues, share the prompt and response with the Base44 AI and ask it to help troubleshoot step by step.
“If you get stuck, paste your prompt and the AI’s response into the Base44 chat and say ‘help me troubleshoot this step by step.’”
Yes. You can add multiple integrations in Base44, you would just need to make sure you specify which provider will be used for which function
# Airtable Integration
Source: https://docs.base44.com/Integrations/Airtable-integration
Connect your Base44 app to Airtable to bring your live data into dashboards, tools, and workflows.
Note: Airtable integration is available on the Builder plan and above. If you're on the Free plan, you'll need to upgrade your app to use backend functions and payment features.
# Step by step setup:
## Part 1: The Airtable side
If you already have a Airtable API token and Base ID, feel free to skip ahead to [**Part 2: The Base44**](https://docs.base44.com/Integrations/Airtable-integration#part-2%3A-the-base44-side) side.
* Go to [Airtable’s token creation page](https://airtable.com/create/tokens/new) .
* Under "Scopes," create a token scoped to the correct workspace/base with at least:
* `data.records:read`
* `schema.bases:read` *(optional but helpful for testing)*
* Name your token, set a credit limit if you use them, and copy the token somewhere safe.
1. Open your Airtable base in a browser.
2. Look at the URL and copy the string starting with "**app**" as this is your Base ID
Example: `https://airtable.com/app123XYZ/...`
***
## Part 2: The Base44 side
Once you have your API token and Base ID, you can connect it to Base44 in two different ways:
* Choose this path if you are starting a new app from scratch.
* Choose this path if you are already in the midst of building and would like to integrate Airtable into an existing app.
### Option A: Ready-made integration (create a new app)
* In the integrations catalog, select Airtable
* Then click "Use this integration"
* When prompted, paste:
* `AIRTABLE_API_KEY`
* `AIRTABLE_BASE_ID`
* Here's a sample prompt you can use:
`“Build an internal dashboard. We will connect to my Airtable base and show real records. Include a Sync Status page and start by letting me choose a table before building visuals.”`
* The app runs a test call to Airtable and lists your tables
* You select one
* It fetches real records and shows a raw data table so that the schema is clear
You’ll get a page with the following:
* A **Check Connection** button to re-run the test
* Table list
* Last check time
* Connection status
***
### **Option B: Add Airtable as an Instant integration**
Choose this path if you already have an app in progress.
* Here's the prompt that we typed out in the AI chat to build our sample app:
`“Build an internal dashboard. Let me pick a data source later.”`
* Here's a sample prompt that we pasted in our AI chat:
`Connect this app to Airtable. Ask me for AIRTABLE_API_KEY and AIRTABLE_BASE_ID and save them as Secrets. Add a backend function that can test the connection and fetch records. Create a Sync Status page with a Check Connection button.`
* Click on "**Set secrets**" in the AI chat
* Paste your **API Key** and **Base ID** when prompted
* Prompt the AI chat to show you the data
* Here's a sample prompt that we used for our app:
`Run the connection test to list my tables, let me pick one, then fetch records and show a raw table view before any visuals.`
* Open **Sync Status** and click **Check Connection**
* Choose a table and confirm you see live rows
***
## **Troubleshooting**
* **403 or connection failed** – Token scope is wrong. Make sure data.records:read is enabled. Add schema.bases:read if table listing fails.
* **Wrong Base ID** – Double-check you copied the app… string from the URL.
* **No data shown** – Make sure the base actually has records and the token has access.
* **Public preview vs builder session** – Stay logged into the builder while testing Sync Status.
***
## **Common use cases**
Here are a few ways teams often use Airtable with Base44:
* **Dashboards** – Pull in Airtable data and visualize it in real time.
* **Data management** – Give teammates a friendly UI for viewing or checking Airtable records.
* **Sync monitors** – Create a Sync Status page to quickly test connections and confirm updates.
* **Internal tools** – Build lightweight apps (like CRM views or content trackers) on top of Airtable without custom code.
# Connectors overview
Source: https://docs.base44.com/Integrations/Connectors
Connect your app to popular tools like Google Workspace, Slack, Salesforce, GitHub, Snowflake, and Databricks using managed integrations.
Connectors let your Base44 app work with the tools and data your business already uses. Connect services like Gmail, Slack, Google Workspace, Snowflake, Databricks, and more, then ask the AI chat to help you build app flows that use them.
You need a [**Builder plan**](https://base44.com/pricing) or higher to use connectors.
***
## About connectors
Connectors link your app to the tools you already use. Pick a tool, authorize it, and let Base44 handle the setup behind the scenes, no API keys, no manual config.
Need more control over a specific API? Use a [custom integration](/documentation/integrations/using-custom-integrations).
***
## Connector types
There are two types of connector, based on whose account the connection uses.
Each person using your app connects their own account. The app acts on their behalf, and their data stays private to them.
Best for per-user actions, like a CRM where each sales rep sends email from their own Gmail.
You connect a tool once at the workspace level, and the app uses that one connection for everyone.
Best for a shared account or a data platform, like Slack alerts to your team's channel, or a dashboard that queries Snowflake.
Connectors for app users
Connectors for app builders
Whose account
Each person's own account
One account, connected once
Who connects it
Every person, the first time they use it
You, at the workspace level
Data the app sees
Only that person's data, per their granted access
The single connected account's data, shared across the app
Typical use
A CRM where reps use their own Gmail
Slack team alerts, or a Snowflake dashboard
***
## Browse available connectors
Find connectors in the **Integrations** tab of your app's dashboard. Search for a specific connector or use the filter to sort the list.
You can also tell the **AI chat** what you want to connect and how you want to use it, and get relevant suggestions based on your app's structure, pages, and data.
To browse the full list with categories and example prompts, see the [connectors catalog](/Integrations/connectors-catalog).
Email reports, alerts, or summaries through **Gmail** or **Outlook**.
Create documents, spreadsheets, presentations, or files using **Google Workspace** tools.
Create and manage events or availability using **Google Calendar** or **Outlook**.
Send notifications or updates to teams through **Slack**.
Track code activity, issues, and pull requests with **GitHub**.
Query external data and build dashboards with **Snowflake** or **Databricks**.
You can also request a connector to add to Base44. Go to **Integrations** in
your app's dashboard and click **Request a connector** at the bottom.
***
## How connectors work in your app
Once you connect a tool, you can reuse it across pages, flows, and backend functions. In the **AI chat**, ask Base44 to build pages, tables, dashboards, or automations that read from or write to the connector.
When you include a connector in a flow, Base44 creates a backend function in **Dashboard** → **Code** → **Functions**. Open that function to review the generated code. You can edit it yourself or prompt the AI chat to update it. For example:
```text theme={null}
Send a Slack message to #product-updates when this function runs.
```
If you later add a flow that needs extra permissions, you may be asked to review and approve the new actions and permissions for that tool.
***
## Managing connectors
From **Integrations** in your app's dashboard, you can view and manage your app's connectors, review what each can access, and switch, disconnect, or reconnect the connected account per tool as needed.
For connectors for app builders, reconnect from **Integrations** → **My integrations**. For connectors for app users, each person reconnects their own account from inside your app.
**To manage a connector:**
1. Go to your app's dashboard.
2. Click **Integrations**.
3. Click the **My integrations** tab.
4. Find the connector.
5. Click the **More actions** icon (`···`) and choose an option:
* **View access** to see the connector's current permissions.
* **Switch account** to connect a different account.
* **Reconnect** to restore an expired connection.
* **Disconnect** to remove the connection from this app.
* **Remove** to delete the connector.
Control which external services are available across your workspace and review affected apps before disabling access.
***
## FAQs
Yes. You can connect multiple tools to the same app.
You may need to reconnect if the account was disconnected, its access was revoked, or the connected service requires you to sign in again. For the steps, see [Managing connectors](#managing-connectors) above.
# ElevenLabs Integration
Source: https://docs.base44.com/Integrations/Elevenlabs-integration
Connect your Base44 app with ElevenLabs to create lifelike audio using state-of-the-art voice models for content, voiceovers, accessibility, and more
Note: ElevenLabs integration is available on the Builder plan and above. If you're on the Free plan, you'll need to upgrade your app to use backend functions and payment features.
## Step-by-step setup
### Part 1: The ElevenLabs side
If you already have your ElevenLab secrets, you can skip ahead to "[Part 2 - The Base44 side](https://docs.base44.com/Integrations/Elevenlabs-integration#part-2%3A-the-base44-side)" setup
1. Sign in to ElevenLabs and go to: Profile → API Keys → Create key.
2. Copy and save the key somewhere secure, but also keep it handy as you’ll need to paste it into Base44 later.
3. While creating the key, turn on Restrict Key and choose which features this key can use:
**At a minimum, enable Text to Speech.** Keep all other features set to “No access” unless you specifically plan to use them (e.g., Speech to Speech, Speech to Text, Sound Effects, Dubbing, etc.).
Set a **Credit Limit** for this key and scope it to a **Project** if you use projects.
You can pick any voice available to your account whether it's stock/public voices, your own custom or cloned voices, or shared/community voices.
Tip: Add the voice to *My Voices*, then copy its Voice ID (for example: `Bella EXAVITQu4vr4xnSDxMaL`). If you want users to switch voices, store multiple Voice IDs and display them in a dropdown.
Important: Each API request uses your ElevenLabs credits. All billing happens directly with ElevenLabs, not through Base44.
### Part 2: The Base44 side
Once you have your ElevenLabs API keys, there are two ways to use this integration in Base44.
Click the option below to expand and view the instructions.
This option uses our ready-made integration, available in the[ integrations catalog](https://app.base44.com/integrations-catalog)
1. Head over to Base44 and click on Integrations.
Make sure you're logged into Base44 to view the [Integrations catalog page](https://app.base44.com/integrations-catalog)
2. Select ElevenLabs and click on "Use this integration"
3. When prompted, type out your prompt and paste your ELEVENLABS\_API\_KEY and VOICE\_ID. The integration will handle the backend wiring to ElevenLabs.
You don’t need to manually activate backend functions. Ready-Made integrations enable them automatically.
1. In your app Dashboard, click on **App Settings** and [Enable Backend Functions](/Integrations/Using-integrations#activating-backend-functions).
2. Use the AI chat to connect ElevenLabs and add your secrets.
\*\*Let's use a training app as an example: \*\*
`Build a personal trainer app for daily workouts. I choose a muscle group, you auto-generate 3-6 exercises with sets, reps, and rest. Show one exercise at a time with work/rest timers.`
\*\*App prompt to conect ElevenLabs: \*\*
`Connect this app to ElevenLabs Text-to-Speech as an Instant integration. Ask me for ELEVENLABS_API_KEY and VOICE_ID and save them as Secrets. Create a backend function that calls ElevenLabs and returns MP3 as a Base44 data URL.`
3. In the AI chat, click on "Set secrets" and paste your API key and voice ID.
## **Popular Use Cases for ElevenLabs in Base44 Apps**
* **Interactive Learning Tools** – Read lessons, quizzes, or language exercises aloud with natural voices.
* **Fitness & Wellness Coaches** – Deliver spoken workout instructions, meditation guides, or mindfulness prompts.
* **Accessibility Features** – Provide audio versions of on-screen text for visually impaired users.
* **Customer Support Bots** – Speak responses instead of only showing text, for a more human-like experience.
* **Storytelling & Audiobooks** – Narrate stories, podcasts, or news articles in engaging voices.
* **Games & Entertainment** – Add character voices, mission briefings, or dynamic commentary.
* **E-commerce Guides** – Give audio product descriptions, guided tours, or checkout instructions.
* **Event & Tour Apps** – Offer spoken directions, exhibit descriptions, or venue overviews.
* **Language Learning** – Model pronunciation and practice dialogues in different languages.
* **Custom Brand Voice** – Use a consistent cloned or custom voice for your app’s personality.
## FAQ
Yes. You must have an active ElevenLabs account with credits to process audio. All billing goes through ElevenLabs, not Base44.
Yes, each generation of audio via the API uses your ElevenLabs credits. The number of credits depends on the model and text length
Yes, but only on a **paid plan**. Free-plan accounts are **limited to non-commercial use**. Paid plans (starting with Starter) enable commercial usage
No. You can only create professional voice clones of **your own voice**, even with their permission. A verification process is required to confirm the voice belongs to you
Yes. The ElevenLabs API lets you modify elements like style, stability, similarity, and speed to make the audio sound more natural.
Paste them into the **Secrets** fields when configuring the integration. Base44 encrypts and securely stores secrets.
# Google Places Integration
Source: https://docs.base44.com/Integrations/Google-places-integration
Connect your app to Google Places to easily search, suggest, and display real-world places.
Note: Google Places integration is available on the Builder plan and above. If you're on the Free plan, you'll need to upgrade your app to use backend functions and payment features.
***
# Step by step setup:
## Part 1: The Google side
If you already have a Google Places API key, feel free to skip ahead to [****Part 2: The Base44 side.****](https://docs.base44.com/Integrations/Google-places-integration#part-2%3A-the-base44-side)
* Head to the Google Cloud Console and either pick an existing project or create a new one.
* In the left sidebar, click **APIs and Services** → **Library**.
* Use the search bar to find **Places API (New)** and open it.
* Click **Enable** to activate it for your project.
* From the API’s credentials page, click **Create Key** and copy it.
* Save the key somewhere secure. You’ll need to paste it into Base44.
If you see an error like `REQUEST_DENIED` later on, it usually means billing isn’t enabled or your API key restrictions are too tight. Turning on billing and loosening restrictions during testing often fixes this. If you plan to display a map in the browser, you should also enable the **Maps JavaScript API** and use a browser key restricted to your site.
***
## Part 2: The Base44 side
Once you have your Google Places API key, you can connect it to Base44 in two different ways:
* Choose this path if you are starting a new app from scratch.
* Choose this path if you are already in the midst of building and would like to integrate Google Places into an existing app.
### Option A: Ready-made integration (create a new app)
* In Base44 click on Integrations
* Find **Google Places**
* Select **Use this Integration**
* When prompted, paste your Places API key into the field labeled `GOOGLE_PLACES_API_KEY`.
* In the AI chat, describe your app’s purpose.
* For example:\
` Create an app to plan my next trip. I will tell you the city, you will suggest five places, and you will show them on a Google Places map.`
* Base44’s AI will build the basic structure for you.
* Enter a city, search for up to five places, and save the trip.
* Check that a map appears with markers for all selected places and that it automatically zooms to fit them.
***
### Option B: Instant integration (connecting to an existing app)
Use this approach when your app is partially built and you want to integrate Places without starting over.
* Here's the prompt that we typed out in the AI chat to build our sample app: \
` “Create an app to plan my next trip. I will tell you the city and you will choose five places for me to visit.”`
* Ask the chat to connect your app to Google Places. You can edit this sample prompt:
`Connect this app to Google Places using the Places API (New). Ask me for GOOGLE_PLACES_API_KEY and save it as a Secret. Create backend functions to:`
`- search by text and return id, displayName, formattedAddress, location, types`
`- get details by place_id with the same fields`
`All calls must run from the backend only.`
* When prompted by the AI Chat, click on `Update GOOGLE_PLACES_API_KEY`
* Then paste your API key into the pop up window
* Add the Trip Planner UI and map.
* You can use a prompt similar to this one to build your interface:
`Add a Trip Planner page with:`
`- a City field`
`- 5 auto-suggest place inputs powered by the backend`
`When a place is selected, save place_id, name, formatted_address, latitude, longitude, types.`
`Add a Google Map that places a marker for each saved place and automatically fits bounds to show them all. Include a Reset button.`
* Enter a city and let the app suggest five places, then save.
* Verify that markers appear and the map fits all points.
* Refresh the app to confirm the saved places render correctly.
***
## **Troubleshooting**
* **403 or REQUEST\_DENIED errors** – Usually the Places API isn’t enabled, the API key is wrong, or key restrictions are too strict. Double‑check that **Places API (New)** is enabled, your billing account is set up, and relax restrictions during testing.
* **Empty suggestions** – Try a different city or search term. Make sure the search is happening on the backend, not in the browser.
* **Map doesn’t fit all points** – Ensure your app calls fitBounds after all markers have been added to the map.
* **Wrong fields saved** – Save exactly the fields listed above (place\_id, name, formatted\_address, latitude, longitude, types) so the map and filters work reliably.
## Common use Cases
Here are some ideas for how you can leverage the Google Places API inside Base44 apps, based on examples from Google’s own documentation and other Places API providers:
* **Trip planners** – Suggest restaurants, attractions, or hotels when someone picks a city.
* **Local business finders** – Let users search for nearby cafés, shops, or services.
* **Route helpers** – Show gas stations, rest stops, or food spots along a journey.
* **Real estate tools** – Highlight schools, parks, or shops near a property.
* **Emergency services locators** – Quickly find hospitals, police stations, or pharmacies.
* **City guides** – Build apps with curated landmarks, events, or lifestyle spots.
These examples illustrate just a few of the many ways you can use the Places API to add location‑aware features, search tools and personalized recommendations to your Base44 apps.
# Resend Integration
Source: https://docs.base44.com/Integrations/Resend-integration
Connect your Base44 app with Resend to send emails like confirmations, updates, and newsletters from your own domain with minimal setup.
Note: Resend integration is available on the Builder plan and above. If you're on the Free plan, you'll need to upgrade your app to use backend functions.
## **Step-by-step setup**
### **Part 1: The Resend side**
If you already have your Resend API keys, you can skip ahead to "[Part 2 - The Base44 side](https://docs.base44.com/Integrations/Resend-integration#part-2%3A-the-base44-side)" setup
If you don’t already have one:
1. Go to [Resend domains](https://resend.com/domains)
2. Sign up and add your domain
After adding your domain
1. Follow the DNS instructions provided by Resend to complete domain verification. You’ll be given DNS records (TXT, MX) to add via your own DNS provider.
2. These will help prevent your emails from being flagged as spam.
Tip: You can use a subdomain like [updates.yourdomain.com](http://updates.yourdomain.com) or [mail.yourdomain.com](http://mail.yourdomain.com) instead of your main domain. This helps isolate your email sending reputation and can reduce the chance of deliverability issues affecting your primary domain.
1. Go to the [API Keys page](https://resend.com/api-keys)
2. Click on “**Generate API key**”
3. Copy and save the key somewhere secure, but also keep it handy. You’ll need to paste it into Base44 in the next step.
### Part 2: **The Base44 side**
Once you have your Resend API keys, there are two ways to use this integration in Base44. Click the option below to expand and view the instructions.
1. Head over to the [integrations catalog page](https://app.base44.com/integrations-catalog)
Make sure you're logged into Base44 to view this page
2. Find Resend and click “**Use this integration**”
3. When prompted, paste your API key from Step 3. Your app is now connected to Resend.
4. Type out your idea / prompt into the AI chat box to build your app
> *“Build me an app to create and send welcome emails when someone signs up.”*
Base44s AI will walk you through setting it up.
If you're working in an existing app, you can use the chat to ask:
> *“Add the Resend integration to my app. Prompt me for the API key and send a welcome email when someone subscribes."*
The AI chat will then walk you through the steps to set up this integration and will prompt you for your API keys.
## **Common use cases for the Base44 x Resend integration**
Here are some examples of how Resend can be used in your Base44 app:
* Welcome emails when someone signs up
* Password reset links or account recovery emails
* Order confirmations or status updates
* Internal team alerts when forms are submitted
* Reminder emails for actions left incomplete
* Newsletter campaigns for subscribers or users
* Survey or feedback requests after key actions
* Trigger-based updates to users or admins
## **FAQ**
Resend is a modern email API platform. It helps developers send transactional and marketing emails easily, with a focus on deliverability and ease of use.
No. The free tier lets you send emails from a verified domain and supports up to 3,000 contacts.
Use Resend's Audiences to:
* Add contacts via CSV, manually, or via the API.
* Automatically manage unsubscribes with Resend's built-in link.
Unsubscribes are processed automatically:
* You must include an unsubscribe link in all broadcast emails.
* Resend will remove users who unsubscribe from.
* This ensures compliance with laws like CAN-SPAM and GDPR.
Yes, manually:
1. Send a confirmation email after form submission.
2. Include a link for users to click.
3. Only add users to your audience after they confirm.
A few common reasons:
* Your domain isn't verified
* Missing plain-text version
* Using a generic sender (e.g., [onboarding@resend.dev](mailto:onboarding@resend.dev))
* No unsubscribe link in marketing emails
Use Resend’s [Deliverability Insights](https://resend.com/docs/dashboard/emails/deliverability-insights) to get suggestions based on your email setup.
Yes, you can use tools like [React Email](https://react.email/), which is an open-source library for building styled emails with React components.
Yes, Resend supports both types of emails:
* Transactional emails - like account confirmations, password resets, and real-time notifications
Marketing emails - such as newsletters and promotional campaigns, sent using the [Broadcast tool](https://resend.com/docs/dashboard/broadcasts/introduction) and [Audiences](https://resend.com/docs/dashboard/audiences/introduction)
If you want to send emails to people who are not signed up to your app, you can use an external email service such as Resend. Resend lets you email any recipient, whether they have registered with your app or not.
The built-in email function can only send emails to users who have signed up with your app.
# Slack Integration
Source: https://docs.base44.com/Integrations/Slack-integration
Connect your Base44 app to Slack so it can send real-time messages whenever something important happens like a new task being created or a status changing. This is a great way to keep your team updated directly inside Slack without switching between tools.
Note: Slack integration is available on the Builder plan and above.
# Step by step setup:
## Part 1: The Slack side
If you already have your Slack webhook, you can skip ahead to [Part 2 - The Base44 side.](https://docs.base44.com/Integrations/Slack-integration#part-2%3A-the-base44-side)
* Head over to: [https://api.slack.com/apps](https://api.slack.com/apps)
* Click **Create an App**
* Click **From Scratch**
* For example: `Base44 Notifications`
* Pick your workspace
* In the sidebar, open **Incoming Webhooks**
* Toggle **Activate Incoming Webhooks** to On
* Scroll down on this same page
* Click on **Add New Webhook to Workspace**
* Select the channel where messages should appear
* Click **Allow**
* Your webhook URL should look similar to this:
`https://hooks.slack.com/services/T000/B000/XXXXXXXX`
* Keep this handy, you'll use this in Base44 when it prompts you for the **secret**.
***
## Part 2: The Base44 side
Once you have your Slack webhook URL, you can connect it to Base44 in two different ways:
* Choose this path if you are starting a new app from scratch.
* Choose this path if you are already in the midst of building and would like to integrate Slack into an existing app.
***
### Option A: Ready-made integration (for new apps)
* In Base44 click on Integrations
* Select **Slack**
* Select **Use this Integration**
* When prompted, paste your `SLACK_WEBHOOK_URL`
* Type out your first prompt to scaffold the app
* Sample prompt:
`Build me a to-do list app "Todo" that will send a message to my Slack channel every time a task is created or the status changes to Done, In Progress, or Deleted.`
* Creating or updating your tasks should now post a message into your Slack channel
* If nothing appears, double-check:
* The webhook belongs to the correct channel
* The secret is saved correctly
* Posts are happening from the backend only (not the browser)
***
### Option B: Instant integration (connecting Slack to an existing app)
* Here's the prompt that we typed out in the AI chat to build our sample app: \
`Build me a to-do list app called Todo`
* Sample prompt for the AI Chat:
`Connect this app to Slack using an Incoming Webhook. Ask me for SLACK_WEBHOOK_URL and save it as a Secret. Post to Slack from the backend only.`
* When prompted by the AI Chat, click on `Update SLACK_WEBHOOK_URL secret`
* Then paste your webhook URL into the pop up window
* Tell the AI chat how you want your app to use Slack
* Sample prompt:
`Hook the backend Slack post into the todo lifecycle:`
`- On create: post "New task: {title}"`
`- On status change: post "Task status updated: {title} -> {status}"`
`- On delete: post "Task deleted: {title}"`
`Use the channel from SLACK_WEBHOOK_URL. If a call fails, show a small toast and continue.`
* Create a task.
* Change its status to *In Progress*, then *Done*.
* You should see the corresponding messages land in your Slack channel.
***
## Troubleshooting
* **No message in Slack** → The webhook might point to a different channel. Create a new one for the right channel.
* **Frontend errors (401 / CORS)** → Don’t call Slack directly from the browser. Always post from the backend.
* **Webhook rotated or revoked** → Paste the new webhook into Base44 Secrets.
* **Workspace blocks custom apps** → Ask a workspace admin to approve your Slack app.
***
## **Common use cases for the Base44 × Slack integration**
This integration is great for keeping your team in the loop without leaving Slack. Some popular patterns include:
* **Task tracking:** Post a message every time a new task is created, updated, or completed in your app.
* **Team notifications:** Send alerts to a shared channel when key events happen—like a status change to *Done*, *In Progress*, or *Blocked*.
* **Error reporting:** Have your backend send a Slack message when something fails (for example, a payment or data sync) so you can react quickly.
* **Daily summaries:** Combine with Zapier or another integration to push a morning digest into Slack, showing todos created or completed yesterday.
# Using Integrations
Source: https://docs.base44.com/Integrations/Using-integrations
Connect your Base44 apps, workspaces, and account to external tools and services
## About integrations
[Integrations](https://base44.com/integrations) connect Base44 to the rest of your stack so you can automate workflows, pull in data, and call external services without wiring every API call by hand.
You can integrate at 3 levels:
* **App level:** Integrations inside a single app:
* **Built-in integrations** such as Invoke LLM and SendEmail.
* **Connectors** for OAuth-based connections to tools like Notion, Slack, or Google Workspace.
* **External API calls with backend functions** that use per-app Secrets and functions.
* **An app MCP server** that lets AI assistants like Claude, ChatGPT, and Cursor securely connect to your published app and use its data and actions.
* **Workspace level:** Shared APIs managed once for the whole workspace:
* **Custom OpenAPI integrations** based on OpenAPI specs that any app in the workspace can call securely.
* **Account level:** Connections that live on your Base44 account:
* **MCP connections** that you configure once so the Base44 AI chat can use external tools while you build, without changing your app's deployed code.
***
## App level integrations
App-level integrations live inside a single app. They include built-in integrations, connectors, and backend-powered external APIs that you wire to that app only.
### Built-in integrations
Some integrations come preinstalled in Base44 and are available to use immediately. They do not require a paid plan, extra setup, or separate API keys. With these core integrations, you can add AI, messaging, file handling, and advanced logic to any app with no additional configuration.
**Base44 built-in integrations include:**
* **Invoke LLM:** Generate AI responses from the built-in language model using detailed prompts. Supports JSON schema outputs, file attachments for added context, image analysis, and web search for up-to-date information.
* **SendEmail:** Send emails to people in your Base44 app with customizable sender names and rich HTML content.
SendEmail does not support sending to external mailing lists or adding file attachments.
* **UploadFile:** Let people upload files to your app. Use the returned file URL in other integrations or workflows.
* **GenerateImage:** Create images from detailed text prompts. Returns a URL to the generated image.
* **ExtractDataFromUploadedFile:** Pull structured data from uploaded files (CSV, PNG, JPG, JPEG, PDF) using JSON schemas. Useful for importing data in bulk.
Learn more about [built-in integrations](/Integrations/built-in-integrations).
### Connectors
Connectors are OAuth-enabled integrations that let a specific app connect to supported tools. You ask the AI chat to connect a service, sign in, and approve the requested permissions. Your app can then read or write data in that tool based on what you allow.
You need a [**Builder plan**](https://base44.com/pricing) or higher to use connectors in your app.
**Examples of what you can build with connectors:**
* Sync a Notion database to power a knowledge view in your app.
* Post updates to a Slack channel.
* Sync Salesforce or HubSpot records into an internal dashboard.
* Save files from your app to Google Drive.
* Block off time in Google Calendar when a new booking is made.
* Publish a LinkedIn post when a new blog post is published.
* Show TikTok profile stats and follower counts in a dashboard.
[Learn more about connectors](/Integrations/Connectors).
### External API calls with backend functions
External integrations using backend functions let a specific app talk directly to third-party services like Stripe, Twilio, or Google APIs with per-app credentials. These calls are wired through your own backend functions and Secrets.
**Use backend functions when:**
* You want a one-off integration for a single app.
* You need custom logic that is tightly coupled to that app.
* The service is not yet set up as a custom OpenAPI integration in your workspace.
**Examples of external integrations with backend functions:**
* Sending welcome emails to new people using your app via your email provider.
* Syncing your existing CRM with your app database.
* Alerting your team in Slack when someone submits a form.
* Generating content with AI tools using your own provider keys.
* Calling vendor-specific APIs that do not have a connector or custom OpenAPI integration yet.
**Important:** You need a [**Builder plan**](https://base44.com/pricing) or higher to use backend functions.
When you request an integration in the AI chat, Base44 guides you step by step and asks for credentials or authorization when needed. It then connects the backend and frontend logic automatically so you can get up and running fast.
You store credentials as **Secrets** in the app dashboard and use them in TypeScript functions under **Dashboard → Code → Functions**.
Each backend function has a code file you can edit, view, and test. You can also check logs for each function from **Dashboard → Code → Functions**.
### Connect AI assistants to your app
Your published app can expose its own MCP server so AI assistants can use its data and actions, with access controlled by you. This is different from account-level MCP connections, which the Base44 AI chat uses while you build.
Learn more about [connecting AI assistants to your app](/Integrations/app-mcp).
***
## Workspace level integrations
Workspace-level integrations live in a workspace and can be reused across many apps without repeating setup or credentials.
### Custom OpenAPI integrations
Custom OpenAPI integrations let you register shared external APIs at the workspace level from an OpenAPI specification. You import a spec once, select the operations you want to expose, and any app in that workspace can call those operations through the SDK.
The AI builder and your frontend code can call custom OpenAPI integrations directly through `base44.integrations.custom` without exposing credentials. Calls are proxied through the Base44 backend, so secrets never reach the browser.
This is ideal for internal APIs and partner APIs that your team uses across many apps.
**Important:**
* Only **workspace owners and admins on a Builder plan or higher** can create or edit custom OpenAPI integrations.
* Anyone in the workspace can use an existing custom OpenAPI integration in their apps, even on a free plan.
Learn how to configure these APIs in detail in [**Managing custom API integrations**](/documentation/integrations/using-custom-integrations).
***
## Account level connections
Account-level connections are configured once for your Base44 account and are available wherever you use the Base44 AI chat.
### MCP connections
MCP connections let you connect custom MCP servers to your Base44 account so the AI chat can use external tools and data as context while you build. This gives you a context-aware builder chat without changing your app's deployed runtime.
**Important:**
* MCP connections are available on the **Builder plan or higher.**
* MCP servers are configured once per account under **Account Settings → MCP Connections**.
* The AI chat only calls an MCP server when your prompt requires it (for example, when you mention that server or ask for data it provides). It does not contact every MCP server for every message.
**Examples of what you can do with MCP connections:**
* Ask the AI chat to search an internal docs MCP and summarize the most relevant pages for a feature.
* Connect a GitHub MCP server and ask for a summary of open issues in a specific repo.
* Connect an analytics MCP, such as Amplitude or a custom metrics service, and ask the chat to pull recent product metrics into the conversation while you plan changes.
Learn how to add and manage MCP servers in [**Setting up a custom MCP**](/documentation/account-and-billing/setting-up-a-custom-mcp).
***
## Getting your API keys
Some integrations require an API key, which acts like a private password between Base44 and the external service. Your API key proves ownership and keeps your connection secure. Base44 stores your key safely so your app can use it without exposing it.
Never share your API key publicly. Treat it like a password.
**To get your API key:**
1. Log into the external service (for example, OpenAI, Resend, Notion).
2. Find the **Developer**, **API**, or **Integrations** section.
3. Click **Create API Key** or **Generate Token** and copy it.
4. Paste your API key in Base44:
* **Using the AI chat:** Enter your API key in the AI chat when prompted.
* **Setting up manually:** Save your API key in **Secrets**.\
a. Click **Dashboard** in your app's editor.\
b. Click **Secrets**.\
c. Click **Add Secret**.
Custom OpenAPI integrations also use secrets, but these are configured once by a workspace admin when creating or editing the integration and are stored as encrypted workspace secrets, not per-app Secrets.
***
## FAQs
Click a question below to learn more about using integrations.
Custom OpenAPI integrations are configured once in a workspace from an OpenAPI spec and are available to every app in that workspace through `base44.integrations.custom.call()`. Credentials are stored as encrypted workspace secrets and never exposed to app code, and you do not need backend functions to use them.
Per-app external APIs use backend functions and Secrets in a specific app. They are ideal for app-specific logic or when you do not want to share an API across all apps in a workspace.
Before publishing your app, test your integration so you can catch issues early:
1. Use sandbox or test mode (for example, Stripe test keys), if the provider offers it.
2. Try real flows and edge cases, not just a single happy path.
3. Check that inputs and outputs match your expectations in your UI and in the provider's dashboard.
4. Monitor integration credit usage in both Base44 and the external service.
5. Preview your app to catch slow loading, failed API calls, or missing data before going live.
If you run into issues, check the following:
* Your workspace is on a Builder plan or higher (for per-app external APIs that use backend functions).
* Your API key is correct and saved in Secrets or in the custom OpenAPI integration, if relevant.
* You have enough active credits in the external service.
* You are using live credentials, not test ones, when testing production flows.
* Your API request includes the correct endpoint, payload, and parameters.
* You have not hit the service's rate limits.
Backend functions and per-app external APIs require a Builder plan or higher on the workspace where the app was created. If the workspace is on a Free or Starter plan, backend functions and integrations that depend on them are unavailable.
Workspace owners and admins can create backend functions in apps they own. Collaborators with an Editor role can also edit and create backend functions in an app as long as the workspace has a Builder plan or higher.
If you see a 403 error when using backend functions, it may mean backend functions are not available for your app or workspace, or the request is missing permissions.
Common causes and fixes:
* **Plan requirement:** Backend functions are only available on a Builder plan or higher. If the workspace is on a Free or Starter plan, backend calls and per-app integrations that rely on them can fail with 403.
* **Permissions in your function:** Your backend function may be rejecting the request because the person is not signed in or does not have the right role. Check any role or access checks you added in the function code.
* **External service permissions:** A 403 can also come from the external API you are calling. Make sure the API key has the right scopes and that the request uses the correct endpoint and method.
* **Still having trouble:** See the [Troubleshooting Issues](/Community-and-support/Troubleshooting) article or contact Base44 support.
There are 2 types of API keys you may need to regenerate or update:
* **Third-party service keys:** Regenerate your key in that service's developer portal, for example OpenAI, Resend, Notion, then update it in **Dashboard → Secrets** or in your custom OpenAPI integration settings.
* **Your Base44 account API key:**
1. Click your workspace name at the bottom left of your account.
2. Click **Settings**.
3. Click **Preferences**.
4. Click **Regenerate** next to **API Key**.
Once regenerated, your Base44 API key updates across all of your Base44 apps automatically. If you have added your Base44 key in another service, update it there as well.
* Built-in integrations remain available.
* Connectors, custom OpenAPI integrations, MCP connections, and per-app external APIs that rely on backend functions may stop working until you upgrade to a [**Builder plan**](https://base44.com/pricing) or higher.
Yes. You can mix built-in integrations, connectors, custom OpenAPI integrations, and per-app external APIs in the same app, as long as your plan and settings support them.
For security reasons, external services like Stripe, OpenAI, or Notion do not let third parties, including Base44, access your credentials automatically. Instead, you need to:
1. Log in to the service.
2. Go to the API or developer section.
3. Generate your key.
4. Paste it into Base44 as a Secret or workspace header.
Once added, your app or custom OpenAPI integration can use that key behind the scenes safely and without code.
**Why this matters:** API keys act like passwords for services. Keeping them private and under your control keeps your data safe and ensures only you authorize access.
No. MCP connections are only for the Base44 AI chat while you build. They are configured at the account level under **Settings → MCP Connections** and are used only when your prompt requires that MCP server. Your deployed app does not call MCP servers through this settings page.
Still need help? Join our [**Discord**](https://discord.com/invite/ThpYPZpVts) and get real-time support from the Base44 team and community.
# Zapier
Source: https://docs.base44.com/Integrations/Zapier-integration
Automate your Base44 app by connecting it to Zapier, so actions in your app can trigger tasks in thousands of other apps like sending calendar invites, updating spreadsheets, or posting messages.
**Note:** Zapier integrations require the **Builder** plan or higher. If you’re on the Free tier, you’ll need to upgrade before proceeding. You will also need a premium Zapier account to use webhooks.
# **Step‑by‑step setup**
This integration can be added in two ways:
* Choose this path if you are starting a new app from scratch.
* Choose this path if you are already in the midst of building and would like to integrate Zapier into an existing app.
## Part 1: Ready-made integration (for new apps)
* Sign in to Zapier and click **Create Zap**.
* Choose **Webhooks by Zapier → Catch Hook** as the trigger.
* Leave the **Pick off a Child Key** field blank to capture the full payload.
* Continue and copy the webhook URL.
* In a new browser tab, go to Base44 and click **Integrations**.
* Find **Zapier** and click **Use this integration**.
* When prompted, paste the webhook URL into the **ZAPIER\_WEBHOOK\_URL** field.
* Describe your app in natural language. For example: \
`I am a therapist. Build an app to manage my schedule and let my clients book meeting.`
* After the app is created, open the app preview and book a test meeting:
* Choose a date and time a few minutes in the future.
* Use your real email.
* Submit once and wait 2 to 5 seconds.
This sends a sample payload to your Zap so Zapier can load real fields during setup.
#### **Data to send from Base44 to Zapier**
Make sure the payload is detailed so Zap can create the right calendar event. Include and save these in your Meetings collection:
* **start\_iso**: an ISO 8601 datetime that combines the chosen date and time.
Example: new Date(\$dateT\$time:00).toISOString()
* **end\_iso** or **duration\_minutes**: either send an explicit end time as ISO, or send duration\_minutes so Zapier can compute +30m in the action
* **time\_zone**: your app or user time zone, preferably an IANA name like Asia/Jerusalem; if you cannot provide a name, include the numeric offset
* **meeting\_id**: a stable id to avoid duplicates, for example \$client\_email|\$start\_iso
* **client\_name**, **client\_email,** **notes**
Saving these fields ensures you can audit bookings and Zapier maps the event correctly every time.
* Back in Zapier, go to the Test tab of your trigger.
* Click **Find new records**, select the sample request your app sent, and continue.
* If nothing appears, submit another test meeting and click **Find new records** again.
* Add an action: **Google Calendar → Create Detailed Event**.
* Map the fields from your sample to the event fields:
* **Summary:** `Meeting with client_name`
* **Description:** `notes`
* **Start Date & Time:** `start_iso`
* **End Date & Time:** `start_iso + 30m` (or compute using duration\_minutes)
* **Guests:** `client_email`
* **Time Zone:** choose your calendar’s zone
* Click **Test** to ensure the event appears and that an invite is sent.
Click **Publish** to turn the Zap on. From now on, each new meeting in your app will automatically create a calendar event.
***
## Part 2: Instant integration (add Zapier to an existing app)
Use this method if your app already exists and you want to connect Zapier mid‑build.
* Here's the prompt that we typed out in the AI chat to build our sample app: :
`I am a therapist. Build an app to manage my schedule and let my clients book meeting.`
* In the chat window of your app, say something like:
`I want to connect my app to Zapier. Please make an integration that sends booking data to Zapier from the backend only. Never call Zapier from the browser.`
* Keep the chat open while you complete the next step.
* In Zapier, **create a new Zap** with **Webhooks by Zapier → Catch Hook** and copy the webhook URL (just like in Part 1).
* Paste this URL into the Base44 chat when prompted. The integration will save it securely and wire up a backend route to post booking data to Zapier.
* After the app is created, open the app preview and book a test meeting:
* Choose a date and time a few minutes in the future.
* Use your real email.
* Submit once and wait 2 to 5 seconds.
This sends a sample payload to your Zap so Zapier can load real fields during setup.
#### **Data to send from Base44 to Zapier**
Make sure the payload is detailed so Zap can create the right calendar event. Include and save these in your Meetings collection:
* **start\_iso**: an ISO 8601 datetime that combines the chosen date and time.
Example: new Date(\$dateT\$time:00).toISOString()
* **end\_iso** or **duration\_minutes**: either send an explicit end time as ISO, or send duration\_minutes so Zapier can compute +30m in the action
* **time\_zone**: your app or user time zone, preferably an IANA name like Asia/Jerusalem; if you cannot provide a name, include the numeric offset
* **meeting\_id**: a stable id to avoid duplicates, for example \$client\_email|\$start\_iso
* **client\_name**, **client\_email,** **notes**
Saving these fields ensures you can audit bookings and Zapier maps the event correctly every time.
* In your Zap trigger, go to the **Test** tab and click **Find new records**.
* Select the latest request and continue. If nothing appears, submit another test, then click **Find new records** again.
* Add an action: **Google Calendar → Create Detailed Event**.
* Map the fields from your sample to the event fields:
* **Summary:** `Meeting with client_name`
* **Description:** `notes`
* **Start Date & Time:** `start_iso`
* **End Date & Time:** `start_iso + 30m` (or compute using duration\_minutes)
* **Guests:** `client_email`
* **Time Zone:** choose your calendar’s zone
* Click **Test** to ensure the event appears and that an invite is sent.
* Turn on the Zap. New bookings will now trigger calendar events automatically.
***
# **Troubleshooting**
* **No sample in Zapier:** Make sure you’ve booked one test meeting before testing.
* **401 or CORS errors:** Only post to Zapier from the backend; never call Zapier from the browser.
* **Wrong times:** Ensure you combine the date and time into a proper ISO datetime (start\_iso) and set the correct time zone when creating the calendar event.
* **Zap not running:** Confirm that you clicked **Publish** to turn the Zap on.
***
## **Quick checklist**
Use this list to make sure you haven’t missed anything:
* Catch Hook created with **Pick off a Child Key** left blank
* Webhook URL saved as **ZAPIER\_WEBHOOK\_URL** in Base44
* Builder tier or higher
* One sample meeting booked before testing
* Google Calendar action mapped and tested
* Zap published and turned on
***
# Connect AI assistants to your app
Source: https://docs.base44.com/Integrations/app-mcp
Use App MCP to let AI assistants like Claude, ChatGPT, and Cursor work with your published app's data, agents, and custom tools.
App MCP lets external AI assistants like Claude, ChatGPT, and Cursor connect to your published app through its own Model Context Protocol (MCP) server. Connect an AI assistant to view or manage app data, message agents, or run custom tools, based on the access you allow.
***
## What you can do with App MCP
App MCP lets you and other people work with your published app directly from an AI assistant such as Claude, ChatGPT, or Cursor.
What an assistant can do depends on your server's access mode:
* **Public · No sign-in:** Anyone can connect when your app is open to everyone without sign-in. Assistants can view records from the entities you make available, but cannot change records, message agents, or run custom tools.
* **Sign in required · OAuth:** People with an account in your app can connect by signing in. Assistants work as the signed-in user and can view or change records, message agents, and run custom tools based on that person's app permissions. Base44 checks those permissions on every request.
For example, with OAuth access, you could ask your AI assistant to find leads that need follow-up and add a new contact without opening your CRM app. Other people with the required app permissions could work with the CRM from their own assistants.
***
## How App MCP works
Set up MCP access for AI assistants from your app dashboard. Once you publish your app, connected assistants can work with the entities, agents, and custom tools you make available.
App MCP controls access at three levels:
* **Access mode:** Determines who can connect and whether they need to sign in. The **Access** badge on the **Overview** card shows the current mode. To change it, ask the AI chat.
* **Tool access:** Defines what AI assistants can do in your app, including which entities, agents, and custom tools they can use. Edit these settings on the **MCP** page, or ask Base in the AI chat to change them.
* **App permissions:** Determine what each signed-in user can view or change through an assistant.
App MCP connects external AI assistants to one published app. For other types of MCP connections:
* [Base44 MCP](/developers/backend/overview/mcp-server) lets you build and manage Base44 apps from an external AI assistant.
* [Custom MCP connections](/documentation/account-and-billing/setting-up-a-custom-mcp) let you connect the Base44 AI chat to external MCP servers while you build your app.
***
## Setting up MCP access
Set up MCP access for each app to choose who can connect and whether they need to sign in.
If MCP is turned off, reach out to your workspace owner or admin. Learn more about [managing MCP access for your workspace](#managing-mcp-access-for-your-workspace).
**To set up App MCP access:**
1. Go to your app's dashboard.
2. Click **MCP**.
3. Click **Set up access**. If you see **Enable custom authentication** instead, click it and set up your app's [custom login pages](/Setting-up-your-app/Managing-login-and-registration#custom-login-for-existing-apps). Then return to the **MCP** page and click **Set up access**.
4. Choose **Public** or **Sign in required · OAuth** when prompted.
5. Click **Publish** to publish your app and activate the server.
If you change the access mode or tool access, publish your app again. Changes to tool access require each connected user to reconnect their assistant and approve the updated permissions.
***
## Managing tool access
Choose which entities, agents, and custom tools connected assistants can use.
**To manage tool access:**
1. Go to your app's dashboard.
2. Click **MCP**.
3. In the **Tool access** section, click **Edit**.
4. Choose what assistants can access:
* **Entities:** Turn an entity on or off. For enabled entities, choose **Full access** to allow Read, Create, Update, and Delete actions, or choose **Custom access** to select specific permissions.
* **Agents:** Set each agent to **Enabled** or **Disabled**.
* **Custom tools:** Turn on each custom tool you want assistants to use.
5. Click **Save changes**.
6. Click **Publish** to activate your changes.
***
## Connecting an AI assistant
Connect your AI client to your app's MCP server using the connection URL.
**To connect an AI assistant:**
1. Go to your app's dashboard.
2. Click **MCP**.
3. Click **Copy URL** next to **Connection URL**.
4. Connect your AI client:
1) Add the connector in one click. Click **Add connector**, and Claude opens with the connector's details pre-filled.
2) Review the pre-filled details. If the connection URL is missing, paste it manually.
3) Click **Add** and start using it in chat.
1. Open **Settings** and choose **Plugins** in the ChatGPT desktop app. On the web, custom MCP servers go through Developer mode instead.
2. Open the **MCPs** tab and click **Add server**.
3. Name the server, set **Type** to **Streamable HTTP**, and paste the connection URL.
4. Click **Save**.
5. Click **Restart**, then enable the server. The app restarts to load it, and the server's tools become available in chat.
1. Open **Cursor Settings**, then **Tools & Integrations**.
2. Click **New MCP Server**. Cursor opens your `mcp.json` configuration.
3. Add a server entry with the connection URL. Set the entry's `url` field to the connection URL and save.
4. Toggle the server on.
1. Copy the connection URL.
2. Add it to your client as a streamable HTTP MCP server. Most clients ask for a name and a URL, with no extra configuration.
3. Reload the client and start using the tools.
If your server uses **Sign in required · OAuth**, the client opens your app's consent page. Sign in with your app account and approve access.
***
## Adding in-app connection guidance
After setting up App MCP, you can add a page to your app that shows people how to connect their own AI assistants. They use the instructions to configure their external AI client.
**To add in-app connection guidance:**
1. Go to your app's dashboard.
2. Click **MCP**.
3. On the **How to connect AI assistant** card, click the **Send to chat** icon next to **Ask Base to add in-app guidance to help your users connect AI assistants**.
4. Wait for the AI chat to finish, then click **Publish**.
Base44 adds a `/connect` page with instructions for Claude, ChatGPT, Cursor, and custom AI clients.
***
## Managing MCP access for your workspace
The workspace MCP policy controls whether apps in the workspace can use App MCP. It applies to every app and overrides app-level settings.
Only workspace owners and admins can update the MCP policy. Policy changes take effect immediately and do not require publishing.
**To set the workspace MCP policy:**
1. Open your workspace **Settings**.
2. Click **Governance**.
3. Under **MCP access for AI assistants**, select a policy:
* **Allowed:** Apps can use App MCP, with or without sign-in.
* **Sign-in required:** Apps can use App MCP, but assistants must sign in. Every App MCP server in the workspace uses OAuth.
* **Not allowed:** Apps in the workspace cannot use App MCP.
If you select **Not allowed**, active App MCP servers stop working on their next request.
***
## Troubleshooting
Your workspace policy is blocking App MCP. The notice tells you whether to ask an admin or to change it yourself, and owners and admins can click **Open workspace settings**.
Your app requires sign-in, but the server is set to Public, so it will not run. On the MCP page you see **Your app requires login but your MCP server is exposed publicly**. Ask in the AI chat to switch the server to OAuth, or make the app public, then publish.
Your Claude organization may restrict custom connectors. Ask your Claude admin whether custom connectors are enabled for your account.
After you publish changes to the available tools, reconnect the app from the AI client and approve the updated access.
# Using Base44 built-in integrations
Source: https://docs.base44.com/Integrations/built-in-integrations
Learn how to use Base44 built-in integrations to power smart features in your apps.
[Built-in integrations](https://base44.com/integrations) are Base44 services you can call in your app without extra setup. They cover common needs such as sending email, generating images and videos, handling file uploads, extracting data from files, and running large language model (LLM) calls. You can use them from the AI chat, in flows, or in your own backend functions.
Each call to a built-in integration uses integration credits, so it is important to understand what each integration does and when to use it.
***
## Understanding built-in integrations
Built-in integrations are ready-made actions that run inside Base44. They are available in every app, and you do not need to set up API keys, connectors, or your own infrastructure. You can add them wherever you design logic in your app, and Base44 takes care of hosting, scaling, and provider connections behind the scenes.
Use built-in integrations when you want Base44 to handle these shared tasks for you. For example, you can send emails without configuring an email service, generate images on demand, let people upload and store files in Base44, extract structured data from uploads into your entities, or call LLMs to power agents and data workflows while keeping all billing and provider management in one place.
**What's the difference between built-in integrations, connectors and custom integrations?**
Connectors create OAuth connections to your own accounts in tools such as Gmail, Slack, or Google Drive. Custom integrations use your own API keys or OpenAPI specs. Built-in integrations rely on Base44’s own managed provider setup, so you do not handle API keys or other credentials yourself.
Use connectors or custom integrations when you need to act through your own provider accounts, control scopes and identities, or connect to tools that built-in integrations do not cover yet.
***
## Sending emails
SendEmail is a built-in integration that sends transactional and workflow emails from your app, such as confirmations, alerts, digests, and other notifications that need to go out automatically.
You can trigger SendEmail from:
* Flows that Base44 builds from the AI chat.
* Backend functions that you edit in your app’s code.
* Agents or automations that need to notify people by email.
SendEmail is helpful for tasks like sending welcome messages, daily or weekly summaries, status change alerts, or passwordless access links.
* `Connect SendEmail so that when someone submits this form, they get a confirmation email with their details.`
* `Add a daily flow that uses SendEmail to send me a summary of all new signups in this app.`
* `When a task is marked as 'critical', use SendEmail to alert the ops team with a link to the record.`
**Notes:**
* SendEmail does not support sending to external mailing lists or adding file attachments.
* Each email sent through SendEmail uses integration credits. The exact cost depends on how many messages you send and how often flows run.
***
## Generating images
GenerateImage is a built-in integration that creates images using AI from text prompts or from flows in your app. It is useful for generating on-demand visuals such as covers, thumbnails, illustrations, or avatars without managing an external image provider.
GenerateImage can support scenarios like creating cover images for new content, generating temporary product images when photos are not ready yet, or producing simple marketing assets based on text descriptions.
* `Whenever I add a new article, use GenerateImage to create a cover image that matches the title and theme.`
* `When I create a new product, generate a simple placeholder image with the product name on a solid background and store its URL in the Products entity.`
* `Add a page where I can enter a short description and use GenerateImage to create a marketing image I can download.`
***
## Generating videos
GenerateVideo is a built-in integration that creates videos with AI from text prompts or app flows. It is useful for adding rich visual content to your app design, or for letting people generate videos inside your live app from prompts, forms, or app data.
You can use GenerateVideo to add hero videos and product previews while building your app, or to power features like marketing video generators, recipe previews, fitness clips, learning content, social media assets, and personalized media in your live app.
* `Create a short hero video for my recipe app showing lemon herb chicken cooking in a pan. Add it to the homepage hero section with a dark overlay.`
* `Add a page where people can enter a prompt, choose a video style, generate a short video with GenerateVideo, and save it.`
* `Let people generate short social media videos from prompts, preview them in the app, and save each video URL to the Videos entity.`
**Notes:**
* To generate videos from the AI chat, you need a [Starter plan](https://base44.com/pricing) or higher.
* When the AI chat generates a video, it uses the prompt's message credits plus 1 additional message credit.
* Video generation in live apps uses 5 integration credits per second of generated video.
***
## Generating speech
GenerateSpeech is a built-in integration that converts text into natural-sounding audio and returns a public URL to a generated MP3 file. Your app can play back, store, or embed the audio without connecting to an external speech provider.
GenerateSpeech is useful for adding read-aloud functionality to content-heavy apps, building narrated walkthroughs, delivering multilingual announcements, or producing audio summaries from app data. It works in 30 languages, and Base44 detects the language automatically.
For example, you can build an art exhibition guide where visitors tap an artwork title and hear a narrated description read aloud, like a personal audio tour inside your app.
* `Add a "Listen" button to each article page. When clicked, use GenerateSpeech to convert the article body to audio and play it back in the app.`
* `When a new lesson is saved, use GenerateSpeech with the "sunny" voice to generate an audio version and store the URL in the Lessons entity.`
* `Build a page where I can enter text, choose a voice, and generate a downloadable audio file using GenerateSpeech.`
**Notes:**
* Text input is limited to 5,000 characters per call.
* GenerateSpeech supports 30 languages including English, Spanish, French, German, Japanese, Portuguese, Arabic, and Hindi.
* Available voices are: `river` (calm, neutral), `honey` (warm, soft), `sunny` (bright, upbeat), `storm` (formal, authoritative), and `spark` (energetic, quick). The default voice is `river`.
* Each call uses integration credits based on text length: 1 credit per 50 characters, up to a maximum of 100 credits per call. Credits are charged every time audio is generated, including if the same text is played again. To avoid repeat charges, save the returned audio URL and replay it instead of calling GenerateSpeech again.
### Using an audio URL
When GenerateSpeech runs, it returns a public URL pointing to the generated MP3 file. You can use this URL directly in an audio player component in your app, or save it to an entity field so you can replay it later without generating the audio again. Ask the AI chat to store the URL in your entity after each call, for example:
```text theme={null}
After generating the audio, save the returned URL to the audio_url field in the Artworks entity.
```
***
## Uploading files
UploadFile is a built-in integration that lets your app accept file uploads from people who use it. It powers file upload components in your UI so you can collect documents, images, and data files without building your own storage or upload endpoints.
UploadFile is a good choice when you want to gather receipts, contracts, screenshots, profile pictures, or data files such as CSVs and spreadsheets and keep them tied to records in your app.
* `Add a file upload field to this request page using UploadFile so people can attach a PDF when they submit.`
* `Let people upload profile pictures, store the file using UploadFile, and save the image URL in the Members entity.`
* `Create a page where I can drag and drop CSV files, upload them with UploadFile, and show a table of uploaded files.`
For current file sizes and types, check the [Uploading files](/Building-your-app/Using-media) guide.
***
## Extracting data from uploaded files
ExtractDataFromUploadedFile is a built-in integration that reads structured content from uploaded files and turns it into data your app can work with. It helps you move from “file storage” to “usable records” by pulling out key fields and rows for you. You can pull structured data from uploaded files (CSV, PNG, JPG, JPEG, PDF) using JSON schemas. It is particularly useful for importing data in bulk.
You can use ExtractDataFromUploadedFile to parse receipts, invoices, forms, or data files and convert them into clean entities, such as Contacts, Invoices, Expenses, or Metrics, without hand-writing parsing logic.
You can also combine UploadFile and ExtractDataFromUploadedFile. For example, someone uploads a CSV, Excel file, or PDF through UploadFile, then you use ExtractDataFromUploadedFile to transform the content into rows in your data tables.
* `When I upload a CSV file of customers, use UploadFile and ExtractDataFromUploadedFile to import the records into a Customers entity.`
* `Let me upload invoice PDFs and use ExtractDataFromUploadedFile to pull invoice number, vendor, date, subtotal, and total into an Invoices table.`
* `Build a page where I can upload an Excel file with KPIs, then use ExtractDataFromUploadedFile to update the Metrics entity.`
Extraction quality depends on the file type, its structure, and how well the fields are labeled. For critical workflows, test with several real examples and adjust your entities or flows based on the results.
***
## Running LLM calls
invokeLLM is a built-in integration that runs large language model (LLM) calls from inside your app. It lets your app “think” with AI over your data and flows, and powers text generation, explanations, and decisions that depend on LLMs.
invokeLLM is a good fit when you want to build data agents, summarize or rewrite content, classify records, generate recommendations from dashboards, or add in-app assistants that help people complete tasks. It works like other built-in integrations in your flows and backend functions, but with an extra layer of control: you can choose which underlying model it uses.
* `Add a data agent that uses invokeLLM so I can ask natural language questions about my Sales entity and see the answers in this app.`
* `When a support ticket is created, use invokeLLM to summarize the description into a short overview and store it in a Summary field.`
* `Create a flow that uses invokeLLM to classify each new lead into one of three segments based on their notes, and save the segment on the lead record.`
* `Switch invokeLLM to use a stronger model for my agents so they can give better explanations on complex analytics dashboards, and update any flows that depend on invokeLLM.`
## Choosing the model for invokeLLM
By default, invokeLLM uses a standard model that balances quality and cost. If you want, you can tell the AI chat inside Base44 to use any [supported model](/Building-your-app/AI-chat-modes#choosing-your-ai-model) in your workspace as the underlying model for invokeLLM by asking the AI chat to switch it for you.
For example, you can say: `Switch invokeLLM to use for this app`.
**Note:** When you change the model for invokeLLM, the style, reasoning ability, and quality of responses update to match that model. The number of integration credits each call uses also changes based on the new model’s cost, and any flows that rely on invokeLLM start using the new model automatically.
# Connectors catalog
Source: https://docs.base44.com/Integrations/connectors-catalog
Browse available connectors, explore example prompts, and review permissions.
Connect your Base44 app to popular tools and data sources using managed integrations.
You need a [**Builder plan**](https://base44.com/pricing) or higher to use connectors.
***
## Browse by category
Stripe, Square
Gmail, Outlook, Slack, Discord, Microsoft Teams, Google Meet
Google Analytics, BigQuery, Search Console, Snowflake, Databricks, Google Forms, Airtable, Typeform
HubSpot, Salesforce, Gumroad, Zoho CRM, Mailchimp, Facebook Pages, Omnisend, Meta Ads, Instagram Business, LinkedIn, TikTok, Eventbrite
Gorgias, Intercom
ClickUp, Linear, Wrike, Confluence, Jira, Todoist, Google Calendar, Google Tasks, Notion, Google Classroom, Calendly, Basecamp, Harvest
GitHub API, GitLab, Supabase, Hugging Face
SharePoint, DocuSign, Microsoft Word, Microsoft OneNote, Microsoft Excel, Microsoft PowerPoint, Google Drive, Google Docs, Google Sheets, Google Slides, Dropbox, Box, OneDrive
Contentful, Wix, Twitch
Splitwise
QuickBooks, FreshBooks
BambooHR
Tell the **AI chat** what you want to connect and how you want to use it, and get relevant suggestions based on your app's structure, pages, and data.
***
## Payments
Sell products or subscriptions and get paid online.
[Learn more about setting up Stripe](/documentation/setting-up-your-app/setting-up-payments)
**What you can do:**
* Sell subscriptions or one-time products.
* Trigger workflows after successful payments.
* Connect purchases to your app data.
**Example prompts:**
```text theme={null}
Connect Stripe and let people pay for a subscription in my app.
```
```text theme={null}
Charge customers with Stripe when they place an order in my app.
```
```text theme={null}
When a payment succeeds in Stripe, update the order status in my app and send a confirmation email.
```
**Permissions requested:**
```text theme={null}
read_write access to payments, customers, and checkout sessions
```
Process payments, manage inventory, customers, and orders with Square.
**What you can do:**
* Process payments.
* Manage inventory and catalog.
* Track orders and customers.
**Example prompts:**
```text theme={null}
Process payments through Square from this app.
```
```text theme={null}
Display Square sales and transaction data in a dashboard.
```
```text theme={null}
Manage Square inventory and product catalog.
```
**Permissions requested:**
```text theme={null}
MERCHANT_PROFILE_READ
PAYMENTS_READ
PAYMENTS_WRITE
ORDERS_READ
ORDERS_WRITE
CUSTOMERS_READ
CUSTOMERS_WRITE
ITEMS_READ
ITEMS_WRITE
INVENTORY_READ
INVENTORY_WRITE
INVOICES_READ
INVOICES_WRITE
```
***
## Communication
Email service. Messages, drafts and inbox.
**What you can do:**
* Send daily email digests.
* Alert teammates when something changes.
* Email summaries of activity.
**Example prompts:**
```text theme={null}
Send me a daily email with my to-do list using Gmail.
```
```text theme={null}
Email me a summary of all new signups from today.
```
```text theme={null}
Send a weekly Gmail digest with key metrics from this dashboard.
```
**Permissions requested:**
```text theme={null}
https://www.googleapis.com/auth/gmail.readonly
https://www.googleapis.com/auth/gmail.modify
https://www.googleapis.com/auth/gmail.compose
https://www.googleapis.com/auth/gmail.send
https://www.googleapis.com/auth/gmail.labels
```
Email and calendar. Messages, events and contacts.
**What you can do:**
* Send email summaries.
* Create calendar events.
* Check availability.
**Example prompts:**
```text theme={null}
Connect to my Outlook account and send me a daily email summary from this app.
```
```text theme={null}
Create Outlook calendar events when a new meeting is confirmed in this app.
```
```text theme={null}
Check my Outlook calendar availability before scheduling appointments.
```
**Permissions requested:**
```text theme={null}
User.Read
offline_access
Mail.Read
Mail.ReadWrite
Mail.Send
Calendars.Read
Calendars.ReadWrite
```
Team messaging. Send messages as yourself.
**What you can do:**
* Post updates to channels.
* Notify teammates.
* Search messages.
**Example prompts:**
```text theme={null}
Post a message to the #support channel when a new ticket is created.
```
```text theme={null}
Send a daily summary of completed tasks to my team's Slack channel.
```
```text theme={null}
Send alerts to a Slack channel when deadlines are approaching.
```
**Permissions requested:**
```text theme={null}
channels:read
groups:read
chat:write
im:read
im:history
users:read
users:read.email
```
Team messaging. Post as a branded bot.
**What you can do:**
* Send automated bot messages.
* Post updates.
* Trigger alerts.
**Example prompts:**
```text theme={null}
Send a message as a bot to the #announcements channel when a release is published.
```
```text theme={null}
Send a daily bot summary to #team-updates at 5pm.
```
```text theme={null}
Send a bot message to #product-updates when a feature flag is enabled.
```
**Permissions requested:**
```text theme={null}
chat:write
channels:read
bot access
```
Notify channels and communities.
**What you can do:**
* Post messages.
* Send alerts.
* Notify communities.
**Example prompts:**
```text theme={null}
Post a message to the #announcements channel when a new feature is released.
```
```text theme={null}
Send an alert to the #ops channel when a critical error occurs.
```
```text theme={null}
Notify a Discord channel when a new support ticket is created.
```
**Permissions requested:**
```text theme={null}
webhook or bot access
```
Team chat. Channels, messages and meetings.
**What you can do:**
* Send channel messages.
* Schedule meetings.
* Share updates.
**Example prompts:**
```text theme={null}
Send a notification to my Teams channel when a new client is added.
```
```text theme={null}
Send meeting summaries to a Teams channel.
```
```text theme={null}
Schedule a Teams meeting when a booking is confirmed.
```
**Permissions requested:**
```text theme={null}
User.Read
Calendars.Read
Calendars.ReadWrite
offline_access
Chat.ReadWrite
OnlineMeetings.ReadWrite
Team.ReadBasic.All
Channel.ReadBasic.All
ChannelMessage.Send
Group.Read.All
Directory.Read.All
```
Video conferencing. Meetings, links and recordings.
**What you can do:**
* Create meeting links.
* Generate meeting spaces.
* Sync meetings.
**Example prompts:**
```text theme={null}
Create a Google Meet space when a new meeting is scheduled.
```
```text theme={null}
Generate a Google Meet link when a booking is confirmed.
```
```text theme={null}
Add a Google Meet link to scheduled appointments in my app.
```
**Permissions requested:**
```text theme={null}
https://www.googleapis.com/auth/meetings.space.created
https://www.googleapis.com/auth/meetings.space.readonly
```
***
## Data & Analytics
Web analytics. Traffic, events and audiences.
**What you can do:**
* View traffic.
* Monitor engagement.
* Generate reports.
**Example prompts:**
```text theme={null}
Connect Google Analytics and show pageviews, sessions, and top pages in a dashboard.
```
```text theme={null}
Pull my Google Analytics traffic by source and show trends week over week.
```
```text theme={null}
Create a weekly report from Google Analytics and email it to me.
```
**Permissions requested:**
```text theme={null}
https://www.googleapis.com/auth/analytics.readonly
https://www.googleapis.com/auth/analytics.edit
```
Analytics warehouse. Datasets, tables and queries.
**What you can do:**
* Run queries.
* Analyze data.
* Build dashboards.
**Example prompts:**
```text theme={null}
Connect this app to my BigQuery project and add a data agent that answers questions about my analytics.
```
```text theme={null}
Let users ask questions about sales trends from my BigQuery dataset.
```
```text theme={null}
Alert me when a KPI drops below a threshold based on BigQuery data.
```
**Permissions requested:**
```text theme={null}
https://www.googleapis.com/auth/bigquery.readonly
```
Search analytics. Queries, clicks and indexing.
**What you can do:**
* Track rankings.
* Monitor clicks.
* Analyze queries.
**Example prompts:**
```text theme={null}
Connect Search Console and show my top queries and click data.
```
```text theme={null}
Alert me when a page drops in search rankings.
```
```text theme={null}
Track indexing status for new pages in this app.
```
**Permissions requested:**
```text theme={null}
https://www.googleapis.com/auth/webmasters
https://www.googleapis.com/auth/webmasters.readonly
```
Data warehouse. Databases, tables and queries.
**What you can do:**
* Query Snowflake data.
* Build dashboards from Snowflake data.
* Work with external data while building apps.
**Example prompts:**
```text theme={null}
Connect Snowflake and create a dashboard from my warehouse data.
```
```text theme={null}
Query Snowflake to show sales trends by region.
```
```text theme={null}
Use Snowflake data to answer questions in this app.
```
**Access details:**
```text theme={null}
Access depends on the Snowflake connection set up for your workspace and the permissions available in Snowflake.
```
Data and AI platform. Notebooks, tables and jobs.
**What you can do:**
* Query Databricks data.
* Build dashboards from Databricks data.
* Work with external data while building apps.
**Example prompts:**
```text theme={null}
Connect Databricks and create a dashboard from my workspace data.
```
```text theme={null}
Query Databricks to show product usage trends.
```
```text theme={null}
Use Databricks data to answer questions in this app.
```
**Permissions requested:**
```text theme={null}
all-apis
sql
```
Create and manage Google Forms and read form responses.
**What you can do:**
* Create and edit forms.
* Collect responses.
* Summarize response data.
**Example prompts:**
```text theme={null}
Create a customer feedback form and save the responder link in my app.
```
```text theme={null}
Show recent responses from a Google Form in an admin dashboard.
```
```text theme={null}
Summarize survey responses and show response counts by answer.
```
**Permissions requested:**
```text theme={null}
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/drive.file
https://www.googleapis.com/auth/drive.readonly
https://www.googleapis.com/auth/forms.body
https://www.googleapis.com/auth/forms.body.readonly
https://www.googleapis.com/auth/forms.responses.readonly
```
Flexible database. Tables, records and views.
**What you can do:**
* Sync records.
* Manage tables.
* Build workflows.
**Example prompts:**
```text theme={null}
Sync data from this app with Airtable.
```
```text theme={null}
Create Airtable records when a new form is submitted in this app.
```
```text theme={null}
Show Airtable data in a dashboard inside my app.
```
**Permissions requested:**
```text theme={null}
data.records:read
data.records:write
schema.bases:read
```
Forms builder. Forms, surveys and responses.
**What you can do:**
* Collect data.
* Trigger workflows.
* Analyze responses.
**Example prompts:**
```text theme={null}
Show Typeform responses in this app.
```
```text theme={null}
Pull the latest Typeform responses into a dashboard.
```
```text theme={null}
Trigger a workflow in this app when a new Typeform response is submitted.
```
**Permissions requested:**
```text theme={null}
accounts:read
forms:read
forms:write
responses:read
```
***
## CRM & Marketing
CRM platform. Contacts, deals and campaigns.
**What you can do:**
* Sync contacts.
* Track deals.
* Automate marketing.
**Example prompts:**
```text theme={null}
Sync new leads from this app into HubSpot contacts.
```
```text theme={null}
Show HubSpot deal stages inside my project dashboard.
```
```text theme={null}
Create HubSpot contacts when people sign up in this app.
```
**Permissions requested:**
```text theme={null}
crm.objects.contacts.read
crm.objects.contacts.write
crm.objects.companies.read
crm.objects.companies.write
crm.objects.deals.read
crm.objects.deals.write
crm.objects.owners.read
crm.objects.quotes.read
crm.objects.quotes.write
crm.lists.read
crm.lists.write
crm.schemas.contacts.read
crm.schemas.companies.read
crm.schemas.deals.read
tickets
e-commerce
automation
forms
files
content
social
analytics.read
```
CRM platform. Leads, opportunities and records.
**What you can do:**
* Sync leads.
* Track opportunities.
* Manage pipelines.
**Example prompts:**
```text theme={null}
Sync new leads from this app into Salesforce.
```
```text theme={null}
Show Salesforce opportunity stages inside my project dashboard.
```
```text theme={null}
Log customer support requests in Salesforce automatically.
```
**Permissions requested:**
```text theme={null}
api
refresh_token
full
web
id
openid
profile
email
address
phone
offline_access
custom_permissions
wave_api
chatter_api
visualforce
content
cdp_api
cdp_profile_api
cdp_query_api
cdp_segment_api
interaction_api
cdp_ingest_api
pardot_api
```
Sell digital products and track sales from your app.
**What you can do:**
* Sell digital products.
* Track sales and revenue.
* Manage products and customers.
**Example prompts:**
```text theme={null}
Show my Gumroad sales and revenue in a dashboard.
```
```text theme={null}
List recent Gumroad purchases in this app.
```
```text theme={null}
Notify me when a new Gumroad sale comes in.
```
**Permissions requested:**
```text theme={null}
account
view_profile
edit_profile
edit_products
edit_emails
view_sales
edit_sales
mark_sales_as_shipped
view_payouts
view_tax_data
```
Manage CRM records, deals, and contacts from your app.
**What you can do:**
* Track leads and contacts.
* Manage deals and pipeline stages.
* Sync CRM records into your app.
**Example prompts:**
```text theme={null}
Show my Zoho CRM leads and their status in a dashboard.
```
```text theme={null}
Create a Zoho CRM contact when someone submits a form in my app.
```
```text theme={null}
Sync Zoho CRM deals into this app and track pipeline stages.
```
**Permissions requested:**
```text theme={null}
ZohoCRM.modules.CREATE
ZohoCRM.modules.READ
ZohoCRM.modules.UPDATE
ZohoCRM.modules.DELETE
ZohoCRM.users.READ
ZohoCRM.settings.READ
```
Run email campaigns and manage audiences from your app.
**What you can do:**
* Manage audiences and subscribers.
* Create and send email campaigns.
* Track campaign performance.
**Example prompts:**
```text theme={null}
Add a subscriber to my Mailchimp audience when someone signs up in my app.
```
```text theme={null}
Show my Mailchimp campaign open and click rates in a dashboard.
```
```text theme={null}
Create a Mailchimp campaign from content in my app.
```
**Access details:**
```text theme={null}
Access depends on the Mailchimp connection set up for your workspace and the permissions available in Mailchimp.
```
Publish and manage your Facebook page from your app.
**What you can do:**
* Publish page posts.
* Manage page content.
* Track post engagement.
**Example prompts:**
```text theme={null}
Publish a post to my Facebook page when I add an update in my app.
```
```text theme={null}
Schedule Facebook page posts from content in my app.
```
```text theme={null}
Show recent Facebook page posts and their engagement in a dashboard.
```
**Permissions requested:**
```text theme={null}
pages_show_list
pages_read
pages_read_engagement
pages_messaging
pages_manage_posts
read_insights
pages_manage_metadata
pages_manage_ads
```
Run ecommerce marketing campaigns from your app.
**What you can do:**
* Manage contacts and segments.
* Run email and SMS campaigns.
* Track campaign results.
**Example prompts:**
```text theme={null}
Add a contact to Omnisend when a customer places an order in my app.
```
```text theme={null}
Send an Omnisend campaign to customers from my app.
```
```text theme={null}
Show Omnisend campaign results in a dashboard.
```
**Permissions requested:**
```text theme={null}
automations.read
brands.read
campaigns.read
contacts.read
events.read
products.read
contacts.write
events.write
products.write
```
Manage and analyze your Facebook and Instagram ads campaigns.
**What you can do:**
* Create and manage ad campaigns.
* Manage budgets and audiences.
* Track ad performance.
**Example prompts:**
```text theme={null}
Show my Meta Ads campaign spend and performance in a dashboard.
```
```text theme={null}
Create a Meta Ads campaign from a product in my app.
```
```text theme={null}
Pause Meta Ads campaigns that exceed their budget from my app.
```
**Permissions requested:**
```text theme={null}
public_profile
email
ads_read
ads_management
pages_show_list
pages_manage_ads
read_insights
```
Social platform. Posts, comments and insights.
**What you can do:**
* Publish photos and videos to an Instagram Business feed.
* Read, reply to, edit, and delete comments.
* Access basic account details, such as username, ID, and media.
**Example prompts:**
```text theme={null}
Publish an approved Instagram Business feed post from this app.
```
```text theme={null}
Show recent Instagram Business posts and comments in a dashboard.
```
```text theme={null}
Reply to new Instagram Business comments from this app.
```
**Permissions requested:**
```text theme={null}
instagram_business_basic
instagram_business_manage_comments
instagram_business_content_publish
```
Instagram Business supports feed posts only. Stories, Reels, direct messages, and profile updates are not supported.
Professional network. Posts, profiles and connections.
**What you can do:**
* Post updates.
* Share content.
* Manage profile data.
**Example prompts:**
```text theme={null}
Post a LinkedIn update when I publish a new article.
```
```text theme={null}
Share company announcements to my LinkedIn profile.
```
```text theme={null}
Draft a LinkedIn post and let me approve it before publishing.
```
**Permissions requested:**
```text theme={null}
openid
profile
r_ads_reporting
r_organization_social
rw_organization_admin
w_member_social
r_profile_basicinfo
r_ads
r_verify
w_organization_social
rw_ads
r_basicprofile
r_organization_admin
email
r_1st_connections_size
```
Video platform. Profile stats, videos and insights.
**What you can do:**
* View stats.
* Track followers.
* Analyze content.
**Example prompts:**
```text theme={null}
Show my TikTok profile stats and follower count in a dashboard.
```
```text theme={null}
List my recent TikTok videos with their view counts.
```
```text theme={null}
Show my total likes, followers, and video count from TikTok.
```
**Permissions requested:**
```text theme={null}
artist.certification.read
artist.certification.update
user.info.basic
user.info.profile
user.info.stats
video.list
```
Manage Eventbrite events, attendees, orders, and organizations.
**What you can do:**
* List and create events.
* Track attendees and orders.
* Show ticket sales.
**Example prompts:**
```text theme={null}
List upcoming Eventbrite events in this app.
```
```text theme={null}
Show attendees for a selected Eventbrite event.
```
```text theme={null}
Sync Eventbrite orders into this app as records.
```
**Permissions requested:**
```text theme={null}
No granular scopes. Eventbrite uses an all-or-nothing token that grants access to the events, attendees, orders, and organizations available to the authorizing account.
```
***
## Customer Support
Customer support and helpdesk automation.
**What you can do:**
* Manage support tickets.
* Automate helpdesk workflows.
* Track customer conversations.
**Example prompts:**
```text theme={null}
Show open Gorgias support tickets in a dashboard.
```
```text theme={null}
Create a Gorgias ticket when a user reports an issue in my app.
```
```text theme={null}
Summarize recent Gorgias customer conversations for my team.
```
**Permissions requested:**
```text theme={null}
tickets:read
customers:read
users:read
customers:write
tickets:write
openid
offline
email
profile
```
Support customers and manage tickets from your app.
**What you can do:**
* Manage support tickets.
* Track customer conversations.
* Respond to customers.
**Example prompts:**
```text theme={null}
Show open Intercom conversations in a dashboard.
```
```text theme={null}
Create an Intercom ticket when a user reports an issue in my app.
```
```text theme={null}
Summarize recent Intercom conversations for my support team.
```
**Permissions requested:**
```text theme={null}
Read and list users and companies
Write users and companies
Read events
Write events
Read conversations
Write conversations
Read tags
Write tags
Read counts
Read tickets
Write tickets
Read admins
Read and list articles
```
***
## Project Management
Project management. Tasks, docs and goals.
**What you can do:**
* Create tasks.
* Track work.
* Manage teams.
**Example prompts:**
```text theme={null}
Connect ClickUp and show my tasks by status and due date in a dashboard.
```
```text theme={null}
Create a new ClickUp task when a new record is added to my Requests entity.
```
```text theme={null}
Sync ClickUp task status back into this app so I can track progress here.
```
**Permissions requested:**
```text theme={null}
Access to ClickUp resources such as tasks, lists, and spaces, based on the permissions you already have in your workspace.
```
Issue tracker. Issues, projects and cycles.
**What you can do:**
* Create issues.
* Track progress.
* Manage workflows.
**Example prompts:**
```text theme={null}
Connect Linear and show my issues by status, assignee, and priority in a dashboard.
```
```text theme={null}
Create a Linear issue automatically when a bug is submitted in this app.
```
```text theme={null}
Sync Linear issue status back into this app so I can track progress here.
```
**Permissions requested:**
```text theme={null}
read
issues:create
comments:create
write
admin
```
Project management. Tasks, projects and timelines.
**What you can do:**
* Plan projects.
* Track tasks.
* Generate reports.
**Example prompts:**
```text theme={null}
Connect Wrike and show tasks for a selected project in a dashboard.
```
```text theme={null}
Display Wrike task statuses and assignees in a read-only dashboard.
```
```text theme={null}
Generate a weekly Wrike project status report and email it to me.
```
**Permissions requested:**
```text theme={null}
Default
wsReadOnly
```
Bring team docs and knowledge into your app.
**What you can do:**
* Access team docs.
* Search the knowledge base.
* Sync pages into your app.
**Example prompts:**
```text theme={null}
Show Confluence pages from a selected space in this app.
```
```text theme={null}
Search Confluence for docs matching a keyword and show results.
```
```text theme={null}
Sync Confluence knowledge base articles into this app.
```
**Permissions requested:**
```text theme={null}
read:content:confluence
read:page:confluence
write:page:confluence
read:space:confluence
write:space:confluence
read:attachment:confluence
read:group:confluence
write:group:confluence
```
Track issues and project work from your app.
**What you can do:**
* Track issues.
* Manage project work.
* Update issue statuses.
**Example prompts:**
```text theme={null}
Show my open Jira issues in a dashboard.
```
```text theme={null}
Create a Jira issue when a bug is reported in my app.
```
```text theme={null}
Display Jira sprint progress in this app.
```
**Permissions requested:**
```text theme={null}
read:me
offline_access
read:jira-user
read:jira-work
write:jira-work
```
Plan tasks and projects from your app.
**What you can do:**
* Plan tasks.
* Organize projects.
* Track due dates.
**Example prompts:**
```text theme={null}
Show my Todoist tasks due today in a dashboard.
```
```text theme={null}
Create a Todoist task when an item is added in my app.
```
```text theme={null}
Organize my app's action items into Todoist projects.
```
**Permissions requested:**
```text theme={null}
data:read_write
```
Calendar app. Events, schedules and invites.
**What you can do:**
* Sync bookings.
* Create events.
* Check availability.
**Example prompts:**
```text theme={null}
Sync all my bookings directly to my Google Calendar.
```
```text theme={null}
Show my real-time availability from Google Calendar to clients.
```
```text theme={null}
When an appointment is confirmed, create a calendar event and invite attendees.
```
**Permissions requested:**
```text theme={null}
https://www.googleapis.com/auth/calendar
https://www.googleapis.com/auth/calendar.readonly
https://www.googleapis.com/auth/calendar.events
https://www.googleapis.com/auth/calendar.events.readonly
https://www.googleapis.com/auth/calendar.events.freebusy
https://www.googleapis.com/auth/calendar.freebusy
https://www.googleapis.com/auth/calendar.app.created
https://www.googleapis.com/auth/calendar.calendarlist.readonly
https://www.googleapis.com/auth/calendar.events.public.readonly
https://www.googleapis.com/auth/calendar.settings.readonly
```
Task manager. Tasks, lists and due dates.
**What you can do:**
* Create tasks.
* Track progress.
* Manage lists.
**Example prompts:**
```text theme={null}
Create a Google Task when a new item is added in this app.
```
```text theme={null}
Add a Google Task when a request is marked urgent.
```
```text theme={null}
Sync tasks from this app to my Google Tasks list.
```
**Permissions requested:**
```text theme={null}
tasklists.readonly
tasks.readonly
tasks
```
All-in-one workspace. Pages, databases and docs.
**What you can do:**
* Sync databases.
* Write pages.
* Organize content.
**Example prompts:**
```text theme={null}
Sync a Notion database with my CRM records.
```
```text theme={null}
Write project updates from this app into a Notion page.
```
```text theme={null}
Create a new Notion page for every new client added in this app.
```
**Permissions requested:**
```text theme={null}
read_content
update_content
insert_content
read_comments
create_comments
read_users
```
Learning platform. Classes, assignments and grades.
**What you can do:**
* Manage courses.
* View assignments.
* Track students.
**Example prompts:**
```text theme={null}
List assignments from Google Classroom.
```
```text theme={null}
Show active Google Classroom courses in a dashboard.
```
```text theme={null}
Pull Google Classroom assignments and due dates into this app.
```
**Permissions requested:**
```text theme={null}
https://www.googleapis.com/auth/classroom.courses
https://www.googleapis.com/auth/classroom.courses.readonly
https://www.googleapis.com/auth/classroom.coursework.students
https://www.googleapis.com/auth/classroom.coursework.me
https://www.googleapis.com/auth/classroom.courseworkmaterials
https://www.googleapis.com/auth/classroom.courseworkmaterials.readonly
https://www.googleapis.com/auth/classroom.topics
https://www.googleapis.com/auth/classroom.topics.readonly
https://www.googleapis.com/auth/classroom.rosters.readonly
https://www.googleapis.com/auth/classroom.announcements
https://www.googleapis.com/auth/classroom.announcements.readonly
https://www.googleapis.com/auth/classroom.student-submissions.students.readonly
https://www.googleapis.com/auth/classroom.student-submissions.me.readonly
https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly
https://www.googleapis.com/auth/classroom.guardianlinks.me.readonly
https://www.googleapis.com/auth/classroom.profile.emails
https://www.googleapis.com/auth/classroom.push-notifications
```
Scheduling tool. Events, bookings and availability.
**What you can do:**
* Show availability.
* Track meetings.
* Trigger workflows.
**Example prompts:**
```text theme={null}
Show upcoming Calendly bookings in this app.
```
```text theme={null}
Display available Calendly meeting slots in a dashboard.
```
```text theme={null}
Trigger a workflow in this app when a new Calendly booking is confirmed.
```
**Permissions requested:**
```text theme={null}
availability:read
event_types:read
locations:read
scheduled_events:read
users:read
```
Manage projects, to-do lists, messages, documents, and schedules in Basecamp.
**What you can do:**
* Manage to-do lists.
* Post project messages.
* Track schedules.
**Example prompts:**
```text theme={null}
Show my Basecamp to-do lists and their status.
```
```text theme={null}
Create a Basecamp to-do when a task is added in my app.
```
```text theme={null}
Post a message to a Basecamp project when something important happens in my app.
```
**Permissions requested:**
```text theme={null}
Full access. Basecamp OAuth 2.0 has no granular scopes, so connecting grants access to all tools and resources the authorizing user can normally access.
```
Track time, manage projects and clients, and handle invoices and expenses in Harvest.
**What you can do:**
* Track time entries.
* Manage projects and clients.
* Handle invoices and expenses.
**Example prompts:**
```text theme={null}
Show my logged time entries for this week from Harvest.
```
```text theme={null}
Create a time entry in Harvest when I complete a task in my app.
```
```text theme={null}
List active Harvest projects and their clients.
```
**Permissions requested:**
```text theme={null}
Harvest is not scope-based.
```
***
## Developer Tools
Code hosting. Repos, issues and pull requests.
**What you can do:**
* Track PRs.
* Manage repos.
* Create issues.
**Example prompts:**
```text theme={null}
Connect to my GitHub account and list all open pull requests for review.
```
```text theme={null}
Show open issues from my repository in a dashboard.
```
```text theme={null}
Create a new GitHub issue when a bug is reported in this app.
```
**Permissions requested:**
```text theme={null}
exact scopes depend on the flows you build and may include access to repositories and organization data
```
DevOps platform. Projects, merge requests and pipelines.
**What you can do:**
* Track MRs.
* Run pipelines.
* Manage repos.
**Example prompts:**
```text theme={null}
List open merge requests in my GitLab project.
```
```text theme={null}
Show open GitLab merge requests in a dashboard.
```
```text theme={null}
Create a GitLab issue when a bug is reported in this app.
```
**Permissions requested:**
```text theme={null}
api
read_user
openid
profile
email
```
Backend platform. Browse schemas, data and status (read-only).
**What you can do:**
* Browse schema.
* Read tables.
* View status.
**Example prompts:**
```text theme={null}
Show Supabase tables in this app.
```
```text theme={null}
Browse my Supabase schema and list all tables with row counts.
```
```text theme={null}
Show project status and recent database tables from Supabase.
```
**Permissions requested:**
```text theme={null}
projects:read
secrets:read
database:read
```
AI model hub. Models, datasets and inference.
**What you can do:**
* Run models.
* Analyze data.
* Build AI features.
**Example prompts:**
```text theme={null}
Run sentiment analysis on customer feedback using Hugging Face.
```
```text theme={null}
Use a Hugging Face model to classify support tickets in this app.
```
```text theme={null}
Analyze text from this app with a Hugging Face model and return structured results.
```
**Permissions requested:**
```text theme={null}
manage-repos
read-repos
contribute-repos
openid
profile
email
inference-api
```
***
## Storage & Documents
Manage documents.
**What you can do:**
* Store files.
* Share documents.
* Manage lists.
**Example prompts:**
```text theme={null}
Show SharePoint documents for a selected site in this app.
```
```text theme={null}
Display files from a SharePoint document library in a dashboard.
```
```text theme={null}
Sync documents from SharePoint to records in this app.
```
**Permissions requested:**
```text theme={null}
offline_access
User.Read
Files.ReadWrite.All
Sites.ReadWrite.All
```
Send documents for signature from your app.
**What you can do:**
* Send documents for signature.
* Track signing status.
* Manage signed documents.
**Example prompts:**
```text theme={null}
Send a document for signature with DocuSign when a deal is approved in my app.
```
```text theme={null}
Show the signing status of DocuSign envelopes in a dashboard.
```
```text theme={null}
Store signed DocuSign documents against records in this app.
```
**Permissions requested:**
```text theme={null}
signature
openid
extended
```
Document storage and generation.
**What you can do:**
* Create documents.
* Edit document content.
* Generate documents from app data.
**Example prompts:**
```text theme={null}
Create a Word document from the notes in my app.
```
```text theme={null}
Generate a Word report from this app's data and save it.
```
```text theme={null}
Update a Word document when a record changes in my app.
```
**Permissions requested:**
```text theme={null}
User.Read
offline_access
Files.ReadWrite
```
Notebooks, sections, and note pages.
**What you can do:**
* Create notes.
* Organize notebooks and sections.
* Save app content to OneNote.
**Example prompts:**
```text theme={null}
Save meeting notes from my app into a OneNote notebook.
```
```text theme={null}
Create a OneNote page when I add a new idea in my app.
```
```text theme={null}
Organize my app's notes into OneNote sections.
```
**Permissions requested:**
```text theme={null}
offline_access
openid
profile
User.Read
Notes.ReadWrite.All
Notes.Read
```
Spreadsheet data and workbook automation.
**What you can do:**
* Create spreadsheets.
* Edit cells and sheets.
* Automate workbooks from app data.
**Example prompts:**
```text theme={null}
Export my app's records to an Excel workbook.
```
```text theme={null}
Create an Excel spreadsheet summarizing this month's orders.
```
```text theme={null}
Update an Excel sheet when new data is added in my app.
```
**Permissions requested:**
```text theme={null}
offline_access
openid
profile
User.Read
Search.Read.All
Files.ReadWrite.All
Sites.ReadWrite.All
```
Presentation storage and generation.
**What you can do:**
* Create presentations.
* Edit slides and layouts.
* Generate decks from app data.
**Example prompts:**
```text theme={null}
Generate a PowerPoint deck from this month's data in my app.
```
```text theme={null}
Create a PowerPoint presentation summarizing my app's records.
```
```text theme={null}
Update PowerPoint slides when data changes in my app.
```
**Permissions requested:**
```text theme={null}
User.Read
offline_access
Files.ReadWrite
```
Cloud storage. Export and back up app files.
**What you can do:**
* Save files.
* Organize folders.
* Back up data.
**Example prompts:**
```text theme={null}
Save generated PDF reports from my app to Google Drive.
```
```text theme={null}
Upload files from this app to a Google Drive folder for each client.
```
```text theme={null}
Back up exported data from this app to Google Drive every week.
```
**Permissions requested:**
```text theme={null}
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/drive.readonly
https://www.googleapis.com/auth/drive.file
```
Document editor. Documents, comments and edits.
**What you can do:**
* Generate docs.
* Fill templates.
* Create notes.
**Example prompts:**
```text theme={null}
Generate a Google Doc contract when a new client is added.
```
```text theme={null}
Create a Google Doc with a daily summary of activity from my app.
```
```text theme={null}
Save meeting notes from this app to a Google Doc.
```
**Permissions requested:**
```text theme={null}
https://www.googleapis.com/auth/documents
https://www.googleapis.com/auth/documents.readonly
```
Spreadsheet app. Sheets, rows and cells.
**What you can do:**
* Sync data.
* Import and export.
* Generate reports.
**Example prompts:**
```text theme={null}
Sync new records from this app into a Google Sheets spreadsheet.
```
```text theme={null}
Keep a Google Sheets dashboard updated with daily metrics from my app.
```
```text theme={null}
Export weekly reports from this app to Google Sheets automatically.
```
**Permissions requested:**
```text theme={null}
https://www.googleapis.com/auth/spreadsheets
https://www.googleapis.com/auth/spreadsheets.readonly
```
Presentation tool. Slides, decks and layouts.
**What you can do:**
* Generate slides.
* Fill templates.
* Share decks.
**Example prompts:**
```text theme={null}
Generate a Google Slides presentation summarizing this week's key KPIs.
```
```text theme={null}
Create a presentation from KPI data in this app.
```
```text theme={null}
Build a Google Slides deck from a weekly report in this app.
```
**Permissions requested:**
```text theme={null}
https://www.googleapis.com/auth/presentations
https://www.googleapis.com/auth/presentations.readonly
```
Cloud storage. Files, folders and syncing.
**What you can do:**
* Upload files.
* Sync content.
* Organize storage.
**Example prompts:**
```text theme={null}
Upload files from this app to Dropbox.
```
```text theme={null}
Save client documents from this app to a Dropbox folder.
```
```text theme={null}
Sync uploaded files from this app to Dropbox automatically.
```
**Permissions requested:**
```text theme={null}
account_info.read
files.metadata.read
files.content.read
files.content.write
```
Cloud storage. Files, folders and permissions.
**What you can do:**
* Store files.
* Manage folders.
* Share content.
**Example prompts:**
```text theme={null}
Connect Box and list files for a selected project.
```
```text theme={null}
Upload files from this app to a Box folder.
```
```text theme={null}
Show Box files related to each client inside my app.
```
**Permissions requested:**
```text theme={null}
root_readwrite
```
Cloud storage. Files, folders and sharing.
**What you can do:**
* Store files.
* Sync data.
* Access documents.
**Example prompts:**
```text theme={null}
Save files from this app to OneDrive.
```
```text theme={null}
Upload generated reports from this app to OneDrive automatically.
```
```text theme={null}
Show OneDrive files related to each client in my app.
```
**Permissions requested:**
```text theme={null}
Files.ReadWrite.All
Sites.ReadWrite.All
Search.Read.All
User.Read
offline_access
openid
profile
email
```
***
## Content & Web
Headless CMS. Content, media and models.
**What you can do:**
* Fetch content.
* Manage entries.
* Sync data.
**Example prompts:**
```text theme={null}
Show content from Contentful in this app.
```
```text theme={null}
Pull blog posts from Contentful and display them in a dashboard.
```
```text theme={null}
Sync published Contentful entries into this app.
```
**Permissions requested:**
```text theme={null}
content_management_manage
```
Website builder. Site data, pages and store.
**What you can do:**
* View analytics.
* Sync customers.
* Track orders.
**Example prompts:**
```text theme={null}
Show Wix site analytics in this app.
```
```text theme={null}
Display recent Wix store orders in a dashboard.
```
```text theme={null}
Sync Wix customer data into this app and show it in a table.
```
**Permissions requested:**
```text theme={null}
Manage stores
Manage form submissions
Manage payments
Manage coupons
Manage events
Manage Paylinks
Manage blog
Manage Media Manager
Read stores
Manage inbox messages
Read site, business, and email details
Manage restaurants
Manage bookings
Manage eCommerce data
Manage email marketing
Manage members and contacts
```
Live streaming, advanced channel management, chat automation, and community moderation.
**What you can do:**
* Manage channel info and streams.
* Automate chat messages.
* Moderate your community.
**Example prompts:**
```text theme={null}
Show my Twitch channel stats and follower count in a dashboard.
```
```text theme={null}
Post a chat message when my Twitch stream goes live.
```
```text theme={null}
Display my recent Twitch streams and their viewer counts in this app.
```
**Permissions requested:**
```text theme={null}
user:read:email
channel:manage:broadcast
channel:read:subscriptions
moderator:read:followers
user:write:chat
user:read:chat
clips:edit
channel:manage:redemptions
bits:read
channel:read:hype_train
channel:moderate
moderation:read
```
***
## Finance
Track expenses.
**What you can do:**
* Track balances.
* Split bills.
* Manage expenses.
**Example prompts:**
```text theme={null}
Show current Splitwise balances for my group in this app.
```
```text theme={null}
Display all shared expenses from Splitwise in a dashboard.
```
```text theme={null}
Show who owes what across my Splitwise group.
```
**Permissions requested:**
```text theme={null}
read:user_profile
read:network
write:manage_network
write:delete_network
read:expenses
write:create_expenses
write:modify_expenses
read:metadata
read:notifications
```
***
## Accounting
Manage invoices, expenses, customers, and accounting in QuickBooks Online.
**What you can do:**
* Create and manage invoices.
* Track expenses and payments.
* Manage customers and accounting data.
**Example prompts:**
```text theme={null}
Connect QuickBooks and show my outstanding invoices in this app.
```
```text theme={null}
Create a QuickBooks invoice when a customer places an order in my app.
```
```text theme={null}
Show expenses and customer balances from QuickBooks in a dashboard.
```
**Permissions requested:**
```text theme={null}
com.intuit.quickbooks.accounting
openid
email
profile
```
Handle invoicing and expenses from your app.
**What you can do:**
* Create and send invoices.
* Track expenses.
* Manage clients.
**Example prompts:**
```text theme={null}
Create a FreshBooks invoice when a project is completed in my app.
```
```text theme={null}
Show unpaid FreshBooks invoices in a dashboard.
```
```text theme={null}
Track FreshBooks expenses for a client in this app.
```
**Permissions requested:**
```text theme={null}
user:profile:read
user:clients:read
user:clients:write
user:projects:read
user:projects:write
user:invoices:read
user:invoices:write
user:expenses:read
user:expenses:write
user:credit_notes:read
user:credit_notes:write
user:estimates:read
user:estimates:write
user:uploads:read
user:uploads:write
user:time_entries:read
user:time_entries:write
```
***
## HR
Manage employees.
**What you can do:**
* View directory.
* Track time off.
* Manage HR data.
**Example prompts:**
```text theme={null}
Show my employee directory from BambooHR in this app.
```
```text theme={null}
Display upcoming time off from BambooHR in a dashboard.
```
```text theme={null}
Show employee details and managers from BambooHR.
```
**Permissions requested:**
```text theme={null}
application
application.write
job_opening
job_opening.write
email
openid
company:details
company:info
job_organization
employee
employee.write
employee:contact
employee:demographic
employee:job
employee:management
employee:name
employee:photo
employee_directory
offline_access
public.integration
public.user
webhooks
webhooks.write
time_off
```
# Connecting Databricks to your app
Source: https://docs.base44.com/Integrations/databricks-connector
Run notebooks, execute SQL, and manage data pipelines in Databricks from your Base44 app.
Connect your Base44 app to Databricks to run notebooks, execute SQL, and manage data pipelines, then build dashboards, reports, and AI apps on top of your lakehouse data.
**Databricks is a connector for app builders.** You connect it once with your own Databricks credentials at the workspace level, and your app queries Databricks through that connection. Each person using your app does not connect Databricks themselves.
You need a [**Builder plan**](https://base44.com/pricing) or higher to use connectors in your app.
***
## What you can do
Trigger Databricks notebooks and data pipeline jobs from your app.
Run SQL against your lakehouse and SQL warehouses, and surface the results in your app.
Turn Databricks queries into charts, tables, and dashboards your team can read.
**Example prompts for the AI chat**
```text theme={null}
Run a Databricks notebook to process today's data.
```
```text theme={null}
Execute a SQL query on my Databricks lakehouse.
```
```text theme={null}
Trigger a data pipeline job in Databricks.
```
```text theme={null}
Fetch results from a Databricks SQL warehouse.
```
***
## At a glance
Type identifier
databricks
Category
Analytics
Auth model
OAuth, bring your own credentials
Connector type
For app builders (workspace-level)
Connection config
Databricks workspace URL (for example [https://adb-123456789.10.azuredatabricks.net](https://adb-123456789.10.azuredatabricks.net)), required
***
## Connect it
Databricks is a connector for app builders. You connect it once at the workspace level with your own Databricks OAuth credentials, and it applies to all apps in that workspace.
Before you start, you need:
* A **Databricks OAuth application** in your Databricks account, so you have a **Client ID** and **Client Secret**.
* Your **Databricks workspace URL**, the full address starting with `https://` (for example `https://adb-123456789.10.azuredatabricks.net` or `https://your-workspace.cloud.databricks.com`).
**To add Databricks from your workspace settings:**
1. Click your workspace name at the bottom left.
2. Click **Settings**.
3. Click **Connectors** under **Plugins**.
4. Under **Connectors For App Builders**, find **Databricks**.
5. Click **Add** next to the connector.
6. Add the redirect URI `https://app.base44.com/api/external-auth/callback` to your Databricks OAuth app.
7. Enter a **Connector name** to identify this connector.
8. Enter the **Client ID** and **Client Secret**. Leave **Additional scopes** empty.
9. Enter your **Databricks Workspace URL**.
10. Click **Add Connector**.
Your Databricks Workspace URL must start with `https://` and use a Databricks domain, for example `https://adb-123456789.10.azuredatabricks.net`.
You can also set up Databricks from the AI chat in an app. Describe what you want to build, and when prompted, provide the same connector details. The connector is registered at the workspace level and becomes available across all apps in that workspace.
***
## Scopes
Databricks uses two scopes:
* `all-apis`
* `offline_access`
Both are included automatically when you add the connector, and appear under **Always included**. Register both on your Databricks OAuth app. Leave **Additional scopes** empty unless your app needs more.
***
## Use it in a backend function
Once Databricks is connected, your backend functions can retrieve an access token and query your workspace. Base44 handles the OAuth flow and credential storage.
```javascript theme={null}
const connection = await base44.asServiceRole.connectors.getConnection("databricks");
// Use the connection's access token to call the Databricks REST API.
```
This is a simplified example. For the full pattern, including how to read the connection details and structure the request, see the developer documentation:
Retrieve a connection, read its details, and call the service API from a backend function.
***
## Troubleshooting
Confirm that you are working in the correct workspace and that you have permission to manage workspace connectors. If you still do not see Databricks, [contact support](/Community-and-support/Contacting-support).
Enter a Databricks Workspace URL that starts with `https://` and uses a Databricks domain, for example `https://adb-123456789.10.azuredatabricks.net`.
Check that the redirect URI `https://app.base44.com/api/external-auth/callback` is added to your Databricks OAuth app. Then confirm that the Client ID, Client Secret, and Databricks Workspace URL are correct, and that both scopes are registered on your Databricks OAuth app.
***
## FAQs
You need permission to manage workspace connectors.
Databricks is a workspace-level connector, so it uses a single redirect URI: `https://app.base44.com/api/external-auth/callback`. Add it to your Databricks OAuth app. If you are setting the connector up from the AI chat, the setup form also shows it.
Enter your Databricks Workspace URL. The URL must start with `https://` and use a Databricks domain, for example `https://adb-123456789.10.azuredatabricks.net`.
Yes. You can start from the AI chat in a specific app. If the connector is not set up yet, Base44 asks for the connector details before continuing.
No. The Databricks connector is set up at the workspace level and can be used across apps created in that workspace.
# Connecting GitHub to your app
Source: https://docs.base44.com/Integrations/github-connector
Connect your Base44 app to GitHub and manage repositories, list issues, review pull requests, and automate workflows connected to your codebase.
## About the GitHub connector
The GitHub connector lets your Base44 app securely access GitHub data using OAuth. Use it to build pull request and issue dashboards, automate issue creation, generate release notes, and sync repository activity into your app.
GitHub supports two connection types: a **connector for app builders**, where you connect one GitHub account that powers the whole app, and a **connector for app users**, where each person using your app connects their own GitHub account.
Not sure which type you need? Use a **connector for app builders** when one GitHub account should serve the whole app, or a **connector for app users** when each person connects their own account. See the [connectors overview](/Integrations/Connectors) for how the two types work.
**Before you begin:** You need a [Builder plan](https://base44.com/pricing) or higher to use connectors in your app.
***
## GitHub use cases and prompts
Use the GitHub connector to track engineering work, keep stakeholders updated, and connect code workflows to the rest of your tools.
Build dashboards that list pull requests, show their status, and surface what needs review. You can also create views for recent commits, contributors, and repository activity.
**Example prompts:**
```text theme={null}
Connect to GitHub and show all open pull requests across my repositories that are waiting for review.
```
```text theme={null}
Build a dashboard for one repository showing open pull requests, status checks, reviewers, and last update time.
```
```text theme={null}
Create a page that shows the latest commits for this repository with author, message, and timestamp.
```
```text theme={null}
Add a widget that highlights pull requests marked as "changes requested" and still open.
```
```text theme={null}
Show a list of pull requests merged in the last 7 days, grouped by repository.
```
Turn GitHub issues into structured queues inside your app. Track priorities, assignees, labels, and aging issues, and keep a clear view of what is blocked or overdue.
**Example prompts:**
```text theme={null}
Show open issues from my repository in a table with labels, assignee, priority, and created date.
```
```text theme={null}
Create a page that lists issues labeled "bug" and "p0" and sort them by oldest first.
```
```text theme={null}
Build a weekly report that summarizes new issues created this week and the top labels.
```
```text theme={null}
Add a view that shows issues that have not been updated in 14 days.
```
```text theme={null}
Create a dashboard that counts open issues by label and assignee.
```
Trigger GitHub actions from events in your app, such as creating an issue when a bug is reported, or opening a tracking issue when an incident is created.
**Example prompts:**
```text theme={null}
When a new bug report is created in this app, create a GitHub issue in repo org/repo with the title and steps to reproduce.
```
```text theme={null}
Create a GitHub issue automatically when a critical incident is created, including severity, owner, and incident link.
```
```text theme={null}
When a feature request is marked Approved, open a GitHub issue with acceptance criteria and priority label.
```
```text theme={null}
When a customer ticket is escalated, create a GitHub issue and link back to the ticket.
```
```text theme={null}
Add a button that lets an admin create a GitHub issue from a record in this app.
```
Sync merged pull requests and commits into a changelog, or generate release notes automatically from GitHub activity.
**Example prompts:**
```text theme={null}
Sync merged pull requests from org/repo into a changelog page with title, author, and link.
```
```text theme={null}
Generate release notes for the last 2 weeks based on merged pull requests, grouped by label.
```
```text theme={null}
Create a weekly digest summarizing what shipped, including links to pull requests and issues closed.
```
```text theme={null}
Show a list of releases and their notes for this repository.
```
```text theme={null}
Create a "What's new" page that updates every Friday with this week's merged pull requests.
```
Connect GitHub to Slack, Gmail, BigQuery, Notion, or CRMs to route engineering updates where teams work.
**Example prompts:**
```text theme={null}
Post a message in Slack when a pull request is merged, including title, author, and link.
```
```text theme={null}
Send a weekly Gmail digest with merged pull requests and closed issues, grouped by repository.
```
```text theme={null}
When a GitHub issue labeled "customer" is created, add it to a Notion database and notify #support in Slack.
```
```text theme={null}
Mirror issues labeled "docs" into a documentation backlog table inside my app.
```
```text theme={null}
Create a dashboard that joins GitHub deployment activity with BigQuery performance metrics.
```
When describing multi-tool flows in the AI chat, be explicit about which GitHub event should trigger the action and what details to include (repo, issue/PR number, title, labels, link).
***
## Connecting GitHub to your app
Use the AI chat to connect to GitHub, or connect using a pre-made prompt from your app dashboard.
### Using the AI chat
1. Go to your app editor.
2. Describe what you want to do with GitHub in the AI chat, for example:
* `Connect to GitHub and show all open pull requests for org/repo that are waiting for review.`
* `Create a GitHub issue when a new bug is reported in this app.`
3. Review the **Action required** and **Required permissions** in the side panel.
4. Click **Connect to GitHub**.
5. In the GitHub window that opens:
1. Sign in to the GitHub account you want to connect.
2. Review the requested permissions and click **Authorize**.
6. Return to the editor and let the AI finish creating the GitHub-powered pages, tables, and flows.
### From the app dashboard
1. Click **Dashboard** in your app editor.
2. Click **Integrations**.
3. Click the **Browse** tab.
4. Find **GitHub** and click **Use**.
5. Select the pre-made prompt you want to add to the AI chat.
6. In the AI chat, review the **Action required** and **Required permissions**.
7. Click **Connect to GitHub** and complete the authorization flow.
8. Return to the editor and let the AI finish creating the GitHub-powered flows.
Start with a simple read-only flow (like listing open pull requests) to confirm the connection works. Then add write actions like creating issues.
If you click **Reject** or close the authorization window, the connector is not added. You can run the connection flow again from the AI chat or from **Integrations** → **Browse**.
***
## GitHub scopes and permissions
When you connect GitHub, the connector requests permissions through GitHub’s OAuth authorization flow. The exact permissions you see depend on what your app is trying to build or run.
Always review the permissions shown in the GitHub authorization window before approving access.
**Example permissions you may see:**
* `repo`: Full access to repositories the connected account can access.
* `read:user`: Read basic profile information for the connected account.
* `user:email`: Read email addresses for the connected account.
GitHub permissions may change depending on the flows you build. The authorization window always shows the current access being requested.
***
## FAQs
A shared connection uses one GitHub account for the whole app. To let each person use their own GitHub account instead, use a **connector for app users**, where each person connects their own account.
Yes. Use a **connector for app users** so each person using your app connects their own GitHub account and acts as themselves. A **connector for app builders**, by contrast, uses one GitHub account for the whole app.
1. Go to your app's dashboard.
2. Click **Integrations**.
3. Click the **My integrations** tab.
4. Click the **More actions** icon on the **GitHub** connector and select **Switch account**.
5. Complete the GitHub authorization flow for the new account.
Access to private repositories depends on what you approved during authorization and which repositories your connected GitHub account can access. Reconnect GitHub and review the permissions shown in the authorization window to make sure the connector is authorized for the repositories you need.
To reconnect with the repository access you need, [learn more about managing connectors](/Integrations/Connectors#managing-connectors).
Yes, if the flow you build requires write permissions and you approve them during authorization. Always review the permissions shown in the connection flow before approving access.
Click the **More actions** icon on the connector in your app's **Integrations** tab, then choose an option such as switch account, reconnect, or disconnect. [Learn more about managing connectors](/Integrations/Connectors#managing-connectors).
# Connecting Gmail to your app
Source: https://docs.base44.com/Integrations/gmail-connector
Connect Base44 to Gmail to send, read, and manage emails from your app.
Connect your Base44 app to Gmail to send, read, and manage emails. Use Gmail to deliver alerts, approvals, and reports, to turn incoming messages into records in your app, and to trigger flows when new mail arrives, either from one shared account or from each person's own inbox.
**Which type should you use?** Use a **connector for app builders** when your app sends email from one Gmail account for everyone, for example an ops inbox that emails weekly reports. Use a **connector for app users** when each person sends email from their own Gmail account.
You need a [**Builder plan**](https://base44.com/pricing) or higher to use connectors in your app.
***
## What you can do
Send confirmations, alerts, and personalized follow-ups when something happens in your app.
Read and parse messages that arrive, then turn them into records such as support tickets.
Organize mail as your app works through it, for example mark messages as read or apply labels.
**Example prompts for the AI chat**
```text theme={null}
Send automated confirmation emails when a new order is placed.
```
```text theme={null}
Read and parse incoming emails to create support tickets.
```
```text theme={null}
Trigger a workflow automatically when a new email arrives.
```
```text theme={null}
Send personalized follow-up emails to new leads.
```
```text theme={null}
Notify team members via email when tasks are assigned.
```
***
## At a glance
***
## Connect it
Connect one Gmail account that all flows in your app use.
**To connect Gmail:**
1. Go to your app editor.
2. Describe what you want to do with Gmail in the AI chat, for example: `Connect this app to Gmail and email me when a new ticket is created.`
3. Review the **Action required** and **Required permissions** in the side panel.
4. Click **Connect to Gmail**.
5. In the Google window, select the account you want to connect, review the permissions, and click **Allow**.
6. Return to the editor and let the AI finish creating the flows that use Gmail.
Let each person using your app connect their own Gmail account. An admin sets up the connector once at the workspace level, then each person connects their own account inside your app.
### Prepare your connector
Set up a Google OAuth app and gather its details before you add the connector in Base44.
**To prepare your connector:**
1. Create a Google OAuth app in [Google Cloud](https://cloud.google.com/) to get a **Client ID** and a **Client Secret**.
2. Note the scopes your app needs. See [Gmail scopes and permissions](#gmail-scopes-and-permissions).
3. Register your redirect URIs with the OAuth app. See the card below.
Open **Workspace Settings → Connectors**, click **View redirect URIs for your apps** under **Connectors For App Users**, and select your app.
Register every redirect URI shown with your Google OAuth app. Base44 uses the redirect URI for whichever host a person is on when they authorize, so add them all, including your live, preview, share, and any custom domain URIs. Skipping one means connections fail for users on that host.
### Add the connector
**To add the connector:**
1. Click your workspace name at the bottom left.
2. Click **Settings**.
3. Click **Connectors** under **Plugins**.
4. Under **Connectors For App Users**, add Gmail and enter your **Client ID**, **Client Secret**, and **Scopes**.
You can also add the connector from the AI chat in your app.
Treat your Client Secret like a password. Do not share it or include it in screenshots. Only enter it when Base44 asks for it during setup.
### Let people connect
Each person connects their own Gmail account inside your app. Prompt the AI chat to add a feature where people sign in with Gmail, then each person connects their own account when they use it.
***
## Use it in a backend function
Once Gmail is connected, your backend functions can retrieve an access token and call the Gmail API directly. Base44 handles the OAuth flow and token storage.
* For a shared connection, use `getConnection()` to retrieve the token.
* For an app user connection, use `getCurrentAppUserConnection()` so each request uses the signed-in person's token.
```javascript theme={null}
// Shared connection: one account the whole app uses
const connection = await base44.asServiceRole.connectors.getConnection("gmail");
// Use the connection's access token to call the Gmail API.
```
This is a simplified example. The setup and full code patterns are the same for every connector. See the developer guides for the complete pattern:
Configure, deploy, and call a shared connection from a backend function.
Retrieve a per-user token and call the API as the signed-in person.
***
## Gmail scopes and permissions
When you connect Gmail, the connector requests permissions (scopes) that control what your app can do with your Gmail account. Below is the current list of Gmail scopes the connector may request.
* `email`: Identify the Google account being connected.
* `https://www.googleapis.com/auth/gmail.readonly`: Read messages and metadata.
* `https://www.googleapis.com/auth/gmail.send`: Send messages.
* `https://www.googleapis.com/auth/gmail.labels`: Manage labels.
* `https://www.googleapis.com/auth/gmail.modify`: Modify messages, for example mark as read or apply a label.
* `https://www.googleapis.com/auth/gmail.compose`: Create and update drafts.
Scope lists may change over time. Always review the permissions shown during the connection flow.
***
## Troubleshooting
The redirect URI registered in your Google OAuth app must exactly match one shown in **View redirect URIs for your apps** for that app. Each app has its own set of redirect URIs, so add every URI shown for the app you are connecting.
If your Google OAuth app is in testing mode, only approved test users can connect. Publish or move your OAuth app out of testing mode so anyone using your app can connect their own account.
***
## FAQs
1. Go to your app dashboard and click **Integrations**.
2. Click the **My integrations** tab.
3. Find **Gmail** and click the **More Actions** icon , then **Switch account**.
Yes. In the AI chat, specify the subject line, message body, formatting, recipients, and any dynamic fields.
You can also edit the generated backend functions in **Dashboard → Code → Functions** to further customize the email payload.
Yes. Use a **connector for app users** so each person connects their own Gmail account. See the [connectors overview](/Integrations/Connectors).
Click the **More actions** icon on the connector in your app's **Integrations** tab, then choose an option such as switch account, reconnect, or disconnect. [Learn more about managing connectors](/Integrations/Connectors#managing-connectors).
# Connecting Google Search Console to your app
Source: https://docs.base44.com/Integrations/google-search-console-connector
Connect your Base44 app to Google Search Console to access search performance data, sitemaps, URL inspection, and indexing status.
## About the GSC connector
The Google Search Console (GSC) connector lets you access your app's search performance data, sitemaps, URL inspection results, and indexing status directly from Base44. Use it to analyze search queries, monitor indexing coverage, identify crawl errors, and submit sitemaps, all without leaving the AI chat.
Google Search Console supports two connection types: a **connector for app builders**, where you connect one Google account that powers the whole app, and a **connector for app users**, where each person using your app connects their own account.
Not sure which type you need? Use a **connector for app builders** when one Google account should serve the whole app, or a **connector for app users** when each person connects their own account. See the [connectors overview](/Integrations/Connectors) for how the two types work.
***
## Use cases and prompts
Use the GSC connector to monitor your app's search visibility, diagnose issues, and act on SEO data from within the AI chat.
Understand how your app is performing in search results, which queries drive traffic, and how click-through rates are trending.
**Example prompts:**
```text theme={null}
Analyze search performance for my homepage over the last 28 days.
```
```text theme={null}
Show me the top 10 queries bringing clicks to my app this month.
```
```text theme={null}
Compare click-through rates for my top pages this week versus last week.
```
```text theme={null}
Which pages have high impressions but low clicks?
```
Check which pages are indexed, identify coverage errors, and understand why certain pages may be excluded from search results.
**Example prompts:**
```text theme={null}
Identify any indexing errors or coverage issues for my app.
```
```text theme={null}
Which pages are excluded from the index and why?
```
```text theme={null}
Check if my most important pages are indexed correctly.
```
```text theme={null}
Are there any crawl errors I should fix?
```
Inspect specific URLs to check their index status, or submit your sitemap so Google can discover your pages more efficiently.
**Example prompts:**
```text theme={null}
Inspect this URL and tell me if it is indexed: https://www.yourdomain.com/about
```
```text theme={null}
Submit my sitemap and confirm it was accepted.
```
```text theme={null}
Check the status of my sitemap submission.
```
```text theme={null}
Are there any errors in my submitted sitemap?
```
Base44 automatically generates your sitemap at `/sitemap.xml`. When describing sitemap tasks in the AI chat, you can reference this path directly.
***
## Connecting GSC to your app
Use the AI chat to connect to GSC, or connect using a pre-made prompt from your app dashboard.
**Before you begin:**
* You need a [Builder plan](https://base44.com/pricing) or higher to use connectors in your app.
* Your app's domain must be verified in GSC before connecting. If you have not done this yet, see [Getting your app found in search](/Performance-and-SEO/SEO-and-search-visibility).
### Using the AI chat
1. Go to your app editor.
2. Describe what you want to do with GSC in the AI chat, for example:
* `Connect this app to Google Search Console and show me my top search queries.`
* `Check my indexing coverage and flag any errors.`
3. Review the **Action required** and **Required permissions** in the side panel.
4. Click **Connect to Google Search Console**.
5. In the Google window that opens:
1. Select the Google account that has access to your GSC property.
2. Review the permissions and click **Allow**.
6. Return to the editor and let the AI complete the task.
### From the app dashboard
1. Click **Dashboard** in your app editor.
2. Click **Integrations**.
3. Click the **Browse** tab.
4. Find **Google Search Console** and click **Use**.
5. Select the pre-made prompt you want to add to the AI chat.
6. In the AI chat, review the **Action required** and **Required permissions**.
7. Click **Connect to Google Search Console**.
8. In the Google window that opens:
1. Select the Google account that has access to your GSC property.
2. Review the permissions and click **Allow**.
9. Return to the editor and let the AI complete the task.
After connecting, test the integration by asking the AI chat a question about your search data, such as your top queries from the last 7 days, and confirm the response matches what you see in GSC.
If you click **Skip** in the Google authorization window, the connector is not added. You can run the connection flow again from the AI chat or from **Integrations → Browse**.
***
## GSC scopes and permissions
When you connect GSC, the connector requests permissions (scopes) that control what your app can do with your Search Console data.
Below is the current list of scopes the connector may request.
* `https://www.googleapis.com/auth/webmasters`: Grants full access to manage and view data in GSC.
* `https://www.googleapis.com/auth/webmasters.readonly`: Provides read-only access to view data in GSC.
**Notes:**
* Scope lists may change over time. Always review the permissions shown during the connection flow.
* If you need a scope that is not listed here, [share your feedback with us](https://feedback.base44.com/?b=67cf45295430bd6b6434b68c).
***
## FAQs
Click a question below to learn more about the GSC connector.
Use the Google account that has owner or full access to the GSC property for your app's domain. If you are not sure which account has access, check the users list in GSC under **Settings > Users and permissions**.
Each app connects to one Google account at a time. If you manage multiple properties under the same Google account, the AI chat can query data across them when you specify which property you want.
Yes. Use a **connector for app users** so each person using your app connects their own Google account. A **connector for app builders**, by contrast, uses one Google account for the whole app.
1. Go to your app dashboard and click **Integrations**.
2. Click the **My integrations** tab.
3. Find **Google Search Console** and click the **More Actions** icon , then **Switch account**.
If the AI chat is not returning GSC data, check that:
* The connector is listed under **My integrations** and shows as connected.
* The Google account you used has access to the GSC property for your app's domain.
* Your app's domain is verified in GSC.
If the issue continues, try disconnecting and reconnecting the connector.
Click the **More actions** icon on the connector in your app's **Integrations** tab, then choose an option such as switch account, reconnect, or disconnect. [Learn more about managing connectors](/Integrations/Connectors#managing-connectors).
# Connecting LinkedIn to your app
Source: https://docs.base44.com/Integrations/linkedin-connector
Connect your Base44 app to LinkedIn to publish posts, share updates, display profile or organization data, and automate LinkedIn workflows without managing API keys.
## About the LinkedIn connector
The [LinkedIn connector](https://base44.com/integrations/connectors/linkedin) lets your app publish posts to your LinkedIn profile or to a LinkedIn organization page where the connected account has admin access. It also lets your app read LinkedIn profile and organization data where supported.
You can automate product updates, share company milestones, publish content from internal workflows, and display LinkedIn data inside your app.
LinkedIn supports two connection types: a **connector for app builders**, where you connect one LinkedIn account that powers the whole app, and a **connector for app users**, where each person using your app connects their own LinkedIn account.
Not sure which type you need? Use a **connector for app builders** when one LinkedIn account should serve the whole app, or a **connector for app users** when each person connects their own account. See the [connectors overview](/Integrations/Connectors) for how the two types work.
***
## LinkedIn use cases and prompts
Use the LinkedIn connector to publish content, manage company presence, and display LinkedIn data in your app.
Automatically publish posts to your LinkedIn profile when important events happen in your app.
**Example prompts:**
```text theme={null}
Post a LinkedIn update when a feature release is marked as Approved in this app.
```
```text theme={null}
When a new hire record is marked as Published, post an announcement to my LinkedIn profile with their name, role, and start date.
```
```text theme={null}
Every Friday at 4pm, post a build-in-public update to my LinkedIn profile summarizing key metrics from this dashboard.
```
Publish content directly to a LinkedIn organization page where the connected account has admin access.
**Example prompts:**
```text theme={null}
When an announcement is marked as Approved, publish it to our LinkedIn organization page.
```
```text theme={null}
When a KPI reaches its target value, publish a company milestone post to our LinkedIn organization page with the metric name and value.
```
```text theme={null}
When a new webinar is added to this app, publish a LinkedIn post to our organization page using the webinar title and registration link.
```
Use LinkedIn profile and organization data to power dashboards and internal tools.
**Example prompts:**
```text theme={null}
Display my LinkedIn profile name, headline, and profile picture in a dashboard page.
```
```text theme={null}
Show our LinkedIn organization page name, description, and follower count inside this app.
```
```text theme={null}
Add a KPI card showing LinkedIn follower count if available.
```
Retrieve engagement metrics for LinkedIn posts where supported by LinkedIn's API permissions.
**Example prompts:**
```text theme={null}
Display likes, comments, and shares for LinkedIn posts created by this app.
```
```text theme={null}
Show the top-performing LinkedIn organization post from the past 30 days.
```
Availability of engagement metrics depends on LinkedIn API permissions and account type. Some analytics may only be available for organization posts.
Trigger LinkedIn posts based on events from other systems connected to your app.
**Example prompts:**
```text theme={null}
When a HubSpot deal moves to Closed Won, publish a LinkedIn post announcing the milestone with the deal name and value.
```
```text theme={null}
Every Monday, publish a LinkedIn post summarizing last week's KPIs pulled from BigQuery.
```
```text theme={null}
When a Notion page is marked as Approved, publish a LinkedIn post using the page title and a short excerpt.
```
***
## Connecting LinkedIn to your app
Use the AI chat to connect to LinkedIn, or connect using a pre-made prompt from your app dashboard.
**Before you begin:** You need a [Builder plan](https://base44.com/pricing) or higher to use connectors in your app.
### Using the AI chat
1. Go to your app editor.
2. Describe what you want to do with LinkedIn in the AI chat.
3. Review the **Action required** and **Required permissions** in the side panel.
4. Click **Connect to LinkedIn**.
5. In the LinkedIn window that opens:
1. Sign in to the LinkedIn account you want to connect.
2. Review the permissions and click **Allow**.
6. Return to the editor and let the AI finish creating the flows that use LinkedIn.
### From the app dashboard
1. Click **Dashboard** in your app editor.
2. Click **Integrations**.
3. Click the **Browse** tab.
4. Find **LinkedIn** and click **Use**.
5. Review the **Required permissions**.
6. Click **Connect to LinkedIn** and complete the authorization flow.
Start by testing a simple plain-text post to confirm the connection works. Once successful, expand to structured posts, links, or dynamic content.
If you click **Skip** in the LinkedIn authorization window, the connector is not added. You can run the connection flow again from the AI chat or from **Integrations → Browse**.
***
## LinkedIn scopes and permissions
When you connect LinkedIn, the connector requests permissions (scopes) that control what your app can do with the connected account.
Below is the current list of LinkedIn scopes the connector may request, grouped by capability.
**Profile access and identity**
* `openid`: Authenticate the LinkedIn account using OpenID Connect.
* `profile`: Read basic profile information such as name and headline.
* `email`: Read the primary email address associated with the LinkedIn account.
* `r_profile_basicinfo`: Read additional profile details where supported.
* `r_basicprofile`: Read legacy basic profile fields where applicable.
* `r_1st_connections_size`: Read the number of first-degree connections.
* `r_verify`: Verify the identity of the connected account where supported.
**Publishing to a personal profile**
* `w_member_social`: Create, modify, and delete posts, comments, and reactions on behalf of the connected member.
**Organization pages**
* `r_organization_social`: Read posts, comments, reactions, and engagement data from organization pages.
* `w_organization_social`: Create, modify, and delete posts, comments, and reactions on organization pages.
* `r_organization_admin`: Read organization page information and admin details.
* `rw_organization_admin`: Manage organization page settings and administration where permitted.
**Advertising and reporting**
* `r_ads`: Read LinkedIn advertising account information.
* `r_ads_reporting`: Read LinkedIn advertising performance and reporting data.
* `rw_ads`: Manage LinkedIn advertising campaigns where permitted.
Scope lists may change over time. Always review the permissions shown during the LinkedIn authorization flow.
***
## FAQs
No. Each app uses one shared LinkedIn account.
Yes. Use a **connector for app users** so each person using your app connects their own LinkedIn account. A **connector for app builders**, by contrast, uses one LinkedIn account for the whole app.
Access to advertising and detailed reporting features depends on LinkedIn API permissions and may require additional LinkedIn program approval.
The connected LinkedIn account must have admin access to the organization page you are trying to post to.
Click the **More actions** icon on the connector in your app's **Integrations** tab, then choose an option such as switch account, reconnect, or disconnect. [Learn more about managing connectors](/Integrations/Connectors#managing-connectors).
# Connecting Slack to your app
Source: https://docs.base44.com/Integrations/slack-connectors
Connect Base44 to Slack to post messages, alert teammates, and read channel data.
Connect your Base44 app to Slack to post messages, alert teammates, and read conversations. Base44 offers two Slack connectors: **Slack User** connects as a person in your workspace, and **Slack Bot** posts as a configurable bot identity.
**Which type should you use?** Use a **connector for app builders** when everyone shares one Slack connection, for example posting to a company channel. Use a **connector for app users** when each person connects their own Slack account.
You need a [**Builder plan**](https://base44.com/pricing) or higher to use connectors in your app.
***
## What you can do
Send updates or announcements to a channel when something happens in your app.
Alert the right people the moment a ticket, deadline, or threshold is hit.
Read channel history to build digests, dashboards, or searchable views.
**Example prompts for the AI chat**
```text theme={null}
Send a Slack alert to #incidents when a deployment fails, including environment and error summary.
```
```text theme={null}
Send a daily summary of completed tasks to #team-updates at 5pm, grouped by assignee.
```
```text theme={null}
Build a dashboard showing where I have been mentioned in Slack and which messages still need a reply.
```
***
## At a glance
Acts with a connected user's permissions. Best for reading channel history, searching messages, tracking mentions, and building dashboards from Slack data.
Posts as a branded bot you can name and style. Best for incident alerts, release announcements, and scheduled summaries.
***
## Connect it
Connect one Slack account that all flows in your app use.
**To connect Slack:**
1. Go to your app editor.
2. Describe what you want to do with Slack in the AI chat.
3. Review the **Action required** and **Required permissions** in the side panel.
4. Click the **Connect** button to authorize the required Slack connector.
5. In the Slack window, select your workspace, review the permissions, and click **Allow**.
6. Return to the editor and let the AI finish creating the Slack-powered flows.
Let each person using your app connect their own Slack account. An admin sets up the connector once at the workspace level, then each person connects their own account inside your app.
**To prepare your connector details:**
1. Create a Slack app in [Slack API Applications](https://api.slack.com/apps) to get a Client ID and Client Secret.
2. Add your Base44 redirect URIs to the Slack app. See the card below.
3. Note the scopes your app needs.
Under **Connectors For App Users**, click **View redirect URIs for your apps** and select your app. Register every URI shown with your Slack app before saving your **Client ID** and **Client Secret**. You'll see:
* a **Builder** URI: `https://app.base44.com/api/external-auth/callback`
* four **Live app** URIs for your app, following this pattern:
* `https://your-app.base44.app/api/external-auth/callback`
* `https://app--your-app.base44.app/api/external-auth/callback`
* `https://preview--your-app.base44.app/api/external-auth/callback`
* `https://share--your-app.base44.app/api/external-auth/callback`
If your app uses a custom domain, the modal also shows redirect URIs for it. Register those too.
**To add the connector:**
1. Click your workspace name at the bottom left.
2. Click **Settings**.
3. Click **Connectors** under **Plugins**.
4. Under **Connectors For App Users**, add Slack and enter your **Client ID**, **Client Secret**, and **Scopes**.
You can also add the connector from the AI chat in your app.
Treat your Client Secret like a password. Do not share it or include it in screenshots. Only enter it when Base44 asks for it during setup.
**To connect an account:**
Each person connects their own Slack account inside your app. Prompt the AI chat to add a feature where people connect Slack, then each person connects their own account when they use it.
To post as a branded bot, use the `slackbot` connector and prompt the AI chat to set the bot name and icon, for example: `Send messages as "Deploy Bot" with a rocket emoji icon.`
***
## Use it in a backend function
Once Slack is connected, your backend functions can retrieve an access token and call the Slack API directly. Base44 handles the OAuth flow and token storage.
* For a shared connection, use `getConnection()` to retrieve the token.
* For an app user connection, use `getCurrentAppUserConnection()` so each request uses the signed-in person's token.
```javascript theme={null}
// Shared connection: one account the whole app uses
const connection = await base44.asServiceRole.connectors.getConnection("slack");
// Use the connection's access token to call the Slack API.
```
This is a simplified example. The setup and full code patterns are the same for every connector. See the developer guides for the complete pattern:
Configure, deploy, and call a shared connection from a backend function.
Retrieve a per-user token and call the API as the signed-in person.
***
## Slack scopes and permissions
When you connect Slack User or Slack Bot, the connector requests permissions (scopes) that control what your app can do in the workspace. Below is the current list of the Slack scopes the connectors may request, grouped by capability.
**Channels (public channels)**
* `channels:read`: Read information about public channels in your workspace, for example names, topics, and basic metadata.
* `channels:write`: Create and manage public channels, or update channel details.
* `channels:history`: Read message history from public channels where the app has access.
* `channels:join`: Allow the app to join public channels in the workspace.
**Messages and content**
* `chat:write`: Send and update messages in channels, groups, and DMs where the app has access.
* `reactions:read`: Read reactions added to messages.
* `files:read`: Read information about files shared in conversations the app can access.
**Search and users**
* `search:read`: Search messages and files the connected account can access.
* `users:read`: Read basic profile information for people in the workspace.
Scope lists may change over time. Always review the permissions shown during the connection flow. Slack Bot must be added to a private channel before it can post there.
***
## Troubleshooting
The redirect URI registered in your Slack app must exactly match one shown in **View redirect URIs for your apps** for that app. Each app has its own set of redirect URIs, so add every URI shown for the app you are connecting.
If your Slack app is not available to the workspaces the people using your app are in, they cannot connect. Make your Slack app available to those workspaces so anyone using your app can connect their own account.
***
## FAQs
1. Go to your app dashboard and click **Integrations**.
2. Click the **My integrations** tab.
3. Find **Slack** or **Slack Bot** and click the **More Actions** icon , then **Switch account**.
4. Complete the Slack authorization flow for the new workspace.
Yes. When you describe Slack messages in the AI chat, you can specify:
* The text content and formatting.
* Whether to include fields like IDs, links, and counts.
* How often and when messages are sent.
You can also open the generated backend functions in **Dashboard → Code → Functions** to fine-tune the message payload (for example, using blocks for more complex layouts).
Slack Bot must be explicitly added to private channels before it can post messages there.
**In your Slack workspace:**
1. Open the private channel.
2. Click the channel name.
3. Go to the **Integrations** tab.
4. Click **Add apps** and select **Base44**.
Once added, your app's Slack Bot can post messages in that channel.
Click the **More actions** icon on the connector in your app's **Integrations** tab, then choose an option such as switch account, reconnect, or disconnect. [Learn more about managing connectors](/Integrations/Connectors#managing-connectors).
# Connecting Snowflake to your app
Source: https://docs.base44.com/Integrations/snowflake-connector
Query data, run analytics, and manage data warehouses in Snowflake from your Base44 app.
Connect your Base44 app to Snowflake to query data, run analytics, and manage data warehouses, then build dashboards and reports on top of your warehouse data.
**Snowflake is a connector for app builders.** You connect it once with your own Snowflake credentials at the workspace level, and your app queries the warehouse through that connection. Each person using your app does not connect Snowflake themselves.
You need a [**Builder plan**](https://base44.com/pricing) or higher to use connectors in your app.
***
## What you can do
Run SQL against your Snowflake warehouse and surface the results in your app.
Turn warehouse queries into charts, tables, and dashboards your team can read.
Combine Snowflake with other connectors, for example alert a Slack channel when a metric drops.
**Example prompts for the AI chat**
```text theme={null}
Query sales data from my Snowflake warehouse and display results.
```
```text theme={null}
Run an analytics report on customer data stored in Snowflake.
```
```text theme={null}
Fetch inventory levels from the Snowflake data warehouse.
```
```text theme={null}
Execute a SQL query to analyze trends in my Snowflake tables.
```
***
## At a glance
***
## Connect it
Snowflake is a connector for app builders, so you connect it once at the workspace level with your own warehouse credentials.
Before you begin, you need:
* A **Snowflake OAuth security integration** in your Snowflake account, so you have a **Client ID** and **Client Secret**.
* Your Snowflake **account identifier** (the `subdomain`, for example `xy12345.us-east-1`).
* Credentials authorized to query the databases you want to use.
**To add Snowflake from your workspace settings:**
1. Click your workspace name at the bottom left.
2. Click **Settings**.
3. Click **Connectors** under **Plugins**.
4. Under **Connectors For App Builders**, find **Snowflake**.
5. Click **Add** next to the connector.
6. Add the redirect URI `https://app.base44.com/api/external-auth/callback` to your Snowflake OAuth integration.
7. Enter a **Connector name** to identify this connector.
8. Enter the **Client ID** and **Client Secret**. Leave **Additional scopes** empty.
9. Enter your **Snowflake Account** identifier.
10. Click **Add Connector**.
Your Snowflake Account is your account identifier, for example `xy12345.us-east-1`. Do not include `.snowflakecomputing.com`.
You can also set up Snowflake from the AI chat in an app. Describe what you want to build, and when prompted, provide the same connector details. The connector is registered at the workspace level and becomes available across all apps in that workspace.
***
## Scopes
You do not choose Snowflake scopes in Base44. Snowflake does not expose selectable scopes. A Snowflake admin sets access inside Snowflake, according to user roles.
Leave **Additional scopes** empty when you register the connector. Snowflake then applies the default role for the account that connects, and Base44 adds the `refresh_token` scope automatically, listed under **Always included**.
***
## Use it in a backend function
Once Snowflake is connected, your backend functions can retrieve an access token and query your warehouse. Base44 handles the OAuth flow and credential storage.
```javascript theme={null}
const connection = await base44.asServiceRole.connectors.getConnection("snowflake");
// Use the connection's access token to call the Snowflake SQL API.
```
This is a simplified example. For the full pattern, including how to read the connection details and structure the request, see the developer documentation:
Retrieve a connection, read its details, and call the service API from a backend function.
***
## Troubleshooting
Confirm that you are working in the correct workspace and that you have permission to manage workspace connectors. If you still do not see Snowflake, [contact support](/Community-and-support/Contacting-support).
Enter only your Snowflake account identifier, for example `xy12345.us-east-1`. Do not include `.snowflakecomputing.com`.
Check that the redirect URI `https://app.base44.com/api/external-auth/callback` is added to your Snowflake OAuth integration. Then confirm that the Client ID, Client Secret, and Snowflake Account are correct, and that the Snowflake role has access to the databases you are querying.
***
## FAQs
You need permission to manage workspace connectors.
Snowflake is a workspace-level connector, so it uses a single redirect URI: `https://app.base44.com/api/external-auth/callback`. Add it to your Snowflake OAuth integration. If you are setting the connector up from the AI chat, the setup form also shows it.
Enter your Snowflake account identifier, for example `xy12345.us-east-1`. Do not include `.snowflakecomputing.com`.
Yes. You can start from the AI chat in a specific app. If the connector is not set up yet, Base44 asks for the connector details before continuing.
No. The Snowflake connector is set up once at the workspace level and can be used across apps in that workspace.
# Optimizing App Performance
Source: https://docs.base44.com/Performance-and-SEO/App-performance
Check your app’s performance metrics and optimize loading speed and responsiveness.
## Checking your app performance
Your app’s performance affects how quickly it loads and responds to users. You can measure this using your browser’s **Developer Tools**.
The key performance metrics include: **Largest Contentful Paint (LCP)**, **Cumulative Layout Shift (CLS)**, and **Interaction to Next Paint (INP)**.
Always check your **published app**, not the builder preview. Performance scores are most accurate when testing the live version on both desktop and mobile.
*Example of Chrome DevTools displaying local performance metrics for LCP, CLS, and INP.*
## Optimizing your app performance
Optimize your app’s performance by focusing on the key metrics that affect how fast it loads, runs, and responds. Each one highlights a different aspect of the user experience, and you can prompt the Base44 AI chat to optimize them directly.
### Largest Contentful Paint (LCP)
LCP measures the time it takes for the largest visible element (image, text, or video) above the fold to appear.
**To optimize LCP:**
* Keep visible content above the fold light and fast.
* Move heavy elements (videos, iFrames, grids, lists) below the fold.
* Optimize and compress images before uploading.
* Use **lazy loading** for offscreen images.
*Prompt the AI:* "Apply lazy loading to images and videos below the fold."\
The AI will automatically add the proper attributes or dynamic imports.
### Cumulative Layout Shift (CLS)
CLS measures unexpected movement in your app's layout while loading.
**To optimize CLS:**
* **Add size definitions:** Give every image and video fixed height and width to avoid shifting as they load.
* **Optimize custom fonts:** Use the `font-display: swap;` property in your CSS to prevent invisible text during font loading.
* **Reserve space for dynamic content:** Set fixed spaces for ads, pop-ups, or anything that loads after the initial render.
* **Minimize DOM updates:** Limit layout changes caused by automatic scripts.
*Prompt the AI:*
* “Set fixed height and width for all media elements."
* “Prevent layout shifts while fonts load.”
The AI will automatically update the component styles or CSS.
### Interaction to Next Paint (INP)
INP measures how fast your app responds to clicks, taps, or keyboard input.
**To optimize INP:**
* Avoid long-running scripts triggered by user actions.
* Defer or remove non-essential scripts from the initial load.
* Keep layouts simple and animations minimal.
* Monitor responsiveness in the **Performance** tab.
*Prompt the AI:* “Defer non-critical scripts until after interaction” or “Simplify animations for better responsiveness.” The AI will optimize code execution order and animations during generation.
### Content Delivery Network (CDN) and caching
A **Content Delivery Network (CDN)** delivers copies of your app from servers closest to the user’s location, improving load times. Base44 automatically uses **Cloudflare CDN** for caching and delivery.
*Prompt the AI:* “Republish my app to refresh cached files.”\
Republishing triggers Base44’s automatic Cloudflare cache update.
Currently, you can't clear the CDN cache manually.
***
## FAQs
Click a question below to learn more about optimizing site performance.
You can check your app’s performance using **Chrome DevTools** or **Google PageSpeed Insights**.
**To check with Chrome:**
* **Quick check:**
1. Open your **published app**.
2. Right-click anywhere and select **Inspect**.
3. In the right panel, Chrome displays local metrics for **Largest Contentful Paint (LCP)**, **Cumulative Layout Shift (CLS)**, and **Interaction to Next Paint (INP)**.\
This gives you an instant view of how your live page performs.
* **Detailed check:**
1. Open **Chrome DevTools**.
2. Click the **Performance** tab.
3. Click **Record**, reload the page, and stop recording once it finishes loading.
4. Review the full performance timeline, including **First Contentful Paint (FCP)**, **LCP**, and main-thread activity.
**To check with PageSpeed:**
1. Go to [PageSpeed Insights](https://pagespeed.web.dev).
2. Enter your app’s URL and click **Analyze**.
3. Review the **Insights** and **Diagnostics** sections for ways to improve your app’s performance.
Aim to meet or exceed these recommended scores for the best experience:
* **Largest Contentful Paint (LCP):** 2.5 seconds or less.
* **Cumulative Layout Shift (CLS):** 0.1 or less.
* **Interaction to Next Paint (INP):** 200 milliseconds or less.
These benchmarks follow Google’s standards for excellent site performance and help ensure your app runs fast, stays stable, and responds smoothly.
A low performance score usually means some elements on your site are taking longer to load than expected. Heavy above-the-fold content, large scripts, or unoptimized media are the most common causes.
**To troubleshoot:**
1. Run your app through [Google PageSpeed Insights](https://pagespeed.web.dev) and check for:
* **Render-blocking resources:** move scripts to `async` or `defer`.
* **Large JavaScript bundles:** simplify or split vendor code.
* **Unoptimized images:** compress and re-upload.
2. In **Chrome DevTools**, open the **Network** tab and click **Reload** to see how your files load in real time.
* Watch for files taking more than 1–2 seconds to load — these are likely slowing your app.
**Quick fixes:**
* Move videos, data lists, or heavy sections below the fold.
* Compress and resize images before uploading.
* Remove unused scripts or CSS.
* Republish your app to refresh CDN caching.
*Prompt the AI:* “Optimize my app for faster LCP and INP” or “Reduce above-the-fold load size.” The AI will automatically apply lazy loading and script deferring where relevant.
* Host videos externally (e.g. on **Vimeo** or **YouTube**).
* Add `loading="lazy"` to embedded videos or iframes.
* Place videos **below the fold** to prioritize text and images.
* Disable **autoplay** or **loop** for large background videos.
Mobile tests run on slower networks and devices, so scores are usually lower than desktop. Focus on optimizing your **LCP** and **INP** for mobile first by reducing heavy media, deferring non-critical scripts, and simplifying layouts.
# Getting your app found in search
Source: https://docs.base44.com/Performance-and-SEO/SEO-and-search-visibility
Base44 provides a solid technical SEO and GEO foundation for your app so you can focus on content, trust, and visibility.
Base44 manages your app's core technical SEO and GEO foundation so search engines and AI-powered platforms can discover, crawl, and index your content. The same elements that search engines reward, like high-quality content, structured data, and a strong backlink profile, are also the signals that AI models like ChatGPT, Gemini, and Perplexity use when deciding what to recommend. Strong SEO and strong GEO go hand in hand, and both start with the same fundamentals.
**Want to check your app's SEO & GEO?** Base44 has a built-in tool that scores your app and surfaces fixes directly in your dashboard. [Check your app's SEO and GEO](/Performance-and-SEO/checking-your-seo-and-geo) score.
When an AI assistant generates a list of recommended businesses, the site name and favicon are often the only brand assets someone sees. This makes them very important for brand recognition and credibility in an AI-first search landscape. They are not only browser assets, they are key parts of your app's digital identity.
When you publish your app on a custom domain, Base44 creates and maintains essential files and settings for you in the background. These include clean HTML, structured headings, XML sitemaps, robots.txt, canonical tags, and performance-focused hosting.
You do not need to upload or manage technical SEO or GEO files yourself. Your main focus is to publish on a custom domain and provide clear, trustworthy content that supports search engine optimization (SEO) across major search engines such as Google and Bing, and generative engine optimization (GEO) across AI-powered platforms like ChatGPT, Gemini, and Perplexity.
Base44's SEO setup is designed and supported for apps that are published on a [custom domain](/Setting-up-your-app/Setting-up-your-custom-domain). Free Base44 URLs can still be crawled by search engines, but they are not intended for long-term, production SEO.
***
## How your app's SEO and GEO works
Base44 sets up and maintains the main technical elements that search engines and AI platforms expect. This covers how your pages are discovered, how they are crawled, and how your app is represented across the web and in AI-generated answers. These technical signals support both search engine optimization (SEO) and generative engine optimization (GEO).
Base44 apps are client-side rendered (CSR) for user interactions, but the platform automatically serves crawlers a fully rendered version of each page, including meta tags, structured data, and your real page content. This means AI crawlers and search engines can read your pages without executing JavaScript, and Base44 refreshes this rendered content automatically when you publish and when your app's data changes. Optimizing your app for search engines also improves its visibility to AI assistants that rely on those search indexes.
**Core SEO and GEO features handled automatically:**
For apps published on a custom domain, Base44 automatically manages:
* **Meta titles:** Each page has a unique meta title based on its URL (for pages without URL parameters). This helps search engines distinguish between pages and show clear titles in results.
* **Heading structure and semantic HTML:** Base44 serves search engine and AI crawlers a fully rendered version of each page, with your real headings, content, and semantic structure, so they can understand your pages without executing JavaScript. If a rendered version is not yet ready for a page, Base44 falls back to a structured snapshot of your app so crawlers always receive meaningful content.
* **Canonical tags:** Base44 adds self-referencing canonical tags to every page. For URLs that include query parameters, Base44 intelligently filters out tracking parameters (such as `utm_*` and `fbclid`) while preserving content-affecting parameters (such as `?id=123`). Parameters are also sorted consistently so that the same page always produces the same canonical URL regardless of parameter order.
* **Sitemap (sitemap.xml):** Base44 automatically generates and serves a sitemap at `/sitemap.xml`. Public, indexable pages are included, while private or internal pages are excluded. You can submit this sitemap directly in Google Search Console and other webmaster tools.
* **robots.txt:** Base44 creates and serves a `robots.txt` file for both free and paid apps. It allows search engines and AI crawlers to access your public content while protecting non-public or technical routes from indexing.
* **AI crawler access (llms.txt):** You can enable `llms.txt` generation from the **SEO & GEO** page in your dashboard. When enabled, Base44 generates a lightweight file that gives AI crawlers like GPTBot, ChatGPT-User, ClaudeBot, and PerplexityBot a clear, structured summary of what your app does. This supports GEO by helping AI-powered search tools understand and recommend your app. It is off by default.
* **Clean URLs and routing:** Your app uses clean, readable URLs rather than duplicate or unnecessary paths. This supports better crawl behavior and improves clarity for visitors.
* **Internal linking:** Navigation and internal links use proper anchor tags and clean URLs so search engines can follow and understand your app structure.
* **Social sharing tags and previews (Open Graph and Twitter):** Base44 sets social metadata so links to your app show a sensible title, description, and image when shared on social platforms. Social card images are automatically resized to 1200 × 630 and include the correct URL metadata, which reduces Open Graph and card size warnings and helps previews display consistently across major platforms such as Facebook, X (Twitter), LinkedIn, and WhatsApp. These previews use the title, description, and logo you configure in your app's settings.
* **Mobile-friendly layout:** Apps generated with Base44 are responsive and adapt to different screen sizes. This supports mobile-first indexing and improves your visitors' experience on phones and tablets.
* **Image optimization and performance:** Images and assets are served in optimized ways where possible, and the hosting environment is tuned for good performance. Strong performance helps with Core Web Vitals and overall search quality signals.
* **Other site metadata:** Base44 manages technical files such as the web app manifest and favicon for custom domains. These help browsers and devices display your app correctly in tabs, shortcuts, and installable views.
In addition, you can use the Code tab in your dashboard to edit the generated `index.html` file for your app. This lets you add trusted `` tags and `
Tasks
Loading...
{{ task.title }}
```
Use the exact entity name from your schema when calling the SDK, including capitalization. By convention, entity names begin with a capital letter. For example, if your schema has `"name": "Task"`, you access it as `base44.entities.Task.list()`.
Start your Vue development server to test your integration. From your project root, run:
```bash theme={null}
npm run dev
```
Your Vue app will connect to your Base44 backend through the SDK client, allowing you to work with your deployed entities in real-time.
When you're happy with how everything looks locally, build your Vue project for production:
```bash theme={null}
npm run build
```
This creates optimized production files in your output directory (typically `dist`).
Deploy your built frontend to Base44:
```bash theme={null}
base44 deploy
```
The `deploy` command deploys your built frontend to Base44 hosting. It will also push any updates to your entity schemas if you've made changes since the last push. When complete, you'll see your project name, a link to your Base44 dashboard, and your live application URL.
## Next steps
Now that your Base44 backend is integrated with your project, you can:
* Use the [SDK](/developers/references/sdk/getting-started/overview) to add more functionality to your frontend.
* Add [entities](/developers/backend/resources/entities/overview), [backend functions](/developers/backend/resources/functions), and [agents](/developers/backend/resources/agents-config). If you're working in TypeScript, [generate types](/developers/references/sdk/getting-started/dynamic-types) to get autocomplete and type safety.
* Test locally with [`base44 dev`](/developers/references/cli/commands/dev). See [Local development](/developers/backend/overview/local-dev/local-development-overview) for setup instructions.
* Continue building your frontend and deploy updates with [`base44 deploy`](/developers/references/cli/commands/deploy).
* Open your deployed site with [`base44 site open`](/developers/references/cli/commands/site-open).
## See also
* [CLI Command Reference](/developers/references/cli/commands/introduction): All available CLI commands
* [Project Structure](/developers/backend/overview/project-structure): How project files are organized
* [JavaScript SDK Documentation](/developers/references/sdk/getting-started/overview): Connect your app to the backend
* [Base44 Skills](/developers/backend/overview/base44-skills): Teach AI assistants to work with Base44
# React Quickstart
Source: https://docs.base44.com/developers/backend/quickstart/frameworks/quickstart-with-react
Add a Base44 backend to your React project
Follow this quickstart to add Base44 to your React project. You'll create a Base44 backend, define entities, and integrate the SDK into your frontend.
The CLI requires Node.js 20.19.0 or higher.
## Setup
Install the Base44 CLI globally:
```bash theme={null}
npm install -g base44@latest
```
Navigate to your React project directory, then run:
```bash theme={null}
base44 create
```
If you're not already logged in, the command will prompt you to authenticate.
Select **Create a basic project** when prompted. This creates the backend files within your React project directory. Then follow the prompts to configure your project.
When you create a project, [Base44 skills](/developers/backend/overview/base44-skills) are included automatically, providing your AI agent with instructions and context for Base44 tasks.
Update your [config.jsonc](/developers/backend/overview/project-structure#config-jsonc) to point to your React build output and the command that runs your dev server. Add the `site.outputDirectory` and `site.serveCommand` fields:
```json theme={null}
{
"site": {
"outputDirectory": "dist",
"serveCommand": "npm run dev"
}
}
```
With `serveCommand` set, [`base44 dev`](/developers/references/cli/commands/dev) starts your backend and frontend together from a single terminal.
Create [entity schemas](/developers/references/entities/introduction) to define your data structures. Entity files must be placed in the `base44/entities/` directory.
For example, create `base44/entities/task.jsonc`:
```json theme={null}
{
"name": "Task",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"completed": {
"type": "boolean",
"default": false
}
},
"required": ["title"]
}
```
Push your entity schemas to Base44:
```bash theme={null}
base44 entities push
```
This command synchronizes your local entity definitions with your Base44 backend, making them available for use in your application. See [`entities push`](/developers/references/cli/commands/entities-push) for more information.
Install the Base44 JavaScript SDK:
```bash theme={null}
npm install @base44/sdk
```
Create a Base44 SDK [client](/developers/references/sdk/getting-started/client) in your project. The `appId` can be found in your `base44/.app.jsonc` file.
For example, create `src/api/base44Client.js`:
```javascript theme={null}
import { createClient } from '@base44/sdk';
export const base44 = createClient({
appId: 'your-app-id-from-app.jsonc'
});
```
Create a simple component to list and add tasks. For example, create `src/components/TaskList.jsx`:
```jsx theme={null}
import { useState, useEffect } from 'react';
import { base44 } from '../api/base44Client';
export default function TaskList() {
const [tasks, setTasks] = useState([]);
const [newTaskTitle, setNewTaskTitle] = useState('');
const [isLoading, setIsLoading] = useState(false);
useEffect(() => {
loadTasks();
}, []);
const loadTasks = async () => {
setIsLoading(true);
try {
// Get records
const taskList = await base44.entities.Task.list();
setTasks(taskList);
} catch (error) {
console.error('Error loading tasks:', error);
}
setIsLoading(false);
};
const addTask = async (e) => {
e.preventDefault();
if (!newTaskTitle.trim()) return;
setIsLoading(true);
try {
// Create a record
const newTask = await base44.entities.Task.create({
title: newTaskTitle,
completed: false
});
setTasks([...tasks, newTask]);
setNewTaskTitle('');
} catch (error) {
console.error('Error creating task:', error);
}
setIsLoading(false);
};
return (
Tasks
{isLoading &&
Loading...
}
{tasks.map((task) => (
{task.title}
))}
);
}
```
Use the exact entity name from your schema when calling the SDK, including capitalization. By convention, entity names begin with a capital letter. For example, if your schema has `"name": "Task"`, you access it as `base44.entities.Task.list()`.
Start your Vite development server to test your integration. From your project root, run:
```bash theme={null}
npm run dev
```
Your React project will connect to your Base44 backend through the SDK client, allowing you to work with your deployed entities in real-time.
When you're happy with how everything looks locally, build your React project for production:
```bash theme={null}
npm run build
```
This creates optimized production files in your output directory (typically `dist`).
Deploy your built frontend to Base44:
```bash theme={null}
base44 deploy
```
The `deploy` command deploys your built frontend to Base44 hosting. It will also push any updates to your entity schemas if you've made changes since the last push. When complete, you'll see your project name, a link to your Base44 dashboard, and your live application URL.
## Next steps
Now that your Base44 backend is integrated with your project, you can:
* Use the [SDK](/developers/references/sdk/getting-started/overview) to add more functionality to your frontend.
* Add [entities](/developers/backend/resources/entities/overview), [backend functions](/developers/backend/resources/functions), and [agents](/developers/backend/resources/agents-config). If you're working in TypeScript, [generate types](/developers/references/sdk/getting-started/dynamic-types) to get autocomplete and type safety.
* Test locally with [`base44 dev`](/developers/references/cli/commands/dev). See [Local development](/developers/backend/overview/local-dev/local-development-overview) for setup instructions.
* Continue building your frontend and deploy updates with [`base44 deploy`](/developers/references/cli/commands/deploy).
* Open your deployed site with [`base44 site open`](/developers/references/cli/commands/site-open).
## See also
* [CLI Command Reference](/developers/references/cli/commands/introduction): All available CLI commands
* [Project Structure](/developers/backend/overview/project-structure): How project files are organized
* [JavaScript SDK Documentation](/developers/references/sdk/getting-started/overview): Connect your app to the backend
* [Base44 Skills](/developers/backend/overview/base44-skills): Teach AI assistants to work with Base44
# React Native (Expo) Quickstart
Source: https://docs.base44.com/developers/backend/quickstart/frameworks/quickstart-with-react-native
Add a Base44 backend to your React Native Expo project
Follow this quickstart to add Base44 to your React Native (Expo) project. You'll create a Base44 backend, define entities, and integrate the SDK into your mobile app.
The CLI requires Node.js 20.19.0 or higher.
## Setup
Install the Base44 CLI globally:
```bash theme={null}
npm install -g base44@latest
```
Navigate to your React Native project directory, then run:
```bash theme={null}
base44 create
```
If you're not already logged in, the command will prompt you to authenticate.
Select **Create a basic project** when prompted. This creates the backend files within your React Native project directory. Then follow the prompts to configure your project.
When you create a project, [Base44 skills](/developers/backend/overview/base44-skills) are included automatically, providing your AI agent with instructions and context for Base44 tasks.
Create [entity schemas](/developers/references/entities/introduction) to define your data structures. Entity files must be placed in the `base44/entities/` directory.
For example, create `base44/entities/task.jsonc`:
```json theme={null}
{
"name": "Task",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"completed": {
"type": "boolean",
"default": false
}
},
"required": ["title"]
}
```
Push your entity schemas to Base44:
```bash theme={null}
base44 entities push
```
This command synchronizes your local entity definitions with your Base44 backend, making them available for use in your application. See [`entities push`](/developers/references/cli/commands/entities-push) for more information.
Install the Base44 JavaScript SDK:
```bash theme={null}
npm install @base44/sdk
```
Create a Base44 SDK [client](/developers/references/sdk/getting-started/client) in your project. The `appId` can be found in your `base44/.app.jsonc` file.
For example, create `api/base44Client.js`:
```javascript theme={null}
import { createClient } from '@base44/sdk';
export const base44 = createClient({
appId: 'your-app-id-from-app.jsonc'
});
```
Create a simple screen component to list and add tasks. For example, create `screens/TaskListScreen.js`:
```javascript theme={null}
import { useState, useEffect } from 'react';
import { View, Text, FlatList, Button, TextInput, StyleSheet, ActivityIndicator } from 'react-native';
import { base44 } from '../api/base44Client';
export default function TaskListScreen() {
const [tasks, setTasks] = useState([]);
const [newTitle, setNewTitle] = useState('');
const [isLoading, setIsLoading] = useState(false);
useEffect(() => {
loadTasks();
}, []);
const loadTasks = async () => {
setIsLoading(true);
try {
// Get records
const taskList = await base44.entities.Task.list();
setTasks(taskList);
} catch (error) {
console.error('Error loading tasks:', error);
}
setIsLoading(false);
};
const addTask = async () => {
if (!newTitle.trim()) return;
setIsLoading(true);
try {
// Create a record
const newTask = await base44.entities.Task.create({
title: newTitle,
completed: false
});
setTasks([...tasks, newTask]);
setNewTitle('');
} catch (error) {
console.error('Error creating task:', error);
}
setIsLoading(false);
};
return (
Tasks item.id}
renderItem={({ item }) => {item.title}}
ListEmptyComponent={
isLoading ? : No tasks yet
}
/>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
padding: 20,
},
title: {
fontSize: 24,
fontWeight: 'bold',
marginBottom: 20,
},
task: {
fontSize: 16,
padding: 12,
borderBottomWidth: 1,
borderBottomColor: '#eee',
},
empty: {
textAlign: 'center',
color: '#999',
marginTop: 20,
},
inputRow: {
flexDirection: 'row',
gap: 10,
marginTop: 20,
},
input: {
flex: 1,
borderWidth: 1,
borderColor: '#ccc',
padding: 10,
borderRadius: 5,
},
});
```
Use the exact entity name from your schema when calling the SDK, including capitalization. By convention, entity names begin with a capital letter. For example, if your schema has `"name": "Task"`, you access it as `base44.entities.Task.list()`.
Update your `App.js` to import and render the `TaskListScreen` component:
```javascript theme={null}
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, SafeAreaView } from 'react-native';
import TaskListScreen from './screens/TaskListScreen';
export default function App() {
return (
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
},
});
```
Start your Expo development server to test your integration. From your project root, run:
```bash theme={null}
npx expo start
```
Follow the [Expo CLI instructions](https://docs.expo.dev/more/expo-cli/#develop) to open your app on a simulator, physical device, or web browser.
Your React Native app will connect to your Base44 backend through the SDK client, allowing you to work with your deployed entities in real-time.
## Next steps
Now that your Base44 backend is integrated with your project, you can:
* Use the [SDK](/developers/references/sdk/getting-started/overview) to add more functionality to your mobile app.
* Add [entities](/developers/backend/resources/entities/overview), [backend functions](/developers/backend/resources/functions), and [agents](/developers/backend/resources/agents-config). If you're working in TypeScript, [generate types](/developers/references/sdk/getting-started/dynamic-types) to get autocomplete and type safety.
* Test locally by running [`base44 dev`](/developers/references/cli/commands/dev) for the backend alongside your app's dev server. See [Local development](/developers/backend/overview/local-dev/local-development-overview) for setup instructions.
## See also
* [CLI Command Reference](/developers/references/cli/commands/introduction): All available CLI commands
* [Project Structure](/developers/backend/overview/project-structure): How project files are organized
* [JavaScript SDK Documentation](/developers/references/sdk/getting-started/overview): Connect your app to the backend
* [Base44 Skills](/developers/backend/overview/base44-skills): Teach AI assistants to work with Base44
# Build with AI
Source: https://docs.base44.com/developers/backend/quickstart/quickstart-with-ai
Set up a Base44 project using your AI coding agent
Install Base44 skills and let your AI coding agent create, build, and deploy your project.
You need Node.js 20.19.0 or higher installed.
## Setup
Install skills globally so they are available in any project:
```bash theme={null}
npx skills add base44/skills -g
```
This teaches your AI coding agent how to work with Base44 projects, including the CLI, SDK, entities, backend functions, and deployment.
Open a folder in Cursor, Claude Code, Codex, OpenCode, or any agent that supports skills. The Base44 skills are automatically available.
Give your agent a prompt describing your project. Be specific about the data you need, how users interact with it, and any features you want. Here are some examples:
*"Create a new Base44 project for a job application tracker. I need to store data for Companies, Applications, and Interviews. Applications should have status, position title, salary range, and notes. Add authentication so each user only sees their own data."*
*"Create a new Base44 project for a customer support tool. I need an AI agent that can look up orders by email, check delivery status, and create refund requests. Store conversations and link them to customer records."*
*"Create a new Base44 project for a team standup bot. Add a Slack connector and a backend function that runs daily, collects standup updates from a Standups table, and posts a summary to a Slack channel."*
Your agent may prompt you to authenticate with Base44 during setup. This opens a browser window for you to sign in.
## What your agent will do
When you give your agent a prompt, it will typically:
1. Install the Base44 CLI if it is not already installed.
2. Run `base44 create` to scaffold the project.
3. Define [entity schemas](/developers/backend/resources/entities/overview) based on your description.
4. Configure [AI agents](/developers/backend/resources/agents-config), [OAuth connectors](/developers/backend/resources/connectors), and other resources.
5. Write frontend and backend code.
6. Set up authentication, RLS rules, and other settings.
7. Deploy the project with `base44 deploy`.
You can guide your agent at each step or let it work through the full process.
## Keep building
After the initial setup, your agent can continue to make changes across your project. Some things you can ask it to do:
* Add or modify [entity schemas](/developers/backend/resources/entities/overview) and push them with the CLI.
* Write [backend functions](/developers/backend/resources/backend-functions/overview) with automations and cron schedules.
* Configure [AI agents](/developers/backend/resources/agents-config) with custom tools and data access.
* Set up [OAuth connectors](/developers/backend/resources/connectors) for external services.
* Build frontend pages and components using the SDK.
* Deploy updates to production.
## Tips for better results
* **Be specific about your data model:** Name your entities and describe the fields you need, including relationships between them.
* **Mention authentication early:** If your app needs login or per-user data, say so in your initial prompt so the agent sets up RLS from the start.
* **Describe behavior, not just structure:** Instead of "add a notifications entity," try "send an email notification when a task is assigned to someone."
* **Iterate:** Start with a basic version and ask your agent to add features one at a time.
## See also
* [Skills](/developers/backend/overview/skills): Details on how skills work and what each skill covers
* [Project structure](/developers/backend/overview/project-structure): How Base44 projects are organized
* [CLI reference](/developers/references/cli/commands/introduction): All available CLI commands
# Backend only
Source: https://docs.base44.com/developers/backend/quickstart/templates/quickstart-backend-only
Create a backend only project with Base44
Create a backend only Base44 project with [entities](/developers/backend/resources/entities/overview) and [functions](/developers/backend/overview/project-structure#functions). Use this template when you want to build your own frontend or integrate with existing apps.
The CLI requires Node.js 20.19.0 or higher.
## Setup
Install the Base44 CLI globally:
```bash theme={null}
npm install -g base44@latest
```
Create a new Base44 project:
```bash theme={null}
base44 create
```
If you're not already logged in, the command will prompt you to authenticate.
Select **Create a basic project** when prompted, then follow the prompts to configure your project.
When complete, you'll see your project name and a link to your Base44 dashboard. The CLI creates your project with the following structure:
Your app ID is automatically added to [`.app.jsonc`](/developers/backend/overview/project-structure#app-jsonc).
## Next steps
Now that your Base44 project is set up, you can:
* Add [entities](/developers/backend/resources/entities/overview), [backend functions](/developers/backend/resources/functions), and [agents](/developers/backend/resources/agents-config). If you're working in TypeScript, [generate types](/developers/references/sdk/getting-started/dynamic-types) to get autocomplete and type safety.
* Build or connect a frontend application using the [SDK](/developers/references/sdk/getting-started/overview).
* Deploy updates with [`base44 deploy`](/developers/references/cli/commands/deploy).
Your project includes [Base44 skills](/developers/backend/overview/base44-skills) that teach AI coding assistants how to work with Base44. You can open your project in Cursor, Claude Code, or your preferred AI assistant and describe what you want to build.
### Build a frontend
Create a frontend app using your preferred framework.
Install the Base44 JavaScript SDK:
```bash theme={null}
npm install @base44/sdk
```
Configure the SDK client with your app ID (from `base44/.app.jsonc`) and use it to interact with your entities:
```javascript theme={null}
import { createClient } from "@base44/sdk";
const base44 = createClient({
appId: "your-app-id",
});
const tasks = await base44.entities.Task.list();
```
Learn more in the [JavaScript SDK documentation](/developers/references/sdk/getting-started/overview).
### Local development
Most frontend frameworks support local development servers with hot reloading. Through the SDK, your local frontend will connect to Base44's hosted backend.
You can also run [`base44 dev`](/developers/references/cli/commands/dev) to start a local development server that handles backend functions, entities, and media uploads on your machine. This lets you test changes without deploying. See [Local development](/developers/backend/overview/local-dev/local-development-overview) for details.
### Deploy your frontend
If you want to deploy your frontend to Base44's hosting platform, configure the `outputDirectory` in your `base44/config.jsonc`:
```jsonc theme={null}
{
"name": "basic-test-app",
// Site/hosting configuration
"site": {
"outputDirectory": "./dist",
},
}
```
The `outputDirectory` tells the CLI where your build tool outputs the compiled files. Build your frontend, then deploy with the [`site deploy`](/developers/references/cli/commands/site-deploy) command.
## See also
* [Project Structure](/developers/backend/overview/project-structure): How project files are organized
* [CLI Command Reference](/developers/references/cli/commands/introduction): All available CLI commands
* [JavaScript SDK](/developers/references/sdk/getting-started/overview): Connect your app to the backend
* [Example apps](https://github.com/base44/apps-examples): Sample projects to learn from
# React Quickstart
Source: https://docs.base44.com/developers/backend/quickstart/templates/quickstart-react-template
Create a full-stack Base44 project with a Base44 backend and a Vite-powered React frontend
Follow this quickstart to scaffold a project, define an entity, and run your app locally. This project includes a pre-configured Base44 SDK client, UI components, and Tailwind CSS styling.
The CLI requires Node.js 20.19.0 or higher.
## Setup
Install the Base44 CLI globally:
```bash theme={null}
npm install -g base44@latest
```
Create a new Base44 project:
```bash theme={null}
base44 create
```
If you're not already logged in, the command will prompt you to authenticate.
Select **Start from a template** when prompted, then follow the prompts to configure your project, push entities, and deploy your site.
When complete, you'll see your project name, a link to your Base44 dashboard, and your live application URL.
The generated project structure:
For more information about the files in this project, see [Project Structure](/developers/backend/overview/project-structure).
This project includes an example `Task` [entity](/developers/references/entities/introduction) in `base44/entities/task.jsonc` which was pushed to Base44 during project creation. You can modify this entity or create additional ones.
## Next steps
Now that your Base44 backend is integrated with your project, you can:
* Use the [SDK](/developers/references/sdk/getting-started/overview) to add more functionality to your frontend.
* Add [entities](/developers/backend/resources/entities/overview), [backend functions](/developers/backend/resources/functions), and [agents](/developers/backend/resources/agents-config). If you're working in TypeScript, [generate types](/developers/references/sdk/getting-started/dynamic-types) to get autocomplete and type safety.
* Test locally with [`base44 dev`](/developers/references/cli/commands/dev). See [Local development](/developers/backend/overview/local-dev/local-development-overview) for setup instructions.
* Deploy updates with [`base44 deploy`](/developers/references/cli/commands/deploy).
* Open your deployed site with [`base44 site open`](/developers/references/cli/commands/site-open).
Your project includes [Base44 skills](/developers/backend/overview/base44-skills) that teach AI coding assistants how to work with Base44. You can open your project in Cursor, Claude Code, or your preferred AI assistant and describe what you want to build.
## See also
* [CLI Command Reference](/developers/references/cli/commands/introduction): All available CLI commands
* [Project Structure](/developers/backend/overview/project-structure): How project resources are organized
* [Entities](/developers/references/entities/introduction): Learn about database schema configuration
* [Example apps](https://github.com/base44/apps-examples): Sample projects to learn from
# Base44 Developer Platform
Source: https://docs.base44.com/developers/home
Build and deploy full-stack apps with a managed backend designed for AI agents.
## Start building with Base44
Managed backend designed for AI agents. Define everything in code.
[Explore >](/developers/backend/overview/introduction)
Customize Base44-generated apps using developer tools.
[Explore >](/developers/app-code/overview/introduction)
Create backend projects from the command line.
[Explore >](/developers/references/cli/get-started/overview)
Access Base44 services from frontend or backend code.
[Explore >](/developers/references/sdk/getting-started/overview)
## Backend Platform
The same backend that powers Base44's app editor, available as a standalone service. Build with any frontend framework while Base44 handles:
* **[Data management](/developers/backend/resources/entities/overview)**: Store and query data with flexible schemas and realtime updates
* **[Backend functions](/developers/backend/resources/backend-functions/overview)**: Custom server-side logic in a secure runtime
* **[AI agents](/developers/backend/resources/agents-config)**: Define AI assistants with custom tools and data permissions
* **[Integrations](/developers/references/sdk/docs/type-aliases/integrations)**: Pre-built connections to AI, email, file storage, and more
* **[Authentication](/developers/references/sdk/docs/interfaces/auth)**: Built-in login, social auth, and session handling
* **[Hosting](/developers/references/cli/commands/deploy)**: Deploy with a single command, automatic HTTPS included
### Get started
Get started by letting an AI coding agent set up your project, or set it up yourself with the CLI and then continue building with AI.
Install [Base44 skills](/developers/backend/overview/skills) so your coding agent can assist with Base44 development:
```bash theme={null}
npx skills add base44/skills -g
```
Then open your AI coding tool and try a prompt like this:
*"Create a new Base44 project for a task management app with users, tasks with due dates and priority levels, and team assignments. Add authentication and deploy it."*
Your agent will install the CLI, create the project, define entities, write code, and deploy. [Learn more about skills >](/developers/backend/overview/skills)
You may be prompted to authenticate with Base44 during setup.
To set up a backend project yourself, run the following commands:
```bash Get started theme={null}
npm install -g base44@latest # Install the CLI
base44 login # Authenticate
base44 create # Create a project
```
Your project comes with [Base44 skills](/developers/backend/overview/skills) pre-installed. Open the project with your AI coding tool and describe what you want to build next, or explore the documentation to understand how your project is structured and what you can build.
Or start with one of our templates:
## Develop and debug your app
Work directly in your code
The Code tab lets you view and edit your app's source code directly, giving you control over your app's functionality, design, and behavior while seeing changes immediately.
[Learn More >](/developers/app-code/editor/code-tab)
Debug and monitor API requests
The Activity Monitor shows every request your app makes while you are in preview. Check which endpoints are called, see status codes and timing, and inspect request and response details to debug problems.
[Learn More >](/developers/app-code/editor/activity-monitor)
Connect your app to GitHub
Connect your app to GitHub to write code in your local development environment or in Base44 and keep them in sync with each other.
[Learn More >](/developers/app-code/local-development/github)
Understand your app's file organization
Base44 apps are standard React apps built with Vite. Your project includes modern web development tools and seamless Base44 backend integration.
[Learn More >](/developers/app-code/overview/project-structure)
## MCP servers
Base44 provides two MCP servers: one for building and managing backend projects, and one for searching the documentation.
```json theme={null}
{
"mcpServers": {
"base44": {
"type": "http",
"url": "https://app.base44.com/mcp"
},
"base44-docs": {
"type": "http",
"url": "https://docs.base44.com/mcp"
}
}
}
```
* **[Base44 MCP server](/developers/backend/overview/mcp-server)** (`app.base44.com/mcp`): Create and manage projects, list your projects, and query project data. Requires OAuth sign-in.
* **[Docs MCP server](/developers/backend/overview/base44-docs-mcp)** (`docs.base44.com/mcp`): Search Base44 documentation from your AI tool. No authentication required.
## Explore
# Base44 developer tools
Source: https://docs.base44.com/documentation/building-your-app/developer-tools
Build, debug, and ship smarter on Base44.
Base44 gives you a flexible, developer friendly environment to [build an app](https://base44.com/ai-app-builder), extend it, and maintain it on top of the Base44 platform. You can work directly with your app's code, use in-product developer tools, integrate with GitHub for version control, and rely more and more on Base44 as a backend service as the platform evolves.
***
## Working with your app's code
Base44 lets you work with your app's code so you can create custom experiences while still relying on the platform for infrastructure and runtime. You stay close to the Base44 app model and APIs, which helps your app behave consistently across environments and makes it easier to adopt new platform capabilities over time.
You can mix low code and full code in the same project. Start from Base44 primitives, then drop into code when you need custom logic, integrations, or UI that go beyond what is available out of the box. This balance gives you both speed and control without forcing you to maintain your own underlying platform.
Learn more about [editing your app's code](https://docs.base44.com/developers/app-code/editor/code-tab)
***
## Using in-product developer tools
Base44 includes developer tools that help you understand how your app behaves in real time and debug issues more efficiently. Instead of adding your own ad hoc logging or building separate dashboards, you can inspect what is happening directly from the Base44 environment.
These tools let you see how your app talks to Base44 services and external integrations, monitor requests and responses, and surface important events, errors, or warnings. You can validate assumptions while you work, then iterate safely in staging or preview environments before you roll changes out more broadly.
Learn more about the [activity monitor](https://docs.base44.com/developers/app-code/editor/activity-monitor)
***
## Integrating with GitHub
Base44 supports a GitHub based workflow so you can manage your app code with modern version control practices. Connecting your app to GitHub makes it easier to collaborate with your team and keep a clean history of every change that goes into your app.
You can use branches and pull requests to review work before it goes live, enforce review or check requirements, and keep your main branches stable. When you connect GitHub workflows and checks, you can test and validate each change, then let Base44 handle deployment from the reviewed code. This creates a clear, auditable path from commit to production.
Learn more about [connecting your app to GitHub](https://docs.base44.com/developers/app-code/local-development/github)
***
## Connecting to external services/ APIs
Base44 includes an integrations layer that lets your app call external services without you managing every API call by hand. Instead of wiring each provider yourself, you use Base44 integrations to handle common patterns like talking to AI models, working with files, sending email, or calling custom APIs, while Base44 manages credentials and execution on the backend.
There are two main types of integrations:
* Built in integrations cover common tasks such as generating text or images with AI, uploading and serving files, or extracting structured data from documents.
* Custom integrations let a workspace administrator import an OpenAPI specification for almost any external API and expose it to your apps as a reusable, named integration that is proxied through the Base44 backend.
Integration calls always run on Base44 infrastructure, so secrets and tokens never live in your frontend. You can invoke them either in the context of the current person using your app or with a service role that has elevated permissions for admin and automation workflows. This gives you a flexible way to connect Base44 to the rest of your stack while keeping security and access control in one place.
[Learn more about integrations](/Integrations/Using-integrations)
***
## Using Base44 as a backend service (BaaS)
Base44 includes a managed [backend platform](https://base44.com/backend) that is built with AI agents and modern full stack apps in mind. It handles core backend concerns such as data storage, authentication, real time updates, serverless functions, integrations, and hosting so you can focus on product logic and experience.
You can run Base44 as a backend only service when you bring your own frontend or connect existing applications, or use it as the backend for full stack projects generated from Base44 templates. The CLI scaffolds projects with the configuration you need and connects them to your Base44 backend, while the dashboard lets you manage data, auth, functions, and integrations.
Any frontend framework can talk to Base44 through the JavaScript SDK. During local development your frontend runs on its own dev server and connects to the hosted Base44 backend for data and functions. When you are ready to go live, you can either keep hosting your frontend elsewhere or deploy its built assets to Base44 hosting with custom domains and automatic HTTPS.
Base44 provides a flexible NoSQL data layer, built in authentication and access control, and real time subscriptions so your app can react to changes as they happen. You can add custom backend logic with TypeScript based functions and plug in external services through connectors and integrations, for example for AI models, email, or file handling.
Learn more about [using Base44 as a backend service](https://docs.base44.com/developers/backend/overview/introduction)
***
## FAQs
Click a question below to learn more.
The activity monitor displays the latest actions and requests made by your app. You can use it to view user activity, track performance, and troubleshoot any issues in real time.
To access your activity monitor, click **Code** at the top and then click the **Activity Monitor** icon:
You can see the files and components that power your app from the top bar and the code view.
* Click the **More Actions** icon in the top bar and select **Files used in this page** to view the files that are currently used on the page you are editing. Use **See all files** to open the full file list.
* Click **Code** in the top bar to open the full file structure for your app and browse components.
* To download everything as a ZIP file, open **Code** and click the **Export project as ZIP** icon at the top right of the code view.
* To connect your project to GitHub for advanced version control, click the **GitHub** icon in the top bar and follow the setup steps.
Downloading a ZIP file and connecting to GitHub both require a [Builder plan](https://base44.com/pricing) or higher.
# Sending emails from your app
Source: https://docs.base44.com/documentation/building-your-app/sending-emails
Choose the best way to send emails from your Base44 app.
When you [create an app with AI](https://base44.com/ai-app-builder) in Base44, you can choose how to send emails, from quick transactional messages to scheduled campaigns. You can use Base44 built-in emails or send from a custom email domain for branded messages. For more control, you can connect an external email provider such as Resend, use another external integration, or connect your own email service. You can also combine any of these options with automations to send emails on a schedule or when something changes in your data.
***
## Base44 built-in emails
Base44's built-in `SendEmail` integration comes preinstalled in every app and does not require a paid plan, extra setup, or API keys. It lets you send transactional emails to people who have signed up to your app, customize the sender name that appears in their inbox, and include plain text or rich HTML content in the email body.
You can ask the AI chat to set this up for you, for example by saying `When someone signs up, send them a welcome email`. Base44 calls the built-in email integration, which you can edit and test using the AI chat or from **Code** in your dashboard.
**Notes:**
* Built-in emails are only for sending emails to people who are registered users of your app and do not support external email addresses or file attachments. To email external recipients, use an external email provider or integration.
* If you want built-in emails to come from a branded address instead of a generic sender, you can connect a custom email domain so messages send from an address like [support@your-domain.com](mailto:support@your-domain.com). See more below.
* Standard emails that use the default sending domain consume 1 integration credit per email, while emails sent from a custom email domain consume 2 integration credits.
***
## Resend external integration
Resend is an external email delivery service that you connect to Base44. When you use Resend, emails are sent through your own Resend account rather than Base44’s built-in email delivery.
**Note:** Resend is an external service, and Base44 does not provide support for issues related to Resend.
The Resend integration connects your app to Resend, a dedicated email service for more advanced or higher volume email flows. With Resend you can send emails to any address, use richer templates and layouts, improve deliverability with domain authentication, and track performance in the Resend dashboard. It is a good fit for important transactional emails such as password reset links or order confirmations, as well as newsletters, lifecycle campaigns, and other outbound email from your own domain.
You connect Resend through the integrations catalog and add your API key, then describe the email flows you want in the AI chat. You can ask the AI to use Resend for specific events (for example, when someone subscribes or completes a purchase), and generate the backend functions that call the Resend integration.
Learn more about [setting up the Resend integration](/Integrations/Resend-integration)
**Note:** The Resend integration is available on the Builder plan and above.
***
## Automated emails
Automations in Base44 let you send emails automatically at specific times and dates or when something changes in your data. You can use them to delay a follow up message a few days after signup, send weekly or monthly summary emails, or turn many small notifications into a single daily digest.
For time based flows, use **scheduled automations**. Each scheduled automation runs a backend function at the times you choose, so you control both the email content and the exact send pattern.
For event based flows, use **data event automations**. These watch your data for events like records being created, updated, or deleted, then run a backend function right away. This is useful for things like order confirmations, signup welcomes, or status change alerts that should send as soon as something happens.
You can use automations with both built-in emails and the Resend integration. Automations control when emails are sent, so you choose whichever email option fits each flow and still decide the exact timing or trigger.
To create an automation for email, you can ask the AI chat to create an automation for you, or you can set one up directly from **Automations** in your app's dashboard.
Learn more about [creating automations for your app](/Building-your-app/Creating-automations)
**Note:** Automations are available on the Builder plan and above.
***
## Emails from custom domains
With the Base44 built-in email service, you can send emails from your own domain (for example, [support@your-domain.com](mailto:support@your-domain.com)) instead of [no-reply@base44-apps.com](mailto:no-reply@base44-apps.com) for all built-in email types.
To use this, you need your app to be connected to a custom domain. Each app can connect one custom email domain, and you cannot set multiple sender addresses on the same domain.
**Notes:**
* Custom domain emails are available on the Builder plan and above.
* Emails sent from a custom email domain consume 2 integration credits.
Learn how to [send emails from a custom domain](https://docs.base44.com/Setting-up-your-app/Sending-emails-from-a-custom-domain)
***
## Additional email providers
You are not limited to Resend. If you already use another email provider that exposes an HTTP API, you can connect it to your Base44 app. One option is to call the provider directly from backend functions, using secrets to store API keys and other credentials. This gives you full control over the payload without creating a reusable catalog integration.
Another option is to wrap the provider in a custom integration so it appears in your private catalog. You can then reuse that integration across multiple apps or share it with your workspace without repeating the setup each time. This approach is helpful when your team already relies on a specific provider, when you need features that only that provider offers, or when you want consistent email behavior across many apps built on Base44.
Learn more about [external integrations](https://docs.base44.com/Integrations/Using-integrations#external-integrations) and creating your [own custom integrations](/documentation/integrations/using-custom-integrations)
**Note:** External and custom integrations are available on the Builder plan and above.
***
## FAQs
Click a question below to learn more about sending emails from your app.
Built-in emails are best when you want a quick way to send transactional messages to people who already signed up with your app and you do not need advanced templates or analytics.
The Resend integration is a better choice when you need to email any address, send from your own domain at scale, or depend on a dedicated email platform for templates, deliverability, and tracking.
Yes. You do not need to choose a single email approach for your entire app. Many apps use built-in emails for low volume or early product flows, rely on Resend for external recipients and higher value transactional or marketing emails, use automations for delayed sequences, reminders, and recurring messages, and reserve custom domains for any communication that carries their brand.
Some teams also connect a separate in house or specialist provider through backend functions or custom integrations for specific cases. This mix lets you move individual flows to more advanced options as your needs grow without having to rework your whole app at once.
Yes, in an indirect way. The Zapier integration lets your app send data to Zapier, and then Zapier can trigger emails through tools such as Gmail, Outlook, or its own email actions. This is useful when you already automate workflows in Zapier and want your Base44 app to be another trigger. For details, see the [Zapier integration guide](/Integrations/Zapier-integration).
You do not need a custom domain to start sending emails. Adding a custom domain becomes more important when you care about consistent branding, higher deliverability, or larger sending volumes.
The built-in email function (`SendEmail`) is only for sending internal notifications to people who are registered users of your app. You cannot send emails with `SendEmail` to external recipients who do not have an account.
**If you need to email external recipients, you can:**
* Use the Resend integration: This email service lets you send messages to any email address, not just registered users. It is available on the Builder plan and above.
* Connect another email provider: You can integrate an external email provider with your backend functions by using their API.
**Note:** If you buy a custom domain through Base44, you can change the sender name and email address for messages sent through `SendEmail`, but recipients still need to be registered users.
# Submitting your app to app stores
Source: https://docs.base44.com/documentation/building-your-app/uploading-to-app-stores
Get your Base44 app store-ready by scanning, improving, and packaging it for the Apple App Store and Google Play.
When your Base44 app is ready for mobile, you can manage the entire store prep from inside your app editor. Scan your app against Apple and Google guidelines, use the Base44 AI chat to improve any problem areas, then generate the files you need to submit your app in your Apple and Google developer accounts.
Your mobile app runs your published Base44 app inside a secure web view. This is a lightweight native wrapper around your web app that opens only your app's URL. It does not currently support native-only features such as push notifications or full offline mode, but it means that when you publish most content and design changes in Base44, they also appear in your app without sending a new version to the Apple App Store or Google Play.
**Important:** You can run the scan to prepare your app for stores on the Free plan, but to download the files for app submission you must be on the Builder plan or higher.
Store submission is a multi-step process that involves both Base44 and your Apple and Google dashboards. Keep your developer credentials nearby and set aside time to complete each part.
**Make sure you have the following ready:**
* A published Base44 app with a stable URL
* An Apple Developer Program account with access to App Store Connect and API keys
* A Google Play Console developer account
* Permission to create and manage apps in both accounts (if you are working in a team)
* A logo that meets Apple and Google icon requirements, or a clear prompt to generate one with AI
* A privacy policy and terms of use page that explain how your app handles data and device permissions, and that are reachable from your main app pages
**Information about selling products:**
* **Physical goods and services:** Using Stripe is allowed in the app stores.
* **Digital goods (for example, subscriptions or in-app features):** Do not use Stripe for payments inside your mobile app. Apple and Google require their own billing systems for digital content. If your app uses Stripe for digital content, your app is rejected. We are working on a built-in integration for StoreKit and Google Play Billing to handle digital purchases and keep your app compliant.
**Already done all the preparation and ready to submit?** Follow our [**step-by-step visual guide**](https://submit-your-app.base44.app/) for submitting your app to Apple App Store and Google Play Store.
***
## Step 1 | Create your developer accounts
Before you can generate store files and submit your app, you need active Apple and Google developer accounts. These accounts let you own your listings, manage releases, and handle reviews directly in each store.
You are responsible for setting up and paying for your Apple and Google developer accounts, as well as managing your app listings and submissions. Base44 helps you prepare your app for submission, but does not create or manage your developer accounts.
### Apple Developer account
Use your Apple Developer account to submit your iOS app in App Store Connect and manage releases. Make sure you have an Apple ID you can use for your business.
**To create your Apple Developer account:**
1. Go to the [**Apple Developer enrollment page**](https://developer.apple.com/programs/enroll/).
2. Sign in with your Apple ID and start the enrollment process.
3. Choose the account type that fits your situation:
* **Individual:** Select this if you are publishing as yourself.
* **Organization:** Select this if you are publishing on behalf of a company. Apple may ask for your legal business name and D-U-N-S number.
4. Review and accept Apple program terms.
5. Complete the payment to activate your Apple Developer Program membership.
6. After your enrollment is approved, sign in to App Store Connect with the same Apple ID to manage your apps.
**Note:** Apple sends you an activation email after your enrollment payment is processed. This can take up to 2 business days. Once your account is active, sign in to App Store Connect and then return to Base44 to continue generating your App Store files.
### Google Play developer account
Use your Google Play developer account to submit your Android app in Google Play Console and manage releases. Make sure you have a Google account you can use for your business.
**To create your Google Play developer account:**
1. Go to [**Google Play Console**](https://play.google.com/console/signup) in your browser.
2. Sign in with your Google account and start the registration flow.
3. Enter your developer profile details, such as your developer name, contact email, and website if you have one.
4. Review and accept Google Play Play terms and policies.
5. Complete the registration payment to create your Google Play developer account.
6. After setup finishes, sign in to Google Play Console and confirm that you can create a new app.
***
## Step 2 | Scan your app for issues
From the app editor in Base44, scan your app against the latest App Store and Google Play guidelines.
**To run a scan:**
1. Go to your app editor.
2. Click **Publish** at the top-right.
3. Click the **Mobile app** tab.
4. Click **Check Your App**, then click **Run App Scan** and select what you want to scan your app against:
* **App Store guidelines**
* **Google Play guidelines**
***
## Step 3 | Use AI to fix issues
After the scan finishes, use the results panel to see how ready your app is for the stores and let the AI chat suggest fixes. You can review each issue, apply recommended changes, and rerun the scan until you are happy with your score.
**Note:** You do not need a readiness score of 100 before you submit, but the higher the score, the smoother the submission process can be. Aim for a readiness score that is as high as possible, with no unresolved critical issues, before you generate store files.
**To review and fix issues with the AI chat:**
1. Look at your **Readiness Score** and the number of passed, partial, and failed checks in the scan results panel.
2. Choose how you want to fix the issues:
* **Apply with AI:** Open the AI chat with a tailored fix prompt based on your scan results.
* **Copy Fix Prompt:** Copy the fix prompt so you can paste it into the AI chat yourself and edit it first.
3. Let the AI chat apply the suggested changes.
**Check your score again:**
1. Go back to **Preview** and test key flows such as browsing, sign up, log in, and checkout.
2. Publish the changes.
3. Run another app scan to see your updated readiness score and check that critical issues are resolved.
***
## Step 4 | Generate your app files
Generate the files for each store directly from the **Mobile app** tab so you do not have to leave the app editor. Use your scan-ready app to create the files you need to submit in the App Store and Google Play.
**Important:** You must be on the Builder plan or higher to download your app files.
### Creating App Store files
When your app is ready for iOS, use your Apple Developer credentials in the **Mobile app** tab to generate an App Store ready IPA bundle. When generation completes, download the file from Base44, keep it in a secure location, and use it when you upload your app to App Store Connect.
**To create App Store files:**
1. Go to your app editor.
2. Click **Publish** at the top-right.
3. Click the **Mobile app** tab.
4. Click **Build Stores Files**, then **Create App Store files**.
5. Add your Issuer ID, Key ID, Team ID, and upload the `.p8` API key file from App Store Connect, then click **Continue**.
You need to generate your API key and then add the details to Base44. **To generate your key:**
1. Go to App Store Connect and sign in with your Apple Developer account.
2. Click **Users and Access**.
3. Click Integrations
.
4. Click **+** to create a new API key.
5. Enter a name for the key and choose the appropriate access role (for example, Admin or App Manager).
6. Click **Generate** to create the key. **To find your Apple IDs and download the API key file (.p8):**
7. Go to App Store Connect and sign in with your Apple Developer account.
8. Click **Users and Access**.
9. Click Integrations
.
10. Find your **Issuer ID** and **Key ID**.
11. Click **Download** to save the `.p8` file to your computer and store it in a secure location. **To find your Team ID:**
12. Go to your Apple Developer account.
13. Look for the Team ID value listed under Membership details.
6. Review your app logo. Upload a new logo from your computer or generate one with AI, then click **Generate files**.
7. When your files are ready, click **Download**.
**Important:**
* Apple only lets you download each `.p8` key file once. If you lose it, you need to revoke the key and create a new one.
* If you do not see the **Keys** tab in App Store Connect, your Apple Developer account is still being processed. It can take up to 48 hours after payment for Apple to activate your account and show the **Keys** tab. Wait for the activation email before you try to create API credentials.
* Do not share your Issuer ID, Key ID, Team ID, or `.p8` file outside of trusted tools. Treat them as sensitive credentials. If you ever believe a key is exposed, revoke it in App Store Connect and create a new one.
* Changing the logo in the **Create App Store files** window also updates the logo you currently use for your app. Make sure you are happy with the logo before you generate the files.
### Creating Google Play files
When your app is ready for Android, use the **Mobile app** tab to generate a Google Play ready AAB bundle. After generation, download the file from Base44, keep it in a secure location, and upload it in your Google Play Console release.
**To create Google Play files:**
1. Go to your app editor.
2. Click **Publish** at the top-right.
3. Click the **Mobile app** tab.
4. Click **Build Stores Files**, then **Create Google Play files**.
5. Follow the on-screen steps to review your app logo, upload a new logo from your computer, or generate a new one with AI.
**Note:** Changing the logo in the **Create Google Play files** window also updates the logo you currently use for your app. Make sure you are happy with the logo before you generate the files.
6. Click **Generate files** to create the AAB bundle.
7. When your files are ready, click **Download**.
### Adding Google Play SHA
If your app uses login with Google, you need to add the Google Play App Signing SHA-256 fingerprint to Base44 so that Google login works in the version people install from Google Play.
**To find your SHA-256 fingerprint in Google Play Console:**
1. Go to **Google Play Console** and sign in with your developer account.
2. In the side panel, go to **Setup**, then click **App integrity**.
3. Under **App signing key certificate**, copy the **SHA-256 fingerprint** value.
**To add your Google Play App Signing SHA in Base44:**
1. Go to your app editor.
2. Click **Publish** at the top-right.
3. Click the **Mobile app** tab.
4. Click **Build Stores Files**, then in the **Google Play files** section, click the **More Actions** icon .
5. Click **Add Google Play SHA**.
6. Paste your SHA-256 fingerprint into the **SHA-256 Fingerprint** field.
7. Click **Save**.
**Note:** You only need to add the SHA if your app supports login with Google. If you change signing settings in Google Play later, update the SHA-256 fingerprint in Base44 so Google login continues to work in the distributed app.
***
### Adding a Google Snippet
When you register your package name in Google Play Console, Google may provide an ADI registration snippet to verify your package name ownership. If prompted, you need to add this snippet to your Base44 app. Google is rolling out this requirement gradually, so not all accounts are affected yet.
**To add your Google Snippet in Base44:**
1. Go to your app editor.
2. Click **Publish** at the top-right.
3. Click the **Mobile app** tab.
4. Click **Build Stores Files**, then in the **Google Play files** section, click the **More Actions** icon .
5. Click **Add Google Snippet**.
6. Paste your ADI snippet into the **Google Snippet** field.
7. Click **Save & Build**.
Clicking **Save & Build** automatically triggers a new Android build. Your updated files are ready to download in about 5 minutes. You only need to add the Google Snippet if Google Play Console prompts you to register your package name. If you are not prompted, you can skip this step.
## Step 5 | Submit your app
After you generate your App Store and Google Play files, complete submission in your Apple and Google dashboards.
Base44 helps you get your app ready, but everything that happens after you submit in App Store Connect or Google Play Console is between you and the app stores. You are responsible for checking your submission status, responding to store emails, and applying any changes the stores request.
Follow our [**step-by-step visual guide**](https://submit-your-app.base44.app/) for submitting your app to Apple App Store and Google Play Store.
**Important:**
* Base44 cannot guarantee that an app is approved, even with a high readiness score.
* Base44 support does not check on the status of your submission, contact Apple or Google on your behalf, or manage store review feedback for you. Take any feedback directly from the app stores and make changes yourself or work with a partner.
**Your Google Play package name:** Your Google Play package name: When creating your app listing in Google Play Console, you are asked to enter a package name. Your Base44 package name is `com.base[app-id].app`, where `[app-id]` is your Base44 app ID. You can find your app ID in the URL when you are in your app editor. For example, if your editor URL contains `69e0c4bdd31bdu8fda51775g`, your package name is `com.base69e0c4bdd31bdu8fda51775g.app`.
When you submit your app in App Store Connect and Google Play Console, you need assets for your store listings. Before you start the submission forms, prepare:
* A short and long description for your app
* Screenshots of your app on common phone sizes, and tablet screenshots if you plan to support tablets. You can capture screenshots by opening your published app on a device or simulator, navigating through your main flows, and taking native device screenshots that you upload in each store.
* Your app icon and any required feature graphics that follow Apple and Google size and format guidelines
* A support URL and privacy policy URL from your Base44 app
***
## Troubleshooting submission issues
Use this section to resolve common issues.
If you see a message similar to **"UNAUTHENTICATED: App Store Connect rejected the authentication token"**, your App Store Connect API key details are missing, invalid, or expired.
**To fix error 401:**
1. Go to App Store Connect and sign in with your Apple Developer account.
2. Click **Users and Access**, then click **Integrations**.
3. Check that the **Issuer ID**, **Key ID**, and **Team ID** values you entered in Base44 match the values shown in App Store Connect.
4. Confirm that the `.p8` API key file you uploaded is the correct file and that the key has not been revoked or expired.
5. If anything looks incorrect, generate a new API key in App Store Connect, download the new `.p8` file, update all fields in Base44, and try generating the files again.
If you see a message similar to **"PERMISSION\_DENIED: This operation is not allowed. Your App Store Connect API key may need the Admin role"**, the API key you are using does not have enough permissions.
**To fix error 403:**
1. Go to App Store Connect and sign in with your Apple Developer account.
2. Click **Users and Access**, then **Integrations**.
3. Check the **Access** role for the API key you are using.
4. If the key is not set to **Admin**, create a new key:
1. Click **+** to add a new key.
2. Enter a name and select the **Admin** role.
3. Click **Generate** and download the `.p8` file.
5. In Base44, update the Issuer ID, Key ID, Team ID, and upload the new `.p8` file, then try generating the App Store files again.
If you see a message similar to **"ALREADY\_EXISTS: You've reached the limit for iOS Distribution certificates. Revoke an existing iOS Distribution certificate in App Store Connect to create a new one"**, your Apple Developer account has reached the limit for active iOS Distribution certificates.
Every time you generate an IPA in Base44, Apple creates an iOS Distribution certificate. The standard Apple Developer Program allows up to 3 active production distribution certificates at the same time.
**To fix error 409:**
1. Go to your Apple Developer account and open **Certificates, Identifiers & Profiles**.
2. Click **Certificates** and filter to **iOS Distribution** certificates.
3. Revoke at least one iOS Distribution certificate that you no longer need.
4. Try generating the App Store files again from the **Mobile app** tab in Base44.
**Note:**
* An iOS Distribution certificate can usually be revoked after an app has been approved, without affecting people who already installed the app.
* Apple typically allows:
* Up to 3 active production/distribution certificates for the standard Apple Developer Program
* Up to 2 active enterprise distribution certificates
* Up to 12 development certificates
If your app is rejected by App Store Connect with an error about a missing `NSHealthShareUsageDescription` key in Info.plist, this is caused by a HealthKit entitlement included in the iOS build.
Base44 does not support HealthKit, and there is currently no way to add `NSHealthShareUsageDescription` to the build configuration. If your app does not use HealthKit, you do not need to take any action on your end. This is a known limitation of the current iOS build.
If you previously uploaded a native app to the stores and now generate files from Base44 for the same brand, you might see errors about a **Bundle ID** or **signing key** mismatch.
Base44 automatically configures a Bundle ID and signing key for your app files. These values cannot be changed inside the generated IPA or AAB files. If the values do not match a previous version that you uploaded manually or from another tool, the stores block the update.
**To resolve Bundle ID or signing key mismatches:**
1. Review the existing app listing in App Store Connect or Google Play Console and compare the Bundle ID and signing key with the values from your Base44 build.
2. If they do not match and you cannot update the existing listing, create a new app entry in the store and submit the Base44 build as a new app.
3. Update your icon, app name, or description if needed so people can clearly identify the new app.
Every mobile app package includes device-level permissions. Base44 uses AI to scan your app and set the permissions it needs. These permissions are not editable in the Base44 interface.
Apple and Google expect your privacy policy and store listing to explain which types of data your app collects, how you use it, and which device features your app accesses.
**If your app is rejected due to permissions or privacy issues:**
1. Read the rejection email carefully to see which permission or behavior the store is concerned about.
2. Update your privacy policy and terms pages on your Base44 app so they:
* Describe the types of data your app collects (for example, location, camera, or microphone)
* Explain why you collect the data and how people can contact you about privacy
3. Make sure links to your privacy policy and terms appear before people register or sign in (for example, in your home page footer or login screen).
4. Resubmit your app after updating the content.
Base44 automatically chooses the main entry URL for your mobile app based on your published app. You cannot currently select a different start page just for the app.
Apple and Google require that people can access your **Privacy Policy** and **Terms of Use** before they create an account.
**To keep your app compliant:**
1. Make sure your privacy and terms pages are live on your Base44 app.
2. Add visible links to these pages from the entry page of your app, such as in the footer or a menu.
3. If your app uses a gated or members-only home page, ensure that privacy and terms links are still accessible before sign-up (for example, from the login or sign-up page).
***
## FAQs
Click a question below to learn more about submitting your Base44 app to the Apple App Store and Google Play.
You do not need a readiness score of 100. A higher score usually means your app follows more store guidelines and may have a smoother review. Focus on resolving all critical issues and as many partial issues as you can before you submit.
Yes. You can submit your app to only one store. You do not have to publish to both stores. Use the App Store scan and **Create App Store files** if you only need an iOS app, or use the Google Play scan and **Create Google Play files** if you only need an Android app.
You can still generate files and submit your app, but there is a higher chance that Apple or Google ask for changes during review. It is best to reread the scan descriptions for each failed check, decide whether the risk is acceptable for your app, and run another scan after any updates so you see the latest readiness score.
Base44 helps you scan your app against store guidelines, improve it with AI, and generate the IPA and AAB bundles. You still need to submit the app through your own App Store Connect and Google Play Console accounts, where you control the listing details, pricing, and release settings.
No. Base44 support does not track the progress of your submission, contact Apple or Google, or manage conversations with the review teams. To see the status of your app, sign in to App Store Connect and Google Play Console, read their emails, and follow any instructions they provide.
No. You do not need a custom domain to submit your app to the Apple App Store or Google Play. Base44 can scan your app and generate the App Store and Google Play files using your default Base44 URL. A custom domain is optional and can help with branding and SEO, but it is not required for store submission.
No. Your Base44 mobile app loads your live app in a web view. This is a native wrapper that opens only your app URL, so when you change content or design in Base44 and publish your app, those updates usually appear in the app without submitting a new version to the Apple App Store or Google Play.
You only need to generate new app files and submit an update when something in the app shell changes, such as the app name, icon, or bundle identifiers, or when you add features that require new device permissions. In those cases, regenerate the files in Base44 and submit an updated version to the stores.
Your Base44 mobile app focuses on running your web experience inside a secure web view rather than as a fully native app.
**Current limitations:**
* Native-only features such as push notifications, full offline mode, and HealthKit are not supported yet.
* Some native capabilities may still require additional review by Apple or Google, depending on the permissions your app needs.
Base44 continues to expand native feature coverage over time. Check product updates and release notes to see which new native features are available for your app.
Base44 uses token-based authentication with a default session duration of up to 90 days. Someone who signs in to your app stays signed in on that device until they sign out or clear the app's cache, or until the 90-day period ends. You do not need to configure this manually.
# Managing and using custom integrations
Source: https://docs.base44.com/documentation/integrations/using-custom-integrations
Connect shared APIs once and reuse them across every app in your workspace.
Workspace integrations let you register shared external APIs at the workspace level from an OpenAPI specification. You import a spec (URL or JSON), select up to 30 operations, and connect the API once in your workspace. Any app in that workspace can then call those approved operations via `base44.integrations.custom.call()`, instead of setting up its own connection. This works for both internal APIs and partner APIs that your team depends on.
These integrations are designed to be secure and reliable. Sensitive auth headers are stored as encrypted workspace secrets and are never sent back to the browser. At runtime, calls are proxied server side with protections against server side request forgery (SSRF), and workspace headers take precedence so apps cannot override them. Editing an integration uses the stored specification rather than the live URL, and saving is blocked if headers fail to load so you do not lose them by mistake.
**Important:**
* Access to workspace integrations is restricted to workspace admins and owners on a **Builder** plan or higher.
* Any member in the workspace can use an existing workspace integration in their apps, even on a free plan.
***
## Understanding workspace integrations
A workspace integration is a shared connection from your workspace to an external or internal API, such as a CRM, support system or custom backend. You define it once in your workspace from an OpenAPI or Swagger specification, choose which operations are allowed, and any compatible app in that workspace can call those operations. This keeps configuration in one place and makes it easier to manage the external systems your team relies on.
**Workspace integrations are useful when you want to:**
* Use the same external or internal API across multiple apps in the same workspace.
* Keep sensitive details such as API keys and tokens in one secure place, managed as workspace secrets.
* Limit which endpoints are available so apps only call approved, spec-defined operations.
* Keep a clear separation from one-click OAuth connectors, as workspace integrations are workspace-managed and spec-driven.
* Make it clear which external systems your workspace relies on.
***
## Creating an integration
Create a custom workspace integration when you want to expose a new external API to your apps and that API has an OpenAPI or Swagger specification. Base44 reads the specification, lets you choose the endpoints you want to expose, and creates a reusable integration for your workspace.
**Before you begin:** Make sure you have access to a valid OpenAPI or Swagger specification for the API you want to use. You can either host it at a public URL or copy the JSON.
### Step 1 | Add a new integration
1. Click your workspace name at the bottom left of your account.
2. Click **Settings**.
3. Click **Integrations**.
4. Click **New Integration**.
5. Choose how you want to provide your API specification:
* **From URL:** Enter the public URL of your OpenAPI or Swagger file in the **OpenAPI Specification URL** field, for example `https://api.example.com/openapi.json`.
* **Paste JSON:** Paste the full JSON definition of your OpenAPI or Swagger specification into the editor.
6. Click **Continue**.
### Step 2 | Select endpoints to expose
Select up to 30 endpoints for your integration.
**To select endpoints:**
1. Review the list of endpoints that Base44 discovers from your specification. You can use the search box to find specific paths or operations by method or path name.
2. Select the checkboxes for the endpoints you want to expose to your workspace.
3. Click **Continue**.
### Step 3 | Configure your integration
Configure your integration details, set the base URL, and add any custom headers that your API needs. Sensitive header values stay protected. Common auth headers such as `authorization`, `x-api-key`, `api-key`, `x-auth-token`, `x-access-token`, `x-secret-key`, `bearer`, `secret`, `password` and `credential` are always treated as secrets. Their values are stored as encrypted workspace secrets, never sent back to the browser, and show as "sensitive – delete to change" when you edit the integration.
**To configure your integration:**
1. Set the details for your integration:
* **Slug:** Enter a URL-friendly identifier for the integration, for example `my-api`.
* **Name:** Enter the display name that appears in your workspace integrations list.
* **Description:** Describe what the integration does so teammates know when to use it.
* **Base URL:** Confirm or update the base URL for your API.
2. If your API requires headers that must be sent with every request, add them in the **Custom Headers** section:
1. Click **Add Header**.
2. Enter the header name, such as `Authorization` or `X-API-Key`.
3. Enter the header value, such as your API key or token.
4. Use the visibility icon to hide or reveal the header value as needed.
3. Review the list of selected endpoints at the bottom of the dialog.
4. Click **Create Integration**.
***
## Managing workspace integrations
After you create a workspace integration, it appears in the **Integrations** tab of your workspace. From there, you can view its details, edit settings, or remove it if you no longer need it.
### Viewing integration details
1. Click your workspace name at the bottom left of your account.
2. Click **Settings**.
3. Click **Integrations**.
4. View the integration you want to inspect and expand the endpoints.
### Editing an integration
1. Click your workspace name at the bottom left of your account.
2. Click **Settings**.
3. Click **Integrations**.
4. Click the **More Actions** icon on the integration card.
5. Click **Edit**.
6. Update the fields you need and save your changes.
If you need to expose additional endpoints from the same API, consider creating a new integration or updating the existing one based on how you want apps to use it.
### Deleting an integration
1. Click your workspace name at the bottom left of your account.
2. Click **Settings**.
3. Click **Integrations**.
4. Click the **More Actions** icon on the integration card.
5. Click **Delete**.
6. Click **Delete** again to confirm that you want to remove it from the workspace.
**Important:** Deleting a workspace integration can break any app-level integrations that depend on it. Make sure you review active apps before you remove a shared integration.
***
## FAQs
Click a question below to learn more about workspace integrations.
After you create a workspace integration, any new apps you build in that workspace can use it.
When you create a new app, Base44 checks your workspace integrations. If you mention one of those systems in your first prompt, it automatically uses the matching workspace integration. For example, if you already added a GitHub API integration and you say "Create an app based on my GitHub issues," Base44 uses the GitHub integration that is configured for the workspace without you needing to select it.
You can then review and adjust how the app uses that integration from the app's integrations settings.
To create or manage workspace integrations, you need to be a workspace owner or admin on a Builder plan or higher with access to the **Integrations** tab in your workspace settings. If you do not see the **Add Integration** button or edit options, contact your workspace admin and ask them to either update your role or create the integration for you.
If the API owner updates the specification at the URL you used, the details that Base44 reads from it can change the next time you update or recreate the integration. When you know the spec changed, review your workspace integration and check that the exposed endpoints still match what your apps expect.
Header values such as API keys and tokens are stored as part of the workspace integration configuration. Only teammates with permission to manage workspace integrations can view or edit these values. Use the visibility icon in the Configure step to hide values on screen when you work in shared spaces.
Yes. You can create multiple workspace integrations that point to the same external API. For example, you might create separate integrations for sandbox and production environments, or for different sets of endpoints that are used by different apps.
When you need to rotate a key or token, generate the new credential in the external system first. Then edit the workspace integration, update the relevant header value with the new key or token and save your changes. After you update the workspace integration, apps that use it start sending the new value automatically.
Check that the URL points directly to a valid OpenAPI or Swagger JSON or YAML file and that it is publicly accessible from your browser. If the file is behind authentication or served as HTML, Base44 cannot parse it.
If you still see errors, switch to the Paste JSON option, copy the raw JSON of your specification and try again.
For a quick test, you can also try a known valid spec such as a public sample API to confirm that the flow works.
# Testing your app's flows
Source: https://docs.base44.com/documentation/managing-app-data/testing-agent
Use the testing agent to run browser-based end-to-end tests on your app's key flows and catch issues before your users do.
The testing agent is rolling out gradually and may not be available in your account yet.
Before you share your app with users, you want to know it actually works. The testing agent runs browser-based tests on your app's key flows, simulating real user interactions like submitting a form, completing a checkout, or navigating between pages.
The agent opens a real browser, follows the flow like a user would, then tells you exactly what passed, what failed, and why.
***
## Creating your tests
You can let AI generate tests from your app's context and chat history, or write them yourself.
### Generating tests with AI
Let AI suggest tests based on your app's flows and chat history, then pick the ones you want to add.
1. Click the **More Actions** icon at the top of the app editor.
2. Select **Testing Agent**.
3. Click **Generate tests with AI** if you have no tests yet, or click **Add Test** and select **Generate with AI** if you already have tests.
4. Review the suggested tests, uncheck any you don't want, and click **Add Tests** to confirm.
Generating tests with AI uses credits, even if you don't add the suggested tests.
### Adding a test manually
Write your own test by giving it a name and describing the flow you want the agent to run.
1. Click the **More Actions** icon at the top of the app editor.
2. Select **Testing Agent**.
3. Click **Add test manually** if you have no tests yet, or click **Add Test** and select **Add manually** if you already have tests.
4. Enter a **Test name**.
5. Enter a **Prompt scenario** describing the flow you want to test (for example, "Browse products, add one to cart, and complete checkout").
6. Click **Save**.
Click **Enhance Prompt** to let the AI refine your scenario description before creating the test.
***
## Running your tests
All your tests are listed in the testing agent panel. Each test shows its current status and the last time it ran.
**To run one or more tests:**
1. Click the **More Actions** icon at the top of the app editor.
2. Select **Testing Agent**.
3. Select the checkboxes next to the tests you want to run.
4. Click **Run test** at the bottom of the panel.
The agent opens a browser session and runs the flow automatically. You can watch what the agent is doing in real time as it runs.
To stop a running test, click the **More Actions** icon in the live view and select **Stop test**.
**Notes:**
* Running tests uses credits. The amount depends on how long and complex the test is. You can see the credits used for each run in the test results.
* If you run out of credits while a test is running, the test is automatically paused. To continue testing, upgrade your plan.
***
## Viewing test results
Once a test finishes, click the test card to open its results. From there you have a few options:
**See the issues**
Click the **Issues** tab to view any problems the agent found, labelled as Critical or Warning. Select the ones you want to fix using the checkboxes, then click **Fix with AI**. This automatically sends a prompt to the AI chat so the AI can get straight to work on a fix.
**See what the agent did**
Click the **Activity** tab to see every step the agent took in the browser, in order. Click the arrow on any step to expand it and see more detail about what the agent did at that point.
**Re-run the test**
After applying a fix, click **Test Again** at the bottom of the panel to re-run the test and confirm the issue is resolved.
If a test was paused because you ran out of credits, you'll see a **Test paused** status on the test card.
***
## Managing your tests
You can edit or delete a test from inside its detail view.
**To edit or delete a test:**
1. Click the **More Actions** icon at the top of the app editor.
2. Select **Testing Agent**.
3. Click the test card to open it.
4. Click the **More Actions** icon at the top right of the detail view.
5. Do one of the following:
* **Edit:** Update the test name or scenario.
* **Delete:** Remove the test and all its results permanently.
Use the sort icon at the top of the panel to change how your tests are ordered. You can sort by alphabetical (A to Z), date created (newest to oldest), last tested (most recently run first), or priority (tests that need attention shown first).
***
## FAQs
Click a question below to learn more about the testing agent.
The testing agent is available on all plans, including the free plan.
These are 2 separate features. The testing agent runs automated browser tests that simulate real user interactions, so you can check that your key flows work correctly.
Test data is a separate database environment that lets you add and modify records without affecting your live production data. Read more about [testing your app with test data](https://docs.base44.com/documentation/managing-app-data/testing-your-data).
No. The testing agent runs against a separate environment, so your production data is never affected when you run tests.
This status appears when your app's code has changed since the test last ran. Re-run the test to get an up-to-date result.
Yes. The testing agent signs in to your app automatically before each run, so any flow that requires a logged-in user will work. What it can't do is test the login process itself. Flows that involve filling in a login form, entering an OTP code, or clicking an email verification link are not supported yet.
Each test run uses around 1 to 4 credits, depending on how complex the flow is. Simpler tests use fewer credits, while longer multi-step flows use more. Generating tests with AI uses credits too, at roughly half the rate of a test run.
If you run out of credits mid-test, the test is automatically paused. To continue testing, upgrade your plan directly from the testing agent panel. Re-running a paused test starts fresh from the beginning.
Yes. Each time you run a test, the agent starts fresh, just like a brand new visitor to your app, with no existing data or history. This means every test gives you a clean, consistent result no matter how many times you run it, and nothing the agent does during the test affects your real users.
Not yet. Scheduled and automated test runs are planned for a future update.
The testing agent opens a real browser session and simulates user interactions step by step, so duration depends on how complex the flow is. Tests on simple flows are faster, while multi-step flows with more actions take longer.
# Testing your app with test data
Source: https://docs.base44.com/documentation/managing-app-data/testing-your-data
Test your app in a safe environment without affecting your live production data
Test your app using a separate test database so you can try changes without affecting your live production data. After you turn on the **Test Data** toggle in **App Settings**, you can switch between production and test data, so you can see how your app behaves with test records before going live.
For example, if you are building a bookings app, you can use test data to create fake services and test bookings, cancellations, and reminders without filling your real schedule. You can check that your flows, prices, and emails look right with test data, and keep your live app's calendar for real clients only.
**Important:**
* This feature is available on the **Builder** plan and higher.
* Your published app always uses production data. Turning on testing mode only affects data in the dashboard and in preview.
***
## Turning on testing mode
Turn on the **Test Data** setting in **App Settings** to create a separate test database for your app and access the testing mode in preview.
**Note:** When you turn on Test Data, it creates a new, empty database. Existing production data is not copied to the test database.
**To turn on the testing mode:**
1. Click **Dashboard** in your app editor.
2. Click **Settings**.
3. Click **App Settings**.
4. Turn on the **Test Data** toggle.
***
## Accessing your test data
Go to the **Data** tab to view and edit records in your tables and choose whether you are working with production or test data. You can keep production as your source of truth while you experiment with structure or content in the test environment.
**To access your test data:**
1. Click **Dashboard** in your app editor.
2. Click **Data**.
3. Click the data table you want to work with on the left menu.
4. Click **Test** at the top.
5. Add, edit, or delete records.
**Tip:** You can also ask the AI chat to add test data for you.
**Notes:**
* Changes you make with **Production** selected affect only your production data.
* Changes you make with **Test** selected affect only your test data.
* Production and test data are completely separate. Updating one does not update the other.
***
## Testing your app in preview
Use preview mode to see how your app behaves with real interactions while keeping your live data safe. At the top of your app preview, you can switch between production and testing mode so you control where preview reads and writes data.
If you make changes in the testing mode, you can go to the **Data** tab and select **Test** to see the records created.
**To preview your app with testing mode:**
1. Click **Preview** in your app editor.
2. At the top of the preview, click the **Turn on test data** icon .
3. Use your preview as normal to create, update, or delete data.
**Notes:**
* When testing mode is turned on in preview, all data reads and writes go to your test data.
* When testing mode is turned off in preview, all data reads and writes go to your production data.
* Turning the test mode on and off in preview does not affect which environment your published app uses. The live app always uses production data.
***
## Sharing a testing link to your app
Share a testing link so teammates or clients can try your app with test data and unpublished changes. Anyone who opens the testing link interacts with your test database only, so your live app and production records stay safe.
**To share a testing link:**
1. Click **Publish** at the top right of your app editor.
2. Click **Testing Link**.
3. Click **Copy testing link**.
4. Paste the link where you want to share it, such as in an email or chat.
**Notes:**
* The testing link is available only after you turn on **Test Data** in **App Settings**.
* People who open the testing link see your unpublished changes and interact with test data only. The link does not change your live app or production records.
***
## FAQs
Click a question below to learn more about testing your app with test data.
When you turn on testing mode, your test database starts empty. Records only appear after you add or edit the test data in the Data tab, or you create data in preview mode with testing mode turned on.
There is no automatic sync between production and test data in either direction. If you want a record to exist in both environments, create or import it separately.
You can go back to **Settings** and **App Settings** at any time and turn off the **Test Data** toggle. When you turn it off, the test database is hidden from the Data tab, but existing test data is kept in case you turn it back on later.
When you use the AI chat to add or update data, it works with production data by default. However, you can also ask it to add, edit or delete test data:
# Viewing and customizing your app analytics
Source: https://docs.base44.com/documentation/performance-and-seo/app-analytics
Track traffic, sales, customize your dashboard, and measure the actions that matter most in your Base44 app.
App analytics helps you understand how people interact with your Base44 app so you can make informed decisions. You can see how many people visit, which pages they view, where they come from, and how often they complete key actions like sign-ups or button clicks. You can also see payment trends for supported payment providers to understand how your app generates revenue.
***
## Accessing your analytics
Access your app's analytics from your dashboard at any time to see how your app is performing.
**Notes:**
* Analytics starts collecting data after you publish your app and people begin visiting it. New or unpublished apps do not show analytics data.
* Analytics history is stored based on your Base44 plan:
* **Free plan:** Data is kept for 7 days.
* **Starter plan and higher:** Data is kept for 30 days.
* **Enterprise plan:** Data is kept for 365 days.
**To access analytics for your app:**
1. Click **Dashboard** in your app editor.
2. Click **Analytics**.
***
## Traffic overview
The **Traffic Overview** tab shows how people discover and use your app. It focuses on visits, visitors, and behavior.
### Understanding your traffic metrics
At the top of the Traffic Overview tab, you can see:
* **Total visits:** All visits in the selected period, including repeat visits from the same visitor.
* **Unique visitors:** Each visitor counted once in the selected period, even if they visit multiple times.
* **Visit duration:** The average length of a visit during the selected time range.
* **Live visitors:** The number of people currently active in your app, updated in real time.
Below the traffic metrics, you see a time-based chart of your visits over the selected period and a set of cards. These cards break your data into different views, such as which pages people visit, where they are located, how they arrived at your app, which operating systems and devices they use, and any custom events or properties you decide to track.
### Customizing your dashboard
You can customize the layout of the Traffic Overview tab so it shows the cards that matter most to you.
**To customize your traffic dashboard:**
1. Click **Dashboard** in your app editor.
2. Click **Analytics**.
3. Make sure **Traffic Overview** is selected.
4. Click the **Customize** icon .
5. Select the checkboxes for the cards you want to show.
6. Drag the **Reorder** icon to change the order of the cards up or down in the list.
7. Click **Save**.
### Choosing the date range
Change the date range in Traffic Overview to focus on a specific period.
**To choose the date range for Traffic Overview:**
1. Click **Dashboard** in your app editor.
2. Click **Analytics**.
3. Make sure **Traffic Overview** is selected.
4. Click the **Calendar** icon at the top of the page.
5. Select one of the presets or choose your own dates.
### Filtering your data
Use filters in Traffic Overview to focus on specific segments, such as a particular page or country.
**To filter your traffic data:**
1. Click **Dashboard** in your app editor.
2. Click **Analytics**.
3. Make sure **Traffic Overview** is selected.
4. Click **Filters** and select what you want to see.
### Changing a chart type
Choose how each Traffic Overview card displays its data.
**To change a card’s chart type in Traffic Overview:**
1. Click **Dashboard** in your app editor.
2. Click **Analytics**.
3. Make sure **Traffic Overview** is selected.
4. Click the **More Actions** icon at the top right of the relevant card.
5. Select a chart type.
***
## Sales overview
The **Sales Overview** tab shows payment metrics for payments processed through Stripe. It focuses on completed payments rather than visits.
### Understanding your sales metrics
At the top of the Sales Overview tab, you can see:
* **Total payments:** The total processed payment amount in the selected period.
* **Transactions:** The number of successful payment transactions.
* **Customers:** The number of unique customers who completed at least one payment.
* **Refunds:** The total refunded amount in the selected period.
Below the sales metrics, you can see:
* **Payments by day of week (avg):** A chart that shows your average payments for each day of the week in the selected period.
* **Top customers:** A list of customers with the highest total payments, including customer name, revenue, and number of transactions.
* **Recent transactions:** A table of your latest payments, including transaction ID, amount, status, currency, and a link to more details.
**Notes:**
* The Sales Overview currently shows payments processed through Stripe only. Support for additional providers, such as Wix Payments, will be added in the future.
* If you process payments in more than one currency, you can view the dashboard per currency using the currency drop-down at the top of the tab.
### Choosing the date range
Change the date range in Sales Overview to focus on a specific sales period.
**To choose the date range for Sales Overview:**
1. Click **Dashboard** in your app editor.
2. Click **Analytics**.
3. Click **Sales Overview**.
4. Click the **Calendar** icon at the top of the page.
5. Select one of the presets or choose your own dates.
***
## Tracking custom events
Custom events let you track specific actions people take in your app, such as button clicks, sign-ups, or form submissions. Base44 uses AI to help you define these events and wire them into your app so they appear as cards in the Traffic Overview tab.
Each custom event card shows:
* The name of your event, for example **“Shop Now” button clicks**.
* A total count for the selected time range, such as **Total clicks**.
* A chart that shows how the event changes over time.
You can filter and change the chart type of a custom event card in the same way as the built-in cards in Traffic Overview.
**Important:** The number of custom events you can track depends on your plan:
* **Free:** Up to 3 custom events.
* **Starter plan and higher:** Unlimited custom events.
Custom events are part of the Traffic Overview tab only. They do not appear in Sales Overview.
### Creating a custom event
Describe the event you want to track in the AI chat, or choose from the AI suggested events.
**To create a custom event:**
1. Click **Dashboard** in your app editor.
2. Click **Analytics**.
3. Make sure **Traffic Overview** is selected.
4. Click **+ Add Event**.
5. Click one of the suggested prompts or describe the action you want to track in the AI chat in your own words. For example:
* “Track clicks on the Sign Up button.”
* “Track when someone submits the contact form.”
* “Track how many people view the Pricing page.”
6. Review the event description that appears in your Base44 AI chat on the left and send the prompt to the chat.
7. Publish your app so the new event is live.
### Viewing event details
You must first publish your app to see event details for your custom events. Events in preview are not counted towards the analytics data.
**To view event details for a custom event:**
1. Click **Dashboard** in your app editor.
2. Click **Analytics**.
3. Make sure **Traffic Overview** is selected.
4. Click the **More Actions** icon at the top right of the custom event card.
5. Click **Event details**.
6. Click **Export CSV** to download the data.
***
## FAQs
Click a question below to learn more about app analytics in Base44.
Different analytics tools measure visits and visitors in different ways. Some focus on browser sessions, others focus on logged-in accounts, and each tool can handle timeouts or bot traffic differently. When you compare analytics with another platform, look at trends and relative changes instead of expecting identical numbers.
Analytics only stores data for the period that matches your plan. If you need longer history, you can use the Analytics API to pull data into your own data warehouse or reporting tools and archive it there.
For custom events, you can export the data to a CSV file.
Analytics respects your app dashboard permissions. Anyone who can access the app dashboard can see Analytics.
If you make changes to the Analytics dashboard, such as changing the chart types or adding custom events, everyone who has access will see the same view.
After you create and publish a custom event, trigger the action in your app yourself, then open **Event details** and check to see if an event is displayed.
If you see new entries with recent timestamps, the event is tracking correctly. If not, make sure the latest version of your app is published and that you followed the steps from the AI chat to wire the event.
There is no reset button for analytics. Data remains available until it reaches the end of your plan’s retention period. To focus on a new period, use the date range selector to view only data from the date you care about.
Look at both numbers side by side. If unique visits are steady but total visits grows, the same people are visiting more often. If unique visits grow but total visits stays flat, new people arrive but do not return often, so you may want to improve retention.
First, check the date range to make sure you are looking at the right period. Then compare activity across several weeks to see if this is a consistent pattern or a short-term change.
Set a date range that starts just before your release and compare it with the period after. Look for changes in **Unique visitors** and the **Page traffic** card to see whether people are visiting the new areas more often.
# Recording and replaying user sessions
Source: https://docs.base44.com/documentation/performance-and-seo/session-recordings
Record how people use your published app, replay their sessions to spot friction like rage clicks and errors, and get AI summaries of what happened.
Session recordings let you watch how people actually use your published app, so you can see where they succeed, where they get stuck, and what to improve.
Each recording replays a real visitor's session and flags moments of friction such as rage clicks, dead clicks, and errors. You turn recordings on in your app settings, then review them in the Session recordings tab of your app analytics.
**Important:**
* Session recordings are available on the **Builder** plan and above. If you are on the Free or Starter plan, upgrade to start recording sessions.
* Recording sessions may require visitor consent in some regions, such as the EU, the UK, and California. You are responsible for letting your app's visitors know that their sessions are recorded and for getting any consent the law requires. Base44 does not add a consent banner to your app, so make sure you meet your local privacy laws before you turn recordings on. Depending on where your visitors are, this may mean adding a cookie or consent banner to your app, or another requirement.
***
## Turning on session recordings
Recordings capture real visitors on your published app, so nothing is recorded until you turn the feature on and publish your app.
**To turn on session recordings:**
1. Click **Dashboard** in your app editor.
2. Click **App Settings**.
3. Scroll to the **Advanced Capabilities** section.
4. Turn on the **Session recordings** toggle.
5. Publish your app so recordings begin as people use it.
**What to know about limits and storage:**
* You can record up to 500 sessions every 30 days. When you reach the limit, your existing recordings stay available and new recordings resume on the date shown in your dashboard.
* You can generate up to 50 AI summaries each month.
* Recordings are stored for 30 days, then removed automatically.
***
## Viewing your session recordings
View your recordings any time from your app analytics to see how people are moving through your app. Each recording shows the recording ID, date, duration, user, country, browser, operating system, and device.
**To view your session recordings:**
1. Click **Dashboard** in your app editor.
2. Click **Analytics**.
3. Click the **Session recordings** tab.
4. Click a recording to open it and replay the session.
***
## Replaying a session
When you open a recording, you can replay the session and move straight to the moments that matter.
Each recording has the **Summary**, **Details**, and **Events** tabs. Use **Events** to step through everything that happened, such as page views, clicks, and form submissions.
* **Play, pause, and change the playback speed:** Control the replay like a video, and slow it down or speed it up as needed.
* **Skip inactive periods:** Jump past idle time so you only watch moments of activity.
* **Jump to friction points:** Move straight to the errors and rage clicks marked on the timeline.
* **Open dev tools:** Click Dev tools to review the console, network requests, errors, and performance captured during the session.
***
## Summarizing a session with AI
The AI summary turns a recording into key insights so you can understand a session without watching all of it.
The summary gives you a short overview of what happened, **Friction points** flagged by severity such as warnings and information, and **Suggested next steps** to improve the experience.
**To summarize a recording with AI:**
1. Click **Dashboard** in your app editor.
2. Click **Analytics**.
3. Click **Session recordings**.
4. Click **View** on a recording.
5. In the **Summarize with AI** panel, click **Summarize**.
6. Review the **AI summary** when it finishes.
***
## Finding specific sessions
Narrow the list down to the sessions you care about using search, filters, and date ranges.
* **Search:** Find a recording by its ID or name.
* **Filter:** Focus on a device, country, browser, operating system, page, or issue type such as errors, rage clicks, dead clicks, a refreshed URL, or a crash.
* **Choose a date range:** View recordings from a preset period or your own custom dates.
* **Show favorites:** Star the recordings you want to revisit, then filter to show only those.
***
## Managing your recordings
Rename a recording to make it easy to find later, or delete recordings you no longer need.
Deleting a recording permanently removes it and its session data. This cannot be undone.
**To rename or delete a recording:**
1. Click **Dashboard** in your app editor.
2. Click **Analytics**.
3. Click **Session recordings**.
4. Hover over a recording and click the **More Actions** icon .
5. Click **Rename** or **Delete**.
***
## FAQs
Find answers to common questions about session recordings in Base44.
Session recordings capture real visitors on your published app. Sessions in preview are not recorded, so publish your app to start collecting recordings.
No. Turning off the toggle stops new sessions from being recorded. Your existing recordings stay available until you delete them or they reach the 30-day storage limit.
New sessions stop being recorded for the rest of the period, and your dashboard shows the date when recording resumes. The recordings you already have stay available.
Session recordings follow your app dashboard permissions. Anyone who can open your app dashboard can view the recordings.
Recording captures sessions across your whole app. To focus on a specific page, country, device, or issue, use the filters in the Session recordings tab after the sessions are recorded.
# Setting up Stripe
Source: https://docs.base44.com/documentation/setting-up-your-app/setting-up-payments
Set up and test Stripe payments on your app before going live with real customers.
Base44 lets you set up Stripe payments directly from the AI chat in your app editor. You can ask the chat to install Stripe and create a checkout flow for your app. Everything starts in a safe Stripe test environment, so you can run test payments before you connect your live Stripe account and go live.
This flow was released in January 2026 and replaces the old Stripe flow.
***
## Step 1 | Install Stripe
Start by asking the Base44 chat to install Stripe for your app. Base44 sets everything up in a test environment so you can experiment without real charges.
**Note:** Stripe is available on the **Builder** plan and above.
**To install Stripe:**
1. Go to your app editor.
2. Ask the AI chat to set up payments on your app. For example, you can ask: `Connect a payment method so I can take payments from customers.`
3. Review the reply from Base44 describing that it will set up Stripe payments for your app in a test environment and click **Install Stripe**.
When you have installed Stripe, go to **Dashboard** → **Integrations** → **Stripe** to see the setup guide.
***
## Step 2 | Create your products
Ask the AI chat to create your products. For example, you can ask the chat:
`Create 3 products for my store:`
* `Classic Baseball Hat’ – $20`
* `Wool Beanie – $25`
* `Sun Visor – $18`
The products and prices are created directly in Stripe, and you’ll see and manage them from your Stripe Dashboard. If you want to change or add products later, you can ask the AI chat to do it for you.
Base44 then uses those Stripe products and prices when it builds your checkout flows. It doesn’t create a separate product database for you automatically.
***
## Step 3 | Test your checkout flow
After Stripe is installed, you can test your checkout flow using Stripe’s test card. This helps you confirm that the customer journey, from product selection to payment, behaves as expected.
**Note:** The checkout flow only runs on your published app, not in the editor preview. Make sure you publish your app first, then open the live site to run your test payment.
**To run a test payment:**
1. Click **Dashboard** in your app editor.
2. Click **Integrations**.
3. Click **Stripe**.
4. Click **Try a test payment** and then **Copy Card Number** so you can paste it during checkout
5. Publish your app.
6. Go through the checkout flow and at the payment step, enter:
* The test card number
* Any future expiry date
* Any 3 digit CVC
7. Complete the checkout to create a test payment.
***
## Step 4 | Claim your Stripe sandbox
When you are happy with how the test flow works, claim your sandbox by connecting your own Stripe account or creating a new one. This step links the test environment in Base44 to your Stripe account so you can move toward a live setup.
You can ask the AI chat to claim your Stripe sandbox, or you can do it yourself from your app's dashboard.
**Important:**
* You have 60 days to claim your Stripe sandbox.
* Make sure you connect the correct Stripe account for your business. This is the account that receives your payouts when you go live.
**To claim your Stripe sandbox:**
1. Click **Dashboard** in your app editor.
2. Click **Integrations**.
3. Click **Stripe**.
4. Click **Claim your Stripe sandbox**.
5. Click **Claim & Go Live**.
6. Follow the prompts to sign in to your existing Stripe account, or create a new Stripe account if you do not have one yet.
7. Complete any onboarding details that Stripe asks for, such as business and bank information.
8. When you return to Base44, check in **Setup** to confirm that the Claim your Stripe sandbox step shows as complete.
***
## Step 5 | Activate live payments
After you claim your sandbox, Base44 activates live payments for you. Once your Stripe account finishes activating, Base44 creates your live API keys automatically, so you no longer need to find and paste them from Stripe. This switches your app from test mode to live mode, where real charges are created when customers complete checkout.
**To activate live payments:**
1. Click **Dashboard** in your app editor.
2. Click **Integrations**.
3. Click **Stripe**.
4. Open the **Add your live API keys from Stripe** step. While your account finishes connecting, you see **Waiting for your Stripe account to finish activating**. This usually happens automatically.
5. If Stripe still needs more information, click **Resume setup in Stripe** and complete any onboarding details Stripe asks for, such as business and bank information.
Once your Stripe account is active, your live keys are added automatically and your app starts accepting real payments.
To use your own keys instead, click **Enter keys manually**, paste your live publishable and secret keys from your Stripe Dashboard, then click **Save API keys**.
***
## Setting up payment flows
After connecting Stripe in the AI chat and activating live payments, you are ready to set up real payment flows in your app. Each flow should send a logged in person to Stripe Checkout and, on the success page, confirm the payment and update their account while they are still logged in, instead of relying on webhooks alone.
Use the example prompts below in the AI chat and adjust the details so they match what you want to sell and how your app should change someone’s access after they pay. You can copy them as-is or tweak them to describe exactly what you want your app to do.
Let your users buy credits (e.g., “Buy 10 credits for \$10”) and automatically update their account after payment.
**What to type in the chat:** I want to let my users buy credits in my app using Stripe. After a successful payment, the user should be returned to my app and their credits should be added to their account.
* Verify the payment securely before adding credits.
* Add the correct number of credits to the user’s account.
* Make sure credits are only added once, even if the page is refreshed.
**Optional follow-up:** Add a “Buy 10 Credits” button to my homepage.
Let your users purchase a downloadable item and unlock access after payment.
**What to type in the chat:** I want to sell a digital product in my app using Stripe (for example, an eBook or course). After a successful payment, the user should be returned to my app and get access to the download or content.
* Record the purchase in my app.
* Unlock the user’s access to the product.
* Make sure the same payment can’t be used to unlock the product multiple times.
Let your users pay to book a time slot and save the appointment to their account.
**What to type in the chat:** I want to let my users book a paid service in my app using Stripe (for example, a yoga session or coaching call).
* Let my users choose a service and time slot.
* Handle the payment with Stripe.
* After a successful payment, save the booking (service, time, user) to a bookings collection.
* Show a clear confirmation in the app.
* Prevent double‑booking, even if the user refreshes the page or retries the confirmation.
Let your users sign up for a recurring plan and tag them as subscribed.
**What to type in the chat:** Build a Stripe subscription flow where my users can sign up for a recurring plan.
* Let my users choose a subscription plan in my app.
* Handle the recurring payment with Stripe.
* After a successful signup, mark the user as “Pro” (or subscribed) in their account.
* Store the subscription details so I can manage cancellations or billing updates later.
Allow your users to cancel their plan and downgrade their access level.
**What to type in the chat:**
Create a cancellation flow for subscriptions.
* Let my users cancel their subscription, either from a page in my app or via the Stripe customer portal.
* After a cancellation, update the user’s account so they lose their “Pro” / subscribed status.
* Optionally, show a clear message or redirect them to a downgraded page or plan.
If a refund is processed, remove credits or block content access.
**What to type in the chat:** Set up a secure flow to handle Stripe refunds.
* When a refund is processed, let an admin trigger a check from inside the app.
* Verify that the refunded payment belongs to the correct user.
* Revoke access or subtract credits from that user’s account.
* Prevent the same refund from being processed more than once.
**Optional follow-up:** Create an admin page where I can enter a Stripe payment or session ID, review the details, and apply the refund-related changes (like removing access or credits) manually.
Let your users buy a ticket for a one-time event and save their registration.
**What to type in the chat:** I want to sell tickets for an event in my app using Stripe.
* Let my users buy a ticket for a specific event.
* After a successful payment, save the attendee’s details (name, email, event) in an attendees list or collection.
* Show a clear confirmation or thank-you page after purchase.
* Optionally, generate a simple ticket or confirmation code the attendee can use at the event.
Let your users support your work or project with a one-time or monthly payment.
**What to type in the chat:** Create a flow to accept donations or tips in my app using Stripe.
* Let my users choose a suggested amount (for example, \$5, \$10, \$25) or enter a custom amount.
* Handle the payment with Stripe.
* After a successful payment, show a thank-you page or message.
* Optionally, save each donation in a Donations collection linked to the user’s account.
**Optional follow-up:** Add a “Support Me” button to my About page that takes users into this donation flow.
Let your users pay from other countries using local currency or methods.
**What to type in the chat:** Set up my Stripe payments so they work well for international users.
* Enable common international payment methods (for example, iDEAL, Bancontact, Apple Pay, Google Pay).
* Use Stripe’s automatic currency conversion so my users can pay in their local currency.
* Show prices in USD in my app, but let Stripe handle local pricing at checkout.
* Make sure the checkout flow works smoothly for users in different countries.
Let your users receive a professional invoice and pay later using a Stripe-hosted page.
**What to type in the chat:** Set up a Stripe invoicing flow in my app.
* Let me generate and send an invoice to a user from my app.
* Include a description, amount, and due date on each invoice.
* Email the user a secure payment link they can use to pay the invoice.
* After the invoice is paid, update the user’s record in my app (for example, mark the invoice as paid or unlock access).
**Optional follow-up:** Add an “Invoice a Client” button to my admin dashboard that starts this flow.
Let your users sell their own products or services and receive direct payouts.
**What to type in the chat:** Create a basic marketplace in my app using Stripe Connect.
* Let my users register as sellers and connect their own Stripe accounts.
* When a customer buys something, route the payment to the correct seller.
* Optionally, take a small platform fee from each transaction.
* Track transactions and show each seller their earnings and payout history.
[Stripe Connect](https://stripe.com/connect) is more advanced and may require additional setup or approval from Stripe.
***
## FAQs
Click a question below to learn more about setting up payments
No. When you follow step 2, payments are created in Stripe test mode. You use the test credit card number, and no real money moves between accounts.
You can track all payments and refunds directly in your Stripe Dashboard.
* Go to **Payments** to see individual charges and their status.
* Go to **Customers** to see a history of payments and refunds per customer.
* Go to **Balance** →**Transactions** for a ledger-style view of payouts, fees, and adjustments.
Any payment activity that happens through your Base44 app is recorded there in real time.
Yes. You can update products and pricing in your Stripe Dashboard at any time.
Those changes will apply to checkouts and subscriptions created through your Base44 app. If your app stores specific product or price IDs (for example, in your product data), make sure you update those references if you create new prices in Stripe rather than editing existing ones.
You don’t need to have a registered business to test things out. You can use Stripe’s sandbox (test) mode without entering real business details. But to accept real payments, Stripe requires verified business and banking information.
Once connected, your app can accept:
* Credit and debit cards
* Apple Pay and Google Pay
* Local payment methods (like iDEAL, Bancontact, etc.)
* Multiple currencies with automatic conversion
Yes. You can offer subscriptions or memberships in your Base44 app using Stripe. Stripe will automatically handle recurring payments and renewals.
Yes. Once Stripe is connected, your users can update their card details, view invoices, and manage subscriptions through Stripe’s secure billing portal.
If Stripe isn’t working as expected in your app, for example, nothing happens when a user clicks a “Pay” or “Checkout” button, you can view **Function Logs** in your Base44 dashboard to find out what’s going wrong.
This works for any payment-related feature, whether you're selling products, accepting bookings, or offering subscriptions.
**Here’s how to check the logs:**
1. Click **Dashboard** in your app editor.
2. Go to **Code** → **Functions**.
3. Find the function related to your payment flow (e.g., createCheckout for a store).
4. Click on the function, then scroll to the **Logs** section.
The Logs will show messages about what happened when the function ran. Look for **red error messages** — these can help pinpoint what went wrong
**Example:** If your app is a store and the *createCheckout* function fails, the logs might show:
* *"Product not found"* → one of the items in the cart is missing or has an incorrect ID
* *"Invalid price*" → a product is missing a price or set to 0
* *"Missing success\_url"* → Stripe doesn’t know where to send users after they pay
* *"API Key invalid"* → Stripe isn’t connected properly
Once you find the error message, you can copy it and paste it into the AI chat to ask your Base44 app for help fixing it.
If your payment flow does not complete or you see a blank page after payment, it is usually caused by the app environment or redirect settings. If you are using Stripe, test your flow by following step 3 above. If you built a custom payment flow or use another provider, check the following:
**Common issues:**
1. **Preview vs published:** Custom payment flows usually do not work correctly in preview. Always test payments on your published app, using the live URL.
2. **Redirect URL problems:** If you see redirect loops or a blank page after payment, check that your success and cancel URLs point to your published app domain, and that you are not mixing preview URLs with live payment callbacks.
3. **Login requirements:** If you require login to access your app or payment pages, make sure the success page after payment is still reachable for signed in people. Misconfigured auth can lead to blank pages after checkout.
4. **Pop up vs same window:** On mobile, some providers work better in a separate payment tab or pop-up. If you see issues when replacing the current page, consider opening the payment page in a new window if your provider supports it.
**To fix the issue:**
1. Check your browser console for errors.
2. In your Base44 dashboard, go to **Code** → **Functions** and review the logs for any payment related backend functions.
3. If you use webhooks, verify that your webhook URL is correct and that the endpoint is deployed and responding.
If you still cannot find the cause, copy any error messages from your console or function logs and paste them into the Base44 AI chat. Ask it to “help troubleshoot this payment flow step by step” and include details about your provider and setup.
Calling Stripe itself does not use Base44 integration credits. When your app calls Stripe using your own API keys through backend functions, the request goes directly from your backend function to Stripe. Base44's built-in services are not involved.
Integration credits are only used when your app uses Base44's own [built-in services](/Integrations/built-in-integrations).
If your Stripe payment flow also triggers any of these built-in services, for example, sending a confirmation email via Base44's SendEmail, those specific actions consume integration credits as normal. Stripe itself does not.
# Build apps, websites, and AI agents
Source: https://docs.base44.com/index
Base44 is a no-code AI platform for building full-stack apps, websites, and AI agents using natural language. Learn how to build, connect, publish, and manage your projects.
Welcome to Base44
What will you build?
Everything you need to build with Base44, from your first prompt to launch.
Base44 is a no-code AI platform for building full-stack apps, websites, and AI agents.
Describe what you want to create, and Base44 builds the design, data, and functionality. A managed backend, authentication, integrations, and hosting are built in, so you go from idea to a live product in minutes.
Build AI agents inside your apps, or create Superagents that work across your connected tools.
✳ Automations
346
Total hours ↗
Tracking expenses
1D1W1M
Sales pipeline
ACAcme IncProposal sent
NVNovato LabsNegotiation
BMBianca MillerWon
Get started
Pick a starting point
Explore guides to help you build, refine, and connect.
# Promoting your app
Source: https://docs.base44.com/promoting-your-app/social-content
Generate a social promotion strategy and ready-to-post content for your app.
Use Social content to promote your app with ready-to-post content. Define your goal, identify your target audience, and get platform-specific posts you can share right away.
Base44 analyzes your app and generates a tailored strategy, including the best platforms for your goal. You can review and adjust the selection before generating posts.
***
## Getting started with social content
Start by defining your launch goal and the audience you want to reach first.
**To create your content strategy:**
1. Click **Dashboard** in your app editor.
2. Click **Marketing** in the left menu.
3. Click **Social content**.
4. Click **Get started**.
5. Select your launch goal, and click **Continue**.
6. Select your target audience.
7. Click **Let's go**.
***
## Reviewing your suggested strategy
After choosing your goal and audience, Base44 suggests a strategy and pre-selects up to 3 platforms for your app. Review the suggested approach, confirm the selected platforms, and optionally add a social profile link to help Base44 match your tone.
Click **Back** if you want to return and change your goal or audience.
**To review and generate posts:**
1. Review your goal and suggested approach.
2. (Optional) Click **Edit selection** to change the selected platforms.
3. (Optional) Under **Match your tone**, paste a link to one of your social profiles. Base44 uses it to adapt the posts to your voice.
4. Click **Generate posts**.
***
## Sharing your social content
Base44 generates platform-specific ready-to-post content based on your selected strategy. For each selected platform, Base44 creates 3 post variations so you can review and choose the version that works best.
Each post card includes generated copy, a suggested visual, and actions to edit, copy, or share the content.
**To share a post:**
1. Click the tab for the platform you want.
2. Review the 3 generated post variations.
3. (Optional) Click the **Edit** icon to update the post. In the edit window, you can update the text, click **Improve with AI**, or click **Regenerate image**. Click **Save changes** when done.
4. (Optional) Click **Download Content** to save all generated images and text files.
5. Use **Share** on supported platforms, or click **Copy** to copy the post text and post it on the platform.
To generate a different set of posts, click the **More Actions** icon at the top right, select **Start Fresh**, and then click **Generate New Plan**. This replaces your current posts and edits, and cannot be undone.
***
## FAQs
It depends on the platform. Base44 supports direct sharing for **X**, **Reddit**, and **LinkedIn**. For **Facebook**, **Instagram**, and **TikTok**, copy the post content and post it on the platform.
Yes. Click the **Edit** icon on any post card to update the text, use **Improve with AI**, or click **Regenerate image** to create a new visual.
Yes. Click **Download Content** to download the generated assets, including text files and images for each platform.
Base44 analyzes your app and pre-selects up to 3 platforms from Instagram, X, LinkedIn, TikTok, Facebook, and Reddit based on your goal and target audience. You can edit the selection before generating posts.
The generated content changes to match the tone and format of each platform. You can review and edit the suggested platform selection before generating posts.
You can select up to 3 target platforms when reviewing the suggested strategy.
No. Social content does not require connecting your social media accounts. It generates strategy and posts you can publish wherever you like.
Yes. The generated posts can be adapted for any platform.
Generating a social content plan uses 10 integration credits.
Using **Improve with AI** or **Regenerate image** on an existing post costs 1 integration credit.
# Submitting your app to Launchpad
Source: https://docs.base44.com/promoting-your-app/submitting-to-launchpad
Submit your app to Launchpad for a chance to win credits, get featured, and reach more people in the Base44 community.
[Launchpad](https://app.base44.com/launchpad/) showcases public, published apps built with Base44. Submit your app so the Base44 community can discover it, try it, and vote for it. Top apps can win credits and get featured on Launchpad.
Browse submitted apps, vote for your favorites, and see what the Base44 community is building.
***
## About Launchpad
Launchpad is a community space for apps built with Base44. People browse submitted apps, vote for their favorites, and help them climb the leaderboard.
You can submit one app every 30 days. If your app is approved, it appears on Launchpad.
Put your app in front of people browsing apps built by the Base44 community.
Share your Launchpad listing with your network and bring more people to your app.
Top apps earn credits and a featured spot on Launchpad.
When a round ends, submitted apps move to **All Apps**. Winning apps also appear in the **Wall of fame**.
***
## Preparing your submission
A strong submission helps people quickly understand your app, see why it matters, and decide to try and vote for it.
Help people understand what your app does and why they should try it.
Add screenshots or a short demo video that show your app at its best.
Use these tips to make your submission stronger:
* **Choose accurate categories:** Select the categories that best match your app so people can find it.
* **Tell the story:** Use your description to explain who the app is for, why you built it, and what makes it different.
* **Use content you have rights to:** Make sure your app details, screenshots, and submitted materials are yours or that you have permission to use them.
Open your app in the editor and ask the AI chat to help prepare your Launchpad submission.
```text wrap theme={null}
Help me prepare my Launchpad submission. Write a clear tagline, a strong description, 3 category suggestions, screenshot ideas or a short demo video walkthrough, and a short message I can share when my app goes live. My app is: [describe your app].
```
***
## Submitting your app
Choose the public app you want to submit, review its security scan, add your launch details, upload screenshots or a short demo video, and submit it to Launchpad. After you submit your app, it is reviewed. If approved, it appears on Launchpad.
**To submit your app to Launchpad:**
1. Click **Launchpad** in the sidebar.
2. Click **Submit your app**.
3. Choose the app you want to submit, then click **Continue**.
4. On the **Submit your app** page, complete the following sections:
* **Selected app:** Review the app you selected. Click **Select another app** to swap the app, or click **Manage app** to view your live app, edit your app logo, rename your app, or open your app settings.
* **Security scan:** Wait for the automatic security scan to finish. Click **Run security scan** to scan the app again after making changes.
* **Launch details:** Select up to 3 categories, enter a short **Tagline**, and add a **Description** that explains what your app does and why people should try it. Click **Improve with AI** to refine your description, then click **Preview your Launchpad card** to review how your app appears on Launchpad.
* **Showcase your app:** Upload up to 5 screenshots or a short demo video. Supported video formats are MP4 and WebM, up to 50 MB. Drag items to reorder. For screenshots, use images that are at least 1280 x 720 pixels.
* **Terms & Conditions:** Click **Read** to review the Launchpad Terms of Service.
5. Click **Submit**.
***
## Tracking and managing your submission
After you submit your app, go to **My submissions** to check its status and manage your submission.
**To track and manage your submission:**
1. Click **Launchpad** in the sidebar.
2. Click **My submissions** in the page header.
3. Choose what you want to do:
* **View**: Open your app's Launchpad page.
* **Edit submission**: Update your submission details. This option is not available during an active voting round or after the round is finalized.
* **Withdraw**: Remove your submission from Launchpad. Review the confirmation message, then click **Withdraw** to continue or **Keep submission** to cancel. Withdrawing also removes it from the voting round but does not delete the app.
***
## Sharing your app
Share your listing to bring more people to your app. On your app's Launchpad page, click **Share** to post to Facebook, LinkedIn, X, or WhatsApp, or click **Copy link** to share it anywhere.
When sharing your app, include:
* What your app does.
* Who it helps.
* Why you built it.
* A direct link to your Launchpad listing.
* A clear ask to try the app and vote.
***
## Replying to comments
Reply to comments people leave on your app's Launchpad page, answer questions, thank people for their support, and keep the conversation going. Replies appear in a thread under the comment. Replies on your own app show an **App's creator** badge, so people know the response comes from you.
**To reply to a comment:**
1. Open your app's Launchpad page.
2. Go to the **Comments** section.
3. Click **Reply** on the comment.
4. Enter your reply.
5. Click **Post**.
React to any comment with a like or dislike. To add your own comment, enter it in the **Add a comment** box, then click **Post**. You can also click **Report** to flag a comment for review.
***
## FAQs
Click a question below to learn more about submitting apps to Launchpad.
You can submit apps that are public, published, and built with Base44.
You can submit one app every 30 days.
Review the message shown in Launchpad, update your app or submission details, then submit it again.
Anyone can browse Launchpad. To vote for apps, sign in to [Base44](https://app.base44.com). You can upvote each app once per day, and your votes add up over time.
Top apps can win credits, earn a featured spot on Launchpad, and reach more people in the Base44 community.
The Base44 team applies prize credits after winners are confirmed and announced. Once awarded, the credits appear in your account.
Base44 scans your app before submission to check for security issues.
Review the issues shown in the scan, fix them in your app, then run the security scan again. Apps with unresolved security issues may not be listed on Launchpad.
Yes. Share your listing with your network and relevant communities. Do not use bots, fake accounts, automated scripts, or other vote manipulation methods.
Submitted apps move to **All Apps**. Winning apps are featured in the **Wall of fame**, where you can browse top launched apps from past competition weeks.
# Browsing with your Superagent
Source: https://docs.base44.com/superagents/browser-control
Your Superagent can research, look things up, and complete tasks on the web for you, from chat or in Chrome.
Your Superagent can research, look things up, and complete tasks on the web for you. It works right away from chat. If you want it to work directly in Chrome, install the **Superagent by Base44** browser extension.
***
## Giving your Superagent a task
Ask your Superagent to research something or complete a task online, just like you would ask it anything else in chat. No setup is required.
For example:
```text theme={null}
What's the latest news on TechCrunch?
```
```text theme={null}
Research the top three project management tools and compare their pricing.
```
```text theme={null}
Find the documentation for the Stripe API and summarize how webhooks work.
```
When your Superagent uses a browser to complete your task, a **Live Browser** view can open in the chat so you can follow along in real time. On desktop, the view opens next to your conversation. On mobile, it appears as a bar you can expand.
From the Live Browser view, you can:
* Expand the view.
* Open it in full screen.
* Close the view while your Superagent keeps working.
The Live Browser view closes on its own when your Superagent finishes the task.
Your Superagent can work on websites available through the public internet, including ones you are already logged in to. It cannot reach your local network or private network addresses, such as `localhost`.
***
## Using the browser extension
The **Superagent by Base44** browser extension lets your Superagent work directly in Chrome. It opens tabs, clicks, types, and reads pages on your behalf, while you watch what it is doing. Your Superagent can work with the sites you're already signed in to while completing tasks.
Log in to Base44 in the Chrome profile where you want to use the extension.
### Install the extension
Install **Superagent by Base44** from the Chrome Web Store, then log in to Base44 to connect it to your account.
**To install the extension:**
1. Go to the [**Superagent by Base44**](https://chromewebstore.google.com/detail/superagent-by-base44/cpebcpciinmbjhkdegmepiecekkkpggl) extension in the Chrome Web Store.
2. Click **Add to Chrome**.
3. Click **Continue to install**.
4. Review the permissions, then click **Add extension**.
5. Open the extension.
6. Click **Log in to Base44**.
7. Select the Superagent you want to use.
You can also reach the extension from Base44. Open your Superagent, click **Customize**, click **Channels**, and click **Install** next to **Browser extension**.
Pin the extension to your Chrome toolbar for quick access.
### Work in your browser
Ask your Superagent to complete a task in your browser, just like you would from chat. If you have more than one Superagent, you can switch between them at any time from the extension's side panel.
For example:
```text theme={null}
Check my analytics dashboard for this week's traffic.
```
Your Superagent opens its own Chrome tab group to complete the task, so it doesn't interrupt the tab you're using. You can watch each step as it works. Chrome displays its standard browser control banner while your Superagent performs actions.
Once the extension is connected, you can also start a browser task from another client, such as the Base44 mobile app. Chrome needs to stay open and connected. If it is not available, your Superagent uses the cloud browser instead, without your logged-in sessions.
***
## FAQs
No. Your Superagent browses the web from chat with no setup. Install the browser extension only if you want your Superagent to work in your browser.
The extension is available for Chrome.
No. Once you are logged in to Base44, the extension pairs with your account automatically.
Chrome shows its standard browser control banner while your Superagent is performing actions, and your Superagent works in its own tab group.
Your Superagent can access any site reachable at a public internet address, including sites you are already logged in to. It cannot access private network addresses, such as `localhost`, private IP ranges, or hostnames like `.local` and `.internal`. Whether a site counts as private depends on its network address, not its name, so an internal site hosted on a public domain is still reachable.
No. Only one Superagent session controls the browser at a time. The most recent session takes control.
If the extension is not connected, your Superagent browses from chat instead. You do not need to do anything, and it can still complete most tasks.
Right-click the extension icon in your Chrome toolbar, then select **Remove from Chrome**. You can also go to `chrome://extensions`, find **Superagent by Base44**, and click **Remove**.
# Creating a Superagent
Source: https://docs.base44.com/superagents/creating-a-superagent
Create a Superagent, start chatting, and customize how it looks and works.
Create a [Superagent](https://base44.com/superagents) to handle work, set up automations, and manage everything from a single place. Describe what you want, and your Superagent takes action for you across your tools.
***
## Step 1 | Start chatting with your Superagent
Create your Superagent by starting a conversation. Describe what you want it to do, then keep chatting to refine results, ask follow-up questions, or trigger actions. You can reply to messages from your Superagent, and copy its response. You can upload files, paste images, and attach videos and GIFs in chat.
**To create your Superagent:**
1. Log in to [Base44](https://app.base44.com/).
2. Click **Superagents**.
3. Click **Create a new Superagent**.
4. Describe what you want your Superagent to do.
**For example:**
```text theme={null}
Create a product for my store based on this idea
```
```text theme={null}
Review my latest leads and suggest who to follow up with
```
```text theme={null}
Generate a report from my Google Sheets data
```
To switch to another Superagent or create a new one, click the dropdown next to your Superagent's name at the top of the editor.
### Use voice mode
Use voice mode to talk to your Superagent in real time instead of typing. You can turn your camera on or off, switch between your front and rear camera, and share your screen. Voice sessions pick up context from your last 10 text messages, so your Superagent knows what you have already discussed. Long voice calls reconnect automatically so you can keep talking without restarting the session.
**To start a voice call:**
1. Make sure the chat message box is empty.
2. Click the **Use voice** button in the chat input.
3. Chat with your Superagent.
Screen sharing is available on desktop browsers only. Camera sharing works on desktop and mobile.
Be mindful about what you say or show during a call. Base44 does not store recordings of your voice, screen, or camera. Voice transcripts are saved as messages in your chat history and persist across page refreshes, alongside your text messages.
Your Superagent can also browse the web for you, and work in your browser once you install the Chrome extension. See [Browsing the web with your Superagent](/superagents/browser-control).
***
## Step 2 | Connect plugins and add skills
Connect tools your Superagent can use, and add skills that extend what it can do. Connectors let your Superagent work with apps like Gmail, Google Drive, Notion, GitHub, and Slack. Skills add reusable prompts and workflows your Superagent can use on demand.
### Connect tools
You can connect tools directly, or describe what you want to do in chat and let your Superagent suggest the right connector.
**To add a connector:**
1. Click **Plugins** in the sidebar.
2. Browse or search for the connector you want to use.
3. Click **Connect** on the relevant connector.
4. Click **Connect** again to confirm.
5. Choose the account you want to connect.
6. Review the sign-in details and click **Continue**.
7. Review the requested permissions and click **Allow**.
After you connect a tool, your Superagent can use it in chat and suggest relevant actions based on that connection.
### Manage connected tools
Manage how a connected tool behaves and what access your Superagent has to it.
**To manage a connected tool:**
1. Click **Plugins** in the sidebar.
2. Find the connector under **Apps connected**.
3. Click the **More actions** icon.
4. Choose what you want to do:
* **Switch to read-only:** Limit access to viewing data.
* **Switch to manage:** Allow creating or updating data.
* **Switch account:** Change the connected account.
* **Disconnect:** Temporarily disable access.
* **Remove:** Remove the connector.
### Add skills
Skills are reusable sets of instructions that help your Superagent complete specific types of work more consistently. Use them to guide workflows, work better with connected tools, and avoid repeating the same instructions in chat.
You can activate recommended skills for your Superagent, browse the skills catalog, create your own skill in chat, or upload a skill file.
**To add a skill:**
1. Click **Plugins** in the sidebar.
2. Click the **Skills** tab.
3. Choose how you want to add a skill:
* **Recommended skills:** Click **Activate skill** on a recommended skill.
* **Skills catalog:** Click **View all**, select a skill, and click **Activate skill**.
* **Create your own skill:** Click **+ Add Skill** and select **Create skill in chat**.
* **Upload a skill file:** Click **+ Add Skill** and select **Upload skill file**.
**To manage an activated skill:**
1. Click **Plugins** in the sidebar.
2. Click the **Skills** tab.
3. Click a skill under **Activated skills**.
4. Choose what you want to do:
* **Edit the skill:** Update the skill instructions and click **Save Skill**.
* **Download the skill:** Click **Download** to save the skill file.
* **Remove the skill:** Click **Delete**.
* Removing a skill only affects this Superagent. Other Superagents in your workspace are not affected.
* You can add skills from the catalog again at any time.
* Skills you created or uploaded yourself are permanently deleted and cannot be recovered.
***
## Step 3 | Add files and review memory
Add files your Superagent can use as reference, and review the memory it keeps from your conversations.
### Upload files
Upload documents, spreadsheets, PDFs, and other files your Superagent can read and reference during conversations. You can upload files directly in chat or from **Files**.
**To upload a file from Files:**
1. Click **Files** in the sidebar.
2. Click **Add New**.
3. Choose what you want to do:
* **Upload file:** Upload a single file.
* **Upload folder:** Upload a folder of files.
* **New folder:** Create a folder to organize your files.
To download an entire folder as a zip file, click the **More actions** icon next to the folder and select **Download**.
You can also attach files directly in chat by clicking the attachment icon in the chat input.
### Review memory
Memory stores what your Superagent knows about you and your conversations so it can respond with more context over time.
**To review memory:**
1. Click **Memory** in the sidebar.
2. Review the memory sections:
* **Short-term memory:** Context from the current conversation, updated automatically every few messages.
* **Saved facts:** Key facts that persist across all conversations. You can add, edit, or remove these at any time.
* **Daily sessions:** A summary of each day's conversations, shown as a calendar you can browse.
### View and manage data
Each table in your Superagent holds a type of record you can open, edit, export, and manage without leaving your workspace.
**To view your data:**
1. Click **Data** in the sidebar.
2. Click a table to open it, or click the **More actions** icon on a table to choose an action:
* **View Data:** Open the table to browse its records.
* **Export:** Download the table's records as a CSV file.
* **Schema:** View the table's fields and structure.
* **Recently Deleted:** Review and restore records moved to the trash.
* **Delete All:** Move all records in the table to the trash. You can restore them from Recently Deleted.
To add a record, open a table and click **Add Item**, then fill in the fields and click **Submit**. To edit a record, click it and update its fields.
***
## Step 4 | Customize your Superagent
Customize how your Superagent looks, behaves, remembers context, uses permissions, and connects to external systems.
**To customize your Superagent:**
1. Click **Customize** in the sidebar.
2. Set up your Superagent using these tabs:
* **General:** Choose your chat model, automations model, voice, and appearance.
* **Sharing & access:** Invite collaborators and create a public template link.
* **Personalization:** Update your Superagent's identity and review memory.
* **Channels:** Connect supported messaging channels like WhatsApp, Telegram, iMessage, Slack, and LINE.
* **Security:** Configure permissions and secrets.
* **Developer:** View API details and manage webhooks.
For endpoint details, request examples, webhooks, and setup files, click **Developer** and then click **View full API documentation**.
### Connect messaging channels
Connect your Superagent to a channel to chat with it on WhatsApp, Telegram, iMessage, Slack, and LINE.
To set up channels for your Superagent, see [Customizing your Superagent](/superagents/customizing-your-superagent#connecting-channels).
### Webhooks
Use webhooks to receive real-time notifications when your Superagent receives a message or finishes a reply. Use them when you want your backend to react to Superagent activity without repeatedly checking the API.
**To add a webhook:**
1. Click **Customize**.
2. Click **Developer**.
3. Click **View full API documentation**.
4. Scroll to **Your webhooks** and click **Add webhook**.
5. Enter your endpoint in the **Target URL** field.
6. (Optional) Enter a description in the **Description** field.
7. Select which **Events** to send:
* `message.created`: Sent when a message is received.
* `message.completed`: Sent when your Superagent's reply is ready.
8. Select **Sign requests with an HMAC secret (optional)** if you want to verify that webhook requests came from Base44.
9. Click **Create**. If you selected **Sign requests with an HMAC secret**, copy and store the signing secret when it is displayed.
10. Click **Send test payload** to test your webhook.
The signing secret is displayed once after you create the webhook. Copy and store it before closing the dialog.
***
## Step 5 | Set up automations
Create automations your Superagent can run on a schedule or when a trigger happens. You can set them up by describing what you want in chat or from the **Automations** page.
### Create automations
**To create an automation:**
1. Click **Automations** in the sidebar.
2. Click **+ New Automation**.
3. Browse the suggested automations by category, or describe what you want in chat.
4. Click **Send to chat** on the automation you want to set up.
5. Review the automation in chat and complete the setup.
You can also describe an automation directly in chat and let your Superagent set it up for you. All automations you create are saved on the **Automations** page under **Scheduled Automations** and **Triggered Automations**.
### Scheduled automations
Scheduled automations run at specific times, such as every morning, every Monday, or at the end of each day. You can filter them by **Active**, **Paused**, or **Completed**.
**For example:**
```text theme={null}
Every morning at 8 AM, summarize my unread Gmail emails and send me a digest.
```
### Triggered automations
Triggered automations run when a trigger happens, such as activity in a connected tool or changes to your data.
**For example:**
```text theme={null}
When I receive a new email in Gmail, check if it needs a reply and draft a response for me.
```
### Manage running automations
Your Superagent can control automation runs while they are in progress. If an automation is looping or not working as expected, your Superagent can pause or stop the run to prevent unnecessary credit usage.
If a scheduled automation stops working, it pauses automatically and you receive a notification. Review the automation and reactivate it once the issue is resolved.
***
## FAQs
Your Superagent can create content, analyze data, automate processes, respond to messages, manage products, and more. It adapts based on the tools you connect and the instructions you give it.
No. You can create and manage a Superagent using natural language. Your Superagent helps guide setup, suggests actions, and handles complexity behind the scenes.
Your Superagent only has access to the tools and data you connect. After you connect a tool, it understands what actions are possible and starts suggesting relevant automations based on that access.
Yes. Go to **Customize** and click **Security** to control whether your Superagent can update or delete data without asking first. You can also manage connector access from **Plugins**.
Yes. Your Superagent can run scheduled automations and triggered automations. You can set them up in chat or from the **Automations** page, and what your Superagent can do depends on the automations you create and the permissions you allow.
Yes. You can upload files directly in chat or from **Files**. Your Superagent can then use those files as reference while you work with it.
* **Short-term memory** captures context from the current conversation and updates automatically every few messages.
* **Saved facts** are key facts that persist across all conversations. You can add, edit, or remove them at any time.
* **Daily sessions** are summaries of each day's conversations, shown as a browsable calendar.
Yes. Your Superagent runs in a private environment and only accesses the data you allow. Your data is not used to train external models.
Yes. You can connect messaging channels like WhatsApp, Telegram, iMessage, Slack, and LINE to interact with your Superagent from anywhere. You can also interact with your Superagent using the Base44 app on [Android](https://play.google.com/store/apps/details?id=com.base44.android) or [iOS](https://apps.apple.com/us/app/base44-build-with-ai/id6757432427).
Yes. You can add collaborators to work with the same Superagent, or share your Superagent as a template so others can create their own copy.
When you share a Superagent as a template, you can choose whether to include skills, agent memory, files, and automations. Connectors are not included, and anyone who creates a copy must reconnect their own accounts and services.
Use the **All Agents** page to organize, share, clone, move, and delete your Superagents. For more information, see [Managing your Superagents](/superagents/managing-your-superagents).
Only workspace Owners and Admins can edit or remove skills. If you do not see these options, contact your workspace admin.
# Customizing your Superagent
Source: https://docs.base44.com/superagents/customizing-your-superagent
Configure how your Superagent responds, remembers context, connects to channels, and manages access.
Customize your Superagent to control how it responds, what it remembers, who can access it, and which channels and tools it can use.
***
## Managing general settings
Manage your Superagent's core settings, including its AI models, voice, appearance, and owner actions.
**To manage general settings:**
1. Open your Superagent.
2. Click **Customize**.
3. Click **General**.
4. Update the relevant settings:
* **Chat model:** Choose the model your Superagent uses when it responds in chat. The available AI models depend on your plan.
* **Automations model:** Choose the model your Superagent uses when it runs automations.
* **Voice:** Choose the voice your Superagent uses in voice mode during conversations.
* **Appearance:** Choose your preferred color mode.
* **Clone agent:** Create a copy of your Superagent.
* **Move to workspace:** Move your Superagent to another workspace.
* **Delete:** Delete your Superagent.
Deleting a Superagent is permanent. Only delete a Superagent when you no longer need it.
***
## Sharing and managing access
Share your Superagent, manage who can chat with it, and choose how memory works across conversations.
**To share and manage access:**
1. Open your Superagent.
2. Click **Customize**.
3. Click **Sharing & access**.
4. Update the available settings:
* **Invite Collaborators:** Invite people to access and chat with your Superagent. You can always remove collaborators who no longer need access.
* **Public template link:** Create a public link others can use to make their own copy of your Superagent.
* **Memory:** Choose how your Superagent saves and uses memory:
* **No memory:** Your Superagent does not save facts. Each conversation starts fresh.
* **Separated memory:** Your Superagent remembers facts and history within each conversation, kept separate from the others.
* **Shared memory:** Your Superagent remembers across all conversations, so what it learns in one is available everywhere.
Choose **Separated memory** to keep each conversation self-contained, or **Shared memory** to let your Superagent build on what it learns across all conversations.
Public template links do not include connectors. Anyone who opens the link creates their own copy of your Superagent.
***
## Personalizing your Superagent
Update your Superagent's identity and manage the personal context it uses when responding.
**To personalize your Superagent:**
1. Open your Superagent.
2. Click **Customize**.
3. Click **Personalization**.
4. Choose what you want to update:
* **Identity:** Hover over the Superagent image to update it, edit **Agent name**, and use **About the agent** to define who your Superagent is, how it responds, and what role it performs.
* **Memory:** Update **Your name** and **About you**, review what the Superagent has learned about you, or delete memories you no longer want it to use.
Use clear identity instructions to help your Superagent respond in the right tone, format, and level of detail.
***
## Connecting channels
Your Superagent is always available in Base44 chat. Connect messaging channels so it can respond outside Base44, send updates, run automations, and continue conversations where you already work.
Supported messaging channels include WhatsApp, Telegram, iMessage, Slack, and LINE. Connected channels help your Superagent respond in the right format for each conversation. Your Superagent can also send images on WhatsApp, Telegram, Slack, and iMessage.
Base44 processes messages addressed to your Superagent so it can respond.
Once WhatsApp is connected, you can create WhatsApp groups so your Superagent can participate in shared conversations.
***
### WhatsApp and WhatsApp groups
Connect WhatsApp so your Superagent can respond through WhatsApp. After WhatsApp is connected, you can create and manage WhatsApp groups for shared conversations.
**To connect WhatsApp:**
1. Open your Superagent.
2. Click **Customize**.
3. Click **Channels**.
4. Click **Connect** next to **WhatsApp**.
5. Scan the QR code or click **Open WhatsApp**.
6. Send the activation code.
**To create a WhatsApp group:**
Create a group when you want multiple people to talk to the same Superagent in one shared conversation.
You are responsible for informing everyone in the WhatsApp group that Base44 will access and process the messages and data shared in the group, including personal data.
1. Open your Superagent.
2. Click **Customize**.
3. Click **Channels**.
4. Click **Manage** next to **WhatsApp**.
5. Click **Create group**.
6. Enter the **Group name**.
7. (Optional) Enter a **Description**.
8. Choose how your Superagent replies:
* **Reply only when @-mentioned:** Your Superagent replies only when someone mentions it directly. Best for larger groups.
* **Smart reply — only when needed:** Your Superagent replies when it can add value to the conversation. Best for smaller, active groups.
9. Click **Create & Invite**.
10. Open the invite link in WhatsApp.
11. Invite contacts to join the group.
You can also ask your Superagent to create a WhatsApp group from the Superagent chat, a WhatsApp DM, or an existing WhatsApp group.
After you create a group and join it:
* Your Superagent sends an intro message with its reply mode, the invite link, and important usage details.
* Your Superagent only operates in the group while you remain a member.
* AI usage from group activity is billed to your account.
***
### Telegram
Connect Telegram so your Superagent can respond to messages through Telegram.
**To connect Telegram:**
1. Open your Superagent.
2. Click **Customize**.
3. Click **Channels**.
4. Click **Connect** next to **Telegram**.
5. Scan the QR code or click **Open Telegram**.
6. Send the activation code.
***
### iMessage
Connect iMessage so you can interact with your Superagent from Apple devices.
**To connect iMessage:**
1. Open your Superagent.
2. Click **Customize**.
3. Click **Channels**.
4. Click **Connect** next to **iMessage**.
5. Scan the QR code or click **Open iMessage**.
6. Send the activation code.
***
### Slack
Connect Slack so your Superagent can respond when someone mentions it in a channel. When your Superagent replies in a channel, it responds within the thread.
**To connect Slack:**
1. Open your Superagent.
2. Click **Customize**.
3. Click **Channels**.
4. Click **Connect** next to **Slack**.
5. Scan the QR code or click **Add to Slack**, then approve the installation for your workspace.
6. In the Slack channel where you want to use your Superagent, type `/invite @Superagents by Base44` and select **Superagents by Base44** from the list.
7. Mention your agent's **@handle** to start chatting. Your agent replies in a thread.
To invite additional Superagents to the same Slack channel, just mention the Superagent's **@handle**.
***
### LINE
Connect LINE so your Superagent can respond to messages through LINE.
LINE is available in select regions.
**To connect LINE:**
1. Open your Superagent.
2. Click **Customize**.
3. Click **Channels**.
4. Click **Connect** next to **LINE**.
5. Click **Generate Activation Code**.
6. Use the LINE app to scan the QR code.
7. Send the activation code to the bot in LINE.
***
### Browser extension
Install the **Superagent by Base44** browser extension to let your Superagent work directly in Chrome. It can browse sites, fill in forms, and complete tasks using the sites you are already signed in to.
**To install the browser extension:**
1. Open your Superagent.
2. Click **Customize**.
3. Click **Channels**.
4. Click **Install** next to **Browser extension**. The Chrome Web Store opens in a new tab.
Learn more about [browsing with your Superagent](/superagents/browser-control).
***
## Managing security settings
Manage what your Superagent can do on its own and how it handles sensitive information.
**To update security settings:**
1. Open your Superagent.
2. Click **Customize**.
3. Click **Security**.
4. Update the relevant settings:
* **Update Data:** Control whether your Superagent can edit records without asking first.
* **Delete Data:** Control whether your Superagent can remove records without asking first.
* **Auto-detect secrets in messages:** Let Base44 detect sensitive information in messages, save it securely, and hide the raw value from the agent.
* **Secrets:** Manage secure values available to your Superagent's backend functions.
Only enable **Update Data** or **Delete Data** when your Superagent needs those permissions for its role.
***
## Using developer settings
Access API settings and webhooks for your Superagent.
Webhooks require the [Builder plan](https://base44.com/pricing) or higher. You can add up to 5 webhooks per Superagent.
**To access developer settings:**
1. Open your Superagent.
2. Click **Customize**.
3. Click **Developer**.
4. Use the available settings:
* **API Reference:** View your API key, Base URL, and quick example.
* **Webhooks:** Add webhook URLs so external systems can send events to your Superagent.
**To add a webhook:**
1. Open your Superagent.
2. Click **Customize**.
3. Click **Developer**.
4. Click **View full API documentation**.
5. Scroll to **Your webhooks** and click **Add webhook**.
6. Enter the webhook URL in the **Target URL** field.
7. Select the **Events** you want to send.
8. Click **Create**.
9. Click **Send test payload** to test your webhook.
If you select **Sign requests with an HMAC secret (optional)**, copy and store the signing secret when it is displayed. The signing secret is only displayed once.
***
## FAQs
Click a question below to learn more.
Yes. Manage permissions such as updating data, deleting data, and handling secrets from **Security**.
Yes. You can open the **Customize** panel at any time to update how your Superagent behaves, responds, connects to channels, and uses developer settings.
Yes. You can connect multiple supported channels from **Channels**.
1. Open your Superagent.
2. Click **Customize**.
3. Click **Channels**.
4. Click **Manage** next to **WhatsApp**.
5. Find the group under **WhatsApp groups**.
6. Choose what you want to do:
* **Invite:** Copy or open the invite link.
* **Reply only when @-mentioned:** Set the Superagent to reply only when mentioned.
* **Smart reply — only when needed:** Set the Superagent to reply when it can add value to the conversation.
* **Rename:** Update the group name or description.
* **Manage members:** Manage group participants.
* **Delete group:** Delete the WhatsApp group.
To disconnect WhatsApp, Telegram, iMessage, and Slack, go to **Channels** and click **Manage** next to the channel. Then click **Disconnect** and confirm.
To disconnect LINE, send `/disconnect` to the bot in LINE. To reconnect LINE, click **Connect** next to **LINE** and generate a new activation code.
If you disconnect iMessage, anyone using iMessage with this Superagent needs to reconnect with a new activation code.
No. Public template links do not include connectors. Anyone who opens the link creates their own copy of your Superagent.
Collaborators can access and chat with your Superagent. Some settings and owner actions may only be available to the Superagent owner.
Yes. Open **Customize**, go to **Sharing & access**, and use **Invite Collaborators** to manage or remove collaborators.
# Managing your Superagents
Source: https://docs.base44.com/superagents/managing-your-superagents
Find, organize, and manage your Superagents from the All Agents page.
Keep your Superagents organized on the **All Agents** page. You can favorite the Superagents you use most, group related Superagents into folders, and manage each Superagent from its card.
***
## Organizing your Superagents
Use the options at the top of the **All Agents** page to search, filter, sort, favorite, and change how your Superagents are displayed.
**To organize your Superagents:**
1. Click **Superagents** in the left sidebar.
2. Click **All Agents**.
3. Use the options at the top of the page:
* **Search:** Click the search bar and type the name of your Superagent.
* **Filter by ownership:** Click the **Created by me** drop-down and choose which Superagents to show.
* **Sort:** Click the **Last updated** drop-down and choose how to order your Superagents.
* **Switch view:** Click the **Grid view** or **List view** icon at the top right to change how your Superagents are displayed.
4. Click the **Star** icon on a Superagent card to add it to your **Favorites** section in the left sidebar.
***
## Using folders
Use folders to group related Superagents, such as Superagents for the same team, client, or workflow. Folders appear on the **All Agents** page.
Each Superagent can only be in one folder at a time. Superagents moved into a folder appear only in that folder, not in the main **All Agents** list.
### Creating a folder
Create a folder from the **All Agents** page. After creating the folder, you can choose which Superagents to move into it.
**To create a folder:**
1. Click **Superagents** in the left sidebar.
2. Click **All Agents**.
3. Click **Add new folder** at the top right.
4. Enter a name in the **Folder name** field.
5. Click **Create**.
6. Select the Superagents you want to move into the folder and click **Move**. You can also click **Cancel** and move Superagents later.
### Moving a Superagent into a folder
Move any Superagent into a folder directly from its card.
**To move a Superagent into a folder:**
1. Click **Superagents** in the left sidebar.
2. Click **All Agents**.
3. Click the **More actions** icon on the Superagent card.
4. Click **Move to folder**.
5. Select the folder you want to move the Superagent into.
### Removing a Superagent from a folder
Move a Superagent out of a folder without deleting it. The Superagent returns to the main **All Agents** list.
**To remove a Superagent from a folder:**
1. Click **Superagents** in the left sidebar.
2. Click **All Agents**.
3. Open the folder that contains the Superagent.
4. Click the **More actions** icon on the Superagent card.
5. Click **Remove from folder**.
### Renaming or deleting a folder
You can rename or delete a folder from the folder's **More actions** menu.
**To rename a folder:**
1. Click **Superagents** in the left sidebar.
2. Click **All Agents**.
3. Click the **More actions** icon on the folder card.
4. Click **Rename**.
5. Enter a new name and click **Save**.
**To delete a folder:**
1. Click **Superagents** in the left sidebar.
2. Click **All Agents**.
3. Click the **More actions** icon on the folder card.
4. Click **Delete**.
5. Click **Delete** again to confirm.
Deleting a folder does not delete the Superagents inside it. The Superagents remain in your workspace.
***
## Managing a Superagent from its card
Use the **More actions** menu on a Superagent card to manage actions like sharing, renaming, cloning, moving, or deleting.
Star any Superagent, or click **Add to favorites** in the **More actions** menu, to add it to your **Favorites** section in the left sidebar for quick access.
**To manage a Superagent from its card:**
1. Click **Superagents** in the left sidebar.
2. Click **All Agents**.
3. Click the **More actions** icon on the Superagent card.
4. Choose what you want to do:
* **Add to favorites:** Add the Superagent to your **Favorites** section in the left sidebar.
* **Share:** Share the Superagent with collaborators.
* **Rename:** Update the Superagent's name.
* **Edit description:** Add or update the description that appears on the card.
* **Clone agent:** Create a copy of the Superagent.
* **Agent settings:** Open the Superagent's settings.
* **Move to folder:** Move the Superagent into a folder.
* **Delete:** Delete the Superagent from your workspace.
### Cloning your Superagent
Create a copy of an existing Superagent to reuse its setup as a starting point for another workflow or assistant.
Only include chat history and API keys if the cloned Superagent should use the same context and credentials.
**To clone your Superagent:**
1. Click **Superagents** in the left sidebar.
2. Click **All Agents**.
3. Click the **More actions** icon on the Superagent card.
4. Click **Clone agent**.
5. Choose what to include:
* **Chat History:** Copy the builder conversation history to the new agent.
* **Skills:** Copy backend functions, integrations, and tool configurations.
* **Agent memory:** Copy the agent memory file and saved facts.
* **Files:** Copy repository files from storage. When Skills is selected, this includes skill files.
* **Automations:** Copy automations (scheduled, entity-triggered, and connector-based).
* **API Keys:** Copy stored secrets and API keys to the new agent.
6. Click **Clone agent**.
### Deleting your Superagent
Remove a Superagent from your workspace when you no longer need it.
Deleting a Superagent permanently removes the Superagent and its data, conversations, files, and integrations. This action cannot be undone.
**To delete your Superagent:**
1. Click **Superagents** in the left sidebar.
2. Click **All Agents**.
3. Click the **More actions** icon on the Superagent card.
4. Click **Delete**.
5. Click **Delete** again to confirm.
***
## FAQs
Click a question below to learn more about managing your Superagents.
No. Cloning copies only the parts of the Superagent you choose: chat history, skills, agent memory, files, automations, and API keys.
No. Deleting a Superagent permanently removes it from your workspace and cannot be undone.
Use **Plugins** to manage connectors and skills, **Automations** to manage automations, **Channels** to manage messaging apps, and **Customize** to manage settings, security, and API access.
No. Each Superagent can only be in one folder at a time.
Deleting a folder does not delete the Superagents inside it. The Superagents remain in your workspace.
# Working with sub-agents
Source: https://docs.base44.com/superagents/subagents
Complete complex requests faster by splitting work into smaller tasks that run in parallel.
Sub-agents let your Superagent handle complex requests by working on multiple tasks at the same time. While those tasks run in the background, you can continue chatting with your Superagent.
***
## Using sub-agents
Your Superagent uses sub-agents when a request can be completed faster by working on independent tasks at the same time.
* Research multiple topics.
* Explore a large workspace.
* Analyze large files or datasets.
* Complete several independent tasks at the same time.
When your Superagent delegates work, it lets you know before getting started.
While sub-agents are running, you can:
* Continue chatting with your Superagent.
* Follow each task in the task panel.
* Expand a completed task to view its results.
* Click the stop icon at the message input to stop the work. Any work the sub-agents already finished is kept.
You can also ask your Superagent not to use sub-agents, and it works on your request inline instead.
Running several sub-agents at the same time can use more credits because your Superagent completes multiple parts of your request in parallel.
***
## Getting your results
When all sub-agents finish, your Superagent combines their work into a single response. You receive one answer instead of separate responses from each sub-agent.
Sub-agents don't automatically save their work. The results appear in your Superagent chat. To keep them, ask your Superagent to save or export them. For example, you can prompt your Superagent to save the results in a connected tool like Google Docs or Google Sheets.
***
## FAQs
Your Superagent decides. It uses sub-agents when splitting a request into independent tasks completes it faster. You can ask it not to use them when you send your request.
Yes. Click the stop icon at the message input. Any work the sub-agents already finished is kept and stays available in your chat.
Your Superagent combines the work into a single response in your chat. The results stay in your conversation. To keep them, ask your Superagent to save or export them.
Yes. You can continue chatting with your Superagent while sub-agents work in the background, and follow each task in the task panel.
Sub-agents are available to app owners using Superagents in the Base44 web builder.
# Creating a Superagent for your Wix site
Source: https://docs.base44.com/superagents/superagents-for-wix
Create a Superagent for your Wix site to handle orders, messages, bookings, and run your business in the background.
Connect a [Superagent](https://base44.com/superagents) to your Wix site to handle orders, messages, bookings, and more. Describe what you want, and your Superagent takes care of the rest.
A Superagent is your always-on assistant, working across your Wix site in the background. It connects to your tools and takes action, following up, flagging issues, and keeping your business moving.
* Get daily updates on sales, leads, and activity.
* Track inventory and flag low stock.
* Monitor your site and catch issues early.
* Follow up on abandoned bookings and unpaid sessions.
* Send payment reminders with direct links.
* Reply instantly to new inquiries.
* Turn content into posts across social channels.
* Review leads before reaching out.
* Respond to reviews and build trust.
**Before you begin:**
Your Wix site must be active. Some Wix features your Superagent works with, such as Stores checkout or Payments, depend on your Wix site setup. Full use of your Superagent may require a paid Base44 plan.
***
## Work across your Wix tools
Your Superagent works across your Wix tools to manage activity, respond to events, and take action automatically.
Read and reply to visitor messages automatically.
Summarize orders and flag low stock.
Monitor appointments and send follow-ups.
Draft and publish posts on schedule.
Manage guest lists and ticket data.
Process and route form submissions.
Segment and sync your contact data.
Track transactions and flag issues.
Create and manage discount coupons.
***
## Step 1 | Create a Superagent
Go to [Base44 Superagents](https://base44.com/superagents) to create your Superagent.
**To create your Superagent:**
1. Go to [Base44 Superagents](https://base44.com/superagents).
2. Click **Get your Superagent**.
3. Sign up for a Base44 account.
4. Start chatting with your Superagent, give it a name, and describe what you want it to do.
When you create a Base44 account, you get credits to get started. No payment details required.
***
## Step 2 | Connect your site
Once you create your Superagent, connect it to your Wix site. You can connect one Wix site at a time. To manage a different site, create another Superagent.
**To connect your Wix site:**
1. In your Superagent, go to **Plugins**.
2. On the **Connectors** tab, click **Add Connector**.
3. Search for **Wix**, then click **Connect**.
4. In the confirmation dialog, click **Connect**.
5. In the Wix App Installer, choose which site to add the app to, then click **Continue**.
6. Review the permissions on the **Adding Base44 will allow it to:** screen, then click **Agree & Add**.
Base44 is then added to your Wix site.
***
## Step 3 | Start working with your Superagent
Once your Wix site is connected, your Superagent starts working across your business. Ask it to create products, write SEO content, update images, or set up automations, all from a single conversation. Start with simple prompts, then expand into automated workflows and triggers.
### Example prompts to try
Start by prompting your Superagent. Try examples like:
```text theme={null}
Summarize yesterday's orders and flag low stock every morning.
```
```text theme={null}
Alert me when any product drops below 5 units.
```
```text theme={null}
Draft replies to new Wix Inbox messages within 30 minutes.
```
```text theme={null}
Summarize new form submissions and suggest a reply.
```
```text theme={null}
Notify me when a new booking is confirmed.
```
```text theme={null}
Send a daily summary of tomorrow's bookings.
```
```text theme={null}
Draft a blog post and save it to Wix Blog.
```
```text theme={null}
Email me a summary when a new order comes in.
```
### Automations
Your Superagent can run automations on a fixed schedule or react to events as they happen.
Run at a set time, every morning, once a week, or any interval you choose. Describe what you want in chat and your Superagent sets it up automatically.
Fire when something happens on your site, such as a new order, a form submission, or a booking confirmation. Describe the event and your Superagent creates the automation.
Send you a daily summary of sales, bookings, and activity.
Check your store nightly and alert you before stock runs out.
Follow up on no-shows and unpaid bookings with direct payment links.
Turn one blog post into a full week of social threads, emails, and FAQ updates.
Draft on-brand replies to new reviews and flag negative feedback for your review.
Research new leads and enrich your CRM automatically.
### Control what your Superagent can do
You control what your Superagent is allowed to do for each connected service. By default, your Superagent asks for confirmation before taking actions that change your site.
Set rules in **Customize** → **Security** → **Connector Rules** to control how your Superagent behaves for each tool.
For example:
```text theme={null}
Only draft replies to Inbox messages, never send without my approval.
```
```text theme={null}
Only create draft blog posts, never publish directly.
```
Use Connector Rules to limit sensitive actions like sending messages or deleting data.
***
## Wix connector permissions
When you connect your Wix site, you review and approve the permissions Base44 requests on the Wix App Market screen. That screen shows the full, current list of permissions you are granting, so review it before you connect. Wix does not use per-scope access grants, so you approve these as a single set during installation. The permissions cover the following areas so your Superagent can take action across your business:
Create and update products, inventory, and categories in your store catalog.
Read and manage submissions from your Wix Forms.
View and update your store orders.
Manage payments data, including transactions, disputes, and refunds.
Read, create, and update your site's coupons.
Manage events, ticket definitions, and guest lists.
Manage payment links, their settings, and their payments.
Create, edit, and publish blog posts, including drafts.
Upload and organize files and folders in the Media Manager.
View products, inventory, and categories in your store catalog.
Read and respond to messages and conversations in your Wix Inbox.
View your site properties, business information, and connected email details.
Read and manage your site's pricing plans.
Manage restaurant menus, online orders, and reservations.
Manage services, bookings, staff members, and availability.
Create and update the items in your CMS collections.
Work with eCommerce data such as carts, checkouts, and discount rules.
Create and manage email marketing campaigns.
Manage your site members and contacts.
Create and update the structure of your CMS collections.
Your Superagent only uses what it needs based on your instructions.
***
## FAQs
Click a question to learn more about using Superagents with Wix.
No. You can get started with a Base44 account, which includes credits to run your Superagent. No payment details required.
Yes. Once the Wix connector is connected, your Superagent can read and respond to messages in your Wix Inbox.
To limit it to drafting only, add a rule in **Customize** → **Security** → **Connector Rules**:
```text theme={null}
Only draft replies, never send without my approval.
```
Yes. With the blog permission connected, your Superagent can create, edit, and publish posts.
To limit it to drafts only, add a rule in **Customize** → **Security** → **Connector Rules**:
```text theme={null}
Only create draft posts, never publish directly.
```
Each Superagent connects to one site at a time. To manage a second site, create a separate Superagent and connect it to that site.
Get step-by-step guidance on creating and configuring your Superagent in [Creating a Superagent](/superagents/creating-a-superagent).
1. In your Superagent, click **Plugins** in the sidebar.
2. Find **Wix** under **Apps connected**.
3. Click the **More actions** icon, then select **Disconnect**.
Make sure you completed the connection by clicking **Agree & Add** on the permissions screen. To verify, go to **Plugins**, open the **Connectors** tab, find **Wix**, and check its status. If needed, disconnect and connect again.
Also make sure the Wix business apps you want to use, such as **Wix Stores** or **Wix Bookings**, are enabled on your site.
# Deploy an app
Source: https://docs.base44.com/api-reference/deploy-an-app
/developers/references/app-management/app-management-openapi.json post /api/apps/{app_id}/deploy
Deploys your app to production, publishing your latest changes so they go live for its users. By default the app's current version is deployed. To deploy a specific saved version instead, pass its ID in the request body.
# Activity Monitor
Source: https://docs.base44.com/developers/app-code/editor/activity-monitor
Monitor and debug your app's API requests and responses in realtime during development.
The Activity Monitor shows every request your app makes while you are in preview. Check which endpoints are called, see status codes and timing, and inspect request and response details to debug problems.
For each entry you can see the method, the path, when it happened, and the status code. Use the search field at the top left to filter by method, path, or other text.
## Access the Activity Monitor
To open the Activity Monitor:
1. Go to your app editor.
2. Click the **More Actions** icon () at the top right.
3. Click **Activity Monitor**.
## Inspect a request
Click any entry in the list to see its details. The details panel has three tabs:
* **General**: Full URL, HTTP method, status code, total time, and timestamps.
* **Request**: What your app sent, including headers, query parameters, and request body.
* **Response**: What the endpoint returned, including headers, body, or error message.
Use this information to confirm your app sends the expected data and the backend returns what you expect.
For more on editing your app's code, see [Code Tab](/developers/app-code/editor/code-tab).
# Code Tab
Source: https://docs.base44.com/developers/app-code/editor/code-tab
Edit your app's source code directly in Base44's Code tab with live preview and full developer control.
The Code tab lets you view and edit your app's source code directly, giving you control over your app's functionality, design, and behavior while seeing changes immediately.
The Code tab is for developers who want more control. For simpler changes, use
Base44's visual editor and AI tools.
## Access the Code tab
**To open the Code tab:**
1. Go to your app's dashboard.
2. Click the **Code** tab.
The Code tab displays your [project files](../overview/project-structure) in a file explorer on the left, with the code editor taking up the main space.
## Navigate your codebase
Use the **Files used in this page** feature to see which files power the page you're previewing. This shows you exactly which code files are running, so you know where to go when you want to edit the page or investigate an issue.
Each entry in the list shows the file name and its folder path, grouped by location in your project such as pages or components.
**To view files used on a page:**
1. Go to your app editor.
2. Click the **More Actions** icon at the top right.
3. Click **Files used in this page**.
If you want to move from this focused view into the full file structure, click
**See all files**. This takes you to the complete code files view so you can
keep exploring from there.
## Edit with live preview
The Code tab offers a split-screen view that shows your code on one side and a live preview of your app on the other. This lets you see changes instantly without switching contexts.
**To edit with live preview:**
1. Open a file in the Code tab.
2. Click the split-screen toggle in the top right corner.
3. Edit your code on the left and see your changes on the right.
**Every time you make changes to the code:**
* Click **Save** at the bottom of the screen to apply your changes and refresh the preview with the latest code.
* Click **Discard** at the bottom of the screen if you want to drop all unsaved edits and return to the last saved version of the file.
**Important:** If you make changes to your app's code, make sure to click
**Publish** for them to go live on your app.
When you are ready to leave the split screen, click **Exit split**.
For local development with your own IDE, see [GitHub Integration](../local-development/github).
## Review AI code changes
When the AI edits your app, you can open the **Code changes** modal to see exactly what it changed before publishing. The modal shows every file the AI touched, grouped by folder, with a diff view for each one.
**To open the Code changes modal:**
1. Go to the AI chat in your app editor.
2. Hover over a message where the AI edited or created a file.
3. Click the three dots icon next to that change and select **View Changes**.
A modal opens with a file tree on the left and the diff for the selected file on the right. A stats bar at the top breaks down how many files were added, modified, and deleted.
Files in the tree are color coded by state:
* **Green** for newly added files.
* **Amber** for modified files, which open in a side-by-side diff view.
* **Red** for deleted files.
Click any file in the tree to jump straight to its diff.
## FAQs
Yes. You can open and edit any code file that appears in the Code files
panel, including pages, components, layouts, and entity helpers. If a part
of the app is generated for you, it still appears as regular code that you
can modify.
No. You can work in the full width code editor if you prefer more space.
Split screen is helpful when you want to see the preview next to your code,
but you can turn it off at any time and reopen it later.
Discard removes all unsaved changes in the active file and restores the last
saved version. This is useful if you try something that does not work and
want to go back quickly. Once you click Discard, you cannot recover the
unsaved code from that session.
You don't need to be an expert, but basic familiarity with React and JSX
helps. You can start with small changes such as updating text, swapping
components, or changing simple styles, then move on to more advanced logic
as you gain confidence
# GitHub Integration
Source: https://docs.base44.com/developers/app-code/local-development/github
Connect your Base44 app to GitHub for version control, local development, and collaboration.
Set up GitHub integration to edit your Base44 app locally and sync changes automatically.
## Sync your app with GitHub
Connect your app to GitHub to write code in your local development environment or in Base44 and keep them in sync with each other.
**Important:**
* GitHub 2 way sync requires the [**Builder plan**](https://base44.com/pricing) or higher.
* Only app owners can perform the initial connection to a repository.
* To reconnect in case of a connection issue, you must be either an app owner or the user who originally connected the repository.
* If you previously connected to GitHub using the legacy Export to GitHub 1-way integration, click **Looking for the old setup?** in the GitHub panel to disconnect it and reconnect using 2-way sync.
* When you connect your app to GitHub, your changes are synced to the connected repository automatically. There’s no option to manually push updates from your Base44 app to GitHub.
* GitHub sync is permanent. You can’t disconnect or transfer the project back to Base44.
* After you connect GitHub to your app, you cannot use Version History to revert to versions from before the GitHub integration. Those older versions are not stored in your GitHub repository, so trying to revert to them results in an error. Only versions that exist in the connected GitHub repo are available to restore.
**To sync your app with GitHub:**
1. Click **Dashboard** in your app editor.
2. Click the **GitHub** icon at the top-right and click **Connect to GitHub**.
3. Click **Connect GitHub**.
4. Click **Authorize Base44 Builder**.
5. Choose where to install the **Base44 Builder**:
* Select the GitHub **organization** or account.
* Choose which **repositories** to allow access.
6. Click **Install**.
7. Create a repository for your app:
* Choose the GitHub **organization** or account.
* Enter a name for the new repository.
* Click **Create Repository**.
After connecting, click the **GitHub** icon in the top panel, then click **Go
to Repository**.
## Set up your local development environment
After connecting to GitHub, set up your local repository to start editing code in your preferred development environment.
To set up your local repository:
1. Clone the repository using the project's Git URL.
2. Navigate to the project directory.
3. Install dependencies: `npm install`.
4. Create an `.env.local` file and set the environment variables:
```
VITE_BASE44_APP_ID=your_app_id
VITE_BASE44_APP_BASE_URL=your_backend_url
```
*Example:*
```
VITE_BASE44_APP_ID=cbef744a8545c389ef439ea6
VITE_BASE44_APP_BASE_URL=https://my-to-do-list-81bfaad7.base44.app
```
**Run the app locally:**
```bash theme={null}
npm run dev
```
For details on the exported file structure, see [Project Structure](../overview/project-structure).
### Sync local changes to Base44
To sync your local changes to Base44, merge the changes to the main git branch. This branch must be named `main`. Other default branch names, such as `master`, currently aren't supported. The changes will then be visible on your Base44 app.
After syncing, click **Publish** in the top right corner of your Base44 app to
make the changes live for users.
## Invite collaborators
Invite teammates to work on your app's GitHub repository.
**To invite collaborators:**
1. Open your app's **Dashboard**.
2. Click the **GitHub** icon in the top panel.
3. Click the **Invite Collaborator** tab.
4. Enter their **GitHub username**.
5. Click **Invite**.
## Disconnect from GitHub
You can disconnect a specific app from its GitHub repository or disconnect your GitHub account from Base44 entirely.
### Disconnect your repository
Disconnect your app from its GitHub repository if you no longer want to sync changes.
**To disconnect your repository:**
1. Open the code tab.
2. Click **GitHub**.
3. Click the **More Actions** icon .
4. Click **Disconnect**.
The disconnect process takes approximately 30 seconds and is only available when the AI agent is not actively making changes to your app.
After disconnecting, you cannot reconnect to the same repository. If you want to reconnect to GitHub later, you'll need to use a different repository name.
### Disconnect your GitHub account
Disconnect your GitHub account if you no longer want to create new repository connections. This does not affect any repositories already connected to your apps and they will continue to sync normally. You can reconnect this account or connect a different GitHub account later.
**To disconnect your GitHub account:**
1. Go to **Account settings**.
2. Find the **GitHub account** section.
3. Click the **More Actions** icon .
4. Click **Disconnect**.
# Introduction
Source: https://docs.base44.com/developers/app-code/overview/introduction
Build and edit Base44 apps with AI assistance and developer tools.
Take full control of your Base44 apps with direct code access. Edit code directly, debug API calls, and integrate with GitHub while keeping AI assistance available when you need it.
## Developer tools
* **[Code tab](../editor/code-tab)**: Direct access to edit your React/Vite codebase with live preview and full IDE features.
* **[Activity monitor](../editor/activity-monitor)**: Debug and monitor API requests in realtime during development.
* **[Project structure](./project-structure)**: Understand your app's file organization and Base44 integration.
* **[GitHub integration](../local-development/github)**: Connect your app to GitHub for version control, collaboration, and deployment.
* **[CLI](/developers/references/cli/get-started/overview)**: Tail logs, run scripts, and manage secrets from your terminal against any of your apps.
* **[Eject to local development](/developers/backend/overview/start-from-existing-app)**: Create a one-time local copy of your app with a new app id. For ongoing development with sync, use the GitHub integration above.
* **[AI assistance](/Building-your-app/AI-chat-modes)**: Leverage Base44's AI to accelerate development while maintaining code control.
## Tech stack
Base44 apps use a modern frontend stack with a fully managed backend:
**Frontend**
* React with React Router
* Vite for fast builds and hot reload
* Tailwind CSS for styling
* shadcn/ui component library
**Backend**
* Managed NoSQL database
* Built-in user authentication
* Serverless backend functions (Deno runtime)
* Realtime updates via WebSocket
**Base44 SDK**
Your interface to all Base44 backend services. Use it in your frontend components or backend functions to access data, auth, integrations, and more. [See the SDK overview →](/developers/references/sdk/getting-started/overview)
## Get started
Start with the [Code Tab](../editor/code-tab) to explore and edit your app's source code.
# Project Structure
Source: https://docs.base44.com/developers/app-code/overview/project-structure
Understand the organization and key files in your Base44 app project
Base44 apps are standard React apps built with Vite. Your project includes modern web development tools and seamless Base44 backend integration.
## Project structure
In the [Code Tab](../editor/code-tab) and when you [connect to GitHub](../local-development/github), you'll see the complete React/Vite project structure:
### Project directories
Your project contains the following directories:
* **`src/`** - Frontend app code organized into these directories:
* `pages` - The pages in your app. Each file is a route. `Home.jsx` becomes `/`, `Settings.jsx` becomes `/settings`.
* `components` - Reusable UI elements. The `ui/` subfolder contains pre-built UI components.
* `api` - Base44 SDK client configuration for communicating with your backend.
* `hooks` - Custom React hooks for UI and state management.
* `lib` - Base44 integration and app configuration code.
* `utils` - Utility functions and helper methods.
* **`entities/`** - Your data model definitions. Each entity has a JSON schema file that defines its fields.
* **`functions/`** - Backend functions for backend logic. Each TypeScript file in this directory is a separate function.
**Entities:** When using GitHub 2-way integration, entities are managed in Base44 and are not included in your local repository.
### Configuration files
The root directory includes all the configuration needed to run independently:
* `package.json` - Dependencies and scripts (includes @base44/sdk)
* `vite.config.js` - Build configuration with Base44 plugin
* `tailwind.config.js` - Styling configuration
* `index.html` - Main HTML entry point
## Run locally
To run the exported project locally: `npm install` then `npm run dev`.
# AI development tools overview
Source: https://docs.base44.com/developers/backend/overview/agent-extensions
Tools that help AI assistants work more effectively with Base44
Base44 provides tools that help AI assistants work with your backend projects. They each do something different and work best together:
Equip your AI coding agent with Base44 knowledge so it can help you build, deploy, and manage projects.
Lets an AI assistant create and manage projects in your Base44 account directly.
Gives your AI assistant access to search Base44 documentation on the fly.
# Base44 Docs MCP
Source: https://docs.base44.com/developers/backend/overview/base44-docs-mcp
Let AI assistants search Base44 documentation while you develop
The Base44 Docs MCP server lets AI assistants like Cursor, Claude Desktop, and VS Code search Base44 documentation directly. Ask questions about the SDK, CLI, entities, or any Base44 feature and get answers with links to the relevant docs.
Results come from live documentation, so you always get the latest information.
## Connect your AI assistant
Add it to your AI tool's MCP configuration:
```json theme={null}
"base44-docs": {
"type": "http",
"url": "https://docs.base44.com/mcp"
}
```
Some tools require a restart to pick up new MCP configurations.
## Available tools
The server provides a single search tool that can:
* **Search all documentation:** Query guides, API references, and tutorials.
* **Return code examples:** Get SDK usage examples and implementation patterns.
* **Filter results:** Narrow searches by version, language, API-only, or code-only content.
* **Link to sources:** Every result includes a direct link to the documentation page.
## Example prompts
Once connected, ask your AI assistant questions like:
* "How do I create an entity with the Base44 SDK?"
* "What types of authentication can I use?"
* "What CLI commands are available for deployment?"
* "How do security rules work in Base44?"
The AI will search the documentation and return relevant information with links to learn more.
## See also
* [Base44 MCP server](/developers/backend/overview/mcp-server): Create and manage backend projects from AI assistants
* [Skills](/developers/backend/overview/skills): Reusable instructions that teach AI coding agents how to perform Base44-specific tasks
# Local development setup
Source: https://docs.base44.com/developers/backend/overview/local-dev/get-started
Set up the Base44 dev server and connect your frontend to it
Local development runs two processes side by side: the Base44 dev server for your backend, and your usual frontend dev server for the UI. Your frontend talks to the local backend through the SDK.
## Prerequisites
If your project has backend functions, you need to install [Deno](https://docs.deno.com/runtime/getting_started/installation/) to run them locally.
## Configure your frontend client
If your project has a frontend that uses the SDK, you need to tell it where to send requests and where to redirect for auth. By default, the SDK uses Base44's hosted backend. To use the local dev server in development, set both `serverUrl` and `appBaseUrl` to `"http://localhost:4400"` when calling `createClient()`. In production, omit them so the SDK uses its defaults.
Choose one of the two patterns below. The env-var pattern is simplest if `base44 dev` spawns your frontend via `site.serveCommand` and you use a Vite-based build. The manual detection pattern works in any setup.
### Env-var pattern
When `base44 dev` spawns your frontend via `site.serveCommand`, it sets two Vite env vars in the frontend process: `VITE_BASE44_APP_ID` (your app id) and `VITE_BASE44_APP_BASE_URL` (the local dev URL). Read them when creating the client, using the URL for both `serverUrl` and `appBaseUrl`:
```javascript theme={null}
import { createClient } from "@base44/sdk";
const base44 = createClient({
appId: import.meta.env.VITE_BASE44_APP_ID ?? "your-app-id",
serverUrl: import.meta.env.VITE_BASE44_APP_BASE_URL,
appBaseUrl: import.meta.env.VITE_BASE44_APP_BASE_URL,
});
```
The `serverUrl` option is where the SDK sends API requests. The `appBaseUrl` option is where it redirects for auth flows like login. In local development, both point at your local dev server.
In production builds, the env vars are undefined and both options fall back to the SDK's defaults.
Apps created via Base44's [GitHub integration](/developers/app-code/local-development/github) use the `@base44/vite-plugin`, which sets `serverUrl` and `appBaseUrl` automatically. You only need this manual setup for projects that don't run the plugin.
### Manual detection pattern
Use this pattern if you start your frontend in a separate terminal, or if your build tool isn't Vite. Detect whether your code is running in development, then set `serverUrl` conditionally.
Use the pattern that matches your environment:
```javascript Vite theme={null}
const isDev = import.meta.env.DEV;
```
```javascript Node.js, Webpack, Next.js theme={null}
const isDev = process.env.NODE_ENV !== "production";
```
```javascript React Native theme={null}
const isDev = __DEV__;
```
```javascript Deno theme={null}
const isDev = Deno.env.get("DENO_ENV") !== "production";
```
When creating the client, include `serverUrl` only in development:
```javascript theme={null}
import { createClient } from "@base44/sdk";
const base44 = createClient({
appId: "your-app-id",
...(isDev && {
serverUrl: "http://localhost:4400",
appBaseUrl: "http://localhost:4400",
}),
});
```
* In development, `isDev` is `true` and both `serverUrl` and `appBaseUrl` point at `localhost:4400`
* In production builds, `isDev` is `false`, both options are omitted, and the SDK uses its defaults
## Run the dev servers
How you start the dev environment depends on whether your project defines `site.serveCommand` in `base44/config.jsonc`.
### With `site.serveCommand` (recommended)
Run [`dev`](/developers/references/cli/commands/dev) from your project directory:
```bash theme={null}
base44 dev
```
This starts the local backend on `http://localhost:4400`, then spawns your frontend dev server using `site.serveCommand`. The CLI injects `VITE_BASE44_APP_ID` and `VITE_BASE44_APP_BASE_URL` into the frontend's environment, which the env-var client configuration pattern above reads to point the SDK at the local backend. Both processes' output is streamed to the same terminal, prefixed with `[backend]` and `[frontend]`, and a single Ctrl-C shuts them down together.
### Without `site.serveCommand`
If `site.serveCommand` isn't set, run the two processes in separate terminals.
In one terminal, run [`dev`](/developers/references/cli/commands/dev) from your project directory:
```bash theme={null}
base44 dev
```
This starts the local backend on `http://localhost:4400`.
In a second terminal, start your frontend dev server as you normally would. For example, with Vite:
```bash theme={null}
npm run dev
```
All SDK calls from your frontend now go to the local Base44 dev server.
## See also
* [Local development overview](/developers/backend/overview/local-dev/local-development-overview): What runs locally, what's forwarded, and how it works
* [`dev`](/developers/references/cli/commands/dev): CLI command reference with flags
* [`serverUrl`](/developers/references/sdk/docs/functions/createClient): SDK client configuration
# Local development
Source: https://docs.base44.com/developers/backend/overview/local-dev/local-development-overview
Develop and test your backend project locally with base44 dev
Local development lets you run your backend project on your own machine so you can test changes instantly, inspect data without affecting production, and catch issues before deploying.
See [Setup](/developers/backend/overview/local-dev/get-started) for prerequisites and step-by-step instructions.
## What runs locally
The dev server handles these features entirely on your machine:
* **[Functions](#functions):** Backend functions run locally with automatic reload on file changes.
* **[Entities](#entities):** Entity data is stored in a local in-memory database. Schema changes are picked up automatically.
* **[Media](#media):** File uploads are saved locally.
* **[Authentication](#authentication):** Email/password registration and login run locally.
Function
[automations](/developers/backend/resources/backend-functions/automations)
don't run locally.
## What's forwarded
Some features aren't handled locally yet. When the dev server receives a request it can't serve, it forwards it to your deployed app so the call still works. The server logs a warning each time this happens.
Forwarded features include:
* **Authentication:** OAuth and social login routes are redirected to Base44 so session cookies work correctly. Email/password auth runs locally.
* **Core integrations:** Endpoints like `SendEmail` or AI generation are forwarded. File uploads are the exception and run locally.
* **Custom integrations:** API calls configured through OpenAPI specifications.
This means your app continues to work end-to-end during development. Features that run locally use local data, and everything else uses production.
## Functions
Backend functions run locally on your machine. You can call them from your frontend just like deployed functions.
* Each function runs as a separate [Deno](https://docs.deno.com/runtime/) process, which must be [installed separately](https://docs.deno.com/runtime/getting_started/installation/).
* Functions reload automatically when you edit the source code.
* Function output is printed directly to your terminal. You don't need to use [`base44 logs`](/developers/references/cli/commands/logs) during local development.
When a request reaches the dev server and is proxied to your local Deno function, the server may add or normalize headers so your function sees the same shape of context as in production:
* **`Base44-App-Id`:** Set from the incoming **`X-App-Id`** header when it is present.
* **`Base44-Service-Authorization`:** Set from the incoming **`Authorization`** header when it is present, so code that reads the service authorization header locally matches deployed behavior.
* **`Base44-Api-Url`:** Set to your dev server base URL (scheme and host), so functions can build callbacks or absolute URLs against the local server.
The original **`Authorization`** header is still forwarded unchanged.
The first request to a function may be slower because the dev server starts
the process on demand. Subsequent requests reuse the running process.
## Entities
Entity operations go to a local in-memory database instead of the remote database. This lets you create, read, update, and delete records without affecting your production data.
* All data is stored in memory and is cleared when you stop the dev server.
* Schema changes are picked up automatically. Changing an entity schema clears all in-memory data for that entity.
* Realtime subscriptions work locally. If your frontend uses `entities.subscribe()`, it receives events for local entity changes.
* The `User` entity runs locally. On startup, the dev server seeds a single user record using your authenticated CLI credentials. Read and update operations on `me` work as they do in production. Requests to create or delete users are silently ignored, matching production behavior where direct user management is not permitted.
## Media
File uploads are handled locally so you can test media features without uploading to production storage. Files are saved to a temporary directory and cleaned up when the dev server stops. The maximum file size is 50 MB.
## Authentication
Email/password registration and login run locally when your app uses the built-in auth system. OAuth and social login routes are redirected to Base44.
To register a new user during development using email/password auth:
1. Call the register endpoint. The dev server prints a one-time verification code to your terminal instead of sending an email.
2. Submit the code to the verify-OTP endpoint to confirm the address and create the user.
3. Log in with the registered email and password.
Your developer account (the email you used for `base44 login`) can log in with any password, no registration required.
Tokens issued by the local dev server are only valid locally. They are signed with a different secret than production, so your deployed app will reject them. When you switch from local development to your deployed app, first sign out of your local session or delete your tokens from your local browser storage. Then, log back in through the deployed app to get a valid token.
## See also
* [Setup](/developers/backend/overview/local-dev/get-started): Prerequisites and step-by-step instructions
* [Backend functions](/developers/backend/resources/backend-functions/overview): Write serverless functions that run on Base44's infrastructure
* [Entities](/developers/backend/resources/entities/overview): Define data models for your app
* [Project structure](/developers/backend/overview/project-structure): How project files are organized
# Base44 MCP server
Source: https://docs.base44.com/developers/backend/overview/mcp-server
Create and manage Base44 backend projects from AI assistants like ChatGPT, Claude, and Cursor
The Base44 MCP server exposes your Base44 account to any MCP-compatible AI assistant. Once connected, you can describe what you want to build or change and the AI will create or update projects on your behalf.
To connect, you must authenticate with OAuth. During that flow you choose which workspace to grant access to, and Base44 only acts within that workspace, with your explicit permission.
You need a [**Builder plan**](https://base44.com/pricing) or higher to connect an AI assistant through the Base44 MCP server.
## Connect your AI assistant
The server is available at:
```text theme={null}
https://app.base44.com/mcp
```
Add it to your AI tool's MCP configuration:
```json theme={null}
"base44": {
"type": "http",
"url": "https://app.base44.com/mcp"
}
```
After adding the configuration, your AI tool will prompt you to sign in to Base44 through the standard OAuth flow. You only need to do this once.
Some tools require a restart to pick up new MCP configurations.
### Choose a workspace
During the OAuth consent step, you choose which workspace the connection targets. Previously every connection defaulted to your personal workspace. Now you can point an assistant at a team's shared workspace instead.
Every action the assistant takes, including creating, listing, and editing projects, runs in the workspace you pick, and the connection cannot reach any other workspace. The workspace is fixed for the life of the connection. To target a different workspace, connect again and select it during consent.
### What your assistant can do in a workspace
Your assistant acts as you, so it inherits your role in the selected workspace. What it can do follows the same rules that apply to you in the Base44 editor.
* **Creating projects:** You need create permission in the workspace. In a shared workspace, a Viewer or Guest cannot create projects.
* **Editing projects:** You need write access to the project. A read-only Viewer cannot make changes, even to a project they can open.
* **Reading projects:** Listing projects, reading entity schemas, and querying records follow the same read access you already have.
### SSO-enforced workspaces
Base44 re-checks your workspace membership on every request and every token refresh, so a connection only keeps working while your access does.
If the selected workspace enforces SSO, that check is stricter. Removing you from the workspace ends the connection right away, and rotating the workspace's SSO configuration ends it until you connect again.
## Available tools
The server exposes the following tools to your AI assistant.
| Tool | What it does |
| --------------------- | ----------------------------------------------- |
| `create_base44_app` | Create a new project from a text description |
| `edit_base44_app` | Make changes to an existing project |
| `list_user_apps` | List your projects, optionally filtered by name |
| `list_entity_schemas` | Get the entity schemas for a project |
| `query_entities` | Query records from an entity in a project |
Two additional tools are used internally by specific MCP clients to poll build progress. They are not intended to be called directly.
| Tool | What it does |
| --------------------- | ---------------------------------------------------------- |
| `get_app_status` | Check whether a project build is complete |
| `get_app_preview_url` | Get the preview link for a project once its build is ready |
## Example prompts
Once connected, you can ask your AI assistant things like:
* "Create a Base44 project for tracking job applications with status, company name, and interview notes."
* "Edit my CRM project to add a follow-up date field to the Contacts entity."
* "List all my Base44 projects."
* "Add 10 sample products to my inventory project so I can test the UI."
* "Query the first 10 orders from my e-commerce project that have status pending."
The AI interprets your request and calls the appropriate tool. For `create_base44_app` and `edit_base44_app`, the build runs in the background and you get a link to the Base44 editor when it's ready.
## See also
* [Docs MCP server](/developers/backend/overview/base44-docs-mcp): Let AI assistants search Base44 documentation directly
* [App MCP server](/Integrations/app-mcp): Let AI assistants connect to and use an app you built
* [Skills](/developers/backend/overview/skills): Reusable instructions that teach AI coding agents how to perform Base44-specific tasks
* [Entities](/developers/backend/resources/entities/overview): Learn about the data model that `list_entity_schemas` and `query_entities` operate on
# Standalone scripts
Source: https://docs.base44.com/developers/backend/overview/run-scripts
Run standalone scripts against your app
You can run standalone scripts that interact with your Base44 app using the `base44 exec` command.
Standalone scripts:
* Require no setup or token management. A pre-authenticated SDK client is available as a global `base44` variable.
* Execute locally using [Deno](https://docs.deno.com/runtime/) and run against the deployed app linked to your current project directory.
* Have full access to your app's entities, functions, and integrations through the SDK.
* Run with your user's permissions, not service-role access.
## Prerequisites
You need to install [Deno](https://docs.deno.com/runtime/getting_started/installation/) to run scripts with exec.
## Use cases
The `exec` command gives you direct access to the full SDK from standalone scripts. Common use cases include:
* **Data migrations:** Reshape, backfill, or transform entity records in bulk.
* **Seed scripts:** Populate your app with sample data for development or staging.
* **Ad-hoc queries:** Quickly inspect or debug your app's data from the terminal.
* **AI and LLM tasks:** Run one-off AI operations like summarizing data, generating content, or enriching records.
* **Function testing:** Invoke backend functions with real data to test them outside the app.
* **Automation:** Run scripts in CI pipelines or scheduled jobs to perform maintenance tasks.
## Get started
To get started, create a script file and pipe it to exec.
Create a script file that uses the `base44` global variable. No imports or setup are needed. For example:
```typescript theme={null}
// list-tasks.ts
const tasks = await base44.entities.Task.list();
console.log(`Found ${tasks.length} tasks:`);
for (const task of tasks) {
console.log(` - ${task.title} (${task.status})`);
}
```
Run the script from your project directory:
```bash theme={null}
cat ./list-tasks.ts | base44 exec
```
The CLI authenticates as your current user, starts a Deno process, and runs your script with the `base44` SDK client ready to use.
For quick one-liners, pipe inline code directly:
```bash theme={null}
echo "console.log(await base44.entities.Task.list())" | base44 exec
```
## See also
* [`exec`](/developers/references/cli/commands/exec): Full command reference
* [Backend functions](/developers/backend/resources/backend-functions/overview): Write serverless functions that run on Base44's infrastructure
* [JavaScript SDK](/developers/references/sdk/getting-started/overview): SDK reference for entities, auth, functions, and integrations
# Skills
Source: https://docs.base44.com/developers/backend/overview/skills
Reusable instructions that teach AI coding agents how to perform Base44-specific tasks
Base44 skills help external AI tools like Claude, Cursor, or other AI coding assistants work more effectively with Base44. They provide reusable instructions and context that these tools can use when helping you build and manage your Base44 apps.
## About skills
Base44 skills are self-contained instructions that teach AI agents how to perform specific tasks with Base44. They follow the open Agent Skills specification and consist of a `SKILL.md` file containing metadata and instructions, along with any additional background information the agent may need.
Each skill includes:
* **Name and description**: Helps agents identify when to use the skill.
* **Instructions**: Step-by-step guidance for performing the task.
* **Optional resources**: Scripts, reference docs, and assets the agent can use.
If you want to use Base44 skills to create new projects, install them globally:
```bash theme={null}
npx skills add base44/skills -g
```
Base44 skills are automatically included in projects created with the CLI. If you installed the skills globally, your AI agent will typically use the project-level Base44 skills.
Base44 skills are maintained in the [base44/skills](https://github.com/base44/skills) repository.
## Available skills
Base44 provides three skills that cover the full development workflow:
* [base44-cli](#base44-cli): Project setup, resource management, and deployment.
* [base44-sdk](#base44-sdk): Feature implementation with the JavaScript SDK.
* [base44-troubleshooter](#base44-troubleshooter): Production debugging and log analysis.
### base44-cli
The CLI skill teaches agents how to manage Base44 projects using the command-line interface. This is your agent's first stop when starting a new project or performing infrastructure tasks.
#### Capabilities
Capabilities of this skill include:
* Create and link Base44 projects from templates.
* Define [entity schemas](/developers/backend/resources/entities/overview) with proper field types, formats, and RLS rules.
* Configure [backend functions](/developers/backend/resources/backend-functions/overview) with automations.
* Set up [AI agents](/developers/backend/resources/agents-config) with tool permissions.
* Configure [OAuth connectors](/developers/references/sdk/docs/type-aliases/integrations) for external services such as Google Calendar, Slack, and Notion.
* Generate TypeScript types from your project resources.
* Deploy resources to production, including site deployment to Base44 hosting.
* Authenticate with Base44 and manage CLI sessions.
* Configure project settings.
#### Example prompts
* "Create a new Base44 project for a todo app".
* "Add a User entity with email, name, and role fields".
* "Deploy all my changes to production".
* "Set up RLS so users can only see their own tasks".
* "Add a Google Calendar connector to my project".
* "Generate TypeScript types for my entities".
### base44-sdk
The SDK skill teaches agents how to build features using the Base44 JavaScript SDK. Once your project is initialized, this skill guides implementation work.
#### Capabilities
Capabilities of this skill include:
* Write frontend code that interacts with [entities](/developers/backend/resources/entities/overview).
* Implement [authentication](/developers/references/sdk/docs/interfaces/auth) and user management.
* Integrate [AI agents](/developers/backend/resources/agents-config) into your app.
* Call [backend functions](/developers/backend/resources/backend-functions/overview) from the frontend.
* Use [integrations](/developers/references/sdk/docs/type-aliases/integrations) for AI, email, and file uploads.
* Implement [real-time features](/developers/references/sdk/docs/type-aliases/entities#subscribe) with subscriptions.
* Build [backend functions](/developers/backend/resources/backend-functions/overview) with service role access.
* Use [OAuth connectors](/developers/references/sdk/docs/type-aliases/integrations) to get access tokens for external services in backend functions.
* [Invite users](/developers/references/sdk/docs/interfaces/auth) to your app.
* Track [analytics](/developers/references/sdk/docs/interfaces/analytics) and [log user activity](/developers/references/sdk/docs/interfaces/analytics) with the app logs module.
#### Example prompts
* "Add a login page with email and password".
* "Show a list of all pending tasks for the current user".
* "Create a chat interface for the support agent".
* "Send an email notification when a new order is created".
* "Use the Slack connector to post a message from a backend function".
### base44-troubleshooter
The troubleshooter skill teaches agents how to investigate production issues by fetching and analyzing backend function logs.
#### Capabilities
Capabilities of this skill include:
* Fetch backend function logs with filtering by function name, log level, and time range.
* Identify errors across all project functions.
* Drill into specific function logs for targeted debugging.
* Correlate log timestamps with user-reported issues.
* Analyze stack traces and error messages from function executions.
#### Example prompts
* "Show me all errors from the checkout function today".
* "Pull the last 100 log entries for my send-email function".
* "Check for any errors in the last hour across all functions".
* "Get warning and error logs from the process-payment function since yesterday".
## Keep skills in sync
Base44 skills work best when they match your Base44 CLI version. When you update the CLI, you should also update your Base44 skills:
```bash theme={null}
# Update Base44 skills in current project
npx skills add base44/skills
# Update Base44 skills globally
npx skills add base44/skills -g
```
This updates existing Base44 skills and installs any newly added ones from the repository.
## See also
* [Base44 MCP server](/developers/backend/overview/mcp-server): Create and manage backend projects from AI assistants
* [Docs MCP server](/developers/backend/overview/base44-docs-mcp): Let AI assistants search Base44 documentation while you develop
* [Project structure](/developers/backend/overview/project-structure): Base44 project organization
* [CLI reference](/developers/references/cli/get-started/overview): Complete CLI documentation
* [SDK reference](/developers/references/sdk/getting-started/overview): Complete SDK documentation
# About Agents
Source: https://docs.base44.com/developers/backend/resources/agents-config
Define AI agents using local configuration files
You're viewing developer documentation
This documentation is for developers working with the Base44 developer platform. For information about AI agents in the app editor, see Setting up an AI agent.
[AI agents](/Building-your-app/AI-agents-for-apps) are customizable AI assistants that take action and connect to tools to help team members and end users. Define agent behavior, permissions, and tools using local JSONC configuration files.
## Create agents
Create JSONC configuration files in your `base44/agents/` directory (one file per agent), then run [`agents push`](/developers/references/cli/commands/agents-push) to sync them to Base44.
## Example
```jsonc theme={null}
{
"name": "customer_support",
"description": "Handles customer support inquiries and ticket management",
"instructions": "You are a friendly customer support agent. Help users resolve their issues politely and efficiently. If you cannot help, escalate to a human agent.",
"model": "anthropic/claude-sonnet-4-20250514",
"tool_configs": [
{
"entity_name": "tickets",
"allowed_operations": ["read", "create", "update"],
},
{
"entity_name": "customers",
"allowed_operations": ["read"],
},
{
"function_name": "send_notification",
"description": "Sends a push notification to the customer",
},
{
"function_name": "escalate_to_human",
"description": "Escalates the conversation to a human support agent",
},
],
"whatsapp_greeting": "Hi, I'm your support assistant. How can I help you today?",
}
```
## Field reference
Agent configurations use JSONC. Each agent is defined in a separate file in the `base44/agents/` directory.
### Required fields
Unique identifier for the agent. Use lowercase letters and underscores. The
name should match the filename, so an agent named `customer_support` would be
in `customer_support.jsonc`.
Brief description of what the agent does.
System prompt that defines the agent's behavior, personality, and guidelines.
The AI model to use, in the format `provider/model-name`.
Supported models:
* `anthropic/claude-sonnet-4-20250514`
* `anthropic/claude-3-5-sonnet-20241022`
* `openai/gpt-4o`
* `openai/gpt-4o-mini`
### Optional fields
Tools the agent can use to interact with your app. See [Tool
configuration](#tool-configuration).
Welcome message for WhatsApp conversations with this agent.
## Tool configuration
The `tool_configs` array defines what capabilities your agent has. There are two types: **entity tools** and **function tools**.
### Entity tools
Entity tools allow the agent to perform CRUD operations on your app's [entities](/developers/backend/resources/entities/overview).
Name of the entity. Must match an existing entity in your app.
Operations the agent can perform on this entity. Valid values are `"read"`,
`"create"`, `"update"`, and `"delete"`.
### Function tools
Function tools allow the agent to invoke your app's [backend functions](/developers/backend/resources/backend-functions/overview).
Name of the function. Must match an existing function in your app.
Description of what the function does. The agent uses this to decide when to
call it.
## TypeScript types
Generate TypeScript types from your agent configurations to get type safety and autocomplete for agent names in your SDK code. Learn more about [dynamic types](/developers/references/sdk/getting-started/dynamic-types).
## See also
* [`agents pull`](/developers/references/cli/commands/agents-pull): Sync agent configurations from Base44 to your local project
* [`agents push`](/developers/references/cli/commands/agents-push): Deploy your local agent configurations to Base44
* [`agents`](/developers/references/sdk/docs/interfaces/agents): SDK reference for working with agents in your code
* [Setting up AI agents](/Building-your-app/AI-agents-for-apps): Guide to creating and configuring AI agents
# Auth
Source: https://docs.base44.com/developers/backend/resources/auth
Manage your app's login methods using local configuration files
You're viewing developer documentation
This documentation is for developers working with the Base44 developer platform. For information about managing login methods in the app editor, see Managing login and registration.
Authentication controls how your app's users sign in, register, and access its features. Auth config lets you manage login methods as a local JSONC file that you sync with Base44 using the CLI.
## Configure
Your auth config is a single JSONC file at `base44/auth/config.jsonc`. You can customize the directory path with the `authDir` property in your [project configuration](/developers/backend/overview/project-structure#config-jsonc). Pull the current config from Base44 with [`auth pull`](/developers/references/cli/commands/auth-pull), then push changes with [`auth push`](/developers/references/cli/commands/auth-push) or [`deploy`](/developers/references/cli/commands/deploy).
You can also toggle login methods from the command line with [`auth password-login`](/developers/references/cli/commands/auth-password-login) and [`auth social-login`](/developers/references/cli/commands/auth-social-login).
## Example
```jsonc theme={null}
{
"enableUsernamePassword": true,
"enableGoogleLogin": false,
"enableMicrosoftLogin": false,
"enableFacebookLogin": false,
"enableAppleLogin": false,
"googleOAuthMode": "default",
"googleOAuthClientId": null
}
```
## Field reference
Allow users to sign in with an email address and password. Defaults to `false`.
Allow users to sign in with Google. Defaults to `false`.
Allow users to sign in with Microsoft. Defaults to `false`.
Allow users to sign in with Facebook. Defaults to `false`.
Allow users to sign in with Apple. Defaults to `false`.
How Google OAuth credentials are sourced. Use `default` to use Base44-managed credentials, or `custom` to use your own OAuth client. Defaults to `default`.
Custom Google OAuth client ID. Only used when `googleOAuthMode` is `custom`. Set this with [`auth social-login google enable --client-id`](/developers/references/cli/commands/auth-social-login). The matching client secret is stored as a project secret, not in this file. Defaults to `null`.
If your config has no login methods enabled, the CLI warns that users will be locked out when you push. Make sure at least one login method is enabled.
## See also
* [`auth pull`](/developers/references/cli/commands/auth-pull): Fetch auth config from Base44
* [`auth push`](/developers/references/cli/commands/auth-push): Push auth config to Base44
* [`auth password-login`](/developers/references/cli/commands/auth-password-login): Enable or disable password login
* [`auth social-login`](/developers/references/cli/commands/auth-social-login): Enable or disable social login providers
* [`deploy`](/developers/references/cli/commands/deploy): Deploy all project resources
* [Managing login and registration](/Setting-up-your-app/Managing-login-and-registration): Configure login options in the dashboard
# Automations
Source: https://docs.base44.com/developers/backend/resources/backend-functions/automations
Schedule recurring tasks and trigger functions automatically based on database events or connector webhook events
You're viewing developer documentation
This documentation is for developers working with the Base44 developer platform. For information about automations in the app editor, see Creating automations for your app.
Automations allow [backend functions](/developers/backend/resources/backend-functions/overview) to run automatically on a schedule, in response to database events, or when a connected integration sends a webhook event. Use automations to process data at regular intervals, handle entity changes, react to external service events, or execute one-time tasks at specific times.
Each backend function can have multiple automations attached, configured in the function's `function.jsonc` file. If you only have an `entry.ts` or `entry.js` file, you'll need to add this configuration file to use automations. Automations are [deployed atomically with the function code](#deploy-automations) when you run [`deploy`](/developers/references/cli/commands/deploy) or [`functions deploy`](/developers/references/cli/commands/functions-deploy).
## Automation types
Base44 supports 4 types of automations:
* **[Scheduled automations with cron](#cron)**: Use cron expressions for precise scheduling control.
* **[Scheduled automations with simple schedules](#simple-schedule)**: Configure recurring tasks by interval without cron expressions.
* **[Entity event automations](#entity-events)**: Trigger functions when database records are created, updated, or deleted.
* **[Connector automations](#connector-automations)**: Respond to events from connected services in real time, such as a new email in Gmail or a file change in Google Drive.
## Common fields
### Common fields for all automations
All automation types share the following fields:
| Field | Type | Required | Description |
| --------------- | --------- | -------- | ----------------------------------------------------------------------------------------------- |
| `type` | `string` | Yes | The automation type. Possible values: `"scheduled"`, `"entity"`, or `"connector"`. |
| `name` | `string` | Yes | Unique identifier for the automation. |
| `description` | `string` | No | Human-readable description. |
| `function_args` | `object` | No | Arguments passed to the function when triggered. See [Function arguments](#function-arguments). |
| `is_active` | `boolean` | No | Whether the automation is enabled. Defaults to `true`. |
### Common fields for scheduled automations
Both cron and simple scheduled automations share these additional fields:
| Field | Type | Required | Description |
| ------------------ | -------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `schedule_mode` | `string` | Yes | Whether the schedule repeats. Possible values: `"recurring"` or `"one-time"`. |
| `schedule_type` | `string` | Yes | Scheduling method to use. Possible values: `"cron"` or `"simple"`. |
| `ends_type` | `string` | No | When the recurring schedule should stop. Possible values: `"never"`, `"on"`, or `"after"`. Defaults to `"never"`. |
| `ends_on_date` | `string` | Conditional | Date when the recurring schedule ends, inclusive, in UTC. Required when `ends_type` is `"on"`. Format: `YYYY-MM-DDTHH:MM:SSZ`. For example, `"2026-12-31T23:59:59Z"`. |
| `ends_after_count` | `number` | Conditional | Number of executions after which the recurring schedule stops. Required when `ends_type` is `"after"`. |
## Automation configuration
Configure automations in your `function.jsonc` file using one of the following approaches. All automations use the [common fields for all automations](#common-fields-for-all-automations) listed above, plus the fields specific to each type.
### Cron
Use [common fields for all automations](#common-fields-for-all-automations) and [common fields for scheduled automations](#common-fields-for-scheduled-automations) along with the cron-specific fields listed here.
Set `type` to `"scheduled"` and `schedule_type` to `"cron"` to use cron expressions for precise scheduling control.
Cron automations use standard 5-field syntax: `minute hour day-of-month month day-of-week`. See [crontab.guru](https://crontab.guru/) for an interactive cron expression editor and syntax reference.
| Field | Type | Required | Description |
| ----------------- | -------- | -------- | ------------------------ |
| `cron_expression` | `string` | Yes | 5-field cron expression. |
#### Cron example
This example runs a function every day at midnight UTC:
```jsonc theme={null}
{
"name": "sendDailyReport",
"entry": "entry.ts",
"automations": [
{
"type": "scheduled",
"name": "daily_midnight_report",
"description": "Runs every day at midnight UTC",
"function_args": { "mode": "full_sync" },
"is_active": true,
"schedule_mode": "recurring",
"schedule_type": "cron",
"cron_expression": "0 0 * * ?"
}
]
}
```
### Simple schedule
Use [common fields for all automations](#common-fields-for-all-automations) and [common fields for scheduled automations](#common-fields-for-scheduled-automations) along with the simple schedule fields listed here.
Set `type` to `"scheduled"` and `schedule_type` to `"simple"` for straightforward scheduling needs.
Configure recurring tasks by interval such as minutes, hours, days, weeks, or months without writing cron expressions.
| Field | Type | Required | Description |
| ------------------------ | ---------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `one_time_date` | `string` | Conditional | Date and time when the automation runs once, in UTC. Required when `schedule_mode` is `"one-time"`. Format: `YYYY-MM-DDTHH:MM:SSZ`. For example, `"2026-02-15T10:00:00Z"`. |
| `repeat_unit` | `string` | Conditional | Time unit for recurring automations. Required when `schedule_mode` is `"recurring"`. Possible values: `"minutes"`, `"hours"`, `"days"`, `"weeks"`, or `"months"`. |
| `repeat_interval` | `number` | Conditional | Interval between executions. Required when `repeat_unit` is `"minutes"`, `"hours"`, or `"days"`. |
| `start_time` | `string` | Conditional | Time of day when the automation runs, in UTC. Required when `repeat_unit` is `"days"`, `"weeks"`, or `"months"`. Format: `HH:MM`. |
| `repeat_on_days` | `number[]` | Conditional | Days of the week when the automation runs. Required when `repeat_unit` is `"weeks"`. Array of weekday numbers, where `0` is Sunday and `6` is Saturday. |
| `repeat_on_day_of_month` | `number` | Conditional | Day of the month when the automation runs. Required when `repeat_unit` is `"months"`. Valid values: `1`-`31`. |
#### Simple schedule examples
The following examples show different ways to schedule automations with simple schedules:
```jsonc Every 30 minutes theme={null}
{
"type": "scheduled",
"name": "every_30_minutes",
"description": "Runs every 30 minutes.",
"is_active": true,
"schedule_mode": "recurring",
"schedule_type": "simple",
"repeat_unit": "minutes",
"repeat_interval": 30
}
```
```jsonc Weekdays at 9am theme={null}
{
"type": "scheduled",
"name": "weekday_morning_report",
"description": "Runs at 9 AM Monday through Friday.",
"is_active": true,
"schedule_mode": "recurring",
"schedule_type": "simple",
"repeat_unit": "weeks",
"repeat_interval": 1,
"start_time": "09:00",
"repeat_on_days": [1, 2, 3, 4, 5],
"ends_type": "after",
"ends_after_count": 52
}
```
```jsonc One-time execution theme={null}
{
"type": "scheduled",
"name": "one_time_cleanup",
"description": "Runs once at a specific date and time.",
"function_args": { "cleanup": true },
"is_active": true,
"schedule_mode": "one-time",
"schedule_type": "simple",
"one_time_date": "2026-02-15T10:00:00Z"
}
```
### Entity events
Use [common fields for all automations](#common-fields-for-all-automations) along with the entity event fields listed here.
Set `type` to `"entity"` to trigger functions automatically when database records are created, updated, or deleted.
Entity automations can listen to 1 or more event types on a specific entity.
Entity automations only fire for single-record create, update, and delete calls made through the [entities API](https://docs.base44.com/developers/references/sdk/docs/type-aliases/entities). Bulk operations, such as [`bulkUpdate()`](http://docs.base44.com/developers/references/sdk/docs/type-aliases/entities#bulkupdate), and by-query operations, such as [`updateMany()`](https://docs.base44.com/developers/references/sdk/docs/type-aliases/entities#updatemany), do not trigger entity automations, even when they affect records that match your entity's name. Restoring a soft-deleted record or permanently deleting one also does not trigger an automation. If your automation must react to every change, avoid bulk or by-query writes on that entity, or trigger the automation's logic manually instead.
| Field | Type | Required | Description |
| ------------- | ---------- | -------- | -------------------------------------------------------------------------------------------------------- |
| `entity_name` | `string` | Yes | Name of the entity to monitor. |
| `event_types` | `string[]` | Yes | Database events to listen for. Possible values: `"create"`, `"update"`, `"delete"`. At least 1 required. |
#### Entity event examples
The following examples show how to trigger functions based on entity events:
```jsonc All order events theme={null}
{
"name": "processOrders",
"entry": "entry.ts",
"automations": [
{
"type": "entity",
"name": "on_order_changes",
"description": "Triggered on order create, update, or delete.",
"function_args": { "notify_slack": true },
"is_active": true,
"entity_name": "orders",
"event_types": ["create", "update", "delete"]
}
]
}
```
```jsonc New records only theme={null}
{
"type": "entity",
"name": "on_customer_create",
"description": "Triggered when a new customer is created.",
"is_active": true,
"entity_name": "customers",
"event_types": ["create"]
}
```
### Connector automations
Use [common fields for all automations](#common-fields-for-all-automations) along with the connector-specific fields listed here.
Set `type` to `"connector"` to trigger functions when a connected integration sends a webhook event. Use these to react to external service activity in real time. For example, you can parse a new email, sync a calendar change, or respond to a file update in Google Drive.
You can optionally add [trigger conditions](#trigger-conditions) to filter events so your function only runs when the payload matches rules you define.
When a connector automation fires, your function receives a structured [webhook payload](#webhook-payload) containing the event type, integration details, and the raw data from the external service.
The connector must be configured in your project and authorized before deployment. See [Shared connectors](/developers/backend/resources/connectors/shared-connectors) for setup instructions.
| Field | Type | Required | Description |
| -------------------- | ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `integration_type` | `string` | Yes | The connector type identifier to listen on. See [supported integrations](#supported-integrations-and-events) for accepted values. |
| `events` | `string[]` | Yes | One or more webhook event names to subscribe to. See [supported integrations](#supported-integrations-and-events) for available events per connector. |
| `resource_id` | `string` | Conditional | Scopes the automation to a specific resource. The expected format depends on the connector. See [Resource ID formats](#resource-id-formats) below. Required for Google Drive file-scoped events. Optional for other connectors. |
| `trigger_conditions` | `object` | No | Rules that must match the incoming event before your function runs. If the event does not match, the run is skipped. See [Trigger conditions](#trigger-conditions) for the full reference. |
#### Supported integrations and events
| Connector | `integration_type` | `events` value | Description |
| -------------------- | ------------------ | --------------------------------- | ----------------------------------------------------------------------------------- |
| Gmail | `gmail` | `mailbox` | Any mailbox change, including new messages, label updates, and read status changes. |
| Google Calendar | `googlecalendar` | `events` | Any calendar event change, including created, updated, and deleted. |
| Google Drive | `googledrive` | `changes` | Any change in the drive, including files added, modified, or deleted. |
| Google Drive | `googledrive` | `file` | Any change to a specific file (requires `resource_id`). |
| Google Drive | `googledrive` | `file.update` | File content or properties changed (requires `resource_id`). |
| Google Drive | `googledrive` | `file.trash` | File moved to trash (requires `resource_id`). |
| Google Drive | `googledrive` | `file.untrash` | File restored from trash (requires `resource_id`). |
| Google Drive | `googledrive` | `file.delete` | File permanently deleted (requires `resource_id`). |
| Microsoft OneDrive | `one_drive` | `updated` | Any file or folder change, including created, modified, and deleted. |
| Microsoft Outlook | `outlook` | `created` | A new email, calendar event, or contact is created. |
| Microsoft Outlook | `outlook` | `updated` | An email, calendar event, or contact is updated. |
| Microsoft Outlook | `outlook` | `deleted` | An email, calendar event, or contact is deleted. |
| Microsoft SharePoint | `share_point` | `updated` | When a list item or document is created, modified, or deleted. |
| Microsoft Teams | `microsoft_teams` | `created` | When a new chat message is posted. |
| Microsoft Teams | `microsoft_teams` | `updated` | When a chat message is updated. |
| Microsoft Teams | `microsoft_teams` | `deleted` | When a chat message is deleted. |
| Slack | `slack` | `message` | When a message is posted to a channel. |
| Slack | `slack` | `message.im` | When a direct message is posted. |
| Slack | `slack` | `message.groups` | When a message is posted to a private channel. |
| Slack | `slack` | `message.channels` | When a message is posted to a public channel. |
| Slack | `slack` | `message.mpim` | When a message is posted to a multi-party IM. |
| Slack | `slack` | `reaction_added` | When a reaction is added to a message. |
| Slack | `slack` | `reaction_removed` | When a reaction is removed from a message. |
| Slack | `slack` | `member_joined_channel` | When a user joins a channel. |
| Slack | `slack` | `member_left_channel` | When a user leaves a channel. |
| Slack | `slack` | `file_shared` | When a file is shared. |
| Slack Bot | `slackbot` | `app_mention` | When the bot is @-mentioned. |
| Slack Bot | `slackbot` | `message.im` | When a direct message is sent to the bot. |
| Slack Bot | `slackbot` | `message.mpim` | When a message is sent in a group DM with the bot. |
| Slack Bot | `slackbot` | `message.channels` | When a message is posted in a public channel the bot is in. |
| Slack Bot | `slackbot` | `message.groups` | When a message is posted in a private channel the bot is in. |
| Wix | `wix` | `wix.forms.v4.submission_created` | A form submission was created on a Wix site. |
| Wix | `wix` | `wix.contacts.v4.contact_created` | A contact was created in Wix CRM. |
| Wix | `wix` | `wix.contacts.v4.contact_updated` | A Wix CRM contact was updated. |
| Wix | `wix` | `wix.contacts.v4.contact_deleted` | A Wix CRM contact was deleted. |
| Wix | `wix` | `wix.ecom.v1.order_created` | A Wix eCommerce order was created. |
| Wix | `wix` | `wix.ecom.v1.order_updated` | A Wix eCommerce order was updated. |
| Wix | `wix` | `wix.ecom.v1.order_canceled` | A Wix eCommerce order was canceled. |
| Wix | `wix` | `wix.ecom.v1.checkout_created` | A Wix eCommerce checkout was created. |
| Wix | `wix` | `wix.data.v2.data_item_created` | A Wix CMS data item was created. |
| Wix | `wix` | `wix.data.v2.data_item_updated` | A Wix CMS data item was updated. |
| Wix | `wix` | `wix.data.v2.data_item_deleted` | A Wix CMS data item was deleted. |
Gmail's `mailbox` event fires for any mailbox change, not just new messages. To run your function only when new emails arrive, add a trigger condition: `{ "field": "has_new_messages", "operator": "equals", "value": true }`.
Slack (`slack`) and Slack Bot (`slackbot`) connector automations require trigger conditions. Deployment will fail if no conditions are set for these connector automations.
#### Resource ID formats
The expected value for `resource_id` varies by connector:
* **Google Drive:** The file ID. Required for file-scoped events (`file`, `file.update`, `file.trash`, `file.untrash`, `file.delete`).
* **Gmail:** A comma-separated list of label IDs to watch. Defaults to `"INBOX"` if omitted.
* **Microsoft Teams:** `{teamId}/{channelId}` to watch a specific channel, or `{chatId}` to watch a specific chat.
* **SharePoint:** `{siteId}/{listId}` to watch a specific list.
#### Trigger conditions
Use `trigger_conditions` to filter webhook events so your function only runs when the payload matches rules you define. If no conditions are set, the function runs for every incoming event. See [Connector automation examples](#connector-automation-examples) for complete configurations.
How to combine the conditions. Possible values: `"and"` (all must match), `"or"` (any must match). Defaults to `"and"`.
One or more condition objects or nested condition groups. Maximum 20 leaf conditions and 5 levels of nesting.
Dot-separated path into the webhook payload. For example, `"status"` reads `payload.data.status`, and `"sender.email"` reads `payload.data.sender.email`.
How to compare the field value.
| Operator | Description |
| -------------- | ---------------------------------------------------------------------------------------- |
| `equals` | Field value exactly matches `value`. |
| `not_equals` | Field value does not match `value`. |
| `contains` | Field value contains `value` as a substring. |
| `not_contains` | Field value does not contain `value` as a substring. |
| `starts_with` | Field value starts with `value`. |
| `ends_with` | Field value ends with `value`. |
| `gt` | Field value is greater than `value`. |
| `gte` | Field value is greater than or equal to `value`. |
| `lt` | Field value is less than `value`. |
| `lte` | Field value is less than or equal to `value`. |
| `in_list` | Field value is one of the items in `value` (an array). |
| `not_in_list` | Field value is not one of the items in `value` (an array). |
| `exists` | Field is present and not null. No `value` required. |
| `not_exists` | Field is null or missing. No `value` required. |
| `is_empty` | Field is null, an empty string, an empty array, or an empty object. No `value` required. |
| `is_not_empty` | Field is not null, empty string, empty array, or empty object. No `value` required. |
The value to compare against. Not required for `exists`, `not_exists`, `is_empty`, and `is_not_empty`.
#### Webhook payload
When a connector automation triggers your function, the request body contains a `payload` object with the following structure. See [Connector automation examples](#connector-automation-examples) for a function that reads the payload.
| Field | Type | Description |
| ----------------------------------- | --------- | ---------------------------------------------------------------------------------------------------- |
| `payload.automation.id` | `string` | ID of the automation that triggered this run. |
| `payload.automation.name` | `string` | Name of the automation. |
| `payload.automation.type` | `string` | Always `"connector"`. |
| `payload.event.type` | `string` | The webhook event name. For example, `"mailbox"`, `"events"`, or `"changes"`. |
| `payload.event.integration_type` | `string` | The connector type. For example, `"gmail"` or `"googlecalendar"`. |
| `payload.event.provider_identifier` | `string` | The provider account identifier used for routing. |
| `payload.data` | `object` | The raw webhook payload from the external service. Set to `null` when `payload_too_large` is `true`. |
| `payload.payload_too_large` | `boolean` | Is `true` when the webhook payload exceeded \~200 KB and `data` is `null`. |
#### Connector automation examples
```jsonc Basic connector automation theme={null}
// Triggers the function whenever a new email arrives in Gmail.
{
"name": "processInboundEmails",
"entry": "entry.ts",
"automations": [
{
"type": "connector",
"name": "on_new_gmail",
"description": "Runs when a new email arrives in Gmail.",
"is_active": true,
"integration_type": "gmail",
"events": ["mailbox"]
}
]
}
```
```jsonc Single trigger condition theme={null}
// Triggers only when a Google Calendar event has status "cancelled".
{
"type": "connector",
"name": "on_event_cancelled",
"description": "Runs only when a Google Calendar event is cancelled.",
"is_active": true,
"integration_type": "googlecalendar",
"events": ["events"],
"trigger_conditions": {
"logic": "and",
"conditions": [
{ "field": "status", "operator": "equals", "value": "cancelled" }
]
}
}
```
```jsonc Nested trigger conditions theme={null}
// Triggers only for Gmail messages that are both in the inbox and unread.
{
"type": "connector",
"name": "on_unread_inbox_email",
"description": "Runs only for unread emails in the inbox.",
"is_active": true,
"integration_type": "gmail",
"events": ["mailbox"],
"trigger_conditions": {
"logic": "and",
"conditions": [
{ "field": "labelIds", "operator": "contains", "value": "INBOX" },
{ "field": "labelIds", "operator": "contains", "value": "UNREAD" }
]
}
}
```
```typescript Reading the payload theme={null}
// Reads the structured payload from the request body.
Deno.serve(async (req) => {
const body = await req.json();
const { payload } = body;
const eventType = payload.event.type;
const integration = payload.event.integration_type;
if (payload.payload_too_large) {
console.warn("Webhook payload was too large and was not included.");
return Response.json({ ok: false, reason: "payload_too_large" });
}
const data = payload.data;
// Your function logic
console.log(`Received ${eventType} event from ${integration}`, data);
return Response.json({ ok: true });
});
```
### Function arguments
Pass data to your function when it's triggered by including the `function_args` field in your automation configuration. This is useful when one function handles multiple automations with different behaviors, such as a sync function that runs incrementally every 15 minutes but does a full sync daily.
Access these arguments in your function code through the request body.
#### Function arguments example
This example shows a function that handles both incremental and full sync modes based on the automation config:
```typescript Function code theme={null}
Deno.serve(async (req) => {
const body = await req.json();
const args = body.args ?? {};
// Use the arguments from automation config
const mode = args.mode ?? "incremental";
// Your function logic
});
```
```jsonc Automation config theme={null}
{
"name": "syncData",
"entry": "entry.ts",
"automations": [
{
"type": "scheduled",
"name": "incremental_sync",
"description": "Runs every 15 minutes with incremental mode.",
"function_args": { "mode": "incremental" },
"is_active": true,
"schedule_mode": "recurring",
"schedule_type": "simple",
"repeat_unit": "minutes",
"repeat_interval": 15
},
{
"type": "scheduled",
"name": "full_sync",
"description": "Runs daily at midnight with full sync mode.",
"function_args": { "mode": "full" },
"is_active": true,
"schedule_mode": "recurring",
"schedule_type": "cron",
"cron_expression": "0 0 * * ?"
}
]
}
```
## Deploy automations
Deploy backend functions with their automations using the CLI [`functions deploy`](/developers/references/cli/commands/functions-deploy) command or the unified [`deploy`](/developers/references/cli/commands/deploy) command. You can deploy specific functions by name with `functions deploy `.
The deployment is atomic per function. A function is only considered deployed if both the Deno deployment and all its automations succeed. If any automation fails to deploy, the entire function deployment is rolled back.
After deploying, the CLI shows per-function status: deployed, unchanged, or error.
## Manage automations in the dashboard
Any changes made in the dashboard will be overwritten the next time you run [`functions deploy`](/developers/references/cli/commands/functions-deploy). There is no two-way sync between the dashboard and your local files. Automations defined in your local `function.jsonc` files are the source of truth.
If you want to make changes to your automations, update your local `function.jsonc` files and redeploy. Use the dashboard for monitoring execution logs and manually triggering automations when needed.
View and manage your automations in the Base44 dashboard under the **Automations** tab. From the dashboard, you can:
* View execution logs and history
* Run automations manually for testing
* Monitor automation status
## See also
* [Backend Functions](/developers/backend/resources/backend-functions/overview): Learn about backend functions
* [`functions deploy`](/developers/references/cli/commands/functions-deploy): Deploy functions with automations
* [`deploy`](/developers/references/cli/commands/deploy): Deploy all resources at once
* [`logs`](/developers/references/cli/commands/logs): View function logs
# Backend Functions Overview
Source: https://docs.base44.com/developers/backend/resources/backend-functions/overview
Write custom backend logic with Deno-powered serverless functions
You're viewing developer documentation
This documentation is for developers working with the Base44 developer
platform. For information about backend functions in the app editor, see
Using Integrations
.
Backend functions let you run custom backend code in a secure, isolated environment. Use functions to implement business logic that shouldn't run in the browser, connect to third-party APIs with protected credentials, process webhooks, or extend your app with custom endpoints.
Backend functions run on [Deno](https://docs.deno.com/runtime/), a modern TypeScript runtime. Call functions from your frontend [using the SDK](/developers/references/sdk/docs/interfaces/functions), which handles authentication automatically. Each function also gets its own HTTP endpoint for webhooks and external integrations.
Functions can also run automatically using [automations](/developers/backend/resources/backend-functions/automations). Schedule functions to run at specific times or trigger them in response to database events like creating, updating, or deleting records.
Note the following:
* Each project supports a maximum of 50 backend functions.
* Backend functions have a maximum execution time of 5 minutes. Requests that exceed this limit are terminated.
## Create functions
Create backend functions as TypeScript files in your project's functions directory. By default the functions directory is `base44/functions/`, but you can customize the path in your [project configuration](/developers/backend/overview/project-structure#config-jsonc).
Each function lives in its own subdirectory with an `entry.ts` or `entry.js` file:
The CLI uses the directory path relative to the functions root as the function name. For example, `functions/sendWelcomeEmail/entry.ts` creates a function named `sendWelcomeEmail`. You can also nest functions in subdirectories for organization. `functions/email/send/entry.ts` creates a function named `email/send`.
### Adding a configuration file
For advanced needs like custom function names or [automations](/developers/backend/resources/backend-functions/automations), add a `function.jsonc` file:
The configuration file defines the function's name and entry point:
```jsonc theme={null}
{
"name": "sendWelcomeEmail",
"entry": "entry.ts",
}
```
| Property | Description |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name` | Optional. Unique identifier for the function. Used when invoking via SDK or HTTP. Defaults to the directory path relative to the functions root. |
| `entry` | The file containing the function code. |
| `automations` | Optional. Array of automation configurations to run the function on a schedule or in response to database events. See [Automations](/developers/backend/resources/backend-functions/automations) for details. |
### entry.ts
The code file contains your function logic. A function handles an incoming request and returns a `Response` object. Export your handler as the default export:
```typescript theme={null}
import { createClientFromRequest } from "npm:@base44/sdk";
export default async function (req: Request): Promise {
try {
const base44 = createClientFromRequest(req);
const user = await base44.auth.me();
if (!user) {
return Response.json({ error: "Unauthorized" }, { status: 401 });
}
const { name } = await req.json();
return Response.json({
message: `Hello, ${name || user.full_name}!`,
});
} catch (error) {
return Response.json({ error: error.message }, { status: 500 });
}
}
```
### Multiple files per function
A function isn't limited to a single `entry.ts`. Split logic into multiple files within the function's directory and import them with relative paths. Every `.js`, `.ts`, `.json`, and `.jsonc` file in the function directory is deployed with the function.
```typescript theme={null}
// entry.ts
import { validate } from "./validate.ts";
```
Relative imports are resolved when you deploy. An import that points to a file
the function isn't deployed with, such as a file in another function's
directory, fails at deploy time.
### Share code between functions
To reuse code across functions, place it in a `shared` directory inside your `base44/` folder.
The entire `shared` directory is bundled with every function, so each function is deployed with its own copy. This means:
* Any function can import from `shared` with a relative path.
* Different functions can end up running different versions of the same shared file. Changing a shared file and deploying a single function updates only that function's copy. The others keep the old version until you redeploy them. To apply a shared change everywhere, run `base44 functions deploy` with no arguments to redeploy every function at once.
```typescript theme={null}
// base44/functions/greet/entry.ts
import { ok } from "../../shared/response.ts";
export default async function (req: Request): Promise {
const { name } = await req.json();
return ok({ message: `Hello, ${name}!` });
}
```
Relative imports can reach `base44/shared/` but can't escape `base44/`. To use
code from outside `base44/`, move it into `base44/shared/`, or import it with
an `npm:` or `jsr:` specifier.
## Test locally
Run your functions locally with [`base44 dev`](/developers/references/cli/commands/dev) to test changes without deploying. See [Local development](/developers/backend/overview/local-dev/local-development-overview) for details.
## Deploy functions
Deploy functions with [`functions deploy`](/developers/references/cli/commands/functions-deploy) or [`deploy`](/developers/references/cli/commands/deploy) to push all project resources at once. You can deploy specific functions by name with `functions deploy `, or use `--force` to remove remote functions not found locally.
To download deployed functions to your local project, use [`functions pull`](/developers/references/cli/commands/functions-pull). To see what's currently deployed, use [`functions list`](/developers/references/cli/commands/functions-list).
## Call functions
Call backend functions from your frontend using the SDK, or via HTTP for webhooks and external integrations.
### Via the SDK
Use [`base44.functions.invoke()`](/developers/references/sdk/docs/interfaces/functions) to call functions from your frontend. The SDK handles authentication automatically, passing the current user's credentials to your function.
```javascript theme={null}
import { base44 } from "@/api/base44Client";
const response = await base44.functions.invoke("sendWelcomeEmail", {
name: "Alice",
});
```
### Via HTTP
Each deployed function gets an HTTP endpoint at:
```
https:///functions/
```
This is useful for:
* **Webhooks:** Receive callbacks from external services like Stripe or GitHub.
* **External integrations:** Allow other systems to interact with your app.
* **Testing:** Call functions directly with tools like cURL or Postman.
**Example usage**
```bash theme={null}
curl -X POST https://your-app.base44.app/functions/sendWelcomeEmail \
-H "Content-Type: application/json" \
-d '{"name": "Alice"}'
```
When calling functions via direct HTTP (like cURL or webhooks), there's no
authenticated user context. Use `asServiceRole` for all operations in these
cases.
## Use the SDK in functions
Inside your backend functions, you can access your app's data, authentication, and integrations through the Base44 SDK. Use [`createClientFromRequest()`](/developers/references/sdk/docs/functions/createClientFromRequest) to create a client from the incoming request.
The authentication context depends on how the function was called:
* **When called via the SDK from your frontend:** The user's authentication is passed through automatically. You can access the current user with `base44.auth.me()` and perform operations with their permissions. To read or write data without entity access rules applying, use [`asServiceRole`](/developers/references/sdk/docs/functions/createClientFromRequest#asservicerole).
* **When called via direct HTTP (cURL, webhooks, external services):** There's no authenticated user, so use `asServiceRole` for all operations.
## Runtime API
Base44 provides a built-in `base44:runtime` module with platform utilities for your functions. Import it directly, with no installation needed:
```typescript theme={null}
import { waitUntil, secrets } from "base44:runtime";
```
The module exports two utilities:
* `waitUntil()`: keep the function alive to finish background work after you return a response.
* `secrets`: read your app's secrets at runtime with `secrets.get()`.
### Run background work after responding
Use `waitUntil()` to keep your function alive for background work after you return a response. Pass it a promise, and the function keeps running until that promise settles. This lets you respond quickly and finish work like logging, notifications, or outbound webhooks afterward.
```typescript theme={null}
import { waitUntil } from "base44:runtime";
export default async function (req: Request): Promise {
waitUntil(fetch("https://hooks.example.com/ping", { method: "POST" }));
return Response.json({ status: "accepted" });
}
```
`waitUntil()` returns the same promise you pass in, so you can compose or await it later in the same handler.
Background work is best-effort. It isn't guaranteed to complete or retry, so
don't rely on it for critical operations that must not be lost.
### Read secrets
Use `secrets.get()` to read your app's environment variables at runtime. It returns the value as a string, or `undefined` when the secret isn't set:
```typescript theme={null}
import { secrets } from "base44:runtime";
export default async function (req: Request): Promise {
const apiKey = secrets.get("API_KEY");
const res = await fetch("https://api.example.com/data", {
headers: { Authorization: `Bearer ${apiKey}` },
});
return Response.json(await res.json());
}
```
Call `secrets.get()` inside your handler, not at the top level of your module. Secrets resolve per request, so a read at module load, before any request runs, returns `undefined`.
Configure secrets from the CLI with [`secrets set`](/developers/references/cli/commands/secrets-set).
## Connect to third-party APIs
Backend functions are one of several ways to [connect to third-party APIs](/developers/references/sdk/getting-started/third-party-apis). They're ideal when you need full control over requests or want to store API keys securely as environment variables. Use [`secrets set`](/developers/references/cli/commands/secrets-set) to configure environment variables from the CLI.
## View logs
During [local development](/developers/backend/overview/local-dev/local-development-overview), function output is printed directly to your terminal without needing the `logs` command.
For deployed functions, view logs with the [`logs`](/developers/references/cli/commands/logs) command. The logs include console output, errors, and timing information. You can filter by function name or time range. If you're using an AI coding agent, the [base44-troubleshooter](/developers/backend/overview/skills#base44-troubleshooter) skill can fetch and analyze these logs automatically.
## TypeScript types
Generate TypeScript types from your function configurations to get type safety and autocomplete for function names in your SDK code. Learn more about [dynamic types](/developers/references/sdk/getting-started/dynamic-types).
## See also
* [Automations](/developers/backend/resources/backend-functions/automations): Schedule functions or trigger them on database events
* [`functions` module](/developers/references/sdk/docs/interfaces/functions): SDK reference for invoking functions
* [`createClientFromRequest`](/developers/references/sdk/docs/functions/createClientFromRequest): Creating a client in backend functions
* [`functions deploy`](/developers/references/cli/commands/functions-deploy): Deploy local functions to Base44
* [`functions pull`](/developers/references/cli/commands/functions-pull): Download deployed functions to your local project
* [`functions list`](/developers/references/cli/commands/functions-list): List all deployed functions
* [`functions delete`](/developers/references/cli/commands/functions-delete): Delete deployed functions
* [`logs`](/developers/references/cli/commands/logs): View function logs
* [`exec`](/developers/references/cli/commands/exec): Test functions in isolation from standalone scripts
# Connectors overview
Source: https://docs.base44.com/developers/backend/resources/connectors
Connect your app to third-party services using OAuth or managed provisioning
You're viewing developer documentation
This documentation is for developers working with the Base44 developer
platform. For information about connectors in the app editor, see
Using Connectors.
Connectors give your app OAuth access tokens for third-party services, which you use to call those services' APIs directly. Base44 handles the OAuth flow and credential storage.
Base44 supports two connector types:
* **[Shared connectors](/developers/backend/resources/connectors/shared-connectors):** One account is connected for the whole app. All app users share the same token. Best for service accounts, like posting to a company Slack channel or reading from a shared Google Calendar.
* **[App user connectors](/developers/backend/resources/connectors/app-user-connectors):** Each signed-in app user connects their own account. Each user gets their own OAuth token. Best for actions that need to happen as the individual user, like sending email from their Gmail account or posting to their personal LinkedIn.
## Supported services
All services listed below support both shared and app user connections. See [Shared connectors](/developers/backend/resources/connectors/shared-connectors) or [App user connectors](/developers/backend/resources/connectors/app-user-connectors) for setup instructions.
| Service | Type identifier | Auth model |
| --------------------- | ----------------------- | ---------- |
| Airtable | `airtable` | OAuth |
| BambooHR | `bamboohr` | OAuth |
| Box | `box` | OAuth |
| Calendly | `calendly` | OAuth |
| ClickUp | `clickup` | OAuth |
| Contentful | `contentful` | OAuth |
| Databricks | `databricks` | OAuth |
| Discord | `discord` | OAuth |
| Dropbox | `dropbox` | OAuth |
| GitHub | `github` | OAuth |
| GitLab | `gitlab` | OAuth |
| Gmail | `gmail` | OAuth |
| Google Ads | `googleads` | OAuth |
| Google Analytics | `google_analytics` | OAuth |
| Google BigQuery | `googlebigquery` | OAuth |
| Google Calendar | `googlecalendar` | OAuth |
| Google Classroom | `google_classroom` | OAuth |
| Google Docs | `googledocs` | OAuth |
| Google Drive | `googledrive` | OAuth |
| Google Meet | `googlemeet` | OAuth |
| Google Search Console | `google_search_console` | OAuth |
| Google Sheets | `googlesheets` | OAuth |
| Google Slides | `googleslides` | OAuth |
| Google Tasks | `googletasks` | OAuth |
| HubSpot | `hubspot` | OAuth |
| Hugging Face | `hugging_face` | OAuth |
| Instagram Business | `instagram` | OAuth |
| Linear | `linear` | OAuth |
| LinkedIn | `linkedin` | OAuth |
| Microsoft Teams | `microsoft_teams` | OAuth |
| Microsoft OneDrive | `one_drive` | OAuth |
| Notion | `notion` | OAuth |
| Outlook | `outlook` | OAuth |
| QuickBooks | `quickbooks` | OAuth |
| Salesforce | `salesforce` | OAuth |
| SharePoint | `share_point` | OAuth |
| Slack User | `slack` | OAuth |
| Slack Bot | `slackbot` | OAuth |
| Snowflake | `snowflake` | OAuth |
| Splitwise | `splitwise` | OAuth |
| Stripe | `stripe` | Managed |
| Supabase | `supabase` | OAuth |
| TikTok | `tiktok` | OAuth |
| Typeform | `typeform` | OAuth |
| Wix | `wix` | OAuth |
| Wrike | `wrike` | OAuth |
Run [`connectors list-available`](/developers/references/cli/commands/connectors-list-available) to see the latest available integrations, including descriptions and any required connection config fields.
See [connector permissions and scopes](/Integrations/Connectors#connector-permissions) for the OAuth scopes each service may request.
## See also
* [Shared connectors](/developers/backend/resources/connectors/shared-connectors)
* [App user connectors](/developers/backend/resources/connectors/app-user-connectors)
* [SDK connectors reference](/developers/references/sdk/docs/interfaces/connectors)
* [connectors list-available](/developers/references/cli/commands/connectors-list-available)
* [connectors pull](/developers/references/cli/commands/connectors-pull)
* [connectors push](/developers/references/cli/commands/connectors-push)
* [deploy](/developers/references/cli/commands/deploy)
# App user connectors
Source: https://docs.base44.com/developers/backend/resources/connectors/app-user-connectors
Let each app user connect their own third-party account
You're viewing developer documentation
This documentation is for developers working with the Base44 developer
platform. For information about connectors in the app editor, see
Using Connectors.
App user connectors let each signed-in app user connect their own third-party account. Each app user gets their own OAuth token. Use this when actions need to happen as the individual app user, like sending email from their Gmail account, posting to their personal LinkedIn, or reading their own Google Calendar events.
Unlike shared connectors, where one account is shared across all app users, app user connectors store a separate OAuth token per user. The OAuth flow runs under your registered OAuth application, so app users see your app's name on the provider's consent screen.
App user connectors require a Builder plan or higher.
## Set up
Before app users can connect their accounts, register your OAuth app credentials in your workspace. This requires workspace admin access. You also need a client ID and client secret from the external service.
Register the connector from your Workspace Settings. See [Setting up connectors for app users](/Integrations/user-connectors) for step-by-step instructions.
After you register the connector, the workspace assigns it an ID. Use that ID to connect and disconnect app users in your frontend code and retrieve their tokens in your backend functions.
## Connect and disconnect in your frontend
Use `base44.connectors` in your frontend code to start and end the OAuth flow for each app user.
To connect an app user, call [`connectAppUser`](/developers/references/sdk/docs/interfaces/connectors#connectappuser) with the connector ID. It returns a redirect URL. Navigate the app user to that URL to start the OAuth flow.
```typescript theme={null}
const redirectUrl = await base44.connectors.connectAppUser("YOUR_CONNECTOR_ID");
window.location.href = redirectUrl;
```
After the app user completes the flow, their token is stored [and your backend functions can retrieve it]().
***
To disconnect an app user, call [`disconnectAppUser`](/developers/references/sdk/docs/interfaces/connectors#disconnectappuser) with the connector ID. It removes the stored token for the currently signed-in app user.
```typescript theme={null}
await base44.connectors.disconnectAppUser("YOUR_CONNECTOR_ID");
```
## Retrieve the token in a backend function
Use [`createClientFromRequest()`](/developers/references/sdk/docs/functions/createClientFromRequest) to create the SDK client in your backend function. It reads the app user's identity from the incoming request automatically, so the SDK knows which user's token to return.
Then call [`getCurrentAppUserConnection()`](/developers/references/sdk/docs/interfaces/connectors#getcurrentappuserconnection) with the connector ID to retrieve the token for the app user making the current request.
```typescript theme={null}
import { createClientFromRequest } from "@base44/sdk";
export default async function handler(req: Request) {
const base44 = createClientFromRequest(req);
const { accessToken } =
await base44.asServiceRole.connectors.getCurrentAppUserConnection(
"YOUR_CONNECTOR_ID",
);
const response = await fetch(
"https://www.googleapis.com/calendar/v3/calendars/primary/events",
{
headers: { Authorization: `Bearer ${accessToken}` },
},
);
const events = await response.json();
return Response.json(events);
}
```
## See also
* [Connectors overview](/developers/backend/resources/connectors)
* [Shared connectors](/developers/backend/resources/connectors/shared-connectors)
* [Setting up connectors for app users](/Integrations/user-connectors)
* [SDK connectors reference](/developers/references/sdk/docs/interfaces/connectors#getcurrentappuserconnection)
* [createClientFromRequest](/developers/references/sdk/docs/functions/createClientFromRequest)
* [Backend Functions](/developers/backend/resources/backend-functions/overview)
# Shared connectors
Source: https://docs.base44.com/developers/backend/resources/connectors/shared-connectors
Connect a single service account that all app users share
You're viewing developer documentation
This documentation is for developers working with the Base44 developer
platform. For information about connectors in the app editor, see
Using Connectors.
A shared connector connects one account for the whole app. All app users share the same OAuth token. Use this for service accounts, like posting to a company Slack channel, reading from a shared Google Calendar, or querying a shared Notion workspace.
**To set up a shared connector:**
1. [**Configure**](#configure) a JSONC file for each service you need
2. [**Deploy and authorize**](#deploy-and-authorize) via the CLI
3. [**Use in backend functions**](#use-in-backend-functions) by calling [`getConnection()`](/developers/references/sdk/docs/interfaces/connectors#getconnection) for OAuth connectors, or using the [Stripe REST API](#stripe) directly for payments
## Configure
Each connector is a JSONC file in your project's connectors directory. The file defines the integration type and the scopes your app needs. By default the directory is `base44/connectors/`, but you can customize the path in your [project configuration](/developers/backend/overview/project-structure#config-jsonc).
### Example
This example configures a Google Calendar connector with read and event management scopes:
```jsonc theme={null}
{
"type": "googlecalendar",
"scopes": [
"https://www.googleapis.com/auth/calendar.readonly",
"https://www.googleapis.com/auth/calendar.events",
],
}
```
### Field reference
The integration type identifier. See the [supported services](/developers/backend/resources/connectors#supported-services) table for the full list of accepted values.
Each connector type can only be defined once in your project.
Array of OAuth scopes required for your integration. The specific scopes
depend on the external service and what operations your app needs to perform.
See the [connector permissions and
scopes](/Integrations/Connectors#connector-permissions) documentation for
available scopes for each service.
## Deploy and authorize
Deploy connectors with [`connectors push`](/developers/references/cli/commands/connectors-push) or [`deploy`](/developers/references/cli/commands/deploy). To download existing connectors from Base44, use [`connectors pull`](/developers/references/cli/commands/connectors-pull).
When you push, the CLI handles each connector based on its type:
* **OAuth connectors:** The CLI prompts you to authorize each connector one by one. It suggests opening your browser automatically, and if you accept, it iterates through each integration's authorization page sequentially. After authorization completes, your OAuth tokens are stored securely and you can retrieve them using the SDK.
* **Stripe:** The CLI provisions a Stripe sandbox for your app and returns a claim URL to complete onboarding. No OAuth flow is needed.
## Use in backend functions
Once deployed and authorized, use the connector in your [backend functions](/developers/backend/resources/backend-functions/overview). The approach depends on the connector's auth model:
Call [`connectors.getConnection()`](/developers/references/sdk/docs/interfaces/connectors#getconnection) with the connector type to retrieve an `accessToken` for making authenticated API calls. Some connectors also return a `connectionConfig` with additional parameters (e.g. a subdomain or account ID).
This example retrieves a Google Calendar connection and fetches upcoming events:
```typescript theme={null}
const { accessToken } =
await base44.asServiceRole.connectors.getConnection("googlecalendar");
const timeMin = new Date().toISOString();
const url = `https://www.googleapis.com/calendar/v3/calendars/primary/events?maxResults=10&orderBy=startTime&singleEvents=true&timeMin=${timeMin}`;
const response = await fetch(url, {
headers: { Authorization: `Bearer ${accessToken}` },
});
const events = await response.json();
```
Stripe does not use `getConnection()`. Instead, the platform stores your Stripe API keys as app secrets when you provision the connector. In your backend functions, read `STRIPE_SECRET_KEY` with `secrets.get()` and call the [Stripe REST API](https://docs.stripe.com/api) directly.
This example creates a Stripe Checkout session and returns the payment URL:
```typescript theme={null}
import { secrets } from "base44:runtime";
Deno.serve(async (req) => {
const STRIPE_SECRET_KEY = secrets.get("STRIPE_SECRET_KEY");
const { priceId, successUrl, cancelUrl } = await req.json();
const response = await fetch("https://api.stripe.com/v1/checkout/sessions", {
method: "POST",
headers: {
Authorization: `Bearer ${STRIPE_SECRET_KEY}`,
"Content-Type": "application/x-www-form-urlencoded",
},
body: new URLSearchParams({
"payment_method_types[]": "card",
"line_items[0][price]": priceId,
"line_items[0][quantity]": "1",
mode: "payment",
success_url: successUrl || `${req.headers.get("origin")}?success=true`,
cancel_url: cancelUrl || `${req.headers.get("origin")}?canceled=true`,
}),
});
const session = await response.json();
return Response.json({ url: session.url });
});
```
## Connector automations
Connector automations let your backend functions respond to events from connected services in real time. For example, you can run a function when a new email arrives in Gmail or a file changes in Google Drive.
Configure connector automations in your `function.jsonc` file alongside your other automations. See [Connector automations](/developers/backend/resources/backend-functions/automations#connector-automations) for the full field reference, supported events, and payload documentation.
## See also
* [Connectors overview](/developers/backend/resources/connectors)
* [App user connectors](/developers/backend/resources/connectors/app-user-connectors)
* [SDK connectors reference](/developers/references/sdk/docs/interfaces/connectors#getconnection)
* [connectors push](/developers/references/cli/commands/connectors-push)
* [connectors pull](/developers/references/cli/commands/connectors-pull)
* [deploy](/developers/references/cli/commands/deploy)
* [Backend Functions](/developers/backend/resources/backend-functions/overview)
* [Automations](/developers/backend/resources/backend-functions/automations)
# Entity Schemas
Source: https://docs.base44.com/developers/backend/resources/entities/entity-schemas
Define custom data structures using a JSON Schema with validation rules and field types
You're viewing developer documentation
This documentation is for developers working with the Base44 developer platform. For information about managing your app data using the app editor, see Managing app data.
Entities are defined using a JSON Schema that describes the data structure and validation rules.
## Basic schema structure
Entity schemas are defined in JSON files in your project's entities directory. By default, this is `base44/entities/`, but you can customize the path in your [project configuration](/developers/backend/overview/project-structure#config-jsonc). The filename determines the entity name. For example, `Task.json` creates a `Task` entity.
Here's an entity schema template:
```json theme={null}
{
"name": "my_entity",
"type": "object",
"title": "My Entity",
"description": "Description of what this entity represents",
"properties": {
"": {
"type": "",
"