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

LPR Event Fields (VEHICE)

License plate events include plate data in the second <item> of <listInfo>. The first item contains the overview image, the second contains the plate number, authorization status, and plate crop image.

FieldDescription
plateNumberDetected plate text
vehicleListTypePlate database status (see table below)
PlateConfidenceDetection confidence score
plateColorPlate color
vehicleDirectVehicle direction (approach or leave)
targetImageData/targetBase64DataBase64 JPEG plate crop image

Plate database status (vehicleListType):

ValueMeaning
whiteListPlate is on the allow list (within valid date range)
blackListPlate is on the block list (within valid date range)
temporaryListPlate is on the temporary list (within valid date range)
(field absent)Plate is not in the database, or any plate with an expired date range

The camera validates date ranges internally for all list types — not just temporary plates. Any plate with an expired end date (allow, block, or temporary) will have vehicleListType omitted entirely.

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. For LPR plate database management, see LPR Configuration.