Skip to main content

IPC Event Format (v1.x)

IP cameras send alarm data directly to your HTTP server using config version 1.0 or 1.7 with Content-Type: application/xml; charset=utf-8 and Connection: keep-alive.

The IPC sends three types of messages: keepalive heartbeats, alarm status changes, and full alarm data with detection details and images.

Keepalive

Periodic heartbeat. Uses a <DeviceInfo> root element (not <config>).

<?xml version="1.0" encoding="UTF-8"?>
<DeviceInfo>
<DeviceName>Device Name</DeviceName>
<DeviceNo.>1</DeviceNo.>
<SN><![CDATA[NF40D099BCM0]]></SN>
<ipAddress>192.168.1.192</ipAddress>
<macAddress>58:5B:69:40:F4:0D</macAddress>
</DeviceInfo>

Alarm Status (alarmStatusInfo)

Sent when an alarm state changes. Small post (~660 bytes), no images.

<?xml version="1.0" encoding="UTF-8" ?>
<config version="1.7" xmlns="http://www.ipc.com/ver10">
<alarmStatusInfo>
<perimeterAlarm type="boolean" id="1">true</perimeterAlarm>
</alarmStatusInfo>
<dataTime><![CDATA[2026-03-29 09:58:21]]></dataTime>
<deviceInfo>
<deviceName><![CDATA[FaceCam]]></deviceName>
<deviceNo.><![CDATA[1]]></deviceNo.>
<sn><![CDATA[I421B0Z1173Q]]></sn>
<ipAddress><![CDATA[192.168.0.52]]></ipAddress>
<macAddress><![CDATA[58:5b:69:5f:42:1b]]></macAddress>
</deviceInfo>
</config>

Key behavior:

  • true arrives shortly after first detection
  • false arrives after alarmHoldTime expires -- NOT when the person leaves
  • Only one true/false cycle per alarm period

Alarm Data (smartData with images)

Full detection event with coordinates, zone boundary, and optionally images.

PEA -- Perimeter Intrusion

<?xml version="1.0" encoding="UTF-8" ?>
<config version="1.7" xmlns="http://www.ipc.com/ver10">
<types>
<openAlramObj>
<enum>MOTION</enum><enum>SENSOR</enum><enum>PEA</enum>
<!-- ... all alarm types ... -->
</openAlramObj>
<subscribeRelation>
<enum>ALARM</enum>
<enum>FEATURE_RESULT</enum>
<enum>ALARM_FEATURE</enum>
</subscribeRelation>
<perStatus>
<enum>SMART_NONE</enum>
<enum>SMART_START</enum>
<enum>SMART_STOP</enum>
<enum>SMART_PROCEDURE</enum>
</perStatus>
<targetType>
<enum>person</enum>
<enum>car</enum>
<enum>motor</enum>
</targetType>
</types>
<smartType type="openAlramObj">PEA</smartType>
<subscribeOption type="subscribeRelation">FEATURE_RESULT</subscribeOption>
<currentTime type="tint64">1774792701902505</currentTime>
<mac type="string"><![CDATA[58:5b:69:5f:42:1b]]></mac>
<sn type="string"><![CDATA[I421B0Z1173Q]]></sn>
<deviceName type="string"><![CDATA[FaceCam]]></deviceName>
<perimeter>
<perInfo type="list" count="1">
<item>
<eventId type="uint32">2357</eventId>
<targetId type="uint32">2157</targetId>
<status type="perStatus">SMART_START</status>
<boundary type="list" count="5">
<item><point><x type="uint32">450</x><y type="uint32">466</y></point></item>
<item><point><x type="uint32">9775</x><y type="uint32">400</y></point></item>
<item><point><x type="uint32">9675</x><y type="uint32">9466</y></point></item>
<item><point><x type="uint32">425</x><y type="uint32">9700</y></point></item>
<item><point><x type="uint32">400</x><y type="uint32">500</y></point></item>
</boundary>
<rect>
<x1 type="uint32">4403</x1><y1 type="uint32">694</y1>
<x2 type="uint32">5909</x2><y2 type="uint32">8125</y2>
</rect>
</item>
</perInfo>
</perimeter>
<relativeTime type="tint64">167998902412</relativeTime>
<sourceDataInfo>
<dataType type="uint32">0</dataType>
<width type="uint32">1280</width>
<height type="uint32">720</height>
<sourceBase64Length type="uint32">474378</sourceBase64Length>
<sourceBase64Data type="string"><![CDATA[... (base64 JPEG) ...]]></sourceBase64Data>
</sourceDataInfo>
</config>

