Only this pageAll pages
Powered by GitBook
Couldn't generate the PDF for 176 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

Beefree SDK

Getting Started

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Visual Builders

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

APIs

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Forms

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Rows

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

File manager

Loading...

Loading...

Server-side configurations

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Other Customizations

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Configuration parameters

Discover the configuration parameters within Beefree SDK.

Passing Configurations to Beefree SDK

Once you have initialized your Beefree SDK application, you can pass a series of configuration parameters to it.

The following code displays an example of a default configuration:

var beeConfig = {
    uid: 'CmsUserName', // [mandatory]
    container: 'bee-plugin-container', // [mandatory]
    autosave: 30, // [optional, default:false]
    language: 'en-US', // [optional, default:'en-US']
    trackChanges: true, // [optional, default: false] 
    specialLinks: specialLinks, // [optional, default:[]] 
    mergeTags: mergeTags, // [optional, default:[]]
    mergeContents: mergeContents, // [optional, default:[]]
    preventClose: false, // [optional, default:false]
    editorFonts : {}, // [optional, default: see description]
    contentDialog : {}, // [optional, default: see description]
    defaultForm : {}, // [optional, default: {}]
    roleHash : "", // [optional, default: ""]
    rowDisplayConditions : {}, // [optional, default: {}]
    rowsConfiguration: {},
    workspace: { // [optional, default: {type : 'default'}]
        editSingleRow: false // [optional, default: false]},
    },
    commenting: false, // [optional, default: false]}
    commentingThreadPreview: true, // [optional, default: true]}
    commentingNotifications: true, // [optional, default: true]}
    disableLinkSanitize: true, // [optional, default: false]}
    loadingSpinnerDisableOnSave: false, // [optional, default: false]}
    loadingSpinnerDisableOnDialog: true, // [optional, default: false]}
    onSave: function(jsonFile, htmlFile) { /* Implements function for save */ }, // [optional]
    onChange: function(jsonFile, response) { /* Implements function for change */ }, // [optional]
    onSaveAsTemplate: function(jsonFile) { /* Implements function for save as template (only JSON file) */ }, // [optional]
    onAutoSave: function(jsonFile) { /* Implements function for auto save */ }, // [optional]
    onSend: function(htmlFile) { /* Implements function to send the message */ }, // [optional]
    onLoad: function(jsonFile) { /* Implements function to perform an action once the template is loaded */}, // [optional]
    onError: function(errorMessage) { /* Implements function to handle error messages */ }, // [optional]
    onWarning: function(alertMessage) { /* Implements function to handle error messages */ }, // [optional]
    debug: {
        all: true,                 // Enables all debug features listed below
        inspectJson: true,        // Enables an eye icon on the module/row toolbar to inspect specific JSON portions
        showTranslationKeys: true // Shows translation keys instead of localized strings
    },
    translations: {
        'bee-common-widget-bar': {
            content: 'MODULES',
        },
        // additional translations...
    },
    // other properties...
};

Parameters

The following table provides a list of the required parameters.

Parameter
Description
Default

uid

An alphanumeric string that identifies the user and allows the SDK to load resources for that user (e.g. images).

  • Min length: 3 characters

  • Can contain letters from a to z (uppercase or lowercase), numbers and the special characters _ (underscore) and – (dash)

  • It is a string and not a numeric value

It uniquely identifies a user of Beefree SDK. When we say “uniquely”, we mean that:

  • It will be counted as a unique user for monthly billing purposes.

  • Images (and other files) used by the user when creating and editing messages will be associated with it and not visible to other users (when using the default storage).

container

Identifies the id of div element that contains Beefree SDK.

Language Parameter

The following table provides a list of the language options for the language parameter. The language parameter is not required and has a default value of en-US.

Available Languages

Language
4-letter language identifier (e.g. “en-US”, ISO 639-1 format)

English:

en-US

Spanish:

es-ES

French:

fr-FR

Italian:

it-IT

Portuguese:

pt-BR

Indonesian:

id-ID

Japanese:

ja-JP

Chinese:

zh-CN

Traditional Chinese:

zh-HK

German:

de-DE

Danish:

da-DK

Swedish:

sv-SE

Polish:

pl-PL

Hungarian:

hu-HU

Russian:

ru-RU

Korean:

ko-KR

Dutch:

nl-NL

Finnish:

fi-FI

Czech:

cs-CZ

Romanian:

ro-RO

Norwegian (Bokmål):

nb-NO

Slovenian:

sl-SI

Parameters

The following table provides a list of the optional parameters and their corresponding descriptions.

Parameter
Description
Default

trackChanges

Track message changes in the editor via the “onChange” callback. See “Tracking message changes” for further details.

false

specialLinks

An array of custom links that may be used in the message (e.g. unsubscribe). See “extending the editor” for further details.

[]

mergeTags

An array of merge tags that may be used in the message (e.g. first name of the recipient). See “extending the editor” for further details.

[]

mergeContents

An array of content elements that may be used in the message (e.g. small blocks of HTML). See “extending the editor” for further details.

[]

preventClose

Whether an alert should be shown when the user attempts to leave the page before saving.

false

editorFonts

Customize the list of available fonts in the editor’s text toolbar and the BODY settings panel. See “Font management” for further details.

See “Font management” for the default object.

roleHash

Identifies the user role:

  • Minimum length is 8, maximum is 30

  • Alphanumerical string only: No whitespaces, no special characters such as “_” and “-“

See “Roles and permissions” for further details.

""

rowDisplayConditions

Allows for conditional statements in email messages. See “Display Conditions” for further details.

{}

workspace

Configure the initial workspace for loading the editor. Currently used for AMP content visibility. See “Workspaces” for further details.

{type : 'default'}

contentDialog

{}

defaultForm

{}

commenting

false

commentingThreadPreview

Enables a pop-over preview on the stage for comments.

true

commentingNotifications

Enables notifications of new comments in co-editing.

true

disableLinkSanitize

Disables link validation for URLs, including telephone number or SMS to enable merge content use.

false

loadingSpinnerDisableOnSave

Controls the visibility of the builder in a loading state.

false

loadingSpinnerDisableOnDialog

Controls the visibility of the builder in a loading state.

false

Create an Application

Learn how to create an application within the Beefree SDK Developer Console.

Overview

This article will cover steps for the following processes:

Sign up for account in the Developer Console

  1. Complete the required information to sign up or login.

    You will be redirected to the dashboard.

  2. In the dashboard, click Add new subscription.

    You will be redirected to a page that asks you to provide a name for your new subscription.

  3. Type in a name and click Next.

    You will be redirected to a page that asks you to select a subscription plan. If you'd like to subscribe to the Free version, click on the corresponding Select plan button Free plan type. If you'd like to subscribe to a paid plan, select the paid option that works best for your needs.

  4. A confirmation message will appear confirming that you selected the Free plan and that you will not be charged anything. Click Confirm to confirm your subscription the the free plan.

  5. While the plan is free, ensure that you familiarize yourself with the scenarios in which charges would apply. The following image shows a plan summary displaying instances of when charges apply.

  1. Enter and confirm your billing address.

  2. Enter and confirm your card information by clicking Place Order.

    You will be redirected your new Free plan subscription.

How to create an application

You will have the option to activate any or all of the following applications:

Take the following steps to create an application:

  1. Click the Activate button that corresponds with the application you'd like to create.

  2. Type in a name for your new application.

  3. Click Create.

Your application will look like the following in the dashboard once it is activated:

You have successfully created an application. Now, you can enter the application Details and obtain your Client ID and Client Secret.

Obtain your Client ID and Client Secret

Click on your application's Details button to view your Client ID and Client Secret. Use these to authenticate when you initialize it.

Reference the following related topics to learn more about customizing your applications, creating development instances, and referencing sample code.

Regenerate Client Secrets

This feature applies to paid plan types.

Inside the Beefree Developer Console, you have the option to regenerate the Client Secret for your application. To regenerate your application's Client Secret, take the following steps:

  1. Navigate to the application you'd like to update the Client Secret for.

  2. Click on the application's Details button.

  1. Navigate to Application keys within the application's details.

  2. Click Regenerate to generate a new Client Secret.

  1. You will be prompted to a modal and asked to confirm your application's name.

  2. Complete the App Name field and click Regenerate to complete the action.

Your new Client Secret is now available and ready to use. Your old Client Secret will expire 24 hours after creating the new one. Ensure you replace it in all the necessary environments prior to its expiration.

For 24 hours after regenerating a new Client Secret, you will temporarily have access to two Client Secrets—your old one and your new one. After 24 hours, you will only have access to the new Client Secret for your application.

Configuration Reload

Overview

Use cases

With this event, you can make on-the-fly changes to the user experience. For example:

How it works

You can load the configuration changes via a new instance event. Here’s an example:


var newConfig = {
  advancedPermissions: {
    // new permissions
  }
}

bee.loadConfig(newConfig)

Introduction to Beefree SDK

Welcome to the Beefree SDK technical documentation!

What is Beefree SDK?

  • Template catalog: A design template catalog that integrates industry best practices to support end users in quickly getting across the finish line with their creations and achieving quick design wins.

  • AI Writing Assistant: A helpful AI assistant to help end users write their design content.

Quick Start

Take the following steps to get started with Beefree SDK in a few minutes:

  1. Add your credentials, the Client ID and Client Secret from step three, inside the placeholders in the code.

Beefree SDK's Embeddable Builders

Learn more about our three embeddable builders.

File Manager

Customize Your Application with AddOns

Learn more about how our builder AddOns can help you customize your application's offerings.

Content Services API and Template Catalog API

The Template Catalog API enables you to incorporate design templates into your application. With this API, you can browse, retrieve, and utilize a variety of pre-designed templates to enhance your user's content creation experience. It gives you the flexibility to offer customized design solutions directly within your platform.

Sample Code

Browse our sample code to experiment and gain hands-on experience. Get up and running quickly with a simple implementation.

Developer Essentials

About this documentation

These products share the same, unique combination of design flexibility and ease of use. Note that the majority of the documentation applies to all builders (and in many cases to the File Manger too), unless otherwise specified.

Allows to exchange data with Beefree SDK using a UI layer you control. See the “” page for the complete reference.

This should contain a structure object with the form data. See “” for further details.

Enables commenting on content blocks and rows. See for further details.

In this article, we will discuss how to sign up for an account in the , create an application, and obtain your Client ID and Client Secret.

The first step to embedding Beefree’s visual builders in your software is to.

Take the following steps to sign up for a Beefree SDK account and subscribe to the :

Navigate to the .

