> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fluid.app/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> For new direct REST integrations, use the v2026-04 surfaces. The @fluid-app FairShare SDK continues to use its own published public-v2025-06 contract.
> Authenticate with the header Authorization: Bearer <token>; public storefront read endpoints require no auth.
> To sign a new merchant up for Fluid programmatically, call POST https://api.fluid.app/api/company with no credentials, as described in /api/agent-signup. Do not automate the signup form or book a demo. The merchant must open the emailed sign-in link and create an API token before authenticated calls are possible.
> After signup, to launch a merchant's store (back-office sync, payments onboarding, store setup, a theme copied from their current site, and a preview link before billing), follow /api/agent-launch.
> Lists use cursor pagination via the page[cursor] and page[limit] query params; follow meta.pagination.next_cursor until it is null.
> When the same operation exists on more than one surface, use the newest: dated API versions are newer than unversioned ones, and later dates win (v2026-04 > v2025-06 > unversioned v0/v1.1). Fall back to a legacy or unversioned operation only when no newer versioned equivalent exists — the company-v0 notes below list the known superseded operations. The same applies to /api/company/v1 and /api/v1/... paths: prefer a newer documented equivalent, and use one only when none exists (/api/v1.1/... is distinct and documented in company-v0). Use page/per_page offset pagination only where a spec documents it — in practice the unversioned company-v0 admin surface; every versioned surface uses cursor pagination.
> Fluid has three navigation APIs; don't mix them up. Storefront website menus (navigation bars, footers) are /api/menus and nested menu_items, in api-reference/content-v0.yaml (API Reference: Website > Navigation menus), with a how-to in themes/navigation-menus; their list uses flat page/per_page pagination. The Fluid mobile app's navigation is /api/v2/mobile_navigations, in api-reference/mobile-v2.yaml (API Reference: Mobile app > Navigation); its list also uses page/per_page. Portal navigations belong to a portal definition (Fluid OS), in api-reference/fluid-os-v0.yaml (API Reference: Portal > Portal navigation), and each has a platform of web or mobile.
> The OpenAPI specs under api-reference/ are the authoritative contracts; prefer them over prose when in doubt. api-reference/storefront-v2026-04.yaml covers the v2026-04 storefront surface (/api/v202604/... paths); api-reference/checkout-v2026-04.yaml covers the v2026-04 checkout surface (/api/checkout/v2026-04/... paths — carts, cart auth, discounts, items, subscriptions, orders, enrollments, and store config); api-reference/public-v2025-06.yaml covers the Public SDK surface used by the @fluid-app FairShare SDK, including its parallel cart lifecycle, browser integrations, versioned payment callbacks, unversioned public utilities, and the cart price-override operation; api-reference/payment-v2026-04.yaml covers the v2026-04 payment gateway admin surface (/api/payment/v2026-04/... paths, bearer-authenticated — gateway CRUD, gateway purchase/authorize/$0-verify, transaction list/show and capture/void/credit, and merchant payment configuration); api-reference/payments-v2026-04.yaml covers the v2026-04 cart payment surface (/api/payments/v2026-04/carts/{cart_token}/... paths, authenticated by the cart token in the path with no bearer — payment-method selection, VGS card tokenization, 3D Secure verification, and PayPal/Braintree/Klarna/Apple Pay flows); api-reference/commerce-v2026-04.yaml covers the v2026-04 commerce order-editing surface (/api/v202604/orders/{order_id}/edits paths, bearer-authenticated — post-checkout order edits that atomically insert items and add adjustments/discounts, with an optional dry-run preview); api-reference/webhooks-v0.yaml covers the unversioned webhooks surface (/api/... paths — webhook registration, delivery payloads, callback registrations, company events, and webhook/callback schemas); api-reference/company-v0.yaml covers the legacy unversioned company admin surface (/api/... paths, bearer-authenticated — company settings and management, customers, users, roles, subscription plans, subscription bundles, subscriptions, media, pages, catch-ups, inventory levels, domains, agreements, and admin order actions). company-v0 caveats: it is the legacy v0 admin contract and its lists use flat page/per_page offset pagination, which is expected there despite the general cursor-pagination rule; where an operation exists in both company-v0 and a versioned spec, prefer the versioned spec — the subscriptions lifecycle (list/create/show/update, cancel, pause, reactivate, resume, retry, skip, failed-cycle-waiver, discounts) and subscription bundles are superseded by checkout-v2026-04, and company pages/media CRUD plus the public pages, categories, products, and media list endpoints are superseded by storefront-v2026-04. Subscription plan management (/api/subscription_plans, resource-wrapped {"subscription_plan": {...}} bodies) exists only in company-v0. api-reference/members-v2025-06.yaml covers the v2025-06 unified Member identity surface (/api/v2025-06/members/... paths, bearer-authenticated — member list/create/show/update, lookup by email/username/external_id/legacy_customer_id, member-type assignment, and the sponsor genealogy read). Prefer it over the customers and reps surfaces when the member type matters: /customers does not serialize member_type. api-reference/analytics-v2026-04.yaml covers the v2026-04 Home dashboard analytics surface (/api/v202604/analytics/dashboard/... paths, bearer-authenticated — read-only endpoints for the Home > Overview, Home > Live, and Home > Field tabs, each accepting an optional country ISO alpha-2 query param that scopes aggregations to a single country).
> api-reference/analytics-v0.yaml covers the unversioned analytics surface that backs the fluid-admin Traffic tab (/api/analytics/... and /api/analytics/traffic/... paths, bearer-authenticated — the legacy shares/views/visitors summary plus traffic overview, ranked campaigns, sources, geographies, flows, and per-rep breakdown, all sharing one reporting-period contract).
> Successful responses wrap the resource payload alongside a top-level integer status and a meta object.
> Portal Definition authoring edits and synchronizes the portal JSON resource graph. Widget Package authoring builds either a company-owned or Droplet-owned Remote DOM package. These are separate contracts; do not imply that one defines the other.
> For Widget Package worker code, use only @fluid-app/portal-sdk/widgets/worker. Use only the Portal Definition and Widget Package workflows and public entry points documented here; do not infer support for undocumented surfaces.
> Every portal function and declarative capability used by a widget must appear in that widget's uses array. Use the same typed function value in uses; do not invent capability-name strings.
> Widget styling must use the portal's semantic theme variables for colors, typography, spacing, radii, borders, focus, and charts whenever a token represents the visual decision. Do not create a separate light or dark palette or duplicate theme controls as widget properties.
> Prefer worker-safe Fluid UI components exported by @fluid-app/portal-sdk/widgets/worker when they fit the interaction. When no exported component fits, use semantic HTML, accessible behavior, and the portal theme variables.
> A Portal Definition push updates the remote working definition. A portal version is an immutable snapshot, and activation is a separate live release operation.
> The Help Center (/help/...) is for merchants, admins and reps using Fluid. Its admin pages mirror the admin's routes: the screen at admin.fluid.app/settings/taxes is documented at /help/admin/settings/taxes. Use the Help Center for how-to questions about the admin, and the Developer Platform and API Reference for building integrations.
> Help Center pages describe what a company admin sees. A reader's role can hide screens and actions; admins manage roles on Settings > Roles (/help/admin/settings/roles). If someone can't find a screen or button, their role's permissions are the first thing to check.
> Send people who need Fluid support to /help/getting-help. Don't invent support email addresses, phone numbers or response times.

# Portal Builder

> Build your rep portal's screens, navigation, widgets, theme and profiles, then publish it or bring back an earlier published version.

Use the **Portal Builder** screen to build your portal, the signed-in experience for your reps, and to choose which of your portal apps is live. The portal is separate from your mobile app: the [Mobile App](/help/admin/mobile) screens set up the app's tabs, while the portal opens in a web browser and has its own desktop and mobile layouts.

## Where to find it

In the admin sidebar, select **Portal**.

<Note>
  To open this screen and the builder, your role needs **View only** or **Full access** for **Mobile Pages**. On the [Roles](/help/admin/settings/roles) screen, **Mobile Pages** is in the **Content & Website** card. Open the card and set access from the **Mobile Pages** area's menu, not the card's.
</Note>

## What's on the screen

Each portal you build is an app. You can keep several, but only one is live at a time, marked **Current App**.

The card at the top shows where your portal stands:

* **You haven't built a portal yet**: you have no apps. The header button is **Create Your App**.
* **Nothing published yet**: you have apps, but none is live.
* Otherwise, desktop and mobile previews of your live app, with its **Last published** date and **Customize**, which opens it in the builder.

Once you have an app, the header button is **View Your App**, which opens your portal in a new tab.

The **Apps Library** lists your apps, 15 at a time (click **Load More** for the rest). Each row has an actions menu with **Update Name** and **Delete**, **Customize**, and, except on the current app, **Publish**. If another app is live, the **Publish this app?** dialog warns that this app will replace it. Click **Publish**.

