Skip to main content
The JTL platform has three different event systems depending on what you’re building and what kind of events you need to handle. This guide explains each one, how they differ, and when to use which.

Event Systems at a Glance

SystemModelUsed byUse when
AppBridge EventsReal-time, bidirectional (push)Cloud AppsCommunication between your app and the JTL App Shell like reacting to user actions and notifying the host of state changes
Lifecycle HooksServer-to-server (push)Cloud AppsApp installation and uninstallation: one-time setup and teardown
SCX EventsPolling (pull)Marketplace ChannelsConsuming seller actions: new offers, order updates, attribute changes

AppBridge Events

In development: AppBridge publish/subscribe events are in development and not yet available. This section will be updated when the API ships.
What they will be: Real-time, bidirectional events between your Cloud App and the App Shell. Your app can both publish events (tell the host something happened) and subscribe to events (react when the host tells you something happened). How they will work: AppBridge events use the iframe messaging channel. When your app publishes an event, the App Shell receives it instantly. When the App Shell publishes an event, your app’s subscriber callback fires immediately. Communication is asynchronous and non-blocking, so your app continues executing while the message is delivered (no HTTP request, polling, or delay). When to use them (planned):
  • Notifying the JTL App Shell that your app completed an action (e.g. order verification finished)
  • Reacting to user navigation or context changes in the JTL-Wawi
  • Coordinating between your app and other platform components

Publish and Subscribe

AppBridge events will support two capabilities:
  • Publishing events: your app notifies the host that something happened (for example, a verification step completed or a generated description is ready to insert).
  • Subscribing to events: your app listens for events from the host and reacts when context changes (for example, the merchant navigates to a different record).
Topics will follow a resource:action naming convention (for example, order:verification:complete or inventory:updated) so the intent of an event is clear from its name alone.

Key Characteristics

PropertyValue
DirectionBidirectional: your app ↔ App Shell
DeliveryInstant (through the iframe)
ScopeOnly within the current user session. Events don’t persist or queue.
AvailabilityCloud Apps running inside the App Shell only

Lifecycle Hooks

What they are: Server-to-server callbacks defined in your app’s manifest.json. The JTL platform calls these URLs when specific lifecycle events occur; primarily when a merchant installs or uninstalls your app. How they work: You define URLs in the lifecycle section of your manifest. When the event occurs (e.g. a merchant installs your app), JTL sends a request to your URL. Your server processes it and responds. When to use them:
  • Setting up tenant-specific data when a merchant installs your app
  • Cleaning up data when a merchant uninstalls your app
  • Establishing the initial connection between your app and a merchant’s tenant

Manifest Configuration

Lifecycle hooks are defined in your manifest.json:
{
  "lifecycle": {
    "setupUrl": "https://app.yourcompany.com/setup",
    "connectUrl": "https://app.yourcompany.com/api/lifecycle/connect",
    "disconnectUrl": "https://app.yourcompany.com/api/lifecycle/disconnect"
  }
}
HookWhen it’s triggeredWhat to do
setupUrlMerchant initiates app installationDisplay a setup screen inside the App Shell. Complete the handshake with appBridge.method.call('setupCompleted').
connectUrlApp is connected to a tenantStore the tenant connection in your database. Provision any tenant-specific resources.
disconnectUrlApp is disconnected from a tenantClean up tenant data. Revoke any stored tokens or credentials for that tenant.

Key Characteristics

PropertyValue
DirectionOne-way — JTL platform → your server
DeliveryHTTP request to your URL
ReliabilitySingle attempt (no automatic retries)
ScopePer-tenant lifecycle events
AvailabilityCloud Apps with a registered manifest
The setupUrl is the most important lifecycle hook. It’s the entry point for the merchant’s first interaction with your app. If this URL is unreachable when a merchant tries to install your app, the installation fails. Make sure it’s always available.
For implementation details, see the Quick Start: From Scratch guide, which walks through the full setup handshake.

SCX Events (Polling)

What they are: An event queue for marketplace channel integrations. When sellers (merchants using JTL) take actions like creating a new product offer, updating prices, or shipping an order, those actions are queued as events. Your channel integration polls the queue, processes the events, and acknowledges them. How they work: This is a pull-based system, not push-based. JTL doesn’t send events to your server. Instead, your app periodically calls GET /v1/channel/event to check for new events, processes them, and then calls DELETE /v1/channel/event to acknowledge them. Unacknowledged events are redelivered. When to use them:
  • Processing new product listings from sellers
  • Handling order status updates (paid, shipped, cancelled)
  • Syncing attribute and category changes

Poll → Process → Acknowledge

  1. Poll: Your app calls GET /v1/channel/event at regular intervals (recommended: every 60 seconds)
  2. Process: Handle each event based on its type (new offer, order update, attribute change, etc.)
  3. Acknowledge: Call DELETE /v1/channel/event with the IDs of events you’ve successfully processed

Event Structure

Each event in the eventList has this shape:
{
  "id": "63623b997d2c89a4e3e9f3c7",
  "type": "Seller:Offer.New",
  "createdAt": "2022-11-02T14:38:53+00:00",
  "event": {
    "sellerId": "1",
    "offerId": 822,
    "sku": "843609",
    "title": "Fahrrad Halterung",
    "quantity": "0",
    "taxPercent": "19",
    "priceList": [ ... ],
    "channelAttributeList": [ ... ]
  }
}
FieldDescription
idUnique event identifier — use this for acknowledgement
typeThe event type (e.g. Seller:Offer.New, Seller:Meta.SellerAttributesUpdateRequest)
createdAtWhen the event was created (ISO 8601)
eventThe event payload that varies by event type

Acknowledging Events

After processing, acknowledge events by sending their IDs:
// DELETE /v1/channel/event
{
  "eventIdList": [
    "63623b997d2c89a4e3e9f3c7",
    "636280fd65a66c4430ec0d67"
  ]
}
Always acknowledge events after successful processing. If you don’t acknowledge an event, it will be redelivered after a timeout — up to 10 times. After 10 delivery attempts, the event becomes a failed event and is permanently discarded.

Key Characteristics

PropertyValue
DirectionPull: your app polls the SCX API
DeliveryQueued. Events wait until your app fetches them.
ReliabilityGuaranteed delivery (up to 10 retries). Events persist until acknowledged or dead-lettered.
OrderingEvents are returned in creation order
ScopeSeller events for your connected channel
AvailabilitySCX Channel API (Marketplace Channels only)

Best Practices for SCX Event Polling

PracticeWhy
Poll every ~60 secondsBalances responsiveness with rate limit usage
Acknowledge in batchesSend all processed event IDs in a single DELETE call, not one per event
Process idempotentlyEvents can be redelivered if acknowledgement fails. Design handlers that produce the same result if called twice with the same event.
Handle unknown event types gracefullyNew event types may be added. Log and acknowledge events your app doesn’t recognise rather than failing.
Monitor for dead lettersIf events are dead-lettering, your processing pipeline has a problem that needs investigation.

Choosing the Right Event System

I’m building…I need to…Use
A Cloud AppReact to user actions in real timeAppBridge Events
A Cloud AppHandle app install/uninstallLifecycle Hooks
A Cloud AppBoth of the aboveBoth: they serve different purposes
A Marketplace ChannelProcess seller actions (offers, orders, attributes)SCX Events

Next Steps

Cloud Apps: Handling Webhooks

Implementation guide for AppBridge events and lifecycle hooks in Cloud Apps.

Marketplace Channels: Channel API

Full guide to building a marketplace channel integration, including SCX event handling.

Rate Limiting

Manage your API usage when polling for events at regular intervals.

Error Handling

Handle failures in event processing and API calls.