Explore the behavior
The three simulations use the same price changes. Each Job starts withtemplateInputs.region = "EU", and each Event trigger carries the subscription’s input.validate = true. Select Next step to follow admission or Show outcome to inspect the final Jobs. The selector shows example trigger payloads and the release reason. For grouped Jobs, it shows the full entries returned by api.walkTriggers(). The synchronous api.input().triggers array contains full entries for small inputs and lightweight references for larger inputs.
Single
Single is the default for existing and new templates without grouped execution. Each matching Event adds one entry totriggers[]. Existing Components can continue reading top-level type, message, and metadata. For new native Components, iterate with api.walkTriggers() so the same code works with grouped delivery.
Batch
The first accepted Event opens a group and fixes its maximum wait. Later Events for that key increase the count. If a group starts at +0s with a 10-second wait, an Event at +8s joins the group without extending its +10s deadline. Reaching the size limit releases it sooner.Debounce
Each accepted Event moves the quiet-period deadline for its own group. The maximum wait stays anchored to the first Event. With a 5-second quiet period and Events for one key at +0s and +3s, the Job becomes eligible at +8s if neither cap is reached sooner. All collected Events remain in the array. RevoEngine keeps their messages separately, even if several messages have the same fields or values.Compare the default scenario
Each bracketed list is the ordered Event list for one Job. The grouped simulations default to 4 Events, 10s maximum wait, and grouping by price list. Debounce also defaults to a 5s quiet period. Times show eligibility.Configure the Job Template
In Jobs → Templates, open Execution mode. Choose Single, Batch or Debounce. In the Platform API, configure rootdelivery on the Job Template; omit it on creation for Single or send "delivery": null to switch back. Omission on update preserves the saved setting.
"mode": "DEBOUNCE" and add "quietPeriodSeconds": 30.
With 95 triggers collected and a maximum of 100, the next array of 10 closes the first Job at 100 and opens another with 5. The remainder starts its own waiting window. All parts are accepted atomically; retrying the same admission does not append its triggers again.
The Concurrency → Key input accepts either a static key or a JSON Pointer such as
/message/priceListId. Its magnifier opens Job history to inspect a payload and select a field. A dynamic key also partitions collection by the resolved scalar. Missing or mixed scalar values collect separately from other admissions. The examples above use Event arrivals to illustrate the same Job-wide timing rules.
Groups share the same template revision, instance execution-policy revision, options and static template inputs. Different source types, authorized initiating accounts and Assistant conversations can join the same group when those configuration boundaries and any dynamic key match. The Job uses one configured execution account; each trigger retains its own initiator and origin. Protected Vault and lifecycle invocations bypass collection. Explicit future scheduling retains its requested time. The hard size bound also splits oversized isolated or explicitly scheduled runs, preserving their isolation and requested time. Retries reuse the saved trigger list.
Read the Job input
Each Event entry hastriggerType: "EVENT", its eventHistoryId, subscription jobEventId and eventName when available, and its own type, message, metadata, and input. The last field comes from the subscription’s Runtime input. Small sets resolve before execution with deferred: false, including Batch and Debounce. Larger sets keep ordered references marked deferred: true. The native walker returns full entries in either case. A batch of 500 roughly 1 KB messages normally fits the small-input budget. Payloads remain retained in Event History rather than copied into stored Job inputs or moved to Storage.
triggers[].input for new Jobs. Saved Job inputs and retries retain their recorded payloads.

