Skip to content

feat(platform): support platform-aware outgoing webhook delivery#11643

Merged
Gnanasundari24 merged 28 commits into
mainfrom
webhooks-for-platform
May 18, 2026
Merged

feat(platform): support platform-aware outgoing webhook delivery#11643
Gnanasundari24 merged 28 commits into
mainfrom
webhooks-for-platform

Conversation

@tsdk02
Copy link
Copy Markdown
Contributor

@tsdk02 tsdk02 commented Mar 29, 2026

Type of Change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring
  • Dependency updates
  • Documentation
  • CI/CD

Description

This PR adds platform-aware outgoing webhook routing so that webhooks are delivered to the correct recipient based on who initiated the operation.

Problem

In a platform setup, there are two merchant identities:

  • Provider (Platform Merchant): The business owner/platform entity
  • Processor (Connected Merchant): The merchant whose processor credentials are used for payment processing

Previously, outgoing webhooks always went to the processor (connected merchant) regardless of who initiated the payment. This is incorrect when the platform merchant initiates an operation — the webhook should go to the platform's own profile with the platform's encryption credentials.

Solution

Webhook Recipient Resolution

Two new helpers in webhooks/utils.rs resolve the correct webhook recipient:

  • resolve_webhook_recipient_from_initiator — Used in direct flows (payment create, refund, payout). Checks Platform::initiator.is_platform() to route webhooks.
  • resolve_webhook_recipient_from_created_by — Used in incoming webhook flows where the Platform struct has no initiator. Examines the created_by field on the resource to determine routing.

Both return a WebhookRecipientContext containing the recipient's merchant account, keystore, business profile, and whether the operation was platform-initiated.

Event Storage

  • Events are always stored with merchant_id = provider (the platform/business owner)
  • New processor_merchant_id column tracks the connected merchant whose credentials were used
  • Events are encrypted with the webhook recipient's keystore, not always the processor's

Outgoing Webhook Flow

  • create_event_and_trigger_outgoing_webhook now accepts Platform + WebhookRecipientContext instead of raw Processor
  • The webhook URL, signature, and encryption all use the resolved recipient's credentials
  • OutgoingWebhook API model includes processor_merchant_id for downstream consumers
  • Analytics/Kafka events include processor_merchant_id

Retry Workflow

  • OutgoingWebhookTrackingData now includes is_platform_initiated and processor_merchant_id so retries can reconstruct the correct keystore context
  • get_outgoing_webhook_content_and_event_type accepts &Platform (correctly constructed by the caller) instead of building a wrong one internally
  • Redundant DB queries for webhook recipient account removed — already available from Platform

Webhook Events APIs

All webhook event endpoints (list_initial_delivery_attempts, list_delivery_attempts, retry_delivery_attempt) updated with proper provider/credential resolution:

  • Standard merchant: provider = processor = self (no change)
  • Connected merchant: resolves provider via get_platform_account_and_key_store, uses provider's merchant_id for event queries, own keystore for decryption
  • Platform merchant: uses own merchant_id for queries, own keystore for decryption, resolves processor_merchant_id from event

retry_delivery_attempt includes keystore fallback — tries processor's keystore first, falls back to provider's if they differ (handles both processor-targeted and platform-initiated events).

All 4 webhook event endpoints now have allow_platform: true.

Additional Changes

  • This PR modifies the API contract
  • This PR modifies the database schema
  • This PR modifies application configuration/environment variables

API contract: OutgoingWebhook struct gains optional processor_merchant_id field (non-breaking).

Database schema: New nullable processor_merchant_id column on events table. Old rows have NULL (backward compatible). New processor_merchant_id column also added to ClickHouse outgoing webhook event tables/views.

Motivation and Context

Platform merchants need webhooks routed to themselves when they initiate operations on behalf of connected merchants. Without this, the platform has no visibility into webhook delivery for operations they initiated, and the encryption/signature uses the wrong merchant's credentials.

How did you test it?

  • Verified all type changes compile with cargo build
  • Addressed all clippy lints
  • Reviewed credential flow for each merchant type:
    • Standard merchant → webhook to self (unchanged behavior)
    • Connected merchant creates payment → webhook to connected merchant's profile
    • Platform creates payment on behalf of connected → webhook to platform's default profile
    • Incoming webhook from connector → resolves created_by → routes to correct merchant
    • Webhook retry (automatic + manual) → uses correct keystore and profile
    • Events table: merchant_id = provider, processor_merchant_id = connected, business_profile_id = recipient's profile

Create a Platform Organization with a Platform Merchant, 2 Connected Merchants and 1 Standard Merchant

Platform Organization:

  • Platform Merchant:
{
  "merchant_id": "merchant_1774770747",
  "org_id": "org_RCIkaQ5MiQfpoXugA3Mj",
  "profile_id": "pro_mmb2IiMGVlHwawyXhp44",
  "api_key": "dev_YJjSTjPe7u6sVHANMS9aDoRT6yN69l7O4JUbwxmQSXIOyDSWKNa42nWhuLomC8zH"
}
  • Connected Merchant 1:
{
  "merchant_id": "merchant_1774771168",
  "org_id": "org_RCIkaQ5MiQfpoXugA3Mj",
  "profile_id": "pro_tGbbq73tVsUoGF1Bcwe3",
  "api_key": "dev_uPvoTxMVUNSAc2ZqkBPwwxaDANsPXnqCHDzKyTOwhQ3pk4EXmuB9aVT5v6i2OCYu"
}
  • Connected Merchant 2:
{
  "merchant_id": "merchant_1774771173",
  "org_id": "org_RCIkaQ5MiQfpoXugA3Mj",
  "profile_id": "pro_VpSYMCzoLgk3gAh2Toch",
  "api_key": "dev_UbsKzvxvkm1eccBxrrUkztwEcQm75WFY3zt6c8yVfA0WLMegXHehj6x4i3c7rTpp"
}
  • Standard Merchant:
{
  "merchant_id": "merchant_1774771179",
  "org_id": "org_RCIkaQ5MiQfpoXugA3Mj",
  "profile_id": "pro_q5Tz6mDDARjUeqKPuKfl",
  "api_key": "dev_Di93e5ZDTHt2xoCbkLBjJPLv874w1tJnTAWvJQ7G6Z8nPumOA2LvUbie7iiDwWcZ"
}

Create MCA for Connected and Standard Merchants:

