Create an Event Delete or Update Request

Prev Next

Event Delete & Update is available through three API endpoints: one to delete a single event, one to update a single event, and one to export a daily audit of all operations. This page walks through all three endpoints with authentication, field references, and request examples built around a single running scenario so you can follow the data end-to-end.

Headers

Every request to the Event Delete & Update endpoints must include the following headers.

Header

Sample Value

Description

X-PARTNER-NAME

mybrand

This is your partner name. Navigate to Inone Settings > Account Settings to copy your partner name. The partner name should be lowercase.

X-REQUEST-TOKEN

1a2b3c4d5e6f

This key is required to authorize your request. Refer to API Authentication Tokens to generate your token.

Content-Type

application/json

This header specifies the media type of the resource.

Running scenario

Every example on this page uses the same scenario. A passenger booked a flight to Paris through your mobile app. The passenger later changed the trip to Istanbul. The booking is real, but the destination on the original event is outdated. You will see how to delete a duplicate event and how to update the booking with the corrected destination, price, and currency.

Scenario reference

  • Event name: booking_completed

  • Source: web

  • Business identifier: booking_id: "BKG-9821"

  • Parameters on the event: destination, total_price, currency, promo_code

1. Delete a single event

Use this endpoint when an event exists in the system but should not; it was fired by mistake, is a duplicate, or was a test event that landed on a real user profile. The endpoint locates exactly one matching event, removes it, and triggers automatic re-evaluation of journeys, segments, and analytics.

Endpoint

POST https://unification.useinsider.com/api/user/v1/delete-single-event

Body Parameters

Parameter

Description

Data Type

Required

identifiers

A map with exactly one entry identifying the user, for example, {"email": "user@example.com"}. Cannot be used together with insider_id.

Object

Conditional

insider_id

The Insider One ID of the user. Cannot be used together with identifiers.

String

Conditional

event_name

The system name of the event to delete. For default Insider One events, use the display name, for example, purchase.

String

Required

timestamp

RFC 3339 UTC timestamp of the event, for example, 2026-03-15T10:00:02Z. Required when filters is not provided.

String

Conditional

filters

Up to 50 event-level key-value pairs that uniquely identify the event. Values can be strings, numbers, or booleans, for example, {"booking_id": "BKG-9821"}. Required when timestamp is not provided.

Object

Conditional

source

The event source, for example, web, mobile, sms. When provided alongside timestamp, Insider One can locate the event in a single lookup. Recommended when known.

String

Optional

hook_url

HTTPS webhook URL. The final result of the operation is delivered here once execution completes. Must start with https://.

String

Optional

Sample Request: Delete by timestamp and source

curl --location --request POST 'https://unification.useinsider.com/api/user/v1/delete-single-event' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "identifiers": {
        "email": "passenger@example.com"
    },
    "event_name": "booking_completed",
    "source": "web",
    "timestamp": "2026-03-15T10:00:02Z",
    "hook_url": "https://example.com/hooks/event-delete"
}'

How to find the source value

The source field tells Insider One which channel the event was ingested through. The values you can use are crm, web, mobile, and email:

Source value

When to use it

crm

The event was sent to Insider One through the API (Upsert API, server-to-server integrations, or any partner-side data push). In the InOne panel, this is shown as Platform: API.

web

The event was captured through your website by the Insider Tag.

mobile

The event was captured by the Insider SDK in your mobile app.

email

The event was produced by the Insider One Email channel (clicks, opens, deliveries, etc.).

Two ways are available to find the source for a specific event:

  1. From the user profile in the InOne panel:

Open the user's profile, find the event you want to delete or update, and look at the Platform field in Event Details. Map it using the table above. For example, if the panel shows Platform: API, send "source": "crm" in your API request.

  1. From a Raw Data Export:

Run a Raw Data Export from the panel for the date range that covers your event. The exported file has an src column for each event row. The value in that column is exactly what you send in the source field.

Response example:

{
  "operation_id": "f3c5e6a8-1d24-4b6f-90c1-2a5b9c8e7d44",
  "status": "accepted"
}

Sample Request: Delete by business identifier

When the exact timestamp is not available, identify the event using a business identifier in the filters field instead.

curl --location --request POST 'https://unification.useinsider.com/api/user/v1/delete-single-event' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "insider_id": "iid-12345",
    "event_name": "booking_completed",
    "filters": {
      "booking_id": "BKG-9821"
    }
  }'

Sample Responses

202 Accepted

{
  "operation_id": "f3c5e6a8-1d24-4b6f-90c1-2a5b9c8e7d44",
  "status": "accepted"
}

202 confirms acceptance, not completion.

The operation runs asynchronously. Set hook_url to receive the final outcome, success, failure, or skip, once execution completes.

Deleted events are not recoverable:

Validate your identifier and filters against the target event before sending the request. If the combination matches more than one event, the request is rejected and no change is applied. If the event does not exist, the API returns 400 with "event does not exist" and no operation record is created.

2. Update a single event

Use this endpoint when an event should remain in the system, but one or more of its parameters are outdated. The endpoint applies a PATCH-style update; only the parameters listed in update_params change. All other parameters on the event remain untouched.

Endpoint

POST https://unification.useinsider.com/api/user/v1/update-single-event

Update semantics

Update follows a PATCH model. For each key in update_params: sending a value replaces the current value; sending null either sets the parameter to NULL or removes it entirely, depending on the delete_null flag; omitting a key leaves the parameter unchanged. Event timestamps cannot be changed via update.

Understanding delete_null

delete_null is a single request-level flag that controls what happens when a parameter is sent as null in update_params. It does not affect non-null values; non-null values always replace the current value regardless of this setting.

delete_null

value in update_params

Result

false (default)

null

Parameter is overwritten with NULL. It still exists on the event but holds no value.

true

null

Parameter is removed from the event entirely. It no longer exists at all.

Either

Any non-null value

Parameter is replaced with that value. delete_null has no effect.

Body Parameters

Parameter

Description

Data Type

Required

identifiers

A map with exactly one entry identifying the user. Cannot be used together with insider_id.

Object

Conditional

insider_id

The Insider One ID of the user. Cannot be used together with identifiers.

String

Conditional

event_name

The system name of the event to update.

String

Required

timestamp

RFC 3339 UTC timestamp of the event. Required when filters is not provided.

String

Conditional

filters

Up to 50 event-level key-value pairs that uniquely identify the event. Required when timestamp is not provided.

Object

Conditional

update_params

The parameters to change. Keys must be mapped event parameters. At least one entry required. Up to 50 entries per request.

Object

Required

delete_null

When true, null values in update_params remove the parameter from the event. When false (default), null overwrites the parameter with NULL.

Boolean

Optional

source

The event source. When provided alongside timestamp, enables a single-lookup match.

String

Optional

hook_url

HTTPS webhook URL for the final operation result.

String

Optional

skip_hook

Controls whether imported historical data can trigger Architect On Event elements or data streams. false (default): can trigger them. true: prevents triggering.

Boolean

Optional

Sample Request: Replace parameter values

Correct the destination, total price, and currency on the booking event in a single call.

curl --location --request POST 'https://unification.useinsider.com/api/user/v1/update-single-event' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "identifiers": {
        "email": "passenger@example.com"
    },
    "event_name": "purchase",
    "source": "web",
    "timestamp": "2026-03-15T10:00:02Z",
    "skip_hook": true,
    "update_params": {
        "unit_price": 1299.50,
        "currency": "EUR"
    }
}'

Sample Request with custom event parameters

curl --location --request POST 'https://unification.useinsider.com/api/user/v1/update-single-event' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "identifiers": { "email": "passenger@example.com" },
    "event_name": "purchase",
    "filters": {
      "custom": {
        "invoice_number": "INV12345"
      }
    },
    "update_params": {
      "custom": {
        "store_id": "store_02"
      }
    },
    "hook_url": "https://example.com/hooks/event-update"
  }'

Sample Request: Remove a parameter entirely

A promo code was attached to the booking by mistake. Set delete_null to true and send the parameter as null to remove it from the event entirely.

curl --location --request POST 'https://unification.useinsider.com/api/user/v1/update-single-event' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "insider_id": "iid-12345",
    "event_name": "booking_completed",
    "filters": {
        "custom": {
            "booking_id": "BKG-9821"
        }
    },
    "delete_null": true,
    "update_params": {
        "custom": {
            "promo_code": null
        }
    }
}'

