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
  • Using the HTTP API
  • IP Address
  • Example code:
  • Server-side Identify
  • Configuring Which Destinations Server-Side Events Are Sent To
  • De-duplication
  • Rate Limits

Was this helpful?

  1. Reference
  2. Developer Docs

HTTP API

PreviousFreshpaint Android SDK ReferenceNextFrequently Asked Questions

Last updated 11 months ago

Was this helpful?

You can use the Freshpaint HTTP API to send server side events into Freshpaint. See the for information on how you can use server side events.

Using the HTTP API

The Freshpaint server-side API can be used to send data from your backend to Freshpaint. To send a server-side event, you make a POST request to with the event you want to send. Events have the following format:

{
    "event": "<name of the event>",
    "properties": {
        "distinct_id": "<unique user identifier>",
        "token": "<your environment id>",
        "time": <the epoch time when the event occurred, in seconds>,
        <additional properties>
    }
}

Properties

The following properties are required:

Argument
Type
Description

distinct_id

String

token

String

time

Number

The epoch time the event occurred, in seconds. The epoch time is the number of seconds since January 1st 1970.

The following properties are optional:

$device_id

String

A unique identifier for the device the event was sent from. This is sometimes referred to as the anonymous_id.

$insert_id

String

A unique identifier for this event. Events that have the same $insert_id will be treated as duplicates by certain destinations that de-duplicate events by the $insert_id value received.

In addition to the above properties, you can send any additional custom properties you want.

IP Address

The IP address from where you send the server-side event will be automatically captured. It may, however, be the case that you want to submit a different IP address. For example, your server may be located in a data center, but you may want a purchase event to reflect the IP address of the actual purchaser.

In that case, you can send the IP address by submitting a property named $ip. For example:

{
  "event": "Purchase",
  "properties": {
    "distinct_id": "123",
    "$ip": "1.2.3.4",
    "price": 500
  }
}

Example code:

curl -X POST -H "Content-Type: application/json" -d '{
    "event": "Purchase",
    "properties": {
        "distinct_id": "13793",
        "token": "2ce2b45b-af44-4426-a3ef-a314abce9c85",
        "time": 1577836800,
        "price": 500
    }
  }' https://api.perfalytics.com/track
const payload = {
  event: "Purchase",
  properties: {
    distinct_id: "13793",
    token: "2ce2b45b-af44-4426-a3ef-a314abce9c85",
    time: 1577836800,
    price: 500,
  },
};

fetch("https://api.perfalytics.com/track", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify(payload),
});
import requests

payload = {
    "event": "purchase",
    "properties": {
        "distinct_id": "13793",
        "token": "2ce2b45b-af44-4426-a3ef-a314abce9c85",
        "time": 1577836800,
        "price": 500,
    },
}

requests.post("https://api.perfalytics.com/track", json=payload)
require 'json'
require 'net/http'

uri = URI('https://api.perfalytics.com/track')
payload = {
    "event" => "purchase",
    "properties" => {
        "distinct_id" => "13793",
        "token" => "2ce2b45b-af44-4426-a3ef-a314abce9c85",
        "time" => 1577836800,
        "price" => 500,
    },
}

Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
  req = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')
  req.body = payload.to_json
  puts http.request(req)
end

The Freshpaint HTTP API will return a 200 as soon as the event has been received. Validation of the event will be performed after the event is received. If you want to confirm Freshpaint has received your event, you should check the Freshpaint Live View.

Server-side Identify

You can also pass identify events server-side to attach user properties to users from the server. To do so, you pass a server-side event to the HTTP API with the following format:

{
  "event": "$identify",
  "properties": {
    "distinct_id": "<user identifier>",
    "token": "<your freshpaint environment id>",
    "time": <epoch time in seconds>,
    "$device_id": <anonymous user id (optional)>,
    "$user_props": {
      <any properties you want to attach to the user>
    }
  }
}

The following properties are required:

Argument
Type
Description

distinct_id

String

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

token

String

time

Number

The epoch time the event occurred. The epoch time is the number of seconds since January 1st 1970.

Configuring Which Destinations Server-Side Events Are Sent To

There are two ways to configure server-side events to go to. First you can pass in a list of hardcoded destinations as part of the event in the $options property. You can either pass in a list of destinations the event should not go to:

{
  "event": "Test Event",
  "properties": {
    "distinct_id": "test-user-id",
    "token": "6dc2e9e2-3b9c-4259-b004-21f39dd6c81a",
    "time": 1577836800,
    "a": 5, 
    "$options": {"integrations": {"Mixpanel": false}}
  }
}

Or pass in a list of destinations the event should only go to:

{
  "event": "Test Event",
  "properties": {
    "distinct_id": "test-user-id",
    "token": "6dc2e9e2-3b9c-4259-b004-21f39dd6c81a",
    "time": 1577836800,
    "a": 5, 
    "$options": {"integrations": {"All": false, "Mixpanel": true}}
  }
}

Alternatively, you can go to the event schema page for the event, go to Settings. And flip the toggle for "Override hardcoded destinations". Then you'll be able to toggle each event on a per destination basis.

De-duplication

Events sent to the HTTP API are considered duplicates if they have the same value for the $insert_id property. If $insert_id is not provided, Freshpaint will compute a value based on the time and $device_id properties, so that if two events have the same value for these properties then they will be treated as duplicates.

To avoid events being de-duplicated erroneously, you may want to ensure that the time property you provide to the HTTP API uses millisecond precision.

For ultimate control over de-duplication behavior, consider providing an $insert_id with each event. A good way to generate an $insert_id is to hash together several pieces of information that uniquely identify the event, such as the timestamp, device id, user id, and event name.

Rate Limits

There is a 5000 request/second burst request limit for the HTTP API. Please throttle your requests accordingly. Contact support@freshpaint.io if you have any questions.

An identifier that uniquely identifies the user that performed the event (usually email address). This is the same as the identifier you would pass to .

Your environment ID. You can get it from the Server Side API section on the of the Freshpaint app.

If you can't use our , you can send a raw HTTP request as well:

Freshpaint APIs are fast, and we're committed to 99.9% uptime (see our SLA ). That said, we recommend communicating with Freshpaint APIs in a "fire and forget" manner, for example by making the request from a separate thread or by using an async-await pattern if your language supports it. We recommend this so that your server processing is not blocked waiting for the Freshpaint API to respond.

Your environment ID. You can get it from the Server Side API section on the of the Freshpaint app.

server side source docs
https://api.perfalytics.com/track
JavaScript SDK
https://www.freshpaint.io/sla
freshpaint.identify()
sources page
sources page