PEA with Target Crop

When both source and target images are subscribed, the post includes a <listInfo> block with cropped target image data:

<config version="1.7" xmlns="http://www.ipc.com/ver10">
<smartType type="openAlramObj">PEA</smartType>
<subscribeRelation type="subscribeOption">FEATURE_RESULT</subscribeRelation>
<currentTime type="tint64">1563528106584193</currentTime>
<perimeter>
<perInfo type="list" count="1">
<item>
<eventId type="uint32">220</eventId>
<targetId type="uint32">20</targetId>
<status type="smartStatus">SMART_START</status>
<boundary type="list" count="4">
<item><point><x type="uint32">1625</x><y type="uint32">2133</y></point></item>
<item><point><x type="uint32">1725</x><y type="uint32">8800</y></point></item>
<!-- ... additional points ... -->
</boundary>
<rect>
<x1 type="uint32">113</x1><y1 type="uint32">0</y1>
<x2 type="uint32">5511</x2><y2 type="uint32">8472</y2>
</rect>
</item>
</perInfo>
</perimeter>
<sourceDataInfo>
<dataType type="uint32">0</dataType>
<width type="uint32">1920</width>
<height type="uint32">1080</height>
<sourceBase64Length type="uint32">161438</sourceBase64Length>
<sourceBase64Data type="string"><![CDATA[... (base64 JPEG) ...]]></sourceBase64Data>
</sourceDataInfo>
<listInfo type="list" count="1">
<item>
<targetId type="tuint32">20</targetId>
<rect>...</rect>
<targetImageData>
<dataType type="uint32">0</dataType>
<targetType type="uint32">1</targetType>
<Width type="tuint32">1276</Width>
<Height type="tuint32">1080</Height>
<targetBase64Length type="uint32">100774</targetBase64Length>
<targetBase64Data type="string"><![CDATA[... (base64 JPEG) ...]]></targetBase64Data>
</targetImageData>
</item>
</listInfo>
</config>

IPC smartData Fields

FieldDescription
smartTypeDetection type: PEA, VEHICE/VEHICLE, VFD, VSD, etc.
perimeter/perInfoPerimeter data (for PEA intrusion). Line crossing uses tripwire/tripInfo.
eventIdUnique event ID
targetIdTarget ID (matches targetId in concurrent traject posts)
statusSMART_START, SMART_STOP, or SMART_PROCEDURE
boundaryZone polygon coordinates (normalized 0-10000)
rectTarget bounding box (normalized 0-10000)
sourceDataInfoFull frame JPEG (when sourceImage subscribed)
listInfo/targetImageDataCropped target JPEG. targetType is numeric: 1=person, 2=car, 4=bike

IPC smartType Codes (Complete)

smartTypeDescriptionAlarmData FieldAlarmStatus FieldImages
MOTIONMotion detectionmotion (grid)motionAlarmYes
SENSORSensor alarmNonesensorAlarmNo
PEA (intrusion)Perimeter intrusionperimeter/perInfoperimeterAlarmYes
PEA (line cross)Line crossingtripwire/tripInfotripwireAlarmYes
AVD (blur)Video blurNoneclarityAbnormalNo
AVD (cast)Video castNonecolorAbnormalNo
AVD (scene)Scene changeNonesceneChangeNo
OSCObject removalsmartType: OSCoscAlarmYes
CPCPeople countingCPCCPCAlarmYes
CDDCrowd densityCDDCDDAlarmYes
IPDPeople intrusionIPDIPDAlarmYes
VFDFace detectionVFDVFDAlarmYes
VFD_MATCHFace recognitionVFD_MATCHVFDAlarmYes
VEHICELicense plateVEHICEvehiceAlarmYes
AOIENTRYRegion entryAOIENTRY(undocumented)Yes
AOILEAVERegion exitAOILEAVE(undocumented)Yes
PASSLINECOUNTLine countingPASSLINECOUNT(undocumented)Yes
TRAFFICArea countingTRAFFIC(undocumented)Yes
Application Guides

For step-by-step setup of IPC webhook events, see Webhook Event Notification API. For traject-based real-time tracking from IPC, see Real-Time Object Tracking.