Sample Request: Replace values and remove a parameter in the same call

Correct currency and total_price, and remove promo_code, in one request. With delete_null: false, non-null values are replaced, and the null value removes the parameter.

curl --location --request POST 'https://unification.useinsider.com/api/user/v1/update-single-event' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "identifiers": {
        "email": "passenger@example.com"
    },
    "event_name": "booking_completed",
    "filters": {
        "custom": {
            "booking_id": "BKG-9821"
        }
    },
    "delete_null": true,
    "update_params": {
        "custom": {
            "currency": "EUR",
            "total_price": 1299.50,
            "promo_code": null
        }
    }
}'

Sample Request: Identify the event by timestamp

curl --location --request POST 'https://unification.useinsider.com/api/user/v1/update-single-event' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "identifiers": { "email": "passenger@example.com" },
    "event_name": "purchase",
    "timestamp": "2026-06-29T15:12:55Z",
    "update_params": {
      "custom": {
        "store_id": "store_02"
      }
    },
    "hook_url": "https://example.com/hooks/event-update"
  }'

Sample Responses

202 Accepted

{
  "operation_id": "a91d7c12-58f2-4d09-83c5-6f2eaa9c3b71",
  "status": "accepted"
}

Keys in update_params must be mapped event parameters.

Unmapped keys are rejected with 400. Values must match the parameter data type; type mismatches are rejected with "Data type mismatch". Event timestamps cannot be updated.

Response codes

The following response codes apply to the delete and update endpoints:

Code

Meaning

What happens

202

Accepted

Validation passed. The operation is queued, and an operation_id is returned. This does not confirm execution; use hook_url to receive the final outcome.

400

Bad Request

Missing or invalid fields, unmapped filter or update parameter, system field used as filter, event on the deny list, identifier not found, or timestamp not in UTC.

409

Conflict

Another delete or update for the same user and event is currently running. Retry after a short delay.

429

Too Many Requests

More than 250 requests sent in one minute across delete and update combined.

500

Internal Server Error

Unexpected server error. Safe to retry.

3. Update or delete array-of-objects parameters

Some event parameters hold a list of objects instead of a single value, for example, every flight leg in a booking. These are array-of-objects parameters. You cannot change them through update_params. Use object_update_params on the same update endpoint instead.

With object_update_params you can:

  • Change sub-keys in one object, or in every object that matches a value.

  • Delete one object, several objects, or all of them.

  • Remove sub-keys from an object.

  • Add new objects to the list, with or without a duplicate check.

  • Replace the whole list, empty it, or remove the parameter from the event.

Endpoint

POST https://unification.useinsider.com/api/user/v1/update-single-event

The endpoint, headers, event lookup (identifiers or insider_id, event_name, timestamp or filters, source), hook_url and skip_hook work exactly as in Update a single event.

Running scenario: flight legs

The examples in this section extend the running scenario. The booking_completed event has a custom array-of-objects parameter, flight_legs, with one object per flight:

"flight_legs": [
  {
    "leg_id": "L1",
    "origin": "London",
    "destination": "Paris",
    "seat_class": "economy",
    "checkin_status": "pending"
  },
  {
    "leg_id": "L2",
    "origin": "Paris",
    "destination": "Istanbul",
    "seat_class": "economy",
    "checkin_status": "pending"
  },
  {
    "leg_id": "L3",
    "origin": "Istanbul",
    "destination": "London",
    "seat_class": "economy",
    "checkin_status": "pending"
  }
]

Body parameters

object_update_params is added next to the existing body parameters. Send update_params, object_update_params, or both.

Parameter

Description

Data Type

Required

object_update_params

The array-of-objects parameters to change. Put custom parameters under custom. Default parameters go at the top level. Each parameter takes a mode and either operations or values (see below).

Object

Conditional. At least one of update_params or object_update_params is required.

Each parameter inside object_update_params uses one of two modes:

Mode

Shape

What it does

patch

{ "mode": "patch", "operations": [ ... ] }

Runs a list of operations on the objects in the parameter. Up to 50 operations, run in the order you send them.

replace

{ "mode": "replace", "values": [ ... ] }

Replaces the whole list with values. Send [] to empty the list, or null to clear the parameter.

Custom and default parameters

Parameters are named the same way as in update_params:

Parameter

Where it goes

Name to use

Custom parameter

Inside custom

The parameter name, for example flight_legs

Default parameter

At the top level of object_update_params

The parameter name

You can send both kinds in the same request. In this example, flight_legs is a custom parameter, and items is a default parameter:

"object_update_params": {
  "custom": {
    "flight_legs": {
      "mode": "patch",
      "operations": [
        {
          "match": {
            "leg_id": "L2"
          },
          "set": {
            "checkin_status": "checked_in"
          }
        }
      ]
    }
  },
  "items": {
    "mode": "replace",
    "values": []
  }
}
  • Send each parameter only once. The same parameter inside and outside custom is rejected.

  • In your webhook result, object_update_results uses the same names you sent.

Patch operations

Each operation does exactly one thing: delete, set, unset, or append. To set some sub-keys and remove others in the same object, send two operations.

Operation

Shape

What it does

delete

{ "match": {...}, "delete": true }

Deletes every object that matches

set

{ "match": {...}, "set": {...} }

Changes the given sub-keys on every object that matches. Sub-keys you do not send keep their values.

unset

{ "match": {...}, "unset": ["sub_key", ...] }

Removes the given sub-keys from every object that matches. An object left with no sub-keys is deleted.

append

{ "append": [ {...} ], "unique_by": ["sub_key"], "on_conflict": "skip" }

Adds new objects to the end of the list. unique_by and on_conflict are optional (see Add objects).

How matching works

  • match lists sub-key values. An object matches when every sub-key in match has exactly that value.

  • "match": {} matches every object in the parameter.

  • match is required for delete, set, and unset, and not allowed with append.

  • Match only on sub-keys that hold a single value (text, number, boolean, date, or URL). Values must have the sub-key's registered type, for example, a number for a number sub-key.

  • If no object matches, nothing changes, and the operation still succeeds. The result in your webhook shows "matched_object_count": 0.

Matching is your responsibility. If several objects share the matched value, every one of them is changed. Match on a sub-key that is unique within the list, such as an id.

Sample Request: Update one object

The passenger checked in for the Paris to Istanbul flight and moved to business class.

curl --location --request POST 'https://unification.useinsider.com/api/user/v1/update-single-event' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "identifiers": {
      "email": "passenger@example.com"
    },
    "event_name": "booking_completed",
    "filters": {
      "custom": {
        "booking_id": "BKG-9821"
      }
    },
    "object_update_params": {
      "custom": {
        "flight_legs": {
          "mode": "patch",
          "operations": [
            {
              "match": {
                "leg_id": "L2"
              },
              "set": {
                "checkin_status": "checked_in",
                "seat_class": "business"
              }
            }
          ]
        }
      }
    },
    "hook_url": "https://example.com/hooks/event-update"
  }'

Only the L2 object changes. Its other sub-keys keep their values, and L1 and L3 are untouched.

Sample Request: Update every object that matches a value

Check-in opened for every flight leaving Paris. Use "match": {} instead to update every object.

curl --location --request POST 'https://unification.useinsider.com/api/user/v1/update-single-event' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "insider_id": "iid-12345",
    "event_name": "booking_completed",
    "filters": {
      "custom": {
        "booking_id": "BKG-9821"
      }
    },
    "object_update_params": {
      "custom": {
        "flight_legs": {
          "mode": "patch",
          "operations": [
            {
              "match": {
                "origin": "Paris"
              },
              "set": {
                "checkin_status": "open"
              }
            }
          ]
        }
      }
    }
  }'

Sample Request: Delete objects

The return flight was canceled, and the first leg was added by mistake. Several operations can go in one request.

curl --location --request POST 'https://unification.useinsider.com/api/user/v1/update-single-event' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "insider_id": "iid-12345",
    "event_name": "booking_completed",
    "filters": {
      "custom": {
        "booking_id": "BKG-9821"
      }
    },
    "object_update_params": {
      "custom": {
        "flight_legs": {
          "mode": "patch",
          "operations": [
            {
              "match": {
                "leg_id": "L3"
              },
              "delete": true
            },
            {
              "match": {
                "leg_id": "L1"
              },
              "delete": true
            }
          ]
        }
      }
    }
  }'

flight_legs now holds only the L2 object.

Sample Request: Remove sub-keys from an object

The seat class on the first leg was sent by mistake.

curl --location --request POST 'https://unification.useinsider.com/api/user/v1/update-single-event' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "insider_id": "iid-12345",
    "event_name": "booking_completed",
    "filters": {
      "custom": {
        "booking_id": "BKG-9821"
      }
    },
    "object_update_params": {
      "custom": {
        "flight_legs": {
          "mode": "patch",
          "operations": [
            {
              "match": {
                "leg_id": "L1"
              },
              "unset": ["seat_class"]
            }
          ]
        }
      }
    }
  }'

Add objects

append adds objects to the end of the list.

  • Without unique_by, every request adds the objects again. Sending the same request twice adds them twice.

  • With unique_by, Insider One first looks for an existing object with the same values for those sub-keys. on_conflict decides what happens when one is found:

    • skip (default): the new object is not added.

    • update: the existing object is updated with the new object's sub-keys.

We recommend sending unique_by so a retried request does not create duplicates.

Sample Request: Add a flight, or update it if it already exists

The passenger added a connecting flight. If L4 is already on the event, it is updated instead of added again.

curl --location --request POST 'https://unification.useinsider.com/api/user/v1/update-single-event' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "insider_id": "iid-12345",
    "event_name": "booking_completed",
    "filters": {
      "custom": {
        "booking_id": "BKG-9821"
      }
    },
    "object_update_params": {
      "custom": {
        "flight_legs": {
          "mode": "patch",
          "operations": [
            {
              "append": [
                {
                  "leg_id": "L4",
                  "origin": "London",
                  "destination": "Dublin",
                  "seat_class": "economy",
                  "checkin_status": "pending"
                }
              ],
              "unique_by": ["leg_id"],
              "on_conflict": "update"
            }
          ]
        }
      }
    }
  }'

Sample Request: Replace the whole list

The booking changed completely, and you have the full new list of flights. Objects not in values are removed; nothing is merged.

curl --location --request POST 'https://unification.useinsider.com/api/user/v1/update-single-event' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "insider_id": "iid-12345",
    "event_name": "booking_completed",
    "filters": {
      "custom": {
        "booking_id": "BKG-9821"
      }
    },
    "object_update_params": {
      "custom": {
        "flight_legs": {
          "mode": "replace",
          "values": [
            {
              "leg_id": "L1",
              "origin": "London",
              "destination": "Istanbul",
              "seat_class": "business",
              "checkin_status": "pending"
            },
            {
              "leg_id": "L2",
              "origin": "Istanbul",
              "destination": "London",
              "seat_class": "business",
              "checkin_status": "pending"
            }
          ]
        }
      }
    }
  }'

To empty the list and keep the parameter, send "values": [].

To clear the parameter, send "values": null. As with update_params, delete_null decides the result: true removes the parameter from the event, false (default) sets it to NULL.

Sample Request: Update regular and array-of-objects parameters together

The Istanbul-to-London leg was refunded: the total price drops and the leg is removed. Both changes apply together, or neither does.

curl --location --request POST 'https://unification.useinsider.com/api/user/v1/update-single-event' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "identifiers": {
      "email": "passenger@example.com"
    },
    "event_name": "booking_completed",
    "filters": {
      "custom": {
        "booking_id": "BKG-9821"
      }
    },
    "skip_hook": true,
    "update_params": {
      "custom": {
        "total_price": 899.00
      }
    },
    "object_update_params": {
      "custom": {
        "flight_legs": {
          "mode": "patch",
          "operations": [
            {
              "match": {
                "leg_id": "L3"
              },
              "delete": true
            }
          ]
        }
      }
    },
    "hook_url": "https://example.com/hooks/event-update"
  }'

Sample Responses

202 Accepted

{
  "operation_id": "a91d7c12-58f2-4d09-83c5-6f2eaa9c3b71",
  "status": "accepted"
}

As with other updates, 202 confirms the request was accepted, not that it was applied.

Result in your webhook

When the update succeeds, the result sent to your hook_url includes object_update_results. It shows, for each parameter and each operation, how many objects were affected. For the request in Update one object:

{
  "operation_id": "a91d7c12-58f2-4d09-83c5-6f2eaa9c3b71",
  "operation_type": "update",
  "status": "success",
  "insider_id": "iid-12345",
  "object_update_results": {
    "flight_legs": {
      "mode": "patch",
      "object_count": 3,
      "operations": [
        {
          "matched_object_count": 1,
          "updated_object_count": 1
        }
      ]
    }
  }
}

Field

Description

mode

patch or replace, as sent

object_count

Number of objects in the parameter after the update

cleared

true when the parameter was cleared with "values": null

operations

One entry per patch operation, in the order sent

matched_object_count

Objects that matched the operation's match

updated_object_count

Objects changed by set, or by append with on_conflict: "update"

deleted_object_count

Objects removed by delete, or by an unset that left them empty

appended_object_count

Objects added by append

skipped_object_count

Objects not added because they already existed (on_conflict: "skip")

If the update fails, object_update_results is not sent, and nothing on the event changes.

Errors

  • Rejected with 400 when you send the request.

The message names the parameter, for example, object_update_params.custom.flight_legs: ....

Message (shortened)

Cause

not a registered array-of-objects event parameter

The parameter does not exist, or is not an array-of-objects parameter

array-of-objects event parameters cannot be modified via update-single-event; use object_update_params

An array-of-objects parameter was sent in update_params

array-of-objects event parameters cannot be used in filters

An array-of-objects parameter was used in filters

sub-key "..." is not registered

A sub-key in match, set, unset, append, unique_by or values does not exist on the parameter

value does not match the registered type

A value has the wrong type for its sub-key

... cannot be matched on

match or unique_by uses a sub-key that holds a list

exactly one of delete, set, unset or append is required

An operation has no action, or more than one

match is required ({} targets every object)

match is missing on delete, set, or unset

match is not valid with append; use unique_by

match was sent with append

set.<sub_key>: must not be null; use unset to remove a sub-key

A sub-key in set is null

array exceeds max_objects

values or append has more objects than the parameter allows

update_params and object_update_params together exceed 50 entries

Too many parameters in one request

parameter is also given outside custom

The same parameter was sent both inside and outside custom

  • Failed after acceptance (reported to your webhook).

The update is not applied.

Error code

Cause

OBJECT_ARRAY_OVERFLOW

After all operations, the list would have more objects than the parameter allows

ITEM_TOO_LARGE

The updated event would be too large to store

OBJECT_UPDATE_INVALID

The parameter is no longer registered, or the stored value is not a list of objects. Use replace mode to rewrite it.

Things to know

  • No new sub-keys. Every sub-key you send must already be registered on the parameter, with the right type.

  • Object limit. A parameter holds up to its configured maximum number of objects (50 by default). An update can shrink a list that is over the limit, but cannot grow it.

  • Up to 50 operations per parameter, and up to 50 parameters per request across update_params and object_update_params.

  • All or nothing. If any part of the request fails, no change is applied, including changes in update_params.

  • Deleting the whole event still works with Delete a single event, including events that have array-of-objects parameters.

4. Export operations history

Use this endpoint to retrieve a daily audit of every delete and update operation that ran for your account on a given calendar day. The request is accepted synchronously and returns a request_id immediately. The export file and a summary are delivered asynchronously to your webhook URL once ready.

Endpoint

POST https://unification.useinsider.com/api/raw/v1/event-operations-export

Visit our Postman collection to test this request.

Body Parameters

Parameter

Description

Data Type

Required

date

The UTC calendar day to export, in YYYY-MM-DD format, for example, "2026-03-15". Cannot be a future date.

String

Required

hook_url

HTTPS webhook URL where the export download link and summary are delivered. Must start with https://.

String

Required

status

Filter by operation status. Accepted values: "success" or "failed". Omit to include both.

String

Optional

operation_type

Filter by operation type. Accepted values: "delete" or "update". Omit to include both.

