Get started for developers get-started-developers

On this page: Implement the SDKs, event streaming, custom action endpoints, and APIs that connect your applications to Adobe Journey Optimizer so your journeys can run on live data.

As a Developer, you are responsible for implementing and integrating Adobe Journey Optimizer into your applications and systems. You can start working with Adobe Journey Optimizer once the System Administrator and the Data Engineer have granted you access and prepared your environment.

NOTE
Implementation order: AdministratorData Engineer → You are here: DeveloperMarketer
Ensure data schemas and events are configured before implementing your mobile and web integrations.

Your role in the Journey Optimizer ecosystem

While other team members configure Journey Optimizer through the user interface, you’ll focus on:

  • Implementing SDKs in mobile and web applications
  • Sending events from your applications to trigger journeys
  • Building API endpoints that Journey Optimizer can call via custom actions
  • Integrating Journey Optimizer with your existing systems and infrastructure
  • Testing and debugging your implementations

Your Data Engineer will handle data schemas, event configurations, and data sources. Your Administrator will set up permissions and channel configurations. Marketers will design the journeys and content that use your implementations.

This guide covers the essential technical implementation steps to get you started with Journey Optimizer. Whether you’re building mobile apps, web experiences, or API integrations, follow the sections below to set up your implementation.

Prerequisites prerequisites

Before starting your implementation, ensure you have:

Category
Requirements
Technical skills
* Experience with JavaScript (for Web SDK) or Swift/Kotlin (for Mobile SDK)
* Understanding of RESTful APIs and JSON
* Familiarity with asynchronous programming and event-driven architectures
* Knowledge of your organization’s application architecture
Access and tools
* Access to Adobe Developer Console for API credentials
* Development environment with access to your application’s codebase
* Testing tools like Postman for API testing
* Browser developer tools or mobile debugging tools
From other team members
* Environment access granted by your Administrator
* XDM schemas and event definitions from your Data Engineer
* Requirements and use cases from your Marketers

Understand the technical foundation technical-foundation

Before diving into implementation, familiarize yourself with the core technical concepts:

  1. Adobe Experience Platform integration: Journey Optimizer is built natively on Adobe Experience Platform. Understanding the underlying architecture will help you build more effective implementations. Learn more about how Journey Optimizer works.

  2. XDM data models: Journey Optimizer uses Experience Data Model (XDM) to structure event and profile data. As a developer, you’ll need to understand how to send data that conforms to the schemas configured by your Data Engineer. Learn about XDM schemas.

  3. Authentication and security: All implementations require proper authentication. Understand how to set up authentication for SDKs and APIs. Learn about API authentication.

Set up mobile app integrations mobile-integration

Configure the Adobe Experience Platform Mobile SDK

The Mobile SDK is a collection of libraries you embed directly in your iOS or Android app. It acts as the communication layer between your app and Adobe Experience Platform: it identifies users, collects behavioral events, and delivers instructions from Journey Optimizer — including push notifications, in-app messages, and personalized content. Without it, Journey Optimizer has no visibility into what your app users are doing and no way to reach them.

  1. Install and configure the Mobile SDK: Follow the Adobe Experience Platform Mobile SDK documentation to get started with SDK integration.

  2. Create a mobile property: Set up a mobile property in Adobe Experience Platform Data Collection. Learn how to create and configure a mobile property.

  3. Configure push notifications:

  4. Test your mobile integration: Use the mobile onboarding quick start workflow to rapidly configure and test your mobile setup.

Detailed steps to configure push notifications are available on this page.

Implement code-based experiences (Mobile SDK)

Code-based experiences let you deliver personalized content to any surface in your native mobile app — from onboarding screens and product detail pages to in-app banners and feature flags — without requiring a new app release. Use the Mobile SDK to fetch and render personalized content at runtime, giving your team full control over placement and presentation:

Implement web experiences web-implementation

Set up the Adobe Experience Platform Web SDK

The Web SDK (alloy.js) is a single JavaScript library that replaces the patchwork of separate Adobe tags your site might otherwise need. It collects behavioral data, streams it to Adobe Experience Platform through a datastream you configure, and receives personalization instructions back — all in one network round-trip. Once it’s in place, Journey Optimizer can identify visitors, trigger journeys from their actions, and deliver tailored content to your pages immediately.

  1. Install the Web SDK: Follow the Web SDK implementation guide to set up the SDK on your website.

  2. Configure datastreams: Create and configure a datastream in Adobe Experience Platform Data Collection with Journey Optimizer enabled. Learn more in the datastreams documentation.

  3. Enable web push notifications (optional): Web push notifications are now generally available. Configure the pushNotifications property in your Web SDK configuration and use the sendPushSubscription command to register push subscriptions. Learn about web push configuration.

Implement code-based experiences (Web SDK)

Unlike visual channels where marketers control the layout entirely, code-based experiences give you full ownership of how personalized content is rendered on the page. Journey Optimizer returns a JSON payload with the personalization data; your code decides where and how to display it. This model works for any web surface — hero banners, recommendation carousels, search result rankings, A/B test variants — without needing a visual editor or page publishing workflow.

  1. Choose your implementation method: Client-side, server-side, or hybrid. Review implementation samples for each approach.

  2. Define surfaces: Identify the locations in your application where you want to deliver personalized content. Learn about surface configuration.

  3. Implement content rendering: Use the Web SDK to fetch and apply personalization content. See code-based implementation tutorials.

  4. Send display and interaction events: Track when content is displayed and when users interact with it for analytics and optimization.

Explore sample implementations on GitHub to see code-based experiences in action.

Learn more about getting started with code-based experiences.

Implement event streaming event-streaming

Send events to trigger journeys

Journeys run on events — a user logs in, adds an item to a cart, completes a purchase, abandons a form. Your job is to emit those events from your application at exactly the right moment. Each event is an XDM-structured JSON payload sent to the Experience Platform Streaming Ingestion API; Journey Optimizer picks it up within milliseconds and routes the profile into any matching journey. The event schema and payload structure are defined by your Data Engineer — coordinate with them before you start coding.

  1. Understand the event payload: Work with your Data Engineer to get the event schema and required payload structure. The payload must conform to the XDM schema they’ve configured. Learn about event schema requirements.

  2. Implement event streaming: Send events to Adobe Experience Platform using the Streaming Ingestion APIs. Learn the steps to send events.

  3. Handle event types:

    • Unitary events: Implement event sending for person-specific actions (e.g., button click, purchase completion)
    • Business events: Send business-related events (e.g., inventory updates, price changes)
  4. Test event delivery: Verify that events are properly received and trigger journeys as expected. Learn about event troubleshooting.

Example implementation for sending an event via API:

POST https://{DATACOLLECTION_ENDPOINT}/collection/{DATASTREAM_ID}
Content-Type: application/json

{
  "header": {
    "datasetId": "{DATASET_ID}",
    "imsOrgId": "{ORG_ID}",
    "source": {
      "name": "Web SDK"
    }
  },
  "body": {
    "xdmMeta": {
      "schemaRef": {
        "id": "{SCHEMA_ID}"
      }
    },
    "xdmEntity": {
      "_id": "unique-event-id",
      "eventType": "purchase",
      "timestamp": "2024-01-01T12:00:00Z",
      // ... your event data
    }
  }
}

Learn more about working with journey events.

Develop custom action endpoints custom-actions

When a journey reaches a custom action step, Journey Optimizer makes an outbound HTTP call to a URL you provide — your backend, a CRM, a loyalty platform, any REST endpoint. Your job is to build and expose that endpoint: define the request contract (payload shape, authentication method, response format), implement the business logic behind it, and make sure it can handle the call volume Journey Optimizer will generate. Your Administrator then registers the endpoint in Journey Optimizer so marketers can use it as a step in their journeys.

  1. Build your API endpoint: Create RESTful API endpoints that Journey Optimizer will call during journey execution. Your endpoint should:

    • Accept JSON payloads
    • Authenticate requests (OAuth, API key, or JWT)
    • Process requests within appropriate timeout limits
    • Return responses in expected format
  2. Understand custom action capabilities: Custom actions can connect to third-party systems like Epsilon, Slack, Firebase, or your own services. Learn more about custom actions.

  3. Work with action configurations: Your Administrator or Data Engineer will configure the custom action in Journey Optimizer, defining the API endpoint URL, authentication method, and parameters. You’ll provide them with your API specification. Learn about custom action configuration. You can define an optional error response payload for richer fallback logic in timeout/error branches.

  4. Return actionable data: Design your API to return data that can be used in subsequent journey steps. Learn about action responses.

  5. Monitor custom action health: Use the custom action monitoring dashboard to track successful calls, errors, throughput, response times, and queue wait times. Learn about custom action reporting.

  6. Implement rate limiting: Ensure your endpoints can handle the expected volume. Journey Optimizer applies a 5000 calls/second limit, but your system should be resilient. Learn about capping and throttling.

