Skip to main content
Every PRESS delivery follows the CloudEvents v1.0 specification. The data field is always an array of event type groups — each group contains a type and a records array.
POST /webhooks/press HTTP/1.1
Host: api.yourdomain.ae
Content-Type: "application/cloudevents+json"
X-Webhook-Id: "01JW4KR9TBMZ38EYN8N9THKKBC"     // idempotency key — deduplicate on this
X-Webhook-Timestamp: 1743342300              // unix epoch seconds — used for signature & replay check
X-Webhook-Subscription-Id: sub_a1b2c3d4e5    // your subscription, issued during onboarding
X-Webhook-Delivery-Attempt: 1                // 1 = first try, 2+ = retry (max 6)
X-Webhook-Signature: sha256=4d8f2a91c0e7b3.. // HMAC-SHA256(secret, timestamp + "." + body)

{
  "specversion": "1.0",                                 // CloudEvents version — always "1.0"
  "id": "01JW4KR9TBMZ38EYN8N9THKKBC",                   // same as X-Webhook-Id — idempotency key
  "source": "icp/press-event-pipeline",                 // event producer — always this value
  "time": "2026-03-30T12:45:00.000Z",                   // when the delivery was produced (UTC)
  "total_records": 1,                                   // total records across all groups
  "data": [                                             // array of event type groups
    {
      "type": "ae.uaekyc.icp.immigration_entry.v1",     // see Event Type Mapping below
      "records": [
        {
          "event_id": "evt-imm-entry-999",              // unique per record
          "uaekyc_id": 34890890,                      // uaekyc Id of the affected individual
          "event_ts": "2026-03-30T12:40:00.000Z"        // when the change occurred at ICP
        }
      ]
    }
  ]
}

Expected Response

HTTP/1.1 200 OK
Content-Type: application/json

{"status": "accepted"}
Return 2xx only after the event is durably stored. Do not return 2xx before that.

HTTP Headers

Content-Type
string
required
Always application/cloudevents+json.
X-Webhook-Id
string
required
Unique delivery identifier (32-character string). Use as your idempotency key. Stable across retries.
X-Webhook-Timestamp
string
required
Unix timestamp (seconds since epoch) of the delivery. Used in signature verification.
X-Webhook-Subscription-Id
string
required
Your webhook subscription identifier. Issued during onboarding.
X-Webhook-Delivery-Attempt
integer
required
Attempt number. 1 = first delivery, 2+ = retry. Range: 16.
X-Webhook-Signature
string
required
HMAC-SHA256 signature for payload verification. Format: sha256=<hex_digest>.

Payload Fields

Envelope

FieldTypeRequiredSize / FormatFixed ValueDescription
specversionStringYes3 chars"1.0"CloudEvents specification version.
idStringYes32 charsUnique delivery identifier. Same as X-Webhook-Id header. Use as idempotency key.
sourceStringYes"icp/press-event-pipeline"The system that produced the event.
timeStringYesISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)When the delivery was produced (UTC).
total_recordsIntegerYesMin: 1Total number of individual event records across all groups.
dataArrayYesArray of event type groups.

Event Type Group

Each object in the data array groups records by event type.
FieldTypeRequiredSize / FormatPossible ValuesDescription
typeStringYesReverse-domain notationSee Event Type Mapping — one of 7 values (e.g., ae.uaekyc.icp.immigration_entry.v1)The lifecycle event type for this group.
recordsArrayYesMin: 1 elementArray of event records of this type.

Event Record

Each object in the records array represents a single lifecycle event.
FieldTypeRequiredSize / FormatDescription
event_idStringYesMax: 64 charsUnique identifier for this individual event record.
uaekyc_idIntegerYesLONG INT (e.g., 34890890)uaekyc id of the affected individual.
event_tsStringYesISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)When the change occurred at ICP (UTC).

Event Type Mapping

The type field in each event group uses reverse-domain notation.
Event Type Codetype ValueDescription
IMMIGRATION_ENTRYae.uaekyc.icp.immigration_entry.v1Person entered the UAE through immigration
VISA_EXTENSIONae.uaekyc.icp.visa_extension.v1Visa validity was extended
STATUS_CHANGEae.uaekyc.icp.status_change.v1Visa type or person class changed
VISA_CANCELLATIONae.uaekyc.icp.visa_cancellation.v1Visa was cancelled
NEW_IDae.uaekyc.icp.new_id.v1New Emirates ID was issued
FILE_CANCELae.uaekyc.icp.file_cancel.v1Immigration file was cancelled