Radar Events API
List and retrieve geofence, place, and trip events (entered/exited, approaching, arrived) generated by tracking over api.radar.io/v1/events.
List and retrieve geofence, place, and trip events (entered/exited, approaching, arrived) generated by tracking over api.radar.io/v1/events.
openapi: 3.0.3
info:
title: Radar API
description: >-
Radar is a geofencing and maps platform. The Radar API provides forward and
reverse geocoding, IP geocoding, address and place search with autocomplete,
geofence search, routing (distance, matrix, directions, and route matching),
geofence management, user (device) tracking, events, trips, address
verification, and map tiles. All requests are authenticated with an
Authorization header containing a publishable (client) key prefixed
`prj_live_pk_` / `prj_test_pk_` or a secret (server) key prefixed
`prj_live_sk_` / `prj_test_sk_`.
termsOfService: https://radar.com/terms
contact:
name: Radar Support
email: support@radar.com
url: https://radar.com/documentation
version: '1.0'
servers:
- url: https://api.radar.io/v1
description: Radar production API
security:
- RadarKey: []
tags:
- name: Geocoding
description: Forward, reverse, and IP geocoding.
- name: Search
description: Address and place autocomplete, place search, and geofence search.
- name: Routing
description: Distance, matrix, directions, and route matching.
- name: Geofences
description: Create, read, update, and delete geofences.
- name: Track
description: Track device location and manage users.
- name: Events
description: List and manage geofence and place events.
- name: Trips
description: Create, update, and list trips for trip tracking.
- name: Addresses
description: Validate and verify addresses.
- name: Tiles
description: Raster and vector map tiles.
paths:
/geocode/forward:
get:
operationId: forwardGeocode
tags:
- Geocoding
summary: Forward geocode an address.
description: Geocodes an address, converting an address string to coordinates.
parameters:
- name: query
in: query
required: true
description: The address to geocode.
schema:
type: string
example: 841 Broadway, New York, NY 10003
- name: layers
in: query
required: false
description: Optional comma-separated layers to filter (e.g. address, postalCode, locality).
schema:
type: string
- name: country
in: query
required: false
description: Optional comma-separated ISO 3166 country codes to filter.
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/GeocodeResponse'
/geocode/reverse:
get:
operationId: reverseGeocode
tags:
- Geocoding
summary: Reverse geocode coordinates.
description: Reverse geocodes a location, converting coordinates to an address.
parameters:
- name: coordinates
in: query
required: true
description: The latitude and longitude to reverse geocode, comma-separated.
schema:
type: string
example: 40.73430,-73.99110
- name: layers
in: query
required: false
description: Optional comma-separated layers to filter.
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/GeocodeResponse'
/geocode/ip:
get:
operationId: ipGeocode
tags:
- Geocoding
summary: IP geocode.
description: >-
Geocodes the requester's IP address (or an explicitly provided IP) to a
city, state, and country.
parameters:
- name: ip
in: query
required: false
description: Optional IP address to geocode. Defaults to the requester IP.
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/IpGeocodeResponse'
/search/autocomplete:
get:
operationId: autocomplete
tags:
- Search
summary: Autocomplete addresses and places.
description: Autocompletes partial addresses and place names, returning ranked suggestions.
parameters:
- name: query
in: query
required: true
description: The partial address or place to autocomplete.
schema:
type: string
example: 841 Broadway
- name: near
in: query
required: false
description: Optional latitude,longitude to bias results toward.
schema:
type: string
example: 40.70390,-73.98730
- name: limit
in: query
required: false
description: The maximum number of results (default 10, max 100).
schema:
type: integer
default: 10
- name: layers
in: query
required: false
description: Optional comma-separated layers to filter (e.g. address, street, locality, place).
schema:
type: string
- name: countryCode
in: query
required: false
description: Optional ISO 3166 country code to filter.
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AutocompleteResponse'
/search/places:
get:
operationId: searchPlaces
tags:
- Search
summary: Search for places.
description: >-
Searches for places near a location, filtered by chain, category, or
Radar place group.
parameters:
- name: near
in: query
required: true
description: The latitude,longitude to search near.
schema:
type: string
example: 40.78382,-73.97536
- name: radius
in: query
required: false
description: The radius to search within, in meters (max 10000).
schema:
type: integer
default: 1000
- name: chains
in: query
required: false
description: Optional comma-separated chain slugs to filter (e.g. starbucks).
schema:
type: string
- name: categories
in: query
required: false
description: Optional comma-separated categories to filter (e.g. food-beverage).
schema:
type: string
- name: limit
in: query
required: false
description: The maximum number of results (default 10, max 100).
schema:
type: integer
default: 10
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PlaceSearchResponse'
/search/geofences:
get:
operationId: searchGeofences
tags:
- Search
summary: Search for geofences.
description: Searches for geofences near a location, filtered by tag and metadata.
parameters:
- name: near
in: query
required: true
description: The latitude,longitude to search near.
schema:
type: string
example: 40.78382,-73.97536
- name: radius
in: query
required: false
description: The radius to search within, in meters (max 10000).
schema:
type: integer
default: 1000
- name: tags
in: query
required: false
description: Optional comma-separated geofence tags to filter.
schema:
type: string
- name: limit
in: query
required: false
description: The maximum number of results (default 100, max 1000).
schema:
type: integer
default: 100
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/GeofenceListResponse'
/route/distance:
get:
operationId: routeDistance
tags:
- Routing
summary: Calculate travel distance and duration.
description: >-
Calculates the travel distance and duration between an origin and a
destination for one or more travel modes.
parameters:
- name: origin
in: query
required: true
description: The origin latitude,longitude.
schema:
type: string
example: 40.78382,-73.97536
- name: destination
in: query
required: true
description: The destination latitude,longitude.
schema:
type: string
example: 40.70390,-73.98730
- name: modes
in: query
required: true
description: Comma-separated travel modes (foot, bike, car, truck, motorbike).
schema:
type: string
example: car,foot
- name: units
in: query
required: false
description: The distance units (metric or imperial).
schema:
type: string
enum:
- metric
- imperial
default: imperial
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/DistanceResponse'
/route/matrix:
get:
operationId: routeMatrix
tags:
- Routing
summary: Calculate a distance matrix.
description: >-
Calculates travel distances and durations between multiple origins and
destinations.
parameters:
- name: origins
in: query
required: true
description: Pipe-separated list of origin latitude,longitude pairs.
schema:
type: string
example: 40.78382,-73.97536|40.70390,-73.98730
- name: destinations
in: query
required: true
description: Pipe-separated list of destination latitude,longitude pairs.
schema:
type: string
example: 40.73430,-73.99110|40.75080,-73.99340
- name: mode
in: query
required: true
description: The travel mode (foot, bike, car, truck, motorbike).
schema:
type: string
example: car
- name: units
in: query
required: false
description: The distance units (metric or imperial).
schema:
type: string
enum:
- metric
- imperial
default: imperial
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MatrixResponse'
/route/directions:
get:
operationId: routeDirections
tags:
- Routing
summary: Get turn-by-turn directions.
description: >-
Returns turn-by-turn directions and route geometry between a series of
locations.
parameters:
- name: locations
in: query
required: true
description: Pipe-separated list of latitude,longitude waypoints.
schema:
type: string
example: 40.78382,-73.97536|40.70390,-73.98730
- name: mode
in: query
required: true
description: The travel mode (foot, bike, car, truck, motorbike).
schema:
type: string
example: car
- name: units
in: query
required: false
description: The distance units (metric or imperial).
schema:
type: string
enum:
- metric
- imperial
default: imperial
- name: geometry
in: query
required: false
description: The geometry encoding (linestring, polyline, or polyline6).
schema:
type: string
default: linestring
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/DirectionsResponse'
/route/match:
post:
operationId: routeMatch
tags:
- Routing
summary: Match a GPS trace to roads.
description: >-
Snaps a sequence of noisy GPS coordinates to the road network and
returns the matched route.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RouteMatchRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/DirectionsResponse'
/geofences:
get:
operationId: listGeofences
tags:
- Geofences
summary: List geofences.
description: Lists geofences, sorted by creation date descending.
parameters:
- name: tag
in: query
required: false
description: Optional geofence tag to filter.
schema:
type: string
- name: limit
in: query
required: false
description: The maximum number of geofences (default 100, max 1000).
schema:
type: integer
default: 100
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/GeofenceListResponse'
/geofences/{tag}/{externalId}:
put:
operationId: upsertGeofence
tags:
- Geofences
summary: Create or update a geofence.
description: Creates or updates a geofence identified by a tag and external ID.
parameters:
- name: tag
in: path
required: true
description: The geofence tag.
schema:
type: string
- name: externalId
in: path
required: true
description: The external ID that uniquely identifies the geofence within the tag.
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GeofenceUpsertRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/GeofenceResponse'
get:
operationId: getGeofence
tags:
- Geofences
summary: Get a geofence.
description: Retrieves a geofence by tag and external ID.
parameters:
- name: tag
in: path
required: true
schema:
type: string
- name: externalId
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/GeofenceResponse'
delete:
operationId: deleteGeofence
tags:
- Geofences
summary: Delete a geofence.
description: Deletes a geofence by tag and external ID.
parameters:
- name: tag
in: path
required: true
schema:
type: string
- name: externalId
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
/track:
post:
operationId: track
tags:
- Track
summary: Track a device location.
description: >-
Tracks a device's location server-side, generating events and updating
the user. Requires a secret key.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TrackRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/TrackResponse'
/users:
get:
operationId: listUsers
tags:
- Track
summary: List users.
description: Lists users, sorted by last updated descending.
parameters:
- name: limit
in: query
required: false
description: The maximum number of users (default 100, max 1000).
schema:
type: integer
default: 100
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/UserListResponse'
/users/{userId}:
get:
operationId: getUser
tags:
- Track
summary: Get a user.
description: Retrieves a user by Radar ID or external ID.
parameters:
- name: userId
in: path
required: true
description: The Radar _id, or an external ID prefixed with externalId=.
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/UserResponse'
delete:
operationId: deleteUser
tags:
- Track
summary: Delete a user.
description: Deletes a user and associated location data.
parameters:
- name: userId
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
/events:
get:
operationId: listEvents
tags:
- Events
summary: List events.
description: Lists geofence, place, and trip events, sorted by creation date descending.
parameters:
- name: limit
in: query
required: false
description: The maximum number of events (default 100, max 1000).
schema:
type: integer
default: 100
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/EventListResponse'
/events/{eventId}:
get:
operationId: getEvent
tags:
- Events
summary: Get an event.
description: Retrieves an event by ID.
parameters:
- name: eventId
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/EventResponse'
/trips:
get:
operationId: listTrips
tags:
- Trips
summary: List trips.
description: Lists trips, sorted by creation date descending.
parameters:
- name: status
in: query
required: false
description: Optional trip status to filter (started, approaching, arrived, completed, canceled, expired).
schema:
type: string
- name: limit
in: query
required: false
schema:
type: integer
default: 100
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/TripListResponse'
/trips/{externalId}:
post:
operationId: upsertTrip
tags:
- Trips
summary: Create or update a trip.
description: Creates or updates a trip identified by an external ID.
parameters:
- name: externalId
in: path
required: true
description: The external ID that uniquely identifies the trip.
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TripUpsertRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/TripResponse'
get:
operationId: getTrip
tags:
- Trips
summary: Get a trip.
description: Retrieves a trip by external ID.
parameters:
- name: externalId
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/TripResponse'
patch:
operationId: updateTrip
tags:
- Trips
summary: Update a trip.
description: Updates the status or metadata of an existing trip.
parameters:
- name: externalId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TripUpdateRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/TripResponse'
/addresses/validate:
get:
operationId: validateAddress
tags:
- Addresses
summary: Validate an address.
description: >-
Validates and standardizes an address, returning a verification status
and standardized components.
parameters:
- name: countryCode
in: query
required: true
description: The ISO 3166 country code.
schema:
type: string
example: US
- name: stateCode
in: query
required: false
schema:
type: string
example: NY
- name: city
in: query
required: false
schema:
type: string
example: New York
- name: postalCode
in: query
required: false
schema:
type: string
example: '10003'
- name: number
in: query
required: false
schema:
type: string
example: '841'
- name: street
in: query
required: false
schema:
type: string
example: Broadway
- name: addressLabel
in: query
required: false
description: A full single-line address to validate.
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AddressValidationResponse'
/maps/tiles/{z}/{x}/{y}.png:
get:
operationId: getRasterTile
tags:
- Tiles
summary: Get a raster map tile.
description: Returns a raster (PNG) map tile for the given zoom, x, and y coordinates.
parameters:
- name: z
in: path
required: true
description: The zoom level.
schema:
type: integer
- name: x
in: path
required: true
schema:
type: integer
- name: 'y'
in: path
required: true
schema:
type: integer
- name: style
in: query
required: false
description: The map style (e.g. radar-default-v1, radar-light-v1, radar-dark-v1).
schema:
type: string
default: radar-default-v1
- name: scale
in: query
required: false
description: The tile scale (1 or 2 for retina).
schema:
type: integer
default: 1
responses:
'200':
description: OK
content:
image/png:
schema:
type: string
format: binary
components:
securitySchemes:
RadarKey:
type: apiKey
in: header
name: Authorization
description: >-
A Radar publishable (client) key (prj_live_pk_... / prj_test_pk_...) or
secret (server) key (prj_live_sk_... / prj_test_sk_...), passed in the
Authorization header without a Bearer prefix.
schemas:
Meta:
type: object
properties:
code:
type: integer
example: 200
Address:
type: object
properties:
latitude:
type: number
format: double
longitude:
type: number
format: double
geometry:
type: object
properties:
type:
type: string
example: Point
coordinates:
type: array
items:
type: number
country:
type: string
countryCode:
type: string
state:
type: string
stateCode:
type: string
city:
type: string
postalCode:
type: string
number:
type: string
street:
type: string
addressLabel:
type: string
formattedAddress:
type: string
layer:
type: string
confidence:
type: string
GeocodeResponse:
type: object
properties:
meta:
$ref: '#/components/schemas/Meta'
addresses:
type: array
items:
$ref: '#/components/schemas/Address'
IpGeocodeResponse:
type: object
properties:
meta:
$ref: '#/components/schemas/Meta'
ip:
type: string
address:
$ref: '#/components/schemas/Address'
proxy:
type: boolean
AutocompleteResponse:
type: object
properties:
meta:
$ref: '#/components/schemas/Meta'
addresses:
type: array
items:
$ref: '#/components/schemas/Address'
Place:
type: object
properties:
_id:
type: string
name:
type: string
categories:
type: array
items:
type: string
chain:
type: object
properties:
name:
type: string
slug:
type: string
location:
type: object
properties:
type:
type: string
example: Point
coordinates:
type: array
items:
type: number
PlaceSearchResponse:
type: object
properties:
meta:
$ref: '#/components/schemas/Meta'
places:
type: array
items:
$ref: '#/components/schemas/Place'
Geofence:
type: object
properties:
_id:
type: string
description:
type: string
tag:
type: string
externalId:
type: string
type:
type: string
enum:
- circle
- polygon
- isochrone
geometryCenter:
type: object
properties:
type:
type: string
example: Point
coordinates:
type: array
items:
type: number
geometryRadius:
type: integer
enabled:
type: boolean
metadata:
type: object
additionalProperties: true
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
GeofenceUpsertRequest:
type: object
required:
- description
- type
properties:
description:
type: string
type:
type: string
enum:
- circle
- polygon
- isochrone
coordinates:
type: array
description: For circle, [longitude, latitude]. For polygon, an array of [lng, lat] pairs.
items: {}
radius:
type: integer
description: The radius in meters (for circle geofences).
enabled:
type: boolean
default: true
metadata:
type: object
additionalProperties: true
GeofenceResponse:
type: object
properties:
meta:
$ref: '#/components/schemas/Meta'
geofence:
$ref: '#/components/schemas/Geofence'
GeofenceListResponse:
type: object
properties:
meta:
$ref: '#/components/schemas/Meta'
geofences:
type: array
items:
$ref: '#/components/schemas/Geofence'
RouteLeg:
type: object
properties:
distance:
type: object
properties:
value:
type: number
text:
type: string
duration:
type: object
properties:
value:
type: number
text:
type: string
DistanceResponse:
type: object
properties:
meta:
$ref: '#/components/schemas/Meta'
routes:
type: object
additionalProperties:
$ref: '#/components/schemas/RouteLeg'
MatrixResponse:
type: object
properties:
meta:
$ref: '#/components/schemas/Meta'
origins:
type: array
items:
type: object
destinations:
type: array
items:
type: object
matrix:
type: array
description: A 2D array of route legs indexed by origin then destination.
items:
type: array
items:
$ref: '#/components/schemas/RouteLeg'
DirectionsResponse:
type: object
properties:
meta:
$ref: '#/components/schemas/Meta'
routes:
type: array
items:
type: object
properties:
distance:
type: object
duration:
type: object
geometry:
type: object
legs:
type: array
items:
type: object
RouteMatchRequest:
type: object
required:
- coordinates
- mode
properties:
coordinates:
type: array
description: An ordered list of [longitude, latitude] GPS points.
items:
type: array
items:
type: number
mode:
type: string
example: car
timestamps:
type: array
description: Optional UNIX timestamps aligned with coordinates.
items:
type: integer
Location:
type: object
properties:
type:
type: string
example: Point
coordinates:
type: array
items:
type: number
User:
type: object
properties:
_id:
type: string
userId:
type: string
deviceId:
type: string
description:
type: string
metadata:
type: object
additionalProperties: true
location:
$ref: '#/components/schemas/Location'
locationAccuracy:
type: number
geofences:
type: array
items:
$ref: '#/components/schemas/Geofence'
place:
$ref: '#/components/schemas/Place'
updatedAt:
type: string
format: date-time
TrackRequest:
type: object
required:
- deviceId
- latitude
- longitude
# --- truncated at 32 KB (36 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/radar-io/refs/heads/main/openapi/radar-io-openapi.yml