curl --location 'http://localhost:8080/account/merchant_1774771168/connectors' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_uPvoTxMVUNSAc2ZqkBPwwxaDANsPXnqCHDzKyTOwhQ3pk4EXmuB9aVT5v6i2OCYu' \
--data '{
    "connector_type": "payment_processor",
    "connector_name": "stripe",
    "connector_account_details": {
        "auth_type": "HeaderKey",
        "api_key": "<api-key>"
    },
    "disabled": false,
    "connector_label": "stripe_default3",
    "test_mode": true,
    "payment_methods_enabled": [
        {
            "payment_method": "card",
            "payment_method_types": [
                {
                    "payment_method_type": "debit",
                    "card_networks": [
                        "Mastercard"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": true,
                    "accepted_countries": {
                        "type": "disable_only",
                        "list": [
                            "HK"
                        ]
                    },
                    "accepted_currencies": {
                        "type": "enable_only",
                        "list": [
                            "USD",
                            "GBP",
                            "INR"
                        ]
                    }
                },
                {
                    "payment_method_type": "debit",
                    "card_networks": [
                        "Visa"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "debit",
                    "card_networks": [
                        "Interac"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "debit",
                    "card_networks": [
                        "AmericanExpress"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "debit",
                    "card_networks": [
                        "JCB"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "debit",
                    "card_networks": [
                        "DinersClub"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "debit",
                    "card_networks": [
                        "Discover"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "debit",
                    "card_networks": [
                        "CartesBancaires"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "debit",
                    "card_networks": [
                        "UnionPay"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "card_networks": [
                        "Mastercard"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": true,
                    "accepted_countries": {
                        "type": "disable_only",
                        "list": [
                            "HK"
                        ]
                    },
                    "accepted_currencies": {
                        "type": "enable_only",
                        "list": [
                            "USD",
                            "GBP",
                            "INR"
                        ]
                    }
                }
            ]
        },
        {
            "payment_method": "pay_later",
            "payment_method_types": [
                {
                    "payment_method_type": "credit",
                    "card_networks": [
                        "Visa"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "card_networks": [
                        "Interac"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "card_networks": [
                        "AmericanExpress"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "card_networks": [
                        "JCB"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "card_networks": [
                        "DinersClub"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "card_networks": [
                        "Discover"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "card_networks": [
                        "CartesBancaires"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "card_networks": [
                        "UnionPay"
                    ],
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                }
            ]
        }
    ],
    "metadata": {},
    "additional_merchant_data": null,
    "status": "active",
    "pm_auth_config": null,
    "connector_wallets_details": null
}'
  • Response:
{
    "connector_type": "payment_processor",
    "connector_name": "stripe",
    "connector_label": "stripe_default3",
    "merchant_connector_id": "mca_8i4hPSXaEPdyIlLm7POn",
    "profile_id": "pro_tGbbq73tVsUoGF1Bcwe3",
    "connector_account_details": {
        "auth_type": "HeaderKey",
        "api_key": "<api-key>"
    },
    "payment_methods_enabled": [
        {
            "payment_method": "card",
            "payment_method_types": [
                {
                    "payment_method_type": "debit",
                    "payment_experience": null,
                    "card_networks": [
                        "Mastercard"
                    ],
                    "accepted_currencies": {
                        "type": "enable_only",
                        "list": [
                            "USD",
                            "GBP",
                            "INR"
                        ]
                    },
                    "accepted_countries": {
                        "type": "disable_only",
                        "list": [
                            "HK"
                        ]
                    },
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": true
                },
                {
                    "payment_method_type": "debit",
                    "payment_experience": null,
                    "card_networks": [
                        "Visa"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "debit",
                    "payment_experience": null,
                    "card_networks": [
                        "Interac"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "debit",
                    "payment_experience": null,
                    "card_networks": [
                        "AmericanExpress"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "debit",
                    "payment_experience": null,
                    "card_networks": [
                        "JCB"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "debit",
                    "payment_experience": null,
                    "card_networks": [
                        "DinersClub"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "debit",
                    "payment_experience": null,
                    "card_networks": [
                        "Discover"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "debit",
                    "payment_experience": null,
                    "card_networks": [
                        "CartesBancaires"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "debit",
                    "payment_experience": null,
                    "card_networks": [
                        "UnionPay"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "payment_experience": null,
                    "card_networks": [
                        "Mastercard"
                    ],
                    "accepted_currencies": {
                        "type": "enable_only",
                        "list": [
                            "USD",
                            "GBP",
                            "INR"
                        ]
                    },
                    "accepted_countries": {
                        "type": "disable_only",
                        "list": [
                            "HK"
                        ]
                    },
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": true
                }
            ]
        },
        {
            "payment_method": "pay_later",
            "payment_method_types": [
                {
                    "payment_method_type": "credit",
                    "payment_experience": null,
                    "card_networks": [
                        "Visa"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "payment_experience": null,
                    "card_networks": [
                        "Interac"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "payment_experience": null,
                    "card_networks": [
                        "AmericanExpress"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "payment_experience": null,
                    "card_networks": [
                        "JCB"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "payment_experience": null,
                    "card_networks": [
                        "DinersClub"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "payment_experience": null,
                    "card_networks": [
                        "Discover"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "payment_experience": null,
                    "card_networks": [
                        "CartesBancaires"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                },
                {
                    "payment_method_type": "credit",
                    "payment_experience": null,
                    "card_networks": [
                        "UnionPay"
                    ],
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": 0,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": false
                }
            ]
        }
    ],
    "connector_webhook_details": null,
    "metadata": {},
    "test_mode": true,
    "disabled": false,
    "frm_configs": null,
    "business_country": null,
    "business_label": null,
    "business_sub_label": null,
    "applepay_verified_domains": null,
    "pm_auth_config": null,
    "status": "active",
    "additional_merchant_data": null,
    "connector_wallets_details": null,
    "webhook_setup_capabilities": {
        "is_webhook_auto_configuration_supported": false,
        "requires_webhook_secret": null,
        "config_type": null
    }
}

Configure outgoing webhook in platform merchant's default profile and connected merchant's profile where connector is configured.
For connected merchant:
image

For platform merchant:
image

Payments Flow - triggering outgoing webhook:

Create payment using connected merchant's API key:

curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_uPvoTxMVUNSAc2ZqkBPwwxaDANsPXnqCHDzKyTOwhQ3pk4EXmuB9aVT5v6i2OCYu' \
--data-raw '{
    "amount": 6540,
    "currency": "USD",
    "amount_to_capture": 6540,
    "confirm": true,
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "authentication_type": "no_three_ds",
    "setup_future_usage":"on_session", 
    "customer_id": "connected1",
    "routing": { 
        "type": "single",
        "data": "stripe"
    },
    "description": "Its my first payment request",
    "return_url": "https://google.com",
    "payment_method": "card",
    "payment_method_type": "credit",
    "payment_method_data": { 
        "card": {
            "card_number": "4242424242424242",
            "card_exp_month": "07",
            "card_exp_year": "27",
            "card_holder_name": "joseph Doe",
            "card_cvc": "124"
        },
        "billing": {
            "address": {
                "line1": "1467",
                "line2": "Harrison Street",
                "line3": "Harrison Street",
                "city": "San Fransico",
                "state": "California",
                "zip": "94122",
                "country": "US",
                "first_name": "joseph",
                "last_name": "Doe"
            },
            "phone": {
                "number": "8056594427",
                "country_code": "+91"
            },
            "email": "guest3@example.com"
        }
    },
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "order_details": [
        {
            "product_name": "Apple iphone 15",
            "quantity": 1,
            "amount": 6540,
            "account_name": "transaction_processing"
        }
    ],
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    },
    "browser_info": {
        "user_agent": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/70.0.3538.110 Safari\/537.36",
        "accept_header": "text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,image\/apng,*\/*;q=0.8",
        "language": "nl-NL",
        "color_depth": 24,
        "screen_height": 723,
        "screen_width": 1536,
        "time_zone": 0,
        "java_enabled": true,
        "java_script_enabled": true,
        "ip_address": "128.0.0.1"
    },
    "customer_acceptance": {
        "acceptance_type": "offline",
        "accepted_at": "1963-05-03T04:07:52.723Z",
        "online": {
            "ip_address": "125.0.0.1",
            "user_agent": "amet irure esse"
        }
    },
    "connector_metadata": {
        "noon": {
            "order_category": "pay"
        }
    },
    "payment_link": false,
    "payment_link_config": {
        "theme": "",
        "logo": "",
        "seller_name": "",
        "sdk_layout": "",
        "display_sdk_only": false,
        "enabled_saved_payment_method": false
    },
    "payment_type": "normal", 
    "request_incremental_authorization": false,
    "merchant_order_reference_id": "test_ord",
    "session_expiry": 900
}'
  • Response:
{
    "payment_id": "pay_mVyLXcypouZUD0S6kq58",
    "merchant_id": "merchant_1774770747",
    "status": "succeeded",
    "amount": 6540,
    "net_amount": 6540,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": 6540,
    "processor_merchant_id": "merchant_1774771168",
    "initiator": "connected",
    "sdk_authorization": "cHJvZmlsZV9pZD1wcm9fdEdiYnE3M3RWc1VvR0YxQmN3ZTMscHVibGlzaGFibGVfa2V5PXBrX2Rldl83MmUzYjZkNTExMGE0OGM2YTkwMDZjYzllODA1YTliYSxjbGllbnRfc2VjcmV0PXBheV9tVnlMWGN5cG91WlVEMFM2a3E1OF9zZWNyZXRfQnQyMThvcmdzY0ltZzduOWlsR04sY3VzdG9tZXJfaWQ9Y29ubmVjdGVkMQ==",
    "connector": "stripe",
    "state_metadata": null,
    "client_secret": "pay_mVyLXcypouZUD0S6kq58_secret_Bt218orgscImg7n9ilGN",
    "created": "2026-03-29T08:37:04.511Z",
    "modified_at": "2026-03-29T08:37:06.237Z",
    "currency": "USD",
    "customer_id": null,
    "customer": null,
    "description": "Its my first payment request",
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": "on_session",
    "off_session": null,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "last4": "4242",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "424242",
            "card_extended_bin": null,
            "card_exp_month": "07",
            "card_exp_year": "27",
            "card_holder_name": "joseph Doe",
            "payment_checks": {
                "cvc_check": "pass",
                "address_line1_check": "pass",
                "address_postal_code_check": "pass"
            },
            "authentication_data": null,
            "auth_code": null
        },
        "billing": {
            "address": {
                "city": "San Fransico",
                "country": "US",
                "line1": "1467",
                "line2": "Harrison Street",
                "line3": "Harrison Street",
                "zip": "94122",
                "state": "California",
                "first_name": "joseph",
                "last_name": "Doe",
                "origin_zip": null
            },
            "phone": {
                "number": "8056594427",
                "country_code": "+91"
            },
            "email": "guest3@example.com"
        }
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "joseph",
            "last_name": "Doe",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "joseph",
            "last_name": "Doe",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "order_details": [
        {
            "sku": null,
            "upc": null,
            "brand": null,
            "amount": 6540,
            "category": null,
            "quantity": 1,
            "tax_rate": null,
            "product_id": null,
            "description": null,
            "product_name": "Apple iphone 15",
            "product_type": null,
            "sub_category": null,
            "total_amount": null,
            "commodity_code": null,
            "unit_of_measure": null,
            "product_img_link": null,
            "product_tax_code": null,
            "total_tax_amount": null,
            "requires_shipping": null,
            "unit_discount_amount": null
        }
    ],
    "email": null,
    "name": null,
    "phone": null,
    "return_url": "https://google.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "error_details": null,
    "payment_experience": null,
    "payment_method_type": "credit",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": "pi_3TGEqDIVaesDjvMP2VCwQwGn",
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": {
        "apple_pay": null,
        "airwallex": null,
        "noon": {
            "order_category": "pay"
        },
        "braintree": null,
        "adyen": null,
        "peachpayments": null,
        "santander": null
    },
    "connector_response_metadata": null,
    "feature_metadata": {
        "redirect_response": null,
        "search_tags": null,
        "apple_pay_recurring_details": null,
        "pix_additional_details": null,
        "boleto_additional_details": null
    },
    "reference_id": "pi_3TGEqDIVaesDjvMP2VCwQwGn",
    "payment_link": null,
    "profile_id": "pro_tGbbq73tVsUoGF1Bcwe3",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_8i4hPSXaEPdyIlLm7POn",
    "incremental_authorization_allowed": false,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2026-03-29T08:52:04.511Z",
    "fingerprint": null,
    "browser_info": {
        "language": "nl-NL",
        "time_zone": 0,
        "ip_address": "128.0.0.1",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "color_depth": 24,
        "java_enabled": true,
        "screen_width": 1536,
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "screen_height": 723,
        "java_script_enabled": true
    },
    "payment_channel": null,
    "payment_method_id": null,
    "network_transaction_id": "115103708757668",
    "payment_method_status": null,
    "updated": "2026-03-29T08:37:06.237Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": false,
    "extended_authorization_last_applied_at": null,
    "request_extended_authorization": null,
    "capture_before": null,
    "merchant_order_reference_id": "test_ord",
    "order_tax_amount": null,
    "connector_mandate_id": null,
    "card_discovery": "manual",
    "force_3ds_challenge": false,
    "force_3ds_challenge_trigger": false,
    "issuer_error_code": null,
    "issuer_error_message": null,
    "is_iframe_redirection_enabled": null,
    "whole_connector_response": null,
    "enable_partial_authorization": null,
    "enable_overcapture": null,
    "is_overcapture_enabled": false,
    "network_details": null,
    "is_stored_credential": null,
    "mit_category": null,
    "billing_descriptor": null,
    "tokenization": null,
    "partner_merchant_identifier_details": null,
    "payment_method_tokenization_details": null,
    "installment_options": null,
    "installment_data": null
}

Received outgoing webhook at the webhook endpoint configured for connected merchant:
image

{
  "merchant_id": "merchant_1774770747",
  "event_id": "evt_019d38bd584779d3b45f66984aa5c6ea",
  "event_type": "payment_succeeded",
  "content": {
    "type": "payment_details",
    "object": {
      "payment_id": "pay_mVyLXcypouZUD0S6kq58",
      "merchant_id": "merchant_1774770747",
      "status": "succeeded",
      "amount": 6540,
      "net_amount": 6540,
      "shipping_cost": null,
      "amount_capturable": 0,
      "amount_received": 6540,
      "processor_merchant_id": "merchant_1774771168",
      "initiator": "connected",
      "sdk_authorization": "cHJvZmlsZV9pZD1wcm9fdEdiYnE3M3RWc1VvR0YxQmN3ZTMscHVibGlzaGFibGVfa2V5PXBrX2Rldl83MmUzYjZkNTExMGE0OGM2YTkwMDZjYzllODA1YTliYSxjbGllbnRfc2VjcmV0PXBheV9tVnlMWGN5cG91WlVEMFM2a3E1OF9zZWNyZXRfQnQyMThvcmdzY0ltZzduOWlsR04sY3VzdG9tZXJfaWQ9Y29ubmVjdGVkMQ==",
      "connector": "stripe",
      "state_metadata": null,
      "client_secret": "pay_mVyLXcypouZUD0S6kq58_secret_Bt218orgscImg7n9ilGN",
      "created": "2026-03-29T08:37:04.511Z",
      "modified_at": "2026-03-29T08:37:06.237Z",
      "currency": "USD",
      "customer_id": null,
      "customer": null,
      "description": "Its my first payment request",
      "refunds": null,
      "disputes": null,
      "mandate_id": null,
      "mandate_data": null,
      "setup_future_usage": "on_session",
      "off_session": null,
      "capture_on": null,
      "capture_method": "automatic",
      "payment_method": "card",
      "payment_method_data": {
        "card": {
          "last4": "4242",
          "card_type": null,
          "card_network": null,
          "card_issuer": null,
          "card_issuing_country": null,
          "card_isin": "424242",
          "card_extended_bin": null,
          "card_exp_month": "07",
          "card_exp_year": "27",
          "card_holder_name": "joseph Doe",
          "payment_checks": {
            "cvc_check": "pass",
            "address_line1_check": "pass",
            "address_postal_code_check": "pass"
          },
          "authentication_data": null,
          "auth_code": null
        },
        "billing": {
          "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "joseph",
            "last_name": "Doe",
            "origin_zip": null
          },
          "phone": {
            "number": "8056594427",
            "country_code": "+91"
          },
          "email": "guest3@example.com"
        }
      },
      "payment_token": null,
      "shipping": {
        "address": {
          "city": "San Fransico",
          "country": "US",
          "line1": "1467",
          "line2": "Harrison Street",
          "line3": "Harrison Street",
          "zip": "94122",
          "state": "California",
          "first_name": "joseph",
          "last_name": "Doe",
          "origin_zip": null
        },
        "phone": {
          "number": "8056594427",
          "country_code": "+91"
        },
        "email": "guest@example.com"
      },
      "billing": {
        "address": {
          "city": "San Fransico",
          "country": "US",
          "line1": "1467",
          "line2": "Harrison Street",
          "line3": "Harrison Street",
          "zip": "94122",
          "state": "California",
          "first_name": "joseph",
          "last_name": "Doe",
          "origin_zip": null
        },
        "phone": {
          "number": "8056594427",
          "country_code": "+91"
        },
        "email": "guest@example.com"
      },
      "order_details": [
        {
          "sku": null,
          "upc": null,
          "brand": null,
          "amount": 6540,
          "category": null,
          "quantity": 1,
          "tax_rate": null,
          "product_id": null,
          "description": null,
          "product_name": "Apple iphone 15",
          "product_type": null,
          "sub_category": null,
          "total_amount": null,
          "commodity_code": null,
          "unit_of_measure": null,
          "product_img_link": null,
          "product_tax_code": null,
          "total_tax_amount": null,
          "requires_shipping": null,
          "unit_discount_amount": null
        }
      ],
      "email": null,
      "name": null,
      "phone": null,
      "return_url": "https://google.com/",
      "authentication_type": "no_three_ds",
      "statement_descriptor_name": "joseph",
      "statement_descriptor_suffix": "JS",
      "next_action": null,
      "cancellation_reason": null,
      "error_code": null,
      "error_message": null,
      "unified_code": null,
      "unified_message": null,
      "error_details": null,
      "payment_experience": null,
      "payment_method_type": "credit",
      "connector_label": null,
      "business_country": null,
      "business_label": "default",
      "business_sub_label": null,
      "allowed_payment_method_types": null,
      "manual_retry_allowed": null,
      "connector_transaction_id": "pi_3TGEqDIVaesDjvMP2VCwQwGn",
      "frm_message": null,
      "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
      },
      "connector_metadata": {
        "apple_pay": null,
        "airwallex": null,
        "noon": {
          "order_category": "pay"
        },
        "braintree": null,
        "adyen": null,
        "peachpayments": null,
        "santander": null
      },
      "connector_response_metadata": null,
      "feature_metadata": {
        "redirect_response": null,
        "search_tags": null,
        "apple_pay_recurring_details": null,
        "pix_additional_details": null,
        "boleto_additional_details": null
      },
      "reference_id": "pi_3TGEqDIVaesDjvMP2VCwQwGn",
      "payment_link": null,
      "profile_id": "pro_tGbbq73tVsUoGF1Bcwe3",
      "surcharge_details": null,
      "attempt_count": 1,
      "merchant_decision": null,
      "merchant_connector_id": "mca_8i4hPSXaEPdyIlLm7POn",
      "incremental_authorization_allowed": false,
      "authorization_count": null,
      "incremental_authorizations": null,
      "external_authentication_details": null,
      "external_3ds_authentication_attempted": false,
      "expires_on": "2026-03-29T08:52:04.511Z",
      "fingerprint": null,
      "browser_info": {
        "language": "nl-NL",
        "time_zone": 0,
        "ip_address": "128.0.0.1",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "color_depth": 24,
        "java_enabled": true,
        "screen_width": 1536,
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "screen_height": 723,
        "java_script_enabled": true
      },
      "payment_channel": null,
      "payment_method_id": null,
      "network_transaction_id": "115103708757668",
      "payment_method_status": null,
      "updated": "2026-03-29T08:37:06.237Z",
      "split_payments": null,
      "frm_metadata": null,
      "extended_authorization_applied": false,
      "extended_authorization_last_applied_at": null,
      "request_extended_authorization": null,
      "capture_before": null,
      "merchant_order_reference_id": "test_ord",
      "order_tax_amount": null,
      "connector_mandate_id": null,
      "card_discovery": "manual",
      "force_3ds_challenge": false,
      "force_3ds_challenge_trigger": false,
      "issuer_error_code": null,
      "issuer_error_message": null,
      "is_iframe_redirection_enabled": null,
      "whole_connector_response": null,
      "enable_partial_authorization": null,
      "enable_overcapture": null,
      "is_overcapture_enabled": false,
      "network_details": null,
      "is_stored_credential": null,
      "mit_category": null,
      "billing_descriptor": null,
      "tokenization": null,
      "partner_merchant_identifier_details": null,
      "payment_method_tokenization_details": null,
      "installment_options": null,
      "installment_data": null
    }
  },
  "timestamp": "2026-03-29T08:37:06.247Z",
  "processor_merchant_id": "merchant_1774771168"
}

Can verify in events table:

  • merchant_id is platform merchant id
  • processor_merchant_id is connected merchant id
  • profile_id is connected merchant's profile's id
image

Can verify clickhouse table that merchant_id and processor_merchant_id are populated correctly:
image

Platform Merchant Triggering payment on behalf of Connected Merchant:

curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'x-connected-merchant-id: merchant_1774771168' \
--header 'api-key: dev_YJjSTjPe7u6sVHANMS9aDoRT6yN69l7O4JUbwxmQSXIOyDSWKNa42nWhuLomC8zH' \
--data-raw '{
    "amount": 6540,
    "currency": "USD",
    "amount_to_capture": 6540,
    "confirm": true,
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "authentication_type": "no_three_ds",
    "setup_future_usage":"on_session", 
    "customer_id": "connected1",
    "routing": { 
        "type": "single",
        "data": "stripe"
    },
    "description": "Its my first payment request",
    "return_url": "https://google.com",
    "payment_method": "card",
    "payment_method_type": "credit",
    "payment_method_data": { 
        "card": {
            "card_number": "4242424242424242",
            "card_exp_month": "07",
            "card_exp_year": "27",
            "card_holder_name": "joseph Doe",
            "card_cvc": "124"
        },
        "billing": {
            "address": {
                "line1": "1467",
                "line2": "Harrison Street",
                "line3": "Harrison Street",
                "city": "San Fransico",
                "state": "California",
                "zip": "94122",
                "country": "US",
                "first_name": "joseph",
                "last_name": "Doe"
            },
            "phone": {
                "number": "8056594427",
                "country_code": "+91"
            },
            "email": "guest3@example.com"
        }
    },
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "order_details": [
        {
            "product_name": "Apple iphone 15",
            "quantity": 1,
            "amount": 6540,
            "account_name": "transaction_processing"
        }
    ],
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    },
    "browser_info": {
        "user_agent": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/70.0.3538.110 Safari\/537.36",
        "accept_header": "text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,image\/apng,*\/*;q=0.8",
        "language": "nl-NL",
        "color_depth": 24,
        "screen_height": 723,
        "screen_width": 1536,
        "time_zone": 0,
        "java_enabled": true,
        "java_script_enabled": true,
        "ip_address": "128.0.0.1"
    },
    "customer_acceptance": {
        "acceptance_type": "offline",
        "accepted_at": "1963-05-03T04:07:52.723Z",
        "online": {
            "ip_address": "125.0.0.1",
            "user_agent": "amet irure esse"
        }
    },
    "connector_metadata": {
        "noon": {
            "order_category": "pay"
        }
    },
    "payment_link": false,
    "payment_link_config": {
        "theme": "",
        "logo": "",
        "seller_name": "",
        "sdk_layout": "",
        "display_sdk_only": false,
        "enabled_saved_payment_method": false
    },
    "payment_type": "normal", 
    "request_incremental_authorization": false,
    "merchant_order_reference_id": "test_ord",
    "session_expiry": 900
}'
  • Response:
{
    "payment_id": "pay_r0wEdy9SXBVzkVbdiHfH",
    "merchant_id": "merchant_1774770747",
    "status": "succeeded",
    "amount": 6540,
    "net_amount": 6540,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": 6540,
    "processor_merchant_id": "merchant_1774771168",
    "initiator": "platform",
    "sdk_authorization": "cHJvZmlsZV9pZD1wcm9fdEdiYnE3M3RWc1VvR0YxQmN3ZTMscHVibGlzaGFibGVfa2V5PXBrX2Rldl83MmUzYjZkNTExMGE0OGM2YTkwMDZjYzllODA1YTliYSxwbGF0Zm9ybV9wdWJsaXNoYWJsZV9rZXk9cGtfZGV2XzI0YzNlNzMyZTg5ZTQ0ZWNhMzk1NDAyM2E0ZGRhZjk2LGNsaWVudF9zZWNyZXQ9cGF5X3Iwd0VkeTlTWEJWemtWYmRpSGZIX3NlY3JldF84OTM5aWhOSGtkZHI1S2o4V0RBMyxjdXN0b21lcl9pZD1jb25uZWN0ZWQx",
    "connector": "stripe",
    "state_metadata": null,
    "client_secret": "pay_r0wEdy9SXBVzkVbdiHfH_secret_8939ihNHkddr5Kj8WDA3",
    "created": "2026-03-29T08:22:13.204Z",
    "modified_at": "2026-03-29T08:22:15.101Z",
    "currency": "USD",
    "customer_id": null,
    "customer": null,
    "description": "Its my first payment request",
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": "on_session",
    "off_session": null,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "last4": "4242",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "424242",
            "card_extended_bin": null,
            "card_exp_month": "07",
            "card_exp_year": "27",
            "card_holder_name": "joseph Doe",
            "payment_checks": {
                "cvc_check": "pass",
                "address_line1_check": "pass",
                "address_postal_code_check": "pass"
            },
            "authentication_data": null,
            "auth_code": null
        },
        "billing": {
            "address": {
                "city": "San Fransico",
                "country": "US",
                "line1": "1467",
                "line2": "Harrison Street",
                "line3": "Harrison Street",
                "zip": "94122",
                "state": "California",
                "first_name": "joseph",
                "last_name": "Doe",
                "origin_zip": null
            },
            "phone": {
                "number": "8056594427",
                "country_code": "+91"
            },
            "email": "guest3@example.com"
        }
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "joseph",
            "last_name": "Doe",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "joseph",
            "last_name": "Doe",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "order_details": [
        {
            "sku": null,
            "upc": null,
            "brand": null,
            "amount": 6540,
            "category": null,
            "quantity": 1,
            "tax_rate": null,
            "product_id": null,
            "description": null,
            "product_name": "Apple iphone 15",
            "product_type": null,
            "sub_category": null,
            "total_amount": null,
            "commodity_code": null,
            "unit_of_measure": null,
            "product_img_link": null,
            "product_tax_code": null,
            "total_tax_amount": null,
            "requires_shipping": null,
            "unit_discount_amount": null
        }
    ],
    "email": null,
    "name": null,
    "phone": null,
    "return_url": "https://google.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "error_details": null,
    "payment_experience": null,
    "payment_method_type": "credit",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": "pi_3TGEbpIVaesDjvMP21TmiaLr",
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": {
        "apple_pay": null,
        "airwallex": null,
        "noon": {
            "order_category": "pay"
        },
        "braintree": null,
        "adyen": null,
        "peachpayments": null,
        "santander": null
    },
    "connector_response_metadata": null,
    "feature_metadata": {
        "redirect_response": null,
        "search_tags": null,
        "apple_pay_recurring_details": null,
        "pix_additional_details": null,
        "boleto_additional_details": null
    },
    "reference_id": "pi_3TGEbpIVaesDjvMP21TmiaLr",
    "payment_link": null,
    "profile_id": "pro_tGbbq73tVsUoGF1Bcwe3",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_8i4hPSXaEPdyIlLm7POn",
    "incremental_authorization_allowed": false,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2026-03-29T08:37:13.204Z",
    "fingerprint": null,
    "browser_info": {
        "language": "nl-NL",
        "time_zone": 0,
        "ip_address": "128.0.0.1",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "color_depth": 24,
        "java_enabled": true,
        "screen_width": 1536,
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "screen_height": 723,
        "java_script_enabled": true
    },
    "payment_channel": null,
    "payment_method_id": null,
    "network_transaction_id": "115103708757668",
    "payment_method_status": null,
    "updated": "2026-03-29T08:22:15.101Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": false,
    "extended_authorization_last_applied_at": null,
    "request_extended_authorization": null,
    "capture_before": null,
    "merchant_order_reference_id": "test_ord",
    "order_tax_amount": null,
    "connector_mandate_id": null,
    "card_discovery": "manual",
    "force_3ds_challenge": false,
    "force_3ds_challenge_trigger": false,
    "issuer_error_code": null,
    "issuer_error_message": null,
    "is_iframe_redirection_enabled": null,
    "whole_connector_response": null,
    "enable_partial_authorization": null,
    "enable_overcapture": null,
    "is_overcapture_enabled": false,
    "network_details": null,
    "is_stored_credential": null,
    "mit_category": null,
    "billing_descriptor": null,
    "tokenization": null,
    "partner_merchant_identifier_details": null,
    "payment_method_tokenization_details": null,
    "installment_options": null,
    "installment_data": null
}

Received outgoing webhook at the webhook endpoint configured for platform merchant:
image

{
  "merchant_id": "merchant_1774770747",
  "event_id": "evt_019d38afbf577281b161184b048a7a22",
  "event_type": "payment_succeeded",
  "content": {
    "type": "payment_details",
    "object": {
      "payment_id": "pay_r0wEdy9SXBVzkVbdiHfH",
      "merchant_id": "merchant_1774770747",
      "status": "succeeded",
      "amount": 6540,
      "net_amount": 6540,
      "shipping_cost": null,
      "amount_capturable": 0,
      "amount_received": 6540,
      "processor_merchant_id": "merchant_1774771168",
      "initiator": "platform",
      "sdk_authorization": "cHJvZmlsZV9pZD1wcm9fdEdiYnE3M3RWc1VvR0YxQmN3ZTMscHVibGlzaGFibGVfa2V5PXBrX2Rldl83MmUzYjZkNTExMGE0OGM2YTkwMDZjYzllODA1YTliYSxwbGF0Zm9ybV9wdWJsaXNoYWJsZV9rZXk9cGtfZGV2XzI0YzNlNzMyZTg5ZTQ0ZWNhMzk1NDAyM2E0ZGRhZjk2LGNsaWVudF9zZWNyZXQ9cGF5X3Iwd0VkeTlTWEJWemtWYmRpSGZIX3NlY3JldF84OTM5aWhOSGtkZHI1S2o4V0RBMyxjdXN0b21lcl9pZD1jb25uZWN0ZWQx",
      "connector": "stripe",
      "state_metadata": null,
      "client_secret": "pay_r0wEdy9SXBVzkVbdiHfH_secret_8939ihNHkddr5Kj8WDA3",
      "created": "2026-03-29T08:22:13.204Z",
      "modified_at": "2026-03-29T08:22:15.101Z",
      "currency": "USD",
      "customer_id": null,
      "customer": null,
      "description": "Its my first payment request",
      "refunds": null,
      "disputes": null,
      "mandate_id": null,
      "mandate_data": null,
      "setup_future_usage": "on_session",
      "off_session": null,
      "capture_on": null,
      "capture_method": "automatic",
      "payment_method": "card",
      "payment_method_data": {
        "card": {
          "last4": "4242",
          "card_type": null,
          "card_network": null,
          "card_issuer": null,
          "card_issuing_country": null,
          "card_isin": "424242",
          "card_extended_bin": null,
          "card_exp_month": "07",
          "card_exp_year": "27",
          "card_holder_name": "joseph Doe",
          "payment_checks": {
            "cvc_check": "pass",
            "address_line1_check": "pass",
            "address_postal_code_check": "pass"
          },
          "authentication_data": null,
          "auth_code": null
        },
        "billing": {
          "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "joseph",
            "last_name": "Doe",
            "origin_zip": null
          },
          "phone": {
            "number": "8056594427",
            "country_code": "+91"
          },
          "email": "guest3@example.com"
        }
      },
      "payment_token": null,
      "shipping": {
        "address": {
          "city": "San Fransico",
          "country": "US",
          "line1": "1467",
          "line2": "Harrison Street",
          "line3": "Harrison Street",
          "zip": "94122",
          "state": "California",
          "first_name": "joseph",
          "last_name": "Doe",
          "origin_zip": null
        },
        "phone": {
          "number": "8056594427",
          "country_code": "+91"
        },
        "email": "guest@example.com"
      },
      "billing": {
        "address": {
          "city": "San Fransico",
          "country": "US",
          "line1": "1467",
          "line2": "Harrison Street",
          "line3": "Harrison Street",
          "zip": "94122",
          "state": "California",
          "first_name": "joseph",
          "last_name": "Doe",
          "origin_zip": null
        },
        "phone": {
          "number": "8056594427",
          "country_code": "+91"
        },
        "email": "guest@example.com"
      },
      "order_details": [
        {
          "sku": null,
          "upc": null,
          "brand": null,
          "amount": 6540,
          "category": null,
          "quantity": 1,
          "tax_rate": null,
          "product_id": null,
          "description": null,
          "product_name": "Apple iphone 15",
          "product_type": null,
          "sub_category": null,
          "total_amount": null,
          "commodity_code": null,
          "unit_of_measure": null,
          "product_img_link": null,
          "product_tax_code": null,
          "total_tax_amount": null,
          "requires_shipping": null,
          "unit_discount_amount": null
        }
      ],
      "email": null,
      "name": null,
      "phone": null,
      "return_url": "https://google.com/",
      "authentication_type": "no_three_ds",
      "statement_descriptor_name": "joseph",
      "statement_descriptor_suffix": "JS",
      "next_action": null,
      "cancellation_reason": null,
      "error_code": null,
      "error_message": null,
      "unified_code": null,
      "unified_message": null,
      "error_details": null,
      "payment_experience": null,
      "payment_method_type": "credit",
      "connector_label": null,
      "business_country": null,
      "business_label": "default",
      "business_sub_label": null,
      "allowed_payment_method_types": null,
      "manual_retry_allowed": null,
      "connector_transaction_id": "pi_3TGEbpIVaesDjvMP21TmiaLr",
      "frm_message": null,
      "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
      },
      "connector_metadata": {
        "apple_pay": null,
        "airwallex": null,
        "noon": {
          "order_category": "pay"
        },
        "braintree": null,
        "adyen": null,
        "peachpayments": null,
        "santander": null
      },
      "connector_response_metadata": null,
      "feature_metadata": {
        "redirect_response": null,
        "search_tags": null,
        "apple_pay_recurring_details": null,
        "pix_additional_details": null,
        "boleto_additional_details": null
      },
      "reference_id": "pi_3TGEbpIVaesDjvMP21TmiaLr",
      "payment_link": null,
      "profile_id": "pro_tGbbq73tVsUoGF1Bcwe3",
      "surcharge_details": null,
      "attempt_count": 1,
      "merchant_decision": null,
      "merchant_connector_id": "mca_8i4hPSXaEPdyIlLm7POn",
      "incremental_authorization_allowed": false,
      "authorization_count": null,
      "incremental_authorizations": null,
      "external_authentication_details": null,
      "external_3ds_authentication_attempted": false,
      "expires_on": "2026-03-29T08:37:13.204Z",
      "fingerprint": null,
      "browser_info": {
        "language": "nl-NL",
        "time_zone": 0,
        "ip_address": "128.0.0.1",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "color_depth": 24,
        "java_enabled": true,
        "screen_width": 1536,
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "screen_height": 723,
        "java_script_enabled": true
      },
      "payment_channel": null,
      "payment_method_id": null,
      "network_transaction_id": "115103708757668",
      "payment_method_status": null,
      "updated": "2026-03-29T08:22:15.101Z",
      "split_payments": null,
      "frm_metadata": null,
      "extended_authorization_applied": false,
      "extended_authorization_last_applied_at": null,
      "request_extended_authorization": null,
      "capture_before": null,
      "merchant_order_reference_id": "test_ord",
      "order_tax_amount": null,
      "connector_mandate_id": null,
      "card_discovery": "manual",
      "force_3ds_challenge": false,
      "force_3ds_challenge_trigger": false,
      "issuer_error_code": null,
      "issuer_error_message": null,
      "is_iframe_redirection_enabled": null,
      "whole_connector_response": null,
      "enable_partial_authorization": null,
      "enable_overcapture": null,
      "is_overcapture_enabled": false,
      "network_details": null,
      "is_stored_credential": null,
      "mit_category": null,
      "billing_descriptor": null,
      "tokenization": null,
      "partner_merchant_identifier_details": null,
      "payment_method_tokenization_details": null,
      "installment_options": null,
      "installment_data": null
    }
  },
  "timestamp": "2026-03-29T08:22:15.128Z",
  "processor_merchant_id": "merchant_1774771168"
}

Can verify in events table:

  • merchant_id is platform merchant id
  • processor_merchant_id is connected merchant id
  • profile_id is platform merchant's default profile's id
image

Can verify clickhouse table that merchant_id and processor_merchant_id are populated correctly:
image

Incoming Webhook Flow Testing:

Configured webhook endpoint on stripe dashboard.

Connected merchant triggering payment with confirm = false, capture_method = automatic

curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_uPvoTxMVUNSAc2ZqkBPwwxaDANsPXnqCHDzKyTOwhQ3pk4EXmuB9aVT5v6i2OCYu' \
--data-raw '{
    "amount": 6540,
    "currency": "USD",
    "amount_to_capture": 6540,
    "confirm": false,
    "capture_method": "manual",
    "capture_on": "2022-09-10T10:11:12Z",
    "authentication_type": "no_three_ds",
    "setup_future_usage":"on_session", 
    "customer_id": "connected1",
    "routing": { 
        "type": "single",
        "data": "stripe"
    },
    "description": "Its my first payment request",
    "return_url": "https://google.com",
    "payment_method": "card",
    "payment_method_type": "credit",
    "payment_method_data": { 
        "card": {
            "card_number": "4242424242424242",
            "card_exp_month": "07",
            "card_exp_year": "27",
            "card_holder_name": "joseph Doe",
            "card_cvc": "124"
        },
        "billing": {
            "address": {
                "line1": "1467",
                "line2": "Harrison Street",
                "line3": "Harrison Street",
                "city": "San Fransico",
                "state": "California",
                "zip": "94122",
                "country": "US",
                "first_name": "joseph",
                "last_name": "Doe"
            },
            "phone": {
                "number": "8056594427",
                "country_code": "+91"
            },
            "email": "guest3@example.com"
        }
    },
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "order_details": [
        {
            "product_name": "Apple iphone 15",
            "quantity": 1,
            "amount": 6540,
            "account_name": "transaction_processing"
        }
    ],
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    },
    "browser_info": {
        "user_agent": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/70.0.3538.110 Safari\/537.36",
        "accept_header": "text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,image\/apng,*\/*;q=0.8",
        "language": "nl-NL",
        "color_depth": 24,
        "screen_height": 723,
        "screen_width": 1536,
        "time_zone": 0,
        "java_enabled": true,
        "java_script_enabled": true,
        "ip_address": "128.0.0.1"
    },
    "customer_acceptance": {
        "acceptance_type": "offline",
        "accepted_at": "1963-05-03T04:07:52.723Z",
        "online": {
            "ip_address": "125.0.0.1",
            "user_agent": "amet irure esse"
        }
    },
    "connector_metadata": {
        "noon": {
            "order_category": "pay"
        }
    },
    "payment_link": false,
    "payment_link_config": {
        "theme": "",
        "logo": "",
        "seller_name": "",
        "sdk_layout": "",
        "display_sdk_only": false,
        "enabled_saved_payment_method": false
    },
    "payment_type": "normal", 
    "request_incremental_authorization": false,
    "merchant_order_reference_id": "test_ord",
    "session_expiry": 900
}'
  • Response:
{
    "payment_id": "pay_0GUuSYtX528E8zWfx5th",
    "merchant_id": "merchant_1774770747",
    "status": "requires_confirmation",
    "amount": 6540,
    "net_amount": 6540,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": null,
    "processor_merchant_id": "merchant_1774771168",
    "initiator": "connected",
    "sdk_authorization": "cHJvZmlsZV9pZD1wcm9fdEdiYnE3M3RWc1VvR0YxQmN3ZTMscHVibGlzaGFibGVfa2V5PXBrX2Rldl83MmUzYjZkNTExMGE0OGM2YTkwMDZjYzllODA1YTliYSxjbGllbnRfc2VjcmV0PXBheV8wR1V1U1l0WDUyOEU4eldmeDV0aF9zZWNyZXRfMVIwYU45OFJrTnZWeW1WVm5OdFgsY3VzdG9tZXJfaWQ9Y29ubmVjdGVkMQ==",
    "connector": null,
    "state_metadata": null,
    "client_secret": "pay_0GUuSYtX528E8zWfx5th_secret_1R0aN98RkNvVymVVnNtX",
    "created": "2026-03-29T09:45:55.546Z",
    "modified_at": "2026-03-29T09:45:55.579Z",
    "currency": "USD",
    "customer_id": null,
    "customer": null,
    "description": "Its my first payment request",
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": "on_session",
    "off_session": null,
    "capture_on": null,
    "capture_method": "manual",
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "last4": "4242",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "424242",
            "card_extended_bin": null,
            "card_exp_month": "07",
            "card_exp_year": "27",
            "card_holder_name": "joseph Doe",
            "payment_checks": null,
            "authentication_data": null,
            "auth_code": null
        },
        "billing": {
            "address": {
                "city": "San Fransico",
                "country": "US",
                "line1": "1467",
                "line2": "Harrison Street",
                "line3": "Harrison Street",
                "zip": "94122",
                "state": "California",
                "first_name": "joseph",
                "last_name": "Doe",
                "origin_zip": null
            },
            "phone": {
                "number": "8056594427",
                "country_code": "+91"
            },
            "email": "guest3@example.com"
        }
    },
    "payment_token": "token_lgGK5Zs8u8ccc0tZOiPM",
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "joseph",
            "last_name": "Doe",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "joseph",
            "last_name": "Doe",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "order_details": [
        {
            "sku": null,
            "upc": null,
            "brand": null,
            "amount": 6540,
            "category": null,
            "quantity": 1,
            "tax_rate": null,
            "product_id": null,
            "description": null,
            "product_name": "Apple iphone 15",
            "product_type": null,
            "sub_category": null,
            "total_amount": null,
            "commodity_code": null,
            "unit_of_measure": null,
            "product_img_link": null,
            "product_tax_code": null,
            "total_tax_amount": null,
            "requires_shipping": null,
            "unit_discount_amount": null
        }
    ],
    "email": null,
    "name": null,
    "phone": null,
    "return_url": "https://google.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "error_details": null,
    "payment_experience": null,
    "payment_method_type": "credit",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": null,
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": {
        "apple_pay": null,
        "airwallex": null,
        "noon": {
            "order_category": "pay"
        },
        "braintree": null,
        "adyen": null,
        "peachpayments": null,
        "santander": null
    },
    "connector_response_metadata": null,
    "feature_metadata": null,
    "reference_id": null,
    "payment_link": null,
    "profile_id": "pro_tGbbq73tVsUoGF1Bcwe3",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": null,
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2026-03-29T10:00:55.546Z",
    "fingerprint": null,
    "browser_info": {
        "language": "nl-NL",
        "time_zone": 0,
        "ip_address": "128.0.0.1",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "color_depth": 24,
        "java_enabled": true,
        "screen_width": 1536,
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "screen_height": 723,
        "java_script_enabled": true
    },
    "payment_channel": null,
    "payment_method_id": null,
    "network_transaction_id": null,
    "payment_method_status": null,
    "updated": "2026-03-29T09:45:55.579Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": null,
    "extended_authorization_last_applied_at": null,
    "request_extended_authorization": null,
    "capture_before": null,
    "merchant_order_reference_id": "test_ord",
    "order_tax_amount": null,
    "connector_mandate_id": null,
    "card_discovery": null,
    "force_3ds_challenge": false,
    "force_3ds_challenge_trigger": false,
    "issuer_error_code": null,
    "issuer_error_message": null,
    "is_iframe_redirection_enabled": null,
    "whole_connector_response": null,
    "enable_partial_authorization": null,
    "enable_overcapture": null,
    "is_overcapture_enabled": null,
    "network_details": null,
    "is_stored_credential": null,
    "mit_category": null,
    "billing_descriptor": null,
    "tokenization": null,
    "partner_merchant_identifier_details": null,
    "payment_method_tokenization_details": null,
    "installment_options": null,
    "installment_data": null
}

Confirm Payment:

curl --location 'http://localhost:8080/payments/pay_0GUuSYtX528E8zWfx5th/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_uPvoTxMVUNSAc2ZqkBPwwxaDANsPXnqCHDzKyTOwhQ3pk4EXmuB9aVT5v6i2OCYu' \
--data-raw '{
    "amount": 6500,
    "currency": "USD",
    "amount_to_capture": 6000,
    "capture_method": "manual",
    "capture_on": "2022-09-10T10:11:12Z",
    "authentication_type": "no_three_ds",
    "setup_future_usage": "on_session", 
    "customer": {
        "id": "connected1",
        "name": "John Doe",
        "email": "customer@gmail.com",
        "phone": "9999999999",
        "phone_country_code": "+1"
    },
    "customer_id": "connected1",
    "phone_country_code": "+1",
    "routing": { 
        "type": "single",
        "data": "stripe"
    },
    "description": "Its my first payment request",
    "return_url": "https://google.com",
    "payment_method": "card",
    "payment_method_data": { 
        "card_token": { 
        },
        "billing": {
            "address": {
                "line1": "1467",
                "line2": "Harrison Street",
                "line3": "Harrison Street",
                "city": "San Fransico",
                "state": "California",
                "zip": "94122",
                "country": "US",
                "first_name": "joseph",
                "last_name": "Doe"
            },
            "phone": {
                "number": "8056594427",
                "country_code": "+91"
            },
            "email": "guest@example.com"
        }
    },
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "order_details": [
        {
            "product_name": "Apple iphone 15",
            "quantity": 1,
            "amount": 6540,
            "account_name": "transaction_processing"
        }
    ],
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    },
    "browser_info": {
        "user_agent": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/70.0.3538.110 Safari\/537.36",
        "accept_header": "text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,image\/apng,*\/*;q=0.8",
        "language": "nl-NL",
        "color_depth": 24,
        "screen_height": 723,
        "screen_width": 1536,
        "time_zone": 0,
        "java_enabled": true,
        "java_script_enabled": true,
        "ip_address": "128.0.0.1"
    },
    "customer_acceptance": {
        "acceptance_type": "offline",
        "accepted_at": "1963-05-03T04:07:52.723Z",
        "online": {
            "ip_address": "125.0.0.1",
            "user_agent": "amet irure esse"
        }
    },
    "connector_metadata": {
        "noon": {
            "order_category": "pay"
        }
    },
    "payment_link": false,
    "payment_link_config": {
        "theme": "",
        "logo": "",
        "seller_name": "",
        "sdk_layout": "",
        "display_sdk_only": false,
        "enabled_saved_payment_method": false
    },
    "payment_type": "normal", 
    "request_incremental_authorization": false,
    "merchant_order_reference_id": "test_ord",
    "session_expiry": 900
}'
  • Response:
{
    "payment_id": "pay_0GUuSYtX528E8zWfx5th",
    "merchant_id": "merchant_1774770747",
    "status": "requires_capture",
    "amount": 6540,
    "net_amount": 6540,
    "shipping_cost": null,
    "amount_capturable": 6540,
    "amount_received": null,
    "processor_merchant_id": "merchant_1774771168",
    "initiator": "connected",
    "sdk_authorization": "cHJvZmlsZV9pZD1wcm9fdEdiYnE3M3RWc1VvR0YxQmN3ZTMscHVibGlzaGFibGVfa2V5PXBrX2Rldl83MmUzYjZkNTExMGE0OGM2YTkwMDZjYzllODA1YTliYSxjbGllbnRfc2VjcmV0PXBheV8wR1V1U1l0WDUyOEU4eldmeDV0aF9zZWNyZXRfMVIwYU45OFJrTnZWeW1WVm5OdFgsY3VzdG9tZXJfaWQ9Y29ubmVjdGVkMQ==",
    "connector": "stripe",
    "state_metadata": null,
    "client_secret": "pay_0GUuSYtX528E8zWfx5th_secret_1R0aN98RkNvVymVVnNtX",
    "created": "2026-03-29T09:45:55.546Z",
    "modified_at": "2026-03-29T09:46:05.478Z",
    "currency": "USD",
    "customer_id": "connected1",
    "customer": {
        "id": "connected1",
        "name": "John Doe",
        "email": "customer@gmail.com",
        "phone": "9999999999",
        "phone_country_code": "+1",
        "customer_document_details": null
    },
    "description": "Its my first payment request",
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": "on_session",
    "off_session": null,
    "capture_on": null,
    "capture_method": "manual",
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "last4": "4242",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "424242",
            "card_extended_bin": null,
            "card_exp_month": "07",
            "card_exp_year": "27",
            "card_holder_name": "joseph Doe",
            "payment_checks": {
                "cvc_check": "pass",
                "address_line1_check": "pass",
                "address_postal_code_check": "pass"
            },
            "authentication_data": null,
            "auth_code": null
        },
        "billing": {
            "address": {
                "city": "San Fransico",
                "country": "US",
                "line1": "1467",
                "line2": "Harrison Street",
                "line3": "Harrison Street",
                "zip": "94122",
                "state": "California",
                "first_name": "joseph",
                "last_name": "Doe",
                "origin_zip": null
            },
            "phone": {
                "number": "8056594427",
                "country_code": "+91"
            },
            "email": "guest@example.com"
        }
    },
    "payment_token": "token_lgGK5Zs8u8ccc0tZOiPM",
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "joseph",
            "last_name": "Doe",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "joseph",
            "last_name": "Doe",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "guest@example.com"
    },
    "order_details": [
        {
            "sku": null,
            "upc": null,
            "brand": null,
            "amount": 6540,
            "category": null,
            "quantity": 1,
            "tax_rate": null,
            "product_id": null,
            "description": null,
            "product_name": "Apple iphone 15",
            "product_type": null,
            "sub_category": null,
            "total_amount": null,
            "commodity_code": null,
            "unit_of_measure": null,
            "product_img_link": null,
            "product_tax_code": null,
            "total_tax_amount": null,
            "requires_shipping": null,
            "unit_discount_amount": null
        }
    ],
    "email": "customer@gmail.com",
    "name": "John Doe",
    "phone": "9999999999",
    "return_url": "https://google.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "error_details": null,
    "payment_experience": null,
    "payment_method_type": "credit",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": "pi_3TGFuyIVaesDjvMP2u3MVJMo",
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": {
        "apple_pay": null,
        "airwallex": null,
        "noon": {
            "order_category": "pay"
        },
        "braintree": null,
        "adyen": null,
        "peachpayments": null,
        "santander": null
    },
    "connector_response_metadata": null,
    "feature_metadata": {
        "redirect_response": null,
        "search_tags": null,
        "apple_pay_recurring_details": null,
        "pix_additional_details": null,
        "boleto_additional_details": null
    },
    "reference_id": "pi_3TGFuyIVaesDjvMP2u3MVJMo",
    "payment_link": null,
    "profile_id": "pro_tGbbq73tVsUoGF1Bcwe3",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_8i4hPSXaEPdyIlLm7POn",
    "incremental_authorization_allowed": false,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2026-03-29T10:00:55.546Z",
    "fingerprint": null,
    "browser_info": {
        "os_type": null,
        "referer": null,
        "language": "nl-NL",
        "time_zone": 0,
        "ip_address": "128.0.0.1",
        "os_version": null,
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "color_depth": 24,
        "device_model": null,
        "java_enabled": true,
        "screen_width": 1536,
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "screen_height": 723,
        "accept_language": "en",
        "java_script_enabled": true
    },
    "payment_channel": null,
    "payment_method_id": null,
    "network_transaction_id": "115103708757668",
    "payment_method_status": null,
    "updated": "2026-03-29T09:46:05.478Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": false,
    "extended_authorization_last_applied_at": null,
    "request_extended_authorization": null,
    "capture_before": null,
    "merchant_order_reference_id": "test_ord",
    "order_tax_amount": null,
    "connector_mandate_id": null,
    "card_discovery": "manual",
    "force_3ds_challenge": false,
    "force_3ds_challenge_trigger": false,
    "issuer_error_code": null,
    "issuer_error_message": null,
    "is_iframe_redirection_enabled": null,
    "whole_connector_response": null,
    "enable_partial_authorization": null,
    "enable_overcapture": null,
    "is_overcapture_enabled": false,
    "network_details": null,
    "is_stored_credential": null,
    "mit_category": null,
    "billing_descriptor": null,
    "tokenization": null,
    "partner_merchant_identifier_details": null,
    "payment_method_tokenization_details": null,
    "installment_options": null,
    "installment_data": null
}

Now payment is in non-terminal state.

Go to stripe dashboard, and manually captured the payment. Stripe sent an incoming webhook which triggered the outgoing webhook
image

Can view it in the webhook dashboard as well:
image

Similarly, create a payment using platform merchant on behalf of connected merchant, then confirm the payment, go to the stripe dashboard, and capture the payment.
Should be able to get both the webhooks (payment flow + incoming webhook triggered outgoing webhook) at the platform merchant configured webhook endpoint.
Verified the same.

Checklist

  • I formatted the code cargo +nightly fmt --all
  • I addressed lints thrown by cargo clippy
  • I reviewed the submitted code
  • I added unit tests for my changes where possible

…olution

Route outgoing webhooks to the correct recipient based on the initiator in a
platform setup. When a platform merchant initiates an operation, the webhook
goes to the platform's default profile with the provider's keystore. When a
connected merchant initiates, the webhook goes to the connected merchant's
profile with the processor's keystore. Standard merchants are unaffected.

Key changes:
- Add `processor_merchant_id` column to events table and domain models
- Add `is_platform_initiated` and `processor_merchant_id` to webhook retry
  tracking data for correct keystore resolution during retries
- Add `processor_merchant_id` to OutgoingWebhook API model and Kafka events
- Add webhook recipient resolution helpers in webhooks/utils.rs:
  `resolve_webhook_recipient_from_initiator` (direct flows) and
  `resolve_webhook_recipient_from_created_by` (incoming webhook flows)
- Refactor outgoing.rs and outgoing_v2.rs to accept Platform + resolved
  WebhookRecipientContext instead of raw Processor
- Update all V1/V2 call sites (payments, refunds, payouts, disputes,
  mandates, subscriptions, incoming webhooks) to resolve recipient first
- Update retry workflow to construct Platform correctly and use resolved
  credentials instead of redundant DB queries
- Update webhook events APIs (list, retry) with provider/credential
  resolution for Standard, Connected, and Platform merchant types
- Enable platform merchant access on all webhook event endpoints

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@tsdk02 tsdk02 requested review from a team as code owners March 29, 2026 07:46
@tsdk02 tsdk02 added A-core Area: Core flows T-Core For Work done by the core team platform S-test-ready Status: This PR is ready for cypress-tests labels Mar 29, 2026
@semanticdiff-com
Copy link
Copy Markdown

semanticdiff-com Bot commented Mar 29, 2026

Review changes with  SemanticDiff

Changed Files
File Status
  crates/router/src/core/payouts.rs  88% smaller
  crates/router/src/workflows/payment_sync.rs  55% smaller
  crates/router/src/core/payments.rs  50% smaller
  crates/router/src/core/webhooks/outgoing_v2.rs  43% smaller
  crates/router/src/core/webhooks/webhook_events.rs  26% smaller
  crates/router/src/core/webhooks/outgoing.rs  25% smaller
  crates/router/src/workflows/outgoing_webhook_retry.rs  20% smaller
  crates/router/src/core/webhooks/incoming_v2.rs  19% smaller
  crates/router/src/core/webhooks/incoming.rs  17% smaller
  crates/router/src/workflows/payout_sync.rs  16% smaller
  crates/router/src/core/disputes.rs  15% smaller
  crates/router/src/utils.rs  14% smaller
  crates/router/src/core/revenue_recovery/types.rs  12% smaller
  crates/router/src/services/authentication.rs  10% smaller
  api-reference/v1/openapi_spec_v1.json  3% smaller
  api-reference/v2/openapi_spec_v2.json  3% smaller
  crates/diesel_models/src/query/events.rs  3% smaller
  crates/router/src/db/events.rs  1% smaller
  crates/analytics/docs/clickhouse/scripts/outgoing_webhook_events.sql Unsupported file format
  crates/analytics/src/outgoing_webhook_event/events.rs  0% smaller
  crates/api_models/src/webhook_events.rs  0% smaller
  crates/api_models/src/webhooks.rs  0% smaller
  crates/common_utils/src/types.rs  0% smaller
  crates/diesel_models/src/events.rs  0% smaller
  crates/diesel_models/src/schema.rs  0% smaller
  crates/diesel_models/src/schema_v2.rs  0% smaller
  crates/hyperswitch_domain_models/src/platform.rs  0% smaller
  crates/router/src/core/webhooks/types.rs  0% smaller
  crates/router/src/core/webhooks/utils.rs  0% smaller
  crates/router/src/db/kafka_store.rs  0% smaller
  crates/router/src/events/outgoing_webhook_logs.rs  0% smaller
  crates/router/src/routes/webhook_events.rs  0% smaller
  crates/router/src/types/domain/event.rs  0% smaller
  crates/router/src/types/transformers.rs  0% smaller
  crates/router/src/workflows/process_dispute.rs  0% smaller
  migrations/2026-03-28-142607_add_processor_merchant_id_to_events/down.sql Unsupported file format
  migrations/2026-03-28-142607_add_processor_merchant_id_to_events/up.sql Unsupported file format
  migrations/2026-04-09-103802_add_initiator_merchant_id_to_events/down.sql Unsupported file format
  migrations/2026-04-09-103802_add_initiator_merchant_id_to_events/up.sql Unsupported file format

@hyperswitch-bot hyperswitch-bot Bot added the M-database-changes Metadata: This PR involves database schema changes label Mar 29, 2026
@tsdk02 tsdk02 self-assigned this Mar 29, 2026
@tsdk02 tsdk02 changed the title feat(platform): add platform-aware webhook routing and credential resolution feat(platform): support platform-aware outgoing webhook delivery Mar 29, 2026
@hyperswitch-bot hyperswitch-bot Bot added the M-api-contract-changes Metadata: This PR involves API contract changes label Mar 29, 2026
tsdk02 and others added 4 commits March 29, 2026 14:12
…in webhook delivery

The event update and lookup operations in trigger_webhook_to_merchant were
using business_profile.merchant_id, which is the webhook recipient's ID.
In platform flows where the recipient is the processor, this doesn't match
the event's merchant_id (always the provider), causing DB lookups to fail.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…in V2 webhook delivery

Same fix as the V1 outgoing.rs — trigger_webhook_to_merchant in outgoing_v2.rs
was using business_profile.merchant_id for event DB operations, but events are
stored under the provider's merchant_id. Added provider_merchant_id parameter
and use it for handle_success_response and handle_error_response calls.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… in incoming webhooks

Payment methods are stored under the provider (platform merchant), not the
processor. Three call sites in incoming.rs were incorrectly using
get_processor() for find_payment_method, update_payment_method, and
fetch_payment_method_for_network_token_webhooks. Changed to get_provider().

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ecipient resolution

The Platform initiator reflects who called the current API, not who created
the resource. In incoming webhook flows, the initiator is the connected
merchant (whose URL the connector hits), but the payment may have been
created by the platform. This caused webhooks to be routed to the connected
merchant instead of the platform.

Switch all call sites from resolve_webhook_recipient_from_initiator to
resolve_webhook_recipient_from_created_by, which uses the persisted
created_by field on the resource (payment_attempt, refund, dispute, payout).
This is always the correct source of truth regardless of the current API
caller. Remove resolve_webhook_recipient_from_initiator entirely.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@tsdk02 tsdk02 requested a review from a team as a code owner March 29, 2026 11:14
hyperswitch-bot Bot and others added 4 commits March 29, 2026 11:15
Clone created_by from payment_data before it is consumed by
payments_to_payments_response, avoiding a borrow-after-move error.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…o_merchant

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Comment thread crates/router/src/core/webhooks/incoming.rs
Comment thread crates/router/src/core/webhooks/outgoing.rs Outdated
state.clone(),
merchant_key_store.clone(),
&business_profile.merchant_id,
provider_merchant_id,
Copy link
Copy Markdown
Contributor

@apoorvdixit88 apoorvdixit88 Mar 31, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We changed this merchant_id from processor to provider?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Modified to use webhook_recipient_merchant_id

pub(crate) merchant_id: common_utils::id_type::MerchantId,
/// The business profile of the webhook recipient (initiator's profile).
pub(crate) business_profile_id: common_utils::id_type::ProfileId,
/// The processor merchant id whose credentials were used for payment processing.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we please change this comment? We mean connector credentials. Or you can write comment in better. The merchant_id of the merchant whose connector credentials..........

invoice_sync::InvoiceSyncHandler::form_response_for_retry_outgoing_webhook_task(
state.clone().into(),
&key_store,
platform.get_processor().get_key_store(),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why this is at processor level?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for fetching invoice and subscription. Currently the data is being stored on the processor level, so used processor credentials here.

.unwrap(),
}),
is_overall_delivery_successful: Some(false),
processor_merchant_id: Some(merchant_id.to_owned()),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For test shall we keep it as none, or generate a new processor_merchant_id above and populate it? Or this can be true for standard case.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can keep it as merchant_id itself and treat it as standard case

Comment thread crates/router/src/types/domain/event.rs Outdated
/// Indicates whether the event was ultimately delivered.
pub is_overall_delivery_successful: Option<bool>,

/// The processor merchant id whose credentials are used for payment processing.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please change this comment.

let created_by = refund
.created_by
.as_deref()
.and_then(|s| s.parse::<common_utils::types::CreatedBy>().ok());
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't we wanna propagate the error in case of parse failures?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The impl_enum_str! macro already handles parse failures internally — it logs the error and returns the Invalid variant instead of an Err.
So parse() never actually fails here. The .ok() is just to convert the Result to Option for chaining, and Invalid is handled downstream in resolve_webhook_recipient_from_created_by where it defaults to the processor (connected merchant), which is the correct fallback behavior.

response,
));
let webhook_recipient =
crate::core::webhooks::utils::resolve_webhook_recipient_from_created_by(
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please avoid absolute imports

Copy link
Copy Markdown
Contributor

@apoorvdixit88 apoorvdixit88 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please check whether we need to change queries, to work for both processor and provider.

store
.list_initial_events_by_merchant_id_primary_object_id(
merchant_account.get_id(),
provider_merchant_account.get_id(),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We will be changing it to processor_merchant_id later?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs discussion for this

store
.list_initial_events_by_merchant_id_constraints(
merchant_account.get_id(),
provider_merchant_account.get_id(),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is will list all the events for all the connected merchant?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This query will not be executed for platform-connected merchants, profile_id has been made compulsary now, for correct decryption of events

VenuMadhav2541
VenuMadhav2541 previously approved these changes May 11, 2026
@github-actions github-actions Bot removed the S-test-ready Status: This PR is ready for cypress-tests label May 11, 2026
Sakilmostak
Sakilmostak previously approved these changes May 11, 2026
@tsdk02 tsdk02 added the S-test-ready Status: This PR is ready for cypress-tests label May 11, 2026
@github-actions github-actions Bot removed the S-test-ready Status: This PR is ready for cypress-tests label May 12, 2026
@tsdk02 tsdk02 added the S-test-ready Status: This PR is ready for cypress-tests label May 14, 2026
@github-actions github-actions Bot removed the S-test-ready Status: This PR is ready for cypress-tests label May 14, 2026
@tsdk02 tsdk02 added the S-test-ready Status: This PR is ready for cypress-tests label May 14, 2026
@Gnanasundari24 Gnanasundari24 enabled auto-merge May 18, 2026 07:32
@github-actions github-actions Bot removed the S-test-ready Status: This PR is ready for cypress-tests label May 18, 2026
@tsdk02 tsdk02 added the S-test-ready Status: This PR is ready for cypress-tests label May 18, 2026
@github-actions github-actions Bot removed the S-test-ready Status: This PR is ready for cypress-tests label May 18, 2026
@Gnanasundari24 Gnanasundari24 disabled auto-merge May 18, 2026 14:26
@Gnanasundari24 Gnanasundari24 merged commit 91ff74e into main May 18, 2026
56 of 94 checks passed
@Gnanasundari24 Gnanasundari24 deleted the webhooks-for-platform branch May 18, 2026 14:30
AmitsinghTanwar007 pushed a commit that referenced this pull request May 22, 2026
)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
Co-authored-by: Gnanasundari24 <118818938+Gnanasundari24@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-core Area: Core flows M-api-contract-changes Metadata: This PR involves API contract changes M-database-changes Metadata: This PR involves database schema changes platform T-Core For Work done by the core team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants