Skip to content

feat(core): Add L2_L3 Data Support #8828

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 5, 2025
Merged

feat(core): Add L2_L3 Data Support #8828

merged 2 commits into from
Aug 5, 2025

Conversation

awasthi21
Copy link
Contributor

@awasthi21 awasthi21 commented Aug 3, 2025

Type of Change

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

Description

Database Changes

Payment Intent: Added tax_status, discount_amount, shipping_amount_tax, duty_amount, customer_order_date
Customer: Added tax_registration_id for tax information
Address: Added origin_zip

API Models
Extended OrderDetailsWithAmount with SKU, UPC, commodity codes, unit prices

Configuration: Added l2_l3_data_config.enabled setting

WorldpayVantiv Integration: Added L2_L3 Support

Additional Changes

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

Motivation and Context

How did you test it?

Request

curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key:' \
--data-raw '{
    "amount": 10000,
    "currency": "USD",
    "tax_status": "exempt",
    "duty_amount": 400,
    "shipping_cost": 431,
    "discount_amount": 500,
    "shipping_amount_tax": 50,
    "customer_order_date": "2024-01-15T10:30:00Z",
    "confirm": true,
    "customer": {
        "id":"2343",
        "name": "John Doe",
        "email": "[email protected]",
        "tax_registration_id": "TAX123456789"
    },
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "card_number": "4457030000000007",
            "card_exp_month": "09",
            "card_exp_year": "25",
            "card_holder_name": "John Doe",
            "card_cvc": "123"
        }
    },
    "shipping": {
        "address": {
            "line1": "123 Main St",
            "city": "New York",
            "state": "NY",
            "zip": "10001",
            "country": "US",
            "origin_zip": "90210"
        }
    },
    "billing": {
        "address": {
            "line1": "123 Main St",
            "city": "New York",
            "state": "NY",
            "zip": "10001",
            "country": "US",
            "origin_zip": "90210"
        }
    },
    "order_details": [
        {
            "product_name": "Laptop",
            "quantity": 1,
            "amount": 8000,
            "description": "Business laptop 23214324",
            "sku": "LAP-001",
            "upc": "123456789012",
            "commodity_code": "8471",
            "unit_of_measure": "EA",
            "unit_price": 8000,
            "unit_discount_amount": 200,
            "tax_rate": 0.08,
            "total_tax_amount": 640
        },
        {
            "product_name": "Mouse",
            "quantity": 2,
            "amount": 2000,
            "description": "Wireless office mouse",
            "sku": "MOU-001",
            "upc": "123456789013",
            "commodity_code": "8471",
            "unit_of_measure": "EA",
            "unit_price": 1000,
            "unit_discount_amount": 50,
            "tax_rate": 0.08,
            "total_tax_amount": 160
        }
    ]
}'

Response:

{
    "payment_id": "pay_OUsTMMm2dd7CIf3UPuyy",
    "merchant_id": "merchant_1754249521",
    "status": "processing",
    "amount": 10000,
    "net_amount": 10431,
    "shipping_cost": 431,
    "amount_capturable": 0,
    "amount_received": null,
    "connector": "worldpayvantiv",
    "client_secret": "",
    "created": "2025-08-04T10:18:14.351Z",
    "currency": "USD",
    "customer_id": "2343",
    "customer": {
        "id": "2343",
        "name": "John Doe",
        "email": "[email protected]",
        "phone": null,
        "phone_country_code": null
    },
    "description": null,
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": null,
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "last4": "0007",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "445703",
            "card_extended_bin": null,
            "card_exp_month": "09",
            "card_exp_year": "25",
            "card_holder_name": "John Doe",
            "payment_checks": {
                "avs_result": "00",
                "advanced_a_v_s_result": null,
                "authentication_result": null,
                "card_validation_result": "M"
            },
            "authentication_data": null
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "New York",
            "country": "US",
            "line1": "123 Main St",
            "line2": null,
            "line3": null,
            "zip": "10001",
            "state": "NY",
            "first_name": null,
            "last_name": null,
            "origin_zip": "90210"
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "New York",
            "country": "US",
            "line1": "123 Main St",
            "line2": null,
            "line3": null,
            "zip": "10001",
            "state": "NY",
            "first_name": null,
            "last_name": null,
            "origin_zip": "90210"
        },
        "phone": null,
        "email": null
    },
    "order_details": [
        {
            "sku": "LAP-001",
            "upc": "123456789012",
            "brand": null,
            "amount": 8000,
            "category": null,
            "quantity": 1,
            "tax_rate": 0.08,
            "product_id": null,
            "unit_price": 8000,
            "description": "Business laptop 23214324",
            "product_name": "Laptop",
            "product_type": null,
            "sub_category": null,
            "commodity_code": "8471",
            "unit_of_measure": "EA",
            "product_img_link": null,
            "product_tax_code": null,
            "total_tax_amount": 640,
            "requires_shipping": null,
            "unit_discount_amount": 200
        },
        {
            "sku": "MOU-001",
            "upc": "123456789013",
            "brand": null,
            "amount": 2000,
            "category": null,
            "quantity": 2,
            "tax_rate": 0.08,
            "product_id": null,
            "unit_price": 1000,
            "description": "Wireless office mouse",
            "product_name": "Mouse",
            "product_type": null,
            "sub_category": null,
            "commodity_code": "8471",
            "unit_of_measure": "EA",
            "product_img_link": null,
            "product_tax_code": null,
            "total_tax_amount": 160,
            "requires_shipping": null,
            "unit_discount_amount": 50
        }
    ],
    "email": "[email protected]",
    "name": "John Doe",
    "phone": null,
    "return_url": null,
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": null,
    "statement_descriptor_suffix": null,
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": null,
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": {
        "customer_id": "2343",
        "created_at": 1754302694,
        "expires": 1754306294,
        "secret": "epk_c1c74aaad371471a8aa95750d22a1437"
    },
    "manual_retry_allowed": false,
    "connector_transaction_id": "83997340604909649",
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "pay_OUsTMMm2dd7CIf3UPuyy_1",
    "payment_link": null,
    "profile_id": "pro_HDJ0f3KXb6AiA39FvRoP",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_pAOUAoDGtatNRAKxM0YQ",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-08-04T10:33:14.351Z",
    "fingerprint": null,
    "browser_info": null,
    "payment_channel": null,
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2025-08-04T10:18:16.108Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": null,
    "capture_before": null,
    "merchant_order_reference_id": null,
    "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
}
Screenshot 2025-08-04 at 3 50 03 PM Screenshot 2025-08-04 at 3 50 28 PM

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

@awasthi21 awasthi21 self-assigned this Aug 3, 2025
@awasthi21 awasthi21 requested review from a team as code owners August 3, 2025 12:30
Copy link

semanticdiff-com bot commented Aug 3, 2025

Review changes with  SemanticDiff