Optional

Sample Request

To export all successful update operations for 15 March 2026:

curl --location --request POST 'https://unification.useinsider.com/api/raw/v1/event-operations-export' \
  --header 'X-PARTNER-NAME: mybrand' \
  --header 'X-REQUEST-TOKEN: 1a2b3c4e5d6f' \
  --header 'Content-Type: application/json' \
  --body '{
    "date": "2026-06-30",
    "hook_url": "https://example.com/hooks/ops-export"
}'

Sample Responses

Sync response

202 Accepted

{
  "request_id": "9d4b2a6e-1f3c-4f2d-8d5e-7b9c0a1234ef"
}

Async webhook payload: Success

Once the export is ready, Insider One POSTs the following to your hook_url. The download URL is a time-limited signed link and expires in 24 hours, so download the file promptly.

{
  "request_id": "9d4b2a6e-1f3c-4f2d-8d5e-7b9c0a1234ef",
  "partner": "mybrand",
  "status": "success",
  "url": "https://insider-exports.s3.amazonaws.com/...signed-url...",
  "date": "2026-03-15",
  "operation_type": "update",
  "summary": {
    "total_operations": 1284,
    "delete_count": 0,
    "update_count": 1284,
    "success_count": 1271,
    "failed_count": 13
  }
}

Async webhook payload: Export failure

{
  "request_id": "9d4b2a6e-1f3c-4f2d-8d5e-7b9c0a1234dk",
  "partner": "mybrand",
  "status": "failed",
  "message": "internal error generating export"
}

Sync error codes

Code

HTTP

Cause

INVALID_DATE

400

date is missing, not in YYYY-MM-DD format, not a valid calendar day, or is a future date.

INVALID_STATUS

400

status is set to a value other than "success" or "failed".

INVALID_OPERATION_TYPE

400

operation_type is set to a value other than "delete" or "update".

INVALID_HOOK_URL

400

hook_url is missing, not a valid URL, or does not use https://.

RATE_LIMIT_EXCEEDED

429

More than 3 requests sent in the past hour. Check the Retry-After header before retrying.

Rate limit for this endpoint is separate.

The operations export endpoint allows 3 requests per hour. This is independent of the 250 requests per minute limit shared across the delete and update endpoints.

Limitations

  • API only. There is no panel interface for delete or update in this version.

  • One event, one user per request. Each request targets exactly one event on one user profile. Bulk operations are not supported.

  • One event type per request. To correct more than one event type, send separate requests.

  • Filter and parameter limits. Up to 50 entries in filters and up to 50 entries in update_params per request.

  • Timestamps are immutable. Event timestamps cannot be changed via update.

  • Operations are not reversible. Validate filters before sending.

  • Rate limit. 250 requests per minute per partner, shared across delete and update. The export endpoint has a separate limit of 3 requests per hour.

  • Payload size. Up to 5 MB per request.

  • Identifier resolution is read-only. If the identifier is unknown, the request returns a 400 response. No new user profile is created on this path.

  • Excluded events cannot be targeted. See the Excluded Events section below.

Excluded events

Some events are managed directly by the Insider One platform, and they reflect message delivery, session state, and other operational signals that must remain consistent for Architect, segmentation, and analytics to function correctly. These events cannot be deleted or updated through the API. Requests targeting them return HTTP 400 with the message "excluded by platform integrity policy".

The entire misc source is also blocked. Every event under misc is rejected, regardless of the event name.

All custom events, anything not listed in the table below, remain eligible for delete and update.

Source

Excluded event names

email

email_delivered, email_open, email_click, email_bounce, email_dropped, email_deferred, email_processed, email_spamreport, email_unsubscribe, email_resubscribe, email_group_unsubscribe, email_group_resubscribe, email_unsent

sms

sms_delivered, sms_click

whatsapp

whatsapp_delivered, whatsapp_click, whatsapp_reply, whatsapp_reply_first_button, whatsapp_reply_second_button, whatsapp_reply_third_button, whatsapp_reply_other_reply

web

web_push_view, web_push_click

mobile

push_delivered, push_session, session_start, inapp_seen, geofence_trigger

journey

journey_web_push_delivered, journey_web_push_click