v1.3.0
Access fresh street-level imagery, map features, and AI-detected video driving events from the world's largest decentralized mapping infrastructure with Bee cameras collecting data globally.
Most endpoints require authentication via API key. You can authenticate in two ways:
Option 1: Query Parameter
apiKey as a query parameter: ?apiKey=YOUR_API_KEYOption 2: Authorization Header
Authorization header with your API key: Authorization: Basic YOUR_API_KEYBoth methods work for all authenticated endpoints.
All API requests require a Basic API key sent via the Authorization header. You can generate and manage keys in the Developer Portal.
curl -X GET "https://beemaps.com/api/developer/imagery" \ -H "Authorization: Basic YOUR_API_KEY"
Access fresh, high-quality geolocated street-level imagery
/imagery/polyReturns street-level imagery frames captured during a specific week within your polygon boundary. Use this for historical imagery queries or when you need data from a particular time period.
Each frame includes:
Use /map-data instead if you need: point+radius queries, route-based queries, or both imagery and map features together.
Constraints:
GeoJSON (Multi)Polygon
typestringPolygon or MultiPolygon
Example: "Polygon"
coordinatesnumber[][][]Example: [[[-122.48185591741223,37.76910370072376]]]
const apiKey = 'your-api-key-here';const url = 'https://beemaps.com/api/developer/imagery/poly';const resp = await fetch(url, { method: 'post', body: JSON.stringify({ coordinates: [ [ [-122.41927011115149,37.775414437036275], [-122.41605628337065,37.7763 86631642566], [-122.41597692959819,37.77889546188183], [-122.42299973845249,37.7772647319 11615], [-122.41927011115149,37.775414437036275] ] ], type: 'Polygon' }), headers: { 'content-type': 'application/json', 'authorization': `Basic ${apiKey}` }});const data = await resp.json();const frames = data.frames;framesImageryResultsArray items:
urlstringtemporary signed url
Example: "https://www.cdn.com/image?signed=yoursdearly"
timestampstringExample: "2023-11-09T02:30:48.974Z"
sequencestringExample: "60cb39e7cce2931a8cd2fa2d"
idxintegerExample: 0
devicestringsupported ODC dashcam device
Example: "hdc"
positionobjectlatnumberN
Example: 37.76910370072376
lat_refstringExample: "n"
lonnumberE
Example: -122.48185591741223
lon_refstringExample: "e"
gdopnumberExample: 0.123
hdopnumberExample: 0.123
pdopnumberExample: 0.123
ephnumberExample: 0.123
cnonumberExample: 0.123
widthintegerExample: 2028
heightintegerExample: 1024
imuobjectacc_xnumberExample: 0.123
acc_ynumberExample: 0.123
acc_znumberExample: 0.123
gyro_xnumberExample: 0.123
gyro_ynumberExample: 0.123
gyro_znumberExample: 0.123
notestringOptional note about the query result
/latest/polyReturns the freshest available street-level imagery within your polygon, optionally filtered to exclude data older than a specified week. Use this when you want current conditions rather than historical data.
Ideal for:
Constraints:
YYYY-mm-dd of a day in the week to use as cutoff
Include heading information in the response
When set to 'true', returns catalog metadata only without signed image URLs
When true, queries use the full input polygon for each time period instead of sub-polygons
GeoJSON (Multi)Polygon
typestringPolygon or MultiPolygon
Example: "Polygon"
coordinatesnumber[][][]Example: [[[-122.48185591741223,37.76910370072376]]]
const apiKey = 'your-api-key-here';const url = 'https://beemaps.com/api/developer/latest/poly';const resp = await fetch(url, { method: 'post', body: JSON.stringify({ coordinates: [ [ [-122.41927011115149,37.775414437036275], [-122.41605628337065,37.7763 86631642566], [-122.41597692959819,37.77889546188183], [-122.42299973845249,37.7772647319 11615], [-122.41927011115149,37.775414437036275] ] ], type: 'Polygon' }), headers: { 'content-type': 'application/json', 'authorization': `Basic ${apiKey}` }});const data = await resp.json();const frames = data.frames;framesImageryResultsArray items:
urlstringtemporary signed url
Example: "https://www.cdn.com/image?signed=yoursdearly"
timestampstringExample: "2023-11-09T02:30:48.974Z"
sequencestringExample: "60cb39e7cce2931a8cd2fa2d"
idxintegerExample: 0
devicestringsupported ODC dashcam device
Example: "hdc"
positionobjectlatnumberN
Example: 37.76910370072376
lat_refstringExample: "n"
lonnumberE
Example: -122.48185591741223
lon_refstringExample: "e"
gdopnumberExample: 0.123
hdopnumberExample: 0.123
pdopnumberExample: 0.123
ephnumberExample: 0.123
cnonumberExample: 0.123
widthintegerExample: 2028
heightintegerExample: 1024
imuobjectacc_xnumberExample: 0.123
acc_ynumberExample: 0.123
acc_znumberExample: 0.123
gyro_xnumberExample: 0.123
gyro_ynumberExample: 0.123
gyro_znumberExample: 0.123
notestringOptional note about the query result
Access AI-detected driving video events from Bee cameras on vehicles
/aievents/searchAccess action-rich video clips with synchronized ego-vehicle data for training AI driving systems and world models.
Search and retrieve video segments capturing specific driving behaviors and scenarios—harsh braking, lane changes, stop sign interactions, swerving maneuvers, and more.
Each event includes:
Your API key. Alternative to Authorization header.
startDatestringStart of the time range (ISO 8601)
endDatestringEnd of the time range (ISO 8601). Must be within 31 days of startDate.
deviceIdsstring[]Array of Device IDs to filter by
typesstring · enum[]Array of AI event types to filter by
HARSH_BRAKINGAGGRESSIVE_ACCELERATIONSWERVINGHIGH_SPEEDHIGH_G_FORCESTOP_SIGN_VIOLATIONTRAFFIC_LIGHT_VIOLATIONTAILGATINGpolygonnumber[][]Array of [lon, lat] coordinates defining a closed polygon. Must have at least 4 points with first and last point matching. Must not self-intersect.
limitintegerNumber of items to return
Default: 100
offsetintegerOffset for pagination
Default: 0
const apiKey = 'your-api-key-here';const url = 'https://beemaps.com/api/developer/aievents/search';const resp = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Basic ${apiKey}` }, body: JSON.stringify({ startDate: '2026-01-01T00:00:00.000Z', endDate: '2026-01-21T23:59:59.000Z', types: ['SWERVING', 'HARSH_BRAKING'], limit: 100 })});const data = await resp.json();// Response: { pagination: {...}, startDate, endDate, events: [...] }paginationAIEventPaginationtotalintegerTotal number of events matching the query
limitintegerNumber of items returned per page
offsetintegerCurrent offset for pagination
startDatestringendDatestringeventsAIEvent[]Array items:
idstringUnique event identifier
Example: "697100eef68342b197b78418"
typestring · enumType of AI-detected driving event
HARSH_BRAKINGAGGRESSIVE_ACCELERATIONSWERVINGHIGH_SPEEDHIGH_G_FORCESTOP_SIGN_VIOLATIONTRAFFIC_LIGHT_VIOLATIONTAILGATINGtimestampstringWhen the event occurred
Example: "2026-01-21T16:37:27.250Z"
locationobjectGPS coordinates where the event occurred
latnumberLatitude
Example: 37.7749
lonnumberLongitude
Example: -122.4194
metadataobjectEvent-specific metadata. Contents vary by event type. Common fields include ACCELERATION_MS2, SPEED_MS, SPEED_LIMIT_MS, FIRMWARE_VERSION.
Example: {"ACCELERATION_MS2":1.108304,"FIRMWARE_VERSION":"6.63.0"}
videoUrlstringTemporary signed URL to download the event video clip. May be null if video is not available.
Example: "https://example-bucket.s3.amazonaws.com/recordings/.../video.mp4?X-Amz-..."
gnssDataobject[]High-precision GPS data array. Only included when includeGnssData=true query parameter is set. Contains ~30-60 samples at ~1Hz rate around the event.
Example: [{"timestamp":1769731194000,"lat":37.7749123,"lon":-122.4194567,"alt":15.5},{"timestamp":1769731195000,"lat":37.7749234,"lon":-122.4194678,"alt":15.6}]
Array items:
timestampnumberUnix timestamp in milliseconds
Example: 1769731194000
latnumberLatitude in degrees
Example: 37.7749123
lonnumberLongitude in degrees
Example: -122.4194567
altnumberAltitude in meters
Example: 15.5
imuDataobject[]High-frequency IMU (Inertial Measurement Unit) sensor data. Only included when includeImuData=true query parameter is set. Contains 3000+ samples at ~10Hz (100ms intervals) capturing 3-axis accelerometer and gyroscope readings around the event.
Example: [{"timestamp":1769731194000.461,"acc_x":-0.204417,"acc_y":-0.000218,"acc_z":1.011279,"gyro_x":0.030514,"gyro_y":0.915588,"gyro_z":-0.282222},{"timestamp":1769731194100.461,"acc_x":-0.210543,"acc_y":0.004563,"acc_z":1.008234,"gyro_x":0.152592,"gyro_y":0.778777,"gyro_z":-0.335555}]
Array items:
timestampnumberUnix timestamp in milliseconds with sub-millisecond precision
Example: 1769731194000.461
acc_xnumberAcceleration in X axis (m/s²)
Example: -0.204417
acc_ynumberAcceleration in Y axis (m/s²)
Example: -0.000218
acc_znumberAcceleration in Z axis (m/s²)
Example: 1.011279
gyro_xnumberAngular velocity around X axis (rad/s)
Example: 0.030514
gyro_ynumberAngular velocity around Y axis (rad/s)
Example: 0.915588
gyro_znumberAngular velocity around Z axis (rad/s)
Example: -0.282222
/aievents/{id}Retrieve detailed information about a specific AI-detected driving event, including the video clip URL and synchronized ego-vehicle data.
Use query parameters to optionally include frame-level sensor data:
?includeGnssData=true - Include GPS coordinates array (lat, lon, alt, timestamp)?includeImuData=true - Include IMU array (accelerometer/gyroscope readings with timestamps)?includeGnssData=true&includeImuData=true - Include bothNote: Sensor data adds 50-200 KB to response size. Only request when needed for detailed analysis, path reconstruction, or ML training.
Use this endpoint after searching to access the full event details and video for analysis, training, or validation purposes.
Event ID
Include frame-level GPS data (lat, lon, alt, timestamp array)
Include frame-level IMU data (accelerometer and gyroscope readings with timestamps)
Your API key. Alternative to Authorization header.
const apiKey = 'your-api-key-here';const eventId = '697100eef68342b197b78418';const url = `https://beemaps.com/api/developer/aievents/${eventId}`;const resp = await fetch(url, { method: 'GET', headers: { 'Authorization': `Basic ${apiKey}` }});const event = await resp.json();// Response: { id, type, timestamp, location, metadata, videoUrl }idstringUnique event identifier
Example: "697100eef68342b197b78418"
typestring · enumType of AI-detected driving event
HARSH_BRAKINGAGGRESSIVE_ACCELERATIONSWERVINGHIGH_SPEEDHIGH_G_FORCESTOP_SIGN_VIOLATIONTRAFFIC_LIGHT_VIOLATIONTAILGATINGtimestampstringWhen the event occurred
Example: "2026-01-21T16:37:27.250Z"
locationobjectGPS coordinates where the event occurred
latnumberLatitude
Example: 37.7749
lonnumberLongitude
Example: -122.4194
metadataobjectEvent-specific metadata. Contents vary by event type. Common fields include ACCELERATION_MS2, SPEED_MS, SPEED_LIMIT_MS, FIRMWARE_VERSION.
Example: {"ACCELERATION_MS2":1.108304,"FIRMWARE_VERSION":"6.63.0"}
videoUrlstringTemporary signed URL to download the event video clip. May be null if video is not available.
Example: "https://example-bucket.s3.amazonaws.com/recordings/.../video.mp4?X-Amz-..."
gnssDataobject[]High-precision GPS data array. Only included when includeGnssData=true query parameter is set. Contains ~30-60 samples at ~1Hz rate around the event.
Example: [{"timestamp":1769731194000,"lat":37.7749123,"lon":-122.4194567,"alt":15.5},{"timestamp":1769731195000,"lat":37.7749234,"lon":-122.4194678,"alt":15.6}]
Array items:
timestampnumberUnix timestamp in milliseconds
Example: 1769731194000
latnumberLatitude in degrees
Example: 37.7749123
lonnumberLongitude in degrees
Example: -122.4194567
altnumberAltitude in meters
Example: 15.5
imuDataobject[]High-frequency IMU (Inertial Measurement Unit) sensor data. Only included when includeImuData=true query parameter is set. Contains 3000+ samples at ~10Hz (100ms intervals) capturing 3-axis accelerometer and gyroscope readings around the event.
Example: [{"timestamp":1769731194000.461,"acc_x":-0.204417,"acc_y":-0.000218,"acc_z":1.011279,"gyro_x":0.030514,"gyro_y":0.915588,"gyro_z":-0.282222},{"timestamp":1769731194100.461,"acc_x":-0.210543,"acc_y":0.004563,"acc_z":1.008234,"gyro_x":0.152592,"gyro_y":0.778777,"gyro_z":-0.335555}]
Array items:
timestampnumberUnix timestamp in milliseconds with sub-millisecond precision
Example: 1769731194000.461
acc_xnumberAcceleration in X axis (m/s²)
Example: -0.204417
acc_ynumberAcceleration in Y axis (m/s²)
Example: -0.000218
acc_znumberAcceleration in Z axis (m/s²)
Example: 1.011279
gyro_xnumberAngular velocity around X axis (rad/s)
Example: 0.030514
gyro_ynumberAngular velocity around Y axis (rad/s)
Example: 0.915588
gyro_znumberAngular velocity around Z axis (rad/s)
Example: -0.282222
Query detected road objects like speed limits, stop signs, and lane lines
/map-dataThe primary endpoint for accessing Hivemapper road intelligence. Returns detected road features (speed limits, stop signs, turn restrictions, fire hydrants, lane lines) and/or street-level imagery within your specified geometry.
Use this endpoint when you need:
whats within 100m of this location')whats along this delivery path')Common use cases: fleet route validation, robotaxi pickup/dropoff zone checks, POI verification, AI training data collection, infrastructure auditing.
Geometry options:
Constraints:
startDate defaults to 1 week ago if not specified for imagery queries.Your API key. Alternative to Authorization header.
Request parameters including geometry, data type, and optional filters
typestring · enum[]Array of data types to query (at least one required)
mapFeaturesimagerygeometryPointGeometry | LinestringGeometry | PolygonGeometryOne of:
PointGeometryPointGeometryLinestringGeometryLinestringGeometryPolygonGeometryPolygonGeometrystartDatestringStart date (YYYY-MM-DD) for imagery queries. Must be within the last year. If not provided, defaults to one week ago.
headingsbooleanInclude heading information (imagery only)
const apiKey = 'your-api-key-here';const url = `https://beemaps.com/api/developer/map-data?apiKey=${apiKey}`;const resp = await fetch(url, { method: 'post', body: JSON.stringify({ type: ['mapFeatures'], geometry: { type: 'Point', coordinates: [-122.419, 37.774], radius: 100 } }), headers: { 'content-type': 'application/json' }});const data = await resp.json();// Response: { totalCreditsUsed, totalCreditsRemaining, mapFeatureResults: { type, data, creditsUsed } }totalCreditsUsedintegerTotal number of credits consumed by all query types
totalCreditsRemainingintegerNumber of credits remaining after the query
mapFeatureResultsMapDataResulttypestring · enumThe type of data returned
mapFeaturesimagerydataMapFeaturesResults | ImageryResultsThe actual data - either map features or imagery frames
One of:
MapFeaturesResultsMapFeaturesResultsImageryResultsImageryResultsnotestringOptional note about the query result
imageryResultsMapDataResulttypestring · enumThe type of data returned
mapFeaturesimagerydataMapFeaturesResults | ImageryResultsThe actual data - either map features or imagery frames
One of:
MapFeaturesResultsMapFeaturesResultsImageryResultsImageryResultsnotestringOptional note about the query result
/mapFeatures/polyReturns map features (road signs, infrastructure, lane markings) detected within your polygon boundary. Each feature includes precise positioning, confidence score, and feature-specific properties.
Feature types include:
Each feature includes:
Use /map-data instead if you need: point+radius queries, route-based queries, or both imagery and features together.
Constraints:
GeoJSON (Multi)Polygon
typestringPolygon or MultiPolygon
Example: "Polygon"
coordinatesnumber[][][]Example: [[[-122.48185591741223,37.76910370072376]]]
const apiKey = 'your-api-key-here';const url = 'https://beemaps.com/api/developer/mapFeatures/poly';const resp = await fetch(url, { method: 'post', body: JSON.stringify({ coordinates: [ [ [-122.41927011115149,37.775414437036275], [-122.41605628337065,37.7763 86631642566], [-122.41597692959819,37.77889546188183], [-122.42299973845249,37.7772647319 11615], [-122.41927011115149,37.775414437036275] ] ], type: 'Polygon' }), headers: { 'content-type': 'application/json', 'authorization': `Basic ${apiKey}` }});const data = await resp.json();const features = data.features;featuresMapFeaturesResultsArray items:
idstringunique id
Example: "SLS299345"
statusstringExample: "active"
propertiesobjectspeedLimitintegerExample: 35
unitstringExample: "mph"
regulatorystringExample: "enforced"
positionobjectlonnumberExample: -108.123
latnumberExample: 34.234
azimuthnumberExample: 90
heightnumberExample: 0.5
widthnumberExample: 0.3
observedobjectfirstSeenstringExample: "2023-11-09T03:09:40.131Z"
LastSeenstringExample: "2023-11-09T03:09:40.131Z"
confidencenumberExample: 0.99
classstringExample: "speed-limit"
/burst/createCreates bursts that incentivize Hivemapper drivers to map specific locations. Once created, bursts appear in the Bee App and trigger push notifications to nearby drivers.
Use this when:
Input options:
Coverage timing (depends on local driver density):
After creating a burst:
isHit field)Array of burst creation requests
Array items:
geojsonPolygon | PointGeometryEither a GeoJSON Polygon or a Point with radius (in meters). Point + radius will be converted to a Polygon internally.
One of:
PolygonPolygonPointGeometryPointGeometrytrackedLocationstringOptional Tracked location ID
expirationstringOptional expiration date overwrite
deviceTypestring · enumOptional device type of burst target
beeconst apiKey = 'your-api-key-here';const url = 'https://beemaps.com/api/developer/burst/create';const resp = await fetch(url, { method: 'POST', headers: { 'Authorization': `Basic ${apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify([{ geojson: { type: 'Point', coordinates: [-122.419, 37.774], radius: 500 }, credits: 125 }])});const data = await resp.json();// Response: { success: true, bursts: [...], creditsRemaining: 1000 }successbooleanburstsHoneyBurst[]Array items:
_idstringgeojsonPolygontypestringPolygon or MultiPolygon
Example: "Polygon"
coordinatesnumber[][][]Example: [[[-122.48185591741223,37.76910370072376]]]
amountnumberstatusstring · enumactiveexpiredrefundedvalidFromstringvalidUntilstringdeviceTypestring · enumbeeisHitbooleanWhether the burst has been intersected by a coverage report
latestHitAtstringTimestamp of the coverage report that triggered the hit detection
createdAtstringupdatedAtstring/burstsReturns a paginated list of bursts you've created, with their current status and coverage information.
Use this to:
hit (driver collected imagery in the area)Key fields in response:
active (waiting for coverage), expired, or refundedisHit: true if a driver has mapped the burst arealatestHitAt: Timestamp when coverage was detectedvalidUntil: Burst expiration datecurl -X GET "https://beemaps.com/api/developer/bursts" \ -H "Authorization: Basic YOUR_API_KEY"burstsHoneyBurst[]Array items:
_idstringgeojsonPolygontypestringPolygon or MultiPolygon
Example: "Polygon"
coordinatesnumber[][][]Example: [[[-122.48185591741223,37.76910370072376]]]
amountnumberstatusstring · enumactiveexpiredrefundedvalidFromstringvalidUntilstringdeviceTypestring · enumbeeisHitbooleanWhether the burst has been intersected by a coverage report
latestHitAtstringTimestamp of the coverage report that triggered the hit detection
createdAtstringupdatedAtstringtotalintegerlimitintegerskipinteger/devicesReturns camera intrinsic parameters (focal length, distortion coefficients) for each Hivemapper device type. No authentication required.
Use this when:
Device types:
Parameters returned:
curl -X GET "https://beemaps.com/api/developer/devices" \ -H "Authorization: Basic YOUR_API_KEY"/mcpSend JSON-RPC messages to the MCP server using Streamable HTTP transport.
apiKeystringYour Beemaps API key
MCP JSON-RPC Message
{ "mcpServers": { "beemaps": { "url": "https://beemaps.com/api/mcp?apiKey=YOUR_API_KEY" } }}Access account information
/historyReturns a paginated log of your past API queries, including the geometry queried, credits consumed, and timestamps.
Use this to:
Each history entry includes:
curl -X GET "https://beemaps.com/api/developer/history" \ -H "Authorization: Basic YOUR_API_KEY"historyobject[]Array items:
areanumberExample: 101.123
payloadPolygontypestringPolygon or MultiPolygon
Example: "Polygon"
coordinatesnumber[][][]Example: [[[-122.48185591741223,37.76910370072376]]]
timestampstringExample: "2023-11-09T03:09:40.131Z"
weeksstring[]