fn8a — Workflow Automation

fn8a lets you design, deploy, and run business process automations without writing infrastructure code. Connect steps on a visual canvas, assign tasks to people or teams, call external APIs, run scripts, and track every execution in real time.

Key Concepts

🆕 Workflow
A named sequence of steps that defines a business process. You design it in the Modeller and deploy it so it can be started.
▶ Instance
One running execution of a workflow. Each start creates a new instance with its own data (context) and progress.
📋 Task
A step that requires a human to fill in a form and click a button. Tasks appear in the My Tasks inbox until completed.
📄 Step
A single unit of work: a form, an API call, an email, a script, a delay, and more. Steps are connected by transitions.
🔄 Context
The data bag that carries information between steps. Each step can read from and write to the context using output mappings.
📅 Entity
A structured data record (like a customer or case) managed in your workspace and accessible from any workflow.

Getting Started

From your first login to your first deployed workflow in minutes.

Joining a Workspace

You can join fn8a in two ways:

  • Via invite link — Someone in your organization shares an invite link. Open it, set a password, and you're in.
  • Via email invite — You receive a personal email invitation. Follow the link to activate your account.

After logging in you land on the main dashboard. The left sidebar is your main navigation — everything is reachable from there.

Your First Workflow

  1. Click Modeller in the left sidebar to open the visual designer.
  2. Drag a Trigger step from the palette onto the canvas.
  3. Choose a trigger type (e.g. Startup Form) and configure it in the right panel.
  4. Drag more steps onto the canvas and connect them by drawing edges between nodes.
  5. Fill in the Workflow Name and Process Key in the right panel (with no node selected).
  6. Click Deploy — your workflow is now live and can be started from the Start Process page.
Tip
Save your work as a draft at any time using the Save Draft button. Drafts are stored locally in your browser and won't affect the deployed version.

The Canvas

The Modeller is a visual designer where you build workflows by placing and connecting step nodes.

Layout

  • Left palette — Three sections: Steps (all built-in step types), Integrations (pre-configured API call templates for common services), and My Presets (your saved step configurations). Drag any item onto the canvas to add it.
  • Canvas area — The main editing surface. Nodes represent steps; arrows represent transitions.
  • Right properties panel — Click any node to configure it here. When no node is selected, workflow-level settings are shown.

Navigating the Canvas

  • Zoom — Scroll the mouse wheel up/down to zoom in and out.
  • Pan — Click and drag an empty area to move around the canvas.
  • Select a node — Click any step to select it and open its settings in the right panel.
  • Move a node — Click and drag a step to reposition it.
  • Delete a node — Select it and press Delete or Backspace.

Workflow Properties (Right Panel, no node selected)

FieldDescription
Name requiredHuman-readable name shown in the process list and monitoring.
Process Key requiredA stable technical identifier (e.g. #customer-onboarding) used to start this workflow by name from other systems.
VersionRequired when the workflow has an HTTP Request trigger. Use semantic versioning (e.g. 1.0).
DescriptionOptional notes about what this workflow does.
Startable ByWorkspace groups that are allowed to start this process. Leave empty to allow everyone.

Adding Steps

Every step in a workflow has a type that defines what it does. Add steps by dragging them from the palette on the left.

How to Add a Step

  1. Find the step type you want in the left palette.
  2. Drag it onto the canvas and drop it where you want it.
  3. Click the new node to select it — its settings appear in the right panel.
  4. Fill in the Label (a name for this specific step) and the step's configuration fields.

Changing a Step's Type

After placing a step you can change its type without re-drawing connections. Select the node and use the Step Type dropdown in the properties panel. The node's connections are preserved.

Note
The Trigger step type cannot be changed from the step type dropdown — it is always the entry point of a workflow. To change trigger behaviour, configure it in its own settings panel.

Step Presets

Save any configured step as a named preset and drag it into future workflows — pre-filled and ready to go. Useful for integrations you reuse across many processes, such as an AML check, a KYC form, or a notification template.

Eligible Step Types

You can create presets for steps that have rich, reusable configurations:

  • API Call — Save a specific endpoint, method, headers, and body template (e.g. your AML integration).
  • User Form — Save a form with its full field layout (e.g. a standard KYC form).
  • AI Step — Save a provider, model, and prompt combination (e.g. a document classifier).
  • Email — Save a specific subject, body, and recipient pattern.
  • Script — Save a reusable Groovy script (e.g. a risk score calculation).
  • Entity — Save an entity operation pre-configured for a specific entity type.

Saving a Step as a Preset

  1. Place and configure a step on the canvas as usual.
  2. With the step selected, click Save as Preset in the properties panel (below the AI configuration button).
  3. Enter a Name for the preset (e.g. "AML Check") and an optional description.
  4. Click Save. The preset is stored in your workspace and available to all members.

Using a Preset

  1. Expand the My Presets section in the left palette.
  2. If you have many presets, use the search box to find the one you want.
  3. Drag the preset onto the canvas — a new step is created with all settings pre-filled.
  4. Adjust any instance-specific details (e.g. which context variable to use) in the properties panel.

Updating a Preset

If you dragged a preset onto the canvas and then changed its configuration, you can push those changes back to the saved preset without saving a new one:

  1. Make your changes in the properties panel.
  2. Click the sync icon (↻) button next to Save as Preset.
  3. The preset is updated. All future uses of this preset will get the new configuration.
Note
Updating a preset does not change steps already placed in other workflows — it only affects new drags from the palette going forward.

Managing Presets

Hover over a preset card in the palette and click the menu to:

  • Rename — Change the preset's name and description.
  • Delete — Permanently remove the preset from the workspace.

Configuring Transitions

Transitions connect steps and control which path the workflow takes after a step completes.

Drawing a Connection

  1. Hover over a step node until the edge handles (small dots) appear on its sides.
  2. Click and drag from a handle to the destination step.
  3. Release on the destination step to create a transition.

Transition Settings

Select a connection arrow to configure it in the properties panel. Each transition has:

FieldDescription
LabelFor User Form steps, this text becomes a button shown to the user. For other steps it is informational.
ConditionAn optional expression (e.g. context.score > 80). If the expression evaluates to true the workflow takes this path. Conditions are evaluated top-to-bottom; the first match wins.
DefaultMark one transition as "default" to catch all remaining cases when no other condition matches.

Expressions in Conditions

Condition expressions are written in Groovy and have access to the context map:

  • context.status == "approved" — equality check
  • context.score > 80 && context.verified — logical AND
  • context.status in ["PENDING", "REVIEW"] — list membership
  • context.items.size() > 0 — collection size

Boundary Events (Error Handling)

Some steps can have special boundary connections for handling timeouts and errors. These appear in the Transitions section of the properties panel:

  • Timeout — Route to a different step if the step takes longer than a specified duration.
  • Error — Route to an error-handling step if the step throws an exception.
  • HTTP Status (API Call only) — Route based on the HTTP response status code (e.g. 429 rate-limit, 503 unavailable).

Deploying a Workflow

Deploying makes your workflow available to run. Each deployment creates a new version.

Before You Deploy

  • Make sure your workflow has a Name and a Process Key set in the right panel (no node selected).
  • If the workflow has an HTTP Request trigger, a Version is also required.
  • All steps should be connected — disconnected steps will not be reachable.

Deploy Steps

  1. Click the Deploy button in the top toolbar of the Modeller.
  2. The system validates your workflow design and saves it as a new version.
  3. The workflow immediately appears in Start Process and is ready to run.

Drafts vs Deployed Versions

  • Draft — Saved in your browser. Editing a draft does not affect the deployed version. Use drafts to iterate without disrupting running instances.
  • Deployed — The version that can be started and will handle new instances. Previous versions are kept and viewable in Monitoring → Deployments.
Important
Re-deploying does not affect instances that are already running — they continue on the version they started with. Only new instances use the latest deployed version.

Trigger

Core Flow

Every workflow starts with a Trigger. It defines how and when the workflow begins. Each workflow has exactly one Trigger step.

Trigger Types

HTTP Request

The workflow starts when an external system sends an HTTP POST request to a generated URL. Use this for integrations with other applications or webhooks from third-party services.

  • A unique URL is generated after deployment (visible in the step panel).
  • The request body is mapped to context variables using Output Mapping.
  • A Version must be set in the workflow properties before deploying.

Timer (Cron)

The workflow starts at a scheduled time, defined by a cron expression. Fires once at the scheduled time.

  • Cron Expression — A Quartz-style cron string, e.g. 0 0 9 ? * MON (every Monday at 9 AM).

Cycle (Interval)

The workflow starts repeatedly on a regular interval. Use this for polling, periodic checks, or recurring batch jobs.

  • Interval — ISO-8601 duration, e.g. PT5M (every 5 minutes), PT1H (every hour).

Startup Form

A user fills in a form in the Start Process page to manually launch the workflow. Use this for processes that always need some initial data from a human.

  • Design the form fields using the Form Fields builder in the trigger settings.
  • Submitted field values are automatically available in context.
  • Turn on Embeddable on external sites to let this form be filled out from outside fn8a — see Embedding Forms.

Input Parameters

For any trigger type you can declare Input Parameters — named variables with types (text, number, boolean, etc.) that the trigger is expected to provide. These serve as documentation and are used by the Sub-Process step to map inputs when this workflow is called as a child.

Tip
Use Output Mapping on an HTTP trigger to extract values from the incoming request body using JSONPath expressions like $.customer.email.

User Form

📄 User Interaction

Pauses the workflow and presents a form to a human. The workflow resumes when the user fills in the form and clicks one of the outcome buttons.

Configuration Fields

FieldDescription
Form Fields requiredClick Design Form to open the form builder. Add fields of various types, set labels, mark required fields, and configure options for dropdowns.
ButtonsButtons are defined by adding transitions in the Transitions panel. Each transition's Label becomes a button shown to the user.
AssigneeThe specific user who should complete this task (e.g. john@company.com). Supports ${context.assignee} expressions to assign dynamically.
Candidate GroupA workspace group whose members can see and claim this task. Used for pool-style routing where any group member can pick it up.

Form Field Types

TypeDescription
TextSingle-line text input.
TextareaMulti-line text input.
NumberNumeric input.
EmailText input with email format validation.
BooleanCheckbox (true/false).
SelectDropdown for picking one option from a predefined list.
Multi-selectDropdown for picking multiple options.
DateDate picker.
Date & TimeDate and time picker.
FileFile upload field.
Title / SubtitleNon-interactive headings to visually organize the form.

How Buttons Work

Each transition out of a User Form step becomes a button. For example, if you add two transitions labelled Approve and Reject, the user will see two buttons. Clicking a button submits the form and takes the workflow down that transition's path.

Note
If neither Assignee nor Candidate Group is set, the task is visible to all workspace members — and, if the instance was started through an embedded form, it stays visible to that anonymous visitor too. Setting either one hands the task off to your team exclusively.

API Call

🔗 Integration

Makes an outbound HTTP request to any URL. Use it to call third-party APIs, internal services, or webhooks.

Configuration Fields

FieldDescription
URL requiredThe endpoint to call. Supports context expressions: https://api.example.com/users/${context.userId}.
Method requiredGET, POST, PUT, PATCH, or DELETE.
Request BodyJSON body to send with the request. Supports expressions: {"email": "${context.email}"}.
HeadersKey-value pairs for request headers. Use ${secret.NAME} expressions to reference workspace secrets (e.g. Authorization: Bearer ${secret.MY_TOKEN}).
Output MappingMap fields from the JSON response into context variables using JSONPath (e.g. $.data.idcustomerId).

Using Secrets in Headers

Never paste API keys directly into the headers field. Instead:

  1. Go to Secrets in the sidebar and create a secret with a name like STRIPE_API_KEY.
  2. Back in the API Call step, type the expression ${secret.STRIPE_API_KEY} as the header value.
  3. At runtime the engine resolves it to the encrypted value — the raw key never appears in the workflow definition.

Reading the Response

If the API returns JSON, use Output Mapping to pull values into context. The mapping uses JSONPath syntax:

  • $.id — top-level field
  • $.user.email — nested field
  • $.items[0].name — first array element

Script

💻 Execution

Runs a custom Groovy script. Use it for calculations, data transformations, string formatting, or any logic that doesn't fit a simpler step.

Configuration Fields

FieldDescription
LanguageCurrently only Groovy is supported.
Script requiredThe Groovy code to execute. The context map is available as a mutable variable.
Output MappingExtract specific values from the script's output into named context variables.

Writing Scripts

The script has access to a context map containing all current workflow variables. You can read from it, write to it, and return a value:

  • Read: context.firstName
  • Write: context.put("fullName", context.firstName + " " + context.lastName)
  • Return value: The return value of the script is stored as result and can be used in transition conditions as result == "high-value".
Tip
You can combine reads, writes, and a return value in one script. For example: compute a total, write it back to context, and return a category string that transitions use to branch.

AI Step

🤖 AI / ML

Calls an AI language model (LLM) and injects the response into the workflow context. Use it for summarization, classification, data extraction, sentiment analysis, or decision support.

Configuration Fields

FieldDescription
Provider requiredThe AI service to use: OpenAI, Anthropic, Azure OpenAI, or Ollama.
Model requiredThe model name, e.g. gpt-4o, claude-sonnet-4-6.
TemperatureControls randomness. 0.0 = deterministic, 2.0 = very creative. Default is 0.2 for consistent outputs.
System PromptInstructions for the model about its role and response format. Tip: ask it to always respond with JSON.
User Prompt requiredThe actual request. Supports context expressions: Analyse this text: ${context.customerMessage}.
Output MappingIf the model returns JSON, extract specific fields into context variables using JSONPath.

Getting Structured Outputs

To reliably extract AI results into context variables, instruct the model to return JSON in the system prompt, then use output mapping to pull fields out:

  1. System prompt: "Respond only with valid JSON in this format: {"sentiment": "positive|negative|neutral", "confidence": 0.0–1.0}"
  2. Output mapping: $.sentimentsentiment, $.confidenceconfidence
  3. Use context.sentiment in a downstream transition condition.

Email

Communication

Sends an email to one or more recipients. Supports dynamic addresses and content using context expressions.

Configuration Fields

FieldDescription
To requiredRecipient email address. Supports expressions: ${context.customerEmail}. Multiple addresses separated by commas.
CCOptional CC addresses.
BCCOptional BCC addresses.
Subject requiredEmail subject line. Supports expressions: Welcome ${context.firstName}!
Body ModeChoose between HTML Body (write the HTML yourself) or Template ID (use a pre-built email template).
HTML BodyRaw HTML content of the email. Supports expressions inside the markup.
Template IDThe name of an email template configured in your workspace. Used when body mode is Template ID.
Template VariablesKey-value pairs passed to the template for rendering dynamic content.
Tip
Use Template ID mode when your email team manages branded templates separately. Use HTML Body for quick, one-off emails built directly in the workflow.

Delay

Control Flow

Pauses the workflow for a specified amount of time, then continues automatically. The instance is suspended — no resources are consumed while waiting.

Configuration

FieldDescription
Duration requiredHow long to wait, in ISO-8601 duration format.

Duration Format (ISO-8601)

Durations are written as P[n]D T[n]H [n]M [n]S. Common examples:

ValueMeaning
PT30S30 seconds
PT5M5 minutes
PT2H2 hours
P1D1 day
P7D7 days
P1DT2H30M1 day, 2 hours, and 30 minutes

Sub-Process

🔌 Composition

Launches another deployed workflow as a child and waits for it to complete. Use it to break large processes into reusable pieces.

Configuration Fields

FieldDescription
Workflow Ref requiredThe deployed workflow to launch. Type to search all deployed workflows.
Input MappingPass data from the current context into the child workflow's context. Maps parent variables to child parameter names.
Output MappingAfter the child completes, pull data from the child's context back into the parent context.

How It Works

  1. The parent workflow launches the child instance with values from Input Mapping.
  2. The parent suspends and waits.
  3. When the child workflow reaches its End step, the parent resumes.
  4. Values declared in Output Mapping are pulled from the child and written into the parent context.
Note
The child workflow must be deployed before it appears in the Workflow Ref dropdown.

Webhook

🌎 Integration

Pauses the workflow and waits for an external system to send a POST request to a generated callback URL. Use it to wait for asynchronous events from third-party services.

How It Works

  1. When the workflow reaches this step, it generates a unique callback URL and suspends.
  2. You (or the workflow) communicate this URL to the external system.
  3. The external system POSTs a JSON payload to that URL when it's done.
  4. The workflow resumes and the payload data is available in the context.

Callback URL Format

The callback URL is visible in the Monitoring panel for a waiting instance:

POST /api/webhooks/{instanceId}/{token}

The external system should send a JSON body with the data you want to inject into the workflow context.

Configuration

FieldDescription
Output MappingExtract fields from the incoming webhook payload into context variables using JSONPath (e.g. $.statuspaymentStatus).

Entity

👥 Data Management

Creates, reads, updates, or deletes an entity record. Entities are structured data objects (like customers, cases, or orders) managed in your workspace.

Configuration Fields

FieldDescription
Method requiredThe operation to perform: Create, Get, Update, or Delete.
Entity Type requiredWhich type of entity to work with (e.g. "Customer", "Case"). Must be defined in Data Management first.
Entity IDThe internal ID of the entity to look up. Required for Get, Update, and Delete. Supports expressions: ${context.entityId}.
External IDAn alternative identifier (e.g. a reference from another system). Used for Get or to deduplicate on Create.
NameThe display name to assign when creating or updating the entity.
Field DataKey-value pairs of entity fields to set on Create or Update. Values support expressions.
Output MappingPull entity data into context variables after the operation completes (e.g. $.entity.identityId).

Operation Summary

MethodWhat it doesLookup by
CreateCreates a new entity record with the given name and field data.
GetRetrieves an existing entity and its field data.Entity ID or External ID
UpdateUpdates name and/or field data on an existing entity.Entity ID
DeletePermanently deletes the entity.Entity ID

Entity For Each

👥 Data Management

Queries all entities of a given type, optionally filters them, and launches a child workflow for each matching entity. Use it for batch processing — e.g. send a notification to every active customer.

Configuration Fields

FieldDescription
Entity Type requiredWhich entity type to iterate over.
Sub-Process requiredThe deployed workflow to launch for each entity.
Entity Context KeyThe name of the context variable that will hold the entity data inside each child workflow. Default: entity.
FilterOptional key-value pairs to filter entities. Only entities whose field data matches all filter conditions are processed.

How It Works

  1. fn8a queries all entities of the specified type.
  2. If a filter is set, only matching entities pass through.
  3. For each matching entity, a new child workflow instance is launched with the entity data injected under the Entity Context Key.
  4. The parent workflow continues immediately — it does not wait for the children to finish.
Note
The output of this step includes a launchedCount variable with the number of child instances created.

End

Core Flow

Marks the successful completion of a workflow. Every workflow must have at least one End step.

Configuration

FieldDescription
Output ParametersDeclare named output values that this workflow produces. These are used when the workflow is called as a Sub-Process — the parent's output mapping can reference them.
Note
You can have multiple End steps in a workflow (e.g. one for "Approved" and one for "Rejected"). Each puts the instance into the COMPLETED state.

Running Workflows

The Start Process page lets you manually launch any deployed workflow.

Starting a Process

  1. Click Start Process in the left sidebar.
  2. Browse the list of deployed workflows. Each card shows the workflow name, version, and description.
  3. Click Start on the workflow you want to run.
  4. If the workflow requires startup form data, a form appears. Fill it in and submit.
  5. A new workflow instance is created and begins executing immediately.

Trigger Types and Starting

  • Startup Form — Appears in Start Process. Clicking Start shows the configured form.
  • HTTP Request — Does not appear in Start Process. Must be triggered programmatically via its URL.
  • Timer / Cycle — Triggered automatically by the scheduler. Not manually startable.
Tip
To track the instance you just started, go to Monitoring → Instances and find it by workflow name or status.

Embedding Forms

Let visitors on your own website fill out a Startup Form without ever logging into fn8a — useful for contact forms, intake forms, or signup flows on a marketing site.

Making a Start Embeddable

  1. Select the Trigger node, set its type to Startup Form.
  2. Turn on Embeddable on external sites.
  3. An Allowed domains field and a Get embed code button appear right there in the trigger's settings.
  4. Click Get embed code to generate the workflow's embed key and reveal the copy-paste snippet.

Allowed Domains

A comma-separated list of hostnames permitted to load the embedded form, e.g. example.com, *.example.com. This list (and the embed key itself) is shared by every embeddable start on the workflow, so you only need to set it once even if you later mark a second Startup Form as embeddable.

Adding It To Your Site

Paste the generated snippet anywhere on your page:

<script src="https://your-fn8a-domain/embed.js" data-key="..." data-start="..."></script>

It injects a self-resizing iframe with the form. When the visitor finishes, it dispatches a fn8a:complete event on the embed's container element (and calls window.fn8aOnComplete() if you've defined one) so you can show your own confirmation or redirect.

What the Visitor Sees

The visitor first fills in the Startup Form's own fields. If the workflow then suspends on a User Form step with neither an Assignee nor a Candidate Group set, that form is shown too — useful for a short multi-step intake flow. The moment the workflow reaches a User Form step that is assigned to a specific person or group, the embed simply shows a "Thank you" confirmation and hands the task off to your team's normal Tasks queue.

Note
Regenerating the embed key immediately invalidates every snippet built from the old key — use it if a key has leaked or you want to retire an old embed.

My Tasks

The My Tasks page is your inbox for workflow steps that require human action. When a workflow reaches a User Form step assigned to you, it appears here.

The My Tasks Tab

Shows all tasks directly assigned to you. Each row displays:

  • Task title — the label of the User Form step.
  • Workflow — the name of the workflow this task belongs to.
  • StatusPENDING or IN_PROGRESS.
  • Open button — click to open the task form in a modal.

Group Tasks

Tasks assigned to a group (rather than a specific person) appear in the Group Tasks tab. Any member of the group can claim and complete them.

Claiming a Task

  1. Click My Tasks in the sidebar, then switch to the Group Tasks tab.
  2. Find a task with the Unclaimed badge.
  3. Click Claim — the task is assigned to you and moves to your My Tasks tab.
  4. Proceed to complete it like any personally assigned task.
Note
Once you claim a task, other group members can no longer see it in their Group Tasks list. Only you can complete it (or it can be re-assigned by an admin).

Completing a Task

Fill in the form and click the outcome button. The workflow resumes automatically.

Steps to Complete

  1. Find the task in My Tasks and click Open.
  2. A modal opens showing the form defined in the workflow step.
  3. Fill in all required fields (marked with a red asterisk).
  4. Optionally add a comment in the comment field at the bottom.
  5. Click one of the outcome buttons (e.g. Approve, Reject).
  6. The form is submitted, the modal closes, and the workflow continues down the chosen path.
Tip
The outcome buttons correspond exactly to the transitions defined on the User Form step in the workflow modeller. The button you click determines which path the workflow takes next.

Instances

The Monitoring page gives you a real-time view of every workflow execution. Each execution is called an instance.

Instance Statuses

StatusMeaning
RUNNINGThe workflow is actively executing a step right now.
WAITING_INPUTPaused at a User Form step, waiting for a human to complete a task.
WAITING_DELAYPaused at a Delay step, waiting for the timer to expire.
WAITING_WEBHOOKPaused at a Webhook step, waiting for an external callback.
WAITING_SUB_PROCESSPaused, waiting for a child workflow instance to complete.
COMPLETEDReached an End step successfully.
FAILEDAn unhandled error occurred and the workflow stopped.
CANCELLEDThe instance was manually stopped.

Filtering and Searching

  • Status filter — Select one or more statuses to show only matching instances.
  • Search — Search by instance ID or by a context variable value (e.g. a customer email).
  • Workflow filter — Click a workflow name to see only instances of that workflow.

Instance Detail

Click any instance row to open a detail drawer. It shows:

  • Current step and status.
  • Full execution history — every step that has run, in order, with timestamps.
  • The current context variables and their values.
  • The error message if the instance failed.

Deployments

The Deployments tab shows all workflows that have been deployed, along with their version history.

Deployment Actions

ActionDescription
EditOpens the workflow in the Modeller for editing. Changes must be re-deployed to take effect.
View InstancesJumps to the Instances tab filtered to this workflow.
Version HistoryShows all past deployments of this workflow. You can roll back to any previous version.
UndeployDisables the workflow so it cannot be started. Running instances are not affected.
DeletePermanently removes the workflow definition. Cannot be undone.
Caution
Deleting a workflow removes its definition permanently. Running instances will continue but you will lose the ability to view or re-deploy the design.

Entity Types

Before creating entity records, you define the schema — the shape of your data — by creating an entity type. Think of it like designing a custom database table.

Creating an Entity Type

  1. Go to Entities in the sidebar.
  2. Click Manage Types (or the entity types section).
  3. Click New Type and fill in:
    • Name — e.g. "Customer" or "Support Case".
    • Identifier Label — the label for a unique external identifier field (e.g. "IIN", "Phone", "Order #").
    • Fields — add as many fields as needed, each with a name, display label, and type.
  4. Save. The type is immediately available in Entity steps and in the Entities page.