Changed Files
File Status
  crates/router/src/core/payouts.rs  97% smaller
  crates/router/src/core/files.rs  77% smaller
  cypress-tests/cypress/fixtures/confirm-body.json  67% smaller
  cypress-tests/cypress/fixtures/create-customer-body.json  67% smaller
  crates/openapi/src/openapi.rs  27% smaller
  crates/openapi/src/openapi_v2.rs  26% smaller
  crates/router/src/core/customers.rs  3% smaller
  crates/router/src/types.rs  1% smaller
  crates/router/src/core/payments/helpers.rs  1% smaller
  crates/hyperswitch_connectors/src/connectors/worldpayvantiv/transformers.rs  1% smaller
  api-reference/v1/openapi_spec_v1.json  0% smaller
  api-reference/v2/openapi_spec_v2.json  0% smaller
  config/deployments/production.toml Unsupported file format
  config/deployments/sandbox.toml Unsupported file format
  config/development.toml Unsupported file format
  crates/api_models/src/customers.rs  0% smaller
  crates/api_models/src/payment_methods.rs  0% smaller
  crates/api_models/src/payments.rs  0% smaller
  crates/common_enums/src/enums.rs  0% smaller
  crates/diesel_models/src/address.rs  0% smaller
  crates/diesel_models/src/customers.rs  0% smaller
  crates/diesel_models/src/payment_intent.rs  0% smaller
  crates/diesel_models/src/schema.rs  0% smaller
  crates/diesel_models/src/schema_v2.rs  0% smaller
  crates/diesel_models/src/types.rs  0% smaller
  crates/hyperswitch_connectors/src/connectors/chargebee/transformers.rs  0% smaller
  crates/hyperswitch_connectors/src/connectors/recurly/transformers.rs  0% smaller
  crates/hyperswitch_connectors/src/connectors/stripebilling/transformers.rs  0% smaller
  crates/hyperswitch_connectors/src/utils.rs  0% smaller
  crates/hyperswitch_domain_models/src/address.rs  0% smaller
  crates/hyperswitch_domain_models/src/bulk_tokenization.rs  0% smaller
  crates/hyperswitch_domain_models/src/customer.rs  0% smaller
  crates/hyperswitch_domain_models/src/lib.rs  0% smaller
  crates/hyperswitch_domain_models/src/payment_methods.rs  0% smaller
  crates/hyperswitch_domain_models/src/payments.rs  0% smaller
  crates/hyperswitch_domain_models/src/payments/payment_intent.rs  0% smaller
  crates/hyperswitch_domain_models/src/router_data.rs  0% smaller
  crates/hyperswitch_domain_models/src/router_request_types.rs  0% smaller
  crates/hyperswitch_interfaces/src/conversion_impls.rs  0% smaller
  crates/router/src/compatibility/stripe/customers/types.rs  0% smaller
  crates/router/src/compatibility/stripe/payment_intents/types.rs  0% smaller
  crates/router/src/configs/secrets_transformers.rs  0% smaller
  crates/router/src/configs/settings.rs  0% smaller
  crates/router/src/core/authentication/transformers.rs  0% smaller
  crates/router/src/core/fraud_check/flows/checkout_flow.rs  0% smaller
  crates/router/src/core/fraud_check/flows/fulfillment_flow.rs  0% smaller
  crates/router/src/core/fraud_check/flows/record_return.rs  0% smaller
  crates/router/src/core/fraud_check/flows/sale_flow.rs  0% smaller
  crates/router/src/core/fraud_check/flows/transaction_flow.rs  0% smaller
  crates/router/src/core/mandate/utils.rs  0% smaller
  crates/router/src/core/payment_methods.rs  0% smaller
  crates/router/src/core/payment_methods/tokenize/card_executor.rs  0% smaller
  crates/router/src/core/payment_methods/tokenize/payment_method_executor.rs  0% smaller
  crates/router/src/core/payments/operations/payment_complete_authorize.rs  0% smaller
  crates/router/src/core/payments/operations/payment_confirm.rs  0% smaller
  crates/router/src/core/payments/operations/payment_create.rs  0% smaller
  crates/router/src/core/payments/operations/payment_session.rs  0% smaller
  crates/router/src/core/payments/operations/payment_update.rs  0% smaller
  crates/router/src/core/payments/transformers.rs  0% smaller
  crates/router/src/core/payouts/helpers.rs  0% smaller
  crates/router/src/core/refunds_v2.rs Unsupported file format
  crates/router/src/core/relay/utils.rs  0% smaller
  crates/router/src/core/unified_authentication_service/utils.rs Unsupported file format
  crates/router/src/core/utils.rs  0% smaller
  crates/router/src/core/webhooks/utils.rs  0% smaller
  crates/router/src/db/address.rs  0% smaller
  crates/router/src/types/api/customers.rs  0% smaller
  crates/router/src/types/api/verify_connector.rs  0% smaller
  crates/router/src/types/domain/address.rs  0% smaller
  crates/router/src/types/transformers.rs  0% smaller
  crates/router/src/utils.rs  0% smaller
  crates/router/src/utils/user/sample_data.rs  0% smaller
  crates/router/tests/connectors/aci.rs  0% smaller
  crates/router/tests/connectors/adyen.rs  0% smaller
  crates/router/tests/connectors/dlocal.rs  0% smaller
  crates/router/tests/connectors/multisafepay.rs  0% smaller
  crates/router/tests/connectors/payme.rs  0% smaller
  crates/router/tests/connectors/utils.rs  0% smaller
  crates/router/tests/connectors/zen.rs  0% smaller
  migrations/2025-07-31-181024_add_l2_l3_fields_to_payment_intent/down.sql Unsupported file format
  migrations/2025-07-31-181024_add_l2_l3_fields_to_payment_intent/up.sql Unsupported file format
  migrations/2025-07-31-193521_add_tax_registration_id_to_customer/down.sql Unsupported file format
  migrations/2025-07-31-193521_add_tax_registration_id_to_customer/up.sql Unsupported file format
  migrations/2025-08-01-050109_add_origin_zip_to_address/down.sql Unsupported file format
  migrations/2025-08-01-050109_add_origin_zip_to_address/up.sql Unsupported file format

@hyperswitch-bot hyperswitch-bot bot added the M-database-changes Metadata: This PR involves database schema changes label Aug 3, 2025
@awasthi21 awasthi21 force-pushed the l2_l3_data branch 6 times, most recently from c38d999 to 2f72ec6 Compare August 4, 2025 07:56
@hyperswitch-bot hyperswitch-bot bot added the M-api-contract-changes Metadata: This PR involves API contract changes label Aug 4, 2025
@hyperswitch-bot hyperswitch-bot bot added M-api-contract-changes Metadata: This PR involves API contract changes and removed M-api-contract-changes Metadata: This PR involves API contract changes labels Aug 4, 2025
router_data: &PaymentsAuthorizeRouterData,
) -> Result<Option<EnhancedData>, error_stack::Report<errors::ConnectorError>> {
let l2_l3_data = router_data.l2_l3_data.clone();
router_env::logger::info!("WorldpayVantiv l2_l3_data: {:?}", l2_l3_data);
Copy link
Contributor

Choose a reason for hiding this comment

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

logger

Copy link
Contributor Author

Choose a reason for hiding this comment

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

removed

@@ -1243,6 +1243,9 @@ dynamic_routing_enabled = false
static_routing_enabled = false
url = "http://localhost:8080"

[l2_l3_data_config]
Copy link
Contributor

Choose a reason for hiding this comment

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

we enabling for every merchant in a env or should we go with for few merchant accounts in an env ?

Copy link
Contributor Author

@awasthi21 awasthi21 Aug 4, 2025

Choose a reason for hiding this comment

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

We shouldn't store merchant details in the application config

@@ -1229,6 +1235,68 @@ where
.as_ref()
.and_then(|detail| detail.get_connector_mandate_request_reference_id());

let l2_l3_data = if state.conf.l2_l3_data_config.enabled {
Copy link
Contributor

Choose a reason for hiding this comment

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

https://doc.rust-lang.org/std/primitive.bool.html#method.then
we can use this to avoid else {None} block at the end.

@@ -0,0 +1,9 @@
-- Your SQL goes here
CREATE TYPE "TaxStatus" AS ENUM ('taxable', 'exempt');
Copy link
Contributor

Choose a reason for hiding this comment

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

any reason for this to be db enum ? can this be enum in application but text in pg.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes we can make it text.

racnan
racnan previously approved these changes Aug 4, 2025
@@ -31,6 +31,7 @@ diesel::table! {
#[max_length = 32]
updated_by -> Varchar,
email -> Nullable<Bytea>,
origin_zip -> Nullable<Bytea>,
Copy link
Member

Choose a reason for hiding this comment

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

should this be encrypted field?

@@ -31,6 +31,7 @@ diesel::table! {
#[max_length = 32]
updated_by -> Varchar,
email -> Nullable<Bytea>,
origin_zip -> Nullable<Bytea>,
Copy link
Member

Choose a reason for hiding this comment

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

should this be encrypted field?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes
Even zip was
zip -> Nullable<Bytea>,

jarnura
jarnura previously approved these changes Aug 4, 2025
deepanshu-iiitu
deepanshu-iiitu previously approved these changes Aug 4, 2025
prasunna09
prasunna09 previously approved these changes Aug 4, 2025
@prasunna09
Copy link
Contributor

Payment Method changes looks good to me

/// Description for the item
pub description: Option<String>,
/// Stock Keeping Unit (SKU) or the item identifier for this item.
pub sku: Option<String>,
Copy link
Contributor

@apoorvdixit88 apoorvdixit88 Aug 4, 2025

Choose a reason for hiding this comment

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

can we please verify, whether this 'sku' is different from the product_id which we are already having? If its same we can map it to it and we dont need addtional field, and change the description comment for it, if not then this is fine.

pub unit_of_measure: Option<String>,
/// Cost price for the item.
#[schema(value_type = Option<i64>)]
pub unit_price: Option<MinorUnit>,
Copy link
Contributor

Choose a reason for hiding this comment

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

current amount in this type is same as 'unit_price' no need to introduce a new field. Can we please omit this? And map this unit_price to our existing amount

Also there is no field for total_amount in this type OrderDetailsWithAmount, can we please introduce it as well. So that unit amount and total_amount scenarios can be handled.

pub unit_price: Option<MinorUnit>,
/// Discount amount applied to this item.
#[schema(value_type = Option<i64>)]
pub unit_discount_amount: Option<MinorUnit>,
Copy link
Contributor

@apoorvdixit88 apoorvdixit88 Aug 4, 2025

Choose a reason for hiding this comment

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

Can we please rename it to discount_amount and have corresponding descriptive comment for it? Mostly all other processors are saying it discount_amount if it is present in line items
Edit: can be changed in sheet.


/// Date the payer placed the order.
#[serde(default, with = "common_utils::custom_serde::iso8601::option")]
pub customer_order_date: Option<PrimitiveDateTime>,
Copy link
Contributor

@apoorvdixit88 apoorvdixit88 Aug 4, 2025

Choose a reason for hiding this comment

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

can we please call it order_date?
Edit: we can rename it in sheet


/// Your tax status for this order or transaction.
#[schema(value_type = Option<TaxStatus>)]
pub tax_status: Option<api_enums::TaxStatus>,
Copy link
Contributor

@apoorvdixit88 apoorvdixit88 Aug 4, 2025

Choose a reason for hiding this comment

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

can we please call it tax_exempt?
Or we can just change in the SOP sheet, so that it should not get confusing to the people who are trying to integrate l2 & l3 data.

Edit: We can change in the sheet, its fine.

/// Stock Keeping Unit (SKU) or the item identifier for this item.
pub sku: Option<String>,
/// Universal Product Code for the item.
pub upc: Option<String>,
Copy link
Contributor

@apoorvdixit88 apoorvdixit88 Aug 4, 2025

Choose a reason for hiding this comment

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

need to change in doc*

/// unit of measure of the product
pub unit_of_measure: Option<String>,
/// unit price of the product
pub unit_price: Option<MinorUnit>,
Copy link
Contributor

@apoorvdixit88 apoorvdixit88 Aug 4, 2025

Choose a reason for hiding this comment

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

can we please change it here, i guess current amount is unit price for now.

}),
metadata: None,
tax_registration_id: None,
Copy link
Contributor

@apoorvdixit88 apoorvdixit88 Aug 4, 2025

Choose a reason for hiding this comment

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

will it be none here?

Comment on lines +2 to +3
ALTER TABLE address
DROP COLUMN origin_zip;
Copy link
Contributor

Choose a reason for hiding this comment

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

ALTER TABLE address DROP COLUMN IF EXISTS origin_zip;
Can we please keep it consistent with up.sql?

@awasthi21 awasthi21 dismissed stale reviews from prasunna09 and deepanshu-iiitu via 35d4a4f August 4, 2025 18:10
jarnura
jarnura previously approved these changes Aug 5, 2025
deepanshu-iiitu
deepanshu-iiitu previously approved these changes Aug 5, 2025
apoorvdixit88
apoorvdixit88 previously approved these changes Aug 5, 2025
@@ -6649,9 +6649,9 @@ pub struct OrderDetailsWithAmount {
pub commodity_code: Option<String>,
/// Unit of measure used for the item quantity.
pub unit_of_measure: Option<String>,
/// Cost price for the item.
/// Total amount for the item.
Copy link
Contributor

Choose a reason for hiding this comment

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

nitpick: items*

prasunna09
prasunna09 previously approved these changes Aug 5, 2025
@likhinbopanna likhinbopanna added this pull request to the merge queue Aug 5, 2025
Merged via the queue into main with commit 58a9c9f Aug 5, 2025
18 of 22 checks passed
@likhinbopanna likhinbopanna deleted the l2_l3_data branch August 5, 2025 13:22
pixincreate added a commit that referenced this pull request Aug 6, 2025
…ordea-sepa

* 'main' of github.com:juspay/hyperswitch: (89 commits)
  feat(router): [worldpayvantiv] add dispute list sync and implement dispute (#8830)
  feat(core): Add support for Void after Capture (#8839)
  fix(wasm): [FISERV] Added GooglePay Payment Method Type (#8832)
  feat(connector): [Barclaycard] Add Google Pay Payment Method (#8786)
  chore(version): 2025.08.06.0
  feat(core): Added additional authentication fields for 3ds external authentication (#8758)
  refactor(core): propagate network_transaction_id in response of payment (#8829)
  fix(core): add fix for stopping multiple event locking idempotent logs (#8034)
  feat(connector): [AUTHORIZEDOTNET] create connector customer flow added (#8774)
  feat(core): Add L2_L3 Data Support  (#8828)
  feat(connector): [NMI] Add mandates flow (#8652)
  fix(connector): [Wise] send uuid as connector_transaction_id (#8836)
  feat(core): populate UCS status_code in response headers (#8788)
  feat(external_services): Fixed Url for Unified Connector Service gRPC Client (#8587)
  chore: reorder v2 migrations folders (#8671)
  fix(router): Take merchant ID from headers in API Key - Revoke (v2) (#8808)
  fix(connector): (payload) currency auth key wasm changes (#8825)
  feat(payment-methods): add filtering logic for payment method list v2 (#8606)
  feat(router): add support for apple pay pre-decrypted token in the payments confirm call (#8815)
  chore(version): 2025.08.05.0
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
M-api-contract-changes Metadata: This PR involves API contract changes M-database-changes Metadata: This PR involves database schema changes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants