How Sony Pictures Networks India is moving beyond pilots to put enterprise AI to work
Find answers to your queries and learn more about our products
Granola
Unify IntegrationsUse the Granola connector to capture and summarize meeting notes with AI. Integrating your application with Granola lets you use these operations in an automation. It exposes 3 actions, listed below. Add the connector from the Connections area, authenticate, then select its operations in the automation builder. Capabilities: actions, knowledge (RAG). Authentication Before you begin, make sure you have the following information: Connection Name: Choose a meaningful name for your connection. This name helps you identify the connection within your application or integration settings. Authentication Type: The authentication method for this connector is defined in the connection setup. Select the connector in the Connections area to see the fields it requires. Actions Action Name Description Get note Retrieves a single Granola meeting note by ID. List folders Lists accessible folders in Granola with pagination. List notes Lists accessible meeting notes in Granola. Overview The Granola API provides programmatic access to your workspace's meeting notes and related data through a RESTful interface, enabling integration with existing tools and custom workflows. API Key Access Scopes API keys support two access scopes: Scope Access Personal notes Notes you own, notes directly shared with you, notes in private folders shared with you Public notes Notes visible to everyone in the workspace, notes in the Team space Obtaining an API Key Open the Granola desktop app Navigate to Settings → Connectors → API keys Click Create new key Select the note access scopes for the key Click Generate API Key On Enterprise plans, workspace admins must enable API key access scopes in Settings → Workspace → General → API access for members . Revoking an API Key Go to Settings → Connectors → API keys Find the key and click Revoke Confirm in the dialog Once revoked, the key is permanently disabled and cannot be restored. Updating an API Key Go to Settings → Connectors → API keys Find the key and click Edit Select the desired note access scopes Click Save changes Quick Start List notes created in the past week: curl "https://public-api.granola.ai/v1/notes?created_after=$(date -u -v-7d +%Y-%m-%dT%H:%M:%SZ)" \ -H "Authorization: Bearer grn_YOUR_API_KEY" Retrieve a specific note with its transcript: curl "https://public-api.granola.ai/v1/notes/not_1d3tmYTlCICgjy?include=transcript" \ -H "Authorization: Bearer grn_YOUR_API_KEY" Transcript Format macOS transcripts include speaker.source as either "microphone" or "speaker". iOS transcripts return speaker.source = "microphone" with optional diarization_label values (Speaker A/B/etc). The API only returns notes with generated AI summaries and transcripts. Processing notes return 404. Rate Limits Metric Limit Burst capacity 25 requests in 5 seconds Sustained rate 5 requests/second (300/minute) Exceeding limits returns a 429 Too Many Requests response.
Chargebee
Unify IntegrationsUse the Chargebee connector to manage subscriptions and recurring billing. Integrating your application with Chargebee lets you use these operations in an automation. It exposes 11 actions, listed below. Add the connector from the Connections area, authenticate, then select its operations in the automation builder. Capabilities: actions. Authentication Before you begin, make sure you have the following information: Connection Name: Choose a meaningful name for your connection. This name helps you identify the connection within your application or integration settings. Authentication Type: The authentication method for this connector is defined in the connection setup. Select the connector in the Connections area to see the fields it requires. Obtaining Your API Key Login into your Chargebee account. Navigate to Settings, then click Configure Chargebee. Click on API Keys and Events, then open the API Keys tab. Click Add API Key. Select a key type (Full-Access Key for general use, or Read-Only Key if you only need read access) and give it a name. Click Create Key to generate the key. Copy the generated API key and store it securely for further authentication purposes. Actions Action Name Description Assign a payment role Assigns a payment role to a payment source in Chargebee Cancel subscription Cancels the specified subscription in Chargebee Create a customer Creates a new customer in Chargebee Download invoice PDF Downloads invoice as a PDF in Chargebee Get hierarchy for a customer Retrieves the full or partial account hierarchy for a customer in Chargebee Get subscriptions Returns a list of all subscriptions in Chargebee Link a customer Links a customer to an account hierarchy in Chargebee Retrieves a list of customers Retrieves a list of all customers in Chargebee Retrieves the credit card Retrieves the credit card for a customer id in Chargebee Unlink a customer Unlinks a customer from its parent account in Chargebee Update a customer Updates the customer resource in Chargebee
Media new
Unify AutomationsThe Excel node's media operation lets you embed an image into a specific location on a spreadsheet sheet — useful for inserting logos, charts exported as images, QR codes, or other visual assets into automated reports before they are stored or distributed. Overview Insert image into Excel sheet takes an image — supplied either as Base64 text or as a file object — and places it on a named sheet of an Excel workbook. You control where the image is anchored (after the last row, after the last column, or at a specific cell) and how it is sized (its original size, a scale factor, or a span across a number of columns and rows). The image is embedded in the workbook file itself, so it travels with the file when it is stored or sent. This operation works on XLSX or XLS files; use the Format Conversion operations to convert a workbook into one of those formats beforehand if needed. Operations Operation Description Key inputs Insert image into Excel sheet Embeds an image (provided as Base64 text or a file object) into a sheet of an Excel workbook. The image is anchored using the chosen Anchor Mode and sized using the chosen Sizing Mode. File, File Type, Sheet name, Image Input Type, Image Mimetype, Anchor Mode, Sizing Mode Input Field Type Required Description File File reference Yes The Excel workbook into which the image will be embedded. Must be in XLSX or XLS format (set via File Type). File Type Enum Yes Type/extension of the Excel file: XLSX or XLS. Defaults to XLSX. Sheet name String No Name of the sheet to insert the image into. If left empty, the first sheet is used. If the named sheet is not found, a new sheet with that name is created. Image Input Type Enum Yes How the image is provided: Base64 (a Base64-encoded string) or File Object (a UnifyApps file object). Defaults to Base64 . Base64 Image String Yes — when Image Input Type is Base64 The Base64-encoded image to embed. Input File File reference Yes — when Image Input Type is File Object UnifyApps file object containing the image to embed. Image Mimetype Enum Yes Mimetype of the image: PNG or JPEG. Defaults to PNG. Anchor Mode Enum Yes Where to place the image: After last row (column A, in the row right after the last row with data), After last column (row 1, in the column right after the last column with data), or Specific cell (uses the Anchor Row and Anchor Column you provide). Defaults to After last row . Anchor Row Integer Yes — when Anchor Mode is Specific cell Row index (0-based) for the top-left corner of the image. Anchor Column String Yes — when Anchor Mode is Specific cell Column letter for the top-left corner of the image (e.g. A, B, AA). Sizing Mode Enum Yes Original size keeps the native image size, Scale factor applies a multiplier (Scale Factor), and Span N x M cells fits the image inside a number of columns and rows (Span Columns, Span Rows). Defaults to Original size . Scale Factor Number Yes — when Sizing Mode is Scale factor Multiplier applied to the original image size (1.0 = 100%). Span Columns Integer Yes — when Sizing Mode is Span N x M cells Number of columns the image should span. Span Rows Integer Yes — when Sizing Mode is Span N x M cells Number of rows the image should span. Replace existing image at anchor Boolean No If enabled, removes any image already anchored at the same cell before inserting the new one. Only effective for XLSX; XLS files keep existing pictures regardless of this setting. Defaults to true (enabled). Output Returns a single Success boolean confirming whether the image was inserted — the action does not return a new file object. Notes Image insertion requires the workbook to be in XLSX or XLS format (set via File Type). If the source file is XLSB, use Convert Excel file format to convert it to XLSX or XLS before inserting the image. The image is anchored according to the chosen Anchor Mode — after the last row, after the last column, or at a specific cell (set via Anchor Row and Anchor Column). If rows or columns above or t
Razorpay
Unify IntegrationsIntegrating your application with Razorpay enables seamless online payment processing by supporting multiple payment methods such as cards, UPI, and net banking within a single platform. Razorpay helps automate payment collection, manage transactions, and ensure secure and reliable payment experiences, allowing businesses to streamline their financial operations efficiently. Authentication: Connecting your application with Razorpay enables smooth payment collection, real-time transaction tracking, and automated billing processes across multiple payment channels. Before you begin, ensure you have the following information: Connection Name : Choose a meaningful name for your connection. This name helps you identify the connection within your application or integration settings. It could be something descriptive like "MyAppRazorpayIntegration". Basic Based : Log in to your Dashboard using your credentials. Go to Account & Settings. Open API Keys under Website and App Settings. Click on Generate Key to create an API key. Copy the generated key ID, key secret and use it for further authentication purposes. Actions: Action Name Description Create a standard payment link Creates a standard payment link in Razorpay Create order Creates a new order in Razorpay Create payout links using contact details Creates a payout link using contact details in Razorpay Fetch all settlements Fetches all settlements from your Razorpay account Fetch settlement Fetches settlement reconciliation details in Razorpay Get order by ID Fetches the details of a specific order by its ID in Razorpay Get payout link status Gets the status of a payout link in Razorpay Initiate refund Initiates a refund for an order in Razorpay List all orders Lists all orders in Razorpay List payments of order Fetches all payments of an order from Razorpay Update order Updates the notes of an existing order in Razorpay Triggers : Trigger Name Description On payment Triggers when a payment is successfully made in Razorpay
Tag & Text
Unify ApplicationsTag renders small colored label chips (status pills, category badges, filter chips). Typography (Text) displays bindable text in Plain Text, Markdown, Rich Text, or HTML content types.
Tag Block The Tag block renders a small colored label — a pill or chip — showing a short piece of text. Its look is driven by four style axes: a Color , a Variant , a Size , and a Shape . You can add a Status Dot, start/end Icons, a Max Width, a Disabled condition, and a Dismissible toggle (X button). Tags are display-first but interactive: wire On Click to make the pill act like a button, or On Dismiss to react when users remove it. Note: Use Tag when you need a short text marker with color and shape (status, category, count). Use Avatar when you need an image/initials marker, or Button/Icon Button when you need an action control. Tag — Content Properties Property Type Default Description label string (bindable, translatable) Tag The text shown on the tag. Coerced to string if non-string value is bound tooltip string (bindable, translatable) — Hover tooltip text interactions event list — On Click and On Dismiss event handlers permissions permission rule — Restrict who sees the block Tag — Appearance Properties Property Type Default Description variant soft | clear | solid | subtle | ghost | outlined solid The tag's style family: how the Color turns into fill, border, and text size "xs" | "sm" | "md" sm The tag's height and text size color named color | fine-tuned object | conditional brand Base color from which fill, border, and text are derived. Supports conditional rules for data-driven coloring shape Square (2px) | Rounded (6px) | Pill (fully rounded) Rounded Corner rounding of the chip maxWidth number (px) Auto Maximum pixel width before the label truncates with an ellipsis disabled condition — Greys the tag and stops On Click and On Dismiss from firing decorators.statusDot boolean off A small colored dot before the label, for status indicators decorators.startDecorator icon name (bindable/conditional) — Icon at the start (left) of the label decorators.endDecorator icon name (bindable/conditional) — Icon at the end (right) of the label decorators.dismissible boolean off Adds an X button so users can remove the tag. Required for On Dismiss to fire visibility conditions — Show/hide the block customCSS / htmlAttributes CSS / attribute map — Advanced escape hatches. Appear only once enabled on the block Variant Style Guide Variant Visual Description Typical Use solid Filled background, matching text High-emphasis status labels soft Tinted background, colored text General-purpose status pills subtle Tinted background, no border Low-emphasis markers clear Transparent background, colored border Outlined category chips outlined Border + colored text, no fill Neutral or structural labels ghost Dashed border style Placeholder or pending states Tag Events Event Trigger Available When On Click User clicks or taps the tag Always — but does not fire when the tag is disabled On Dismiss User clicks the X button Dismissible is on AND the tag is enabled Tag — Exposed State Binding Type Description {{ id.content.label }} string The tag's label after bindings resolve {{ id.content.tooltip }} string The resolved tooltip text {{ id.appearance.* }} object Color, variant, size, shape, maxWidth, disabled, decorators Tag Behaviors & Gotchas Warning: Disabled tag ignores clicks and dismissal: When the Disabled condition is true, On Click and On Dismiss never fire. The pointer/hover affordance is also dropped. Warning: Dismiss X only shows while Dismissible is on: With Dismissible off, the X button disappears and On Dismiss can never fire (even if a handler is still configured). The On Dismiss row stays visible in the panel when a handler is saved — leave Dismissible on for any tag whose On Dismiss should fire. Note: Color and Disabled react to your data live: Both accept conditions and re-evaluate as bound data changes. This is the intended way to build status pills that respond to record state. Note: Fine-tuned colors vs. named colors: A fine-tuned color set paints inline styles for background, border, and text. A plain named color uses the varian
Grafana
Unify IntegrationsUse the Grafana connector to visualize metrics and operational data. Integrating your application with Grafana lets you use these operations in an automation. It exposes 6 actions, listed below. Add the connector from the Connections area, authenticate, then select its operations in the automation builder. Capabilities: actions. Authentication Before you begin, make sure you have the following information: Connection Name: Choose a meaningful name for your connection. This name helps you identify the connection within your application or integration settings. Authentication Type: The authentication method for this connector is defined in the connection setup. Select the connector in the Connections area to see the fields it requires. Obtaining Your Service Account Token Log in to your Grafana instance and click Administration in the left-hand menu. Go to Users and access , then select Service accounts . Click Add service account . Enter a display name and click Create . Open the service account you just created, then click Add service account token . Enter a name for the token and click Generate token . Copy the generated token and store it securely — Grafana will not show it again. Actions Action Name Description Delete datasource Deletes a datasource in Grafana Delete folder Deletes a folder using UID in Grafana Get cache configuration of data source Gets cache configuration of a data source in Grafana List folders Lists folders in Grafana Update cache for data source Updates cache for a data source in Grafana Update folder Updates a folder using UID in Grafana
Automation Anywhere
Unify IntegrationsUse the Automation Anywhere connector to automate repetitive business processes. Integrating your application with Automation Anywhere lets you use these operations in an automation. It exposes 8 actions, listed below. Add the connector from the Connections area, authenticate, then select its operations in the automation builder. Capabilities: actions. Authentication Before you begin, make sure you have the following information: Connection Name: Choose a meaningful name for your connection. This name helps you identify the connection within your application or integration settings. Authentication Type: Automation Anywhere supports Credentials authentication. Obtaining Your API Key Log in to your Automation Anywhere Control Room. Make sure your user role has the Generate API-Key permission. If it doesn't, have an Admin open Administration , then Roles , enable Generate API-Key under the API section for your role, and assign it to your user. Click your username in the bottom-left corner of the Control Room, then select My Settings . Click Generate API-Key in the top-right corner of the page. If a key already exists, confirm the regeneration prompt. This invalidates the previous key and any integrations using it. Copy the generated API key and store it securely. You'll use it together with your Control Room username to authenticate. Authentication & setup Automation Anywhere provides multiple authentication methods for accessing Control Room APIs, including username/API key and JWT token-based authentication. Username and API Key Authentication The recommended approach for programmatic API requests. Step 1: Get Your Credentials Username: Your Automation Anywhere account username API Key: A 40-character string (available in your account settings) Important: Escape backslashes in the API key by replacing \ with \\ Step 2: Use the Credentials Include your username and API key in your API requests. Avoid using passwords in plain-text format to improve security. Token-Based Authentication Authentication API is used to generate, validate, and manage JSON Web Tokens (JWT) that are required for authorization in all Enterprise Control Room APIs. Refresh Tokens A refresh token allows you to get a new token without needing to collect and authenticate credentials every time a token expires. OAuth Services All API calls must contain either: An authentication token from the Authentication API (generates JWT), or A bearer token from OAuth services Actions Action Name Description Add or update a queue member Adds or updates a queue member in Automation Anywhere Add role as a queue consumer Adds role as a queue consumer in Automation Anywhere Add role as a queue participant Adds role as a queue participant in Automation Anywhere Create a work item model Creates a work item model for processing in a queue in Automation Anywhere Deploy bot Deploys attended or unattended or headless automations in Automation Anywhere Get queue Retrieves a specific queue by ID in Automation Anywhere Get work item model Retrieves a specific work item model by ID in Automation Anywhere Start bot migration Migrates bots (TaskBots and MetaBots) created using the Enterprise Client version 10 and 11 to Automation 360 in Automation Anywhere About the API Automation Anywhere provides the following API categories: Authentication API: Generate and manage JWT tokens Device API: Manage devices and bots Control Room APIs: Enterprise automation and orchestration Cloud Control Room APIs: Cloud-based automation management API Task Real-Time Endpoint: Real-time task execution These APIs enable programmatic automation, bot management, monitoring, and integration with external systems. Official documentation https://docs.automationanywhere.com/bundle/enterprise-v2019/page/auth-api-supported.html
Google OIDC Configuration
Governance1. Configure Identity Provider in UnifyApps Follow the steps below to establish a Single Sign-On (SSO) connection using OpenID between UnifyApps and Google Cloud Platform STEP 1 · Open Identity Provider Settings Navigate to your specific environment in UnifyApps and go to: Platform Tools → Security → Identity Providers . STEP 2 · Select OpenID & Copy Callback URL Select OpenID from the Identity Provider dropdown menu. Locate the Callback URL generated and copy it to your clipboard. STEP 3 · Configure the Scope and Attribute Mapping Add the required authentication scopes to specify the level of data access granted to UnifyApps. Next, fill out the Default Attribute Mapping to properly pair Azure user claims with UnifyApps user profiles. Scopes - Scopes Select Scope 1 openid Scope 2 profile Scope 3 email Default Attribute Mapping - Field Value Username JSON Path /email Email JSON Path /email 2. Generate Credentials in Google Cloud STEP 4 · Navigate to APIs & Services Log into the Google Cloud Console , select your organization's project, and navigate to the navigation menu: APIs & Services → Credentials . STEP 5 · Create OAuth 2.0 Credentials If you haven't already configured your OAuth consent screen, complete that step first. Then, click Create Credentials at the top of the page and select OAuth client ID . Set the Application type to Web application . STEP 6 · Configure Authorized Redirect URIs Scroll down to the Authorized redirect URIs section. Click Add URI and paste the Callback URL . Click Save . Sample Redirect URL : https://orbit.uat.unifyapps.com/auth/sso/OPEN_ID/complete-login 3. Complete Setup in UnifyApps STEP 7 · Link Credentials to UnifyApps A dialog box will appear in Google Cloud displaying your newly created Client ID and Client Secret . Copy the Client Secret value. STEP 8 · Save and Finalize Return to your open UnifyApps Identity Provider setup page. Paste the copied value directly into the Client Secret Key field, fill out any remaining standard Google OpenID endpoints, and save your configurations.
Keka
Unify IntegrationsUse the Keka connector to manage HR, payroll, and attendance. Integrating your application with Keka lets you use these operations in an automation. It exposes 158 actions and 11 triggers, listed below. Add the connector from the Connections area, authenticate, then select its operations in the automation builder. Capabilities: actions, triggers. Authentication Before you begin, make sure you have the following information: Connection Name: Choose a meaningful name for your connection. This name helps you identify the connection within your application or integration settings. Authentication Type: Keka supports Client credentials authentication. Obtaining Your API Access Key Log in to Keka as a Global Admin or IT Admin. Click the gear icon next to your organization name to open Global Settings. Go to Integrations and Automation, then select API Access. Click Create New Key. Enter a name for the key, and set an expiry date and permission scope for it. Click Save. Copy the generated Client ID, Client Secret, and API Key and store them securely — they are shown only once. Actions Action Name Description Add a candidate for job Posts a candidate to a specified job in Keka Add a client Adds a new client in Keka Add a praise Adds a praise to employees in Keka Add a WFH request Adds a Work from home request for an employee in Keka Add an expense Adds an expense in Keka Add an expense claim Adds an expense claim in Keka Add assessments Adds assessment results in Keka Add BGV check Adds a BGV check for a vendor in Keka Add BGV request report Adds a BGV request report in Keka Add candidate note Adds a note for a candidate in Keka Add employee salary Adds employee salary in Keka Add employee skills Adds skills to an employee in Keka Add helpdesk ticket Adds a helpdesk ticket in Keka Add OD request Adds an On-duty request for an employee in Keka Add project allocation Adds a new project allocation in Keka Add project task timesheet entries Adds a new project task timesheet entries in Keka Add the adhoc transaction Adds the adhoc transaction in Keka Add time entry to attendance summary Adds a time entry to an employee’s attendance summary in Keka Create a leave request Creates a new leave request for an employee in Keka Create a project Creates a new project in Keka Create a project phase Creates a new project phase in Keka Create a task Creates a new task in Keka Create an employee Creates an employee in Keka Deactivate an employee Deactivates an employee in Keka Declare flexi benefits Declares flexi benefits in Keka Delete assessments Deletes an assessment from Keka Get a client Retrieves a client in Keka Get a project Retrieves a project in Keka Get all advance requests Fetches all advance requests in Keka Get all application fields Retrieves all application fields of a job in Keka Get all asset categories Retrieves all the asset categories from Keka Get all asset conditions Retrieves all the asset conditions from Keka Get all asset types Retrieves all the asset types from Keka Get all assets Retrieves all the assets from Keka Get all attendance records Retrieves attendance data within a date range in Keka Get all badges Retrieves all badges in Keka Get all banks Gets all banks in Keka Get all BGV requests Gets all BGV requests from Keka Get all billing roles Retrieves all billing roles of a client in Keka Get all bonus types Gets all bonus types in Keka Get all capture schemes Retrieves all capture schemes available in Keka Get all checks Retrieves all the BGV workflow checks from Keka Get all clients Retrieves all clients in Keka Get all contingent types Gets all contingent types in Keka Get all currencies Gets all currencies in Keka Get all departments Gets all departments in Keka Get all employee reviews Retrieves all employee reviews in Keka Get all employee salaries Gets all employee salaries in Keka Get all employee skills Retrieves all skills of an employee in Keka Get all exit reasons Gets all exit reasons in Keka Get all expen
Clone Record - New
Unify AutomationsClone Record creates an exact copy of an existing record in a UnifyApps Storage object, assigning the copy a new system-generated ID while leaving the original unchanged. Overview The Clone Record action duplicates a record identified by its ID. All field values are copied exactly from the source record into the new record; the original record is not modified in any way. The cloned record receives a new, unique system-generated ID. Use Clone Record to duplicate a template record, carry forward a previous entry's full data set, or branch a workflow from a known good state — then apply changes to the copy with a follow-up Update Record step. Input Field Description Required Object The Storage object (table) containing the record to clone. * Record ID The ID of the record to copy. * Output The newly created record — an exact copy of the source — with its own system-generated record ID and all field values copied from the original. Use the returned ID in downstream steps to reference or modify the clone. Notes Keep the following in mind when using Clone Record. The cloned record receives a new system-generated ID; the original record's ID is preserved and unchanged. All stored field values are copied exactly from the source; no fields are excluded or transformed by default. The original record is not modified in any way by a clone operation — it remains exactly as it was. After cloning, use Update Record on the new record's ID to modify specific fields on the copy without affecting the original. Downstream steps should reference whichever record ID they need — the original or the new clone — explicitly, since both exist after the step runs. Clone Record is most useful as a two-step pattern: clone a source record to create a copy, then update the copy's specific fields. This keeps the original intact as a reference or template.
Min Value
Unify DataChoose surviving values using minimum-value logic.
Overview The Minimum Value strategy is the precise inverse of the Maximum Value rule. It is a deterministic survivorship logic designed to identify and preserve the smallest data point found among duplicate records. This strategy is particularly valuable when "less" signifies "better," "earlier," or "higher priority." By filtering out higher values, UnifyApps ensures that your Golden Record reflects the most conservative estimate, the earliest historical event, or the highest rank (lowest integer) available in your data ecosystem. The Logic: Lowest Wins When configured, the system evaluates the target field across all conflicting records within a match group. Selection Criteria: As defined in the configuration panel, the system will "Select the lowest value among duplicates". Behavior by Data Type: Numeric Data: It selects the smallest number (e.g., comparison between $150 and $120 results in $120 ). Date/Time Data: It selects the earliest chronological timestamp (e.g., determining the "First Created Date"). Configuration Options Similar to other quantitative strategies, Minimum Value is most effective when applied granularly: Primary Strategy You can assign this as the main rule for specific fields via the Custom Strategy configuration. This is ideal for fields where the lowest value represents the "truth" or the desired business state (like a queue position). Fallback Strategy It serves as an effective tie-breaker in Fallback Strategies. If a primary rule (like "Source System") fails because a high-priority source is missing data, the Minimum Value rule can ensure that a valid, conservative value is picked from the remaining sources rather than leaving the field empty.
Google SAML Configuration
GovernanceComplete guide to configure Google SAML SSO integration with UnifyApps.
This guide outlines configuring Google as a SAML 2.0 Identity Provider (IDP) for Single Sign-On (SSO) with UnifyApps. You will need administrator access to your Google organization. The configuration process involves three main stages: Step 1: Initial Configuration on UnifyApps In this section, you will start the SAML configuration process on UnifyApps and obtain the necessary URLs that Okta will require. 1. Access Identity Provider Settings: Navigate to Platform Tools . Select Security from the platform tools menu. Under the Identity Providers section, click on + New Identity Provider 2. Basic Details & Service Provider Information: Provider Name: Enter a name for this identity provider. Identity Provider: Select Google from the dropdown. Button Text: Enter "Continue with Google." Important: Note the following URLs. You will need these for Google Admin Console in Step 2. Assertion Consumer Service URL (ACS URL): This is the endpoint on UnifyApps where Google will send the SAML assertion. (Example: https://demo.uat.unifyapps.com/auth/sso/SAML/complete-login ) Service Provider Entity ID (SP Entity ID): This is the unique identifier for UnifyApps as the Service Provider. (Example: https://demo.uat.unifyapps.com/sso/saml ) 3. Prepare for Metadata & Define Attributes: For "Do you have your identity provider metadata content?", you'll select Yes and paste Google's metadata later (Step 3). Review the Default Attributes section ( emailAttributeStatement , firstNameAttributeStatement , lastNameAttributeStatement , etc.) — these are the attribute names you'll map on the Google side. Note: Keep the UnifyApps configuration page open. You'll return to it after configuring Google. Do not save changes yet. Step 2: Configuring the SAML Application in Google Admin Console 1. Create a New Custom SAML App: Log in to the Google Admin console. Navigate to Apps → Web and mobile apps → Add app → Add custom SAML app. 2. App Details: Name the app as per your requirement (e.g., "Demo App") and click Continue. 3. Google Identity Provider Details: Leave the Google IdP details as default and click Continue. 4. Service Provider Details: Paste the ACS URL and Entity ID (copied from the UnifyApps configuration in Step 1) into the corresponding fields here. Check the Signed response box. Click Continue. 5. Attribute Mapping: Map the following: emailAttributeStatement → Primary email firstNameAttributeStatement → First name lastNameAttributeStatement → Last name Click Finish. 6. Configure User Access: The service status defaults to OFF for everyone . Select ON for everyone and click Save. 7. Obtain Google Identity Provider Metadata: Click Download Metadata to save Google's SAML metadata XML file. Step 3: Finalizing Configuration in UnifyApps 1. Paste Google Metadata: Return to the UnifyApps IDP configuration page. Open the downloaded metadata file, copy its entire contents, and paste it into the Metadata Content field. 2. Enable Provisioning: Turn on JIT Provisioning and click Save. 3. Activate the IDP: Turn on the Google SAML toggle and click Save.
Control Live Location
Unify ApplicationsStart or stop real-time GPS location tracking on mobile devices, enabling field worker tracking, delivery status updates, geofenced alerts, and any use case that requires continuous location awareness.
Overview The controlLiveLocation action manages the device's continuous GPS tracking session. Unlike a one-shot location read (available via the getDeviceLocation action), this action sets up a recurring poll that fires the onLocation callback each time a new position fix arrives. The tracking session persists until you explicitly stop it with operation: "stop" , even if the user navigates to a different page within the app. Warning: Platform permissions required. On Android, declare ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION in the app manifest. On iOS, add NSLocationWhenInUseUsageDescription (and optionally NSLocationAlwaysUsageDescription for background tracking) to Info.plist . The action automatically triggers the system permission dialog on first use if the permission has not yet been granted. If the user denies permission, the action fires the onError callback with code: "PERMISSION_DENIED" . Parameters Parameter Type Required Default Description operation "start" | "stop" Required (required) — start begins a new tracking session. If a session is already active, calling start again updates the session parameters (interval, accuracy) without restarting. stop terminates the current session; subsequent location callbacks are cancelled. interval number (ms) Optional (optional) 5000 How frequently to request a location update, in milliseconds. The device may deliver updates less frequently if movement is slow and power-saving is active. Minimum: 1000 ms. Recommended range for field operations: 5000–15000 ms. accuracy "high" | "balanced" | "low" Optional (optional) "balanced" high uses GPS + Wi-Fi/cell — best accuracy, highest battery use. balanced uses network-assisted GPS — good accuracy, moderate battery use. low uses cell towers and Wi-Fi only — rough accuracy (100–3000 m), minimal battery impact. onLocation ActionChain Optional (optional) — Callback action chain fired on each location update. Receives a location object: { lat: number, lng: number, accuracy: number, altitude: number | null, speed: number | null, heading: number | null, timestamp: number } . Access values with {{ onLocation.location.lat }} . onError ActionChain Optional (optional) — Fires on permission denial or if GPS is unavailable. Receives { code: string, message: string } . Common codes: PERMISSION_DENIED , POSITION_UNAVAILABLE , TIMEOUT . Location Callback Payload Field Type Description lat number Latitude in decimal degrees (WGS84). lng number Longitude in decimal degrees (WGS84). accuracy number Horizontal accuracy radius in metres. Lower is better. altitude number | null Altitude above sea level in metres. null if unavailable. speed number | null Ground speed in metres per second. null if unavailable. heading number | null Bearing in degrees (0–360, clockwise from true north). null if not moving. timestamp number Unix timestamp (ms) of the location fix. Step-by-Step Usage Guide Configure platform permissions: In App Settings → Mobile → Permissions , enable Location (Fine) . This adds the necessary manifest entries for Android and iOS. Provide a clear permission rationale message that explains why the app needs location access. Create a Start Tracking button: Add a Button block labelled "Start Tracking". In its onClick event, add a Control Live Location action with operation: "start" , your desired interval, and the onLocation callback chain. Define the onLocation callback: Inside the callback, add a Trigger Data Source action that POSTs to your location-tracking API endpoint. Pass {{ onLocation.location.lat }} , {{ onLocation.location.lng }} , and {{ onLocation.location.timestamp }} as parameters. Stop tracking when done: Add a Stop Tracking button with a Control Live Location action with operation: "stop" . Also fire stop in the page's onPageUnmount event to prevent stale tracking sessions when the user navigates away. Examples Start tracking and send updates to an API { "actionType": "controlLiveLocation", "payload": { "operation": "start",
Salesforce
Unify IntegrationsSalesforce is a cloud-based software suite for customer relationship management
Using Salesforce streamlines managing customer relationships and sales processes. It helps track customer interactions, manage sales deals, and analyze data for better decisions.Salesforce ensures your customer data is protected with strong security. It's a tool for boosting sales efficiency and keeping customer information organized and safe. Integrating your application with Salesforce allows you to leverage Salesforce's extensive CRM capabilities. Authentication Before you begin, make sure you have the following information: Connection Name : Assign a descriptive name for this connection. This name is essential as it helps identify this specific Salesforce connection within UnifyWorkflow. Domain : This information directs your application to connect to the correct Salesforce instance. If your Salesforce instance URL is https://mycompany.my.salesforce.com , then your domain is mycompany.my.salesforce.com . Authentication Type : There are two options for authenticating the connection to your salesforce account - OAuth & JWT Token . OAuth After entering the Domain of your company, click Authorise . It will redirect you to the login page of Salesforce, from where you can login to your Salesforce account to directly authorize and connect your salesforce account in UnifyApps. Salesforce JWT Token Step 1: Create a Private Key and Digital Cert Authorizing an org with the org login jwt command requires a digital certificate and the private key used to sign the certificate. You can use your own private key and certificate issued by a certification authority. Alternatively, you can use OpenSSL to create a key and a self-signed digital certificate. Using a private key and certificate is optional when you authorize an org by logging into a browser. This process produces two files: server.key —The private key. You specify this file when you authorize an org with the org login jwt command. server.crt —The digital certificate. You upload this file when you create the required connected app. Open a terminal (macOS and Linux) or command prompt (Windows). If necessary, install OpenSSL on your computer. To check whether OpenSSL is installed on your computer, run the which command on macOS or Linux or the where command on Windows. Create a directory for storing the generated files, and change to the directory. Generate a private key, and store it in a file called server.key You can delete the server.pass.key file because you no longer need it. Generate a certificate signing request using the server.key file. Store the certificate signing request in a file called server.csr . Enter information about your company when prompted. Generate a self-signed digital certificate from the server.key and server.csr files. Store the certificate in a file called server.crt . Step 2 : Create a External Client App Salesforce CLI requires a external client app in the org that you're authorizing. A external client app is a framework that enables an external application, in this case Salesforce CLI, to integrate with Salesforce using APIs and standard protocols, such as OAuth. We provide a default external client app when you authorize an org with the org login web command . For extra security, you can create your own external client app in your org using Setup and configure it with the settings of your choice. You're required to create a connected app when authorizing the org with the org login jwt command. Log in to your org. From Setup , enter App Manager in the Quick Find box, then select App Manager . In the top-right corner, click New External Client App . Update the basic information as needed, such as the connected app name and your email address. Select Enable OAuth Settings . For the callback URL, enter http://localhost:1717/OauthRedirect . fIf port 1717 (the default) is already in use on your local machine, specify an available one instead. Then update your sfdx-project.json file by setting the oauthLocalPort property to the new port. For example, if yo
Zoho Invoice
Unify IntegrationsIntegrating your application with Zoho Invoice enables seamless invoicing, payment tracking, and customer management. It allows businesses to automate billing workflows, generate professional invoices, monitor payment statuses, and streamline financial operations efficiently. Authentication: Connecting your application with Zoho Invoice enables smooth invoice creation, real-time tracking, and automated financial workflows. Before you begin, ensure you have the following information : Connection Name: Choose a meaningful name for your connection. This helps you identify it within your application or integration settings (e.g., "MyAppZohoInvoiceIntegration"). Domain : Select your Zoho domain. Organization ID : Your Zoho Invoice organization ID. OAuth-Based Authentication: Zoho Invoice uses OAuth 2.0 for secure authentication. Go to the Zoho Developer Console. Create a new client. Choose Server-based Applications. Provide required details (Client Name, Redirect URI, etc.). After creation, note the following: Client ID Client Secret Generate a Grant Token using the authorization URL. Exchange the grant token for: Access Token Refresh Token Use the access token in API requests for authentication. Actions Action Name Descriptions Add task Add a task in Zoho Invoice Create contact Creates a contact in Zoho Invoice Create expense Create a expense in Zoho Invoice Create invoice Creates an invoice in Zoho Invoice Create project Creates a project in Zoho Invoice Delete contact Delete a contact in Zoho invoice Delete invoice Delete an invoice in Zoho invoice Delete project Delete a project in Zoho invoice Delete task Delete a task in Zoho invoice Get contact details Get the contact details in Zoho Invoice Get expense Get expenses in Zoho Invoice Get expenses in Zoho Invoice Get an invoice details in Zoho Invoice Get project details Get the project details in Zoho Invoice Get task details Get the task details in Zoho Invoice List expenses List expenses from Zoho Invoice List Invoices List invoices in Zoho Invoice Update contact Updates a contact in Zoho Invoice Update expense Update expense in Zoho Invoice Update invoice Updates an invoice in Zoho Invoice Update project Updates a project in Zoho Invoice Update task Updates a task in Zoho Invoice
Using repeatable-old
Unify ApplicationsDisplays dynamic lists/grids by repeating a component template for each data item. Takes an array of objects as input and creates multiple instances of the design. Essential for product catalogs, user lists, feeds. Configure data source, layout (list/grid)
The Repeatable component is a powerful tool for displaying dynamic lists or grids of data within your application. It works by taking a component or a group of components you design (a template) and repeating it for each item in a given data source. This is essential for building common UI patterns like product catalogs, user lists, task lists, comment threads, news feeds, and any other interface that needs to display a variable number of similar items. Key Properties / Configuration (Content Tab) The Content tab is where you connect your data and configure the core behavior of the Repeatable component. Data Source: This is the most important property. It requires an array of objects to function. Each object in the array will represent one instance of the repeated content on the screen. You can either bind this to a data source that returns data in the correct format (e.g., from an API call or a Unify Data Object). Or, you can manually enter a static array for prototyping, for example: {{ [{"id":"1","name":"Item 1"},{"id":"2","name":"Item 2"}] }} Primary Key: What it is: The name of a field in your data source objects that contains a unique identifier for each item (e.g., id, email, product_sku ). In the example above, id would be the primary key. Why it's needed: This allows the platform to efficiently track, update, and manage interactions for each individual item in the list, especially when items are selected or changed. Auto Select: What it is: This setting determines if an item should be automatically selected when the list first loads. Options: None : No item is selected by default. First Item : The first item from your data source is automatically selected. Last Item : The last item from your data source is automatically selected. Why it's useful: Ideal for creating master-detail layouts where selecting an item in the list displays its details in another part of the page. Auto-selecting the first item can populate the detail view on page load. Collect Child States: What it is: A toggle switch to gather information from components inside your repeated items. Why it's useful: Turn this ON if you have input components (like text fields, toggles, or dropdowns) within your repeatable template and you need to collect the values from all instances at once (e.g., submitting a form that contains a list of items with quantities). When off, the component is more performant as it doesn't track these individual states. Other Properties Add-ons: Configure additional functionalities like search or filtering for the list. Interactions: Define actions that can be triggered by events on the Repeatable component itself, such as On Row Clicked. Permissions: Standard Unify Applications feature to control the visibility of the entire component based on user roles. Binding Data to Child Components To make the Repeatable component useful, you need to display the data for each item. Any component you place inside the Repeatable (your " template ") gets access to a special currentItem object. currentItem: This object represents the data for a single item in the Data Source array for that specific instance. How to use it: You can bind the properties of currentItem to the components inside the Repeatable. For example, if your template has a Text component, you could set its value to {{currentItem.name}} to display the name of each item from your data source. Working with Selected Items A powerful feature of the Repeatable component is its ability to track which item a user has selected. This is the key to building interactive, master-detail interfaces.The component does this by exposing a special property called selectedItem. This property is an object that holds all the data for the currently selected row (e.g., {"id": "user-01", "name": "Alice"} ). When a user clicks on an item in the list, the Repeatable component triggers an On Select Item event. By navigating to the Interactions tab for your Repeatable component and adding an action to this
Control Build
Unify ApplicationsTrigger a build or compile operation on a Code Editor block or custom component, enabling in-app code playgrounds, live configuration builders, and dynamic component preview workflows.
Overview The controlBuild action instructs a Code Editor block (or any custom block that registers a build control method) to compile and render its current content. It is the programmatic equivalent of the user pressing a "Run" or "Preview" button that you place in your UI. The action is asynchronous: it fires the build request and then continues the action chain unless you explicitly gate the chain on the onSuccess or onError callbacks. The block's state.buildStatus variable is updated throughout — "idle" → "building" → "success" or "error" . Parameters Parameter Type Required Default Description blockRef string Required (required) — The block ID of the Code Editor or custom component block to build. Use the block picker — only blocks that support the build capability are listed. Missing or invalid IDs cause a console warning and no-op. buildTarget "preview" | "production" Optional (optional) "preview" preview produces a fast, unoptimised build suitable for live editing — source maps included, minification skipped. production runs the full optimisation pipeline: tree-shaking, minification, and bundle splitting. Use production only when the user explicitly publishes or exports the result. onSuccess ActionChain Optional (optional) — A nested action chain that fires when the build completes successfully. The callback receives buildOutput — an object containing bundleUrl , buildTime (ms), and warnings (array). Reference with {{ onSuccess.buildOutput.bundleUrl }} . onError ActionChain Optional (optional) — A nested action chain that fires when the build fails. The callback receives buildError — an object with message , line , column , and file . Use it to display a user-friendly error notification. Note: Build state variable: The Code Editor block exposes state.buildStatus ( "idle" | "building" | "success" | "error" ) and state.lastBuildError . Bind a loading spinner's visibility to {{ b_codeEditor.state.buildStatus === 'building' }} to give users feedback while the build runs. Step-by-Step Usage Guide Add a Code Editor block to your page: From the block palette, drag a Code Editor block onto the canvas. Note its block ID (e.g. b_codePlayground ). Configure the language, theme, and initial value in the block's Settings panel. Add a "Run" button: Place a Button block adjacent to the editor. Set its label to "Run" or "Preview". In its onClick event, add a Control Build action. Configure the action: Set blockRef to b_codePlayground . Set buildTarget to "preview" for live editing. Add an onError callback that fires a Show Notification action displaying {{ onError.buildError.message }} . Display the build output: In the onSuccess callback, set a page variable var_previewUrl to {{ onSuccess.buildOutput.bundleUrl }} . Bind an iframe or preview panel's src attribute to this variable. Use Cases In-App Code Playgrounds Internal developer tools often need a sandboxed area where users can write and immediately test code snippets — SQL queries, JavaScript expressions, regex patterns, or configuration DSLs. The Code Editor block paired with controlBuild provides this without leaving the application. Dynamic Component Preview Configuration builders where the user customises a component (changing colours, layout, content) can use a Code Editor to hold the generated configuration markup. A "Preview" button triggers controlBuild to render the current markup in a sandboxed frame alongside the editor. Live Configuration Builders When your application allows end-users to define chart configurations, email templates, or workflow scripts in a code-like DSL, controlBuild provides a "validate and preview" step before the configuration is committed to the database. Examples Trigger a preview build with error handling { "actionType": "controlBuild", "payload": { "blockRef": "b_codePlayground", "buildTarget": "preview", "onSuccess": [ { "actionType": "setPageVariable", "payload": { "variableId": "var_previewUrl", "value": "{{ onSuccess.buildOutput.bundleUrl
Screen & Chat by Unifyapps new
Unify AutomationsThe Screen and Chat nodes are the two built-in human-interaction primitives in UnifyApps Automations. Screen pauses a run to collect structured input from a person; Chat posts a message into a live chat surface. Both are lightweight ways to bring a human into a workflow — one for blocking input, one for non-blocking messaging. Overview Node Purpose Blocks the run? Screen Shows a UI form to a user and waits for their submission before the automation continues. Yes — the automation pauses until the user submits. Chat Posts a message into a chat conversation (user or topic). No — the automation continues after sending. Screen Node The Screen node is the human-in-the-loop primitive . It shows a UI screen (a form) to a specific user and the automation waits for that user to submit the form before resuming. The submitted values are available to all subsequent steps in the run. Use it for approvals, missing-detail collection, or any decision that genuinely requires a human before the workflow can proceed. Input Field Description Screen The UI screen (form) to display to the user. Defined in the app builder and referenced here by name or ID. User The user who will see and submit the form. Expected fields The form fields whose submitted values the automation will use in subsequent steps. Defines what the node's output contains. Output: The values submitted by the user for each expected field. These are available to all downstream steps in the automation run. The automation is suspended until the user submits. If the user never submits, the run remains paused. Configure a timeout or fallback path if unattended runs must eventually complete. Chat Node The Chat node posts a message into the platform's built-in chat or messaging surface — addressed to a user or a conversation topic. It is lighter-weight than the Notification node: it contributes to an ongoing conversation rather than raising a formal alert. Use Chat when you are driving or participating in a chat thread; use Notification when you need to formally alert people and optionally send them somewhere to act. Input Field Description Recipient / Conversation The user or conversation topic to post the message into. Message The text content of the message to send. Output: Confirmation that the message was posted. The automation continues immediately after sending. Choosing Between Screen, Chat, and Notification Scenario Recommended node You need a person to approve or fill in a form before the run continues. Screen You want to post a message into a live chat or assistant conversation. Chat You need to alert one or more people and optionally give them a direct action to take. Notification Notes Keep the following in mind when using the Screen and Chat nodes: The Screen node suspends the automation run until the target user submits the form. Runs waiting on a Screen node count against your concurrent-run limits during that pause. The Chat node is non-blocking: the automation moves to the next step immediately after posting the message, regardless of whether the recipient reads it. The Chat node targets the platform's built-in messaging surface. It does not post to external chat systems (for example, Slack or Teams) — use a connector node for those. The Screen node's expected fields must match the fields defined on the referenced screen; mismatches cause the node to fail at runtime. Choose Screen, Chat, or Notification based on whether you need blocking human input, a conversational message, or a formal alert with an optional action.
Data Sources Overview
Unify ApplicationsData Sources Overview A data source is a named, reusable request for data that lives on a page or on the whole app. Configure it once — which API to call, which records to query, with what inputs — and every block on that page can bind to its results. The data source owns the fetching: when it runs, when it re-runs, how its response is shaped, and what loading and error states it exposes while doing so. Note: Open the Data panel in the Application Builder. Data sources are grouped under App Data (shared across all pages) and Page Data (specific to this page). Variables and functions live alongside data sources but are separate concepts. The Two Kinds of Data Sources Every data source is one of two kinds, chosen at creation time. The kind is fixed — you cannot switch between them without recreating the data source. Kind What it does Typical use API Endpoint Calls an HTTP endpoint — you configure the method, URL, query parameters, headers, and body. Reaching your own or a third-party REST API. Platform Query Queries data managed by the platform — you pick an operation, the fields to return, filters, sorting, and paging. Reading records the platform already stores, without writing an API. See Data Source Types for an in-depth comparison and guidance on when to pick which. Page Scope vs App Scope When you create a data source you choose where it lives: Scope Lives in Accessible from Use when Page Data This page only Blocks on this page The query is specific to this page's concern App Data The app's global scope Every page in the app The same data is needed across multiple pages — create once, use everywhere Warning: A single page caps at 100 data sources . Hitting that limit shows a "Data source limit reached" dialog. The recommended fix is to split heavy pages, share data via App Data, or combine related queries where possible. The Lifecycle: Configure → Run → Bind → Refresh Every data source moves through the same four stages regardless of kind or scope. Configure: Define what to fetch: the endpoint or query, its inputs, and its run behavior. Inputs can be static values or expressions bound to page state, other data sources, or user input. Inputs configured as expressions make the data source reactive — it re-runs automatically when the referenced value changes. Run: The data source executes. An automatic data source runs on its own — on page load and again whenever an input it depends on changes. A manual one runs only when something explicitly triggers it, such as a button action. Bind Results: Blocks read the response through the data source's name in a {{ }} expression. Alongside the response data, each data source exposes its live request state: Refresh: Data stays current through three mechanisms: polling (re-run on an interval), focus refetch (re-run when the user returns to the tab), or an explicit trigger from an action. See Caching & Refetch . Optional Lifecycle Capabilities Two optional features extend the standard lifecycle: Capability What it does See Response Transform A JavaScript snippet that reshapes the raw response before blocks read it — flatten nesting, rename fields, compute derived values. Response Transforms Infinite Loading Turns the response from a fixed window into an append-only list; consuming blocks pull additional pages on demand. Infinite Loading How to Add a Data Source Open the Data panel: In the Application Builder left rail, select the Data panel. Click + → Data Source: A searchable grid of every available app, connector (Storage, REST/HTTP, GraphQL, automations) appears. Pick the app and operation: Select the app, choose its operation. The data source is created and opens its configuration with four tabs: Apps , Connection , Input , and Advanced . Configure inputs, run behavior, and advanced options: On the Input tab set run behavior (Automatic / Manual), configure the operation's inputs, and optionally add a response transform or event handlers. The Advanced tab controls caching, polling, re
Encryption
Unify DataSecure your data with powerful encryption
AES ( Advanced Encryption Standard ) is a symmetric encryption algorithm widely used to secure data . It encrypts data using the same key for both encrypting and decrypting, making it essential to keep the key secret. This guide will walk you through using AES encryption and decryption transformations to protect sensitive data, such as PII (Personally Identifiable Information). AES Encryption AES encryption allows you to secure any field with a 256-bit encryption key. Steps to Apply Encryption AES Encryption Key : This is the 256-bit encryption key required to encrypt the data. Example : 6b71RouelDY2xLFfy1x0oYXq3oUDkfuc. Initialization Vector (IV) : An IV is a 128-bit value used with the encryption key to enhance security. Example : d4QaIQMb8RbOG5ai. Testing Encryption After applying the encryption transformation, test it to ensure it is working correctly. You should compare the encrypted output with expected values to verify the encryption process. Example: Encrypting a customer's social security number before storing it in a database: Input : Sample String Encrypted Output : enhTmMxQS+2o1Oi1nvnpxA== AES Decryption AES decryption uses the same symmetric algorithm to convert encrypted data back to its original form. Steps to Apply Decryption AES Decryption Key : Enter the 256-bit encryption key used for encryption. Example : 6b71RouelDY2xLFfy1x0oYXq3oUDkfuc. Initialization Vector (IV) : Provide the same 128-bit IV used during encryption. Example : d4QaIQMb8RbOG5ai. Testing Decryption After applying the decryption transformation, test it to ensure it is working correctly. You should compare the decrypted output with the original data to verify the decryption process. Example: Decrypting a customer's social security number to verify identity: Encrypted Input : enhTmMxQS+2o1Oi1nvnpxA== Decrypted Output : 123-45-6789 Best Practices Key Management : Implement a secure key management system to handle encryption keys. This may involve using key management services (KMS) provided by cloud providers. Regular Audits : Regularly audit your encryption and decryption processes to ensure they comply with security standards and best practices.