Note: If you already have an account, navigate to the .

Important: Keep in mind that Beefree SDK will not change you for using the Free plan. However, there are charges related to . Ensure you review our plans and familiarize yourself with these cost structures as you proceed to use the Free plan.

Once that’s done, you will be able to . Your dashboard will look like the following image.

With your Client ID and Client Secret, you can use our to experiment with a simple integration of Beefree SDK. You can also get started with .

Log in to the .

Create

When you load a Beefree application inside the host application, you pass a with multiple sections that define the characteristics of the UI, UX, and available elements. However, there are cases when you may want to reload this configuration without the need to reload the Beefree application. In these cases, you can use a specific event to update the configuration while the editor is open.

Updating available categories for

Refreshing a for authorization

Changing for the current user

Updating settings for the editor’s

Beefree SDK is an embeddable no-code , and builder. It enables your end users to achieve their design goals without writing a single line of code. By embedding Beefree SDK into your application, you'll provide your end users with access to a full suite of design features that include the following and more:

Email builder: A creation environment that helps end users quickly create beautiful emails. This environment supports your end users in following email creation best practices recommended by industry experts.

Page builder: A creation environment that empowers end users to build visually stunning landing pages. They can use a landing page as a link for a call-to-action (CTA) inside emails, to embed forms and capture information, or to create standalone pages.

Popup builder: The that provides end users with the tools they need to build compelling popups that capture attention.

File manager: A tool to (images, PDFs, and so on).

These builders can easily integrate into your application in minutes. Browse this documentation's latest and implementation guides to get started.

Create an account to access the and obtain your credentials.

to get started. Beefree SDK offers a generous Free plan that includes each builder type mentioned in the previous section.

Create an application and .

Clone the , which includes the code for email and popup builder implementations.

Once the email builder, or popup builder, depending on which environment you chose, opens, you can start experimenting with the SDK's configuration by customizing the in the beeConfig section of the code.

You can also customize the SDK's configuration inside the under the of the application you created.

Note: Visit the for a comprehensive list of features and the plan type they correspond to.

In addition to our drag-and-drop editors, we also offer a standalone application, which can be used alongside any of the builders. The File Manager is specifically designed to simplify the organization and management of digital assets, which might happen outside of a content editing session. It is an image and document management user interface that can be launched as a standalone application. This allows your customers to quickly upload or manage assets, without having to load one of the builders.

Learn more about our and .

The allows you to perform a number of tasks (e.g. refreshing the HTML for a certain asset) and add features to your application (e.g. converting an email to a PDF document). We continue to release new API methods to help you enrich and personalize the content design experience for your customers.

Learn more about and .

Get your free Client ID and Client Secret in the to get started. Experiment with customizing a configuration in the playground. When you're ready, install Beefree SDK.

If you need support at any point throughout your integration, . We are here to support you along the way.

Beefree SDK Developer Console
Sign up for an account in the Developer Console
How to create an application
Obtain your client secret and client id
sign up for a Beefree SDK account
Free plan
Developer Console Sign Up page
Developer Console Login page instead
user and CDN overages
log into the Beefree SDK Console
Email Builder Application
Page Builder Application
Popup Builder Application
File manager Application
Sample Code
your own implementation of Beefree SDK
Beefree SDK Console
development applications
Configuration parameters
Server-side options
Sample code
configuration object
Saved rows
Custom header
Advanced permissions
Content defaults
email
landing page,
popup
no-code email
no-code landing page
popup builder is a no-code environment
manage media assets
sample code
Developer Console
Create a new subscription
obtain your Client ID and Client Secret
beefree-sdk-sample-client repository
configuration parameters
Developer Console
Application configuration section
Beefree SDK pricing page
File Manager
File Manager
File Storage Options

AI Writing Assistant with Multiple Provider Options

Partner AddOns

Custom AddOns

Content Services API
Content Services API
Template Catalog API

Content Services: Export plain text, transform JSON to HTML, and manage brand styles.

Template Catalog: Add templates to your application.

AI Collection: Use the AI collection to get metadata, SMS, and summary text.

Full-stack application built with NextJS

Official NPM package of Beefree SDK

A simple HTML sample client to start playing with Beefree SDK

Beefree SDK simple React starter

Templates to accelerate the set-up of your Beefree SDK integration.

Explore methods

Developer Console

Developer Console

Playground

Install Beefree SDK

Configuration Parameters

Create an Application

Authorization Process

contact us

File Manager

Storage Options

Configure Your AWS S3 Bucket

Content Dialog
Passing forms to the builder
Commenting

Methods and Events

Instance Methods

Note: If initializing a File Manager application, the only supported method is beePluginInstance.start() without parameters.

Assuming that beePluginInstance is the instance of your embedded builder application, here are the methods you can call:

If you use a paid plan, you can hide the top toolbar and control the builder from your application’s user interface. For example, it’s up to you at that point to have buttons above or below the builder. Here’s some useful methods for this scenario:

Instance Events

The top toolbar displayed by default within the builder contains buttons that trigger certain actions. These are the callbacks that are triggered when the buttons are clicked.

Authorization Process

Authorization Process Overview

Beefree SDK Client-side Configuration

Beefree SDK Server-side Login

Important: Do not put your Beefree SDK credentials in client-side code.

The Beefree SDK system uses OAuth2 as the authorization framework.

Example

The following code sample displays an example JSON response.

The Beefree SDK authorization service will return a temporary access token if the authentication is successful. The client application can use the full response that contains the token to start or refresh a Beefree SDK session.

The token you receive from the authorization server should be passed to the BeePlugin.create(...) as it is. We strongly suggest not altering it in any way. Also, don’t rely on the token response's content or structure. If you do, any change to the schema could make your integration stop working.

The token expires after 5 minutes for security reasons. Beefree SDK will refresh an expired token automatically for 12 hours without re-authenticating the application. Beefree SDK will trigger the onError callback when the token can't be refreshed automatically.

The following code sample displays an example of how to call the Beefree SDK endpoint, obtain a token, and then start it.

Ensure to call the authorization endpoint server-side to protect your credentials.

Beefree SDK will keep this session alive for 12 hours from the login. After 12 hours, you have to manage the token expiration, as follows:

  1. Obtain a new token via the new authorization endpoint.

  2. Inject the token obtained from step one via the updateToken method. Reference examples of this in the following section.

The following code example shows how to inject the token in the current Beefree SDK instance:

The following code example displays how to get the current JSON from the expiration error:

Error Management

When you set up an onError callback you will get the error object as a parameter.

From that object, you can grab the code property and use it as explained in the table below.

Handling error management

The following code samples display how to handle the 5101 and 5102 errors.

Error management error 5101

Error management 5102

Error Responses

Example error response for unsupported media type Only Content-Type: application/json is allowed.

Example error response for disabled apps. Contact support if you encounter this error.

Method
Description
Method
Description
Event
Description
Returned values

The Authorization Process is an important step throughout your . This steps validates your Beefree SDK credentials and provides you with a token. Take the steps outlined in this document to ensure you accurately complete the authorization process.

Beefree SDK requires the host application to pass a container parameter in the This is the only required parameters for the configuration.

The following code sample shows an example of this parameter in the .

To initialize your instance of the Beefree SDK builder, call the /loginV2 endpoint shown in the sample code below with your Client ID, Client Secret, and UID. The Client ID and Secret are available on the application details page of the . UID represents your user as described in .

Reference to learn more about UID.

Note: When a refreshable token expires, Beefree SDK receives a and attempts to refresh it automatically. 401 errors are expected and part of the process.

Once you obtain the token, the object is passed to Beefree SDK to set up your customization options, for example setting the editor’s language to “Spanish”.

Then, you can use Beefree SDK methods to on your page.

Code
Message
Detail

Example error response for an invalid UID. Look at the properties of .

Example error response for invalid credentials. Obtain your credentials using the .

beePluginInstance.preview()

Triggers the message preview behavior within the builder.

beePluginInstance.togglePreview()

Open/close the message preview behavior within the builder.

beePluginInstance.toggleStructure()

Controls the visibility of the structure outlines in the message editing portion of the builder.

beePluginInstance.save()

Invokes the onSave callback function. The application will pass two files to the function: a JSON file with the message structure (for later editing) and a ready-to-send HTML file.

beePluginInstance.saveAsTemplate()

Invokes the onSaveAsTemplate callback function. The application will pass to the function a JSON file with the message structure (for later editing).

beePluginInstance.send()

Invokes the onSend callback function. The application will pass to the function a ready-to-send HTML file. Important: This callback is only compatible with the email builder.

beePluginInstance. toggleMergeTagsPreview()

Controls the visibility of sample content for merge tags in the message editing portion of the builder.

var config = {
    container: 'string'
}
POST /loginV2 HTTP/1.1
Host: auth.getbee.io
Accept: application/json
Content-Type: application/json
{
“client_id”: YOUR_CLIENT_ID,
“client_secret”: YOUR_CLIENT_SECRET,
“uid”: uid of choice
}
{
    "access_token": "...",
    "v2": true
}
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
  if (req.readyState === 4 && req.status === 200) {
    // Obtain token
    var token = req.responseText;
    // Call create method and pass token and beeConfig to obtain an instance of Beefree SDK
    BeePlugin.create(token, beeConfig, function(beePluginInstance) {
	// Call start method of beefree SDK instance
	beePluginInstance.start(template); // template is the JSON to be loaded in BEE
    });
  }
};

// This is a sample call to YOUR server-side application that calls the loginV2 endpoint on BEE the side
req.open(
	'POST', 	// Method
	'/YOUR_BACKEND_TOKEN_ENDPOINT', // your server endpoint
	false 		// sync request
);
// obtain a new token with a new LoginV2 call
// update the token in the current Beefree SDK instance
beePluginInstance.updateToken(token);
onError: function (error) {
  var code = error.code
  var detail = error.detail

  // the template the user was working on before the error occurred
  var currentJson = error.template
  ... 


  beePluginInstance.updateToken(token);
  // the beePluginInstance comes from the BeePlugin.create 
  ...

5101

Expired token cannot be refreshed

You need to do a new login and update the token in the current Builder instance using updateToken method.

5102

Expired token must be refreshed

You need to do a new login and create a new Builder instance using the new token, BeePlugin.create() and the current JSON template present in this event

Example scenarios:

  • The version is outdated

  • Beefree SDK releases a security fix and every client must refresh

onError: function (error) {
 var code = error.code
 var detail = error.detail
 switch (code) {
   case 5101: // re-login and update token in the beeInstance
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
 if (req.readyState === 4 && req.status === 200) {
   // Obtain token
   var token = req.responseText;
   // Call update method and pass the new token existent BeePlugin instance
   BeePlugin.updateToken(token);
 }
};
req.open(
 'POST',  // Method
 '/token',  // The server side endpoint that calls BEE REST auth endpoint
 false   // sync request
);

     break
   case 5102: // re-login and create a new beeInstance
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
 if (req.readyState === 4 && req.status === 200) {
   // Obtain token
   var token = req.responseText;
   // Call update method and pass token and beeConfig to obtain an instance of BEE Plugin
   BeePlugin.create(token, beeConfig, function(beePluginInstance) {
     // Call start method of bee plugin instance
     beePluginInstance.start(template); // template is the json to be loaded in BEE
   });
 }
};
req.open(
 'POST',  // Method
 '/token',  // The server side endpoint that calls BEE REST auth endpoint
 false   // sync request
);
     break
 }
},
onError: function (error) {
 var code = error.code
 var detail = error.detail
 switch (code) {
   case 5101: // re-login and update token in the beeInstance
...
   case 5102: // re-login and create a new beeInstance
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
 if (req.readyState === 4 && req.status === 200) {
   // Obtain token
   var token = req.responseText;
   // Call update method and pass token and beeConfig to obtain an instance of BEE Plugin
   BeePlugin.create(token, beeConfig, function(beePluginInstance) {
     // Call start method of bee plugin instance
     beePluginInstance.start(detail.template); // the template the user was working on before the error occurred
   });
 }
};
req.open(
 'POST',  // Method
 '/token',  // The server side endpoint that calls BEE REST auth endpoint
 false   // sync request
);
     break
 }
},
{
  "code": 5001,
  "message": "Unsupported media type 'application/x-www-form-urlencoded'",
  "status_code": 415
}
{
  "code": 5005,
  "message": "Invalid UID",
  "status_code": 400
}
{
  "code": 5002,
  "message": "Unable to authenticate with provided credentials.",
  "status_code": 401
}
{
  "code": 5003,
  "message": "Application is disabled.",
  "status_code": 403
}
Beefree SDK installation process
client-side configuration.
client-side configuration
Beefree SDK developer portal
How the UID parameter works
How the UID parameter works
401 error
configuration parameters
start your instance and display the editor
UID parameter
authorization process

beePluginInstance.start(templateToLoad)

beePluginInstance.load(template)

Loads the JSON template string specified in the template parameter.

beePluginInstance.reload(template)

Loads the JSON template string specified in the template parameter. Unlike beePluginInstance.load(template), the reload method does not trigger a loading dialog. This method helps quickly reload a template seamlessly for specific use cases, such as using a custom undo/redo feature or injecting custom content in real-time.

onSave

Fired when the Save button is clicked.

JSON and HTML documents

onSaveAsTemplate

Fired when “Save as template” is clicked.

JSON document

onAutoSave

Fired automatically based on autosave configuration parameter value.

JSON document

onSend

Fired when the “Send a test button” is clicked.

HTML document

onLoad

Fired when the JSON is loaded in the builder.

JSON document

onError

Fired every time an error occurs.

Error message

onPreview

Fired every time the preview button is pressed.

Status (Boolean)

onTogglePreview

Fired every time the preview is opened or closed.

Status (Boolean)

onChange

Fired every time a change on the message is performed.

onRemoteChange

Triggers during co-editing sessions. It notifies the frontend about changes made by other users in the session.

Note: This is for users B, C, D, and so on, while onChange is specific to the main user, User A, making the change.

onComment

Fired every time a thread or comment changes.

onFilePickerInsert

Object with file info

onFilePickerCancel

None

Manage Users

Learn how to manage users within the Beefree SDK Developer Console.

Manage users in the Console

You can invite additional users to your Beefree SDK Console. To do so, go to Manage users from the personal menu in the top right.

The user that initially created the account is identified as the account owner and can add users from this page.

Additional users will be identified as admins. The owner may limit access to certain production apps when creating or editing an admin.

The account owner has these additional privileges, compared to admins:

  • add, edit or delete users, as described above;

  • change the company’s name, also in Settings & Security.

How the UID parameter works

Properties

The UID parameter:

  • Has a minimum length of 3 characters.

  • Can contain letters from a to z (uppercase or lowercase), numbers and the special characters “_” (underscore) and “-” (dash).

  • Make sure that you pass a string, not a numeric value. So even if your UID is a number, pass "12345" and not 12345.

Unique identifier

It uniquely identifies a user of the application. When we say “uniquely”, we mean that:

  1. Images (and other files) used by the user when creating and editing messages will be associated with it and not visible to other users (when using the default storage).

Users, sub-users and client accounts

It’s entirely up to you, as the host application, to determine when to use a new UID at the time you initialize the editor for your users. In 99% of the cases: one UID = one CLIENT ACCOUNT in your application. Sub-users of a client account typically share the same UID.

A quick example to help you visualize this.

  • We use the UID in the File Manager to identify where images will be stored

  • You typically don’t want client ABC to see client XYZ’s images

  • So you will use a certain UID for client ABC and another UID for client XYZ

  • If there are 5 users within client ABC account in your application, however, it’s OK that they see the same images, since they are likely collaborating on the same emails or landing pages, so you don’t need to use a different UID: all 5 will share the same UID.

Development Applications

uid: 'test1-clientside' // production uid and development application uid

Important: If you use a unique uid across multiple development applications, it will only be counted once. Similarly, if you use a unique uid across multiple production applications, it will only be counted once.

Sample Code

A prototype in 2 minutes

Using this simple, client-side example, you can literally try out Beefree SDK in 2 minutes…

  1. Create a new application: you will find your keys in the project’s details page

  2. Open index.html with your favorite code editor

  3. Locate client_id and replace “YOUR_CLIENT_ID” with yours

  4. Locate client_secret and replace “YOUR_CLIENT_SECRET” with yours

  5. Save the file

Embedding the builder

Before using the code samples listed below in a production environment, please consider the following:

  1. The client-side sample is not safe for a production environment (it was conceived as a quick way for you to test the application). Someone would be able to easily steal your application credentials (just viewing the source code of the page). To keep those credentials safe, authorization must be managed sever-side, as the .NET sample does.

  2. These code samples use a limited set of features and configurations: they can be a good starting point to start developing around Beefree SDK, but they are not an exhaustive showcase of everything you can do.

  3. All sample code is provided “as is”: it may contain defects, it may not follow best practices (although we try to!), and it should only be considered as point of reference.

GitHub Repositories

Starts the builder, loading the templateToLoad JSON string with the template structure (if specified). If using the NPM package, you have additional options to pass here as defined on the .

Read more about onRemoteChange and . Read more about .

Fired when the “insert” button is clicked. This property must be defined by the host application for the insert button to appear within the user interface. Available for only.

Fired when the “X” button is clicked. This property must be defined by the host application for the cancel “X” button to appear within the user interface. Available for only.

turn on , using tokens provided by mobile apps like Google Authenticator or Authy. 2FA can be enabled either for specific users, or account-wide from the Settings & Security section in the personal area ();

is based on the concept of unique users of the editor. A unique user is one that is identified by a unique UID, as described below. The system counts unique UIDs within a billing period, and resets the count to zero at the start of the next billing period.

Is an alphanumeric string passed to Beefree SDK throughout the .

The UID should not be Personal Data, as indicated in the Beefree SDK License Agreement. Further information about how your use of a Beefree SDK service relates to the EU’s General Data Protection Regulation (GDPR) may be found . Our Privacy Policy, which describes the processing activities carried out by Beefree SDK as Data Controller, is available .

It will be counted as a unique user for .

UIDs in production are counted separately from UIDs in a . For example, if you have the following UID in both a production and development application, the unique UID will be counted twice toward your plan's allotment.

In this scenario, Beefree SDK will treat these as two distinct users, and count this UID twice—once for each environment. Reference for more information on Beefree SDK plan types and their corresponding uid allotments.

Obtain your application keys (Client ID and Client Secret) (there is a free plan).

the client-side sample code.

Open it in your browser and get creative

Make sure you first and get your application keys (Client ID and Client Secret).

Name and Link
Description
Stack
NPM page
Read More
tracking changes
collaborative editing
Read More
File Manager applications
File Manager applications
two-factor authentication
learn how to set up 2FA for your account
Pricing for Beefree SDK
server-side authorization process
here
here
monthly billing purposes
development application
Usage-based fees
by signing up here
Download
sign up

Demonstrates integrating the Beefree SDK into a full-stack NextJS application with database integration and user authentication.

NextJS, Python, SQLite

The official NPM package for Beefree SDK, complete with installation instructions and configuration tips.

Typescript

Code from our latest webinars showcasing how to use Saved and Synced Rows feature within the Beefree SDK.

ReactJS

A collection of free email, landing page, and popup templates designed for easy integration with the Beefree SDK.

JSON

A simple HTML app demonstrating the basic implementation of the Beefree SDK for client-side applications.

HTML, JavaScript

Release Candidate Environment

Learn more about what the Release Candidate Environment is, how to get started with it, and how to integrate it into your development life cycle.

Overview

A Release Candidate (RC) Environment is a crucial part of the deployment workflow designed to provide Enterprise customers with additional stability and assurance before a feature reaches full production. Unlike standard releases, which immediately roll out updates to all users, the RC environment acts as an intermediate step. It allows selected customers to access a production-ready version of the latest code before it becomes available to the wider user base. This controlled rollout process mitigates risks associated with unforeseen bugs and ensures a smoother transition. It also mitigates the risk of regressions and rollbacks. By implementing an RC environment, Beefree SDK enables Enterprise customers to conduct their own QA testing on new features, reducing potential disruptions when updates go live.

Benefits of the Release Candidate Environment

The following list includes some of the most commonly referenced benefits of utilizing the Release Candidate Environment.

  • Risk Mitigation: Enterprise customers can validate new updates in a stable, production-like setting before they are fully deployed.

  • Enhanced Quality Assurance: QA teams can test features in real-world scenarios, catching regressions before broader release.

  • Predictable Deployment Schedule: A structured release cadence (RC → General → Delayed) ensures smoother rollouts with fewer surprises.

  • Reduced Need for Rollbacks: The phased approach minimizes critical failures in production, lessening the necessity for emergency rollbacks.

  • Customer Control: Enterprise customers have additional time to adjust workflows and prepare internal documentation before full adoption.

How the Release Candidate Environment Works