Example use case: Writing journey events to Experience Platform using custom actions.

Work with Journey Optimizer APIs apis

Not everything needs to happen through the Journey Optimizer UI. Sometimes you need to trigger a campaign from your own backend, suppress an email address after a privacy request, or sync content templates from an external CMS. Journey Optimizer’s REST APIs give you programmatic access to the platform’s core capabilities. All calls use OAuth Server-to-Server authentication — the older JWT method is deprecated.

  1. Understand API capabilities: Journey Optimizer APIs allow you to create, read, update, and delete various resources programmatically. Learn about Journey Optimizer APIs.

  2. Authentication: Follow this tutorial to set up API authentication using Adobe Developer Console.

  3. Explore API references: Browse the complete API documentation and try APIs directly in the Adobe Journey Optimizer API reference.

  4. API-triggered campaigns: Build transactional messaging with API-triggered campaigns. For high-volume scenarios (up to 5000 TPS), explore High Throughput mode (requires add-on license).

  5. Decision Management APIs: Use specialized APIs for offer management and decisioning. Learn more in the Decision Management API guide.

  6. Decisioning migration APIs: Programmatically migrate Decision Management entities to Decisioning with flexible scopes, automated validation, and rollback support. Learn more in the Decisioning migration API guide.

  7. SMS Webhooks: Configure inbound webhooks to capture incoming messages and feedback webhooks to receive delivery receipts and status updates. Learn more.

Testing and debugging testing

Before your implementation goes live, you need confidence that events fire at the right moment, journeys trigger as expected, custom actions behave under realistic load, and personalized content renders correctly. This section covers the tools and techniques to catch issues early — from low-level SDK logging to end-to-end journey test runs with real profiles.

  1. Debug SDK implementation: Use Adobe Experience Platform Assurance to inspect SDK events, validate data collection, and troubleshoot integration issues as they happen. Learn more about Assurance.

  2. Test event delivery: Verify that events from your application are correctly received by Adobe Experience Platform and trigger journeys as expected. Monitor event ingestion and validate payload structure.

  3. Validate API integrations: Test your custom action endpoints to ensure they handle Journey Optimizer requests correctly, respond within timeout limits, and return expected data formats.

  4. Use test mode with test profiles: Work with your Data Engineer to get access to test profiles, then validate your implementation using journey test mode. Learn how to test journeys.

  5. Monitor SDK logs: Enable debug logging in your SDK implementation to troubleshoot issues during development:

    • Mobile SDK: Enable logging to see SDK events and API calls
    • Web SDK: Use browser console to monitor SDK activity
  6. Verify datastream configuration: Ensure your datastream is correctly configured to send data to Journey Optimizer. Check that events flow through the datastream to the correct destinations.

  7. Query journey data for analysis: Use SQL queries on the Data Lake to analyze journey step events, debug issues, and monitor custom action performance. Explore query examples for journey analysis including:

    • Profile entry/exit tracking and discard reasons
    • Custom action performance metrics (latency, throughput, errors)
    • Event delivery and error patterns
    • Journey instance states

Advanced developer topics advanced-topics

Once your core SDKs, events, and APIs are in place, these topics help you go further: enriching journey data at runtime without bloating the profile, handling consent signals so opt-outs propagate through every integration, and tuning your implementation for the throughput and reliability that production scale demands.

Working with contextual data and enrichment

Journeys often need more data than what arrives in the triggering event — a product name, a loyalty tier, an order line-item list. Rather than pre-loading all of this into every profile, contextual enrichment lets your journey look it up at runtime from AEP datasets or carry it forward from a custom action response. Your messages and branch conditions can then reference that data without it ever being stored permanently on the profile.

  • Iterate over arrays: Use Handlebars syntax to display dynamic lists from events, custom action responses, and dataset lookups in messages. Learn about iterating contextual data.
  • Dataset lookup: Implement dataset lookups to enrich journey data from Adobe Experience Platform datasets. Work with your Data Engineer on configuration. Learn about dataset lookup.

Journey Optimizer enforces data governance and consent policies at the platform level, but your integration needs to respect them too. When a customer opts out of marketing communications, or when a data usage label restricts how a field can be used, those rules need to propagate through your custom actions and dataset lookups — not just block actions in the UI.

  • Data governance: Apply data usage policies to custom actions. Learn more about data governance.
  • Consent management: Handle customer consent preferences in your implementations. Learn about consent.

Optimization and best practices

Production Journey Optimizer implementations regularly handle millions of events and thousands of journey executions per second. These resources help you tune your integration for that scale — understanding rate limits before you hit them, avoiding common journey design pitfalls that silently drop profiles, and building error handling that degrades gracefully rather than failing opaquely.

Call Journey Optimizer REST APIs rest-apis

Beyond implementing SDKs and event streaming, you can also drive Journey Optimizer programmatically from your own systems. The full API reference, OpenAPI specs, and code samples are on the Journey Optimizer developer portal.

NOTE
All integrations must use OAuth Server-to-Server authentication — the JWT method is deprecated. Set up authentication

Execute API-triggered campaigns api-triggered

Trigger transactional or marketing messages from an external system using the Interactive Message Execution REST API. Before calling the endpoint:

  • The campaign must be activated before the endpoint accepts calls.
  • Calls have a timeout of 60 seconds; internal retries handle unexpected timeouts.
  • If campaign start/end dates are configured, API calls outside those dates will fail.
  • To build your payload, retrieve the generated sample cURL request from the cURL request section of your live campaign in the Journey Optimizer UI — it includes all personalization variables for that campaign.
  • Standard and high-throughput campaigns use different endpoints.

API reference · Code samples · Work with API-triggered campaigns

Capping and throttling for external endpoints capping-throttling

When journeys call external systems via custom actions or data sources, the Capping and Throttling APIs protect those systems from overload. Capping rejects calls that exceed the configured limit; throttling queues them for up to 6 hours (production sandboxes, custom actions only).

Capping API reference · Work with the Capping API · Work with the Throttling API

More REST APIs more-rest-apis

Beyond messaging and capping, Journey Optimizer exposes REST endpoints for suppression management, content templating, campaign retrieval, proofing, and orchestrated campaign execution. Use these when you need to automate operations that would otherwise require manual steps in the UI — for example, bulk-suppressing addresses after a data pull, or syncing templates from an external content pipeline.

What you need to do
API reference
Programmatically exclude email addresses or domains from sending
Suppression API · Manage the suppression list
Retrieve journey metadata for auditing or external sync
Journeys API
Create and manage content templates and fragments from an external pipeline
Content API · Templates · Fragments
Retrieve and filter Action campaigns
Campaigns API
Preview campaigns and send proofs programmatically
Simulations API
Validate datasets and trigger Orchestrated campaign execution
Dataset validation · Trigger · Enable datasets

Additional resources additional-resources

Collaborate across roles next-steps

Your implementation work intersects with other team members:

Work with Data Engineers

Collaborate with Data Engineers on data and event configurations. Every journey that reacts to user behavior depends on events you send — the Data Engineer defines the schemas, you implement the code that produces them.

Work with Administrators

Collaborate with Administrators on access and channel configurations. Journeys can only reach users through channels the Administrator has set up — coordinate early so your SDK work and their configuration stay in sync.

  • Provide API specifications for custom actions they’ll configure in Journey Optimizer
  • Request necessary permissions and API credentials via Adobe Developer Console
  • Coordinate on channel configuration requirements — push certificates for iOS and Android, web push settings, SMS webhook endpoints
  • Align on sandbox strategy and testing environments before running journey test mode
Work with Marketers

Collaborate with Marketers on journey design and testing. Marketers build the journeys and content that depend entirely on the events you send and the surfaces you expose — the closer you align, the faster journeys go live.

Start implementing

Ready to start building? Choose your first implementation area from the sections above:

  1. Mobile app? Start with Mobile SDK integration
  2. Website? Begin with Web SDK setup
  3. API integration? Jump to Working with APIs
  4. Custom system? Check out Custom actions

Each section includes links to detailed technical documentation, code samples, and tutorials to guide your implementation.

Other role guides other-role-guides

Back to Roles and responsibilities overview · Back to Get started

recommendation-more-help
journey-optimizer-help