Skip to content

Events API

The Events API handles traffic events, violations, and event processing.

Overview

ProcedureTypeAuthDescription
events.ingestMutationNo*Ingest event from sensor
events.getAllQueryYesGet paginated events
events.getByIdQueryYesGet event by ID
events.getRecentQueryYesGet recent events
events.markAsProcessedMutationYesMark event processed
events.markAsArchivedMutationYesArchive event
events.deleteMutationYesDelete event
events.getStatsQueryYesGet event statistics
events.getEventTypesQueryNoGet event types

*Requires sensor API key

Event Types

typescript
enum EventType {
  TRAFFIC_VIOLATION = "TRAFFIC_VIOLATION",
  SEATBELT_VIOLATION = "SEATBELT_VIOLATION",
  VEHICLE_DETECTION = "VEHICLE_DETECTION",
  SPEED_DETECTION = "SPEED_DETECTION",
  PLATE_RECOGNITION = "PLATE_RECOGNITION",
  INCIDENT = "INCIDENT"
}

Procedures

events.ingest

Public endpoint for sensors to submit events.

Type: Mutation Auth Required: Sensor API Key

Input

typescript
{
  apiKey: string;                    // Sensor API key
  eventType: EventType;              // Event type
  description?: string;
  location?: {
    latitude: number;
    longitude: number;
    address?: string;
  };
  metadata?: Record<string, any>;
  images?: string[];
  tags?: string[];
  violationType?: string;
  licensePlateNumber?: string;
  vehicleType?: string;
  vehicleSpeed?: number;
}

Response

typescript
{
  success: boolean;
  eventId: string;
}

Example

bash
curl -X POST "https://api.itms.solutions/trpc/events.ingest" \
  -H "Content-Type: application/json" \
  -d '{
    "json": {
      "apiKey": "your-sensor-api-key",
      "eventType": "TRAFFIC_VIOLATION",
      "violationType": "SPEEDING",
      "licensePlateNumber": "KZ 123 ABC",
      "vehicleType": "CAR",
      "vehicleSpeed": 85,
      "location": {
        "latitude": 43.238949,
        "longitude": 76.945465,
        "address": "Main Street"
      }
    }
  }'

events.getAll

Get paginated events with filtering.

Type: Query Auth Required: Yes

Input

typescript
{
  eventType?: EventType;
  sensorId?: string;
  startDate?: string;         // ISO date string
  endDate?: string;           // ISO date string
  processed?: boolean;
  archived?: boolean;
  violationType?: string;
  licensePlateNumber?: string;
  vehicleType?: string;
  locationName?: string;
  skip?: number;              // Default: 0
  take?: number;              // Default: 50, max: 100
  sortBy?: "timestamp" | "createdAt" | "eventType" | "severity";
  sortOrder?: "asc" | "desc";
}

Response

typescript
{
  events: Array<{
    id: string;
    eventType: string;
    description: string | null;
    timestamp: string;
    sensorId: string | null;
    sensorName: string | null;
    processed: boolean;
    archived: boolean;
    violationType: string | null;
    licensePlateNumber: string | null;
    vehicleType: string | null;
    vehicleSpeed: number | null;
    locationName: string | null;
    severity: string | null;
    createdAt: string;
  }>;
  total: number;
  pageCount: number;
}

Example

bash
curl -X GET "https://api.itms.solutions/trpc/events.getAll?input=%7B%22json%22%3A%7B%22eventType%22%3A%22TRAFFIC_VIOLATION%22%2C%22take%22%3A10%7D%7D" \
  -H "Authorization: Bearer YOUR_TOKEN"

events.getById

Get a single event by ID.

Type: Query Auth Required: Yes

Input

typescript
{
  id: string;
}

events.getRecent

Get the most recent events.

Type: Query Auth Required: Yes

Input

typescript
{
  limit?: number;            // Default: 10, max: 100
  eventType?: EventType;
}

events.markAsProcessed

Mark an event as processed.

Type: Mutation Auth Required: Yes

Input

typescript
{
  id: string;
}

Response

typescript
{
  success: boolean;
}

events.markAsArchived

Archive an event.

Type: Mutation Auth Required: Yes

Input

typescript
{
  id: string;
}

events.delete

Delete an event.

Type: Mutation Auth Required: Yes

Input

typescript
{
  id: string;
}

events.getStats

Get event statistics.

Type: Query Auth Required: Yes

Input

typescript
{
  startDate?: string;        // ISO date string
  endDate?: string;          // ISO date string
}

Response

typescript
{
  total: number;
  byType: Array<{
    eventType: string;
    count: number;
  }>;
  processed: number;
  unprocessed: number;
  archived: number;
  byViolationType: Array<{
    violationType: string;
    count: number;
  }>;
}

events.getEventTypes

Get available event types.

Type: Query Auth Required: No

Response

typescript
string[]  // Array of event type values

Violation Types

Common violation types:

TypeDescription
SPEEDINGSpeed limit exceeded
RED_LIGHTRed light violation
WRONG_WAYDriving wrong way
NO_SEATBELTSeatbelt not worn
PHONE_USEPhone use while driving
LANE_VIOLATIONImproper lane change
ILLEGAL_PARKINGIllegal parking

Event Lifecycle

┌──────────────┐
│   Created    │ ── Event ingested from sensor
└──────┬───────┘


┌──────────────┐
│  Unprocessed │ ── Awaiting review
└──────┬───────┘


┌──────────────┐
│  Processed   │ ── Reviewed and processed
└──────┬───────┘


┌──────────────┐
│   Archived   │ ── Historical record
└──────────────┘

SCS Smart City - Traffic, Gateway, Camera, and NVR Platform