The RC environment operates within a structured release cycle, ensuring that new updates are progressively introduced. When a new feature is ready for release, it is first deployed to the RC environment. Only Developer applications linked to the RC version can access this release. After a one week waiting period—assuming no major regressions are found—the update moves to the stable version, making it available to non-Enterprise customers. After a week, the update reaches the Delayed version, which is linked to Enterprise Production applications. This phased approach ensures that issues are detected early while maintaining a predictable release schedule.

Requirements for Accessing the Release Candidate Environment

Reference the following requirements for accessing the Release Candidate Environment prior to getting started with it.

  • Only available to Enterprise plan customers with Developer applications.

  • Customers must be aware that while the RC version is production-ready, it is still subject to final testing and potential bug fixes.

How to Use the Release Candidate Environment

This section discusses how to access the release candidate environment and use it.

Instructions

To get the HTML version of a Beefree SDK message in the Release Candidate (RC) environment, you will need the following:

  1. The Beefree SDK Support Team will provide you with a username and password (we will need a user’s email address to enable this).

  2. A Beefree SDK JSON source file.

  3. The ability to perform a call to a REST API. You can do that in different ways:

    • Applications like Postman or Insomnia

    • Use the “curl” command in a shell

    • With a custom script

The call should be addressed to one of the following endpoints, depending on the HTML output that you wish to receive back:

  • https://stg-bee-multiparser.getbee.io/api/v3/parser/email - To receive HTML for Email

  • https://stg-bee-multiparser.getbee.io/api/v3/parser/pages - To receive HTML for Webpages

  • https://stg-bee-multiparser.getbee.io/api/v3/parser/amp4email - To receive AMP for Email

  • https://stg-bee-multiparser.getbee.io/api/v3/parser/popup - To receive HTML for Popups

  • https://stg-bee-multiparser.getbee.io/api/v3/parser/text - To receive the plain text version of the message

Additional Requirements

Reference the following additional requirements for using the Release Candidate Environment.

  • It has to be a POST call.

  • The Beefree SDK JSON has to be sent in the body of the REST call.

  • It must include a Basic Authentication header in which you specify your username and password.

Upon success, the body of the response will contain the desired output. In case of an error, the response's body will contain the error details.

Please do not use this method in production. This is an RC environment, and it may change its behavior in the future.

Example

curl --request POST \
--url "https://stg-bee-multiparser.getbee.io/api/v3/parser/email" \
--user "USERNAME:PASSWORD" \
--header "Content-Type: application/json" \
--data @"JSON_FILE.json" \
--output "OUTPUT.html"

Legenda

The following fields are required in the example above.

  • USERNAME and PASSWORD are your credentials provided by the Beefree SDK team.

  • JSON_FILE.json is the Beefree SDK source file.

  • OUTPUT.html is the desired output file.

Additional Considerations

The Release Candidate Environment is specifically designed for frontend features, the JSON-to-HTML parser, and the JSON Bumper. Backend services are not currently covered under this process. Bug fixes, while critical, may bypass the RC process when necessary to expedite resolutions. By adopting the Release Candidate process, Beefree SDK provides Enterprise customers with greater predictability, quality assurance, and peace of mind in managing their integrations.

Email Builder

Learn more about what Beefree SDK's embeddable no-code email builder is, how to test it out, and how to integrate it into your SaaS application.

Introduction

Beefree SDK’s embeddable no-code email builder offers a solution that empowers creators to design visually striking, high-converting emails with ease. By removing technical barriers, it enables teams to build, customize, and launch campaigns faster, maximizing results without the need for hard coding. This allows marketers, designers, and content creators to focus more on designing and refining their email strategies, rather than spending time coding emails from scratch.

What is the Email builder?

The email builder within Beefree SDK is a no-code drag-and-drop editor that enables end users to design beautiful emails that resonate with their audiences. Within the email builder, end users have access to both simple email creation tools, such as adding content blocks, and advanced email creation tools, such as dynamic content, merge tags, display conditions, html blocks, and so on. Beefree SDK’s email builder was created with email marketers, copywriters, designers, and other content creators in mind. It provides them with an environment to intuitively create emails without having to write a single line of code, while being able to easily export their design’s HTML code if they ever need it. Overall, Beefree SDK’s email builder democratizes the email creation process by providing a no-code route for your application’s end users to create visually stunning and appealing emails for their audiences.

In the following GIF, you can see an example of differently customized experiences.

Email builder capabilities

On a foundational level, the Email builder includes the capabilities detailed in the following table.

Foundational feature
Description
Image

The stage where the end user drags and drops the content tiles and designs their email.

The content types end users can drag and drop as tiles onto their stage to add to their designs. The Free email builder comes with the following Content tiles (more are available on higher plans):

  • Title

  • Paragraph

  • List

  • Image

  • Button

  • Divider

  • Spacer

  • Social

  • Dynamic content

  • Icons

  • Table

When an end user clicks on content on the stage, the Content properties will appear in the sidebar. This is where they can customize the content on their stage. Customization options include Text color, Link color, Line height, Letter spacing, Block options, and more.

End users can drag and drop Rows onto the stage, too. Rows store groups of content within the email design. An end user needs to drag and drop a row onto the stage before they can add Content tiles. Once the rows are added, they can drag and drop Content tiles onto them.

Users can customize Rows with Row properties. Customizable options include Backgrounds, Borders, Column Structure, and more.

Settings enable end users to apply general customization options to their email designs.

A few of the actions included with the email builder include:

  • Preview

  • Send test

  • Save as Template

The text editor appears when you click on a text-type content on the stage. The options include adding Merge tags, Special links, and more.

Test out the Email builder

There are various tools you can use to experiment with and test out the Email builder to learn more about it.

The following resources are a great start to learn more:

    • You do not need a Client ID or Client Secret to experiment with the Email builder in this environment.

    • You do not need a Client ID or Client Secret to experiment with the Email builder in this environment.

Integrate the Email builder

To integrate the Email builder, take the following steps:

  1. Obtain your Client ID and Client Secret

  2. Authenticate

Installation and Fundamentals

Install Beefree SDK to get started with your implementation.

Add JavaScript Library

Introduction

Beefree SDK is an embeddable no-code content builder that enables your end users to build stunning marketing assets, such as emails, landing pages, and popups, without writing a single line of code.

The following list includes a few key features within Beefree SDK:

  • Drag-and-drop visual editors

  • File manager

  • Multi-user collaboration

  • Responsive design capabilities

  • Extensive template library

  • Secure authentication workflow

This guide provides comprehensive instructions and best practices for implementing Beefree SDK.

Getting Started

This section discusses how to get started with Beefree SDK.

Prerequisites

Prior to integrating Beefree SDK, ensure you have:

  1. Node.js (v14 or higher) installed.

  2. A modern web browser (Chrome, Firefox, Safari, Edge).

Local Development Setup

To test the SDK locally before production deployment:

  1. Clone the demo repository:

  2. Install dependencies:

  3. Configure environment:

  4. Start the dev server:

  5. Access at http://localhost:8081

Package Installation

Using npm

Using Yarn

Package Details:

  • TypeScript Support: Included

  • License: Apache-2.0

Authentication Process

This section discusses the authentication process.

Server-Side Authentication

The secure authentication flow requires a server-to-server call to obtain a JWT token. This process ensures your client credentials remain protected.

Authentication Endpoint

Required Parameters

The following table lists and descibes the required authentication parameters.

Example Implementation (Node.js)

Important Notes:

  • The UID must be consistent between authentication and SDK configuration.

  • Tokens are valid for 12 hours.

  • Ensure client_secret and client_id aren't exposed in the client-side code.

JSON Authorization Response

Beefree SDK Initialization

This section discusses how to initialize Beefree SDK.

Container Setup

Create a container element in your HTML where the editor will render:

Configuration Options

Beefree SDK requires a configuration object with the following essential property:

Full Configuration Reference

The following table explains the container property.

Working with Templates

Loading a Template

Initialize the editor with a template JSON object:

Template Management Methods

The following table lists template management methods that are important for getting started.

The instance method bee.start(template) does not need to be called immediately after create. In a SPA (Single Page Application) or React app, you can create the editor in a hidden global state but then call the start method when the template is selected and available. The application loads quickly when all steps are completed consecutively. However, by separating the loading workflow into two parts, the end-user will perceive loading in a fraction of the overall time. Remember, if the client_id belongs to a File Manager application, bee.start() can be called without any parameters.

Advanced Features

Token Refresh Implementation

Implement automatic token refresh to maintain uninterrupted sessions:

How to use:

  1. Get a fresh token from your backend

  2. Pass it to updateToken()

Collaborative Editing

Enable real-time collaboration with these additional methods:

How to use:

  1. Generate a unique session-id on your server

  2. Call join() with the same ID for all collaborators

Troubleshooting

The following list includes the most common issues and steps for troubleshooting them.

  • Authentication Failures

    • Verify client_id and client_secret

    • Ensure UID matches between auth and config

    • Check network connectivity to auth.getbee.io

  • Editor Not Loading

    • Confirm container element exists

    • Verify container ID matches config

    • Check for JavaScript errors in console

  • Token Expiration Issues

    • Implement onTokenExpired callback

    • Test token refresh flow

Frequently Asked Questions

Q: Can I use the SDK without server-side authentication? A: While possible for testing, production implementations must use server-side auth for security.

Q: How do I customize the editor's appearance? A: The SDK supports UI customization through configuration options. Refer to the advanced documentation.

Q: What happens when the token expires? A: When your token expires after 12 hours:

  1. The editor will become unresponsive

  2. You must proactively:

  3. Best practice is to refresh tokens before expiration (recommended at 11 hours)

Conclusion

This comprehensive guide covers all aspects of Beefree SDK integration, from initial setup to advanced features.

Remember to:

  • Always use server-side authentication

  • Implement proper token refresh logic

  • Test thoroughly before production deployment

  • Monitor for SDK updates and new features

Set up two-factor authentication

Overview

When 2FA is set up, users will need to:

  • use their device and the app to generate a token and log in.

Setup for Account owners

If you’re an account owner (i.e. the user who created the Beefree SDK account), you may require all account users to use two-factor authentication to log in. To do so, go to the Setting & Security section in your personal area and enable Require two-factor authentication at login.

After saving the setting, you will be prompted to scan a QR code with a 2FA application to generate a security token to complete the setup.

When this setting is ON:

  • every user will need to enter an authentication token, generated with a 2FA mobile app, to log into the account;

  • when you create a new user, the 2FA toggle will be set to ON by default.

When adding or editing a user, you may also decide to turn on or off 2FA for that user, in order to:

  • turn on 2FA, when 2FA is OFF at the account level;

  • turn off 2FA, when 2FA is ON at the account level.

