API

Documentation

Version 2.0 - 2026

REAL DATA. REAL TIME. YOUR WAY.

The smart way to access your OOH audience data. No spreadsheets. No waiting. Just plug in and go.

The Data Jam API puts your live footfall, impressions, dwell time, and visitor data right where you need it. Pull it into your dashboards, feed it to your BI tools, automate your reporting - whatever works for you. Your JamBoxes are already doing the hard work. Now make that data work harder.

SaaS

Always On

AI

AI Powered

RT

Real-Time

What's New in 2026: Fresh documentation. Clean examples. Everything you need to get jamming. Plus - Data Jam PULSE predictive analytics is on the way.

Contents

1. Quick Start

Let's get you jamming. Five minutes, one API call, and you're pulling live audience data. Here's how:

Base URL

https://datajamportal.com/CustomerAPI/

Quick Example

Fetch impression data for a device:

curl -X GET "https://datajamportal.com/CustomerAPI/GetData/" \
  -u "your_email@domain.com:your_password" \
  -H "Content-Type: application/json" \
  -d '{
    "project_name": "Your Project",
    "device_number": "JB000XXX",
    "start_date": "2026-01-01",
    "end_date": "2026-01-30",
    "type_data": "Impression",
    "filter": "All"
  }'

2. Authentication

Same login you use for the Data Jam Portal. Simple as that. We use HTTP Basic Authentication - secure, standard, no fuss.

Credentials

Parameter Description
username Your Data Jam Portal email address
password Your Data Jam Portal password

Header Format

Authorization: Basic base64(username:password)
Important: Users can only access projects they have been assigned to. Attempting to access an unauthorized project will return: {"msg": "User not allowed for Project."}

3. API Endpoints

Three endpoints. That's it. We keep things clean so you can focus on what matters - your data.

GET

/CustomerAPI/GetData/

Retrieve footfall, impressions, dwell time, or visitor data for a specific device and date range.

GET

/CustomerAPI/GetDeviceInfo/

Retrieve device configuration, location, status, and metadata for a specific JamBox.

POST

/CustomerAPI/AddData/

Submit custom user data to associate with a device (for external data integration).

4. Data Types

Pick your flavour. Whether you need impressions for media buyers or dwell time for engagement analysis, we've got you covered. Just set the type_data parameter:

Type Description Filter Options
Impression Total impressions/views detected by the JamBox sensor All, Default
Visitors Unique visitor counts All, Default
DwellTime Time spent in detection zone (engagement metrics) All, Default
UserData Custom user-submitted data All

Filter Options

5. Request Format

Here's exactly what to send. Copy it, tweak it, make it yours.

GetData Request Body

{
    "project_name": "Your Project Name",
    "device_number": "JB000XXX",
    "start_date": "YYYY-MM-DD",
    "end_date": "YYYY-MM-DD",
    "type_data": "Impression|Visitors|DwellTime|UserData",
    "filter": "All|Default"
}
Parameter Type Required Description
project_name string Yes Project name (case-sensitive)
device_number string Yes JamBox device ID (e.g., JB001234)
start_date string Yes Start date in YYYY-MM-DD format
end_date string Yes End date in YYYY-MM-DD format
type_data string Yes Data type to retrieve
filter string Yes Filter mode: "All" or "Default"
Heads Up: Project names are case-sensitive. "Mall_Campaign" and "mall_campaign" are treated as different projects. Always use the exact name as shown in your Data Jam Portal.

GetDeviceInfo Request Body

{
    "project_name": "Your Project Name",
    "device_number": "JB000XXX"
}

6. Response Format

Here's what comes back. Clean JSON, hourly breakdowns, everything you need to slice and dice your data.

Successful GetData Response

{
    "response": [
        {
            "Date": "25th-Dec",
            "Day": "Thu",
            "Project": "PR019043",
            "Device": "JB000123",
            "Sum": 3809,
            "AveDW": 7,
            "hour01": 53,
            "hour02": 54,
            ...
            "hour23": 120
        }
    ]
}

Successful GetDeviceInfo Response

{
    "device_info": [
        {
            "device_number": "JB000123",
            "device_status": "Enabled",
            "create_date": "2023-12-06",
            "registration_status": "Enabled",
            "device_version": "DataJam_v5.6",
            "device_hardware": "M5AtomS3",
            "registration_date": "2025-11-10",
            "longitude": "-0.123456",
            "latitude": "51.50735",
            "dev_location_ref": "Main Entrance",
            "dev_frameid": "Frame A",
            "timezone": "Europe/London",
            "mac_address": "AA:BB:CC:DD:EE:FF",
            "min_rssi": -70
        }
    ]
}

Error Responses

Response Meaning
{"msg": "Json Schema Validation Failed"} Missing or invalid request parameters
{"msg": "User not allowed for Project."} User doesn't have access to this project
{"msg": "End Date should be up to 30 days from start days"} Date range exceeds 30-day limit
{"message": "No Data Present for Device"} No data exists for specified device/date range

