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.
Always On
AI Powered
Real-Time
Let's get you jamming. Five minutes, one API call, and you're pulling live audience data. Here's how:
https://datajamportal.com/CustomerAPI/
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"
}'
Same login you use for the Data Jam Portal. Simple as that. We use HTTP Basic Authentication - secure, standard, no fuss.
| Parameter | Description |
|---|---|
| username | Your Data Jam Portal email address |
| password | Your Data Jam Portal password |
Authorization: Basic base64(username:password)
Three endpoints. That's it. We keep things clean so you can focus on what matters - your data.
Retrieve footfall, impressions, dwell time, or visitor data for a specific device and date range.
Retrieve device configuration, location, status, and metadata for a specific JamBox.
Submit custom user data to associate with a device (for external data integration).
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 |
Here's exactly what to send. Copy it, tweak it, make it yours.
{
"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" |
{
"project_name": "Your Project Name",
"device_number": "JB000XXX"
}
Here's what comes back. Clean JSON, hourly breakdowns, everything you need to slice and dice your data.
{
"response": [
{
"Date": "25th-Dec",
"Day": "Thu",
"Project": "PR019043",
"Device": "JB000123",
"Sum": 3809,
"AveDW": 7,
"hour01": 53,
"hour02": 54,
...
"hour23": 120
}
]
}
{
"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
}
]
}
| 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 |
One thing to know: we keep queries focused. Here's the deal:
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.
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"
Postman is the easiest way to test the API without writing a single line of code. Here's your setup in 6 steps:
Copy. Paste. Customise. Get jamming in your language of choice:
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"
}'
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())
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));
Got questions? We've got answers:
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.
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.
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.
The good stuff: impressions, visitor counts, dwell times, hourly breakdowns, and more. All timestamped, all ready to roll into your reports.
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.
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.
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:
Arran: (747) 243 3513
Alex: +44 7827 813388