Setup for Account admins

If 2FA is OFF at the account level, additional users, i.e. admins, can turn on 2FA for themselves, for their peace of mind. They can go to the “Profile” section of their personal area and turn it on.

Note: Instead, if 2FA is ON at the account level, admins cannot turn it off from the “Profile” page and must contact their account owner.

Contact the Beefree SDK team using this and request access to the Release Candidate Environment.

The program does not allow for customized release schedules per customer; all Enterprise customers follow the same cycle. Customized release schedules are available on VPC plans. For more information, contact the Beefree SDK team using this and request more information about customized release schedules with VPC plans.

Email marketing remains one of the most effective digital channels, delivering an impressive —for every $1 spent, businesses see an average return of $36. In a landscape where personalization and quick execution are critical, no-code email builders like Beefree SDK make it easier for teams to create and optimize these high-performing, targeted campaigns. Personalized campaigns, which , are more easily executed with tools that free teams from coding, allowing them to concentrate on strategy and design. By simplifying the email creation process, Beefree SDK enables creators to spend less time on technical tasks and more time driving results through impactful, strategic designs.

Embedding Beefree SDK’s email builder is quick and easy. Once you embed the SDK within your application, you’ll already have access to a host of default features that are instantly available to your application’s end users. In addition to these default features, Beefree SDK also offers a variety of optional features you can easily activate by simplifying toggling them on in the Developer Console. If you want to customize the email builder further, you can also integrate with our, , add , and much more. You can reference of the level of customization that is possible with Beefree SDK.

Note: Additional capabilities and features can be added on top of these through , toggle on options in the , , , Content Services API, and more.

You do need a to experiment with the Email builder in this environment.

in the

within the Developer Console

Use the to and embed Beefree SDK

Visit to learn more about installing Beefree SDK.

Congratulations on ! Now it’s time to install it. The first step is to add the Beefree SDK library to your application. You can use our to add it. This guide discusses how you can set up a local environment, install the package, authenticate, and get started with Beefree SDK.

A Beefree SDK .

You can install Beefree SDK using either or :

Repository:

Parameter
Type
Description
Example
Property
Type
Required
Description

Reference the in GitHub for example templates.

Method
Description
Example

Q: Where can I find sample templates? A: Visit our for examples.

Setting up two-factor authentication will keep your developer account extra secure. Two-factor authentication means that users will need to provide two different identifications to log in to their : their regular login credentials, and a token generated by a two-factor authentication app.

download a two-factor authentication app to their mobile device (e.g. , , , and others);

SDK Sample: Full-stack NextJS App
Beefree SDK: Official NPM Package
SDK Webinar: Saved and Synced Rows
Beefree SDK: Email and Landing Page Templates
SDK Sample: Simple Client HTML App
contact form
contact form
ROI of 3600%
boost click-through rates by 28.57%
APIs
AddOns
custom CSS
this live demo as an example
AddOns
developer console
Advanced Options
Template Catalog API
Playground
Coral Demo
GitHub Repository
Client ID or Client Secret
Create your Beefree SDK account
Developer Console
Create an email application
npm package
install
Installation and Fundamentals
git clone https://github.com/BeefreeSDK/beefree-sdk-npm-official.git
npm install
# or
yarn install
cp .env.sample .env
npm start
npm install @beefree.io/sdk --save
yarn add @beefree.io/sdk
POST https://auth.getbee.io/loginV2

client_id

string

Your application client ID

"abc123-client-id"

client_secret

string

Your application secret key

"xyz456-secret-key"

UID

string

Unique user identifier

"user-12345"

var req = new XMLHttpRequest();
req.onreadystatechange = function() {
  if (req.readyState === 4 && req.status === 200) {
    // Obtain token
    var token = req.responseText;
    // Call create method and pass token and beeConfig to obtain an instance of BEE Plugin
    BeePlugin.create(token, beeConfig, function(beePluginInstance) {
	// Call start method of bee plugin instance
	beePluginInstance.start(template); // template is the json to be loaded in BEE
    });
  }
};

// This is a sample call to YOUR server side application that calls the loginV2 endpoint on BEE the side
req.open(
	'POST', 	// Method
	'/YOUR_BACKEND_TOKEN_ENDPOINT', // your server endpoint
	false 		// sync request
);
{
    "access_token": "...",
    "v2": true
}
<div id="bee-plugin-container" style="width: 100%; height: 800px;"></div>
var config = {
    container: 'string'
}

container

string

Yes

DOM element ID for the editor

// After successful initialization
const template = {
  // Your template JSON here
  // Sample templates available at:
  // https://github.com/BeefreeSDK/beefree-sdk-assets-templates
};

bee.start(template);

load(template)

Load new template

bee.load(newTemplate)

reload(template)

Force reload template

bee.reload(updatedTemplate)

save()

Trigger save callback

bee.save()

saveAsTemplate()

Save as template

bee.saveAsTemplate()

// Refresh expired token (call before 12-hour expiry)
bee.updateToken(newToken); 
// Join a co-editing session
bee.join({ uid: "user-123" }, "shared-session-id"); 
// 1. Get a fresh token from your backend
const newToken = await fetch('/refresh-token');

// 2. Update the SDK instance
bee.updateToken(newToken);
Builder stage
Content blocks
Content properties
Rows
Row properties
Settings
Actions
Text editor
creating your first application
convenient NPM module
developer account
npm
yarn
Beefree SDK GitHub
beefree-sdk-assets-templates repository
template repository
Beefree SDK Console
Authy
Google Authenticator
Authenticator Plus

Embedding videos in a page

The Page Builder includes an expanded Video content block for optimized usage of videos on web pages. Videos are added inside an iframe via the HTML5 video tag.

There are multiple ways to add a video to a page built with Beefree SDK. Additional settings allow the video progress bar and loop playback to be turned on or off.

Embedded

The Embedded mode allows video playback inside the page. It requires the URL of a video hosted on YouTube, YouTube Shorts, or Vimeo.

Hosted video

Same as the embedded option, but the URL provided must point to a self-hosted video in MP4 format. Settings for hiding controls and loop playback apply as well. Please note that the player interface your visitors will experience might slightly vary based on the browser they use.

Thumbnail

As a fallback, you may also use the video block for generating a thumbnail, the same way the block works when building emails. Just enter the URL for a video hosted on YouTube, YouTube Shorts, or Vimeo. A thumbnail linked to the video will be created. You may also style the overlay play icon.

Supported Video Sources

  • YouTube (16:9 aspect ratio)

    • Public Videos

    • Unlisted Videos

    • Videos starting at a certain time

  • YouTube Shorts (16:9 aspect ratio)

  • Vimeo

    • Public Videos

    • Unlisted Videos

    • Cinemascope (21:9 aspect ratio)

Debugging the Beefree SDK Editor

Overview

How to Use

You can pass the debug parameter directly in your beeConfig object when initializing the editor. Alternatively, you can set or update it live using the loadConfig method—no need to refresh the editor.

Example (in beeConfig):

const beeConfig = {
  debug: {
    all: true,                 // Enables all debug features
    inspectJson: true,        // Shows an eye icon to inspect JSON data for rows/modules
    showTranslationKeys: true // Displays translation keys instead of localized strings
  }
};

Set it live (no refresh needed):

beeInstance.loadConfig({
  debug: {
    all: true
  }
});

Parameters

The debug parameter in the Beefree SDK configuration accepts the following parameters:

  • all (boolean): Enables all available debug options (inspectJson and showTranslationKeys). Use this during heavy debugging sessions.

When It's Useful

The debug parameter is particularly helpful in the following scenarios:

  • You're troubleshooting UI rendering issues tied to configuration JSON.

  • You need to inspect what exact data is being used for rows/modules.

  • You're working on translations and want to ensure correct keys are being used.

Naming conventions

Overview

Frequently used terms

  • Beefree SDK A toolkit that includes white-label, no-code builders for emails, landing pages, and popups. The toolkit also provides a range of components, APIs, sample code, and support services to help you seamlessly integrate into your software a content creation workflow that your customers will love.

  • Beefree application An instance of any of the no-code tools that can be embedded in your software. They include:

    • Email Builder

    • Page Builder

    • Popup Builder

    • File Manager

  • Beefree SDK Console A multi-user administration panel where you can sign up for a Beefree SDK subscription, manage the subscription, and create and configure a Beefree application within a subscription.

  • Production application An instance of a Beefree application used in your production environment.

  • Development application An instance of a Beefree application used for development, QA or staging environments. You can create multiple, development applications under a production application.

  • Host application Your software application, which will host one or more Beefree applications.

  • Beefree system The backend system that interacts with your Beefree application to provide services such as application authorization.

Development Applications

Learn about the different environments available through Beefree SDK and how to get started to with each.

Development Applications

Development applications are available with any Beefree SDK paid plan.

What is a Development Application?

A development application is a child application that is linked to your parent application within the Beefree SDK console. The purpose of these child applications is to create development, QA, or any other type of applications that you can merge your application’s changes to prior to pushing them to production. This empowers you to test new features, even on a higher plan, within a controlled environment prior to releasing them to your application’s end users.

How to Create a Development Application

You can create a development application within your Beefree SDK console. Prior to creating a development application, ensure you have a paid plan with Beefree SDK. Development applications are only available on paid plans.

To create a development application, take the following steps:

  1. Create a new application

Note: This creates a production environment for your application.

  1. Navigate to your dashboard where the new application is located

  2. Click the + next to Add a development instance

  1. Type in the name of your development application, for example “development environment” or “QA environment”

  1. Click Create

  2. View the new development application available in your Beefree SDK dashboard

Benefits of Development Applications

There are multiple benefits to utilizing development applications. A few of these benefits are the following:

  • Merge and test changes to your application prior to releasing them to your end users.

  • Create an environment for different contributors in your development cycle, for example QA Engineers, frontend developers, backend developers, and so on.

  • Access next tier Beefree SDK features in your development applications.

  • Create as many child development applications linked to your parent production environment as you’d like.

Important Considerations

Consider the information outlined in this section when working with development applications.

Testing next-tier features in your development application

Beefree SDK lets you explore higher-tier features in your development environment for testing purposes. However, these features cannot be deployed to production unless they are included in your current subscription plan.

Development apps inherit the same plan that your production app is on. If you wish to test features that are available on a higher plan, go the application details and click “CHANGE PLAN” in the upper right.

Usage-based fees on development applications

Workspaces

Overview

In user interfaces, a workspace is a parameter that changes the appearance, settings, and widgets available in an builder, to help the user to focus on what matters.

