Freshpaint
HomeLogin
  • Documentation
    • What is Freshpaint?
    • ⚕️HIPAA Mode
    • 🏗️Building Out Your Account
    • 🌐Overview of Features
    • Guides
      • 📡Add Autotrack to your website to collect data from your users
        • Installing the Freshpaint Javascript SDK
        • Installing the Freshpaint SDK with a Content Security Policy (CSP)
        • Installing the Freshpaint Javascript SDK with Server-Side Rendering (SSR) + React
        • Autocapture + React
        • Configuring a Destination
        • Labeling User Actions
        • How do I install Freshpaint with Typescript?
      • 🔁Send historical data to any destination with Time Machine
      • Next.js Quickstart Guide
      • Android Quickstart Guide
        • Installing the Freshpaint Android SDK
        • Configuring a Destination
        • Instrumenting Your App
      • iOS Quickstart Guide
        • Installing the Freshpaint iOS SDK
        • Configuring a Destination
        • Instrumenting Your App
      • React Native Quickstart Guide
        • Installing the Freshpaint React Native SDK
        • Configuring a Destination
        • Labeling User Actions
        • Configuring Property Capture
    • Setting up Properties
    • Setting up Your Destinations
      • Enabling and Disabling a Destination
      • Deleting a Destination
    • Setting up Your Events
    • User Identification
      • Designated Identify Properties
    • Maps
    • Analytics (Beta)
      • Web Analytics Dashboard
      • Campaigns
      • Service Lines
      • Data Glossary
    • Translations
    • Web Tracker Monitoring
      • Tracker Resolution Types
      • Historical Scans
  • Integrations
    • Destinations
      • Demand Side Platforms (DSPs)
        • Basis
          • Basis Quick Start Guide
          • Basis Reference
        • Google Campaign Manager 360
        • StackAdapt
          • StackAdapt Quick Start Guide
          • StackAdapt Reference
        • theTradeDesk
          • theTradeDesk Quick Start Guide
          • theTradeDesk Reference
          • theTradeDesk with CM360 Configuration Guide
        • Viant
          • Viant Quick Start Guide
          • Viant Reference
      • Direct Response Ads
        • Facebook Conversions API
          • Facebook Conversions API Quick Start Guide
          • Facebook Conversions API Reference
        • Google Ads Conversion API
          • Google Ads Conversion API Quick Start Guide
          • Google Ads Conversions API Reference
        • Google Ads
          • Google Ads Quick Start Guide
          • Google Ads Reference
        • LinkedIn Ads
          • LinkedIn Ads Quick Start Guide
          • LinkedIn Ads Reference
        • Microsoft Ads (formerly Bing Ads)
          • Microsoft Ads Quick Start Guide
          • Microsoft Ads Reference
          • Microsoft Ads Multi-Config Reference
        • Pinterest Ads (Beta)
          • Pinterest Ads Quick Start Guide
          • Pinterest Ads Reference
        • Pinterest Tag
        • Reddit Ads
          • Reddit Ads Quick Start Guide
          • Reddit Ads Reference
        • TikTok Ads
        • Twitter Ads
      • Data Activation
        • ActiveCampaign
          • ActiveCampaign Quick Start Guide
          • ActiveCampaign Reference
        • Amplitude
          • Amplitude Quick Start Guide
          • Amplitude Reference
        • Braze (formerly Appboy)
          • Braze Quick Start Guide
          • Braze Reference
        • Customer.io
          • Customer.io Quick Start Guide
          • Customer.io Reference
        • Freshsales
        • Google Analytics 4 Proxy
          • Google Analytics 4 Proxy Quick Start Guide
          • Google Analytics 4 Proxy Reference
          • Google Analytics 4 Proxy Advanced Tracking Configurations
        • Google Analytics 4 Server-Side
          • Google Analytics 4 Server-Side Quick Start Guide
          • Google Analytics 4 Server-Side Reference
        • Heap
        • Hotjar
        • HubSpot Cloud
        • HubSpot Web
        • impact.com
          • Impact.com Quick Start Guide
          • Impact.com Reference
        • Intercom
          • Intercom Quick Start Guide
          • Intercom Reference
        • Iterable
          • Iterable Quick Start Guide
          • Iterable Reference
        • June
        • Klaviyo
        • Mixpanel
          • Mixpanel Quick Start Guide
          • Mixpanel Reference
        • OneSignal
          • OneSignal Quick Start Guide
          • OneSignal Reference
        • Sendinblue
        • Sentry
        • Vero Cloud
        • Webengage
        • Webhooks
        • Woopra
        • Zendesk
      • Data Warehouses
        • Azure Warehouse Setup
        • BigQuery Warehouse Setup
        • Databricks Warehouse Setup
        • Postgres Warehouse Setup
        • Redshift Warehouse Setup
        • S3 Warehouse Setup
        • Snowflake Warehouse Setup
      • Consent Management
        • Osano
        • OneTrust
        • Custom Consent Manager
    • Sources
      • Web
        • Autotrack
        • Precision Tracking
      • CallRail
      • Invoca
      • Customer.io
      • Intercom
      • Mailchimp
      • React Native
      • SendGrid
      • Sendinblue
      • Server-Side
      • iOS
    • 🔷Google Tag Manager integration
      • Google Tag Manager migration
      • Quick Start Guide
    • 📺Freshpaint Video Platform
    • 🖼️Impression Pixel
  • Admin Panel
    • Event Library
      • Event Library Bulk Actions
      • Event Definition Filters
      • Event Tester
      • 🔁Time Machine
      • Visual Tagger
      • Advanced Options
        • Tag Manager
        • Disabling Target Text Capture
        • Cross Domain Tracking
    • Projects & Environments
    • Teams
      • Role-Based Access Control (RBAC)
    • Transformations
      • Standard Events
      • Modify Data
      • Modify User Data
      • SQL Transformations
    • 📈Destination Monitoring
    • 🔎Investigate: Testing and Debugging
      • Live View
      • Event Verification
  • Reference
    • Developer Docs
      • Freshpaint Web SDK Reference
      • Freshpaint Web SDK Options
      • Freshpaint React Native SDK Reference
      • Freshpaint iOS SDK Reference
      • Freshpaint Android SDK Reference
      • HTTP API
    • Frequently Asked Questions
      • How do I circumvent ad blockers?
      • Can Freshpaint track users across domains?
      • Can I install Freshpaint on a Chrome extension?
      • What properties are captured with my events?
      • How Do I Switchover From Segment?
      • How Do I Switch From Native Google Analytics to the Freshpaint Google Analytics Destination?
      • Where do I find my Environment ID?
      • Is Freshpaint GDPR & CCPA Compliant?
      • Can I use transformations to anonymize data for client-side destinations?
      • How do I QA or debug my data?
      • Why Do My Numbers Differ Across Different Tools?
      • Billing: How Does Freshpaint Determine MTUs?
      • Can I Use Freshpaint on Multiple Sites?
      • How Can I Export Data From Freshpaint?
      • How Does Freshpaint Identify Users?
      • How Many Events Should I Create?
      • What Should I Name My Events?
      • How do I track scroll depth?
      • What Data Does Freshpaint Collect?
        • Data Collected on Web
        • Data Collected on React Native
      • Does Freshpaint's Autotrack slow my site down?
      • Running Freshpaint with a Proxy
      • Should my Environment ID be treated as a sensitive key?
      • How Does Freshpaint Determine Session Count?
      • What is the difference between client-side and server-side connection mode?
      • What is a Proxy Integration?
      • Where can I view Freshpaint’s Status?
      • Does Freshpaint provide HIPAA audit logs?
      • Freshpaint Cookie Too Large
      • How does Freshpaint compare to server-side Google Tag Manager?
      • If a user re-installs my app, will Freshpaint generate a new device ID?
      • Why doesn't Freshpaint need a BAA before sending data to Google Ads and Facebook Ads?
      • What Implementation Services Does Freshpaint Offer?
      • Single Sign On (SSO) Setup
Powered by GitBook
On this page
  • Function configuration
  • Config Fields
  • Writing your function
  • Event Format
  • Base properties present on all event objects
  • Additional properties: onGroup
  • Additional properties: onIdentify
  • Additional properties: onPage
  • Additional properties: onTrack

Was this helpful?

  1. Integrations
  2. Destinations
  3. Functions

Creating New Functions

Last updated 5 months ago

Was this helpful?

Getting Started

  1. Use the following repo as a template for building your own Freshpaint Functions. .

  2. Create a new repository from this template, implement the methods in index.js, and configure your function settings in config.json. Additional configuration options are provided .

  3. Navigate to the page in Freshpaint, and provide the URL of your new repository to add your function to the Freshpaint UI:

If you attempt to create a new function that uses a private GitHub repo, a request to set up GitHub OAuth and install the Freshpaint GitHub app will appear. Follow the provided steps to allow your function to be added:

5. Complete the configuration by adding your credentials:

Note on Backfills: There is no need for any additional backfill-specific configuration. You can rerun all events through the same functions code, as long as the endpoints you're already using can handle the added volume.

Function configuration

You can provide an optional configuration file config.json in your function's GitHub repository. The file should include a JSON object with the following fields:

Key
Type
Description

configFields (optional)

ConfigFields (see below)

Configurable settings

configName (optional)

string

The name to show when a destination or source is configured from the function

configHelp (optional)

string

A description of how to correctly configure the function, shown when a user is setting up a source or destination from the function

supportsTrack (optional)

boolean

Whether this function supports event tracking (default: true)

supportsCohorts (optional)

boolean

Whether this function supports cohorts as user properties sent to onIdentity (default: true)

supportsBackfill (optional)

boolean

Whether this function supports backfills of historical events (default: true)

Config Fields

Key
Type
Description

key

string

The key on the settings object sent to the function

name

string

The human-readable name of the field shown in the UI

required

boolean

Whether this field is required for the config to be valid

description

string

Description of the field shown in the UI

sensitive

boolean

Whether the field should be treated as sensitive

type

string

The type of the field (see below)

options

{"value": string, "label": string}

For select and radio, the options available to the user. value is passed in the settings object, label is shown to the user configuring the function.

defaultValue

type

The default value

Types of config fields

There are several different types you can use for your config field

  • string

  • boolean

  • number

  • list - A list of strings

  • select - A dropdown menu

  • radio - A set of radio buttons

Writing your function

Each handler (onTrack, onIdentify, onGroup, and onPage) accepts two parameters:

Parameter
Type
Description

event

object

settings

object

The configuration fields as specified in your config.json file, with the configuration values you've configured per-environment.

Event Format

The format of the event argument passed to your event handlers differs slightly depending on which handler (onTrack, onIdentify, onGroup, and onPage) is being invoked. Details about the shape of the object can be found below:

  • Base properties present on all event objects

  • #additional-event-object-properties-ongroup

  • #additional-event-object-properties-onidentify

  • #additional-event-object-properties-onpage

  • #additional-event-object-properties-ontrack

Base properties present on all event objects

The following base properties are available on every event object regardless of the handler.

Key
Type
Description

type

string

The type of the event

Example: "track", "identify", "page", or "group"

messageId

string

Unique id identifying this event

anonymousId

string

The ID of the device the identify call was performed on.

userId

optional string

An identifier that uniquely identifies the user that performed the event (usually email address)

context

object

An object describing the context that created this event

timestamp

string

Additional properties: onGroup

Key
Type
Description

groupId

string

The ID of the group the call was for

traits

object

An object representing the group's traits

Additional properties: onIdentify

Key
Type
Description

traits

object

An object representing the identified user's traits

Additional properties: onPage

Key
Type
Description

properties

object

Any additional event properties

Additional properties: onTrack

Key
Type
Description

event

string

The name of the event

properties

object

Any additional event properties

4. With your function now added, navigate to , to complete the configuration:

Your function is now configured and available as a destination. To send data to this Function, enable it in the same way that existing destinations are enabled on the page.

The event data. See for details

The time the event occurred, formatted via . Example: "2022-08-08T17:15:45Z"

Functions under Destinations
events
RFC3339
Event Format
https://github.com/freshpaint-io/functions-template
Functions
below
Adding a new function
Configuring an existing function
Completing function configuration.