7. Rate Limits & Constraints

One thing to know: we keep queries focused. Here's the deal:

30-Day Window

Each request can pull up to 30 days of data. This keeps things fast and prevents massive queries from slowing everyone down. Same rule as the Portal - consistency is key.

Attempting to query more than 30 days will return:
{"msg": "End Date should be up to 30 days from start days"}

Need a Full Year?

No problem. Just batch your requests. 12 calls, 12 months - done:

# Example: Query a full year with 12 monthly calls
January:   start_date: "2026-01-01", end_date: "2026-01-31"
February:  start_date: "2026-02-01", end_date: "2026-02-28"
March:     start_date: "2026-03-01", end_date: "2026-03-31"
...
December:  start_date: "2026-12-01", end_date: "2026-12-31"

8. Postman Setup Guide

Postman is the easiest way to test the API without writing a single line of code. Here's your setup in 6 steps:

Step 1: Create a Postman Account

  1. Go to https://www.postman.com
  2. Click "Sign Up for Free" or sign in to your existing account

Step 2: Create a Workspace

  1. Click on "Workspaces" in the navigation bar
  2. Click "Create Workspace"
  3. Choose "Blank workspace" and click Next
  4. Name your workspace (e.g., "Data Jam API") and set access permissions
  5. Click "Create"

Step 3: Import Collection

  1. Click the "Import" button in the top left
  2. Drag and drop the Data Jam collection JSON file, or select it from your files
  3. The collection will appear in your sidebar under "Collections"

Step 4: Configure Authentication

  1. Click on any request in the collection
  2. Go to the "Authorization" tab
  3. Select "Basic Auth" as the Type
  4. Enter your Data Jam Portal username (email) and password

Step 5: Configure Request Body

  1. Go to the "Body" tab
  2. Select "raw" and "JSON"
  3. Enter your request parameters (project_name, device_number, dates, etc.)

Step 6: Send Request

  1. Click the blue "Send" button
  2. View the response in the lower panel

9. Code Examples

Copy. Paste. Customise. Get jamming in your language of choice:

cURL

curl -X GET "https://datajamportal.com/CustomerAPI/GetData/" \
  -u "user@email.com:password" \
  -H "Content-Type: application/json" \
  -d '{
    "project_name": "Data Jam",
    "device_number": "JB000123",
    "start_date": "2026-01-01",
    "end_date": "2026-01-30",
    "type_data": "Impression",
    "filter": "All"
  }'

Python

import requests
from requests.auth import HTTPBasicAuth

url = "https://datajamportal.com/CustomerAPI/GetData/"

payload = {
    "project_name": "Data Jam",
    "device_number": "JB000123",
    "start_date": "2026-01-01",
    "end_date": "2026-01-30",
    "type_data": "Impression",
    "filter": "All"
}

response = requests.get(
    url,
    json=payload,
    auth=HTTPBasicAuth("user@email.com", "password")
)

print(response.json())

JavaScript (Node.js)

const axios = require('axios');

const credentials = Buffer.from('user@email.com:password').toString('base64');

axios.get('https://datajamportal.com/CustomerAPI/GetData/', {
    headers: {
        'Authorization': `Basic ${credentials}`,
        'Content-Type': 'application/json'
    },
    data: {
        project_name: 'Data Jam',
        device_number: 'JB000123',
        start_date: '2026-01-01',
        end_date: '2026-01-30',
        type_data: 'Impression',
        filter: 'All'
    }
})
.then(response => console.log(response.data))
.catch(error => console.error(error));

10. Frequently Asked Questions

Got questions? We've got answers:

What's a Project?

Think of it as a folder for your JamBoxes. A Project groups devices by campaign, client, or location. One project might be "Mall_Entrance_Q1" - all the JamBoxes for that activation in one place.

What's a Device?

That's your JamBox. Every JamBox has a unique ID like "JB001234" - that's the serial number you'll use in your API calls to pull data from that specific sensor.

Where do I find my Project or Device ID?

Check your Data Jam Portal - it's right there in your installation summary. Or just ping your account manager - we're always happy to help.

What data do I get back?

The good stuff: impressions, visitor counts, dwell times, hourly breakdowns, and more. All timestamped, all ready to roll into your reports.

How fresh is the data?

Near real-time. We're talking 5 minutes from detection to API. Your JamBox captures it, we process it, you query it. That's the Data Jam way.

Can I pull more than 30 days?

Not in one call - but you can easily batch requests. Need a year? That's 12 calls. We've got code examples above that make it a breeze.

11. Support

Stuck? Hit a snag? Just want to say hi? We're here for it. The Data Jam team is ready to help you get the most out of your data:

Development Team

devteam@data-jam.com

General Support

team@data-jam.com

US Contact

Arran: (747) 243 3513

UK Contact

Alex: +44 7827 813388

Coming Soon: Data Jam PULSE - Our predictive movement engine is coming. Know where your audience will be, not just where they've been. The future of OOH intelligence is almost here.