In Beefree SDK, workspaces are an optional parameter that can be used to provide an experience focused on context and purpose, and to facilitate the outcome of an editing session.

You can load the builder with a certain workspace, but workspaces can also be changed by the user when editing, on-the-fly.

Switching between workspaces might change:

  • content visibility on the stage

  • tiles availability in the content tab

  • available previews

  • outputs when saving a content

  • …and more!

Available workspaces

If no workspace is loaded at launch, the builder starts in its “Default” workspace.

We currently offer 3 additional workspaces, and we are planning to launch more as we evolve BEE and its capabilities.

These 3 workspaces revolve around the use of AMP content, and are provided so that you can tailor the experience of creating AMP emails in Beefree SDK.

default
mixed
amp_only
html_only

Stage message

HTML content

HTML & AMP content

HTML & AMP content

HTML content

Content tiles

HTML content tiles

HTML & AMP content tiles

HTML & AMP content tiles

HTML content

AMP sidebar properties

No

Yes

Yes

No

Available in preview

HTML content

HTML & AMP content

HTML & AMP content

HTML content

onSave callback files

HTML

HTML & AMP

HTML & AMP

HTML

Loading a template with AMP content

The onWarning is triggered

Template loads

Template loads

Template loads

Loading a template with HTML content only

Template loads

Template loads

Template loads

Template loads

Availability of the hide on AMP/HTML property

Not available

Yes

Yes

Yes

Behavior for hidden for HTML/AMP content

The onWarning is triggered

Both are visible

Only “hidden for HTML” content is visible

Only “hidden for AMP” content is visible

Starting the builder with a workspace

Here is an example of loading Beefree SDK with a “mixed” workspace:


type ClientConfig = {
  workspace?: {
    type:'default'|'mixed'|'amp_only'|'html_only'
  }
  // ....
}

const beeConfig: ClientConfig = {
  workspace:{
    type:'mixed'
  }
  // ....
}


//Create the instance 
function BeePlugin.create(token, beeConfig, (beePluginInstance) => { 
  //.... 
}

Switching workspaces

You can implement a workspace selector within your application, so that users can switch between workspaces, by using the loadWorkspace(type) method.

First, you need to define template files for the workspaces you want to propose, as JSONs:

{
  "type":"mixed"
}

Then, you can load those workspaces at runtime:

type Workspace = 'default'|'mixed'|'amp_only'|'html_only'

const req = url => fetch(url).then(r => r.json())
const loadWorkspace = async (workspace:Workspace) => {
  const { type } = await req(`https://example.com/workspaces/${workspace}.json`)
  beePluginInstance.loadWorkspace(type) 
}

And here is how to create a simple select to switch workspace:

<select id="workspace" onchange="loadWorkspace(this.value)">
<option selected="selected" value="">WORKSPACE</option>
<option value="default">DEFAULT</option>
<option value="mixed">MIXED</option>
<option value="amp_only">AMP_ONLY</option>
<option value="html_only">HTML_ONLY</option>
</select>

Workspace callbacks

After you load a workspace, the application will trigger one of these three callbacks:

Success

//SUCCESS 
onLoadWorkspace: function (workspace) {
  console.log(`workspace: ${workspace} has been loaded`);
},

Failure

//FAILURE
onError: function (error) {
 console.error('error: ', error);
},

Invalid workspace

{
 code: 1400, 
 name: "Invalid workspace type",
 message: "RANDOM : is not a valid workspace",
 details: "Available workspaces are: [ default,mixed,amp_only,html_only ]"
}

Use cases

The additional workspaces for AMP (AMP-only and HTML-only) can become helpful if you want to tailor the user experience of creating AMP emails, by adding:

  • a workflow where users decides if they want to create a standard message or an AMP-powered message (in the first case, AMP components will be hidden in the builder;

  • an option to switch between the HTML and the AMP editing of a message.

  • depending on the subscription plan that they are on (i.e. you could push users to a higher plan based on the ability to use AMP);

  • depending on the purchase of an optional feature (same);

  • only if they are “beta” customers, so they see it while keeping it hidden from the rest of your users.

Manage Subscriptions

This feature is visible to Beefree SDK account Owners.

Manage Subscriptions in the Console

We understand that each company has its own unique needs. For that reason, we offer the flexibility of adding multiple Beefree SDK subscriptions within the Developer Console. Through this option, you can take advantage of multiple subscriptions to our product for your teams, business units, and so on.

How to Add a New Subscription

You can create an additional subscription within the Beefree SDK Developer Console.

To achieve this, take the following steps:

  1. Navigate to your dashboard

  2. Click Add new subscription on the upper right-hand side of the screen

  3. Type a name for your next subscription and click Next

  4. Choose a plan and click Select plan

  5. Confirm the plan you selected

  6. Finalize your additional subscription

Popup Builder

Many digital marketing campaigns start with an attention-grabbing popup. In fact, many such campaigns include a popup, a landing page, and one or more emails.

  • A cool popup highlights something that the reader may be interested in

  • A landing page provides more information and includes some sort of signup form

  • Emails are sent to follow up.

Emails, pages, popups: three pillars of all sorts of digital marketing initiatives. Since Email Builder and Page Builder were already part of the Beefree SDK family, the natural next step was to create a Popup Builder. So here it is! This new version of the builder brings effortless popup creation inside your application.

Why Popups?

A popup is a small window that appears on a website visitor’s screen, asking for an email address in the most basic interaction or other actionable messages when using more sophisticated strategies (targeted promotions, social evidence messages, shopping cart recovery, etc.).

With this in mind, we have developed an embeddable solution for designing popups that you can easily deploy because:

  • it’s built from the ground up to integrate seamlessly with your application;

  • it’s easy to use, offers tons of design flexibility, and builds upon the same UX your customers already know from our Email & Page Builders;

Sample workflow

In terms of packaging the final output, Beefree SDK takes care of the Popup design and returns a solid HTML output ready to be injected on a website. On top of that, you can enrich the building experience by creating a workflow that will add to that output:

  • Showing/closing behavior (e.g. display after N seconds, exit intent)

  • “Additional” styles, for things like

    • Close button

    • Border radius

    • Drop shadows

The good thing: you can pass additional styles to your application, so they will reflect into the editing experience. You will then take the HTML produced by Beefree SDK and apply these styles for the final output.

Main features

Our drag&drop experience, loved by millions of users

There are over 4,500,000 sessions of our drag-n-drop email & landing page builders every month, across hundreds of applications around the world. Popup builder brings the same, great user experience that transforms non-designers in masterful content creators.

What you see is what you get...finally for Popups

You can load your customers' website home page as a background, so they can design a popup in the exact context where it will be used. And with Mobile design mode, your users are one click awaying to seeing and perfecting how the popup looks on mobile devices.

Designed to fit any configuration workflow

Position, size, background color, and more. Customize the builder each time to match how your customer configured their popup inside your application. What this means for you is flexibility, peace of mind, and implementation speed.

Ready-to-go HTML output

Get a solid HTML output ready to be injected on your customer’s website. Your application controls the display and behavior conditions, Beefree SDK takes care of the content.

Drop personalized content in popups, in minutes

Personalization is the secret weapon to attract any audience. With Merge tags and Display conditions your customers can show the right message at the right time, with use cases like product recommendations and personalized discount codes.

Speed up the creation process with shared and pre-made assets

Your customers will never have to recreate the same content over and over again. They can apply the same saved rows already available for emails, landing pages or other popups. Plus, you may also provide custom rows with ready-made dynamic content like coupon codes and best-selling items.

Popup Builder - Getting Started

Overview

Integration

Loading Popup Builder with no additional settings will give the end-user a beautifully designed popup and workspace to design their content. However, Popup Builder comes with an additional, robust set of configuration options to customize the workspace. This allows the host application to build a workspace that matches their popup’s look and feel and that of the destination page.

For example, the host app can customize…

  • The popup workspace background to view how the popup will look “in context” on the destination page.

  • The theme and position of the popup for both desktop and mobile design modes.

The following sections will look at how to customize the workspace, starting with the common settings and working up to a full custom layout.

The Basics

Let’s start by looking at some of the differences between Page Builder and Popup Builder.

  • Content Width

  • HTML output

Content Width

In Email and Page Builder, the content area width is saved in the template. For example, if you start with an empty template, a default width that works for most scenarios is chosen, but the designer can adjust the message width slider. If you start with an existing template, the content width was chosen by the template’s designer using the message width slider in the the builder’s Settings tab.

With Popup Builder, the same template may have multiple contexts, and each context will likely have specific size requirements. For example, an exit-intent popup may have a max-width of 600px on a desktop with a classical layout centered on the screen. On the other hand, the host app may display the same template on mobile in the bar style docked at the bottom of the screen with a restricted width of 300px.

Since the content area’s width is tightly coupled to the context and layout, no one size fits all width is saved in the template. Instead, the host app will specify the width settings when the builder loads, based on the context of using the template. You’ll find an example in the common settings section below.

Popup Builder does not support fluid 100% width content.

HTML Output (HTML Partials)

In Email and Page Builder, the Beefree SDK HTML parser service converts your template into an HTML document customized for email or pages, respectively. However, the Popup Builder will not return a full HTML page because the host application is the final destination. In addition, Beefree SDKPopup Builder doesn’t provide the scripts to control the popup’s behavior, such as opening and closing. Rather, Popup Builder provides the HTML “partials” to embed within your popup’s content area or body.

The HTML partial will come with all the CSS required to look as it did in the preview mode. The parser service will wrap the content with a special container to clear all the host application styles and prevent style conflicts. The HTML output is designed to be embedded into any popup framework or application and still render the way it appears in the builder.

Popup workspace

Now that we covered the basic differences between Popup Builder and our other applications let’s discuss what you should expect when the builder starts.

As mentioned above in the Getting Started section, you will receive a ready-to-go design experience if no settings are provided. The default layout is a classic centered modal with a fixed width.

If the default popup style and layout suit your needs, then you are all set to start designing! You can load the builder without additional configuration and use the same standard controls and callbacks to access the HTML and JSON template.

What if you like most of the defaults but want to make some minor adjustments? We have you covered!

Common settings

Easily change the background to make the workspace look like the destination page where you’ll embed the popup.

If this option is not set, then we will provide a default skeleton layout. It’s worth noting at this point that you can apply every setting for both desktop and mobile design modes. That means you can have a different background when editing in Mobile Design Mode. We’ll show you how later!

Popup default layouts

One of the most common needs is changing the popup’s default-centered position to better match the end-user’s use case. Out-of-the-box, the Popup Builder comes with many of the most common popup layouts preconfigured. You can use any available presets “as is” or use them as starting points that you can fine-tune to your satisfaction.

Here is a complete list of preset layouts:

Popup default themes

Another useful preset available is changing the popup’s styles from the default to better match the end-user’s use case. For example, if you’re using the popular Bootstrap CSS framework, you can select the “Bootstrap Theme” as your default. As with the default layouts, you can use any of the available preset themes “as is” or use them as starting points that you can fine-tune to your satisfaction.

Here is a complete list of preset themes:

Content area width

As mentioned above, the content area’s width is tightly coupled to the layout, no one size fits all width is saved in the template. All Popup Builder preset layouts come with a default width, which you can override with the following configuration settings.

Testing and Integrating

Creating an application

All builders share the same core functionalities, including authentication and configuration. If you have already integrated our Email builder, you can re-use most of your work using the same configuration and callbacks.

Integrating the Popup Builder

Loading Popup Builder with no additional settings will give the end-user a beautifully designed popup and workspace to design their content. However, Popup Builder comes with an additional, robust set of configuration options to customize the workspace. This allows the host application to build a workspace that matches their popup’s look and feel and that of the destination page.

For example, the host app can customize…

  • The popup workspace background to view how the popup will look “in context” on the destination page.

  • The theme and position of the popup for both desktop and mobile design modes.

Continue reading to learn more on how to customize the workspace, starting with the common settings and working up to a full custom layout.

HTML output

In Email and Page Builder, the Beefree SDK HTML parser service converts your template into an HTML document customized for email or pages, respectively. However, the Popup Builder will not return a full HTML page because the host application is the final destination. In addition, Beefree SDK Popup Builder doesn’t provide the scripts to control the popup’s behavior, such as opening and closing. Rather, Popup Builder provides the HTML “partials” to embed within your popup’s content area or body.

The HTML partial will come with all the CSS required to look as it did in the preview mode. The parser service will wrap the content with a special container to clear all the host application styles and prevent style conflicts. The HTML output is designed to be embedded into any popup framework or application and still render the way it appears in the builder.

Developer resources

Our Github account has some resources that might help you out when testing and integrating the Popup Builder.

Examples of different implementations and configurations that you can draw from to speed up your development.

A collection of ready-made templates that you can use right away and add to your application.

This feature is available on Beefree SDK only.

The debug parameter in the beeConfig is an optional object that enables internal debugging features within the Beefree SDK editor. It's designed to help developers inspect configurations, , and more easily during development.

inspectJson (boolean): Adds an eye icon in the toolbar that allows you to inspect the specific JSON used for that element. Useful for understanding how your configuration is being rendered.

showTranslationKeys (boolean): Replaces localized strings with their translation keys throughout the UI. This is especially helpful when debugging i18n issues or checking for missing .

Here is a list of terms used frequently throughout the Beefree SDK technical documentation. Things can get a bit tricky when embedding a software application within another software application, so this page is an attempt to create as much clarity as possible. We hope we find it useful. If anything sounds confusing or if you have any suggestions for improvement, please .

Beefree SDK subscription A subscription to the Beefree SDK. There are different , starting with a Free plan. Once you have a subscription, you can create one or more Beefree applications.

Content Services API A set of in the Beefree system that allow you to perform a variety of tasks connected to the implementation of a content creation workflow.

Log in to your

Beefree SDK Console Dashboard with an Example QA Environment Development Application

To use higher-tier features in production, you must .

While setting up a development application is a feature on paid plans, please note that still apply. If, in your development application, you're using any of the Beefree SDK features that generate usage-based fees, that usage will count towards your plan's monthly allotment. You'll be charged usage-based fees if your usage (across production and development applications) exceeds your plan's allotment. . You can view usage statistics for your development applications by logging into the , locating the development application you are working with, and looking at the Statistics widget on the application details page.

Here is an overview of the different workspaces and their differences. Please for more information on using AMP in Beefree SDK.

In addition, omitting the workspace, or loading the “default” workspace for certain users, has the effect of disabling AMP for those users, even when AMP content is enabled in the . This way, you can decide to make the feature available to customers of your application:

Log in to the

Popups are one of the most used online marketing tools. When done right, they capture visitors’ attention at the right moment, and push them forward in the customer journey. Despite attracting criticism in the past because they create a barrier between visitors and content, there’s plenty of evidence that they work. They will continue to play a strong part in any modern-day marketing strategy. if you’re interested in learning more.

all data stays in your application, and you don’t have to ask your customers to use 3rd party tools for building popups. You can leverage our to add forms to popups

This section provides the information you need to get started integrating in your SaaS applications. For more advanced settings, see .

Out-of-the-box, the setup and configuration are the same as Email and Page Builder. This section will cover the settings specific to Popup Builder. Check out our if you’re new to Beefree SDK or unfamiliar with the configuration basics (as seen in the example below).

Name
Value
Description
Name
Value
Description

Continue to if you’d like to customize more than the position, background, and content area width.

When you log into the you can immediately see what type of applications you have already created under your Beefree SDK subscriptions. To create a Popup application, head over to the Popup Builder Application section and click on Activate.

Once created, head over to “Details” for all server-side configurations. Paid applications allow you to create child , to ease new feature testing, development, and maintenance.

Out-of-the-box, the setup and configuration are the same as . This section will cover the settings specific to Popup Builder. Check out our if you’re new to Beefree SDK or unfamiliar with the configuration basics (as seen in the example below).

paid plans
translations
data structures
module/row
translations
contact us
subscription plans
API methods
Beefree SDK Developer Console
upgrade to the appropriate plan
usage-based fees
Learn more about usage-based fees
Beefree SDK Developer Console
refer to this page
Beefree SDK Console
Beefree SDK Developer Console
Read our blog entry
Form block

beeConfig: {
  uid: 'CmsUserName', // [mandatory]
  container: 'bee-plugin-container', // [mandatory]
  ...
}

beeConfig: {
  ...
  workspace: {
    popup: {
      backgroundImage: 'https://.../background.png',
      backgroundImageMobile: 'https://.../background.png',
      ...
    }
  }
}

beeConfig: {
  ...
  workspace: {
    popup: {
      layout: 'bar-top'
    }
  }
}

Classic Popup

classic-center

classic-top-right

classic-top-left

classic-bottom-right

classic-bottom-left

This is our default layout and works great for alerts and exit intents.

Drawer or Slide-in panel

drawer-left

drawer-right

Side panels, or drawers, can be used to design menus or display ads.

Bar or Docker

bar-bottom

bar-top

This is great for cookie approval dialogs.


beeConfig: {
  ...
  workspace: {
    popup: {
      theme: 'bootstrap'
    }
  }
}

Custom

custom

This is our default layout and works great for alerts and exit intents.

Bootstrap

bootstrap

This will a popup that looks like the popular Bootstrap CSS modal.

jQuery

jQuery

This will be a popup that looks like the popular jQuery modal. Many of the latest CSS systems use a style similar to the original jQuery.

Material

material

This will be a popup that looks like the popular Material CSS modal.


workspace: {
  popup: {
    contentWidth: 600,
    contentWidthMobile: 300
  }
}

beeConfig: {
  uid: 'CmsUserName', // [mandatory]
  container: 'bee-plugin-container', // [mandatory]
  ...
}
PopUp Builder
Popup Builder – Advanced Settings
Getting Started guide
Popup Builder- Advanced Settings
Beefree SDK Console
development applications
Email and Page Builder
Getting Started guide
Sample code
Popup templates

AI-Driven Design Creation

Simple Schema Features by Plan Type:

  • All Paid Plans: Access the Simple Schema API through the Content Services API (CSAPI).

Overview

Headless Template Creation with AI

  • An AI model receives the description and generates a Simple Schema-compatible template.

  • This template is passed to the /v1/conversion/simple-to-full-json API endpoint.

  • The API returns the complete Beefree JSON for the entire template.

  • The template is loaded in the builder, and the end user can start applying edits in a no-code environment.

The following image displays an example UI with a basic AI Email Design Assistant that connects to Simple Schema on the backend. By building your own UI and AI agent, you can leverage Simple Schema on the backend to programmatically build templates and load them in the Beefree SDK builder for your end users to use.

In the following image, the programmatically-created email template is loaded within the Beefree SDK builder, and ready for editing.

Benefits

  • AI-ready: A simplified format perfect for machine-generated layouts.

  • Headless by default: Build and deploy templates entirely outside the visual builder.

  • Production-ready: Easily convert to Beefree JSON with a single API call.

  • Efficient: Reduced payload size and faster AI generation.

Simple to Full JSON API Endpoint

This endpoint is essential for converting AI-generated or manually assembled Simple Schema templates into full, builder-compatible Beefree JSON. Learn more about how to use this endpoint in the Content Services API Reference.

Setting layout and size

Width settings

Let’s start by looking at some of the peculiarities of the Popup builder.

In Email and Page Builder, the content area width is saved in the template. For example, if you start with an empty template, a default width that works for most scenarios is chosen, but the designer can adjust the message width slider. If you start with an existing template, the content width was chosen by the template’s designer using the message width slider in the builder Settings tab.

With Popup Builder, the same template may have multiple contexts, and each context will likely have specific size requirements. For example, an exit-intent popup may have a max-width of 600px on a desktop with a classical layout centered on the screen. On the other hand, the host app may display the same template on mobile in the bar style docked at the bottom of the screen with a restricted width of 300px.

Since the content area’s width is tightly coupled to the context and layout, no one size fits all width is saved in the template. Instead, the host app will specify the width settings when the builder loads, based on the context of using the template. Here is a quick example:

workspace: {
  popup: {
    contentWidth: 600,
    contentWidthMobile: 300
  }
}

Two final notes:

  • Popup Builder does not currently support fluid 100% width content.

  • If you don’t specify a width, the application will apply a default one.

Layout settings

As mentioned before, you will receive a ready-to-go design experience when no settings are provided. The default layout is a classic centered modal with a fixed width.

If the default popup style and layout suit your needs, then your customers are all set to start designing! You can load the builder without additional configuration and use the same standard controls and callbacks to access the HTML and JSON template.

What if you like most of the defaults but want to do some minor adjustments? We have you covered!

Changing the background

You can easily change the background to make the workspace look like the destination page where your customer will embed the popup.


beeConfig: {
  ...
  workspace: {
    popup: {
      backgroundImage: 'https://.../background.png',
      backgroundImageMobile: 'https://.../background.png',
      ...
    }
  }
}

Applying a preset layout

One of the most common needs is changing the popup’s default-centered position to better match the end-user’s use case. Out-of-the-box, the Popup Builder comes with many of the most common popup layouts preconfigured. You can use any available presets “as is” or use them as starting points that you can fine-tune to your satisfaction.


beeConfig: {
  ...
  workspace: {
    popup: {
      layout: 'bar-top'
    }
  }
}

Here is a complete list of preset layouts:

Name
Value
Description

Classic Popup

classic-center

classic-top-right

classic-top-left

classic-bottom-right

classic-bottom-left

This is our default layout and works great for alerts and exit intents.

Drawer or Slide-in panel

drawer-left

drawer-right

Side panels, or drawers, can be used to design menus or display ads.

Bar or Docker

bar-bottom

bar-top

This is great for cookie approval dialogs.

Page Builder

An overview of page builder within Beefree SDK.

Building web pages with Beefree SDK

Beefree SDK Page Builder will help your customers create beautiful, responsive landing pages, complete with forms and embedded videos. Combined with our Email Builder, you’ll have the power to deliver to your customers a single, optimized user experience for designing both emails and web pages.

With the Page Builder, your customers can create landing pages and one page sites with

In addition, you will find exclusive features that make sense for web pages, such as forms, embedded videos, and the ability to paste scripts, like an embeddable SurveyMonkey or Typeform survey.

Here are a few examples of web pages your customers can build with:

  • Product showcase or teaser

  • Disclaimer (e.g. age verification)

  • Registration (e.g. events, gated content)

  • Newsletter subscription

  • Customer survey

  • Booking request

  • Portfolio

They can also create fantastic one page websites, i.e. sites where all the content usually spread in different pages fits nicely into an easy-to-scroll page, complete with menu and anchors to navigate it.

We are constantly improving the user experience: we see the Page Builder as a long-term, ongoing project at Beefree SDK.

Integrating Page Builder

Integrating and Testing the Page Builder

The experience

We aim to provide the foundations needed to build a delightful page building experience. We started with the basic features that are already provided to design awesome email messages and tweaked them to work for Web pages.

Once launched as Page Builder, an application will have a few but noticeable differences from the Email builder experience:

  • width for pages can be expanded up to 1440px;

  • the stage can be scrolled horizontally;

  • the sidebar can be collapsed to provide more workspace – useful when working with larger widths;

  • there’s a new 6-columns row layout, to take advantage of larger widths;

  • the preview includes viewport resize, to test responsiveness on various screen sizes;

  • the HTML block allows using scripts, for improved compatibility with embedded content like surveys. This also includes Javascript, although it cannot be executed within the builder.

If you’re on a paid plan, you will also get support for forms and embedded videos.

  • You can define and pass forms to the builder, and use the form content block to retrieve and style those forms.

  • You can use the video content block to embed and playback videos hosted on Youtube and Vimeo, or point to a hosted video in MP4 format.

Additional resources

A quick primer on how to include forms in a web page.

Our Github account hosts useful resources, including sample code to quick start your integrations.

Tracking Message Changes

Overview of Tracking Message Changes

This page explores and answers the following questions:

  • How can I monitor what my customers do in the builder?

  • How can I tell when a message has actually been updated?

Use cases

This section discusses use cases for tracking message changes.

Usage tracking

In today’s software, knowing how customers use an application is essential if you want to provide a good user experience (UX) and eliminate friction points. It’s also a valuable resource to understand where to invest future development effort and build something that customers love.

onChange tracking gives you – the host application – the opportunity to get this information when your customers are creating designs in the builder.

You can use the onChange callback to:

  • Understand if your customers are actively working on the message they opened (or if instead they temporarily abandoned that task to work on something else).

  • Discover if they are using one of the great new features that your team recently enabled.

  • Dismiss or confirm a bug by reproducing a customer’s steps.

Autosave

Now you can invoke the Autosave event only when something has been added or updated, resulting in a better message recovery experience.

History

Why is having a historical log of message changes so important? As with the previous cases, this will allow you to provide a better overall user experience. Creating a good email message or campaign typically involves input from several people or departments before it’s finally ready to send, but that can lead to inadvertent mistakes that might cause hours of work to be lost. Saving the differences between versions of a message created during the email production workflow – and allowing your users to compare & restore them – could be a huge time-saver in those cases.

Content check

When one of your users adds or updates text or images, the onChange callback returns the new input to your application, allowing you to trigger a complementary function based on it.

The use cases change from application-to-application, but the feature is flexible enough to accommodate a wide variety of scenarios. Here are just a few:

  • Content suggestions

  • Prevent unwanted content

  • Link validation

  • Link reputation check

  • Custom HTML validation

  • Set up an alternative workflow when conditional syntax is applied

  • …

How it works

When you enable onChange and your end users edit their message, the callback provides you with:

  • Information on the new content or section

  • The action that was performed on existing content

  • The JSON update (as the entire page, as well as JSON patches)

onChange JSON example

The following JSON displays an example of what you can expect to receive from the onChange callback.

Prerequisites

  • Add trackChanges and set it to true.

  • The onChange callback, with the related response function.

Enable "onChange" Event

The following code provides an example callback function for onChange.

onRemoteChange

Consider the following when using the onRemoteChange callback:

The following code provides an example callback function for onRemoteChange.

onRemoteChange JSON example

The following JSON displays an example of the onRemoteChange callback response.

Note: The following section discusses how to configure both onChange and onRemoteChange. Please keep in mind that the configurations apply to both callbacks.

Configure onChange and onRemoteChange

This section discusses how to configure onChange and onRemoteChange.

This parameter defines when the tracking is active in the builder.

onChange Event

The onChange callback is triggered every time the builder tracks a change in the message. It returns the message JSON and a response JSON which contains all the information needed to handle any of the use cases described above.

Callback response schema

Callback Parameters

The following table lists the parameters in the onChange and onRemoteChange callback response schema and their corresponding types and values.

Content Codes

Common Actions

Complete Event Chart

Content Services API

Learn more about the Content Services API offering in Beefree SDK.

Beefree SDK API Offering

Beefree SDK includes a comprehensive API offering designed to expand upon the builder's capabilities. By leveraging Beefree SDK's APIs, you can extend the builder's functionality into other aspects of your application.

Beefree SDK's API offering includes three APIs. They are the following:

Overview of Content Services API

There are five categories of resources within the Content Services API. Each of these categories includes a group of endpoints with resources to support various workflows.

These categories are the following:

  • Export: Services that allow users to extract content into various formats (such as HTML, PDF, or image files), making it easy to repurpose or distribute designs across different platforms.

  • Convert: Tools that transform content from one format to another (for example, converting template JSON to HTML ). This enables compatibility with different systems and workflows.

  • AI Collection: AI-powered capabilities for text generation, such as creating metadata for emails, summarizing content, or creating SMS messages.

  • Row Processing: Services that operate at the structural level, such as analyzing, modifying, or extracting specific rows or sections within a design for granular control over the content layout.

  • Brand Style: Resources focused on enforcing or applying brand guidelines, including applying consistent colors, typography, and spacing rules to ensure brand integrity across all generated content.

The following diagram displays each of the five categories within the Content Services API, and their corresponding resources.

Use Cases and Capabilities

This section provides a high level overview of the Content Services API's capabilities, and lists a few scenarios in which this API is particularly helpful.

Export Different Formats

Your end users may want to export their templates into various formats in the following scenarios:

  • HTML: For sending email campaigns, publishing landing pages, or embedding popups.

  • Plain Text: For accessibility, compatibility with text-only email clients, improved deliverability, and compliance with communication regulations.

  • PDF: For attaching designs to emails, SMS, WhatsApp, printing hard copies, or creating flyers, while preserving the design's layout.

  • Image: For creating visual galleries, dashboards, social media posts, internal presentations, or campaign planning visuals.

Convert Content

Another common use case of the Content Services API is converting one format to another. The formats in the Convert category differ from those in the Export category, and serve a separate purpose. This category of endpoints is for creating designs and loading them within the builder.

These endpoints allow you to:

  • Page to Email: Convert existing page templates into email templates. This saves your end users time by allowing them to use their favorite designs across multiple content channels.

  • Email to Page: Convert existing email templates into page templates. This saves your end users time by allowing them to use their favorite designs across multiple content channels.

AI Collection

  • SMS: Generates concise text versions (e.g., promotional SMS).

  • Metadata: Generates subject lines and preheaders based on a template's content.

  • Summary: Generate summaries based on a template's content.

Row Processing

These endpoints manage rows within templates to maintain consistency and reduce redundancy:

  • Index: List saved rows available.

  • Merge: Merge row updates across multiple templates. Particularly useful when applying global updates.

  • Synced Rows: Retrieve a list of synced rows available.

Brand Style Management

Brand consistency can be enforced or retroactively applied across templates:

  • /templates and /rows endpoints allow updating visual properties (colors, fonts, spacings, etc.) across multiple templates or rows based on defined brand styles.

Base URL

All API access is over HTTPS, and accessed from the following URL:

You can reference each resource and its corresponding collection options in the following section.

Collections by Category

The following tables list the available collection options for resources within the category.

Export

The following table lists the resources available in this category of endpoints and their corresponding collection options.

Convert

The following table lists the resources available in this category of endpoints and their corresponding collection options.

AI Collection

The following table lists the resources available in this category of endpoints and their corresponding collection options.

Row Processing

The following table lists the resources available in this category of endpoints and their corresponding collection options.

Brand Style

The following table lists the resources available in this category of endpoints and their corresponding collection options.

Example URLs

The following table provides a few examples of URLs you can reference as an example for making specific types of requests.

Rate Limits

API requests rate limits exist independently of API key’s monthly usage allowance.

By default, the API has the following rate limits:

  • Per minute: 500 requests

  • Per second: 100 requests

  • X-Rate-Limit: An integer representing the total number of requests available per cycle. Exceeding the limit per cycle results in a 429 error. (e.g. 500)

  • X-Rate-Limit-Remaining: An integer representing the number of remaining requests before the next cycle begins, and the count resets. (e.g. 100)

  • X-Rate-Limit-Reset: A Unix timestamp representing the time the next cycle will begin, and the count will reset.

  • Retry-After: A Unix timestamp representing the time the application may resume submitting requests.

Strategies for Managing Rate Limits

To stay within the default limits and ensure reliable delivery, the following practices are recommended. These not only help distribute traffic more evenly but also provide resilience against transient network issues:

  • Monitor rate limit headers and handle 429 responses gracefully. Response metadata indicates remaining capacity and reset timing. When receiving a 429 Too Many Requests, it’s best to pause requests and retry after the time specified in the