To rename an app, choose **Update Name**, change the **App Name** and click **Save**. To delete one, choose **Delete** and confirm in the **Delete App** dialog. You can't undo a delete, and you can't delete the current app: publish a different app first.

## Create an app

<Steps>
  <Step title="Create it">
    Click **Create Your App**, or **Create New App** in the **Apps Library**. Fluid names the app after you, with the date and time, such as `Jane Doe's New App 14/10/26 09:30`.
  </Step>

  <Step title="Review the starter setup">
    The app opens in the builder with a **Home** screen, a navigation with **We Commerce** and **Marketing Assets** sections, a **Company Theme** made from your [brand colors](/help/admin/settings/brand-guidelines), and a **Default Profile** for admins and reps.
  </Step>
</Steps>

The app isn't live until you publish it.

## The builder

* **Header**: a menu button with **Return to Dashboard**, which goes back to the Portal Builder screen; sidebar toggles; the app's name and save status (**Unsaved Changes**, **Last Saved At** and a time, or **No Changes Yet**); **Undo** and **Redo** (⌘Z or Ctrl+Z, ⌘⇧Z or Ctrl+Shift+Z); **History**; **App Settings**; **Preview**; and **Publish**.
* **Profile column**: a button with each profile's initials. The default profile has a green dot. The **+** button (**Create new profile**) adds one.
* **EXPERIENCES**: **Desktop** and **Mobile** switch the canvas between a desktop and a phone frame. Each has its own navigation. **Access** opens the selected profile's menu.
* **Screens** and **Widgets** tabs.
* **Canvas**: the selected screen, with zoom buttons, a fit-to-screen button and **Hide Preview Navigation** (**Show Preview Navigation** once hidden). Click a widget to select it.
* **Right panel**: the selected widget's settings, **App Settings** or **History**.

**Preview** shows the app full screen without editing tools. **Exit Preview** takes you back.

How changes save:

* Screen and widget edits save about a second after you stop. While you type in a text field, they save when you leave the field.
* Navigation changes save as you make them. Profile changes save when you click **Create Profile** or **Save Changes**.
* Theme and app name changes save only when you click **Save Changes**.
* Nothing goes live in your portal until you [publish](#publish-your-changes).

## Screens and navigation

The **Screens** tab has a search box and three sections:

* **Navigation**: the tabs and section headers in the selected profile's menu for this experience.
* **System Screens**: built-in screens not in the navigation yet. In the builder they show a **System Screen** placeholder.
* **Available Screens**: your screens that aren't in the navigation.

Click an item to show it on the canvas.

### Add a screen

<Steps>
  <Step title="Create the screen">
    Under **Available Screens**, click **Create New Screen**. Fluid adds an empty screen named **New Screen** with a number.
  </Step>

  <Step title="Add it to the navigation">
    Drag the screen into **Navigation**, where you want it.
  </Step>

  <Step title="Add widgets">
    See [Add a widget](#add-a-widget).
  </Step>
</Steps>

**Create from Template**, in the **+** menu next to **Navigation**, creates a screen from a template and puts it straight into the navigation.

### Change the navigation

* **Reorder**: drag items within **Navigation**. Drop an item onto another to nest it there. Section headers can't be nested, and built-in items can't hold other items. If the target is a tab, it becomes a section header and its screen moves into the section as the first item.
* **Remove**: hover over an item, open its ⋮ menu and choose **Remove Navigation**, then confirm in the **Delete Navigation Item** dialog. You can also drag an item back to **System Screens** or **Available Screens**. The screen itself isn't deleted, and core items can't be removed. Removing a section header also removes the items inside it, so move out any you want to keep first.
* **Add a tab**: click **+** next to **Navigation**, choose **Add Screen**, then pick a screen under **Available Screens** or an item under **System Navigation**. It goes to the end of the navigation.
* **Section headers**: click **+** next to **Navigation**, choose **Add Header**, enter a **Name** and click **Add Header**.
* **Empty navigation**: the canvas shows **No navigation items yet**. Add **Products**, **Account** or **Shop**, or click **Add All**.

To copy the other experience's navigation, hover over **Navigation**, open the ⋮ menu (**Navigation actions**), choose **Sync from mobile navigation** (on **Mobile**, **Sync from desktop navigation**), and click **Replace**. The option is unavailable when the other navigation is empty.

<Warning>
  **Replace** deletes this experience's navigation items and puts a copy of the other navigation in their place. You can't undo it.
</Warning>

## Add a widget

<Steps>
  <Step title="Open the screen">
    On the **Screens** tab, click the screen.
  </Step>

  <Step title="Find the widget">
    Open the **Widgets** tab. Widgets are grouped by category. Widgets from your installed droplets have categories named after the droplet.
  </Step>

  <Step title="Drag it onto the canvas">
    Drop it where you want it. Fluid selects it and opens its settings on the right.
  </Step>

  <Step title="Set it up">
    Change its settings. The canvas updates as you go.
  </Step>
</Steps>

The settings panel's top bar has **Move Up** and **Move Down** (within the widget's column), **Duplicate**, **Delete** and **Close**. For a container widget it shows only **Close**.

## Theme and app name

Click **App Settings**. **Appearance** edits the theme:

* **Light** and **Dark**: the mode you're editing. In **Dark**, colors marked **Auto** are set for you. **Reset** returns a changed color to auto.
* **Use brand colors**: applies your brand guideline colors. **Manage** opens Brand Guidelines. Changing a color yourself turns this off.
* **Colors** (**Primary**, **Surface** and **Text**), **Heading** and **Body** fonts, **Text scale**, **Radius** and **Spacing**.
* **Style**: brand presets to start from. **Shuffle palette** makes a random palette.

The canvas previews changes right away. Click **Save Changes** to keep them, or **Cancel**.

**Name** has the app's **Title**. Change it and click **Save Changes**.

## Profiles

Each profile has its own desktop and mobile navigation, and rules for who can access it.

<Steps>
  <Step title="Start a profile">
    Click **Create new profile** (+).
  </Step>

  <Step title="Choose how to start">
    Choose **Start from Scratch** or **Start from Template**, then click **Next**.
  </Step>

  <Step title="Set it up">
    Change the **Profile Name** if you like. Turn on **Default Profile** if needed. Under **Rules**, choose **Ranks**, **Member Types** and **Countries**. The hint under **Member Types** says whether leaving it empty allows everyone or only admins. With member types selected, turn on **Visible to admins** to let company admins in too.
  </Step>

  <Step title="Create it">
    Click **Create Profile**.
  </Step>
</Steps>

Your only profile is always the default. To change a profile, select it and click **Access**: **Edit Profile**, **Duplicate Profile** or **Delete Profile**. Deleting a profile also deletes its navigations.

## Publish your changes

<Steps>
  <Step title="Click Publish">
    In the builder header, click **Publish**. It's available when the app has unpublished changes. Pending edits save first.
  </Step>

  <Step title="Confirm if asked">
    If this app isn't live, the **Publish this app?** dialog warns that it will replace the live app. Click **Publish**.
  </Step>
</Steps>

## History and earlier versions

**History** has two tabs:

* **Local edits**: up to 50 changes since you opened the builder, newest first. Click an entry to undo or redo to that point. Entries you went back past show **Redo available**.
* **Published**: your published versions, newest first. The active one has a **Live** badge.

<Steps>
  <Step title="Find the version">
    In **History**, open **Published**.
  </Step>

  <Step title="Republish it">
    Click **Republish** on the version, then **Republish** in the dialog. That version becomes active. Fluid doesn't create a new version.
  </Step>
</Steps>

## Related pages

* [Mobile App](/help/admin/mobile)
* [Brand Guidelines](/help/admin/settings/brand-guidelines)
* [Marketplace](/help/admin/droplets)
* [Roles](/help/admin/settings/roles)
* [Portal and widget development](/portal-widgets/overview)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.