Field Types

Entity fields support: Text, Number, Email, Select (with custom options), Textarea, Date, and more.

Entity Records

Entity records are the actual data — the individual customers, cases, or other objects — stored in your workspace.

Browsing Records

The Entities page shows tabs for each entity type. Click a tab to see all records of that type. You can search by name, identifier, or field value.

Creating a Record

  1. On the Entities page, select the tab for the entity type you want.
  2. Click New Entity.
  3. Fill in the name, the unique identifier (if applicable), and any field values.
  4. Optionally assign an owner (another entity that "owns" this one, for hierarchical data).
  5. Save. The record is immediately available for use in workflows.

Editing and Deleting

Each record has edit and delete actions available from the table row. Changes to entity data are reflected in any future workflow steps that read the entity.

Note
Workflows use entity IDs to reference records. If you delete an entity that a running workflow is referencing, the workflow step will fail when it tries to access it.

Groups

Groups are named sets of users in your workspace. Assign a group to a User Form step so that any member of the group can claim and complete the task.

Creating a Group

  1. Click Groups in the sidebar.
  2. Click New Group.
  3. Enter a Group Name (technical identifier, e.g. finance-team) and a Display Name (e.g. "Finance Team").
  4. Add an optional Description.
  5. Save.

Adding Members

  1. Find the group in the list and click the members icon (or "Members" action).
  2. Use the dropdown to search and add workspace members.
  3. To remove a member, click the × next to their name.

Using Groups in Workflows

In a User Form step, set the Candidate Group field to your group's name. All members of that group will see the task in their Group Tasks tab.

Plan Limits
The number of groups you can create depends on your plan: FREE (3 groups), PRO (5 groups), BUSINESS (20 groups).

Secrets

Secrets store sensitive credentials — API keys, passwords, tokens — encrypted in your workspace. Reference them safely in workflows without exposing the raw values.

Storing a Secret

  1. Click Secrets in the sidebar.
  2. Click New Secret.
  3. Enter a Name (e.g. STRIPE_API_KEY). Names cannot be changed after creation.
  4. Enter the Value (the actual credential).
  5. Save. The value is encrypted and cannot be retrieved — only replaced.

Using Secrets in Workflows

Reference a secret anywhere an expression is accepted using the syntax ${secret.NAME}. Common places:

  • API Call headers: Authorization: Bearer ${secret.STRIPE_API_KEY}
  • API Call body or URL parameters
  • Email credentials or SMTP passwords
Security Note
Secret values are write-only. Once saved, they cannot be viewed. If you lose a secret value, you must replace it with a new one.

Organization & Members

Manage your workspace, invite team members, and control access from the Organization page (found in your user menu at the top of the sidebar).

Inviting Members

  1. Go to Organization from the user menu.
  2. Click Invite Member.
  3. To invite a specific person: enter their email address. They receive a personal invite link.
  4. To create a shareable link (anyone can join): leave the email blank.
  5. Copy and share the generated link. It expires after a set period.

Member Roles

RolePermissions
OwnerFull access to all settings, billing, member management, and workspace deletion.
MemberCan build and deploy workflows, manage tasks, view monitoring, and use all workspace features. Cannot manage organization settings or billing.

Removing Members

In the Organization page, find the member in the table and click Remove. Owners cannot be removed — transfer ownership first.

Renaming the Workspace

Owners can rename the workspace by clicking Rename on the workspace info card at the top of the Organization page.

Billing & Plans

fn8a offers three plans. Switch plans at any time from the Billing page (found in your user menu).

Free
Solo
1 member
3 groups
3 workflows
20 instances / month
3 secrets
Pro
Team
10 members
5 groups (10 members each)
20 workflows
200 instances / month
20 secrets
Business
Enterprise
100 members
20 groups (10 members each)
200 workflows
2 000 instances / month
100 secrets

Usage Dashboard

The Billing page shows progress bars for each resource category so you can see how close you are to your plan's limits. If you consistently hit limits, consider upgrading your plan.

Switching Plans

  1. Go to Billing from the user menu.
  2. Click Switch on the plan you want.
  3. Confirm the change. The new limits apply immediately.
Note
Only the workspace Owner can change the billing plan.