diff --git a/.clippy.toml b/.clippy.toml
new file mode 100644
index 000000000000..4296655a040f
--- /dev/null
+++ b/.clippy.toml
@@ -0,0 +1 @@
+allow-dbg-in-tests = true
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index e66da85d6c78..dc4010d0fd0c 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -45,6 +45,10 @@ crates/test_utils/tests/connectors/ @juspay/hyperswitch-connector
crates/test_utils/tests/sample_auth.toml @juspay/hyperswitch-connector
crates/connector_configs/ @juspay/hyperswitch-connector
crates/hyperswitch_connectors/ @juspay/hyperswitch-connector
+crates/api_models/src/connector_enums.rs @juspay/hyperswitch-connector
+crates/common_enums/src/connector_enums.rs @juspay/hyperswitch-connector
+crates/router/src/configs/defaults/payment_connector_required_fields.rs @juspay/hyperswitch-connector
+crates/hyperswitch_interfaces/src/configs.rs @juspay/hyperswitch-connector
crates/router/src/compatibility/ @juspay/hyperswitch-compatibility
@@ -56,6 +60,7 @@ crates/euclid @juspay/hyperswitch-routing
crates/euclid_macros @juspay/hyperswitch-routing
crates/euclid_wasm @juspay/hyperswitch-routing
crates/kgraph_utils @juspay/hyperswitch-routing
+crates/pm_auth @juspay/hyperswitch-routing
crates/router/src/routes/routing.rs @juspay/hyperswitch-routing
crates/router/src/core/routing @juspay/hyperswitch-routing
crates/router/src/core/routing.rs @juspay/hyperswitch-routing
diff --git a/.github/data/cards_info.csv b/.github/data/cards_info.csv
new file mode 100644
index 000000000000..4e7a19e4b232
--- /dev/null
+++ b/.github/data/cards_info.csv
@@ -0,0 +1,13 @@
+card_iin,card_issuer,card_network,card_type,card_subtype,card_issuing_country,bank_code_id,bank_code,country_code,date_created,last_updated,last_updated_provider
+111122,,Visa,DEBIT,,,,,,2017-06-18 10:00:39,,
+400000,INTL HDQTRS-CENTER OWNED,Visa,CREDIT,,UNITEDSTATES,,,840,2015-08-04 08:50:42,2022-06-30 16:54:07,Visa
+401200,VISA PRODUCTION SUPPORT CLIENT BID 1,Visa,DEBIT,CLASSIC,UNITEDSTATES,,,840,2015-07-27 12:04:10,2022-07-06 10:24:32,Visa
+411111,JP Morgan,Visa,CREDIT,,INDIA,131,JP_JPM,,2015-07-22 23:36:35,2021-02-23 07:38:19,
+420000,JP Morgan,Visa,CREDIT,,UNITEDSTATES,131,JP_JPM,,2016-05-12 18:37:38,2021-02-23 07:56:53,
+424242,STRIPE PAYMENTS UK LIMITED,Visa,CREDIT,,UNITEDKINGDOM,,,826,2015-07-22 16:41:32,2022-12-12 13:02:19,Visa
+434994,INTESA SANPAOLO S.P.A.,Visa,CREDIT,CLASSIC,ITALY,,,380,2015-12-30 17:01:46,2022-12-12 13:03:12,Visa
+444409,SELECT SEVEN FEDERAL CREDIT UNION,Visa,DEBIT,CLASSIC,UNITEDSTATES,,,840,2016-05-12 18:41:09,2022-07-06 10:26:20,Visa
+486871,AMERICA FIRST FEDERAL CREDIT UNION,Visa,CREDIT,BUSINESS,UNITEDSTATES,,,840,2016-05-12 18:47:21,2022-07-06 10:35:26,Visa
+491761,BANKPOLSKAKASAOPIEKIS.A.(BANKPEKAOSA),Visa,CREDIT,BUSINESS,POLAND,,,,2015-09-07 12:58:50,,
+510510,BANKOFHAWAII,Mastercard,CREDIT,,UNITEDSTATES,,,,2015-07-30 05:18:28,,
+520474,MASTERCARD INTERNATIONAL,Visa,DEBIT,,UNITEDSTATES,,,840,2016-05-12 18:51:16,2022-12-12 15:17:33,Visa
diff --git a/.github/workflows/CI-pr.yml b/.github/workflows/CI-pr.yml
index 220c4f2577c2..369da734da5a 100644
--- a/.github/workflows/CI-pr.yml
+++ b/.github/workflows/CI-pr.yml
@@ -325,7 +325,7 @@ jobs:
- name: Run cargo clippy with v2 features enabled
shell: bash
- run: just clippy_v2 -- -D warnings -Aunused -Aclippy::todo -Aclippy::diverging_sub_expression
+ run: just clippy_v2
- name: Run cargo check enabling only the release and v2 features
shell: bash
diff --git a/.github/workflows/cypress-tests-runner.yml b/.github/workflows/cypress-tests-runner.yml
index 3a10dceb37e2..bc83c2388f7e 100644
--- a/.github/workflows/cypress-tests-runner.yml
+++ b/.github/workflows/cypress-tests-runner.yml
@@ -13,7 +13,8 @@ concurrency:
env:
CARGO_INCREMENTAL: 0
CARGO_NET_RETRY: 10
- CONNECTORS: stripe
+ PAYMENTS_CONNECTORS: "cybersource stripe"
+ PAYOUTS_CONNECTORS: "adyenplatform wise"
RUST_BACKTRACE: short
RUSTUP_MAX_RETRIES: 10
RUN_TESTS: ${{ ((github.event_name == 'pull_request') && (github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name)) || (github.event_name == 'merge_group')}}
@@ -21,9 +22,68 @@ env:
RUST_MIN_STACK: 10485760
jobs:
+ formatter:
+ name: Run formatter on Cypress tests and address lints
+ if: ${{ github.event_name == 'pull_request' }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: Generate a token
+ if: ${{ github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }}
+ id: generate_token
+ uses: actions/create-github-app-token@v1
+ with:
+ app-id: ${{ secrets.HYPERSWITCH_BOT_APP_ID }}
+ private-key: ${{ secrets.HYPERSWITCH_BOT_APP_PRIVATE_KEY }}
+
+ - name: Checkout repository with token
+ if: ${{ github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }}
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ ref: ${{ github.event.pull_request.head.ref }}
+ token: ${{ steps.generate_token.outputs.token }}
+
+ - name: Checkout repository for fork
+ if: ${{ github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name }}
+ uses: actions/checkout@v4
+
+ - name: Install Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: '20'
+
+ - name: Install Cypress and dependencies
+ run: |
+ npm ci --prefix ./cypress-tests
+
+ - name: Check formatting for forked pull requests
+ if: ${{ github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name }}
+ shell: bash
+ run: |
+ npm run format:check --prefix cypress-tests
+ npm run lint --prefix cypress-tests
+
+ - name: Check formatting
+ if: ${{ github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }}
+ shell: bash
+ run: |
+ npm run format --prefix cypress-tests
+ npm run lint --prefix cypress-tests -- --fix
+
+ if ! git diff --exit-code --quiet -- cypress-tests; then
+ echo "::notice::Cypress formatting and lint check failed"
+
+ git config --local user.name 'hyperswitch-bot[bot]'
+ git config --local user.email '148525504+hyperswitch-bot[bot]@users.noreply.github.com'
+
+ git add cypress-tests
+ git commit --message 'chore(cypress): run formatter and address lints'
+ git push
+ fi
+
runner:
name: Run Cypress tests
- runs-on: hyperswitch-runners
+ runs-on: ubuntu-latest
services:
redis:
@@ -68,7 +128,7 @@ jobs:
CONNECTOR_AUTH_PASSPHRASE: ${{ secrets.CONNECTOR_AUTH_PASSPHRASE }}
CONNECTOR_CREDS_S3_BUCKET_URI: ${{ secrets.CONNECTOR_CREDS_S3_BUCKET_URI}}
DESTINATION_FILE_NAME: "creds.json.gpg"
- S3_SOURCE_FILE_NAME: "f64157fe-a8f7-43a8-a268-b17e9a8c305f.json.gpg"
+ S3_SOURCE_FILE_NAME: "aa328308-b34e-41b7-a590-4fe45cfe7991.json.gpg"
shell: bash
run: |
mkdir -p ".github/secrets" ".github/test"
@@ -151,9 +211,14 @@ jobs:
DATABASE_URL: postgres://db_user:db_pass@localhost:5432/hyperswitch_db
run: just migrate run --locked-schema
+ - name: Insert card info into the database
+ if: ${{ env.RUN_TESTS == 'true' }}
+ run: |
+ PGPASSWORD=db_pass psql --host=localhost --port=5432 --username=db_user --dbname=hyperswitch_db --command "\copy cards_info FROM '.github/data/cards_info.csv' DELIMITER ',' CSV HEADER;"
+
- name: Build project
if: ${{ env.RUN_TESTS == 'true' }}
- run: cargo build --package router --bin router --jobs 6
+ run: cargo build --package router --bin router --jobs 3
- name: Setup Local Server
if: ${{ env.RUN_TESTS == 'true' }}
@@ -181,29 +246,10 @@ jobs:
if: ${{ env.RUN_TESTS == 'true' }}
env:
CYPRESS_BASEURL: "http://localhost:8080"
+ ROUTER__SERVER__WORKERS: 4
shell: bash -leuo pipefail {0}
run: |
- cd cypress-tests
-
- RED='\033[0;31m'
- RESET='\033[0m'
-
- failed_connectors=()
-
- for connector in $(echo "${CONNECTORS}" | tr "," "\n"); do
- echo "${connector}"
- for service in "payments" "payouts"; do
- if ! ROUTER__SERVER__WORKERS=4 CYPRESS_CONNECTOR="${connector}" npm run cypress:"${service}"; then
- failed_connectors+=("${connector}-${service}")
- fi
- done
- done
-
- if [ ${#failed_connectors[@]} -gt 0 ]; then
- echo -e "${RED}One or more connectors failed to run:${RESET}"
- printf '%s\n' "${failed_connectors[@]}"
- exit 1
- fi
+ scripts/execute_cypress.sh
kill "${{ env.PID }}"
@@ -213,6 +259,5 @@ jobs:
with:
name: cypress-test-results
path: |
- cypress-tests/cypress/reports/*.json
- cypress-tests/cypress/reports/*.html
+ cypress-tests/cypress/reports/
retention-days: 1
diff --git a/.github/workflows/postman-collection-runner.yml b/.github/workflows/postman-collection-runner.yml
index de8235c14ea4..b8ce65f4b6c8 100644
--- a/.github/workflows/postman-collection-runner.yml
+++ b/.github/workflows/postman-collection-runner.yml
@@ -17,7 +17,7 @@ env:
CONNECTORS: stripe
RUST_BACKTRACE: short
RUSTUP_MAX_RETRIES: 10
- RUST_MIN_STACK: 8388608
+ RUST_MIN_STACK: 10485760
jobs:
runner:
diff --git a/.github/workflows/wasm-bulild-check.yml b/.github/workflows/wasm-bulild-check.yml
new file mode 100644
index 000000000000..d9b2860a361e
--- /dev/null
+++ b/.github/workflows/wasm-bulild-check.yml
@@ -0,0 +1,34 @@
+name: CI wasm-check
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ wasm-ci:
+ name: Check wasm build
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: stable 2 weeks ago
+
+ - name: Install wasm-pack
+ uses: taiki-e/install-action@v2
+ with:
+ tool: wasm-pack
+ checksum: true
+
+ - name: wasm build
+ shell: bash
+ run: make euclid-wasm
diff --git a/.gitignore b/.gitignore
index 1aa3faf2c1d1..dcbeddf7adab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -187,7 +187,7 @@ target/
### VisualStudioCode ###
.vscode/*
-!.vscode/settings.json
+.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
@@ -263,4 +263,9 @@ result*
node_modules/
# cypress credentials
-creds.json
\ No newline at end of file
+creds.json
+
+/.direnv
+
+# Nix services data
+/data
diff --git a/.typos.toml b/.typos.toml
index 79c86a39c6b5..983ead3f75d6 100644
--- a/.typos.toml
+++ b/.typos.toml
@@ -1,5 +1,8 @@
[default]
check-filename = true
+extend-ignore-identifiers-re = [
+ "UE_[0-9]{3,4}", # Unified error codes
+]
[default.extend-identifiers]
ABD = "ABD" # Aberdeenshire, UK ISO 3166-2 code
@@ -16,6 +19,7 @@ HypoNoeLbFurNiederosterreichUWien = "HypoNoeLbFurNiederosterreichUWien"
hypo_noe_lb_fur_niederosterreich_u_wien = "hypo_noe_lb_fur_niederosterreich_u_wien"
IOT = "IOT" # British Indian Ocean Territory country code
klick = "klick" # Swedish word for clicks
+FPR = "FPR" # Fraud Prevention Rules
LSO = "LSO" # Lesotho country code
NAM = "NAM" # Namibia country code
ND = "ND" # North Dakota state code
@@ -38,8 +42,7 @@ ws2ipdef = "ws2ipdef" # WinSock Extension
ws2tcpip = "ws2tcpip" # WinSock Extension
ZAR = "ZAR" # South African Rand currency code
JOD = "JOD" # Jordan currency code
-UE_000 = "UE_000" #default unified error code
-
+Payed = "Payed" # Paid status for digital virgo
[default.extend-words]
aci = "aci" # Name of a connector
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d706486e9209..2bc0977570e6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,1256 @@ All notable changes to HyperSwitch will be documented here.
- - -
+## 2024.12.26.1
+
+### Bug Fixes
+
+- **router:** Populate `profile_id` in for the HeaderAuth of v1 ([#6936](https://github.com/juspay/hyperswitch/pull/6936)) ([`10a4337`](https://github.com/juspay/hyperswitch/commit/10a43370e8b6f2f14850a505f89796e7accffcec))
+
+### Documentation
+
+- **openapi:** Update /relay request example ([#6942](https://github.com/juspay/hyperswitch/pull/6942)) ([`d849403`](https://github.com/juspay/hyperswitch/commit/d849403460f338f3af0cdc68096e194495faba9d))
+
+**Full Changelog:** [`2024.12.26.0...2024.12.26.1`](https://github.com/juspay/hyperswitch/compare/2024.12.26.0...2024.12.26.1)
+
+- - -
+
+## 2024.12.26.0
+
+### Features
+
+- **router:** Add endpoint for listing connector features ([#6612](https://github.com/juspay/hyperswitch/pull/6612)) ([`a423ff5`](https://github.com/juspay/hyperswitch/commit/a423ff53d3523508ba6c584134e32f3f1bb4f0c0))
+
+### Bug Fixes
+
+- **cors:** Expose all headers set by application in `access-control-expose-headers` header value ([#6877](https://github.com/juspay/hyperswitch/pull/6877)) ([`9c3547f`](https://github.com/juspay/hyperswitch/commit/9c3547fa8dd5930613380014025add33ccd5db4a))
+- **payments_list:** Handle same payment/attempt ids for different merchants ([#6917](https://github.com/juspay/hyperswitch/pull/6917)) ([`2e472e3`](https://github.com/juspay/hyperswitch/commit/2e472e3fee0c33b3ce8affc520db7a512ed41b2f))
+- **wasm:** Remove chasenet from jpmorgan wasm as ChaseNet doesn’t exist in PMT ([#6927](https://github.com/juspay/hyperswitch/pull/6927)) ([`5e4eded`](https://github.com/juspay/hyperswitch/commit/5e4eded8fa13c9cb4a1d648ab5c133e86522c29c))
+
+### Refactors
+
+- **core:** Remove merchant return url from `router_data` ([#6895](https://github.com/juspay/hyperswitch/pull/6895)) ([`c5717a8`](https://github.com/juspay/hyperswitch/commit/c5717a8147899e0c690e234dbf9b4fd425a7bb71))
+
+**Full Changelog:** [`2024.12.24.0...2024.12.26.0`](https://github.com/juspay/hyperswitch/compare/2024.12.24.0...2024.12.26.0)
+
+- - -
+
+## 2024.12.24.0
+
+### Features
+
+- **core:** Implemented platform merchant account ([#6882](https://github.com/juspay/hyperswitch/pull/6882)) ([`95fcf2a`](https://github.com/juspay/hyperswitch/commit/95fcf2a44ba463f90a145baae8ab9d57cc12d8fa))
+- **cypress:** Valdiate `error_code` and `error_message` and make it visible in `reports` ([#6913](https://github.com/juspay/hyperswitch/pull/6913)) ([`46b2bfe`](https://github.com/juspay/hyperswitch/commit/46b2bfe48a9dfea8fc81c9cc95a98a9a331c04c8))
+- **payments_v2:** Add payment method list endpoint ([#6805](https://github.com/juspay/hyperswitch/pull/6805)) ([`d4b3dbc`](https://github.com/juspay/hyperswitch/commit/d4b3dbc155906e8bc0fa1b14e73f45227395a32f))
+- **router:** Add /retrieve api for relay ([#6918](https://github.com/juspay/hyperswitch/pull/6918)) ([`0478731`](https://github.com/juspay/hyperswitch/commit/04787313941ec39b179490d0196258f09e2e51dd))
+
+### Bug Fixes
+
+- **connector:** [Cybersource] fix the required fields for wallet mandate payments ([#6911](https://github.com/juspay/hyperswitch/pull/6911)) ([`1fc9410`](https://github.com/juspay/hyperswitch/commit/1fc941056fb8759435f41bba004a602c176eb802))
+- **wasm:**
+ - Fix feature dependencies in `connector_configs` crate for WASM builds ([#6832](https://github.com/juspay/hyperswitch/pull/6832)) ([`6eabc82`](https://github.com/juspay/hyperswitch/commit/6eabc824d6ffb65562499943676820157efabb84))
+ - Remove extra space from wasm for payment_method_type of JPMorgan ([#6923](https://github.com/juspay/hyperswitch/pull/6923)) ([`4465385`](https://github.com/juspay/hyperswitch/commit/44653850f0128314e2580c8001937ca4a45e4b02))
+
+**Full Changelog:** [`2024.12.23.0...2024.12.24.0`](https://github.com/juspay/hyperswitch/compare/2024.12.23.0...2024.12.24.0)
+
+- - -
+
+## 2024.12.23.0
+
+### Features
+
+- **connector:** [JPMORGAN] add Payment flows for cards ([#6668](https://github.com/juspay/hyperswitch/pull/6668)) ([`adcddd6`](https://github.com/juspay/hyperswitch/commit/adcddd643c002a5fe3e7c50c0f78fa5a46f210e7))
+- **payment_methods_v2:** Added Ephemeral auth for v2 ([#6813](https://github.com/juspay/hyperswitch/pull/6813)) ([`24401bc`](https://github.com/juspay/hyperswitch/commit/24401bc16f9677ce0f5fa70d739e5e6885c7e907))
+- **payments_v2:** Implement payments capture v2 ([#6722](https://github.com/juspay/hyperswitch/pull/6722)) ([`977cb70`](https://github.com/juspay/hyperswitch/commit/977cb704e7dcf35d0fa6bc0e3c6d335ad0601521))
+- **router:**
+ - Add /relay endpoint ([#6870](https://github.com/juspay/hyperswitch/pull/6870)) ([`22de8ad`](https://github.com/juspay/hyperswitch/commit/22de8ad132811b636fdb2594649e40b90810f564))
+ - Add db interface for `/relay` ([#6879](https://github.com/juspay/hyperswitch/pull/6879)) ([`0f8b0b3`](https://github.com/juspay/hyperswitch/commit/0f8b0b3bc854be62942a77d08340510312157c67))
+
+### Bug Fixes
+
+- **connector:**
+ - Paypal BankRedirects (Ideal/EPS) ([#6864](https://github.com/juspay/hyperswitch/pull/6864)) ([`dcd51a7`](https://github.com/juspay/hyperswitch/commit/dcd51a7fb8df673cc74130ee732542b55783602f))
+ - [STRIPE] fix stripe mandate ([#6899](https://github.com/juspay/hyperswitch/pull/6899)) ([`9f2ce05`](https://github.com/juspay/hyperswitch/commit/9f2ce05b2591da0d757b267800f42b69fc38e3ee))
+ - Update mandate PMT configs for Mandate Supported Connectors ([#6903](https://github.com/juspay/hyperswitch/pull/6903)) ([`02f0824`](https://github.com/juspay/hyperswitch/commit/02f0824d303fb9a36ee54123f52176014613a992))
+- Cypress reports generation ([#6894](https://github.com/juspay/hyperswitch/pull/6894)) ([`81b324c`](https://github.com/juspay/hyperswitch/commit/81b324caf1bef4f621de30824bfb1f05ef984362))
+
+### Refactors
+
+- **connector:** [Airwallex] add device_data in payment request ([#6881](https://github.com/juspay/hyperswitch/pull/6881)) ([`573974b`](https://github.com/juspay/hyperswitch/commit/573974b3a5d53b279bd3959e400ac682aaacd474))
+- **customers_v2:** Include minor fixes for customer v2 flows ([#6876](https://github.com/juspay/hyperswitch/pull/6876)) ([`5cdeaf8`](https://github.com/juspay/hyperswitch/commit/5cdeaf8e6002ad087dba2a562f86b51e97516d29))
+- **dynamic_routing:** Add col payment_method_type in dynamic_routing_stats ([#6853](https://github.com/juspay/hyperswitch/pull/6853)) ([`492fd87`](https://github.com/juspay/hyperswitch/commit/492fd871a14e60e02f17fe073544bc40e79a7220))
+- **grpc:** Send `x-tenant-id` and `x-request-id` in grpc headers ([#6904](https://github.com/juspay/hyperswitch/pull/6904)) ([`dc0a92d`](https://github.com/juspay/hyperswitch/commit/dc0a92dc108c91d6c5f998af417e382aa7a0d9f1))
+
+### Miscellaneous Tasks
+
+- **cypress:** Payout - fix test cases for adyenplatform bank ([#6887](https://github.com/juspay/hyperswitch/pull/6887)) ([`7540b74`](https://github.com/juspay/hyperswitch/commit/7540b7434766ff9dfa1aa2a56013ac89429dd1e6))
+
+**Full Changelog:** [`2024.12.19.1...2024.12.23.0`](https://github.com/juspay/hyperswitch/compare/2024.12.19.1...2024.12.23.0)
+
+- - -
+
+## 2024.12.19.1
+
+### Features
+
+- **core:** Added customer phone_number and email to session token response for click to pay ([#6863](https://github.com/juspay/hyperswitch/pull/6863)) ([`092c79e`](https://github.com/juspay/hyperswitch/commit/092c79ec40c6af47a5d6654129411300e42eac56))
+- **klarna:** Klarna Kustom Checkout Integration ([#6839](https://github.com/juspay/hyperswitch/pull/6839)) ([`c525c9f`](https://github.com/juspay/hyperswitch/commit/c525c9f4c9d23802989bc594a4acd26c7d7cd27d))
+- **payment_methods:** Add support to pass apple pay recurring details to obtain apple pay merchant token ([#6770](https://github.com/juspay/hyperswitch/pull/6770)) ([`6074249`](https://github.com/juspay/hyperswitch/commit/607424992af4196f5a3e01477f64d794b3594a47))
+- **payments:** [Payment links] Add config for changing button text for payment links ([#6860](https://github.com/juspay/hyperswitch/pull/6860)) ([`46aad50`](https://github.com/juspay/hyperswitch/commit/46aad503b04efe60c54bbf4d5d5122696d9b1157))
+- **users:** Handle email url for users in different tenancies ([#6809](https://github.com/juspay/hyperswitch/pull/6809)) ([`839e69d`](https://github.com/juspay/hyperswitch/commit/839e69df241cf0eb2495f0ad3fc19cf32632c741))
+
+### Bug Fixes
+
+- **connector:** [UNIFIED_AUTHENTICATION_SERVICE] change url path to `pre_authentication_processing` in pre-auth flow ([#6885](https://github.com/juspay/hyperswitch/pull/6885)) ([`f219b74`](https://github.com/juspay/hyperswitch/commit/f219b74cb6a100e07084afe6d9242a88f7127971))
+
+### Refactors
+
+- **users:** Move roles schema to global interface ([#6862](https://github.com/juspay/hyperswitch/pull/6862)) ([`2d8af88`](https://github.com/juspay/hyperswitch/commit/2d8af882046bbfe309c5dbb5be9bfbd43e0c3831))
+
+**Full Changelog:** [`2024.12.19.0...2024.12.19.1`](https://github.com/juspay/hyperswitch/compare/2024.12.19.0...2024.12.19.1)
+
+- - -
+
+## 2024.12.19.0
+
+### Refactors
+
+- **dynamic_routing:** Update the authentication for update config to include JWT type ([#6785](https://github.com/juspay/hyperswitch/pull/6785)) ([`db51ec4`](https://github.com/juspay/hyperswitch/commit/db51ec43bc629dc20ceaa2bb57ede888d2d2fc2c))
+
+### Miscellaneous Tasks
+
+- **env:** Remove unified_authentication_service base_url from integ, sandbox and production toml ([#6865](https://github.com/juspay/hyperswitch/pull/6865)) ([`03c71ea`](https://github.com/juspay/hyperswitch/commit/03c71ea366041af060b385dc9d88d4b9eda4abea))
+
+**Full Changelog:** [`2024.12.18.0...2024.12.19.0`](https://github.com/juspay/hyperswitch/compare/2024.12.18.0...2024.12.19.0)
+
+- - -
+
+## 2024.12.18.0
+
+### Features
+
+- **analytics:** Analytics Request Validator and config driven forex feature ([#6733](https://github.com/juspay/hyperswitch/pull/6733)) ([`c883aa5`](https://github.com/juspay/hyperswitch/commit/c883aa59aae4ddbcf8c754052ed60b4514043d47))
+- **redis-interface:** Add redis interface command to set multiple the keys in redis and increment if the key already exists ([#6827](https://github.com/juspay/hyperswitch/pull/6827)) ([`94ad90f`](https://github.com/juspay/hyperswitch/commit/94ad90f9ed8b2d8a0e4715875f3fdccf2abec15d))
+
+### Bug Fixes
+
+- **connector:**
+ - 5xx error for Volt Payment Sync ([#6846](https://github.com/juspay/hyperswitch/pull/6846)) ([`588ce40`](https://github.com/juspay/hyperswitch/commit/588ce408b4b04bdd89f2594239e7efc9e0f66114))
+ - Add expiry year conversion for adyen mit transactions ([#6851](https://github.com/juspay/hyperswitch/pull/6851)) ([`c154a38`](https://github.com/juspay/hyperswitch/commit/c154a385597104fcdbed4aa859c52c97a240c39f))
+- **core:** Populate off_session based on payments request ([#6855](https://github.com/juspay/hyperswitch/pull/6855)) ([`107098c`](https://github.com/juspay/hyperswitch/commit/107098cda45440f9d80c6305b7b6e5cd3de9ca0d))
+- **payment_methods:** Card_network and card_scheme should be consistent ([#6849](https://github.com/juspay/hyperswitch/pull/6849)) ([`5c4de8a`](https://github.com/juspay/hyperswitch/commit/5c4de8a5133c9a835d8c706c9b71bdfc8140568d))
+
+### Refactors
+
+- **constraint_graph:** Handle PML for cases where setup_future_usage is not passed in payments ([#6810](https://github.com/juspay/hyperswitch/pull/6810)) ([`e8bfd0e`](https://github.com/juspay/hyperswitch/commit/e8bfd0e2270300fff3f051143f34ebb782da5366))
+- **customers_v2:** Address panics and some bugs in customers v2 endpoints ([#6836](https://github.com/juspay/hyperswitch/pull/6836)) ([`dfbfce4`](https://github.com/juspay/hyperswitch/commit/dfbfce4e4247166e43f1a805e65331b21eab4e09))
+
+### Miscellaneous Tasks
+
+- **analytics:** SDK table schema changes ([#6579](https://github.com/juspay/hyperswitch/pull/6579)) ([`a056dc7`](https://github.com/juspay/hyperswitch/commit/a056dc72db23200c473e8aa2ec8ce5579fa4f6c6))
+- **wasm:** Add wasm changes for ctp_mastercard connector ([#6838](https://github.com/juspay/hyperswitch/pull/6838)) ([`b301d09`](https://github.com/juspay/hyperswitch/commit/b301d09213a8c1c68d711a3b34227d13e61e52f9))
+
+**Full Changelog:** [`2024.12.17.0...2024.12.18.0`](https://github.com/juspay/hyperswitch/compare/2024.12.17.0...2024.12.18.0)
+
+- - -
+
+## 2024.12.17.0
+
+### Features
+
+- **connector:**
+ - [AIRWALLEX] Add refferer data to whitelist hyperswitch ([#6806](https://github.com/juspay/hyperswitch/pull/6806)) ([`ed276ec`](https://github.com/juspay/hyperswitch/commit/ed276ecc0017f7f98b6f8fa3841e6b8971f609f1))
+ - [Adyen ] Add fixes for AdyenPaymentRequest struct ([#6803](https://github.com/juspay/hyperswitch/pull/6803)) ([`c22be0c`](https://github.com/juspay/hyperswitch/commit/c22be0c9274350a531cd74b64eb6b311579dca79))
+- **core:** Add click to pay support in hyperswitch ([#6769](https://github.com/juspay/hyperswitch/pull/6769)) ([`165ead6`](https://github.com/juspay/hyperswitch/commit/165ead61084a48f268829c281e932b278f0a6730))
+- **payments:** Add audit events for PaymentStatus update ([#6520](https://github.com/juspay/hyperswitch/pull/6520)) ([`ae00a10`](https://github.com/juspay/hyperswitch/commit/ae00a103de5bd283695969270a421c7609a699e8))
+- **users:** Incorporate themes in user APIs ([#6772](https://github.com/juspay/hyperswitch/pull/6772)) ([`4b989fe`](https://github.com/juspay/hyperswitch/commit/4b989fe0fb7931479e127fecbaace42d989c0620))
+
+### Bug Fixes
+
+- **router:**
+ - Handle default case for card_network for co-badged cards ([#6825](https://github.com/juspay/hyperswitch/pull/6825)) ([`f95ee51`](https://github.com/juspay/hyperswitch/commit/f95ee51bb3b879762d493953b4b6e7c2e0359946))
+ - Change click_to_pay const to snake_case and remove camel_case serde rename for clicktopay metadata ([#6852](https://github.com/juspay/hyperswitch/pull/6852)) ([`3d4fd2f`](https://github.com/juspay/hyperswitch/commit/3d4fd2f719b38dcbb675de83c0ba384d1573df00))
+- **user_roles:** Migrations for backfilling user_roles entity_id ([#6837](https://github.com/juspay/hyperswitch/pull/6837)) ([`986de77`](https://github.com/juspay/hyperswitch/commit/986de77b4868e48d00161c9d30071d809360e9a6))
+
+### Refactors
+
+- **authz:** Make connector list accessible by operation groups ([#6792](https://github.com/juspay/hyperswitch/pull/6792)) ([`6081283`](https://github.com/juspay/hyperswitch/commit/6081283afc5ab5a6503c8f0f81181cd323b12297))
+
+### Miscellaneous Tasks
+
+- **deps:** Update scylla driver ([#6799](https://github.com/juspay/hyperswitch/pull/6799)) ([`71574a8`](https://github.com/juspay/hyperswitch/commit/71574a85e6aba6bc614e1d7f6775dcef4b481201))
+
+**Full Changelog:** [`2024.12.16.0...2024.12.17.0`](https://github.com/juspay/hyperswitch/compare/2024.12.16.0...2024.12.17.0)
+
+- - -
+
+## 2024.12.16.0
+
+### Features
+
+- **router:** Add `click_to_pay` block in payments sessions response if enabled ([#6829](https://github.com/juspay/hyperswitch/pull/6829)) ([`5aa8ea0`](https://github.com/juspay/hyperswitch/commit/5aa8ea03a8327b4eb12646f1bfe5522c6dfc0282))
+- **routing:** Build the gRPC interface for communicating with the external service to perform elimination routing ([#6672](https://github.com/juspay/hyperswitch/pull/6672)) ([`2a66f4a`](https://github.com/juspay/hyperswitch/commit/2a66f4a392a5175404816ba83736e3eeb3e2b53b))
+
+### Bug Fixes
+
+- **webhooks:** Mask custom outgoing webhook headers in profile response ([#6798](https://github.com/juspay/hyperswitch/pull/6798)) ([`09cf7a3`](https://github.com/juspay/hyperswitch/commit/09cf7a3ea9db3f760eb1c35ef3074dfedc8fc33f))
+
+### Refactors
+
+- **core:** Structure of split payments ([#6706](https://github.com/juspay/hyperswitch/pull/6706)) ([`5a85213`](https://github.com/juspay/hyperswitch/commit/5a85213e21702992bff1fc0b0345be2ea4f30981))
+
+**Full Changelog:** [`2024.12.13.0...2024.12.16.0`](https://github.com/juspay/hyperswitch/compare/2024.12.13.0...2024.12.16.0)
+
+- - -
+
+## 2024.12.13.0
+
+### Features
+
+- **connector:** [DEUTSCHEBANK, FIUU ] Handle 2xx errors given by Connector ([#6727](https://github.com/juspay/hyperswitch/pull/6727)) ([`573fc2c`](https://github.com/juspay/hyperswitch/commit/573fc2ce0ff306d15ec97e7c8d5b8a03528165f4))
+- **core:**
+ - Add service details field in authentication table ([#6757](https://github.com/juspay/hyperswitch/pull/6757)) ([`e9a5615`](https://github.com/juspay/hyperswitch/commit/e9a5615f2ba1f6cc27bbef653c42326b50da8db7))
+ - Add product authentication ids in business profile ([#6811](https://github.com/juspay/hyperswitch/pull/6811)) ([`1564ad7`](https://github.com/juspay/hyperswitch/commit/1564ad72b80b184808584f97309620a18246d80c))
+ - Payment links - add support for custom background image and layout in details section ([#6725](https://github.com/juspay/hyperswitch/pull/6725)) ([`d11d874`](https://github.com/juspay/hyperswitch/commit/d11d87408d0c4195bbe2c4c51df50f24c1d332c6))
+
+### Refactors
+
+- **connector:** Move connectors Datatrans, Paybox, Placetopay, Bluesnap from router crate to hyperswitch_connector crate ([#6730](https://github.com/juspay/hyperswitch/pull/6730)) ([`da5c34a`](https://github.com/juspay/hyperswitch/commit/da5c34a335043cb225ed0e4ee06cd75a83c92c4d))
+- **kafka_message:** NanoSecond precision for consolidated logs ([#6771](https://github.com/juspay/hyperswitch/pull/6771)) ([`fb3a49b`](https://github.com/juspay/hyperswitch/commit/fb3a49be658c3c4374ca98f9eae5d88dc92a3669))
+
+**Full Changelog:** [`2024.12.12.0...2024.12.13.0`](https://github.com/juspay/hyperswitch/compare/2024.12.12.0...2024.12.13.0)
+
+- - -
+
+## 2024.12.12.0
+
+### Features
+
+- **core:** Add uas framework support ([#6743](https://github.com/juspay/hyperswitch/pull/6743)) ([`9466ced`](https://github.com/juspay/hyperswitch/commit/9466ced89407f31963bb0eb7c762749e3713591a))
+
+### Bug Fixes
+
+- **router:** Card network for co-badged card and update regex ([#6801](https://github.com/juspay/hyperswitch/pull/6801)) ([`cd20537`](https://github.com/juspay/hyperswitch/commit/cd205378c035780586f6b94e5c9e03466165a33b))
+
+**Full Changelog:** [`2024.12.11.0...2024.12.12.0`](https://github.com/juspay/hyperswitch/compare/2024.12.11.0...2024.12.12.0)
+
+- - -
+
+## 2024.12.11.0
+
+### Features
+
+- **analytics:** Add support for multiple emails as input to forward reports ([#6776](https://github.com/juspay/hyperswitch/pull/6776)) ([`3df4233`](https://github.com/juspay/hyperswitch/commit/3df42333566b646e9ca93d612a78ea8d38298df4))
+- **connector:** [Unifiedauthenticationservice] add Connector Template Code ([#6732](https://github.com/juspay/hyperswitch/pull/6732)) ([`8777f41`](https://github.com/juspay/hyperswitch/commit/8777f41568ebf5373917089d7d42f3b14fb1bf60))
+- **payments:** [Payment links] Add locale case fix ([#6789](https://github.com/juspay/hyperswitch/pull/6789)) ([`8431842`](https://github.com/juspay/hyperswitch/commit/84318427108a0f974b2519587d0e336807a9600c))
+
+### Bug Fixes
+
+- **core:**
+ - Add validation to check if routable connector supports network tokenization in CIT repeat flow ([#6749](https://github.com/juspay/hyperswitch/pull/6749)) ([`9f0d8ef`](https://github.com/juspay/hyperswitch/commit/9f0d8efa8dad45a773f4cab6978288f2209e4abf))
+ - Payments - map billing first and last name to card holder name ([#6791](https://github.com/juspay/hyperswitch/pull/6791)) ([`c3b22cf`](https://github.com/juspay/hyperswitch/commit/c3b22cf81a5c8cbc6538ca7f7e4b1ce4d18eb644))
+- **docs:** Incorrect description for refund api ([#6443](https://github.com/juspay/hyperswitch/pull/6443)) ([`8954e8a`](https://github.com/juspay/hyperswitch/commit/8954e8a2180d20719b1bb0d4f77081ff03fd9b43))
+
+### Refactors
+
+- **constraint_graph:** Add setup_future_usage for mandate check in payments ([#6744](https://github.com/juspay/hyperswitch/pull/6744)) ([`1aa4ad6`](https://github.com/juspay/hyperswitch/commit/1aa4ad60e2326cbdc5c81479cf3420c3f3e1d8ee))
+- **enums:** Recon - include ReconOps variant in PermissionsGroup for backwards compatibility with data in DB ([#6767](https://github.com/juspay/hyperswitch/pull/6767)) ([`a528282`](https://github.com/juspay/hyperswitch/commit/a52828296a682e30badf0849921469cdf4eecbea))
+- **events:** Tenant config in API, Connector and Outgoing Web-hook events ([#6777](https://github.com/juspay/hyperswitch/pull/6777)) ([`c620779`](https://github.com/juspay/hyperswitch/commit/c620779bbd14a1102d4fff68cc36581935d87da7))
+- **payment_methods:** Add new field_type UserBsbNumber, UserBankSortCode and UserBankRoutingNumber for payment_connector_required_fields ([#6758](https://github.com/juspay/hyperswitch/pull/6758)) ([`6f84145`](https://github.com/juspay/hyperswitch/commit/6f841458f73cec8ce43a34b1b50abbc74baa2ef7))
+- **users:** Remove lineage checks in roles get operations ([#6701](https://github.com/juspay/hyperswitch/pull/6701)) ([`f96a87d`](https://github.com/juspay/hyperswitch/commit/f96a87d08ca003411d63dcd9ef4dda6439d20e07))
+
+### Documentation
+
+- Add new logos for README and API reference ([#6783](https://github.com/juspay/hyperswitch/pull/6783)) ([`b9c04c3`](https://github.com/juspay/hyperswitch/commit/b9c04c39880aa1ab0b66397802d138f0d4c1ed28))
+
+### Build System / Dependencies
+
+- **deps:** Bump opentelemetry crates to 0.27 ([#6774](https://github.com/juspay/hyperswitch/pull/6774)) ([`47a3d2b`](https://github.com/juspay/hyperswitch/commit/47a3d2b2abcc28a13f79bd9318d119f103b7fb6c))
+
+**Full Changelog:** [`2024.12.10.0...2024.12.11.0`](https://github.com/juspay/hyperswitch/compare/2024.12.10.0...2024.12.11.0)
+
+- - -
+
+## 2024.12.10.0
+
+### Features
+
+- **core:** Add payments update-intent API for v2 ([#6490](https://github.com/juspay/hyperswitch/pull/6490)) ([`19f810a`](https://github.com/juspay/hyperswitch/commit/19f810aed8723456bdd20587f4c0ca6092d4677b))
+
+**Full Changelog:** [`2024.12.09.0...2024.12.10.0`](https://github.com/juspay/hyperswitch/compare/2024.12.09.0...2024.12.10.0)
+
+- - -
+
+## 2024.12.09.0
+
+### Features
+
+- **dynamic_routing:** Analytics improvement using separate postgres table ([#6723](https://github.com/juspay/hyperswitch/pull/6723)) ([`5918014`](https://github.com/juspay/hyperswitch/commit/5918014da158abbf44540c855e35b0b5bb363fb2))
+- **users:** Add support for tenant level users ([#6708](https://github.com/juspay/hyperswitch/pull/6708)) ([`357e8a0`](https://github.com/juspay/hyperswitch/commit/357e8a007ac5d418c143e90b829d938e7cbcb69e))
+
+### Bug Fixes
+
+- **connector:** Add config cleanup on payment connector deletion ([#5998](https://github.com/juspay/hyperswitch/pull/5998)) ([`512ae85`](https://github.com/juspay/hyperswitch/commit/512ae85c81fc92158e1b54c48b55993849e14a2a))
+- **core:** Card_network details Missing in Customer Payment Methods List for External 3DS Authentication Payments ([#6739](https://github.com/juspay/hyperswitch/pull/6739)) ([`15f873b`](https://github.com/juspay/hyperswitch/commit/15f873bd1296169149987041f4008b0afe2ac2aa))
+- **router:** Validate each field for migration request body ([#6525](https://github.com/juspay/hyperswitch/pull/6525)) ([`b5d3d49`](https://github.com/juspay/hyperswitch/commit/b5d3d49ceaa2f89284ae5976afec0ff5663a24b0))
+
+**Full Changelog:** [`2024.12.06.0...2024.12.09.0`](https://github.com/juspay/hyperswitch/compare/2024.12.06.0...2024.12.09.0)
+
+- - -
+
+## 2024.12.06.0
+
+### Features
+
+- **analytics:** Add refund sessionized metrics for Analytics V2 dashboard ([#6616](https://github.com/juspay/hyperswitch/pull/6616)) ([`774a53e`](https://github.com/juspay/hyperswitch/commit/774a53ee8935e2e28827b986e5bf0ed5dc55cf33))
+- **connector:**
+ - [Nexixpay] add mandates flow for cards ([#6259](https://github.com/juspay/hyperswitch/pull/6259)) ([`62521f3`](https://github.com/juspay/hyperswitch/commit/62521f367bbbf1f9153b506934eafee7eb58e2fb))
+ - Added a new CaptureMethod SequentialAutomatic to Support CIT Mandates for Paybox ([#6587](https://github.com/juspay/hyperswitch/pull/6587)) ([`e5dde6a`](https://github.com/juspay/hyperswitch/commit/e5dde6acc0c83b97590a23e1a4aa98f2db4fe954))
+- **core:** Add is_click_to_pay_enabled in business profile ([#6736](https://github.com/juspay/hyperswitch/pull/6736)) ([`4bfabdf`](https://github.com/juspay/hyperswitch/commit/4bfabdfa24b24c4bc2dddfca4bd8dd7b34003863))
+- **events:** Add audit event for CompleteAuthorize ([#6310](https://github.com/juspay/hyperswitch/pull/6310)) ([`dc26317`](https://github.com/juspay/hyperswitch/commit/dc26317e9bc1aa82666e978c5e824ccb9b016d31))
+- **payments:** [Payment links] Add support for traditional chinese locale for payment links ([#6745](https://github.com/juspay/hyperswitch/pull/6745)) ([`5704ca1`](https://github.com/juspay/hyperswitch/commit/5704ca12616b441e3fc9bba19f9398e05e1fac96))
+- **routing:** Enable volume split for dynamic routing ([#6662](https://github.com/juspay/hyperswitch/pull/6662)) ([`03b936a`](https://github.com/juspay/hyperswitch/commit/03b936a117ae0931fab800cb82038ba45aa6f9a3))
+- **webhooks:** Adyen - consume and update connector's network_transaction_id in payment_methods ([#6738](https://github.com/juspay/hyperswitch/pull/6738)) ([`871a363`](https://github.com/juspay/hyperswitch/commit/871a36379d5b40a6ce98232275a7cc8982c32ea8))
+
+### Bug Fixes
+
+- **api_models:** Fix `wasm` build problems caused by `actix-multipart` ([#6747](https://github.com/juspay/hyperswitch/pull/6747)) ([`437a8de`](https://github.com/juspay/hyperswitch/commit/437a8de8ebd8af97a7df51dd81174cf36ca44e5f))
+
+### Refactors
+
+- **connector:** Move connectors Bamboraapac, Boku, Gocardless, Prophetpay, Rapyd ([#6652](https://github.com/juspay/hyperswitch/pull/6652)) ([`36388d4`](https://github.com/juspay/hyperswitch/commit/36388d458e799fc6cc58c1a405e46ea6a8ebd96c))
+- **connector-configs:** Worldpay - update username / password mapping ([#6752](https://github.com/juspay/hyperswitch/pull/6752)) ([`19f8ee4`](https://github.com/juspay/hyperswitch/commit/19f8ee46e5a075fecfa1f80d71960928821bf468))
+- **dynamic_fields:** Rename fields like ach, bacs and becs for bank debit payment method ([#6678](https://github.com/juspay/hyperswitch/pull/6678)) ([`c2646d7`](https://github.com/juspay/hyperswitch/commit/c2646d749c1eee916629ba80d930adeb1860fc4e))
+
+### Documentation
+
+- Updating logo for Api ref ([#6741](https://github.com/juspay/hyperswitch/pull/6741)) ([`de80121`](https://github.com/juspay/hyperswitch/commit/de8012187180c35a61fbe990094b0c2d74b206c9))
+
+### Miscellaneous Tasks
+
+- Enable `clippy::trivially_copy_pass_by_ref` lint and address it ([#6724](https://github.com/juspay/hyperswitch/pull/6724)) ([`d17d2fe`](https://github.com/juspay/hyperswitch/commit/d17d2fe075bee35c3449bfb7db356df83f49a045))
+
+**Full Changelog:** [`2024.12.05.0...2024.12.06.0`](https://github.com/juspay/hyperswitch/compare/2024.12.05.0...2024.12.06.0)
+
+- - -
+
+## 2024.12.05.0
+
+### Features
+
+- **themes:** Create APIs for managing themes ([#6658](https://github.com/juspay/hyperswitch/pull/6658)) ([`3a3e93c`](https://github.com/juspay/hyperswitch/commit/3a3e93cb3be3fc3ffabef2a708b49defabf338a5))
+- Add resources and granular permission groups for reconciliation ([#6591](https://github.com/juspay/hyperswitch/pull/6591)) ([`fa21ef8`](https://github.com/juspay/hyperswitch/commit/fa21ef892da1b2ff511a39134ffdcc5d404dc91a))
+
+### Refactors
+
+- **address:** Change address to domain address in application ([#6608](https://github.com/juspay/hyperswitch/pull/6608)) ([`938b2a8`](https://github.com/juspay/hyperswitch/commit/938b2a898ea3f647d57812858c6bd4dad13972a3))
+- **connector:** Add amount conversion framework to cybersource ([#6335](https://github.com/juspay/hyperswitch/pull/6335)) ([`248be9c`](https://github.com/juspay/hyperswitch/commit/248be9c73e7d627c856e5398234ff5840c93798c))
+- **gsm:** Add `error_category` column to gsm table ([#6648](https://github.com/juspay/hyperswitch/pull/6648)) ([`fd82cf6`](https://github.com/juspay/hyperswitch/commit/fd82cf610a15143559f8db1038c8c65ede6e7b7c))
+
+### Miscellaneous Tasks
+
+- Wasm paze additional details ([#6710](https://github.com/juspay/hyperswitch/pull/6710)) ([`35f963c`](https://github.com/juspay/hyperswitch/commit/35f963c2e8a48add26bc80e6a828e2d18e6f1058))
+
+**Full Changelog:** [`2024.12.04.0...2024.12.05.0`](https://github.com/juspay/hyperswitch/compare/2024.12.04.0...2024.12.05.0)
+
+- - -
+
+## 2024.12.04.0
+
+### Features
+
+- **cypress:** Add multiple creds and flags support ([#6588](https://github.com/juspay/hyperswitch/pull/6588)) ([`6438391`](https://github.com/juspay/hyperswitch/commit/64383915bda5693df1cecf6cc5683e8b9aaef99b))
+
+**Full Changelog:** [`2024.12.03.0...2024.12.04.0`](https://github.com/juspay/hyperswitch/compare/2024.12.03.0...2024.12.04.0)
+
+- - -
+
+## 2024.12.03.0
+
+### Features
+
+- **payment_methods_v2:** Implement a barebones version of list customer payment methods v2 ([#6649](https://github.com/juspay/hyperswitch/pull/6649)) ([`797a0db`](https://github.com/juspay/hyperswitch/commit/797a0db7733c5b387564fb1bbc106d054c8dffa6))
+- **routing:** Elimination routing switch for toggling the feature ([#6568](https://github.com/juspay/hyperswitch/pull/6568)) ([`f6dde13`](https://github.com/juspay/hyperswitch/commit/f6dde13d6c2920761f236969a3862fe61f3e0e3d))
+
+### Bug Fixes
+
+- **connector:** Adyen - propagate connector mandate details in incoming webhooks ([#6720](https://github.com/juspay/hyperswitch/pull/6720)) ([`bea4b9e`](https://github.com/juspay/hyperswitch/commit/bea4b9e7f430c3d7fbb25be0b472d2afb01135ec))
+- **opensearch:** Fix empty filter array query addition in globalsearch query ([#6716](https://github.com/juspay/hyperswitch/pull/6716)) ([`063a1c6`](https://github.com/juspay/hyperswitch/commit/063a1c636ce29ca8f76c3c272c6da4d32d356cda))
+- **payment_link:** Add support for hide card nickname field for open payment links ([#6700](https://github.com/juspay/hyperswitch/pull/6700)) ([`933911e`](https://github.com/juspay/hyperswitch/commit/933911eda11f32d72ffeddb948b86672cb08105b))
+
+### Miscellaneous Tasks
+
+- Address Rust 1.83.0 clippy lints and enable more clippy lints ([#6705](https://github.com/juspay/hyperswitch/pull/6705)) ([`9a59d0a`](https://github.com/juspay/hyperswitch/commit/9a59d0a5ff682cd7a983a63e90113afc846aeac6))
+
+**Full Changelog:** [`2024.12.02.1...2024.12.03.0`](https://github.com/juspay/hyperswitch/compare/2024.12.02.1...2024.12.03.0)
+
+- - -
+
+## 2024.12.02.1
+
+### Bug Fixes
+
+- **openapi:** Revert Standardise API naming scheme for V2 Dashboard Changes ([#6712](https://github.com/juspay/hyperswitch/pull/6712)) ([`b097d7f`](https://github.com/juspay/hyperswitch/commit/b097d7f5a984b32421494ea033029d01d034fab8))
+
+**Full Changelog:** [`2024.12.02.0...2024.12.02.1`](https://github.com/juspay/hyperswitch/compare/2024.12.02.0...2024.12.02.1)
+
+- - -
+
+## 2024.12.02.0
+
+### Features
+
+- **connector:**
+ - [Adyen] Fetch email from customer email for payment request ([#6676](https://github.com/juspay/hyperswitch/pull/6676)) ([`9998c55`](https://github.com/juspay/hyperswitch/commit/9998c557c9c88496ffbee883e7fc4b76614cff50))
+ - [REDSYS] add Connector Template Code ([#6659](https://github.com/juspay/hyperswitch/pull/6659)) ([`19cbcdd`](https://github.com/juspay/hyperswitch/commit/19cbcdd979bb74119d80c37c313fd0ffeb58bb8d))
+- **payments:** [Payment links] add showCardFormByDefault config for payment links ([#6663](https://github.com/juspay/hyperswitch/pull/6663)) ([`b1d1073`](https://github.com/juspay/hyperswitch/commit/b1d1073389f58c480a53a27be24aa91554520ff1))
+- **users:** Add tenant id reads in user roles ([#6661](https://github.com/juspay/hyperswitch/pull/6661)) ([`9212f77`](https://github.com/juspay/hyperswitch/commit/9212f77684b04115332d9be5c3d20bdc56b02160))
+
+### Bug Fixes
+
+- **analytics:** Fix first_attempt filter value parsing for Payments ([#6667](https://github.com/juspay/hyperswitch/pull/6667)) ([`abcaa53`](https://github.com/juspay/hyperswitch/commit/abcaa539eccdae86c7a68fd4ce60ab9889f9fb43))
+- **openapi:** Standardise API naming scheme for V2 ([#6510](https://github.com/juspay/hyperswitch/pull/6510)) ([`96393ff`](https://github.com/juspay/hyperswitch/commit/96393ff3d6b11d4726a6cb2224236414507d9848))
+- **opensearch:** Handle empty free-text query search in global search ([#6685](https://github.com/juspay/hyperswitch/pull/6685)) ([`b1cdff0`](https://github.com/juspay/hyperswitch/commit/b1cdff0950f32b38e3ff0eeac2b726ba0f671051))
+- **router:** Populate card network in the network transaction id based MIT flow ([#6690](https://github.com/juspay/hyperswitch/pull/6690)) ([`6a20701`](https://github.com/juspay/hyperswitch/commit/6a2070172b8d845e6db36b7789defddf8ea4e1e9))
+- **users:** Mark user as verified if user logins from SSO ([#6694](https://github.com/juspay/hyperswitch/pull/6694)) ([`880ad1e`](https://github.com/juspay/hyperswitch/commit/880ad1e883fb42f73c2805287e64bc2c2dcbb9f3))
+
+### Refactors
+
+- **currency_conversion:** Release redis lock if api call fails ([#6671](https://github.com/juspay/hyperswitch/pull/6671)) ([`ae7d16e`](https://github.com/juspay/hyperswitch/commit/ae7d16e23699c8ed95a7e2eab7539cfe20f847d0))
+- **router:** [ZSL] remove partially capture status ([#6689](https://github.com/juspay/hyperswitch/pull/6689)) ([`0572626`](https://github.com/juspay/hyperswitch/commit/05726262e6a3f6fcb18c0dbe41c18e4d6e84608b))
+- **users:** Use domain email type in user DB functions ([#6699](https://github.com/juspay/hyperswitch/pull/6699)) ([`55fe82f`](https://github.com/juspay/hyperswitch/commit/55fe82fdcd78df9608842190f1423088740d1087))
+
+**Full Changelog:** [`2024.11.29.0...2024.12.02.0`](https://github.com/juspay/hyperswitch/compare/2024.11.29.0...2024.12.02.0)
+
+- - -
+
+## 2024.11.29.0
+
+### Features
+
+- **connector:** Worldpay - add dynamic fields and update terminal status mapping ([#6468](https://github.com/juspay/hyperswitch/pull/6468)) ([`5a98ed6`](https://github.com/juspay/hyperswitch/commit/5a98ed65a94a6e8204a3ea34f834033654fdbaa7))
+- Add support for sdk session call in v2 ([#6502](https://github.com/juspay/hyperswitch/pull/6502)) ([`707f48c`](https://github.com/juspay/hyperswitch/commit/707f48ceda789185187d23e35f483e117c67b81b))
+
+### Bug Fixes
+
+- **analytics:** Fix bugs in payments page metrics in Analytics V2 dashboard ([#6654](https://github.com/juspay/hyperswitch/pull/6654)) ([`93459fd`](https://github.com/juspay/hyperswitch/commit/93459fde5fb95f31e8f1429e806cde8e7496dd84))
+
+**Full Changelog:** [`2024.11.28.0...2024.11.29.0`](https://github.com/juspay/hyperswitch/compare/2024.11.28.0...2024.11.29.0)
+
+- - -
+
+## 2024.11.28.0
+
+### Bug Fixes
+
+- **users:** Check lineage across entities in invite ([#6677](https://github.com/juspay/hyperswitch/pull/6677)) ([`f3424b7`](https://github.com/juspay/hyperswitch/commit/f3424b7576554215945f61b52f38e43bb1e5a8b7))
+
+### Refactors
+
+- **core:** Add error handling wrapper to wehbook ([#6636](https://github.com/juspay/hyperswitch/pull/6636)) ([`4b45d21`](https://github.com/juspay/hyperswitch/commit/4b45d21269437479435302aa1ea7d3d741e2a009))
+
+**Full Changelog:** [`2024.11.27.0...2024.11.28.0`](https://github.com/juspay/hyperswitch/compare/2024.11.27.0...2024.11.28.0)
+
+- - -
+
+## 2024.11.27.0
+
+### Features
+
+- **analytics:** Add `sessionized_metrics` for disputes analytics ([#6573](https://github.com/juspay/hyperswitch/pull/6573)) ([`8fbb766`](https://github.com/juspay/hyperswitch/commit/8fbb7663089d4790628109944e5fb5a57ccdaf00))
+- **connector:**
+ - [INESPAY] add Connector Template Code ([#6614](https://github.com/juspay/hyperswitch/pull/6614)) ([`710186f`](https://github.com/juspay/hyperswitch/commit/710186f035c92a919e8f5a49565c6f8908f1803f))
+ - [Netcetera] add sca exemption ([#6611](https://github.com/juspay/hyperswitch/pull/6611)) ([`3120494`](https://github.com/juspay/hyperswitch/commit/31204941ee24fe7b23344ba9b4a2615c46f33bb0))
+- **payments:** Propagate additional payment method data for google pay during MIT ([#6644](https://github.com/juspay/hyperswitch/pull/6644)) ([`75fe9c0`](https://github.com/juspay/hyperswitch/commit/75fe9c0c285f640967af33b1d969af9ce48c5b17))
+- **router:** [Cybersource] add PLN to the currency config ([#6628](https://github.com/juspay/hyperswitch/pull/6628)) ([`29a0885`](https://github.com/juspay/hyperswitch/commit/29a0885a8fc7b718f8b87866e2638e8bfad3c8f3))
+- **users:** Send welcome to community email in magic link signup ([#6639](https://github.com/juspay/hyperswitch/pull/6639)) ([`03423a1`](https://github.com/juspay/hyperswitch/commit/03423a1f76d324453052da985f998fd3f957ce90))
+- Added grpc based health check ([#6441](https://github.com/juspay/hyperswitch/pull/6441)) ([`e922f96`](https://github.com/juspay/hyperswitch/commit/e922f96cee7e34493f0022b0c56455357eddc4f8))
+
+### Bug Fixes
+
+- **core:** Add payment_id as query param in merchant return url ([#6665](https://github.com/juspay/hyperswitch/pull/6665)) ([`6829478`](https://github.com/juspay/hyperswitch/commit/682947866e6afc197c71bbd255f22ae427704590))
+
+### Refactors
+
+- **authn:** Enable cookies in Integ ([#6599](https://github.com/juspay/hyperswitch/pull/6599)) ([`02479a1`](https://github.com/juspay/hyperswitch/commit/02479a12b18dc68e2787ae237580fcb46348374e))
+- **connector:** Add amount conversion framework to Riskified ([#6359](https://github.com/juspay/hyperswitch/pull/6359)) ([`acb30ef`](https://github.com/juspay/hyperswitch/commit/acb30ef6d144eaf13b237b830d1ac534259932a3))
+- **payments_v2:** Use batch encryption for intent create and confirm intent ([#6589](https://github.com/juspay/hyperswitch/pull/6589)) ([`108b160`](https://github.com/juspay/hyperswitch/commit/108b1603fa44b2a56c278196edb5a1f76f5d3d03))
+- **tenant:** Use tenant id type ([#6643](https://github.com/juspay/hyperswitch/pull/6643)) ([`c9df7b0`](https://github.com/juspay/hyperswitch/commit/c9df7b0557889c88ea20392dfe56bf651e22c9a7))
+
+**Full Changelog:** [`2024.11.26.0...2024.11.27.0`](https://github.com/juspay/hyperswitch/compare/2024.11.26.0...2024.11.27.0)
+
+- - -
+
+## 2024.11.26.0
+
+### Features
+
+- **connector:**
+ - [Paypal] implement vaulting for paypal cards via zero mandates ([#5324](https://github.com/juspay/hyperswitch/pull/5324)) ([`83e8bc0`](https://github.com/juspay/hyperswitch/commit/83e8bc0775c20e9d055e65bd13a2e8b1148092e1))
+ - [Elavon] Implement cards Flow ([#6485](https://github.com/juspay/hyperswitch/pull/6485)) ([`6887681`](https://github.com/juspay/hyperswitch/commit/68876811a8817cdec09be407fbbbbf7f19992565))
+- **core:** Add SCA exemption field ([#6578](https://github.com/juspay/hyperswitch/pull/6578)) ([`2b8eb09`](https://github.com/juspay/hyperswitch/commit/2b8eb09a16040957ac369c48e6095c343207f0d3))
+- **payments:** Add merchant order ref id filter ([#6630](https://github.com/juspay/hyperswitch/pull/6630)) ([`57e64c2`](https://github.com/juspay/hyperswitch/commit/57e64c26ca4251b493c87bfe93799faaab4ffa89))
+
+### Miscellaneous Tasks
+
+- **deps:** Update cypress packages to address CVE ([#6624](https://github.com/juspay/hyperswitch/pull/6624)) ([`0db3aed`](https://github.com/juspay/hyperswitch/commit/0db3aed1533856b9892369d7bb2430d90d091756))
+
+**Full Changelog:** [`2024.11.25.0...2024.11.26.0`](https://github.com/juspay/hyperswitch/compare/2024.11.25.0...2024.11.26.0)
+
+- - -
+
+## 2024.11.25.0
+
+### Features
+
+- **analytics:** Add `first_attempt` as a filter for PaymentFilters ([#6604](https://github.com/juspay/hyperswitch/pull/6604)) ([`9460041`](https://github.com/juspay/hyperswitch/commit/9460041b2ae8f94f2894517d3c04d30c6f78a5bb))
+- **refunds:** Trigger refund outgoing webhooks in create and retrieve refund flows ([#6635](https://github.com/juspay/hyperswitch/pull/6635)) ([`420eaab`](https://github.com/juspay/hyperswitch/commit/420eaabf3308b2fd2119183b0a2b462aa69b77b2))
+
+### Bug Fixes
+
+- **analytics:** Remove first_attempt group by in Payment Intent old metrics ([#6627](https://github.com/juspay/hyperswitch/pull/6627)) ([`54e393b`](https://github.com/juspay/hyperswitch/commit/54e393bf9a55bdc4527a723b7a03968f21848a5e))
+- **connector:** [Cybersource] change commerce indicator for applepay ([#6634](https://github.com/juspay/hyperswitch/pull/6634)) ([`8d0639e`](https://github.com/juspay/hyperswitch/commit/8d0639ea6f22227253a44e6bd8272d9e55d17f92))
+
+**Full Changelog:** [`2024.11.22.0...2024.11.25.0`](https://github.com/juspay/hyperswitch/compare/2024.11.22.0...2024.11.25.0)
+
+- - -
+
+## 2024.11.22.0
+
+### Features
+
+- **connector:**
+ - [Xendit] Template PR ([#6593](https://github.com/juspay/hyperswitch/pull/6593)) ([`9bc363f`](https://github.com/juspay/hyperswitch/commit/9bc363f140afcdc3d4dc624d6410a42c33afaeed))
+ - [AIRWALLEX] Update production endpoint ([#6632](https://github.com/juspay/hyperswitch/pull/6632)) ([`bc65a84`](https://github.com/juspay/hyperswitch/commit/bc65a848a14c1e5c8a50cf4bf5764a7af2918ac9))
+- **themes:** Add `theme_name` and `entity_type` in themes table ([#6621](https://github.com/juspay/hyperswitch/pull/6621)) ([`bf13c16`](https://github.com/juspay/hyperswitch/commit/bf13c16109d0113f900c806b0722895a36ec2d5a))
+
+### Bug Fixes
+
+- **connector:** [Novalnet] Get email from customer email if billing.email is not present ([#6619](https://github.com/juspay/hyperswitch/pull/6619)) ([`9010214`](https://github.com/juspay/hyperswitch/commit/9010214c6e62a65f91e0eeca6d5f21468e5c63aa))
+
+### Refactors
+
+- Update API response for JSON deserialization errors ([#6610](https://github.com/juspay/hyperswitch/pull/6610)) ([`40d3c38`](https://github.com/juspay/hyperswitch/commit/40d3c38b830a7163331778064d0e1917d30fc17e))
+
+**Full Changelog:** [`2024.11.21.0...2024.11.22.0`](https://github.com/juspay/hyperswitch/compare/2024.11.21.0...2024.11.22.0)
+
+- - -
+
+## 2024.11.21.0
+
+### Features
+
+- **email:** Add SMTP support to allow mails through self hosted/custom SMTP server ([#6617](https://github.com/juspay/hyperswitch/pull/6617)) ([`0f563b0`](https://github.com/juspay/hyperswitch/commit/0f563b069994f47bba1ba77c79fef6307f3760e8))
+- **router:** Add support for network token migration ([#6300](https://github.com/juspay/hyperswitch/pull/6300)) ([`012e352`](https://github.com/juspay/hyperswitch/commit/012e352db0477f5ddb4429cb0e4f5d781fd901a7))
+- **users:** Convert emails to lowercase from requests ([#6601](https://github.com/juspay/hyperswitch/pull/6601)) ([`c04f81e`](https://github.com/juspay/hyperswitch/commit/c04f81e3c4362369a92b2ead5ee1b28b4ca44b52))
+
+### Bug Fixes
+
+- **connector:** [Volt] handle 5xx error for Volt payments webhooks ([#6576](https://github.com/juspay/hyperswitch/pull/6576)) ([`75ec96b`](https://github.com/juspay/hyperswitch/commit/75ec96b6131d470b39171415058106b3464de75a))
+- **dispute:** Change dispute currency type to currency enum ([#6454](https://github.com/juspay/hyperswitch/pull/6454)) ([`98aa84b`](https://github.com/juspay/hyperswitch/commit/98aa84b7e842ac85ce2461f3eab826a6c3783832))
+
+### Refactors
+
+- **router:** Remove metadata, additional_merchant_data and connector_wallets_details from connector list api ([#6583](https://github.com/juspay/hyperswitch/pull/6583)) ([`5611769`](https://github.com/juspay/hyperswitch/commit/5611769964e372eb4690ef95ce950a2842f074d3))
+
+**Full Changelog:** [`2024.11.20.0...2024.11.21.0`](https://github.com/juspay/hyperswitch/compare/2024.11.20.0...2024.11.21.0)
+
+- - -
+
+## 2024.11.20.0
+
+### Features
+
+- **analytics:** Add `smart_retries` only metrics for analytics v2 dashboard ([#6575](https://github.com/juspay/hyperswitch/pull/6575)) ([`f3897dd`](https://github.com/juspay/hyperswitch/commit/f3897dd6b57318b681a2c5dc099d787aa8233f24))
+- **connector:** [Novalnet] Add minimal customer data feature ([#6570](https://github.com/juspay/hyperswitch/pull/6570)) ([`9787a2b`](https://github.com/juspay/hyperswitch/commit/9787a2becf1bc9eceee6a1fec0a4edb5c3e6473b))
+- **router:** Add payment incoming webhooks support for v2 ([#6551](https://github.com/juspay/hyperswitch/pull/6551)) ([`8e9c3ec`](https://github.com/juspay/hyperswitch/commit/8e9c3ec8931851dae638037b91eb1611399be0bf))
+- **routing:** Add invalidate window as a service for SR based routing ([#6264](https://github.com/juspay/hyperswitch/pull/6264)) ([`607b3df`](https://github.com/juspay/hyperswitch/commit/607b3df3fc822a5f937dbb4f89fbdb0352eca3ff))
+
+### Bug Fixes
+
+- **analytics:** Fix `authentication_type` and `card_last_4` fields serialization for payment_intent_filters ([#6595](https://github.com/juspay/hyperswitch/pull/6595)) ([`0302c30`](https://github.com/juspay/hyperswitch/commit/0302c3033fbff4bfbdb18df44fabc3513b063fb0))
+- **connector:**
+ - [Worldpay] use 4 digit expiry year ([#6543](https://github.com/juspay/hyperswitch/pull/6543)) ([`e730a2e`](https://github.com/juspay/hyperswitch/commit/e730a2ee5a35d56f3740e923cb16de67edca2fc0))
+ - [Adyen]fix error code and message for webhooks response ([#6602](https://github.com/juspay/hyperswitch/pull/6602)) ([`8b31a7b`](https://github.com/juspay/hyperswitch/commit/8b31a7bbe1de88f2126bee4547b37cbb16ea95a4))
+- **docker-compose:** Address "role root does not exist" errors arising from postgres health check ([#6582](https://github.com/juspay/hyperswitch/pull/6582)) ([`e9e8df2`](https://github.com/juspay/hyperswitch/commit/e9e8df222c90661493ba974374d70438ce0ffa6f))
+
+### Refactors
+
+- **payment_methods_v2:** Rename `payment_method` and `payment_method_type` fields and use concrete type for `payment_method_data` ([#6555](https://github.com/juspay/hyperswitch/pull/6555)) ([`11e9241`](https://github.com/juspay/hyperswitch/commit/11e92413b22f13df8cfa62020d48d490e37b5d87))
+- **users:** Force 2FA in production environment ([#6596](https://github.com/juspay/hyperswitch/pull/6596)) ([`bbd55e3`](https://github.com/juspay/hyperswitch/commit/bbd55e32f838349b402e8cd0abc06d34f647be94))
+
+**Full Changelog:** [`2024.11.19.0...2024.11.20.0`](https://github.com/juspay/hyperswitch/compare/2024.11.19.0...2024.11.20.0)
+
+- - -
+
+## 2024.11.19.0
+
+### Features
+
+- **connector:** [Novalnet] Add support for disputes ([#6560](https://github.com/juspay/hyperswitch/pull/6560)) ([`6881ce2`](https://github.com/juspay/hyperswitch/commit/6881ce2ed3d11006c33fef9863107f0d823ebddb))
+- **payments:** [Payment links] add hide card nickname field config for secure payment links ([#6554](https://github.com/juspay/hyperswitch/pull/6554)) ([`0e026b7`](https://github.com/juspay/hyperswitch/commit/0e026b70b6502c4e82f3e8cccc5441deb472119e))
+
+### Refactors
+
+- **core:** Add profile_id for default_fallback api ([#6546](https://github.com/juspay/hyperswitch/pull/6546)) ([`053f810`](https://github.com/juspay/hyperswitch/commit/053f8109302a98e6b6d30d957b2af618ea73055f))
+- **users:** Make `profile_id` in the JWT non-optional ([#6537](https://github.com/juspay/hyperswitch/pull/6537)) ([`d32397f`](https://github.com/juspay/hyperswitch/commit/d32397f060731f51a15634e221117a554b8b3721))
+
+**Full Changelog:** [`2024.11.18.0...2024.11.19.0`](https://github.com/juspay/hyperswitch/compare/2024.11.18.0...2024.11.19.0)
+
+- - -
+
+## 2024.11.18.0
+
+### Features
+
+- **payments_v2:** Add finish redirection endpoint ([#6549](https://github.com/juspay/hyperswitch/pull/6549)) ([`0805a93`](https://github.com/juspay/hyperswitch/commit/0805a937b1bc12ac1dfb23922036733ed971a87a))
+
+**Full Changelog:** [`2024.11.15.0...2024.11.18.0`](https://github.com/juspay/hyperswitch/compare/2024.11.15.0...2024.11.18.0)
+
+- - -
+
+## 2024.11.15.0
+
+### Features
+
+- **analytics:** Add `sessionized_metrics` and `currency_conversion` for refunds analytics ([#6419](https://github.com/juspay/hyperswitch/pull/6419)) ([`afd7f7d`](https://github.com/juspay/hyperswitch/commit/afd7f7d20980f6f39673008c86b89b1e501f05f2))
+- **connector:** [Novalnet] Add supported currencies ([#6547](https://github.com/juspay/hyperswitch/pull/6547)) ([`a35a4f3`](https://github.com/juspay/hyperswitch/commit/a35a4f314242af3c11a27c031388049c8fe4e72d))
+- **themes:** Setup themes table ([#6533](https://github.com/juspay/hyperswitch/pull/6533)) ([`29be1d4`](https://github.com/juspay/hyperswitch/commit/29be1d4fadc55948c99cc8bd33b3b8e8d341ae11))
+- Implement scylla traits for StrongSecret ([#6500](https://github.com/juspay/hyperswitch/pull/6500)) ([`7d73e90`](https://github.com/juspay/hyperswitch/commit/7d73e9095a532aa5c2bb4bf8806fc678460cf8d4))
+
+**Full Changelog:** [`2024.11.14.0...2024.11.15.0`](https://github.com/juspay/hyperswitch/compare/2024.11.14.0...2024.11.15.0)
+
+- - -
+
+## 2024.11.14.0
+
+### Features
+
+- **connector:** [ADYEN] Integrate Paze ([#6545](https://github.com/juspay/hyperswitch/pull/6545)) ([`b82e742`](https://github.com/juspay/hyperswitch/commit/b82e7429e2db8ef1241a3f6ebe782319f9d1d98b))
+- **core:** Add Mobile Payment (Direct Carrier Billing) as a payment method ([#6196](https://github.com/juspay/hyperswitch/pull/6196)) ([`d0a041c`](https://github.com/juspay/hyperswitch/commit/d0a041c361668d0eff6c9b0dde67351b6ed43d19))
+- **openapi:** Add payment get to openapi ([#6539](https://github.com/juspay/hyperswitch/pull/6539)) ([`600cf44`](https://github.com/juspay/hyperswitch/commit/600cf44684912192f0bf1b9566fd0a7daae9f54c))
+- **users:** Add global support in user roles ([#6458](https://github.com/juspay/hyperswitch/pull/6458)) ([`98b141c`](https://github.com/juspay/hyperswitch/commit/98b141c6a00e6435385e1c513b1684d58567ecee))
+
+### Bug Fixes
+
+- **payments:** Populate payment_method_type in payment_attempt for cards ([#6519](https://github.com/juspay/hyperswitch/pull/6519)) ([`574170a`](https://github.com/juspay/hyperswitch/commit/574170a357fdb0a5134354f29e46d57fa4ea5201))
+- **webhooks:** Add support for updating mandate details in webhooks flow ([#6523](https://github.com/juspay/hyperswitch/pull/6523)) ([`6eb72e9`](https://github.com/juspay/hyperswitch/commit/6eb72e923ee05361d018dcdae837b637fad03d88))
+
+### Documentation
+
+- **analytics:** Add setup instructions for currency_conversion service ([#6516](https://github.com/juspay/hyperswitch/pull/6516)) ([`31a38db`](https://github.com/juspay/hyperswitch/commit/31a38db8005e6e566c3c7330bdcfca0cbdca19eb))
+
+**Full Changelog:** [`2024.11.13.0...2024.11.14.0`](https://github.com/juspay/hyperswitch/compare/2024.11.13.0...2024.11.14.0)
+
+- - -
+
+## 2024.11.13.0
+
+### Features
+
+- **connector:** [NOMUPAY] Add template code ([#6382](https://github.com/juspay/hyperswitch/pull/6382)) ([`20a3a1c`](https://github.com/juspay/hyperswitch/commit/20a3a1c2d6bb93fb4dae7f7eb669ebd85e631c96))
+- **events:** Add payment reject audit events ([#6465](https://github.com/juspay/hyperswitch/pull/6465)) ([`6b029ab`](https://github.com/juspay/hyperswitch/commit/6b029ab195670f526089a708e7aa807f58a5de7d))
+
+### Bug Fixes
+
+- Trustpay `eps` redirection in cypress ([#6529](https://github.com/juspay/hyperswitch/pull/6529)) ([`7f4f55b`](https://github.com/juspay/hyperswitch/commit/7f4f55b63af86cab11421f8ed2979a4ec90b8a44))
+
+### Refactors
+
+- **routing:** Remove payment_id from dynamic_routing metrics ([#6535](https://github.com/juspay/hyperswitch/pull/6535)) ([`c484beb`](https://github.com/juspay/hyperswitch/commit/c484beb039de4fa2df8d803ad000b4d352ce4c13))
+- Move Payout traits to hyperswitch_interfaces for connectors crate ([#6481](https://github.com/juspay/hyperswitch/pull/6481)) ([`6808272`](https://github.com/juspay/hyperswitch/commit/6808272de305c685b7cf948060f006d39cbac60b))
+
+### Documentation
+
+- **api-reference:** Remove redundant webhooks page ([#6538](https://github.com/juspay/hyperswitch/pull/6538)) ([`548d1b0`](https://github.com/juspay/hyperswitch/commit/548d1b0c0ed9ed21fefbe8bf1289540cb4a7cec1))
+- **openapi:** Fixed API documentation for V2 ([#6496](https://github.com/juspay/hyperswitch/pull/6496)) ([`7dfcd51`](https://github.com/juspay/hyperswitch/commit/7dfcd514cf7c04c92fefc58edfc518dc4eb49bcd))
+
+**Full Changelog:** [`2024.11.12.0...2024.11.13.0`](https://github.com/juspay/hyperswitch/compare/2024.11.12.0...2024.11.13.0)
+
+- - -
+
+## 2024.11.12.0
+
+### Features
+
+- **payment_v2:** Implement payments sync ([#6464](https://github.com/juspay/hyperswitch/pull/6464)) ([`42bdf47`](https://github.com/juspay/hyperswitch/commit/42bdf47fd295c523e26b91f7ed209239d5c4b1bb))
+
+### Refactors
+
+- Explicitly specify top redirections for secure payment and payout links ([#6494](https://github.com/juspay/hyperswitch/pull/6494)) ([`0a506b1`](https://github.com/juspay/hyperswitch/commit/0a506b1729a27e47543cf24f64fbad08479d8dec))
+
+**Full Changelog:** [`2024.11.11.0...2024.11.12.0`](https://github.com/juspay/hyperswitch/compare/2024.11.11.0...2024.11.12.0)
+
+- - -
+
+## 2024.11.11.0
+
+### Features
+
+- **analytics:** Revert remove additional filters from PaymentIntentFilters ([#6492](https://github.com/juspay/hyperswitch/pull/6492)) ([`ce95b65`](https://github.com/juspay/hyperswitch/commit/ce95b6538dca4515b04ac65c2b1063bdd0a9c3a7))
+- **connector:**
+ - [AMAZON PAY] Added Template code ([#6486](https://github.com/juspay/hyperswitch/pull/6486)) ([`fe4931a`](https://github.com/juspay/hyperswitch/commit/fe4931a37e6030ea03ca83540f9a21877c7b6b34))
+ - [worldpay] add support for mandates ([#6479](https://github.com/juspay/hyperswitch/pull/6479)) ([`378ec44`](https://github.com/juspay/hyperswitch/commit/378ec44db9752020083d61a538592d5383a06b40))
+- **opensearch:** Refactor global search querybuilder and add case insensitivity opensearch filters ([#6476](https://github.com/juspay/hyperswitch/pull/6476)) ([`529f1a7`](https://github.com/juspay/hyperswitch/commit/529f1a76be2e10759b44e6cfb21a7d43bbc53109))
+- **payments:**
+ - Add audit events for PaymentApprove update ([#6432](https://github.com/juspay/hyperswitch/pull/6432)) ([`6823418`](https://github.com/juspay/hyperswitch/commit/6823418e2a6416fe964eaf756b6418738a5e74e0))
+ - Add audit events for PaymentUpdate update ([#6426](https://github.com/juspay/hyperswitch/pull/6426)) ([`1be2654`](https://github.com/juspay/hyperswitch/commit/1be2654b4fd61a9d6a9e3b3772d9bffd8f1333dc))
+- **router:** Add `start_redirection` api for three_ds flow in v2 ([#6470](https://github.com/juspay/hyperswitch/pull/6470)) ([`6f24bb4`](https://github.com/juspay/hyperswitch/commit/6f24bb4ee349683ea95cd5eb9d682d83c92a637d))
+
+### Bug Fixes
+
+- **connector:**
+ - [Novalnet] Send decoded wallet token to applepay ([#6503](https://github.com/juspay/hyperswitch/pull/6503)) ([`860a57a`](https://github.com/juspay/hyperswitch/commit/860a57ad9a679056ac66423edfc16973f497e184))
+ - [Novalnet] Add mandatory fields for wallets and card in config ([#6463](https://github.com/juspay/hyperswitch/pull/6463)) ([`3d9f443`](https://github.com/juspay/hyperswitch/commit/3d9f4432bcef8a5326d1bdabbc2be5bd0df9fd73))
+ - [fiuu]fix mandates for fiuu ([#6487](https://github.com/juspay/hyperswitch/pull/6487)) ([`bc92a2e`](https://github.com/juspay/hyperswitch/commit/bc92a2e9d9bb1ec914670ea1c2e399c9c6b8839a))
+- **docs:** Fix broken pages in API reference ([#6507](https://github.com/juspay/hyperswitch/pull/6507)) ([`21d3071`](https://github.com/juspay/hyperswitch/commit/21d3071f317e153f9ff83446c29b0f88c4bbd973))
+- **router:**
+ - Get apple pay certificates only from metadata during the session call ([#6514](https://github.com/juspay/hyperswitch/pull/6514)) ([`51b6cdf`](https://github.com/juspay/hyperswitch/commit/51b6cdfad76027f96df1e9f72b4b40ca6f2194c0))
+ - Add card expiry check in the `network_transaction_id_and_card_details` based `MIT` flow ([#6504](https://github.com/juspay/hyperswitch/pull/6504)) ([`5af532a`](https://github.com/juspay/hyperswitch/commit/5af532a1212ee0bf91bd485b0c761e38127bb76e))
+
+### Refactors
+
+- **core:** Interpolate success_based_routing config params with their specific values ([#6448](https://github.com/juspay/hyperswitch/pull/6448)) ([`d9ce42f`](https://github.com/juspay/hyperswitch/commit/d9ce42fd0cecb1eda196071da925f4f0e75a834f))
+- **payment_methods:** Refactor customer payment methods list v2 code to follow better code practices ([#6433](https://github.com/juspay/hyperswitch/pull/6433)) ([`0389ae7`](https://github.com/juspay/hyperswitch/commit/0389ae74e112dedd9d98314906820f78e4b89380))
+- **router:** Remove card exp validation for migration api ([#6460](https://github.com/juspay/hyperswitch/pull/6460)) ([`1dfcaab`](https://github.com/juspay/hyperswitch/commit/1dfcaabff8a42c0ceb52215eca558fa1b297a929))
+
+### Miscellaneous Tasks
+
+- Change serde value to strict type in payment intent domain and diesel model ([#6393](https://github.com/juspay/hyperswitch/pull/6393)) ([`a5ac69d`](https://github.com/juspay/hyperswitch/commit/a5ac69d1a77e772e430df8c4187942de44f23079))
+
+**Full Changelog:** [`2024.11.08.0...2024.11.11.0`](https://github.com/juspay/hyperswitch/compare/2024.11.08.0...2024.11.11.0)
+
+- - -
+
+## 2024.11.08.0
+
+### Features
+
+- **payments:** Add audit events for PaymentCreate update ([#6427](https://github.com/juspay/hyperswitch/pull/6427)) ([`063fe90`](https://github.com/juspay/hyperswitch/commit/063fe904c66c9af3d7ce0a82ad712eac69e41786))
+
+**Full Changelog:** [`2024.11.07.1...2024.11.08.0`](https://github.com/juspay/hyperswitch/compare/2024.11.07.1...2024.11.08.0)
+
+- - -
+
+## 2024.11.07.1
+
+### Bug Fixes
+
+- **users:** Add force rotate password on first login for non-email flow ([#6483](https://github.com/juspay/hyperswitch/pull/6483)) ([`b43033c`](https://github.com/juspay/hyperswitch/commit/b43033c2d9530d291651326cd987476e4924132b))
+
+### Refactors
+
+- **connector:** Added amount conversion framework to Wise. ([#6469](https://github.com/juspay/hyperswitch/pull/6469)) ([`1ba3d84`](https://github.com/juspay/hyperswitch/commit/1ba3d84df1e93d2286db1a262c4a67b3861b90c0))
+
+**Full Changelog:** [`2024.11.07.0...2024.11.07.1`](https://github.com/juspay/hyperswitch/compare/2024.11.07.0...2024.11.07.1)
+
+- - -
+
+## 2024.11.07.0
+
+### Features
+
+- **analytics:** Implement currency conversion to power multi-currency aggregation ([#6418](https://github.com/juspay/hyperswitch/pull/6418)) ([`01c5216`](https://github.com/juspay/hyperswitch/commit/01c5216fdd6f1d841082868cccea6054b64e9e07))
+
+### Bug Fixes
+
+- **core:** PMD Not Getting Populated for Saved Card Transactions ([#6497](https://github.com/juspay/hyperswitch/pull/6497)) ([`b8b2060`](https://github.com/juspay/hyperswitch/commit/b8b206057c5b464420a6d115a1116ef5cc695bf7))
+
+**Full Changelog:** [`2024.11.06.0...2024.11.07.0`](https://github.com/juspay/hyperswitch/compare/2024.11.06.0...2024.11.07.0)
+
+- - -
+
+## 2024.11.06.0
+
+### Features
+
+- **config:** Update vector config ([#6365](https://github.com/juspay/hyperswitch/pull/6365)) ([`2919db8`](https://github.com/juspay/hyperswitch/commit/2919db874bd84372663228f2531ba18338e039c0))
+- **connector:**
+ - [ELAVON] Template PR ([#6309](https://github.com/juspay/hyperswitch/pull/6309)) ([`b481e5c`](https://github.com/juspay/hyperswitch/commit/b481e5cb8ffe417591a2fb917f37ba72667f2fcd))
+ - [Paypal] implement vaulting for paypal wallet and cards while purchasing ([#5323](https://github.com/juspay/hyperswitch/pull/5323)) ([`22ba2db`](https://github.com/juspay/hyperswitch/commit/22ba2dbb2870471315d688147b3b53c432ce15dc))
+ - [JP MORGAN] Added Template code for cards integration ([#6467](https://github.com/juspay/hyperswitch/pull/6467)) ([`b048e39`](https://github.com/juspay/hyperswitch/commit/b048e39b5c4213752da7765834915cca6bf776f6))
+- **db:** Implement `MerchantAccountInteraface` for `Mockdb` ([#6283](https://github.com/juspay/hyperswitch/pull/6283)) ([`5f493a5`](https://github.com/juspay/hyperswitch/commit/5f493a5166aa0a0a29f9aed538cad03def657c22))
+- **nix:** Add support for running external services through services-flake ([#6377](https://github.com/juspay/hyperswitch/pull/6377)) ([`95f2e0b`](https://github.com/juspay/hyperswitch/commit/95f2e0b8c51bfe116241fc486069e10e578a5ff8))
+- **users:** Add `force_two_factor_auth` environment variable ([#6466](https://github.com/juspay/hyperswitch/pull/6466)) ([`6b66ccc`](https://github.com/juspay/hyperswitch/commit/6b66cccd02c2589bb2dad38b46f4da7e1455ca0b))
+
+### Bug Fixes
+
+- **connector:**
+ - Expiration Year Incorrectly Populated as YYYY Format in Paybox Mandates ([#6474](https://github.com/juspay/hyperswitch/pull/6474)) ([`e457ccd`](https://github.com/juspay/hyperswitch/commit/e457ccd91e60d5168e0a3283dfa325097f455076))
+ - [Cybersource] remove newline in billing address with space ([#6478](https://github.com/juspay/hyperswitch/pull/6478)) ([`7f1d345`](https://github.com/juspay/hyperswitch/commit/7f1d34571f72f63b8bb52aff995ad093e3b6d856))
+- **refunds:** Remove to schema from refund aggregate response and exclude it from open api documentation ([#6405](https://github.com/juspay/hyperswitch/pull/6405)) ([`449c9cf`](https://github.com/juspay/hyperswitch/commit/449c9cfe557b3540e4ad25e48e012b531eb232fd))
+- Replace deprecated backticks with $(...) for command substitution ([#6337](https://github.com/juspay/hyperswitch/pull/6337)) ([`1c92f58`](https://github.com/juspay/hyperswitch/commit/1c92f5843009db42778f94bc9fd915b411a93f76))
+- Lazy connection pools for dynamic routing service ([#6437](https://github.com/juspay/hyperswitch/pull/6437)) ([`71d9933`](https://github.com/juspay/hyperswitch/commit/71d99332204ddfbb3cf305c7d3bc8840d508bf47))
+
+**Full Changelog:** [`2024.11.05.0...2024.11.06.0`](https://github.com/juspay/hyperswitch/compare/2024.11.05.0...2024.11.06.0)
+
+- - -
+
+## 2024.11.05.0
+
+### Features
+
+- Add macro to generate ToEncryptable trait ([#6313](https://github.com/juspay/hyperswitch/pull/6313)) ([`19cf0f7`](https://github.com/juspay/hyperswitch/commit/19cf0f7437a8d16ee4da254d2a3e2659879be68c))
+
+### Bug Fixes
+
+- **analytics:** Add dynamic limit by clause in failure reasons metric query ([#6462](https://github.com/juspay/hyperswitch/pull/6462)) ([`8825378`](https://github.com/juspay/hyperswitch/commit/88253780d708bc1c005a87c186c4b0b14325c8a0))
+
+### Refactors
+
+- **connector:** [AIRWALLEX, MULTISAFEPAY, RAZORPAY, SHIFT4, WORLDPAY, ZSL] Move connectors from `router` to `hyperswitch_connectors` crate ([#6369](https://github.com/juspay/hyperswitch/pull/6369)) ([`72ee434`](https://github.com/juspay/hyperswitch/commit/72ee434003eef744d516343a2f803264f226d92a))
+
+**Full Changelog:** [`2024.11.04.0...2024.11.05.0`](https://github.com/juspay/hyperswitch/compare/2024.11.04.0...2024.11.05.0)
+
+- - -
+
+## 2024.11.04.0
+
+### Features
+
+- **analytics:** Add `customer_id` as filter for payment intents ([#6344](https://github.com/juspay/hyperswitch/pull/6344)) ([`d697def`](https://github.com/juspay/hyperswitch/commit/d697def0b7cad3743db9fd70d09a45921dcbea61))
+- **authz:** Make info APIs support `ParentGroup` ([#6440](https://github.com/juspay/hyperswitch/pull/6440)) ([`7dcffcc`](https://github.com/juspay/hyperswitch/commit/7dcffccf3f16de5e40f61a302beb318035c3e88b))
+- **connector:** [Paybox] Add mandates Flow for Paybox ([#6378](https://github.com/juspay/hyperswitch/pull/6378)) ([`37513e0`](https://github.com/juspay/hyperswitch/commit/37513e0f1e78f99da0accf0fee263c10ca4e03c6))
+- **cypress-test:** Include worldpay's request / response structure for test suite ([#6420](https://github.com/juspay/hyperswitch/pull/6420)) ([`8372389`](https://github.com/juspay/hyperswitch/commit/8372389671c4aefeb625365d198390df5d8f35a5))
+- **router:** Add payments get-intent API for v2 ([#6396](https://github.com/juspay/hyperswitch/pull/6396)) ([`c514608`](https://github.com/juspay/hyperswitch/commit/c514608594ebbe9894de47747b0d9fb573ab2503))
+
+### Refactors
+
+- **connector:** Add amount conversion framework to rapyd ([#6414](https://github.com/juspay/hyperswitch/pull/6414)) ([`33bc83f`](https://github.com/juspay/hyperswitch/commit/33bc83fce47c579457f1b9be0a91bb4fa13585ff))
+- **connnector:** Structure connector enums in separate files for improved team ownership ([#6459](https://github.com/juspay/hyperswitch/pull/6459)) ([`bb246e2`](https://github.com/juspay/hyperswitch/commit/bb246e27b72e9e4168c89b94e8d07d63a544b586))
+
+### Documentation
+
+- **README:** Updated the icon and repositioned the hero image ([#6445](https://github.com/juspay/hyperswitch/pull/6445)) ([`35bf5a9`](https://github.com/juspay/hyperswitch/commit/35bf5a91d9a5b2d5e476c995e679b445242218e0))
+
+### Miscellaneous Tasks
+
+- **users:** Change entity_type column of roles to non-optional ([#6435](https://github.com/juspay/hyperswitch/pull/6435)) ([`62067e4`](https://github.com/juspay/hyperswitch/commit/62067e406a01d3a17ef94a04b0ef0304ebd05a70))
+
+**Full Changelog:** [`2024.10.30.0...2024.11.04.0`](https://github.com/juspay/hyperswitch/compare/2024.10.30.0...2024.11.04.0)
+
+- - -
+
+## 2024.10.30.0
+
+### Refactors
+
+- **connector:** Add amount conversion framework to payu ([#6199](https://github.com/juspay/hyperswitch/pull/6199)) ([`11ce389`](https://github.com/juspay/hyperswitch/commit/11ce389000bf53c7f740d069f7ad2262bf5b70d6))
+
+### Documentation
+
+- Added desc. for wallets other than AP, GP ([#6452](https://github.com/juspay/hyperswitch/pull/6452)) ([`55a81eb`](https://github.com/juspay/hyperswitch/commit/55a81eb4692979036d0bfd43e445d3e1db6601e7))
+
+**Full Changelog:** [`2024.10.29.0...2024.10.30.0`](https://github.com/juspay/hyperswitch/compare/2024.10.29.0...2024.10.30.0)
+
+- - -
+
+## 2024.10.29.0
+
+### Bug Fixes
+
+- **multitenancy:** Consistently use tenant nomenclature everywhere ([#6389](https://github.com/juspay/hyperswitch/pull/6389)) ([`aecd5ee`](https://github.com/juspay/hyperswitch/commit/aecd5eea3d2dce3ccdd4784f60d076b641104b67))
+
+**Full Changelog:** [`2024.10.28.2...2024.10.29.0`](https://github.com/juspay/hyperswitch/compare/2024.10.28.2...2024.10.29.0)
+
+- - -
+
+## 2024.10.28.2
+
+### Bug Fixes
+
+- **connector:**
+ - [Novalnet] Remove webhook placeholder connector config ([#6451](https://github.com/juspay/hyperswitch/pull/6451)) ([`e33340e`](https://github.com/juspay/hyperswitch/commit/e33340e70b59e9e4f18e92fc27d8c90b3df5768b))
+ - [Adyen] Add MYR currency config ([#6442](https://github.com/juspay/hyperswitch/pull/6442)) ([`925e424`](https://github.com/juspay/hyperswitch/commit/925e4240e4ad6da1d243769b184842c0d8251a7d))
+
+**Full Changelog:** [`2024.10.28.1...2024.10.28.2`](https://github.com/juspay/hyperswitch/compare/2024.10.28.1...2024.10.28.2)
+
+- - -
+
+## 2024.10.28.1
+
+### Bug Fixes
+
+- **core:** Fix setup mandate payments to store connector mandate details ([#6446](https://github.com/juspay/hyperswitch/pull/6446)) ([`cee84cd`](https://github.com/juspay/hyperswitch/commit/cee84cdcfd6c323e8db80163f462d8e286aae600))
+
+**Full Changelog:** [`2024.10.28.0...2024.10.28.1`](https://github.com/juspay/hyperswitch/compare/2024.10.28.0...2024.10.28.1)
+
+- - -
+
+## 2024.10.28.0
+
+### Features
+
+- **connector:**
+ - [Rapyd] Use connector_response_reference_id ([#6302](https://github.com/juspay/hyperswitch/pull/6302)) ([`a845d46`](https://github.com/juspay/hyperswitch/commit/a845d46899d87ba7f3ca4386719c1934ce3da90e))
+ - [Rapyd] Use connector_request_reference_id ([#6296](https://github.com/juspay/hyperswitch/pull/6296)) ([`4105d98`](https://github.com/juspay/hyperswitch/commit/4105d98d7aca885f9c622d5b56c6dbacb85a688b))
+ - [Novalnet] Integrate Applepay wallet token flow ([#6409](https://github.com/juspay/hyperswitch/pull/6409)) ([`1d24b04`](https://github.com/juspay/hyperswitch/commit/1d24b04596e6d2f7c44b93501d56fc4fb950bd3b))
+ - [PayU] Use connector_request_reference_id ([#6360](https://github.com/juspay/hyperswitch/pull/6360)) ([`acd1530`](https://github.com/juspay/hyperswitch/commit/acd153042062dd14d5e6e266fdc73d82b78213fe))
+ - [Fiuu] Add support for cards recurring payments ([#6361](https://github.com/juspay/hyperswitch/pull/6361)) ([`4647a2f`](https://github.com/juspay/hyperswitch/commit/4647a2f6aece6b9479395fa3622b51b50d3091ee))
+- **euclid:** Add dynamic routing in core flows ([#6333](https://github.com/juspay/hyperswitch/pull/6333)) ([`ce732db`](https://github.com/juspay/hyperswitch/commit/ce732db9b2f98924a2b1d44ea5eb1000b6cbb498))
+- **router:** Move organization_id to request header from request body for v2 ([#6277](https://github.com/juspay/hyperswitch/pull/6277)) ([`aaac9aa`](https://github.com/juspay/hyperswitch/commit/aaac9aa97d1b00d50bec4e02efb0658956463398))
+- **sample_data:** Generate random disputes for sample data ([#6341](https://github.com/juspay/hyperswitch/pull/6341)) ([`e36ea18`](https://github.com/juspay/hyperswitch/commit/e36ea184ae6d1363fb1af55c790162df9f8b451c))
+- Add amount, currency and email to paze session response ([#6412](https://github.com/juspay/hyperswitch/pull/6412)) ([`a3ea62f`](https://github.com/juspay/hyperswitch/commit/a3ea62f88524a360b666cacfbc1cf239f6be8797))
+
+### Bug Fixes
+
+- **analytics:** Fix refund status filter on dashboard ([#6431](https://github.com/juspay/hyperswitch/pull/6431)) ([`d58f706`](https://github.com/juspay/hyperswitch/commit/d58f706dc3fdd5ea277eeef6de9c224fe6097b46))
+- **router:** Update request body for migrate-batch api ([#6429](https://github.com/juspay/hyperswitch/pull/6429)) ([`5307579`](https://github.com/juspay/hyperswitch/commit/53075792b372a7ca574b94058c7d72033c014bc8))
+
+### Refactors
+
+- **connector:**
+ - Add amount conversion framework to tsys ([#6282](https://github.com/juspay/hyperswitch/pull/6282)) ([`90765be`](https://github.com/juspay/hyperswitch/commit/90765bece1b12b208192e7ae4d54f4c70a301cea))
+ - [Paypal] Add support for passing shipping_cost in Payment request ([#6423](https://github.com/juspay/hyperswitch/pull/6423)) ([`b0d5c96`](https://github.com/juspay/hyperswitch/commit/b0d5c96b9918549663125681259a598698ec705c))
+ - Added amount conversion framework for klarna and change type of amount to MinorUnit for OrderDetailsWithAmount ([#4979](https://github.com/juspay/hyperswitch/pull/4979)) ([`2807622`](https://github.com/juspay/hyperswitch/commit/2807622ba671f77892a0fde42febbcffcb6c2238))
+
+**Full Changelog:** [`2024.10.25.0...2024.10.28.0`](https://github.com/juspay/hyperswitch/compare/2024.10.25.0...2024.10.28.0)
+
+- - -
+
+## 2024.10.25.0
+
+### Features
+
+- **authz:** Create a permission generator ([#6394](https://github.com/juspay/hyperswitch/pull/6394)) ([`4a0afb8`](https://github.com/juspay/hyperswitch/commit/4a0afb8213cce47cabe9e3f5d22ad1dccb02c20f))
+- **connector:**
+ - [Airwallex] Use connector_response_reference_id as reference to merchant ([#2747](https://github.com/juspay/hyperswitch/pull/2747)) ([`4b569c9`](https://github.com/juspay/hyperswitch/commit/4b569c9d5eb9b6403175c958b887d7ace4d9cbbb))
+ - [Novalnet] Integrate wallets Paypal and Googlepay ([#6370](https://github.com/juspay/hyperswitch/pull/6370)) ([`673b869`](https://github.com/juspay/hyperswitch/commit/673b8691e092e145ba211050db4f5c7e021a0ce2))
+- **payments_v2:** Add payment_confirm_intent api endpoint ([#6263](https://github.com/juspay/hyperswitch/pull/6263)) ([`c7c1e1a`](https://github.com/juspay/hyperswitch/commit/c7c1e1adabceeb0a03659bf8feb9aa06d85960ea))
+
+### Bug Fixes
+
+- **core:** Populate billing_address for payment with pm_id ([#6411](https://github.com/juspay/hyperswitch/pull/6411)) ([`8e58b56`](https://github.com/juspay/hyperswitch/commit/8e58b56b43ad2f823c51943c34aa8837297c70d6))
+- **payment_methods:** Fix merchant payment method list to retain a mca based on connector_name and mca_id ([#6408](https://github.com/juspay/hyperswitch/pull/6408)) ([`842c4a2`](https://github.com/juspay/hyperswitch/commit/842c4a2f47d4cc7b850a16abbe5431fe575f7a86))
+- **payments:** Filter total count by card-network value ([#6397](https://github.com/juspay/hyperswitch/pull/6397)) ([`ca325e9`](https://github.com/juspay/hyperswitch/commit/ca325e969b24fbbb5aa7edcdf86d5b3022291db1))
+
+### Refactors
+
+- **connector:**
+ - Add amount conversion framework to Shift4 ([#6250](https://github.com/juspay/hyperswitch/pull/6250)) ([`fbe3951`](https://github.com/juspay/hyperswitch/commit/fbe395198aea7252e9c4e3fad97956a548d07002))
+ - Add amount conversion framework to Wellsfargo ([#6298](https://github.com/juspay/hyperswitch/pull/6298)) ([`c3b0f7c`](https://github.com/juspay/hyperswitch/commit/c3b0f7c1d6ad95034535048aa50ff6abe9ed6aa0))
+
+### Documentation
+
+- **cypress:** Refactor cypress documentation for more clarity ([#6415](https://github.com/juspay/hyperswitch/pull/6415)) ([`26e0c32`](https://github.com/juspay/hyperswitch/commit/26e0c32f4da5689a1c01fbb456ac008a0b831710))
+- **openapi:** Improve `rust_locker_open_api_spec` ([#6322](https://github.com/juspay/hyperswitch/pull/6322)) ([`a31d164`](https://github.com/juspay/hyperswitch/commit/a31d1641fb9e1c9efd652c6f191f6b29c75dc69b))
+
+### Miscellaneous Tasks
+
+- Add samsung pay payment method support for cybersource ([#6424](https://github.com/juspay/hyperswitch/pull/6424)) ([`ecaf700`](https://github.com/juspay/hyperswitch/commit/ecaf70099671950287e9a6b7d30ffd02c0c5f51e))
+- Address Rust 1.82.0 clippy lints ([#6401](https://github.com/juspay/hyperswitch/pull/6401)) ([`8708a5c`](https://github.com/juspay/hyperswitch/commit/8708a5cb8f7d64a382b2fe061c725d4854ba9e92))
+
+**Full Changelog:** [`2024.10.24.0...2024.10.25.0`](https://github.com/juspay/hyperswitch/compare/2024.10.24.0...2024.10.25.0)
+
+- - -
+
+## 2024.10.24.0
+
+### Features
+
+- **analytics:** Remove additional filters from PaymentIntentFilters ([#6403](https://github.com/juspay/hyperswitch/pull/6403)) ([`4ef48c3`](https://github.com/juspay/hyperswitch/commit/4ef48c39b3ed7c1fcda9c850da766a0bdb701335))
+- **router:** Add api_models and openapi changes for refunds create api v2 ([#6385](https://github.com/juspay/hyperswitch/pull/6385)) ([`5a10e58`](https://github.com/juspay/hyperswitch/commit/5a10e5867a0f3097a40c8a6868454ff06630ed2c))
+
+### Bug Fixes
+
+- **connector_config:** Include the `payment_processing_details_at` `Hyperswitch` option only if apple pay token decryption flow is supported for the connector ([#6386](https://github.com/juspay/hyperswitch/pull/6386)) ([`af0aeee`](https://github.com/juspay/hyperswitch/commit/af0aeeea53014d8fe5c955cbad3fe8b371c44889))
+- **deployment-config:** Remove invalid currencies from worldpay filters ([#6400](https://github.com/juspay/hyperswitch/pull/6400)) ([`aee11c5`](https://github.com/juspay/hyperswitch/commit/aee11c560e427195a0d321dff19c0d33ec60ba64))
+
+### Refactors
+
+- **connector:** Move connectors Forte, Nexinets, Payeezy, Payu and Zen from Router to Hyperswitch Connector Trait ([#6261](https://github.com/juspay/hyperswitch/pull/6261)) ([`829a20c`](https://github.com/juspay/hyperswitch/commit/829a20cc933267551e49565d06eb08e03e5f13bb))
+
+**Full Changelog:** [`2024.10.23.0...2024.10.24.0`](https://github.com/juspay/hyperswitch/compare/2024.10.23.0...2024.10.24.0)
+
+- - -
+
+## 2024.10.23.0
+
+### Features
+
+- **cypress:** Execute cypress tests in parallel ([#6225](https://github.com/juspay/hyperswitch/pull/6225)) ([`f247978`](https://github.com/juspay/hyperswitch/commit/f24797834553794f341bd4f3be3afe5fcba693ed))
+
+### Refactors
+
+- **connector:** [WorldPay] propagate refusal codes as error code and messages ([#6392](https://github.com/juspay/hyperswitch/pull/6392)) ([`3d1a3cd`](https://github.com/juspay/hyperswitch/commit/3d1a3cdc8f942a3dca2e6a200bf9200366bd62f1))
+- **permissions:** Remove permissions field from permission info API response ([#6376](https://github.com/juspay/hyperswitch/pull/6376)) ([`e5710fa`](https://github.com/juspay/hyperswitch/commit/e5710fa084ed5b0a4969a63b14a7f8e3433a3c64))
+
+**Full Changelog:** [`2024.10.22.0...2024.10.23.0`](https://github.com/juspay/hyperswitch/compare/2024.10.22.0...2024.10.23.0)
+
+- - -
+
+## 2024.10.22.0
+
+### Features
+
+- **connector:** Add 3DS flow for Worldpay ([#6374](https://github.com/juspay/hyperswitch/pull/6374)) ([`b93c849`](https://github.com/juspay/hyperswitch/commit/b93c849623c46ad00fe8dfe5bed85a43c700b3c8))
+
+### Bug Fixes
+
+- **mandates:** Allow connector_mandate_detail updation in case of 'Authorized' Payments ([#6379](https://github.com/juspay/hyperswitch/pull/6379)) ([`d09a805`](https://github.com/juspay/hyperswitch/commit/d09a805c0ab4e1224a94ef64b0d75a77355bc3f3))
+
+### Refactors
+
+- **connector:** [WorldPay] migrate from modular to standard payment APIs ([#6317](https://github.com/juspay/hyperswitch/pull/6317)) ([`58296ff`](https://github.com/juspay/hyperswitch/commit/58296ffae6ff6f2f2c8f7b23dd28e92b374b9be3))
+- **router:** Introduce ApiKeyId id type ([#6324](https://github.com/juspay/hyperswitch/pull/6324)) ([`b3ce373`](https://github.com/juspay/hyperswitch/commit/b3ce373f8ecdce362296c9a4b3c3e3543e1baa6f))
+
+**Full Changelog:** [`2024.10.21.0...2024.10.22.0`](https://github.com/juspay/hyperswitch/compare/2024.10.21.0...2024.10.22.0)
+
+- - -
+
+## 2024.10.21.0
+
+### Features
+
+- **opensearch:** Add additional global search filters and create sessionizer indexes for local ([#6352](https://github.com/juspay/hyperswitch/pull/6352)) ([`2e6cd6d`](https://github.com/juspay/hyperswitch/commit/2e6cd6d31e4e3168b97427de936724de94df6415))
+
+### Bug Fixes
+
+- **router:** Make `x_merchant_domain` as required value only for session call done on web ([#6362](https://github.com/juspay/hyperswitch/pull/6362)) ([`ba6f7a8`](https://github.com/juspay/hyperswitch/commit/ba6f7a817ba3eeb8b3d6304ddd5b2baaf55733e8))
+
+### Refactors
+
+- **connector:**
+ - Added amount conversion framework for Mollie ([#6280](https://github.com/juspay/hyperswitch/pull/6280)) ([`451376e`](https://github.com/juspay/hyperswitch/commit/451376e7993839f5c93624c12833af7d47aa4e34))
+ - [Billwerk] Move connector Billwerk form Router to HyperswitchConnector Crate ([#6266](https://github.com/juspay/hyperswitch/pull/6266)) ([`3cf6210`](https://github.com/juspay/hyperswitch/commit/3cf6210176b2ecc4537b7537a28ea4c87a553794))
+ - Add amount conversion framework to opayo ([#6342](https://github.com/juspay/hyperswitch/pull/6342)) ([`91146de`](https://github.com/juspay/hyperswitch/commit/91146de2a2bc684998023535e56dee1af92fda76))
+- **core:** Populate shipping_cost in payment response ([#6351](https://github.com/juspay/hyperswitch/pull/6351)) ([`368e6b5`](https://github.com/juspay/hyperswitch/commit/368e6b53109890ca44bc352dd07ee542791e50df))
+- **users:** Update Database connection for Read only functions ([#6167](https://github.com/juspay/hyperswitch/pull/6167)) ([`fba4a02`](https://github.com/juspay/hyperswitch/commit/fba4a027dfe1c514867c54dba32079dff63609a9))
+
+### Documentation
+
+- Upload new logos ([#6368](https://github.com/juspay/hyperswitch/pull/6368)) ([`0bda934`](https://github.com/juspay/hyperswitch/commit/0bda934aca6bc53b21ab3c2be2af27219ef4f68a))
+
+**Full Changelog:** [`2024.10.18.0...2024.10.21.0`](https://github.com/juspay/hyperswitch/compare/2024.10.18.0...2024.10.21.0)
+
+- - -
+
+## 2024.10.18.0
+
+### Features
+
+- **router:** Add payments create-intent flow for v2 ([#6193](https://github.com/juspay/hyperswitch/pull/6193)) ([`afa803e`](https://github.com/juspay/hyperswitch/commit/afa803e0f9711f83b31ce53a59e867517a885963))
+- **worldpay:** Migrate to v7 ([#6109](https://github.com/juspay/hyperswitch/pull/6109)) ([`962afbd`](https://github.com/juspay/hyperswitch/commit/962afbd084458e9afb11a0278a8210edd9226a3d))
+
+### Bug Fixes
+
+- **mandates:** Handle the connector_mandate creation once and only if the payment is charged ([#6327](https://github.com/juspay/hyperswitch/pull/6327)) ([`e14a0fe`](https://github.com/juspay/hyperswitch/commit/e14a0fe8f290a697126756ba2facc58234e5d135))
+- **payments_list:** Skip count query if no filters and add logging ([#6331](https://github.com/juspay/hyperswitch/pull/6331)) ([`df2501c`](https://github.com/juspay/hyperswitch/commit/df2501ceafab6180e867953f7c298a541fcea757))
+- **router:** Set the eligible connector in the payment attempt for nti based mit flow ([#6347](https://github.com/juspay/hyperswitch/pull/6347)) ([`1a3d0a6`](https://github.com/juspay/hyperswitch/commit/1a3d0a60f4e3b07786460621c14c5aa37510b53a))
+- **users:** Add max wrong attempts for two-fa ([#6247](https://github.com/juspay/hyperswitch/pull/6247)) ([`2798f57`](https://github.com/juspay/hyperswitch/commit/2798f575605cc4439166344e57ff19b612f1304a))
+- Set headers as optional in ob flows ([#6305](https://github.com/juspay/hyperswitch/pull/6305)) ([`9576ee3`](https://github.com/juspay/hyperswitch/commit/9576ee37a6468d79afc4be280749a2176a95e63b))
+
+**Full Changelog:** [`2024.10.17.0...2024.10.18.0`](https://github.com/juspay/hyperswitch/compare/2024.10.17.0...2024.10.18.0)
+
+- - -
+
+## 2024.10.17.0
+
+### Features
+
+- **connector:** [fiuu] Add support for payment and refund webhooks ([#6315](https://github.com/juspay/hyperswitch/pull/6315)) ([`d04a87b`](https://github.com/juspay/hyperswitch/commit/d04a87be9e763034c070686cf1c2c73045650d4a))
+- **sample_data:** Extend the batch sample data interface trait for disputes ([#6293](https://github.com/juspay/hyperswitch/pull/6293)) ([`1b31c57`](https://github.com/juspay/hyperswitch/commit/1b31c57fd961d6cec5d8ef1403bf501d1dd74b52))
+- **user_role:** Add limit to `generic_user_roles_list_for_org_and_extra` ([#6191](https://github.com/juspay/hyperswitch/pull/6191)) ([`6aa6b7b`](https://github.com/juspay/hyperswitch/commit/6aa6b7bdc64a367ffaec97fa3826da6e2431ff9d))
+
+### Refactors
+
+- **cypress:** Reuse config update command ([#6197](https://github.com/juspay/hyperswitch/pull/6197)) ([`da194f3`](https://github.com/juspay/hyperswitch/commit/da194f34c6860af04d83ef69041f9e79249454ae))
+- **users:** Move hardcoded email subjects to constants ([#6110](https://github.com/juspay/hyperswitch/pull/6110)) ([`899ec23`](https://github.com/juspay/hyperswitch/commit/899ec23565f99daaad821c1ec1482b4c0cc408c5))
+
+### Documentation
+
+- Simplify README ([#6306](https://github.com/juspay/hyperswitch/pull/6306)) ([`b377227`](https://github.com/juspay/hyperswitch/commit/b3772272678dd9e93b7afc7958b3344cbfe64708))
+
+**Full Changelog:** [`2024.10.16.0...2024.10.17.0`](https://github.com/juspay/hyperswitch/compare/2024.10.16.0...2024.10.17.0)
+
+- - -
+
+## 2024.10.16.0
+
+### Features
+
+- **core:** Add payments post_session_tokens flow ([#6202](https://github.com/juspay/hyperswitch/pull/6202)) ([`53e82c3`](https://github.com/juspay/hyperswitch/commit/53e82c3faef3ee629a38180e3882a2920332a9a8))
+- **router:** Implement post_update_tracker for SessionUpdate Flow and add support for session_update_flow for Paypal ([#6299](https://github.com/juspay/hyperswitch/pull/6299)) ([`7e90031`](https://github.com/juspay/hyperswitch/commit/7e90031c68c7b93db996ee03e11c56b56a87402b))
+
+### Documentation
+
+- **README:** Remove FAQs section ([#6297](https://github.com/juspay/hyperswitch/pull/6297)) ([`d06d19f`](https://github.com/juspay/hyperswitch/commit/d06d19fc96e1a74d20e2fe3613f86d541947e0ae))
+- **error_codes:** Add unified error codes ([#6319](https://github.com/juspay/hyperswitch/pull/6319)) ([`342529e`](https://github.com/juspay/hyperswitch/commit/342529e0565baaa02f33266c3be620a9561048c8))
+
+**Full Changelog:** [`2024.10.15.0...2024.10.16.0`](https://github.com/juspay/hyperswitch/compare/2024.10.15.0...2024.10.16.0)
+
+- - -
+
+## 2024.10.15.0
+
+### Features
+
+- **analytics:** Add metrics, filters and APIs for Analytics v2 Dashboard - Payments Page ([#5870](https://github.com/juspay/hyperswitch/pull/5870)) ([`f123df9`](https://github.com/juspay/hyperswitch/commit/f123df9aa31c45b417224af73c2a98325984b3dd))
+- **connector:** [CYBERSOURCE] Add paze dashboard configs ([#6304](https://github.com/juspay/hyperswitch/pull/6304)) ([`df280f2`](https://github.com/juspay/hyperswitch/commit/df280f2574ac701a5e32b9bcae90c87cab7bc5aa))
+- **payment_methods_v2:** Delete payment method api ([#6211](https://github.com/juspay/hyperswitch/pull/6211)) ([`8e538cd`](https://github.com/juspay/hyperswitch/commit/8e538cd6b3da4a155c55ce153982bff3c59ef575))
+- **payments:** Support for card_network filter in payments list ([#5994](https://github.com/juspay/hyperswitch/pull/5994)) ([`1ac8c92`](https://github.com/juspay/hyperswitch/commit/1ac8c92c4bd2259cdd8bf755210bcb3c0eb31472))
+- **router:** Add support for Samsung pay app tokens flow ([#6257](https://github.com/juspay/hyperswitch/pull/6257)) ([`f6b0b98`](https://github.com/juspay/hyperswitch/commit/f6b0b98e0a6c07308b481715f7c9ad063a5f0de9))
+
+### Bug Fixes
+
+- **router:**
+ - Update nick_name only if card_token.card_holder_name is non empty and populate additional card_details from payment_attempt if not present in the locker ([#6308](https://github.com/juspay/hyperswitch/pull/6308)) ([`9da9c5e`](https://github.com/juspay/hyperswitch/commit/9da9c5e0ffe219a0bf6e08281b87c77eeb5c4575))
+ - Replace underscore by hyphen in Samsung pay session call ([#6311](https://github.com/juspay/hyperswitch/pull/6311)) ([`7f1bbbf`](https://github.com/juspay/hyperswitch/commit/7f1bbbfffecb74555756b0003d6a0ae940e581db))
+
+### Refactors
+
+- **connector:** [Adyen platform] api contract change for webhook ([#6281](https://github.com/juspay/hyperswitch/pull/6281)) ([`5b4a1d5`](https://github.com/juspay/hyperswitch/commit/5b4a1d5f6d7b4143116c5f1faf6cb325e4368e6d))
+- Add user agent header in outgoing webhooks ([#6289](https://github.com/juspay/hyperswitch/pull/6289)) ([`fe62b1f`](https://github.com/juspay/hyperswitch/commit/fe62b1fe2137de456a6a0e8e315fd0592c29577d))
+
+### Documentation
+
+- **v2:** Added 'X-Merchant-Id' to headers in Profile API docs ([#6291](https://github.com/juspay/hyperswitch/pull/6291)) ([`ca086d0`](https://github.com/juspay/hyperswitch/commit/ca086d0b25ee12419ebcb7250b4a6678cc33a8a6))
+
+**Full Changelog:** [`2024.10.11.0...2024.10.15.0`](https://github.com/juspay/hyperswitch/compare/2024.10.11.0...2024.10.15.0)
+
+- - -
+
+## 2024.10.11.0
+
+### Features
+
+- **router:** Add network transaction id support for mit payments ([#6245](https://github.com/juspay/hyperswitch/pull/6245)) ([`ba75a3f`](https://github.com/juspay/hyperswitch/commit/ba75a3f5a936ec981422bbe3c4fbdd9f12928615))
+
+### Refactors
+
+- Refactor(router): modify `net_amount` to be a struct in the domain model of payment_attempt and handle amount changes across all flows ([#6252](https://github.com/juspay/hyperswitch/pull/6252)) ([`5930089`](https://github.com/juspay/hyperswitch/commit/5930089682f89e1cc3e14720fcfa31de43353686))
+
+**Full Changelog:** [`2024.10.10.0...2024.10.11.0`](https://github.com/juspay/hyperswitch/compare/2024.10.10.0...2024.10.11.0)
+
+- - -
+
+
+## 2024.10.09.0
+
+### Features
+
+- **connector:**
+ - [Novalnet] add webhooks for card ([#6033](https://github.com/juspay/hyperswitch/pull/6033)) ([`d61ebef`](https://github.com/juspay/hyperswitch/commit/d61ebef14908473458ae5962a63b035ddd0b3d94))
+ - Integrate PAZE Wallet ([#6030](https://github.com/juspay/hyperswitch/pull/6030)) ([`535f2f1`](https://github.com/juspay/hyperswitch/commit/535f2f12f825be384a17fba8628d8517027bb6c6))
+
+### Bug Fixes
+
+- **connector:**
+ - [deutsche bank] add support for sepa one-off payments ([#6246](https://github.com/juspay/hyperswitch/pull/6246)) ([`4e07fe9`](https://github.com/juspay/hyperswitch/commit/4e07fe9e8a8ccc19d9e247f4da787c5bf04411ca))
+ - [Stripe] fix cashapp webhooks response deserialization failure ([#5690](https://github.com/juspay/hyperswitch/pull/5690)) ([`2ccce01`](https://github.com/juspay/hyperswitch/commit/2ccce01bf4c65559fd085dbb3ab32ef646998c17))
+ - Remove placeholder from novalnet webhooks secret ([#6268](https://github.com/juspay/hyperswitch/pull/6268)) ([`86a43b9`](https://github.com/juspay/hyperswitch/commit/86a43b9bc41a358fe133c9fdea8dde09d4965c98))
+- **euclid_wasm:** Update dependency for wasm in validate.rs ([#6262](https://github.com/juspay/hyperswitch/pull/6262)) ([`cc7c17f`](https://github.com/juspay/hyperswitch/commit/cc7c17f873efbe2818bcc472c0e2add3c836e71d))
+- **users:** Allow accepting invites for `org_admin`s ([#6253](https://github.com/juspay/hyperswitch/pull/6253)) ([`2bc21cf`](https://github.com/juspay/hyperswitch/commit/2bc21cfc5e3e6d8403bec82fde14cfd01536f406))
+
+**Full Changelog:** [`2024.10.08.0...2024.10.09.0`](https://github.com/juspay/hyperswitch/compare/2024.10.08.0...2024.10.09.0)
+
+- - -
+
+## 2024.10.08.0
+
+### Bug Fixes
+
+- **user_role:** Restrict updating user role to the same `EntityType` ([#6224](https://github.com/juspay/hyperswitch/pull/6224)) ([`b499287`](https://github.com/juspay/hyperswitch/commit/b499287f2347837bc885387bb5eb99b3fd841f63))
+- **users:** Trustpay refund url update ([#6251](https://github.com/juspay/hyperswitch/pull/6251)) ([`f4830eb`](https://github.com/juspay/hyperswitch/commit/f4830ebaae5dcc8407e420dfeb1ca981c08bc8fb))
+
+### Refactors
+
+- **dynamic_fields:** Rename sepa in dynamic fields ([#6234](https://github.com/juspay/hyperswitch/pull/6234)) ([`e44eb13`](https://github.com/juspay/hyperswitch/commit/e44eb13c6188df4863dc6f960e35b2ab6e96c064))
+
+### Documentation
+
+- Fix broken links to Running Additional Services ([#6243](https://github.com/juspay/hyperswitch/pull/6243)) ([`da6c0ff`](https://github.com/juspay/hyperswitch/commit/da6c0ff60bf059e73383ac37671c6df5c26d332c))
+
+### Miscellaneous Tasks
+
+- V2 api changes for session token endpoint ([#6032](https://github.com/juspay/hyperswitch/pull/6032)) ([`6e355f3`](https://github.com/juspay/hyperswitch/commit/6e355f34a8cef41cb9d9047f7c8792d4b46c10d8))
+
+### Build System / Dependencies
+
+- **docker-compose-development:** Address build failure of `hyperswitch-server` service ([#6217](https://github.com/juspay/hyperswitch/pull/6217)) ([`b79f75a`](https://github.com/juspay/hyperswitch/commit/b79f75a7ab9ed63a75defa2b3c5f9c170fca493e))
+
+**Full Changelog:** [`2024.10.07.0...2024.10.08.0`](https://github.com/juspay/hyperswitch/compare/2024.10.07.0...2024.10.08.0)
+
+- - -
+
+## 2024.10.07.0
+
+### Features
+
+- **opensearch:** Restrict search view access based on user roles and permissions ([#5932](https://github.com/juspay/hyperswitch/pull/5932)) ([`caa0693`](https://github.com/juspay/hyperswitch/commit/caa0693148764175201f7b1e2029fe29941cc7eb))
+
+### Bug Fixes
+
+- Add `reference` in `sepa_bank_instructions` ([#6215](https://github.com/juspay/hyperswitch/pull/6215)) ([`036a2d5`](https://github.com/juspay/hyperswitch/commit/036a2d5056134c067ec76dfd2afce4855303f5d7))
+- Batch encrypt/decrypt on merchant connector account ([#6206](https://github.com/juspay/hyperswitch/pull/6206)) ([`b713948`](https://github.com/juspay/hyperswitch/commit/b7139483bb4735b7dfaf7e659ab33a16a90af1db))
+
+### Refactors
+
+- **user_role:** Remove V1 insertion for `user_roles` and allow Invites for `org_admins` ([#6185](https://github.com/juspay/hyperswitch/pull/6185)) ([`c07ee28`](https://github.com/juspay/hyperswitch/commit/c07ee28c0a0b388ee8064a247e70484a3c4fec33))
+- **users:** Deprecate unused user APIs and stabilize v1 APIs ([#6114](https://github.com/juspay/hyperswitch/pull/6114)) ([`b2eb56e`](https://github.com/juspay/hyperswitch/commit/b2eb56e8d8589d1ae1a841a2c9e914c9d93e7993))
+
+### Documentation
+
+- Change organization_id to id in organization endpoints ([#6218](https://github.com/juspay/hyperswitch/pull/6218)) ([`939483c`](https://github.com/juspay/hyperswitch/commit/939483cebe91d16266521827e9fbd654fb060ca6))
+
+**Full Changelog:** [`2024.10.04.1...2024.10.07.0`](https://github.com/juspay/hyperswitch/compare/2024.10.04.1...2024.10.07.0)
+
+- - -
+
+## 2024.10.04.1
+
+### Features
+
+- **connector:** Add dynamic duitnow qr code, google pay and applpe pay for fiuu ([#6204](https://github.com/juspay/hyperswitch/pull/6204)) ([`2e54186`](https://github.com/juspay/hyperswitch/commit/2e54186a809e1322683a9379923ce418d05d3619))
+
+### Bug Fixes
+
+- **router:** Persist card_network if present for non co-badged cards ([#6212](https://github.com/juspay/hyperswitch/pull/6212)) ([`7564826`](https://github.com/juspay/hyperswitch/commit/75648262e7f741351c1149cd01083065d17bde7f))
+
+**Full Changelog:** [`2024.10.04.0...2024.10.04.1`](https://github.com/juspay/hyperswitch/compare/2024.10.04.0...2024.10.04.1)
+
+- - -
+
+## 2024.10.04.0
+
+### Features
+
+- **connector:** [Digital Virgo] template for integration ([#6145](https://github.com/juspay/hyperswitch/pull/6145)) ([`be3cf2c`](https://github.com/juspay/hyperswitch/commit/be3cf2c8693f4725e8c8ebd59412385dd4dcb7a1))
+- **router:** Add profile level auto retries config support ([#6200](https://github.com/juspay/hyperswitch/pull/6200)) ([`5648977`](https://github.com/juspay/hyperswitch/commit/56489771e403864602adff5f954d1f59c65764c3))
+
+### Bug Fixes
+
+- **bug:** [IATAPAY] Fix PCM value for UPI_COLLECT ([#6207](https://github.com/juspay/hyperswitch/pull/6207)) ([`81e3d9d`](https://github.com/juspay/hyperswitch/commit/81e3d9df901d1b874dcbd5cd01f0b5532ae981a1))
+- **payment_intent:** Batch encrypt and decrypt payment intent ([#6164](https://github.com/juspay/hyperswitch/pull/6164)) ([`369939a`](https://github.com/juspay/hyperswitch/commit/369939a37385fe85fd3430d9be0b7b0698962625))
+
+**Full Changelog:** [`2024.10.03.0...2024.10.04.0`](https://github.com/juspay/hyperswitch/compare/2024.10.03.0...2024.10.04.0)
+
+- - -
+
+## 2024.10.03.0
+
+### Features
+
+- **connector:** [Nexixpay] add Payment & Refunds flows for cards ([#5864](https://github.com/juspay/hyperswitch/pull/5864)) ([`602f50b`](https://github.com/juspay/hyperswitch/commit/602f50b939f320ea9d85dff28dfe3f5c65afeb70))
+
+**Full Changelog:** [`2024.10.02.0...2024.10.03.0`](https://github.com/juspay/hyperswitch/compare/2024.10.02.0...2024.10.03.0)
+
+- - -
+
+## 2024.10.02.0
+
+### Refactors
+
+- **connector:** Move connector Dlocal and Square from router to hyperswitch_connector crate ([#6156](https://github.com/juspay/hyperswitch/pull/6156)) ([`0508025`](https://github.com/juspay/hyperswitch/commit/05080259132fb12cdef40a999bd02b6fe2beeeaa))
+
+### Miscellaneous Tasks
+
+- Intoduce GenericError enum variant in enum ConnectorError ([#6143](https://github.com/juspay/hyperswitch/pull/6143)) ([`b694171`](https://github.com/juspay/hyperswitch/commit/b694171bab2f9d18d4e50bcc106da98ea5713297))
+
+**Full Changelog:** [`2024.10.01.0...2024.10.02.0`](https://github.com/juspay/hyperswitch/compare/2024.10.01.0...2024.10.02.0)
+
+- - -
+
## 2024.10.01.0
### Features
diff --git a/Cargo.lock b/Cargo.lock
index d90c577152d0..e34c80bd9278 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -353,6 +353,7 @@ dependencies = [
"bigdecimal",
"common_enums",
"common_utils",
+ "currency_conversion",
"diesel_models",
"error-stack",
"futures 0.3.30",
@@ -363,6 +364,7 @@ dependencies = [
"opensearch",
"reqwest 0.11.27",
"router_env",
+ "rust_decimal",
"serde",
"serde_json",
"sqlx",
@@ -453,9 +455,11 @@ checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
name = "api_models"
version = "0.1.0"
dependencies = [
+ "actix-multipart",
"actix-web",
"cards",
"common_enums",
+ "common_types",
"common_utils",
"error-stack",
"euclid",
@@ -1426,34 +1430,6 @@ dependencies = [
"tracing",
]
-[[package]]
-name = "axum"
-version = "0.6.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
-dependencies = [
- "async-trait",
- "axum-core 0.3.4",
- "bitflags 1.3.2",
- "bytes 1.7.1",
- "futures-util",
- "http 0.2.12",
- "http-body 0.4.6",
- "hyper 0.14.30",
- "itoa",
- "matchit",
- "memchr",
- "mime",
- "percent-encoding",
- "pin-project-lite",
- "rustversion",
- "serde",
- "sync_wrapper 0.1.2",
- "tower",
- "tower-layer",
- "tower-service",
-]
-
[[package]]
name = "axum"
version = "0.7.5"
@@ -1461,7 +1437,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf"
dependencies = [
"async-trait",
- "axum-core 0.4.3",
+ "axum-core",
"bytes 1.7.1",
"futures-util",
"http 1.1.0",
@@ -1481,23 +1457,6 @@ dependencies = [
"tower-service",
]
-[[package]]
-name = "axum-core"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
-dependencies = [
- "async-trait",
- "bytes 1.7.1",
- "futures-util",
- "http 0.2.12",
- "http-body 0.4.6",
- "mime",
- "rustversion",
- "tower-layer",
- "tower-service",
-]
-
[[package]]
name = "axum-core"
version = "0.4.3"
@@ -1846,6 +1805,8 @@ dependencies = [
"common_utils",
"error-stack",
"masking",
+ "once_cell",
+ "regex",
"router_env",
"serde",
"serde_json",
@@ -1884,9 +1845,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
[[package]]
name = "cc"
-version = "1.1.18"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476"
+checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47"
dependencies = [
"jobserver",
"libc",
@@ -1959,6 +1920,16 @@ dependencies = [
"phf_codegen",
]
+[[package]]
+name = "chumsky"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eebd66744a15ded14960ab4ccdbfb51ad3b81f51f3f04a80adac98c985396c9"
+dependencies = [
+ "hashbrown 0.14.5",
+ "stacker",
+]
+
[[package]]
name = "ciborium"
version = "0.2.2"
@@ -2046,6 +2017,7 @@ name = "common_enums"
version = "0.1.0"
dependencies = [
"diesel",
+ "masking",
"router_derive",
"serde",
"serde_json",
@@ -2054,6 +2026,18 @@ dependencies = [
"utoipa",
]
+[[package]]
+name = "common_types"
+version = "0.1.0"
+dependencies = [
+ "common_enums",
+ "common_utils",
+ "diesel",
+ "serde",
+ "serde_json",
+ "utoipa",
+]
+
[[package]]
name = "common_utils"
version = "0.1.0"
@@ -2764,6 +2748,7 @@ version = "0.1.0"
dependencies = [
"async-bb8-diesel",
"common_enums",
+ "common_types",
"common_utils",
"diesel",
"error-stack",
@@ -2957,6 +2942,22 @@ dependencies = [
"zeroize",
]
+[[package]]
+name = "email-encoding"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60d1d33cdaede7e24091f039632eb5d3c7469fe5b066a985281a34fc70fa317f"
+dependencies = [
+ "base64 0.22.1",
+ "memchr",
+]
+
+[[package]]
+name = "email_address"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449"
+
[[package]]
name = "encoding_rs"
version = "0.8.34"
@@ -3124,17 +3125,20 @@ dependencies = [
"dyn-clone",
"error-stack",
"hex",
+ "http-body-util",
"hyper 0.14.30",
"hyper-proxy",
+ "hyper-util",
"hyperswitch_interfaces",
+ "lettre",
"masking",
"once_cell",
- "prost 0.13.2",
+ "prost",
"router_env",
"serde",
"thiserror",
"tokio 1.40.0",
- "tonic 0.12.2",
+ "tonic",
"tonic-build",
"tonic-reflection",
"tonic-types",
@@ -3692,6 +3696,12 @@ version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+[[package]]
+name = "histogram"
+version = "0.6.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cb882ccb290b8646e554b157ab0b71e64e8d5bef775cd66b6531e52d302669"
+
[[package]]
name = "hkdf"
version = "0.12.4"
@@ -3719,6 +3729,17 @@ dependencies = [
"windows-sys 0.52.0",
]
+[[package]]
+name = "hostname"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9c7c7c8ac16c798734b8a24560c1362120597c40d5e1459f09498f8f6c8f2ba"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "windows",
+]
+
[[package]]
name = "hsdev"
version = "0.1.0"
@@ -3901,18 +3922,6 @@ dependencies = [
"tokio-rustls 0.24.1",
]
-[[package]]
-name = "hyper-timeout"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
-dependencies = [
- "hyper 0.14.30",
- "pin-project-lite",
- "tokio 1.40.0",
- "tokio-io-timeout",
-]
-
[[package]]
name = "hyper-timeout"
version = "0.5.1"
@@ -3957,9 +3966,9 @@ dependencies = [
[[package]]
name = "hyper-util"
-version = "0.1.7"
+version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9"
+checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4"
dependencies = [
"bytes 1.7.1",
"futures-channel",
@@ -3970,7 +3979,6 @@ dependencies = [
"pin-project-lite",
"socket2",
"tokio 1.40.0",
- "tower",
"tower-service",
"tracing",
]
@@ -3988,26 +3996,34 @@ dependencies = [
"cards",
"common_enums",
"common_utils",
+ "encoding_rs",
"error-stack",
"hex",
"http 0.2.12",
"hyperswitch_domain_models",
"hyperswitch_interfaces",
"image",
+ "lazy_static",
"masking",
+ "mime",
"once_cell",
"qrcode",
+ "quick-xml",
"rand",
"regex",
"reqwest 0.11.27",
"ring 0.17.8",
"router_env",
+ "roxmltree",
"serde",
"serde_json",
+ "serde_qs",
"serde_urlencoded",
+ "serde_with",
"strum 0.26.3",
"time",
"url",
+ "urlencoding",
"uuid",
]
@@ -4032,6 +4048,7 @@ dependencies = [
"async-trait",
"cards",
"common_enums",
+ "common_types",
"common_utils",
"diesel_models",
"error-stack",
@@ -4102,6 +4119,124 @@ dependencies = [
"cc",
]
+[[package]]
+name = "icu_collections"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
+dependencies = [
+ "displaydoc",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locid"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
+dependencies = [
+ "displaydoc",
+ "litemap",
+ "tinystr",
+ "writeable",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locid_transform"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
+dependencies = [
+ "displaydoc",
+ "icu_locid",
+ "icu_locid_transform_data",
+ "icu_provider",
+ "tinystr",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locid_transform_data"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
+
+[[package]]
+name = "icu_normalizer"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_normalizer_data",
+ "icu_properties",
+ "icu_provider",
+ "smallvec 1.13.2",
+ "utf16_iter",
+ "utf8_iter",
+ "write16",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer_data"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
+
+[[package]]
+name = "icu_properties"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_locid_transform",
+ "icu_properties_data",
+ "icu_provider",
+ "tinystr",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_properties_data"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
+
+[[package]]
+name = "icu_provider"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
+dependencies = [
+ "displaydoc",
+ "icu_locid",
+ "icu_provider_macros",
+ "stable_deref_trait",
+ "tinystr",
+ "writeable",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_provider_macros"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.77",
+]
+
[[package]]
name = "ident_case"
version = "1.0.1"
@@ -4118,6 +4253,27 @@ dependencies = [
"unicode-normalization",
]
+[[package]]
+name = "idna"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
+dependencies = [
+ "idna_adapter",
+ "smallvec 1.13.2",
+ "utf8_iter",
+]
+
+[[package]]
+name = "idna_adapter"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71"
+dependencies = [
+ "icu_normalizer",
+ "icu_properties",
+]
+
[[package]]
name = "ignore"
version = "0.4.22"
@@ -4301,6 +4457,15 @@ dependencies = [
"either",
]
+[[package]]
+name = "itertools"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
+dependencies = [
+ "either",
+]
+
[[package]]
name = "itoa"
version = "1.0.11"
@@ -4432,6 +4597,31 @@ dependencies = [
"spin 0.9.8",
]
+[[package]]
+name = "lettre"
+version = "0.11.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0161e452348e399deb685ba05e55ee116cae9410f4f51fe42d597361444521d9"
+dependencies = [
+ "base64 0.22.1",
+ "chumsky",
+ "email-encoding",
+ "email_address",
+ "fastrand 2.1.1",
+ "futures-util",
+ "hostname",
+ "httpdate",
+ "idna 1.0.3",
+ "mime",
+ "native-tls",
+ "nom",
+ "percent-encoding",
+ "quoted_printable",
+ "socket2",
+ "tokio 1.40.0",
+ "url",
+]
+
[[package]]
name = "libc"
version = "0.2.158"
@@ -4507,6 +4697,12 @@ version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
+[[package]]
+name = "litemap"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704"
+
[[package]]
name = "local-channel"
version = "0.1.5"
@@ -4558,6 +4754,15 @@ dependencies = [
"linked-hash-map",
]
+[[package]]
+name = "lz4_flex"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75761162ae2b0e580d7e7c390558127e5f01b4194debd6221fd8c207fc80e3f5"
+dependencies = [
+ "twox-hash",
+]
+
[[package]]
name = "masking"
version = "0.1.0"
@@ -4565,6 +4770,7 @@ dependencies = [
"bytes 1.7.1",
"diesel",
"erased-serde 0.4.5",
+ "scylla",
"serde",
"serde_json",
"subtle",
@@ -4807,9 +5013,9 @@ checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03"
[[package]]
name = "mutually_exclusive_features"
-version = "0.0.3"
+version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d02c0b00610773bb7fc61d85e13d86c7858cbdf00e1a120bfc41bc055dbaa0e"
+checksum = "e94e1e6445d314f972ff7395df2de295fe51b71821694f0b0e1e79c4f12c8577"
[[package]]
name = "nanoid"
@@ -5064,6 +5270,7 @@ name = "openapi"
version = "0.1.0"
dependencies = [
"api_models",
+ "common_types",
"common_utils",
"router_env",
"serde_json",
@@ -5172,76 +5379,72 @@ dependencies = [
[[package]]
name = "opentelemetry"
-version = "0.19.0"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab70038c28ed37b97d8ed414b6429d343a8bbf44c9f79ec854f3a643029ba6d7"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "js-sys",
+ "pin-project-lite",
+ "thiserror",
+ "tracing",
+]
+
+[[package]]
+name = "opentelemetry-aws"
+version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f"
+checksum = "85eacb6bb0b662955ba69d788c979462b079e70903e29867c2303cc1305ec8de"
dependencies = [
- "opentelemetry_api",
+ "once_cell",
+ "opentelemetry",
"opentelemetry_sdk",
+ "tracing",
]
[[package]]
name = "opentelemetry-otlp"
-version = "0.12.0"
+version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8af72d59a4484654ea8eb183fea5ae4eb6a41d7ac3e3bae5f4d2a282a3a7d3ca"
+checksum = "91cf61a1868dacc576bf2b2a1c3e9ab150af7272909e80085c3173384fe11f76"
dependencies = [
"async-trait",
- "futures 0.3.30",
- "futures-util",
- "http 0.2.12",
+ "futures-core",
+ "http 1.1.0",
"opentelemetry",
"opentelemetry-proto",
- "prost 0.11.9",
+ "opentelemetry_sdk",
+ "prost",
"thiserror",
"tokio 1.40.0",
- "tonic 0.8.3",
+ "tonic",
]
[[package]]
name = "opentelemetry-proto"
-version = "0.2.0"
+version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "045f8eea8c0fa19f7d48e7bc3128a39c2e5c533d5c61298c548dfefc1064474c"
+checksum = "a6e05acbfada5ec79023c85368af14abd0b307c015e9064d249b2a950ef459a6"
dependencies = [
- "futures 0.3.30",
- "futures-util",
"opentelemetry",
- "prost 0.11.9",
- "tonic 0.8.3",
+ "opentelemetry_sdk",
+ "prost",
+ "tonic",
]
[[package]]
-name = "opentelemetry_api"
-version = "0.19.0"
+name = "opentelemetry_sdk"
+version = "0.27.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2"
+checksum = "231e9d6ceef9b0b2546ddf52335785ce41252bc7474ee8ba05bfad277be13ab8"
dependencies = [
- "fnv",
- "futures-channel",
- "futures-util",
- "indexmap 1.9.3",
- "once_cell",
- "pin-project-lite",
- "thiserror",
- "urlencoding",
-]
-
-[[package]]
-name = "opentelemetry_sdk"
-version = "0.19.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1"
-dependencies = [
- "async-trait",
- "crossbeam-channel",
- "dashmap",
- "fnv",
+ "async-trait",
"futures-channel",
"futures-executor",
"futures-util",
- "once_cell",
- "opentelemetry_api",
+ "glob",
+ "opentelemetry",
"percent-encoding",
"rand",
"thiserror",
@@ -5770,16 +5973,6 @@ dependencies = [
"unarray",
]
-[[package]]
-name = "prost"
-version = "0.11.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
-dependencies = [
- "bytes 1.7.1",
- "prost-derive 0.11.9",
-]
-
[[package]]
name = "prost"
version = "0.13.2"
@@ -5787,7 +5980,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b2ecbe40f08db5c006b5764a2645f7f3f141ce756412ac9e1dd6087e6d32995"
dependencies = [
"bytes 1.7.1",
- "prost-derive 0.13.2",
+ "prost-derive",
]
[[package]]
@@ -5798,32 +5991,19 @@ checksum = "f8650aabb6c35b860610e9cff5dc1af886c9e25073b7b1712a68972af4281302"
dependencies = [
"bytes 1.7.1",
"heck 0.5.0",
- "itertools 0.12.1",
+ "itertools 0.13.0",
"log",
"multimap",
"once_cell",
"petgraph",
"prettyplease",
- "prost 0.13.2",
+ "prost",
"prost-types",
"regex",
"syn 2.0.77",
"tempfile",
]
-[[package]]
-name = "prost-derive"
-version = "0.11.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
-dependencies = [
- "anyhow",
- "itertools 0.10.5",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
[[package]]
name = "prost-derive"
version = "0.13.2"
@@ -5831,7 +6011,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acf0c195eebb4af52c752bec4f52f645da98b6e92077a04110c7f349477ae5ac"
dependencies = [
"anyhow",
- "itertools 0.12.1",
+ "itertools 0.13.0",
"proc-macro2",
"quote",
"syn 2.0.77",
@@ -5843,7 +6023,16 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60caa6738c7369b940c3d49246a8d1749323674c65cb13010134f5c9bad5b519"
dependencies = [
- "prost 0.13.2",
+ "prost",
+]
+
+[[package]]
+name = "psm"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810"
+dependencies = [
+ "cc",
]
[[package]]
@@ -5915,6 +6104,12 @@ dependencies = [
"proc-macro2",
]
+[[package]]
+name = "quoted_printable"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "640c9bd8497b02465aeef5375144c26062e0dcd5939dfcbb0f5db76cb8c17c73"
+
[[package]]
name = "r2d2"
version = "0.8.10"
@@ -5962,6 +6157,15 @@ dependencies = [
"getrandom",
]
+[[package]]
+name = "rand_pcg"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e"
+dependencies = [
+ "rand_core",
+]
+
[[package]]
name = "rand_xorshift"
version = "0.3.0"
@@ -6358,6 +6562,7 @@ dependencies = [
"cards",
"clap",
"common_enums",
+ "common_types",
"common_utils",
"config",
"cookie 0.18.1",
@@ -6408,7 +6613,6 @@ dependencies = [
"ring 0.17.8",
"router_derive",
"router_env",
- "roxmltree",
"rust-i18n",
"rust_decimal",
"rustc-hash",
@@ -6436,6 +6640,7 @@ dependencies = [
"unicode-segmentation",
"unidecode",
"url",
+ "urlencoding",
"utoipa",
"uuid",
"validator",
@@ -6470,7 +6675,9 @@ dependencies = [
"gethostname",
"once_cell",
"opentelemetry",
+ "opentelemetry-aws",
"opentelemetry-otlp",
+ "opentelemetry_sdk",
"rustc-hash",
"serde",
"serde_json",
@@ -6882,6 +7089,65 @@ dependencies = [
"untrusted 0.9.0",
]
+[[package]]
+name = "scylla"
+version = "0.15.0"
+source = "git+https://github.com/juspay/scylla-rust-driver.git?rev=5700aa2847b25437cdd4fcf34d707aa90dca8b89#5700aa2847b25437cdd4fcf34d707aa90dca8b89"
+dependencies = [
+ "arc-swap",
+ "async-trait",
+ "byteorder",
+ "bytes 1.7.1",
+ "chrono",
+ "dashmap",
+ "futures 0.3.30",
+ "hashbrown 0.14.5",
+ "histogram",
+ "itertools 0.13.0",
+ "lazy_static",
+ "lz4_flex",
+ "rand",
+ "rand_pcg",
+ "scylla-cql",
+ "scylla-macros",
+ "smallvec 1.13.2",
+ "snap",
+ "socket2",
+ "thiserror",
+ "tokio 1.40.0",
+ "tracing",
+ "uuid",
+]
+
+[[package]]
+name = "scylla-cql"
+version = "0.4.0"
+source = "git+https://github.com/juspay/scylla-rust-driver.git?rev=5700aa2847b25437cdd4fcf34d707aa90dca8b89#5700aa2847b25437cdd4fcf34d707aa90dca8b89"
+dependencies = [
+ "async-trait",
+ "byteorder",
+ "bytes 1.7.1",
+ "lz4_flex",
+ "scylla-macros",
+ "snap",
+ "stable_deref_trait",
+ "thiserror",
+ "tokio 1.40.0",
+ "uuid",
+ "yoke",
+]
+
+[[package]]
+name = "scylla-macros"
+version = "0.7.0"
+source = "git+https://github.com/juspay/scylla-rust-driver.git?rev=5700aa2847b25437cdd4fcf34d707aa90dca8b89#5700aa2847b25437cdd4fcf34d707aa90dca8b89"
+dependencies = [
+ "darling 0.20.10",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.77",
+]
+
[[package]]
name = "sdd"
version = "3.0.2"
@@ -7305,6 +7571,12 @@ dependencies = [
"serde",
]
+[[package]]
+name = "snap"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b"
+
[[package]]
name = "socket2"
version = "0.5.7"
@@ -7559,6 +7831,25 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+[[package]]
+name = "stacker"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b"
+dependencies = [
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "psm",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
[[package]]
name = "storage_impl"
version = "0.1.0"
@@ -7976,6 +8267,16 @@ dependencies = [
"crunchy",
]
+[[package]]
+name = "tinystr"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
+dependencies = [
+ "displaydoc",
+ "zerovec",
+]
+
[[package]]
name = "tinytemplate"
version = "1.2.1"
@@ -8096,16 +8397,6 @@ dependencies = [
"log",
]
-[[package]]
-name = "tokio-io-timeout"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
-dependencies = [
- "pin-project-lite",
- "tokio 1.40.0",
-]
-
[[package]]
name = "tokio-macros"
version = "2.4.0"
@@ -8180,9 +8471,9 @@ dependencies = [
[[package]]
name = "tokio-stream"
-version = "0.1.15"
+version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af"
+checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"
dependencies = [
"futures-core",
"pin-project-lite",
@@ -8360,45 +8651,13 @@ dependencies = [
[[package]]
name = "tonic"
-version = "0.8.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb"
-dependencies = [
- "async-stream",
- "async-trait",
- "axum 0.6.20",
- "base64 0.13.1",
- "bytes 1.7.1",
- "futures-core",
- "futures-util",
- "h2 0.3.26",
- "http 0.2.12",
- "http-body 0.4.6",
- "hyper 0.14.30",
- "hyper-timeout 0.4.1",
- "percent-encoding",
- "pin-project",
- "prost 0.11.9",
- "prost-derive 0.11.9",
- "tokio 1.40.0",
- "tokio-stream",
- "tokio-util",
- "tower",
- "tower-layer",
- "tower-service",
- "tracing",
- "tracing-futures",
-]
-
-[[package]]
-name = "tonic"
-version = "0.12.2"
+version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6f6ba989e4b2c58ae83d862d3a3e27690b6e3ae630d0deb59f3697f32aa88ad"
+checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52"
dependencies = [
"async-stream",
"async-trait",
- "axum 0.7.5",
+ "axum",
"base64 0.22.1",
"bytes 1.7.1",
"h2 0.4.6",
@@ -8406,11 +8665,11 @@ dependencies = [
"http-body 1.0.1",
"http-body-util",
"hyper 1.4.1",
- "hyper-timeout 0.5.1",
+ "hyper-timeout",
"hyper-util",
"percent-encoding",
"pin-project",
- "prost 0.13.2",
+ "prost",
"socket2",
"tokio 1.40.0",
"tokio-stream",
@@ -8439,11 +8698,11 @@ version = "0.12.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b56b874eedb04f89907573b408eab1e87c1c1dce43aac6ad63742f57faa99ff"
dependencies = [
- "prost 0.13.2",
+ "prost",
"prost-types",
"tokio 1.40.0",
"tokio-stream",
- "tonic 0.12.2",
+ "tonic",
]
[[package]]
@@ -8452,9 +8711,9 @@ version = "0.12.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d967793411bc1a5392accf4731114295f0fd122865d22cde46a8584b03402b2"
dependencies = [
- "prost 0.13.2",
+ "prost",
"prost-types",
- "tonic 0.12.2",
+ "tonic",
]
[[package]]
@@ -8519,9 +8778,9 @@ dependencies = [
[[package]]
name = "tracing-actix-web"
-version = "0.7.11"
+version = "0.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ee9e39a66d9b615644893ffc1704d2a89b5b315b7fd0228ad3182ca9a306b19"
+checksum = "54a9f5c1aca50ebebf074ee665b9f99f2e84906dcf6b993a0d0090edb835166d"
dependencies = [
"actix-web",
"mutually_exclusive_features",
@@ -8576,17 +8835,6 @@ dependencies = [
"tracing",
]
-[[package]]
-name = "tracing-log"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2"
-dependencies = [
- "log",
- "once_cell",
- "tracing-core",
-]
-
[[package]]
name = "tracing-log"
version = "0.2.0"
@@ -8600,16 +8848,20 @@ dependencies = [
[[package]]
name = "tracing-opentelemetry"
-version = "0.19.0"
+version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00a39dcf9bfc1742fa4d6215253b33a6e474be78275884c216fc2a06267b3600"
+checksum = "97a971f6058498b5c0f1affa23e7ea202057a7301dbff68e968b2d578bcbd053"
dependencies = [
+ "js-sys",
"once_cell",
"opentelemetry",
+ "opentelemetry_sdk",
+ "smallvec 1.13.2",
"tracing",
"tracing-core",
- "tracing-log 0.1.4",
+ "tracing-log",
"tracing-subscriber",
+ "web-time",
]
[[package]]
@@ -8639,7 +8891,7 @@ dependencies = [
"thread_local",
"tracing",
"tracing-core",
- "tracing-log 0.2.0",
+ "tracing-log",
"tracing-serde",
]
@@ -8660,6 +8912,16 @@ version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+[[package]]
+name = "twox-hash"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
+dependencies = [
+ "cfg-if 1.0.0",
+ "static_assertions",
+]
+
[[package]]
name = "typeid"
version = "1.0.2"
@@ -8813,7 +9075,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c"
dependencies = [
"form_urlencoded",
- "idna",
+ "idna 0.5.0",
"percent-encoding",
"serde",
]
@@ -8830,6 +9092,18 @@ version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "110352d4e9076c67839003c7788d8604e24dcded13e0b375af3efaa8cf468517"
+[[package]]
+name = "utf16_iter"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"
+
+[[package]]
+name = "utf8_iter"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+
[[package]]
name = "utf8parse"
version = "0.2.2"
@@ -8875,7 +9149,7 @@ version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da339118f018cc70ebf01fafc103360528aad53717e4bf311db929cb01cb9345"
dependencies = [
- "idna",
+ "idna 0.5.0",
"once_cell",
"regex",
"serde",
@@ -9067,6 +9341,16 @@ dependencies = [
"wasm-bindgen",
]
+[[package]]
+name = "web-time"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
[[package]]
name = "webdriver"
version = "0.46.0"
@@ -9164,6 +9448,16 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+[[package]]
+name = "windows"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
+dependencies = [
+ "windows-core",
+ "windows-targets 0.52.6",
+]
+
[[package]]
name = "windows-core"
version = "0.52.0"
@@ -9403,6 +9697,18 @@ dependencies = [
"url",
]
+[[package]]
+name = "write16"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
+
+[[package]]
+name = "writeable"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
+
[[package]]
name = "ws2_32-sys"
version = "0.2.1"
@@ -9454,6 +9760,30 @@ dependencies = [
"linked-hash-map",
]
+[[package]]
+name = "yoke"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5"
+dependencies = [
+ "serde",
+ "stable_deref_trait",
+ "yoke-derive",
+ "zerofrom",
+]
+
+[[package]]
+name = "yoke-derive"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.77",
+ "synstructure 0.13.1",
+]
+
[[package]]
name = "zerocopy"
version = "0.7.35"
@@ -9475,12 +9805,55 @@ dependencies = [
"syn 2.0.77",
]
+[[package]]
+name = "zerofrom"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55"
+dependencies = [
+ "zerofrom-derive",
+]
+
+[[package]]
+name = "zerofrom-derive"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.77",
+ "synstructure 0.13.1",
+]
+
[[package]]
name = "zeroize"
version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
+[[package]]
+name = "zerovec"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
+dependencies = [
+ "yoke",
+ "zerofrom",
+ "zerovec-derive",
+]
+
+[[package]]
+name = "zerovec-derive"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.77",
+]
+
[[package]]
name = "zstd"
version = "0.13.2"
diff --git a/Cargo.toml b/Cargo.toml
index 90eb996b82b3..dc60c64f667e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -18,12 +18,16 @@ unused_qualifications = "warn"
[workspace.lints.clippy]
as_conversions = "warn"
+cloned_instead_of_copied = "warn"
+dbg_macro = "warn"
expect_used = "warn"
+fn_params_excessive_bools = "warn"
index_refutable_slice = "warn"
indexing_slicing = "warn"
large_futures = "warn"
match_on_vec_items = "warn"
missing_panics_doc = "warn"
+mod_module_files = "warn"
out_of_bounds_indexing = "warn"
panic = "warn"
panic_in_result_fn = "warn"
@@ -31,11 +35,14 @@ panicking_unwrap = "warn"
print_stderr = "warn"
print_stdout = "warn"
todo = "warn"
+trivially_copy_pass_by_ref = "warn"
unimplemented = "warn"
+unnecessary_self_imports = "warn"
unreachable = "warn"
unwrap_in_result = "warn"
unwrap_used = "warn"
use_self = "warn"
+wildcard_dependencies = "warn"
# Lints to allow
option_map_unit_fn = "allow"
diff --git a/INSTALL_dependencies.sh b/INSTALL_dependencies.sh
index 3ec36ccc66e0..e1d666b97a30 100755
--- a/INSTALL_dependencies.sh
+++ b/INSTALL_dependencies.sh
@@ -37,7 +37,7 @@ set -o nounset
# utilities
# convert semver to comparable integer
-if [[ `id -u` -ne 0 ]]; then
+if [[ "$(id -u)" -ne 0 ]]; then
print_info "requires sudo"
SUDO=sudo
else
@@ -45,10 +45,10 @@ else
fi
ver () {
- printf "%03d%03d%03d%03d" `echo "$1" | tr '.' ' '`;
+ printf "%03d%03d%03d%03d" "$(echo "$1" | tr '.' ' ')";
}
-PROGNAME=`basename $0`
+PROGNAME="$(basename $0)"
print_info () {
echo -e "$PROGNAME: $*"
}
@@ -125,10 +125,10 @@ if command -v cargo > /dev/null; then
need_cmd rustc
- RUST_VERSION=`rustc -V | cut -d " " -f 2`
+ RUST_VERSION="$(rustc -V | cut -d " " -f 2)"
- _HAVE_VERSION=`ver ${RUST_VERSION}`
- _NEED_VERSION=`ver ${RUST_MSRV}`
+ _HAVE_VERSION="$(ver ${RUST_VERSION})"
+ _NEED_VERSION="$(ver ${RUST_MSRV})"
print_info "Found rust version \"${RUST_VERSION}\". MSRV is \"${RUST_MSRV}\""
@@ -166,7 +166,7 @@ install_dep () {
$INSTALL_CMD $*
}
-if [[ ! -x "`command -v psql`" ]] || [[ ! -x "`command -v redis-server`" ]] ; then
+if [[ ! -x "$(command -v psql)" ]] || [[ ! -x "$(command -v redis-server)" ]] ; then
print_info "Missing dependencies. Trying to install"
# java has an apt which seems to mess up when we look for apt
diff --git a/Makefile b/Makefile
index e64f0c5bcb08..7614ff25ca54 100644
--- a/Makefile
+++ b/Makefile
@@ -84,7 +84,7 @@ clippy :
# make euclid-wasm
euclid-wasm:
- wasm-pack build --target web --out-dir $(ROOT_DIR)/wasm --out-name euclid $(ROOT_DIR)/crates/euclid_wasm -- --features dummy_connector
+ wasm-pack build --target web --out-dir $(ROOT_DIR)/wasm --out-name euclid $(ROOT_DIR)/crates/euclid_wasm -- --features dummy_connector,v1
# Run Rust tests of project.
#
diff --git a/README.md b/README.md
index 0428ff386946..10fdb6afc760 100644
--- a/README.md
+++ b/README.md
@@ -10,24 +10,19 @@ The single API to access payment ecosystems across 130+ countries
Try a Payment •
- For Enterprises •
- For Contributors •
Quick Setup •
Local Setup Guide (Hyperswitch App Server) •
- Fast Integration for Stripe Users •
API Docs
- Supported Features •
- Community •
+ Community and Contributions •
Bugs and feature requests •
Versioning •
- FAQs •
Copyright and License
-
+
@@ -49,55 +44,40 @@ The single API to access payment ecosystems across 130+ countries
-
-Hyperswitch is a community-led, open payments switch to enable access to the best payments infrastructure for every digital business.
+Hyperswitch is a community-led, open payments switch designed to empower digital businesses by providing fast, reliable, and affordable access to the best payments infrastructure.
-Using Hyperswitch, you can:
+Here are the components of Hyperswitch that deliver the whole solution:
-- ⬇️ **Reduce dependency** on a single processor like Stripe or Braintree
-- 🧑💻 **Reduce Dev effort** by 90% to add & maintain integrations
-- 🚀 **Improve success rates** with seamless failover and auto-retries
-- 💸 **Reduce processing fees** with smart routing
-- 🎨 **Customize payment flows** with full visibility and control
-- 🌐 **Increase business reach** with local/alternate payment methods
+* [Hyperswitch Backend](https://github.com/juspay/hyperswitch): Powering Payment Processing
-
-
+* [SDK (Frontend)](https://github.com/juspay/hyperswitch-web): Simplifying Integration and Powering the UI
-
- ⚡️ Try a Payment
-
+* [Control Centre](https://github.com/juspay/hyperswitch-control-center): Managing Operations with Ease
-To quickly experience the ease that Hyperswitch provides while handling the payment, you can signup on [hyperswitch-control-center][dashboard-link], and try a payment.
+Jump in and contribute to these repositories to help improve and expand Hyperswitch!
+
+
-Congratulations 🎉 on making your first payment with Hyperswitch.
-
- Get Started with Hyperswitch
+
+ ⚡️ Quick Setup
-### [For Enterprises][docs-link-for-enterprise]
- Hyperswitch helps enterprises in -
- - Improving profitability
- - Increasing conversion rates
- - Lowering payment costs
- - Streamlining payment operations
-
- Hyperswitch has ample features for businesses of all domains and sizes. [**Check out our offerings**][website-link].
+### Docker Compose
+
+You can run Hyperswitch on your system using Docker Compose after cloning this repository:
-### [For Contributors][contributing-guidelines]
-
- Hyperswitch is an open-source project that aims to make digital payments accessible to people across the globe like a basic utility. With the vision of developing Hyperswitch as the **Linux of Payments**, we seek support from developers worldwide.
+```shell
+git clone --depth 1 --branch latest https://github.com/juspay/hyperswitch
+cd hyperswitch
+docker compose up -d
+```
- Utilise the following resources to quickstart your journey with Hyperswitch -
- - [Guide for contributors][contributing-guidelines]
- - [Developer Docs][docs-link-for-developers]
- - [Learning Resources][learning-resources]
+This will start the app server, web client/SDK and control center.
-
- ⚡️ Quick Setup
-
+Check out the [local setup guide][local-setup-guide] for a more comprehensive
+setup, which includes the [scheduler and monitoring services][docker-compose-scheduler-monitoring].
### One-click deployment on AWS cloud
@@ -112,21 +92,6 @@ The fastest and easiest way to try Hyperswitch is via our CDK scripts
3. Follow the instructions provided on the console to successfully deploy Hyperswitch
-### Run it on your system
-
-You can run Hyperswitch on your system using Docker Compose after cloning this repository:
-
-```shell
-git clone --depth 1 --branch latest https://github.com/juspay/hyperswitch
-cd hyperswitch
-docker compose up -d
-```
-
-This will start the app server, web client and control center.
-
-Check out the [local setup guide][local-setup-guide] for a more comprehensive
-setup, which includes the [scheduler and monitoring services][docker-compose-scheduler-monitoring].
-
[docs-link-for-enterprise]: https://docs.hyperswitch.io/hyperswitch-cloud/quickstart
[docs-link-for-developers]: https://docs.hyperswitch.io/hyperswitch-open-source/overview
[contributing-guidelines]: docs/CONTRIBUTING.md
@@ -134,78 +99,24 @@ setup, which includes the [scheduler and monitoring services][docker-compose-sch
[website-link]: https://hyperswitch.io/
[learning-resources]: https://docs.hyperswitch.io/learn-more/payment-flows
[local-setup-guide]: /docs/try_local_system.md
-[docker-compose-scheduler-monitoring]: /docs/try_local_system.md#run-the-scheduler-and-monitoring-services
-
- 🔌 Fast Integration for Stripe Users
-
-
-If you are already using Stripe, integrating with Hyperswitch is fun, fast & easy.
-Try the steps below to get a feel for how quick the setup is:
+[docker-compose-scheduler-monitoring]: /docs/try_local_system.md#running-additional-services
-1. Get API keys from our [dashboard].
-2. Follow the instructions detailed on our
- [documentation page][migrate-from-stripe].
-
-[dashboard]: https://app.hyperswitch.io/register
-[migrate-from-stripe]: https://hyperswitch.io/docs/migrateFromStripe
-
-
- ✅ Supported Features
+
+ ⚡️ Try a Payment
-### 🌟 Supported Payment Processors and Methods
-
-As of Aug 2024, Hyperswitch supports 50+ payment processors and multiple global payment methods.
-In addition, we are continuously integrating new processors based on their reach and community requests.
-Our target is to support 100+ processors by H2 2024.
-You can find the latest list of payment processors, supported methods, and features [here][supported-connectors-and-features].
-
-[supported-connectors-and-features]: https://hyperswitch.io/pm-list
-
-### 🌟 Hosted Version
+To quickly experience the ease of Hyperswitch, sign up on the [Hyperswitch Control Center](https://app.hyperswitch.io/) and try a payment. Once you've completed your first transaction, you’ve successfully made your first payment with Hyperswitch!
-In addition to all the features of the open-source product, our hosted version
-provides features and support to manage your payment infrastructure, compliance,
-analytics, and operations end-to-end:
-
-- **System Performance & Reliability**
-
- - Scalable to support 50000 tps
- - System uptime of up to 99.99%
- - Deployment with very low latency
- - Hosting option with AWS or GCP
-
-- **Value Added Services**
-
- - Compliance Support, incl. PCI, GDPR, Card Vault etc
- - Customise the integration or payment experience
- - Control Center with elaborate analytics and reporting
- - Integration with Risk Management Solutions
- - Integration with other platforms like Subscription, E-commerce, Accounting,
- etc.
-
-- **Enterprise Support**
-
- - 24x7 Email / On-call Support
- - Dedicated Relationship Manager
- - Custom dashboards with deep analytics, alerts, and reporting
- - Expert team to consult and improve business metrics
-
-You can [try the hosted version in our sandbox][dashboard].
+
+
+
-
+Join our Conversation in [Slack](https://join.slack.com/t/hyperswitch-io/shared_invite/zt-2jqxmpsbm-WXUENx022HjNEy~Ark7Orw), [Discord](https://discord.gg/wJZ7DVW8mm), [Twitter](https://x.com/hyperswitchio)
-
💪 Join us in building Hyperswitch
@@ -237,61 +148,7 @@ reusable core and let companies build and customise it as per their specific req
Security and Performance SLAs.
5. Maximise Value Creation: For developers, customers & partners.
-### 🤍 Contributing
-
-This project is being created and maintained by [Juspay](https://juspay.in),
-South Asia's largest payments orchestrator/switch, processing more than 50
-Million transactions per day. The solution has 1Mn+ lines of Haskell code built
-over ten years.
-Hyperswitch leverages our experience in building large-scale, enterprise-grade &
-frictionless payment solutions.
-It is built afresh for the global markets as an open-source product in Rust.
-We are long-term committed to building and making it useful for the community.
-
-The product roadmap is open for the community's feedback.
-We shall evolve a prioritisation process that is open and community-driven.
-We welcome contributions from the community. Please read through our
-[contributing guidelines](/docs/CONTRIBUTING.md).
-Included are directions for opening issues, coding standards, and notes on
-development.
-
-- We appreciate all types of contributions: code, documentation, demo creation, or some new way you want to contribute to us.
- We will reward every contribution with a Hyperswitch branded t-shirt.
-- 🦀 **Important note for Rust developers**: We aim for contributions from the community across a broad range of tracks.
- Hence, we have prioritised simplicity and code readability over purely idiomatic code.
- For example, some of the code in core functions (e.g., `payments_core`) is written to be more readable than pure-idiomatic.
-
-
-
-
-
-Get updates on Hyperswitch development and chat with the community:
-
-- [Discord server][discord] for questions related to contributing to hyperswitch, questions about the architecture, components, etc.
-- [Slack workspace][slack] for questions related to integrating hyperswitch, integrating a connector in hyperswitch, etc.
-- [GitHub Discussions][github-discussions] to drop feature requests or suggest anything payments-related you need for your stack.
-
-[discord]: https://discord.gg/wJZ7DVW8mm
-[slack]: https://join.slack.com/t/hyperswitch-io/shared_invite/zt-2awm23agh-p_G5xNpziv6yAiedTkkqLg
-[github-discussions]: https://github.com/juspay/hyperswitch/discussions
-
-
+This project is being created and maintained by [Juspay](https://juspay.io)
🐞 Bugs and feature requests
@@ -309,15 +166,6 @@ If your problem or idea is not addressed yet, please [open a new issue].
Check the [CHANGELOG.md](./CHANGELOG.md) file for details.
-
- 🤔 FAQs
-
-
-Got more questions?
-Please refer to our [FAQs page][faqs].
-
-[faqs]: https://hyperswitch.io/docs/devSupport
-
©️ Copyright and License
diff --git a/add_connector.md b/add_connector.md
index eda368db9c83..4d6e885b7edf 100644
--- a/add_connector.md
+++ b/add_connector.md
@@ -311,7 +311,7 @@ impl TryFrom>
let payments_response_data = types::PaymentsResponseData::TransactionResponse {
resource_id: types::ResponseId::ConnectorTransactionId(item.response.id.clone()),
redirection_data,
- mandate_reference: None,
+ mandate_reference: Box::new(None),
connector_metadata: None,
network_txn_id: None,
connector_response_reference_id: Some(
diff --git a/api-reference-v2/api-reference/api-key/api-key--create.mdx b/api-reference-v2/api-reference/api-key/api-key--create.mdx
index a92a8ea77fd3..abc1dcda10f2 100644
--- a/api-reference-v2/api-reference/api-key/api-key--create.mdx
+++ b/api-reference-v2/api-reference/api-key/api-key--create.mdx
@@ -1,3 +1,3 @@
---
-openapi: post /v2/api_keys
+openapi: post /v2/api-keys
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/api-key/api-key--list.mdx b/api-reference-v2/api-reference/api-key/api-key--list.mdx
index 5975e9bd6cab..fb84b35fbc7c 100644
--- a/api-reference-v2/api-reference/api-key/api-key--list.mdx
+++ b/api-reference-v2/api-reference/api-key/api-key--list.mdx
@@ -1,3 +1,3 @@
---
-openapi: get /v2/api_keys/list
+openapi: get /v2/api-keys/list
---
diff --git a/api-reference-v2/api-reference/api-key/api-key--retrieve.mdx b/api-reference-v2/api-reference/api-key/api-key--retrieve.mdx
index 13b87953f1b7..728643633576 100644
--- a/api-reference-v2/api-reference/api-key/api-key--retrieve.mdx
+++ b/api-reference-v2/api-reference/api-key/api-key--retrieve.mdx
@@ -1,3 +1,3 @@
---
-openapi: get /v2/api_keys/{key_id}
+openapi: get /v2/api-keys/{id}
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/api-key/api-key--revoke.mdx b/api-reference-v2/api-reference/api-key/api-key--revoke.mdx
index 37a9c9fcc092..b7ffd42e4493 100644
--- a/api-reference-v2/api-reference/api-key/api-key--revoke.mdx
+++ b/api-reference-v2/api-reference/api-key/api-key--revoke.mdx
@@ -1,3 +1,3 @@
---
-openapi: delete /v2/api_keys/{key_id}
+openapi: delete /v2/api-keys/{id}
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/api-key/api-key--update.mdx b/api-reference-v2/api-reference/api-key/api-key--update.mdx
index 8d1b6e2ee115..2434e4981fc6 100644
--- a/api-reference-v2/api-reference/api-key/api-key--update.mdx
+++ b/api-reference-v2/api-reference/api-key/api-key--update.mdx
@@ -1,3 +1,3 @@
---
-openapi: put /v2/api_keys/{key_id}
+openapi: put /v2/api-keys/{id}
---
diff --git a/api-reference-v2/api-reference/business-profile/merchant-connector--list.mdx b/api-reference-v2/api-reference/business-profile/merchant-connector--list.mdx
index 6560f45e5fa2..93c5a980c27e 100644
--- a/api-reference-v2/api-reference/business-profile/merchant-connector--list.mdx
+++ b/api-reference-v2/api-reference/business-profile/merchant-connector--list.mdx
@@ -1,3 +1,3 @@
---
-openapi: get /v2/profiles/{profile_id}/connector_accounts
+openapi: get /v2/profiles/{profile_id}/connector-accounts
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/business-profile/profile--connector-accounts-list.mdx b/api-reference-v2/api-reference/business-profile/profile--connector-accounts-list.mdx
new file mode 100644
index 000000000000..55218be7c0b4
--- /dev/null
+++ b/api-reference-v2/api-reference/business-profile/profile--connector-accounts-list.mdx
@@ -0,0 +1,3 @@
+---
+openapi: get /v2/profiles/{id}/connector-accounts
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/connector-account/connector-account--create.mdx b/api-reference-v2/api-reference/connector-account/connector-account--create.mdx
new file mode 100644
index 000000000000..d672d6fa34dc
--- /dev/null
+++ b/api-reference-v2/api-reference/connector-account/connector-account--create.mdx
@@ -0,0 +1,3 @@
+---
+openapi: post /v2/connector-accounts
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/connector-account/connector-account--delete.mdx b/api-reference-v2/api-reference/connector-account/connector-account--delete.mdx
new file mode 100644
index 000000000000..15fdd6644126
--- /dev/null
+++ b/api-reference-v2/api-reference/connector-account/connector-account--delete.mdx
@@ -0,0 +1,3 @@
+---
+openapi: delete /v2/connector-accounts/{id}
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/connector-account/connector-account--retrieve.mdx b/api-reference-v2/api-reference/connector-account/connector-account--retrieve.mdx
new file mode 100644
index 000000000000..dbd26b9b10b1
--- /dev/null
+++ b/api-reference-v2/api-reference/connector-account/connector-account--retrieve.mdx
@@ -0,0 +1,3 @@
+---
+openapi: get /v2/connector-accounts/{id}
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/connector-account/connector-account--update.mdx b/api-reference-v2/api-reference/connector-account/connector-account--update.mdx
new file mode 100644
index 000000000000..fe864d538f8f
--- /dev/null
+++ b/api-reference-v2/api-reference/connector-account/connector-account--update.mdx
@@ -0,0 +1,3 @@
+---
+openapi: put /v2/connector-accounts/{id}
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/customers/customers--create.mdx b/api-reference-v2/api-reference/customers/customers--create.mdx
index c53a4cd62097..1d517ca26fc8 100644
--- a/api-reference-v2/api-reference/customers/customers--create.mdx
+++ b/api-reference-v2/api-reference/customers/customers--create.mdx
@@ -1,3 +1,3 @@
---
openapi: post /v2/customers
----
\ No newline at end of file
+---
diff --git a/api-reference-v2/api-reference/customers/customers--delete.mdx b/api-reference-v2/api-reference/customers/customers--delete.mdx
index eee5cffd5972..5d642f125f34 100644
--- a/api-reference-v2/api-reference/customers/customers--delete.mdx
+++ b/api-reference-v2/api-reference/customers/customers--delete.mdx
@@ -1,3 +1,3 @@
---
openapi: delete /v2/customers/{id}
----
\ No newline at end of file
+---
diff --git a/api-reference-v2/api-reference/customers/customers--list.mdx b/api-reference-v2/api-reference/customers/customers--list.mdx
index 432370e119a8..ae0d884e308e 100644
--- a/api-reference-v2/api-reference/customers/customers--list.mdx
+++ b/api-reference-v2/api-reference/customers/customers--list.mdx
@@ -1,3 +1,3 @@
---
openapi: get /v2/customers/list
----
\ No newline at end of file
+---
diff --git a/api-reference-v2/api-reference/customers/customers--retrieve.mdx b/api-reference-v2/api-reference/customers/customers--retrieve.mdx
index e89fe53d42a6..16f8a062553c 100644
--- a/api-reference-v2/api-reference/customers/customers--retrieve.mdx
+++ b/api-reference-v2/api-reference/customers/customers--retrieve.mdx
@@ -1,3 +1,3 @@
---
openapi: get /v2/customers/{id}
----
\ No newline at end of file
+---
diff --git a/api-reference-v2/api-reference/customers/customers--update.mdx b/api-reference-v2/api-reference/customers/customers--update.mdx
index 65433d8fad47..8d4bed86c97a 100644
--- a/api-reference-v2/api-reference/customers/customers--update.mdx
+++ b/api-reference-v2/api-reference/customers/customers--update.mdx
@@ -1,3 +1,3 @@
---
-openapi: post /v2/customers/{id}
----
\ No newline at end of file
+openapi: put /v2/customers/{id}
+---
diff --git a/api-reference-v2/api-reference/merchant-account/business-profile--list.mdx b/api-reference-v2/api-reference/merchant-account/business-profile--list.mdx
index e14bc0d6ef34..069bd602ddf4 100644
--- a/api-reference-v2/api-reference/merchant-account/business-profile--list.mdx
+++ b/api-reference-v2/api-reference/merchant-account/business-profile--list.mdx
@@ -1,3 +1,3 @@
---
-openapi: get /v2/merchant_accounts/{account_id}/profiles
+openapi: get /v2/merchant-accounts/{id}/profiles
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/merchant-account/merchant-account--create.mdx b/api-reference-v2/api-reference/merchant-account/merchant-account--create.mdx
index d870b811aae8..38aed603f62e 100644
--- a/api-reference-v2/api-reference/merchant-account/merchant-account--create.mdx
+++ b/api-reference-v2/api-reference/merchant-account/merchant-account--create.mdx
@@ -1,3 +1,3 @@
---
-openapi: post /v2/merchant_accounts
+openapi: post /v2/merchant-accounts
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/merchant-account/merchant-account--profile-list.mdx b/api-reference-v2/api-reference/merchant-account/merchant-account--profile-list.mdx
new file mode 100644
index 000000000000..069bd602ddf4
--- /dev/null
+++ b/api-reference-v2/api-reference/merchant-account/merchant-account--profile-list.mdx
@@ -0,0 +1,3 @@
+---
+openapi: get /v2/merchant-accounts/{id}/profiles
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/merchant-account/merchant-account--retrieve.mdx b/api-reference-v2/api-reference/merchant-account/merchant-account--retrieve.mdx
index d082565234e8..3b744fb14063 100644
--- a/api-reference-v2/api-reference/merchant-account/merchant-account--retrieve.mdx
+++ b/api-reference-v2/api-reference/merchant-account/merchant-account--retrieve.mdx
@@ -1,3 +1,3 @@
---
-openapi: get /v2/merchant_accounts/{id}
+openapi: get /v2/merchant-accounts/{id}
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/merchant-account/merchant-account--update.mdx b/api-reference-v2/api-reference/merchant-account/merchant-account--update.mdx
index 51f80ceea302..eb2e92d0652f 100644
--- a/api-reference-v2/api-reference/merchant-account/merchant-account--update.mdx
+++ b/api-reference-v2/api-reference/merchant-account/merchant-account--update.mdx
@@ -1,3 +1,3 @@
---
-openapi: put /v2/merchant_accounts/{id}
+openapi: put /v2/merchant-accounts/{id}
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/merchant-account/profile--list.mdx b/api-reference-v2/api-reference/merchant-account/profile--list.mdx
deleted file mode 100644
index e14bc0d6ef34..000000000000
--- a/api-reference-v2/api-reference/merchant-account/profile--list.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /v2/merchant_accounts/{account_id}/profiles
----
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/merchant-connector-account/connector-account--create.mdx b/api-reference-v2/api-reference/merchant-connector-account/connector-account--create.mdx
new file mode 100644
index 000000000000..d672d6fa34dc
--- /dev/null
+++ b/api-reference-v2/api-reference/merchant-connector-account/connector-account--create.mdx
@@ -0,0 +1,3 @@
+---
+openapi: post /v2/connector-accounts
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/merchant-connector-account/connector-account--retrieve.mdx b/api-reference-v2/api-reference/merchant-connector-account/connector-account--retrieve.mdx
new file mode 100644
index 000000000000..dbd26b9b10b1
--- /dev/null
+++ b/api-reference-v2/api-reference/merchant-connector-account/connector-account--retrieve.mdx
@@ -0,0 +1,3 @@
+---
+openapi: get /v2/connector-accounts/{id}
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/merchant-connector-account/connector-account--update.mdx b/api-reference-v2/api-reference/merchant-connector-account/connector-account--update.mdx
new file mode 100644
index 000000000000..fe864d538f8f
--- /dev/null
+++ b/api-reference-v2/api-reference/merchant-connector-account/connector-account--update.mdx
@@ -0,0 +1,3 @@
+---
+openapi: put /v2/connector-accounts/{id}
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/merchant-connector-account/merchant-connector--create.mdx b/api-reference-v2/api-reference/merchant-connector-account/merchant-connector--create.mdx
deleted file mode 100644
index d8cac2bab392..000000000000
--- a/api-reference-v2/api-reference/merchant-connector-account/merchant-connector--create.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: post /v2/connector_accounts
----
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/merchant-connector-account/merchant-connector--delete.mdx b/api-reference-v2/api-reference/merchant-connector-account/merchant-connector--delete.mdx
index 5c959648fffc..15fdd6644126 100644
--- a/api-reference-v2/api-reference/merchant-connector-account/merchant-connector--delete.mdx
+++ b/api-reference-v2/api-reference/merchant-connector-account/merchant-connector--delete.mdx
@@ -1,3 +1,3 @@
---
-openapi: delete /v2/connector_accounts/{id}
+openapi: delete /v2/connector-accounts/{id}
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/merchant-connector-account/merchant-connector--retrieve.mdx b/api-reference-v2/api-reference/merchant-connector-account/merchant-connector--retrieve.mdx
deleted file mode 100644
index 918de0312769..000000000000
--- a/api-reference-v2/api-reference/merchant-connector-account/merchant-connector--retrieve.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: get /v2/connector_accounts/{id}
----
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/merchant-connector-account/merchant-connector--update.mdx b/api-reference-v2/api-reference/merchant-connector-account/merchant-connector--update.mdx
deleted file mode 100644
index 6ccd052fb9bf..000000000000
--- a/api-reference-v2/api-reference/merchant-connector-account/merchant-connector--update.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-openapi: put /v2/connector_accounts/{id}
----
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/organization/organization--merchant-account--list.mdx b/api-reference-v2/api-reference/organization/organization--merchant-account--list.mdx
index 4057e7e18e5d..9a03e8713d12 100644
--- a/api-reference-v2/api-reference/organization/organization--merchant-account--list.mdx
+++ b/api-reference-v2/api-reference/organization/organization--merchant-account--list.mdx
@@ -1,3 +1,3 @@
---
-openapi: get /v2/organization/{organization_id}/merchant_accounts
+openapi: get /v2/organization/{id}/merchant-accounts
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/organization/organization--retrieve.mdx b/api-reference-v2/api-reference/organization/organization--retrieve.mdx
index 5cd3175b04f7..ba06f4cfb66b 100644
--- a/api-reference-v2/api-reference/organization/organization--retrieve.mdx
+++ b/api-reference-v2/api-reference/organization/organization--retrieve.mdx
@@ -1,3 +1,3 @@
---
-openapi: get /v2/organization/{organization_id}
+openapi: get /v2/organization/{id}
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/organization/organization--update.mdx b/api-reference-v2/api-reference/organization/organization--update.mdx
index 1ac924b71bcb..c365eb093f76 100644
--- a/api-reference-v2/api-reference/organization/organization--update.mdx
+++ b/api-reference-v2/api-reference/organization/organization--update.mdx
@@ -1,3 +1,3 @@
---
-openapi: put /v2/organization/{organization_id}
+openapi: put /v2/organization/{id}
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payment-methods/list-customer-saved-payment-methods-for-a-payment.mdx b/api-reference-v2/api-reference/payment-methods/list-customer-saved-payment-methods-for-a-payment.mdx
new file mode 100644
index 000000000000..7809830b820b
--- /dev/null
+++ b/api-reference-v2/api-reference/payment-methods/list-customer-saved-payment-methods-for-a-payment.mdx
@@ -0,0 +1,3 @@
+---
+openapi: get /v2/payments/{id}/saved-payment-methods
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payment-methods/list-payment-methods-for-a-customer.mdx b/api-reference-v2/api-reference/payment-methods/list-payment-methods-for-a-customer.mdx
new file mode 100644
index 000000000000..ef5a27f9604d
--- /dev/null
+++ b/api-reference-v2/api-reference/payment-methods/list-payment-methods-for-a-customer.mdx
@@ -0,0 +1,3 @@
+---
+openapi: get /v2/customers/{id}/saved-payment-methods
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payment-methods/list-saved-payment-methods-for-a-customer.mdx b/api-reference-v2/api-reference/payment-methods/list-saved-payment-methods-for-a-customer.mdx
new file mode 100644
index 000000000000..ef5a27f9604d
--- /dev/null
+++ b/api-reference-v2/api-reference/payment-methods/list-saved-payment-methods-for-a-customer.mdx
@@ -0,0 +1,3 @@
+---
+openapi: get /v2/customers/{id}/saved-payment-methods
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payment-methods/payment-method--confirm-intent.mdx b/api-reference-v2/api-reference/payment-methods/payment-method--confirm-intent.mdx
new file mode 100644
index 000000000000..134374a7b6c1
--- /dev/null
+++ b/api-reference-v2/api-reference/payment-methods/payment-method--confirm-intent.mdx
@@ -0,0 +1,3 @@
+---
+openapi: post /v2/payment-methods/{id}/confirm-intent
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payment-methods/payment-method--create-intent.mdx b/api-reference-v2/api-reference/payment-methods/payment-method--create-intent.mdx
new file mode 100644
index 000000000000..42cf716f2ab9
--- /dev/null
+++ b/api-reference-v2/api-reference/payment-methods/payment-method--create-intent.mdx
@@ -0,0 +1,3 @@
+---
+openapi: post /v2/payment-methods/create-intent
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payment-methods/payment-method--create.mdx b/api-reference-v2/api-reference/payment-methods/payment-method--create.mdx
new file mode 100644
index 000000000000..1dce5179a94d
--- /dev/null
+++ b/api-reference-v2/api-reference/payment-methods/payment-method--create.mdx
@@ -0,0 +1,3 @@
+---
+openapi: post /v2/payment-methods
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payment-methods/payment-method--delete.mdx b/api-reference-v2/api-reference/payment-methods/payment-method--delete.mdx
new file mode 100644
index 000000000000..210bf843f97e
--- /dev/null
+++ b/api-reference-v2/api-reference/payment-methods/payment-method--delete.mdx
@@ -0,0 +1,3 @@
+---
+openapi: delete /v2/payment-methods/{id}
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payment-methods/payment-method--retrieve.mdx b/api-reference-v2/api-reference/payment-methods/payment-method--retrieve.mdx
new file mode 100644
index 000000000000..957d9760b3f3
--- /dev/null
+++ b/api-reference-v2/api-reference/payment-methods/payment-method--retrieve.mdx
@@ -0,0 +1,3 @@
+---
+openapi: get /v2/payment-methods/{id}
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payment-methods/payment-method--update.mdx b/api-reference-v2/api-reference/payment-methods/payment-method--update.mdx
new file mode 100644
index 000000000000..0adee195a6fa
--- /dev/null
+++ b/api-reference-v2/api-reference/payment-methods/payment-method--update.mdx
@@ -0,0 +1,3 @@
+---
+openapi: patch /v2/payment-methods/{id}/update-saved-payment-method
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payments/payments--confirm-intent.mdx b/api-reference-v2/api-reference/payments/payments--confirm-intent.mdx
new file mode 100644
index 000000000000..58624c2771b9
--- /dev/null
+++ b/api-reference-v2/api-reference/payments/payments--confirm-intent.mdx
@@ -0,0 +1,3 @@
+---
+openapi: post /v2/payments/{id}/confirm-intent
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payments/payments--get-intent.mdx b/api-reference-v2/api-reference/payments/payments--get-intent.mdx
new file mode 100644
index 000000000000..cd1321be217e
--- /dev/null
+++ b/api-reference-v2/api-reference/payments/payments--get-intent.mdx
@@ -0,0 +1,3 @@
+---
+openapi: get /v2/payments/{id}/get-intent
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payments/payments--get.mdx b/api-reference-v2/api-reference/payments/payments--get.mdx
new file mode 100644
index 000000000000..7b5f7f68dae8
--- /dev/null
+++ b/api-reference-v2/api-reference/payments/payments--get.mdx
@@ -0,0 +1,3 @@
+---
+openapi: get /v2/payments/{id}
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payments/payments--payment-methods-list.mdx b/api-reference-v2/api-reference/payments/payments--payment-methods-list.mdx
new file mode 100644
index 000000000000..87e2a93586cc
--- /dev/null
+++ b/api-reference-v2/api-reference/payments/payments--payment-methods-list.mdx
@@ -0,0 +1,3 @@
+---
+openapi: get /v2/payments/{id}/payment-methods
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payments/payments--session-token.mdx b/api-reference-v2/api-reference/payments/payments--session-token.mdx
new file mode 100644
index 000000000000..615bafcc03d5
--- /dev/null
+++ b/api-reference-v2/api-reference/payments/payments--session-token.mdx
@@ -0,0 +1,3 @@
+---
+openapi: post /v2/payments/{payment_id}/create-external-sdk-tokens
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/payments/payments--update-intent.mdx b/api-reference-v2/api-reference/payments/payments--update-intent.mdx
new file mode 100644
index 000000000000..3ef58f4db721
--- /dev/null
+++ b/api-reference-v2/api-reference/payments/payments--update-intent.mdx
@@ -0,0 +1,3 @@
+---
+openapi: put /v2/payments/{id}/update-intent
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/profile/merchant-connector--list.mdx b/api-reference-v2/api-reference/profile/merchant-connector--list.mdx
index 6560f45e5fa2..55218be7c0b4 100644
--- a/api-reference-v2/api-reference/profile/merchant-connector--list.mdx
+++ b/api-reference-v2/api-reference/profile/merchant-connector--list.mdx
@@ -1,3 +1,3 @@
---
-openapi: get /v2/profiles/{profile_id}/connector_accounts
+openapi: get /v2/profiles/{id}/connector-accounts
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/profile/profile--activate-routing-algorithm.mdx b/api-reference-v2/api-reference/profile/profile--activate-routing-algorithm.mdx
index 9ff6f4fdd578..ea9ee7596a02 100644
--- a/api-reference-v2/api-reference/profile/profile--activate-routing-algorithm.mdx
+++ b/api-reference-v2/api-reference/profile/profile--activate-routing-algorithm.mdx
@@ -1,3 +1,3 @@
---
-openapi: patch /v2/profiles/{profile_id}/activate_routing_algorithm
+openapi: patch /v2/profiles/{id}/activate-routing-algorithm
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/profile/profile--deactivate-routing-algorithm.mdx b/api-reference-v2/api-reference/profile/profile--deactivate-routing-algorithm.mdx
index 5cc815612e03..4d6b2d620c66 100644
--- a/api-reference-v2/api-reference/profile/profile--deactivate-routing-algorithm.mdx
+++ b/api-reference-v2/api-reference/profile/profile--deactivate-routing-algorithm.mdx
@@ -1,3 +1,3 @@
---
-openapi: patch /v2/profiles/{profile_id}/deactivate_routing_algorithm
+openapi: patch /v2/profiles/{id}/deactivate-routing-algorithm
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/profile/profile--retrieve-active-routing-algorithm.mdx b/api-reference-v2/api-reference/profile/profile--retrieve-active-routing-algorithm.mdx
index 7aba27485eda..143837676c22 100644
--- a/api-reference-v2/api-reference/profile/profile--retrieve-active-routing-algorithm.mdx
+++ b/api-reference-v2/api-reference/profile/profile--retrieve-active-routing-algorithm.mdx
@@ -1,3 +1,3 @@
---
-openapi: get /v2/profiles/{profile_id}/routing_algorithm
+openapi: get /v2/profiles/{id}/routing-algorithm
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/profile/profile--retrieve-default-fallback-routing-algorithm.mdx b/api-reference-v2/api-reference/profile/profile--retrieve-default-fallback-routing-algorithm.mdx
index 9b1b94290777..ebaad7c53ae3 100644
--- a/api-reference-v2/api-reference/profile/profile--retrieve-default-fallback-routing-algorithm.mdx
+++ b/api-reference-v2/api-reference/profile/profile--retrieve-default-fallback-routing-algorithm.mdx
@@ -1,3 +1,3 @@
---
-openapi: get /v2/profiles/{profile_id}/fallback_routing
+openapi: get /v2/profiles/{id}/fallback-routing
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/profile/profile--retrieve.mdx b/api-reference-v2/api-reference/profile/profile--retrieve.mdx
index 235bb7d7f502..28ca1fbd1b18 100644
--- a/api-reference-v2/api-reference/profile/profile--retrieve.mdx
+++ b/api-reference-v2/api-reference/profile/profile--retrieve.mdx
@@ -1,3 +1,3 @@
---
-openapi: get /v2/profiles/{profile_id}
+openapi: get /v2/profiles/{id}
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/profile/profile--update-default-fallback-routing-algorithm.mdx b/api-reference-v2/api-reference/profile/profile--update-default-fallback-routing-algorithm.mdx
index 0ba69796a7e9..b5df6a57ef8a 100644
--- a/api-reference-v2/api-reference/profile/profile--update-default-fallback-routing-algorithm.mdx
+++ b/api-reference-v2/api-reference/profile/profile--update-default-fallback-routing-algorithm.mdx
@@ -1,3 +1,3 @@
---
-openapi: patch /v2/profiles/{profile_id}/fallback_routing
+openapi: patch /v2/profiles/{id}/fallback-routing
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/profile/profile--update.mdx b/api-reference-v2/api-reference/profile/profile--update.mdx
index bf35d0afb64a..21b50001c63e 100644
--- a/api-reference-v2/api-reference/profile/profile--update.mdx
+++ b/api-reference-v2/api-reference/profile/profile--update.mdx
@@ -1,3 +1,3 @@
---
-openapi: put /v2/profiles/{profile_id}
+openapi: put /v2/profiles/{id}
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/refunds/refunds--create.mdx b/api-reference-v2/api-reference/refunds/refunds--create.mdx
new file mode 100644
index 000000000000..fa52f18c2867
--- /dev/null
+++ b/api-reference-v2/api-reference/refunds/refunds--create.mdx
@@ -0,0 +1,3 @@
+---
+openapi: post /v2/refunds
+---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/routing/routing--create.mdx b/api-reference-v2/api-reference/routing/routing--create.mdx
index 65ef15008f24..438abd8e2316 100644
--- a/api-reference-v2/api-reference/routing/routing--create.mdx
+++ b/api-reference-v2/api-reference/routing/routing--create.mdx
@@ -1,3 +1,3 @@
---
-openapi: post /v2/routing_algorithm
+openapi: post /v2/routing-algorithm
---
\ No newline at end of file
diff --git a/api-reference-v2/api-reference/routing/routing--retrieve.mdx b/api-reference-v2/api-reference/routing/routing--retrieve.mdx
index 03f209951c03..10db0200e18d 100644
--- a/api-reference-v2/api-reference/routing/routing--retrieve.mdx
+++ b/api-reference-v2/api-reference/routing/routing--retrieve.mdx
@@ -1,3 +1,3 @@
---
-openapi: get /v2/routing_algorithm/{routing_algorithm_id}
+openapi: get /v2/routing-algorithm/{id}
---
\ No newline at end of file
diff --git a/api-reference-v2/essentials/webhooks.mdx b/api-reference-v2/essentials/webhooks.mdx
deleted file mode 100644
index 20ce3518ea72..000000000000
--- a/api-reference-v2/essentials/webhooks.mdx
+++ /dev/null
@@ -1,45 +0,0 @@
-# Webhooks
-
-Webhooks are HTTP-based real-time push notifications that Hyperswitch would use for instant status communication to your server. Webhooks are vital in payments for the following reasons:
-
-- Preventing merchants from losing business due to delayed status communication (say, in case of flight or movie reservations where there is a need for instant payment confirmation).
-- Prevent payment reconciliation issues where payments change from “Failed” to “Succeeded”.
-- Providing the best payment experience for the end-user by instantly communicating payment status and fulfilling the purchase.
-
-## Configuring Webhooks
-
-You would need to set up a dedicated HTTPS or HTTP endpoint on your server with a URL as a webhook listener that will receive push notifications in the form of a POST request with JSON payload from the Hyperswitch server
- Update the above endpoint on your Hyperswitch dashboard under Settings -> Webhooks
-In order for Hyperswitch to receive updates from the connectors you have selected, you would need to update Hyperswitch’s corresponding endpoints on your respective connector dashboard instead of your webhook endpoints
-
-
-Hyperswitch’s webhook endpoint format is as follows:
-
-| Environment | Webhook Endpoint |
-| ----------- | ---------------- |
-| Sandbox | sandbox.hyperswitch.io/webhooks/`{merchant_id}`/`{connector_name}` |
-| Production | api.hyperswitch.io/webhooks/`{merchant_id}`/`{connector_name}`|
-
-## Handling Webhooks
-
-- **Select the events for Webhooks:** On the same page on the dashboard, select the events for which you would like to receive notifications. Currently, Webhooks are available on Hyperswitch for the following events:
-
- 1. payment_succeeded
- 2. payment_failed
- 3. payment_processing
- 4. action_required
- 5. refund_succeeded
- 6. refund_failed
- 7. dispute_opened
- 8. dispute_expired
- 9. dispute_accepted
- 10. dispute_cancelled
- 11. dispute_challenged
- 12. dispute_won
- 13. dispute_lost
-
-Click [**here**](https://juspay-78.mintlify.app/api-reference/schemas/outgoing--webhook) to see the webhook payload your endpoint would need to parse for each of the above events
-
-- **Return a 2xx response:** Your server must return a successful 2xx response on successful receipt of webhooks.
-
-- **Retries:** In case of 3xx, 4xx, or 5xx response or no response from your endpoint for webhooks, Hyperswitch has a retry mechanism that tries sending the webhooks again up to 3 times before marking the event as failed.
diff --git a/api-reference-v2/logo/dark.svg b/api-reference-v2/logo/dark.svg
index fbf0d89d4106..f07be0cea141 100644
--- a/api-reference-v2/logo/dark.svg
+++ b/api-reference-v2/logo/dark.svg
@@ -1,29 +1,21 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/api-reference-v2/logo/light.svg b/api-reference-v2/logo/light.svg
index c951a909dd49..66b2c279d06f 100644
--- a/api-reference-v2/logo/light.svg
+++ b/api-reference-v2/logo/light.svg
@@ -1,29 +1,21 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/api-reference-v2/mint.json b/api-reference-v2/mint.json
index 64047f5b5660..080adae5ad1c 100644
--- a/api-reference-v2/mint.json
+++ b/api-reference-v2/mint.json
@@ -28,7 +28,6 @@
{
"group": "Essentials",
"pages": [
- "essentials/webhooks",
"essentials/error_codes",
"essentials/rate_limit",
"essentials/go-live"
@@ -37,7 +36,26 @@
{
"group": "Payments",
"pages": [
- "api-reference/payments/payments--create-intent"
+ "api-reference/payments/payments--create-intent",
+ "api-reference/payments/payments--get-intent",
+ "api-reference/payments/payments--update-intent",
+ "api-reference/payments/payments--session-token",
+ "api-reference/payments/payments--payment-methods-list",
+ "api-reference/payments/payments--confirm-intent",
+ "api-reference/payments/payments--get"
+ ]
+ },
+ {
+ "group": "Payment Methods",
+ "pages": [
+ "api-reference/payment-methods/payment-method--create",
+ "api-reference/payment-methods/payment-method--retrieve",
+ "api-reference/payment-methods/payment-method--update",
+ "api-reference/payment-methods/payment-method--delete",
+ "api-reference/payment-methods/payment-method--create-intent",
+ "api-reference/payment-methods/payment-method--confirm-intent",
+ "api-reference/payment-methods/list-customer-saved-payment-methods-for-a-payment",
+ "api-reference/payment-methods/list-payment-methods-for-a-customer"
]
},
{
@@ -73,11 +91,11 @@
]
},
{
- "group": "Merchant Connector Account",
+ "group": "Connector Account",
"pages": [
- "api-reference/merchant-connector-account/merchant-connector--create",
- "api-reference/merchant-connector-account/merchant-connector--retrieve",
- "api-reference/merchant-connector-account/merchant-connector--update"
+ "api-reference/connector-account/connector-account--create",
+ "api-reference/connector-account/connector-account--retrieve",
+ "api-reference/connector-account/connector-account--update"
]
},
{
@@ -106,6 +124,10 @@
"api-reference/customers/customers--delete",
"api-reference/customers/customers--list"
]
+ },
+ {
+ "group": "Refunds",
+ "pages": ["api-reference/refunds/refunds--create"]
}
],
"footerSocials": {
diff --git a/api-reference-v2/openapi_spec.json b/api-reference-v2/openapi_spec.json
index 17b44a98100f..636723d808a4 100644
--- a/api-reference-v2/openapi_spec.json
+++ b/api-reference-v2/openapi_spec.json
@@ -67,7 +67,7 @@
]
}
},
- "/v2/organization/{organization_id}": {
+ "/v2/organization/{id}": {
"get": {
"tags": [
"Organization"
@@ -77,7 +77,7 @@
"operationId": "Retrieve an Organization",
"parameters": [
{
- "name": "organization_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the Organization",
"required": true,
@@ -116,7 +116,7 @@
"operationId": "Update an Organization",
"parameters": [
{
- "name": "organization_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the Organization",
"required": true,
@@ -164,7 +164,7 @@
]
}
},
- "/v2/organization/{organization_id}/merchant_accounts": {
+ "/v2/organization/{id}/merchant-accounts": {
"get": {
"tags": [
"Organization"
@@ -174,7 +174,7 @@
"operationId": "List Merchant Accounts",
"parameters": [
{
- "name": "organization_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the Organization",
"required": true,
@@ -208,13 +208,13 @@
]
}
},
- "/v2/connector_accounts": {
+ "/v2/connector-accounts": {
"post": {
"tags": [
"Merchant Connector Account"
],
- "summary": "Merchant Connector - Create",
- "description": "Creates a new Merchant Connector for the merchant account. The connector could be a payment processor/facilitator/acquirer or a provider of specialized services like Fraud/Accounting etc.",
+ "summary": "Connector Account - Create",
+ "description": "Creates a new Connector Account for the merchant account. The connector could be a payment processor/facilitator/acquirer or a provider of specialized services like Fraud/Accounting etc.",
"operationId": "Create a Merchant Connector",
"requestBody": {
"content": {
@@ -285,12 +285,12 @@
]
}
},
- "/v2/connector_accounts/{id}": {
+ "/v2/connector-accounts/{id}": {
"get": {
"tags": [
"Merchant Connector Account"
],
- "summary": "Merchant Connector - Retrieve",
+ "summary": "Connector Account - Retrieve",
"description": "Retrieves details of a Connector account",
"operationId": "Retrieve a Merchant Connector",
"parameters": [
@@ -333,8 +333,8 @@
"tags": [
"Merchant Connector Account"
],
- "summary": "Merchant Connector - Update",
- "description": "To update an existing Merchant Connector account. Helpful in enabling/disabling different payment methods and other settings for the connector",
+ "summary": "Connector Account - Update",
+ "description": "To update an existing Connector account. Helpful in enabling/disabling different payment methods and other settings for the connector",
"operationId": "Update a Merchant Connector",
"parameters": [
{
@@ -445,7 +445,7 @@
]
}
},
- "/v2/merchant_accounts": {
+ "/v2/merchant-accounts": {
"post": {
"tags": [
"Merchant Account"
@@ -453,6 +453,20 @@
"summary": "Merchant Account - Create",
"description": "Create a new account for a *merchant* and the *merchant* could be a seller or retailer or client who likes to receive and send payments.\n\nBefore creating the merchant account, it is mandatory to create an organization.",
"operationId": "Create a Merchant Account",
+ "parameters": [
+ {
+ "name": "X-Organization-Id",
+ "in": "header",
+ "description": "Organization ID for which the merchant account has to be created.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "example": {
+ "X-Organization-Id": "org_abcdefghijklmnop"
+ }
+ }
+ ],
"requestBody": {
"content": {
"application/json": {
@@ -466,8 +480,7 @@
"primary_contact_person": "John Doe",
"primary_email": "example@company.com"
},
- "merchant_name": "Cloth Store",
- "organization_id": "org_abcdefghijklmnop"
+ "merchant_name": "Cloth Store"
}
},
"Create a merchant account with metadata": {
@@ -476,14 +489,12 @@
"metadata": {
"key_1": "John Doe",
"key_2": "Trends"
- },
- "organization_id": "org_abcdefghijklmnop"
+ }
}
},
"Create a merchant account with minimal fields": {
"value": {
- "merchant_name": "Cloth Store",
- "organization_id": "org_abcdefghijklmnop"
+ "merchant_name": "Cloth Store"
}
}
}
@@ -513,7 +524,7 @@
]
}
},
- "/v2/merchant_accounts/{id}": {
+ "/v2/merchant-accounts/{id}": {
"get": {
"tags": [
"Merchant Account"
@@ -562,7 +573,7 @@
"operationId": "Update a Merchant Account",
"parameters": [
{
- "name": "account_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the merchant account",
"required": true,
@@ -619,17 +630,17 @@
]
}
},
- "/v2/merchant_accounts/{account_id}/profiles": {
+ "/v2/merchant-accounts/{id}/profiles": {
"get": {
"tags": [
"Merchant Account"
],
- "summary": "Profile - List",
+ "summary": "Merchant Account - Profile List",
"description": "List profiles for an Merchant",
"operationId": "List Profiles",
"parameters": [
{
- "name": "account_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the Merchant",
"required": true,
@@ -671,6 +682,20 @@
"summary": "Profile - Create",
"description": "Creates a new *profile* for a merchant",
"operationId": "Create A Profile",
+ "parameters": [
+ {
+ "name": "X-Merchant-Id",
+ "in": "header",
+ "description": "Merchant ID of the profile.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "example": {
+ "X-Merchant-Id": "abc_iG5VNjsN9xuCg7Xx0uWh"
+ }
+ }
+ ],
"requestBody": {
"content": {
"application/json": {
@@ -710,7 +735,7 @@
]
}
},
- "/v2/profiles/{profile_id}": {
+ "/v2/profiles/{id}": {
"get": {
"tags": [
"Profile"
@@ -720,13 +745,25 @@
"operationId": "Retrieve a Profile",
"parameters": [
{
- "name": "profile_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the profile",
"required": true,
"schema": {
"type": "string"
}
+ },
+ {
+ "name": "X-Merchant-Id",
+ "in": "header",
+ "description": "Merchant ID of the profile.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "example": {
+ "X-Merchant-Id": "abc_iG5VNjsN9xuCg7Xx0uWh"
+ }
}
],
"responses": {
@@ -759,13 +796,25 @@
"operationId": "Update a Profile",
"parameters": [
{
- "name": "profile_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the profile",
"required": true,
"schema": {
"type": "string"
}
+ },
+ {
+ "name": "X-Merchant-Id",
+ "in": "header",
+ "description": "Merchant ID of the profile.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "example": {
+ "X-Merchant-Id": "abc_iG5VNjsN9xuCg7Xx0uWh"
+ }
}
],
"requestBody": {
@@ -807,23 +856,35 @@
]
}
},
- "/v2/profiles/{profile_id}/connector_accounts": {
+ "/v2/profiles/{id}/connector-accounts": {
"get": {
"tags": [
"Business Profile"
],
- "summary": "Merchant Connector - List",
- "description": "List Merchant Connector Details for the business profile",
+ "summary": "Profile - Connector Accounts List",
+ "description": "List Connector Accounts for the profile",
"operationId": "List all Merchant Connectors",
"parameters": [
{
- "name": "profile_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the business profile",
"required": true,
"schema": {
"type": "string"
}
+ },
+ {
+ "name": "X-Merchant-Id",
+ "in": "header",
+ "description": "Merchant ID of the profile.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "example": {
+ "X-Merchant-Id": "abc_iG5VNjsN9xuCg7Xx0uWh"
+ }
}
],
"responses": {
@@ -854,7 +915,7 @@
]
}
},
- "/v2/profiles/{profile_id}/activate_routing_algorithm": {
+ "/v2/profiles/{id}/activate-routing-algorithm": {
"patch": {
"tags": [
"Profile"
@@ -864,7 +925,7 @@
"operationId": "Activates a routing algorithm under a profile",
"parameters": [
{
- "name": "profile_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the profile",
"required": true,
@@ -921,7 +982,7 @@
]
}
},
- "/v2/profiles/{profile_id}/deactivate_routing_algorithm": {
+ "/v2/profiles/{id}/deactivate-routing-algorithm": {
"patch": {
"tags": [
"Profile"
@@ -931,7 +992,7 @@
"operationId": " Deactivates a routing algorithm under a profile",
"parameters": [
{
- "name": "profile_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the profile",
"required": true,
@@ -974,7 +1035,7 @@
]
}
},
- "/v2/profiles/{profile_id}/fallback_routing": {
+ "/v2/profiles/{id}/fallback-routing": {
"patch": {
"tags": [
"Profile"
@@ -984,7 +1045,7 @@
"operationId": "Update the default fallback routing algorithm for the profile",
"parameters": [
{
- "name": "profile_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the profile",
"required": true,
@@ -1048,7 +1109,7 @@
"operationId": "Retrieve the default fallback routing algorithm for the profile",
"parameters": [
{
- "name": "profile_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the profile",
"required": true,
@@ -1085,17 +1146,17 @@
]
}
},
- "/v2/profiles/{profile_id}/routing_algorithm": {
+ "/v2/profiles/{id}/routing-algorithm": {
"get": {
"tags": [
"Profile"
],
"summary": "Profile - Retrieve Active Routing Algorithm",
- "description": "Retrieve active routing algorithm under the profile",
+ "description": "_\nRetrieve active routing algorithm under the profile",
"operationId": "Retrieve the active routing algorithm under the profile",
"parameters": [
{
- "name": "profile_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the profile",
"required": true,
@@ -1159,14 +1220,14 @@
]
}
},
- "/v2/routing_algorithm": {
+ "/v2/routing-algorithm": {
"post": {
"tags": [
"Routing"
],
"summary": "Routing - Create",
"description": "Create a routing algorithm",
- "operationId": "Create a routing algprithm",
+ "operationId": "Create a routing algorithm",
"requestBody": {
"content": {
"application/json": {
@@ -1214,7 +1275,7 @@
]
}
},
- "/v2/routing_algorithm/{routing_algorithm_id}": {
+ "/v2/routing-algorithm/{id}": {
"get": {
"tags": [
"Routing"
@@ -1224,7 +1285,7 @@
"operationId": "Retrieve a routing algorithm with its algorithm id",
"parameters": [
{
- "name": "routing_algorithm_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for a routing algorithm",
"required": true,
@@ -1264,7 +1325,7 @@
]
}
},
- "/v2/api_keys": {
+ "/v2/api-keys": {
"post": {
"tags": [
"API Key"
@@ -1304,7 +1365,7 @@
]
}
},
- "/v2/api_keys/{key_id}": {
+ "/v2/api-keys/{id}": {
"get": {
"tags": [
"API Key"
@@ -1314,7 +1375,7 @@
"operationId": "Retrieve an API Key",
"parameters": [
{
- "name": "key_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the API Key",
"required": true,
@@ -1353,7 +1414,7 @@
"operationId": "Update an API Key",
"parameters": [
{
- "name": "key_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the API Key",
"required": true,
@@ -1402,7 +1463,7 @@
"operationId": "Revoke an API Key",
"parameters": [
{
- "name": "key_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the API Key",
"required": true,
@@ -1433,7 +1494,7 @@
]
}
},
- "/v2/api_keys/list": {
+ "/v2/api-keys/list": {
"get": {
"tags": [
"API Key"
@@ -1600,7 +1661,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/CustomerRequest"
+ "$ref": "#/components/schemas/CustomerUpdateRequest"
},
"examples": {
"Update name and email of a customer": {
@@ -1742,7 +1803,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/PaymentsCreateIntentResponse"
+ "$ref": "#/components/schemas/PaymentsIntentResponse"
}
}
}
@@ -1757,1212 +1818,2283 @@
}
]
}
- }
- },
- "components": {
- "schemas": {
- "AcceptanceType": {
- "type": "string",
- "description": "This is used to indicate if the mandate was accepted online or offline",
- "enum": [
- "online",
- "offline"
- ]
- },
- "AcceptedCountries": {
- "oneOf": [
+ },
+ "/v2/payments/{id}/get-intent": {
+ "get": {
+ "tags": [
+ "Payments"
+ ],
+ "summary": "Payments - Get Intent",
+ "description": "**Get a payment intent object when id is passed in path**\n\nYou will require the 'API - Key' from the Hyperswitch dashboard to make the call.",
+ "operationId": "Get the Payment Intent details",
+ "parameters": [
{
- "type": "object",
- "required": [
- "type",
- "list"
- ],
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enable_only"
- ]
- },
- "list": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/CountryAlpha2"
+ "name": "id",
+ "in": "path",
+ "description": "The unique identifier for the Payment Intent",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Payment Intent",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentsIntentResponse"
}
}
}
},
+ "404": {
+ "description": "Payment Intent not found"
+ }
+ },
+ "security": [
{
- "type": "object",
- "required": [
- "type",
- "list"
- ],
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "disable_only"
- ]
- },
- "list": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/CountryAlpha2"
- }
- }
+ "api_key": []
+ }
+ ]
+ }
+ },
+ "/v2/payments/{id}/update-intent": {
+ "put": {
+ "tags": [
+ "Payments"
+ ],
+ "summary": "Payments - Update Intent",
+ "description": "**Update a payment intent object**\n\nYou will require the 'API - Key' from the Hyperswitch dashboard to make the call.",
+ "operationId": "Update a Payment Intent",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The unique identifier for the Payment Intent",
+ "required": true,
+ "schema": {
+ "type": "string"
}
},
{
- "type": "object",
- "required": [
- "type"
- ],
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "all_accepted"
- ]
- }
+ "name": "X-Profile-Id",
+ "in": "header",
+ "description": "Profile ID associated to the payment intent",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "example": {
+ "X-Profile-Id": "pro_abcdefghijklmnop"
}
}
],
- "description": "Object to filter the customer countries for which the payment method is displayed",
- "discriminator": {
- "propertyName": "type"
- }
- },
- "AcceptedCurrencies": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "type",
- "list"
- ],
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "enable_only"
- ]
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentsUpdateIntentRequest"
},
- "list": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/Currency"
+ "examples": {
+ "Update a payment intent with minimal fields": {
+ "value": {
+ "amount_details": {
+ "currency": "USD",
+ "order_amount": 6540
+ }
+ }
}
}
}
},
- {
- "type": "object",
- "required": [
- "type",
- "list"
- ],
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "disable_only"
- ]
- },
- "list": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/Currency"
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Payment Intent Updated",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentsIntentResponse"
}
}
}
},
+ "404": {
+ "description": "Payment Intent Not Found"
+ }
+ },
+ "security": [
{
- "type": "object",
- "required": [
- "type"
- ],
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "all_accepted"
- ]
- }
- }
+ "api_key": []
}
+ ]
+ }
+ },
+ "/v2/payments/{id}/confirm-intent": {
+ "post": {
+ "tags": [
+ "Payments"
],
- "discriminator": {
- "propertyName": "type"
- }
- },
- "AchBankDebitAdditionalData": {
- "type": "object",
- "required": [
- "account_number",
- "routing_number"
- ],
- "properties": {
- "account_number": {
- "type": "string",
- "description": "Partially masked account number for ach bank debit payment",
- "example": "0001****3456"
- },
- "routing_number": {
- "type": "string",
- "description": "Partially masked routing number for ach bank debit payment",
- "example": "110***000"
- },
- "card_holder_name": {
- "type": "string",
- "description": "Card holder's name",
- "example": "John Doe",
- "nullable": true
+ "summary": "Payments - Confirm Intent",
+ "description": "**Confirms a payment intent object with the payment method data**\n\n.",
+ "operationId": "Confirm Payment Intent",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The unique identifier for the Payment Intent",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
},
- "bank_account_holder_name": {
- "type": "string",
- "description": "Bank account's owner name",
- "example": "John Doe",
- "nullable": true
+ {
+ "name": "X-Profile-Id",
+ "in": "header",
+ "description": "Profile ID associated to the payment intent",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "example": {
+ "X-Profile-Id": "pro_abcdefghijklmnop"
+ }
},
- "bank_name": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BankNames"
+ {
+ "name": "X-Client-Secret",
+ "in": "header",
+ "description": "Client Secret Associated with the payment intent",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "example": {
+ "X-Client-Secret": "12345_pay_0193e41106e07e518940f8b51b9c8121_secret_0193e41107027a928d61d292e6a5dba9"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentsConfirmIntentRequest"
+ },
+ "examples": {
+ "Confirm the payment intent with card details": {
+ "value": {
+ "payment_method_data": {
+ "card": {
+ "card_cvc": "123",
+ "card_exp_month": "10",
+ "card_exp_year": "25",
+ "card_holder_name": "joseph Doe",
+ "card_number": "4242424242424242"
+ }
+ },
+ "payment_method_type": "card"
+ }
+ }
}
- ],
- "nullable": true
+ }
},
- "bank_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BankType"
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Payment created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentsConfirmIntentResponse"
+ }
}
- ],
- "nullable": true
+ }
},
- "bank_holder_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BankHolderType"
- }
- ],
- "nullable": true
+ "400": {
+ "description": "Missing Mandatory fields"
}
- }
- },
- "AchBankTransfer": {
- "type": "object",
- "required": [
- "bank_account_number",
- "bank_routing_number"
+ },
+ "security": [
+ {
+ "publishable_key": []
+ }
+ ]
+ }
+ },
+ "/v2/payments/{id}": {
+ "get": {
+ "tags": [
+ "Payments"
],
- "properties": {
- "bank_name": {
- "type": "string",
- "description": "Bank name",
- "example": "Deutsche Bank",
- "nullable": true
+ "summary": "Payments - Get",
+ "description": "Retrieves a Payment. This API can also be used to get the status of a previously initiated payment or next action for an ongoing payment",
+ "operationId": "Retrieve a Payment",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The global payment id",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
},
- "bank_country_code": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CountryAlpha2"
+ {
+ "name": "force_sync",
+ "in": "query",
+ "description": "A boolean to indicate whether to force sync the payment status. Value can be true or false",
+ "required": true,
+ "schema": {
+ "$ref": "#/components/schemas/ForceSync"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Gets the payment with final status",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentsRetrieveResponse"
+ }
}
- ],
- "nullable": true
- },
- "bank_city": {
- "type": "string",
- "description": "Bank city",
- "example": "California",
- "nullable": true
- },
- "bank_account_number": {
- "type": "string",
- "description": "Bank account number is an unique identifier assigned by a bank to a customer.",
- "example": "000123456"
+ }
},
- "bank_routing_number": {
- "type": "string",
- "description": "[9 digits] Routing number - used in USA for identifying a specific bank.",
- "example": "110000000"
+ "404": {
+ "description": "No payment found with the given id"
}
- }
- },
- "AchBankTransferAdditionalData": {
- "type": "object",
- "description": "Masked payout method details for ach bank transfer payout method",
- "required": [
- "bank_account_number",
- "bank_routing_number"
+ },
+ "security": [
+ {
+ "api_key": []
+ }
+ ]
+ }
+ },
+ "/v2/payments/{payment_id}/create-external-sdk-tokens": {
+ "post": {
+ "tags": [
+ "Payments"
],
- "properties": {
- "bank_account_number": {
- "type": "string",
- "description": "Partially masked account number for ach bank debit payment",
- "example": "0001****3456"
- },
- "bank_routing_number": {
- "type": "string",
- "description": "Partially masked routing number for ach bank debit payment",
- "example": "110***000"
- },
- "bank_name": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BankNames"
+ "summary": "Payments - Session token",
+ "description": "Creates a session object or a session token for wallets like Apple Pay, Google Pay, etc. These tokens are used by Hyperswitch's SDK to initiate these wallets' SDK.",
+ "operationId": "Create Session tokens for a Payment",
+ "parameters": [
+ {
+ "name": "payment_id",
+ "in": "path",
+ "description": "The identifier for payment",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentsSessionRequest"
}
- ],
- "nullable": true
+ }
},
- "bank_country_code": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CountryAlpha2"
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Payment session object created or session token was retrieved from wallets",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentsSessionResponse"
+ }
}
- ],
- "nullable": true
+ }
},
- "bank_city": {
- "type": "string",
- "description": "Bank city",
- "example": "California",
- "nullable": true
+ "400": {
+ "description": "Missing mandatory fields"
}
- }
- },
- "AchBillingDetails": {
- "type": "object",
- "properties": {
- "email": {
- "type": "string",
- "description": "The Email ID for ACH billing",
- "example": "example@me.com",
- "nullable": true
+ },
+ "security": [
+ {
+ "publishable_key": []
}
- }
- },
- "AchTransfer": {
- "type": "object",
- "required": [
- "account_number",
- "bank_name",
- "routing_number",
- "swift_code"
+ ]
+ }
+ },
+ "/v2/payments/{id}/payment-methods": {
+ "get": {
+ "tags": [
+ "Payments"
],
- "properties": {
- "account_number": {
- "type": "string",
- "example": "122385736258"
- },
- "bank_name": {
- "type": "string"
+ "summary": "Payments - Payment Methods List",
+ "description": "List the payment methods eligible for a payment. This endpoint also returns the saved payment methods for the customer when the customer_id is passed when creating the payment",
+ "operationId": "Retrieve Payment methods for a Payment",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The global payment id",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
},
- "routing_number": {
- "type": "string",
- "example": "012"
+ {
+ "name": "X-Profile-Id",
+ "in": "header",
+ "description": "Profile ID associated to the payment intent",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "example": {
+ "X-Profile-Id": "pro_abcdefghijklmnop"
+ }
},
- "swift_code": {
- "type": "string",
- "example": "234"
- }
- }
- },
- "AdditionalMerchantData": {
- "oneOf": [
{
- "type": "object",
- "required": [
- "open_banking_recipient_data"
- ],
- "properties": {
- "open_banking_recipient_data": {
- "$ref": "#/components/schemas/MerchantRecipientData"
- }
+ "name": "X-Client-Secret",
+ "in": "header",
+ "description": "Client Secret Associated with the payment intent",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "example": {
+ "X-Client-Secret": "12345_pay_0193e41106e07e518940f8b51b9c8121_secret_0193e41107027a928d61d292e6a5dba9"
}
}
- ]
- },
- "AdditionalPayoutMethodData": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "Card"
- ],
- "properties": {
- "Card": {
- "$ref": "#/components/schemas/CardAdditionalData"
+ ],
+ "responses": {
+ "200": {
+ "description": "Get the payment methods",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentMethodListResponseForPayments"
+ }
}
}
},
+ "404": {
+ "description": "No payment found with the given id"
+ }
+ },
+ "security": [
{
- "type": "object",
- "required": [
- "Bank"
- ],
- "properties": {
- "Bank": {
- "$ref": "#/components/schemas/BankAdditionalData"
+ "publishable_key": []
+ }
+ ]
+ }
+ },
+ "/v2/payments/{id}/saved-payment-methods": {
+ "get": {
+ "tags": [
+ "Payment Methods"
+ ],
+ "summary": "List customer saved payment methods for a payment",
+ "description": "To filter and list the applicable payment methods for a particular Customer ID, is to be associated with a payment",
+ "operationId": "List all Payment Methods for a Customer",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentMethodListRequest"
}
}
},
- {
- "type": "object",
- "required": [
- "Wallet"
- ],
- "properties": {
- "Wallet": {
- "$ref": "#/components/schemas/WalletAdditionalData"
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Payment Methods retrieved for customer tied to its respective client-secret passed in the param",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CustomerPaymentMethodsListResponse"
+ }
}
}
+ },
+ "400": {
+ "description": "Invalid Data"
+ },
+ "404": {
+ "description": "Payment Methods does not exist in records"
+ }
+ },
+ "security": [
+ {
+ "publishable_key": []
}
+ ]
+ }
+ },
+ "/v2/customers/{id}/saved-payment-methods": {
+ "get": {
+ "tags": [
+ "Payment Methods"
],
- "description": "Masked payout method details for storing in db"
- },
- "Address": {
- "type": "object",
- "properties": {
- "address": {
- "allOf": [
- {
- "$ref": "#/components/schemas/AddressDetails"
+ "summary": "List saved payment methods for a Customer",
+ "description": "To filter and list the applicable payment methods for a particular Customer ID, to be used in a non-payments context",
+ "operationId": "List all Payment Methods for a Customer",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentMethodListRequest"
}
- ],
- "nullable": true
+ }
},
- "phone": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PhoneDetails"
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Payment Methods retrieved",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CustomerPaymentMethodsListResponse"
+ }
}
- ],
- "nullable": true
+ }
},
- "email": {
- "type": "string",
- "nullable": true
+ "400": {
+ "description": "Invalid Data"
+ },
+ "404": {
+ "description": "Payment Methods does not exist in records"
}
},
- "additionalProperties": false
- },
- "AddressDetails": {
- "type": "object",
- "description": "Address details",
- "properties": {
- "city": {
- "type": "string",
- "description": "The address city",
- "example": "New York",
- "nullable": true,
- "maxLength": 50
- },
- "country": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CountryAlpha2"
+ "security": [
+ {
+ "api_key": []
+ }
+ ]
+ }
+ },
+ "/v2/payment-methods": {
+ "post": {
+ "tags": [
+ "Payment Methods"
+ ],
+ "summary": "Payment Method - Create",
+ "description": "Creates and stores a payment method against a customer. In case of cards, this API should be used only by PCI compliant merchants.",
+ "operationId": "Create Payment Method",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentMethodCreate"
}
- ],
- "nullable": true
- },
- "line1": {
- "type": "string",
- "description": "The first line of the address",
- "example": "123, King Street",
- "nullable": true,
- "maxLength": 200
- },
- "line2": {
- "type": "string",
- "description": "The second line of the address",
- "example": "Powelson Avenue",
- "nullable": true,
- "maxLength": 50
- },
- "line3": {
- "type": "string",
- "description": "The third line of the address",
- "example": "Bridgewater",
- "nullable": true,
- "maxLength": 50
- },
- "zip": {
- "type": "string",
- "description": "The zip/postal code for the address",
- "example": "08807",
- "nullable": true,
- "maxLength": 50
- },
- "state": {
- "type": "string",
- "description": "The address state",
- "example": "New York",
- "nullable": true
+ }
},
- "first_name": {
- "type": "string",
- "description": "The first name for the address",
- "example": "John",
- "nullable": true,
- "maxLength": 255
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Payment Method Created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentMethodResponse"
+ }
+ }
+ }
},
- "last_name": {
- "type": "string",
- "description": "The last name for the address",
- "example": "Doe",
- "nullable": true,
- "maxLength": 255
+ "400": {
+ "description": "Invalid Data"
}
},
- "additionalProperties": false
- },
- "AirwallexData": {
- "type": "object",
- "properties": {
- "payload": {
- "type": "string",
- "description": "payload required by airwallex",
- "nullable": true
+ "security": [
+ {
+ "api_key": []
}
- }
- },
- "AlfamartVoucherData": {
- "type": "object",
- "properties": {
- "first_name": {
- "type": "string",
- "description": "The billing first name for Alfamart",
- "example": "Jane",
- "nullable": true
+ ]
+ }
+ },
+ "/v2/payment-methods/create-intent": {
+ "post": {
+ "tags": [
+ "Payment Methods"
+ ],
+ "summary": "Payment Method - Create Intent",
+ "description": "Creates a payment method for customer with billing information and other metadata.",
+ "operationId": "Create Payment Method Intent",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentMethodIntentCreate"
+ }
+ }
},
- "last_name": {
- "type": "string",
- "description": "The billing second name for Alfamart",
- "example": "Doe",
- "nullable": true
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Payment Method Intent Created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentMethodResponse"
+ }
+ }
+ }
},
- "email": {
- "type": "string",
- "description": "The Email ID for Alfamart",
- "example": "example@me.com",
- "nullable": true
+ "400": {
+ "description": "Invalid Data"
}
- }
- },
- "AliPayHkRedirection": {
- "type": "object"
- },
- "AliPayQr": {
- "type": "object"
- },
- "AliPayRedirection": {
- "type": "object"
- },
- "AmountDetails": {
- "type": "object",
- "required": [
- "currency"
+ },
+ "security": [
+ {
+ "api_key": []
+ }
+ ]
+ }
+ },
+ "/v2/payment-methods/{id}/confirm-intent": {
+ "post": {
+ "tags": [
+ "Payment Methods"
],
- "properties": {
- "order_amount": {
- "type": "integer",
- "format": "int64",
- "description": "The payment amount. Amount for the payment in the lowest denomination of the currency, (i.e) in cents for USD denomination, in yen for JPY denomination etc. E.g., Pass 100 to charge $1.00 and 1 for 1¥ since ¥ is a zero-decimal currency. Read more about [the Decimal and Non-Decimal Currencies](https://github.com/juspay/hyperswitch/wiki/Decimal-and-Non%E2%80%90Decimal-Currencies)",
- "example": 6540,
- "minimum": 0
- },
- "currency": {
- "$ref": "#/components/schemas/Currency"
- },
- "shipping_cost": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MinorUnit"
+ "summary": "Payment Method - Confirm Intent",
+ "description": "Update a payment method with customer's payment method related information.",
+ "operationId": "Confirm Payment Method Intent",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentMethodIntentConfirm"
}
- ],
- "nullable": true
+ }
},
- "order_tax_amount": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MinorUnit"
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Payment Method Intent Confirmed",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentMethodResponse"
+ }
}
- ],
- "nullable": true
- },
- "skip_external_tax_calculation": {
- "$ref": "#/components/schemas/TaxCalculationOverride"
- },
- "skip_surcharge_calculation": {
- "$ref": "#/components/schemas/SurchargeCalculationOverride"
+ }
},
- "surcharge_amount": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MinorUnit"
+ "400": {
+ "description": "Invalid Data"
+ }
+ },
+ "security": [
+ {
+ "api_key": []
+ }
+ ]
+ }
+ },
+ "/v2/payment-methods/{id}/update-saved-payment-method": {
+ "patch": {
+ "tags": [
+ "Payment Methods"
+ ],
+ "summary": "Payment Method - Update",
+ "description": "Update an existing payment method of a customer.",
+ "operationId": "Update Payment Method",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentMethodUpdate"
}
- ],
- "nullable": true
+ }
},
- "tax_on_surcharge": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MinorUnit"
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Payment Method Update",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentMethodResponse"
+ }
}
- ],
- "nullable": true
- }
- }
- },
- "AmountFilter": {
- "type": "object",
- "properties": {
- "start_amount": {
- "type": "integer",
- "format": "int64",
- "description": "The start amount to filter list of transactions which are greater than or equal to the start amount",
- "nullable": true
+ }
},
- "end_amount": {
- "type": "integer",
- "format": "int64",
- "description": "The end amount to filter list of transactions which are less than or equal to the end amount",
- "nullable": true
+ "400": {
+ "description": "Invalid Data"
}
- }
- },
- "AmountInfo": {
- "type": "object",
- "required": [
- "label",
- "amount"
+ },
+ "security": [
+ {
+ "api_key": []
+ }
+ ]
+ }
+ },
+ "/v2/payment-methods/{id}": {
+ "get": {
+ "tags": [
+ "Payment Methods"
],
- "properties": {
- "label": {
- "type": "string",
- "description": "The label must be the name of the merchant."
- },
- "type": {
- "type": "string",
- "description": "A value that indicates whether the line item(Ex: total, tax, discount, or grand total) is final or pending.",
- "nullable": true
+ "summary": "Payment Method - Retrieve",
+ "description": "Retrieves a payment method of a customer.",
+ "operationId": "Retrieve Payment Method",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The unique identifier for the Payment Method",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Payment Method Retrieved",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentMethodResponse"
+ }
+ }
+ }
},
- "amount": {
- "type": "string",
- "description": "The total amount for the payment in majot unit string (Ex: 38.02)",
- "example": "38.02"
+ "404": {
+ "description": "Payment Method Not Found"
}
- }
+ },
+ "security": [
+ {
+ "api_key": []
+ }
+ ]
},
- "ApiKeyExpiration": {
- "oneOf": [
+ "delete": {
+ "tags": [
+ "Payment Methods"
+ ],
+ "summary": "Payment Method - Delete",
+ "description": "Deletes a payment method of a customer.",
+ "operationId": "Delete Payment Method",
+ "parameters": [
{
- "type": "string",
- "enum": [
- "never"
- ]
+ "name": "id",
+ "in": "path",
+ "description": "The unique identifier for the Payment Method",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Payment Method Retrieved",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentMethodDeleteResponse"
+ }
+ }
+ }
},
+ "404": {
+ "description": "Payment Method Not Found"
+ }
+ },
+ "security": [
{
- "type": "string",
- "format": "date-time"
+ "api_key": []
}
]
- },
- "ApplePayAddressParameters": {
+ }
+ },
+ "/v2/refunds": {
+ "post": {
+ "tags": [
+ "Refunds"
+ ],
+ "summary": "Refunds - Create",
+ "description": "Creates a refund against an already processed payment. In case of some processors, you can even opt to refund only a partial amount multiple times until the original charge amount has been refunded",
+ "operationId": "Create a Refund",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RefundsCreateRequest"
+ },
+ "examples": {
+ "Create an instant refund to refund partial amount": {
+ "value": {
+ "amount": 654,
+ "merchant_reference_id": "ref_123",
+ "payment_id": "{{payment_id}}",
+ "refund_type": "instant"
+ }
+ },
+ "Create an instant refund to refund the whole amount": {
+ "value": {
+ "merchant_reference_id": "ref_123",
+ "payment_id": "{{payment_id}}",
+ "refund_type": "instant"
+ }
+ },
+ "Create an instant refund with reason": {
+ "value": {
+ "amount": 6540,
+ "merchant_reference_id": "ref_123",
+ "payment_id": "{{payment_id}}",
+ "reason": "Customer returned product",
+ "refund_type": "instant"
+ }
+ }
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Refund created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RefundResponse"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Missing Mandatory fields"
+ }
+ },
+ "security": [
+ {
+ "api_key": []
+ }
+ ]
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "AcceptanceType": {
"type": "string",
+ "description": "This is used to indicate if the mandate was accepted online or offline",
"enum": [
- "postalAddress",
- "phone",
- "email"
+ "online",
+ "offline"
]
},
- "ApplePayBillingContactFields": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/ApplePayAddressParameters"
+ "AcceptedCountries": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "type",
+ "list"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "enable_only"
+ ]
+ },
+ "list": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CountryAlpha2"
+ }
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "type",
+ "list"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "disable_only"
+ ]
+ },
+ "list": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CountryAlpha2"
+ }
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "type"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "all_accepted"
+ ]
+ }
+ }
+ }
+ ],
+ "description": "Object to filter the customer countries for which the payment method is displayed",
+ "discriminator": {
+ "propertyName": "type"
}
},
- "ApplePayPaymentRequest": {
+ "AcceptedCurrencies": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "type",
+ "list"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "enable_only"
+ ]
+ },
+ "list": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Currency"
+ }
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "type",
+ "list"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "disable_only"
+ ]
+ },
+ "list": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Currency"
+ }
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "type"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "all_accepted"
+ ]
+ }
+ }
+ }
+ ],
+ "discriminator": {
+ "propertyName": "type"
+ }
+ },
+ "AchBankDebitAdditionalData": {
"type": "object",
"required": [
- "country_code",
- "currency_code",
- "total"
+ "account_number",
+ "routing_number"
],
"properties": {
- "country_code": {
- "$ref": "#/components/schemas/CountryAlpha2"
- },
- "currency_code": {
- "$ref": "#/components/schemas/Currency"
+ "account_number": {
+ "type": "string",
+ "description": "Partially masked account number for ach bank debit payment",
+ "example": "0001****3456"
},
- "total": {
- "$ref": "#/components/schemas/AmountInfo"
+ "routing_number": {
+ "type": "string",
+ "description": "Partially masked routing number for ach bank debit payment",
+ "example": "110***000"
},
- "merchant_capabilities": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "The list of merchant capabilities(ex: whether capable of 3ds or no-3ds)",
+ "card_holder_name": {
+ "type": "string",
+ "description": "Card holder's name",
+ "example": "John Doe",
"nullable": true
},
- "supported_networks": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "description": "The list of supported networks",
+ "bank_account_holder_name": {
+ "type": "string",
+ "description": "Bank account's owner name",
+ "example": "John Doe",
"nullable": true
},
- "merchant_identifier": {
- "type": "string",
+ "bank_name": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BankNames"
+ }
+ ],
"nullable": true
},
- "required_billing_contact_fields": {
+ "bank_type": {
"allOf": [
{
- "$ref": "#/components/schemas/ApplePayBillingContactFields"
+ "$ref": "#/components/schemas/BankType"
}
],
"nullable": true
},
- "required_shipping_contact_fields": {
+ "bank_holder_type": {
"allOf": [
{
- "$ref": "#/components/schemas/ApplePayShippingContactFields"
+ "$ref": "#/components/schemas/BankHolderType"
}
],
"nullable": true
}
}
},
- "ApplePayRedirectData": {
- "type": "object"
- },
- "ApplePaySessionResponse": {
- "oneOf": [
- {
- "$ref": "#/components/schemas/ThirdPartySdkSessionResponse"
- },
- {
- "$ref": "#/components/schemas/NoThirdPartySdkSessionResponse"
- },
- {
- "type": "object",
- "default": null,
- "nullable": true
- }
- ]
- },
- "ApplePayShippingContactFields": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/ApplePayAddressParameters"
- }
- },
- "ApplePayThirdPartySdkData": {
- "type": "object"
- },
- "ApplePayWalletData": {
+ "AchBankTransfer": {
"type": "object",
"required": [
- "payment_data",
- "payment_method",
- "transaction_identifier"
+ "bank_account_number",
+ "bank_routing_number"
],
"properties": {
- "payment_data": {
+ "bank_name": {
"type": "string",
- "description": "The payment data of Apple pay"
- },
- "payment_method": {
- "$ref": "#/components/schemas/ApplepayPaymentMethod"
+ "description": "Bank name",
+ "example": "Deutsche Bank",
+ "nullable": true
},
- "transaction_identifier": {
- "type": "string",
- "description": "The unique identifier for the transaction"
- }
- }
- },
- "ApplepayConnectorMetadataRequest": {
- "type": "object",
- "properties": {
- "session_token_data": {
+ "bank_country_code": {
"allOf": [
{
- "$ref": "#/components/schemas/SessionTokenInfo"
+ "$ref": "#/components/schemas/CountryAlpha2"
}
],
"nullable": true
- }
- }
- },
- "ApplepayInitiative": {
- "type": "string",
- "enum": [
- "web",
- "ios"
- ]
- },
- "ApplepayPaymentMethod": {
- "type": "object",
- "required": [
- "display_name",
- "network",
- "type"
- ],
- "properties": {
- "display_name": {
+ },
+ "bank_city": {
"type": "string",
- "description": "The name to be displayed on Apple Pay button"
+ "description": "Bank city",
+ "example": "California",
+ "nullable": true
},
- "network": {
+ "bank_account_number": {
"type": "string",
- "description": "The network of the Apple pay payment method"
+ "description": "Bank account number is an unique identifier assigned by a bank to a customer.",
+ "example": "000123456"
},
- "type": {
+ "bank_routing_number": {
"type": "string",
- "description": "The type of the payment method"
+ "description": "[9 digits] Routing number - used in USA for identifying a specific bank.",
+ "example": "110000000"
}
}
},
- "ApplepaySessionTokenResponse": {
+ "AchBankTransferAdditionalData": {
"type": "object",
+ "description": "Masked payout method details for ach bank transfer payout method",
"required": [
- "connector",
- "delayed_session_token",
- "sdk_next_action"
+ "bank_account_number",
+ "bank_routing_number"
],
"properties": {
- "session_token_data": {
+ "bank_account_number": {
+ "type": "string",
+ "description": "Partially masked account number for ach bank debit payment",
+ "example": "0001****3456"
+ },
+ "bank_routing_number": {
+ "type": "string",
+ "description": "Partially masked routing number for ach bank debit payment",
+ "example": "110***000"
+ },
+ "bank_name": {
"allOf": [
{
- "$ref": "#/components/schemas/ApplePaySessionResponse"
+ "$ref": "#/components/schemas/BankNames"
}
],
"nullable": true
},
- "payment_request_data": {
+ "bank_country_code": {
"allOf": [
{
- "$ref": "#/components/schemas/ApplePayPaymentRequest"
+ "$ref": "#/components/schemas/CountryAlpha2"
}
],
"nullable": true
},
- "connector": {
- "type": "string",
- "description": "The session token is w.r.t this connector"
- },
- "delayed_session_token": {
- "type": "boolean",
- "description": "Identifier for the delayed session response"
- },
- "sdk_next_action": {
- "$ref": "#/components/schemas/SdkNextAction"
- },
- "connector_reference_id": {
- "type": "string",
- "description": "The connector transaction id",
- "nullable": true
- },
- "connector_sdk_public_key": {
- "type": "string",
- "description": "The public key id is to invoke third party sdk",
- "nullable": true
- },
- "connector_merchant_id": {
+ "bank_city": {
"type": "string",
- "description": "The connector merchant id",
+ "description": "Bank city",
+ "example": "California",
"nullable": true
}
}
},
- "AttemptStatus": {
- "type": "string",
- "description": "The status of the attempt",
- "enum": [
- "started",
- "authentication_failed",
- "router_declined",
- "authentication_pending",
- "authentication_successful",
- "authorized",
- "authorization_failed",
- "charged",
- "authorizing",
- "cod_initiated",
- "voided",
- "void_initiated",
- "capture_initiated",
- "capture_failed",
- "void_failed",
- "auto_refunded",
- "partial_charged",
- "partial_charged_and_chargeable",
- "unresolved",
- "pending",
- "failure",
- "payment_method_awaited",
- "confirmation_awaited",
- "device_data_collection_pending"
- ]
- },
- "AuthenticationConnectorDetails": {
+ "AchBillingDetails": {
"type": "object",
- "required": [
- "authentication_connectors",
- "three_ds_requestor_url"
- ],
"properties": {
- "authentication_connectors": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/AuthenticationConnectors"
- },
- "description": "List of authentication connectors"
- },
- "three_ds_requestor_url": {
+ "email": {
"type": "string",
- "description": "URL of the (customer service) website that will be shown to the shopper in case of technical errors during the 3D Secure 2 process."
+ "description": "The Email ID for ACH billing",
+ "example": "example@me.com",
+ "nullable": true
}
}
},
- "AuthenticationConnectors": {
- "type": "string",
- "enum": [
- "threedsecureio",
- "netcetera",
- "gpayments"
- ]
- },
- "AuthenticationStatus": {
- "type": "string",
- "enum": [
- "started",
- "pending",
- "success",
- "failed"
- ]
- },
- "AuthenticationType": {
- "type": "string",
- "description": "Pass this parameter to force 3DS or non 3DS auth for this payment. Some connectors will still force 3DS auth even in case of passing 'no_three_ds' here and vice versa. Default value is 'no_three_ds' if not set",
- "enum": [
- "three_ds",
- "no_three_ds"
- ]
- },
- "AuthorizationStatus": {
- "type": "string",
- "enum": [
- "success",
- "failure",
- "processing",
- "unresolved"
- ]
- },
- "BacsBankDebitAdditionalData": {
+ "AchTransfer": {
"type": "object",
"required": [
"account_number",
- "sort_code"
+ "bank_name",
+ "routing_number",
+ "swift_code"
],
"properties": {
"account_number": {
"type": "string",
- "description": "Partially masked account number for Bacs payment method",
- "example": "0001****3456"
+ "example": "122385736258"
},
- "sort_code": {
+ "bank_name": {
+ "type": "string"
+ },
+ "routing_number": {
"type": "string",
- "description": "Partially masked sort code for Bacs payment method",
- "example": "108800"
+ "example": "012"
},
- "bank_account_holder_name": {
+ "swift_code": {
"type": "string",
- "description": "Bank account's owner name",
- "example": "John Doe",
- "nullable": true
+ "example": "234"
}
}
},
- "BacsBankTransfer": {
- "type": "object",
- "required": [
- "bank_account_number",
- "bank_sort_code"
- ],
- "properties": {
- "bank_name": {
- "type": "string",
- "description": "Bank name",
- "example": "Deutsche Bank",
- "nullable": true
- },
- "bank_country_code": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CountryAlpha2"
- }
- ],
- "nullable": true
- },
- "bank_city": {
- "type": "string",
- "description": "Bank city",
- "example": "California",
- "nullable": true
- },
- "bank_account_number": {
- "type": "string",
- "description": "Bank account number is an unique identifier assigned by a bank to a customer.",
- "example": "000123456"
- },
- "bank_sort_code": {
- "type": "string",
- "description": "[6 digits] Sort Code - used in UK and Ireland for identifying a bank and it's branches.",
- "example": "98-76-54"
- }
- }
- },
- "BacsBankTransferAdditionalData": {
- "type": "object",
- "description": "Masked payout method details for bacs bank transfer payout method",
- "required": [
- "bank_sort_code",
- "bank_account_number"
- ],
- "properties": {
- "bank_sort_code": {
- "type": "string",
- "description": "Partially masked sort code for Bacs payment method",
- "example": "108800"
- },
- "bank_account_number": {
- "type": "string",
- "description": "Bank account's owner name",
- "example": "0001****3456"
- },
- "bank_name": {
- "type": "string",
- "description": "Bank name",
- "example": "Deutsche Bank",
- "nullable": true
- },
- "bank_country_code": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CountryAlpha2"
- }
- ],
- "nullable": true
- },
- "bank_city": {
- "type": "string",
- "description": "Bank city",
- "example": "California",
- "nullable": true
- }
- }
- },
- "BacsBankTransferInstructions": {
- "type": "object",
- "required": [
- "account_holder_name",
- "account_number",
- "sort_code"
- ],
- "properties": {
- "account_holder_name": {
- "type": "string",
- "example": "Jane Doe"
- },
- "account_number": {
- "type": "string",
- "example": "10244123908"
- },
- "sort_code": {
- "type": "string",
- "example": "012"
- }
- }
- },
- "BancontactBankRedirectAdditionalData": {
- "type": "object",
- "properties": {
- "last4": {
- "type": "string",
- "description": "Last 4 digits of the card number",
- "example": "4242",
- "nullable": true
- },
- "card_exp_month": {
- "type": "string",
- "description": "The card's expiry month",
- "example": "12",
- "nullable": true
- },
- "card_exp_year": {
- "type": "string",
- "description": "The card's expiry year",
- "example": "24",
- "nullable": true
- },
- "card_holder_name": {
- "type": "string",
- "description": "The card holder's name",
- "example": "John Test",
- "nullable": true
- }
- }
- },
- "Bank": {
- "oneOf": [
- {
- "$ref": "#/components/schemas/AchBankTransfer"
- },
- {
- "$ref": "#/components/schemas/BacsBankTransfer"
- },
- {
- "$ref": "#/components/schemas/SepaBankTransfer"
- },
- {
- "$ref": "#/components/schemas/PixBankTransfer"
- }
- ]
- },
- "BankAdditionalData": {
- "oneOf": [
- {
- "$ref": "#/components/schemas/AchBankTransferAdditionalData"
- },
- {
- "$ref": "#/components/schemas/BacsBankTransferAdditionalData"
- },
- {
- "$ref": "#/components/schemas/SepaBankTransferAdditionalData"
- },
- {
- "$ref": "#/components/schemas/PixBankTransferAdditionalData"
- }
- ],
- "description": "Masked payout method details for bank payout method"
- },
- "BankDebitAdditionalData": {
+ "AdditionalMerchantData": {
"oneOf": [
{
"type": "object",
"required": [
- "ach"
+ "open_banking_recipient_data"
],
"properties": {
- "ach": {
- "$ref": "#/components/schemas/AchBankDebitAdditionalData"
+ "open_banking_recipient_data": {
+ "$ref": "#/components/schemas/MerchantRecipientData"
}
}
- },
+ }
+ ]
+ },
+ "AdditionalPayoutMethodData": {
+ "oneOf": [
{
"type": "object",
"required": [
- "bacs"
+ "Card"
],
"properties": {
- "bacs": {
- "$ref": "#/components/schemas/BacsBankDebitAdditionalData"
+ "Card": {
+ "$ref": "#/components/schemas/CardAdditionalData"
}
}
},
{
"type": "object",
"required": [
- "becs"
+ "Bank"
],
"properties": {
- "becs": {
- "$ref": "#/components/schemas/BecsBankDebitAdditionalData"
+ "Bank": {
+ "$ref": "#/components/schemas/BankAdditionalData"
}
}
},
{
"type": "object",
"required": [
- "sepa"
+ "Wallet"
],
"properties": {
- "sepa": {
- "$ref": "#/components/schemas/SepaBankDebitAdditionalData"
+ "Wallet": {
+ "$ref": "#/components/schemas/WalletAdditionalData"
}
}
}
- ]
+ ],
+ "description": "Masked payout method details for storing in db"
},
- "BankDebitBilling": {
+ "Address": {
"type": "object",
"properties": {
- "name": {
- "type": "string",
- "description": "The billing name for bank debits",
- "example": "John Doe",
+ "address": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AddressDetails"
+ }
+ ],
+ "nullable": true
+ },
+ "phone": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PhoneDetails"
+ }
+ ],
"nullable": true
},
"email": {
"type": "string",
- "description": "The billing email for bank debits",
- "example": "example@example.com",
"nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "AddressDetails": {
+ "type": "object",
+ "description": "Address details",
+ "properties": {
+ "city": {
+ "type": "string",
+ "description": "The address city",
+ "example": "New York",
+ "nullable": true,
+ "maxLength": 50
},
- "address": {
+ "country": {
"allOf": [
{
- "$ref": "#/components/schemas/AddressDetails"
+ "$ref": "#/components/schemas/CountryAlpha2"
}
],
"nullable": true
- }
- }
- },
- "BankDebitData": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "ach_bank_debit"
- ],
- "properties": {
- "ach_bank_debit": {
- "type": "object",
- "description": "Payment Method data for Ach bank debit",
- "required": [
- "account_number",
- "routing_number",
- "card_holder_name",
- "bank_account_holder_name",
- "bank_name",
- "bank_type",
- "bank_holder_type"
- ],
- "properties": {
- "billing_details": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BankDebitBilling"
- }
- ],
- "nullable": true
- },
- "account_number": {
- "type": "string",
- "description": "Account number for ach bank debit payment",
- "example": "000123456789"
- },
- "routing_number": {
- "type": "string",
- "description": "Routing number for ach bank debit payment",
+ },
+ "line1": {
+ "type": "string",
+ "description": "The first line of the address",
+ "example": "123, King Street",
+ "nullable": true,
+ "maxLength": 200
+ },
+ "line2": {
+ "type": "string",
+ "description": "The second line of the address",
+ "example": "Powelson Avenue",
+ "nullable": true,
+ "maxLength": 50
+ },
+ "line3": {
+ "type": "string",
+ "description": "The third line of the address",
+ "example": "Bridgewater",
+ "nullable": true,
+ "maxLength": 50
+ },
+ "zip": {
+ "type": "string",
+ "description": "The zip/postal code for the address",
+ "example": "08807",
+ "nullable": true,
+ "maxLength": 50
+ },
+ "state": {
+ "type": "string",
+ "description": "The address state",
+ "example": "New York",
+ "nullable": true
+ },
+ "first_name": {
+ "type": "string",
+ "description": "The first name for the address",
+ "example": "John",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "last_name": {
+ "type": "string",
+ "description": "The last name for the address",
+ "example": "Doe",
+ "nullable": true,
+ "maxLength": 255
+ }
+ },
+ "additionalProperties": false
+ },
+ "AirwallexData": {
+ "type": "object",
+ "properties": {
+ "payload": {
+ "type": "string",
+ "description": "payload required by airwallex",
+ "nullable": true
+ }
+ }
+ },
+ "AlfamartVoucherData": {
+ "type": "object",
+ "properties": {
+ "first_name": {
+ "type": "string",
+ "description": "The billing first name for Alfamart",
+ "example": "Jane",
+ "nullable": true
+ },
+ "last_name": {
+ "type": "string",
+ "description": "The billing second name for Alfamart",
+ "example": "Doe",
+ "nullable": true
+ },
+ "email": {
+ "type": "string",
+ "description": "The Email ID for Alfamart",
+ "example": "example@me.com",
+ "nullable": true
+ }
+ }
+ },
+ "AliPayHkRedirection": {
+ "type": "object"
+ },
+ "AliPayQr": {
+ "type": "object"
+ },
+ "AliPayRedirection": {
+ "type": "object"
+ },
+ "AmountDetails": {
+ "type": "object",
+ "required": [
+ "currency"
+ ],
+ "properties": {
+ "order_amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The payment amount. Amount for the payment in the lowest denomination of the currency, (i.e) in cents for USD denomination, in yen for JPY denomination etc. E.g., Pass 100 to charge $1.00 and 1 for 1¥ since ¥ is a zero-decimal currency. Read more about [the Decimal and Non-Decimal Currencies](https://github.com/juspay/hyperswitch/wiki/Decimal-and-Non%E2%80%90Decimal-Currencies)",
+ "example": 6540,
+ "minimum": 0
+ },
+ "currency": {
+ "$ref": "#/components/schemas/Currency"
+ },
+ "shipping_cost": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "order_tax_amount": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "skip_external_tax_calculation": {
+ "$ref": "#/components/schemas/TaxCalculationOverride"
+ },
+ "skip_surcharge_calculation": {
+ "$ref": "#/components/schemas/SurchargeCalculationOverride"
+ },
+ "surcharge_amount": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "tax_on_surcharge": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ }
+ }
+ },
+ "AmountDetailsResponse": {
+ "type": "object",
+ "required": [
+ "order_amount",
+ "currency",
+ "external_tax_calculation",
+ "surcharge_calculation"
+ ],
+ "properties": {
+ "order_amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The payment amount. Amount for the payment in the lowest denomination of the currency, (i.e) in cents for USD denomination, in yen for JPY denomination etc. E.g., Pass 100 to charge $1.00 and 1 for 1¥ since ¥ is a zero-decimal currency. Read more about [the Decimal and Non-Decimal Currencies](https://github.com/juspay/hyperswitch/wiki/Decimal-and-Non%E2%80%90Decimal-Currencies)",
+ "example": 6540,
+ "minimum": 0
+ },
+ "currency": {
+ "$ref": "#/components/schemas/Currency"
+ },
+ "shipping_cost": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "order_tax_amount": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "external_tax_calculation": {
+ "$ref": "#/components/schemas/TaxCalculationOverride"
+ },
+ "surcharge_calculation": {
+ "$ref": "#/components/schemas/SurchargeCalculationOverride"
+ },
+ "surcharge_amount": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "tax_on_surcharge": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ }
+ }
+ },
+ "AmountDetailsUpdate": {
+ "type": "object",
+ "properties": {
+ "order_amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The payment amount. Amount for the payment in the lowest denomination of the currency, (i.e) in cents for USD denomination, in yen for JPY denomination etc. E.g., Pass 100 to charge $1.00 and 1 for 1¥ since ¥ is a zero-decimal currency. Read more about [the Decimal and Non-Decimal Currencies](https://github.com/juspay/hyperswitch/wiki/Decimal-and-Non%E2%80%90Decimal-Currencies)",
+ "example": 6540,
+ "nullable": true,
+ "minimum": 0
+ },
+ "currency": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Currency"
+ }
+ ],
+ "nullable": true
+ },
+ "shipping_cost": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "order_tax_amount": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "skip_external_tax_calculation": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TaxCalculationOverride"
+ }
+ ],
+ "nullable": true
+ },
+ "skip_surcharge_calculation": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SurchargeCalculationOverride"
+ }
+ ],
+ "nullable": true
+ },
+ "surcharge_amount": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "tax_on_surcharge": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ }
+ }
+ },
+ "AmountFilter": {
+ "type": "object",
+ "properties": {
+ "start_amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The start amount to filter list of transactions which are greater than or equal to the start amount",
+ "nullable": true
+ },
+ "end_amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The end amount to filter list of transactions which are less than or equal to the end amount",
+ "nullable": true
+ }
+ }
+ },
+ "AmountInfo": {
+ "type": "object",
+ "required": [
+ "label",
+ "amount"
+ ],
+ "properties": {
+ "label": {
+ "type": "string",
+ "description": "The label must be the name of the merchant."
+ },
+ "type": {
+ "type": "string",
+ "description": "A value that indicates whether the line item(Ex: total, tax, discount, or grand total) is final or pending.",
+ "nullable": true
+ },
+ "amount": {
+ "type": "string",
+ "description": "The total amount for the payment in majot unit string (Ex: 38.02)",
+ "example": "38.02"
+ }
+ }
+ },
+ "ApiKeyExpiration": {
+ "oneOf": [
+ {
+ "type": "string",
+ "enum": [
+ "never"
+ ]
+ },
+ {
+ "type": "string",
+ "format": "date-time"
+ }
+ ]
+ },
+ "ApplePayAddressParameters": {
+ "type": "string",
+ "enum": [
+ "postalAddress",
+ "phone",
+ "email"
+ ]
+ },
+ "ApplePayBillingContactFields": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ApplePayAddressParameters"
+ }
+ },
+ "ApplePayPaymentRequest": {
+ "type": "object",
+ "required": [
+ "country_code",
+ "currency_code",
+ "total"
+ ],
+ "properties": {
+ "country_code": {
+ "$ref": "#/components/schemas/CountryAlpha2"
+ },
+ "currency_code": {
+ "$ref": "#/components/schemas/Currency"
+ },
+ "total": {
+ "$ref": "#/components/schemas/AmountInfo"
+ },
+ "merchant_capabilities": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The list of merchant capabilities(ex: whether capable of 3ds or no-3ds)",
+ "nullable": true
+ },
+ "supported_networks": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The list of supported networks",
+ "nullable": true
+ },
+ "merchant_identifier": {
+ "type": "string",
+ "nullable": true
+ },
+ "required_billing_contact_fields": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApplePayBillingContactFields"
+ }
+ ],
+ "nullable": true
+ },
+ "required_shipping_contact_fields": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApplePayShippingContactFields"
+ }
+ ],
+ "nullable": true
+ },
+ "recurring_payment_request": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApplePayRecurringPaymentRequest"
+ }
+ ],
+ "nullable": true
+ }
+ }
+ },
+ "ApplePayPaymentTiming": {
+ "type": "string",
+ "enum": [
+ "immediate",
+ "recurring"
+ ]
+ },
+ "ApplePayRecurringDetails": {
+ "type": "object",
+ "required": [
+ "payment_description",
+ "regular_billing",
+ "management_url"
+ ],
+ "properties": {
+ "payment_description": {
+ "type": "string",
+ "description": "A description of the recurring payment that Apple Pay displays to the user in the payment sheet"
+ },
+ "regular_billing": {
+ "$ref": "#/components/schemas/ApplePayRegularBillingDetails"
+ },
+ "billing_agreement": {
+ "type": "string",
+ "description": "A localized billing agreement that the payment sheet displays to the user before the user authorizes the payment",
+ "nullable": true
+ },
+ "management_url": {
+ "type": "string",
+ "description": "A URL to a web page where the user can update or delete the payment method for the recurring payment",
+ "example": "https://hyperswitch.io"
+ }
+ }
+ },
+ "ApplePayRecurringPaymentRequest": {
+ "type": "object",
+ "required": [
+ "payment_description",
+ "regular_billing",
+ "management_url"
+ ],
+ "properties": {
+ "payment_description": {
+ "type": "string",
+ "description": "A description of the recurring payment that Apple Pay displays to the user in the payment sheet"
+ },
+ "regular_billing": {
+ "$ref": "#/components/schemas/ApplePayRegularBillingRequest"
+ },
+ "billing_agreement": {
+ "type": "string",
+ "description": "A localized billing agreement that the payment sheet displays to the user before the user authorizes the payment",
+ "nullable": true
+ },
+ "management_url": {
+ "type": "string",
+ "description": "A URL to a web page where the user can update or delete the payment method for the recurring payment",
+ "example": "https://hyperswitch.io"
+ }
+ }
+ },
+ "ApplePayRedirectData": {
+ "type": "object"
+ },
+ "ApplePayRegularBillingDetails": {
+ "type": "object",
+ "required": [
+ "label"
+ ],
+ "properties": {
+ "label": {
+ "type": "string",
+ "description": "The label that Apple Pay displays to the user in the payment sheet with the recurring details"
+ },
+ "recurring_payment_start_date": {
+ "type": "string",
+ "format": "date-time",
+ "description": "The date of the first payment",
+ "example": "2023-09-10T23:59:59Z",
+ "nullable": true
+ },
+ "recurring_payment_end_date": {
+ "type": "string",
+ "format": "date-time",
+ "description": "The date of the final payment",
+ "example": "2023-09-10T23:59:59Z",
+ "nullable": true
+ },
+ "recurring_payment_interval_unit": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RecurringPaymentIntervalUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "recurring_payment_interval_count": {
+ "type": "integer",
+ "format": "int32",
+ "description": "The number of interval units that make up the total payment interval",
+ "nullable": true
+ }
+ }
+ },
+ "ApplePayRegularBillingRequest": {
+ "type": "object",
+ "required": [
+ "amount",
+ "label",
+ "payment_timing"
+ ],
+ "properties": {
+ "amount": {
+ "type": "string",
+ "description": "The amount of the recurring payment",
+ "example": "38.02"
+ },
+ "label": {
+ "type": "string",
+ "description": "The label that Apple Pay displays to the user in the payment sheet with the recurring details"
+ },
+ "payment_timing": {
+ "$ref": "#/components/schemas/ApplePayPaymentTiming"
+ },
+ "recurring_payment_start_date": {
+ "type": "string",
+ "format": "date-time",
+ "description": "The date of the first payment",
+ "nullable": true
+ },
+ "recurring_payment_end_date": {
+ "type": "string",
+ "format": "date-time",
+ "description": "The date of the final payment",
+ "nullable": true
+ },
+ "recurring_payment_interval_unit": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RecurringPaymentIntervalUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "recurring_payment_interval_count": {
+ "type": "integer",
+ "format": "int32",
+ "description": "The number of interval units that make up the total payment interval",
+ "nullable": true
+ }
+ }
+ },
+ "ApplePaySessionResponse": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/ThirdPartySdkSessionResponse"
+ },
+ {
+ "$ref": "#/components/schemas/NoThirdPartySdkSessionResponse"
+ },
+ {
+ "type": "object",
+ "default": null,
+ "nullable": true
+ }
+ ]
+ },
+ "ApplePayShippingContactFields": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ApplePayAddressParameters"
+ }
+ },
+ "ApplePayThirdPartySdkData": {
+ "type": "object"
+ },
+ "ApplePayWalletData": {
+ "type": "object",
+ "required": [
+ "payment_data",
+ "payment_method",
+ "transaction_identifier"
+ ],
+ "properties": {
+ "payment_data": {
+ "type": "string",
+ "description": "The payment data of Apple pay"
+ },
+ "payment_method": {
+ "$ref": "#/components/schemas/ApplepayPaymentMethod"
+ },
+ "transaction_identifier": {
+ "type": "string",
+ "description": "The unique identifier for the transaction"
+ }
+ }
+ },
+ "ApplepayConnectorMetadataRequest": {
+ "type": "object",
+ "properties": {
+ "session_token_data": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SessionTokenInfo"
+ }
+ ],
+ "nullable": true
+ }
+ }
+ },
+ "ApplepayInitiative": {
+ "type": "string",
+ "enum": [
+ "web",
+ "ios"
+ ]
+ },
+ "ApplepayPaymentMethod": {
+ "type": "object",
+ "required": [
+ "display_name",
+ "network",
+ "type"
+ ],
+ "properties": {
+ "display_name": {
+ "type": "string",
+ "description": "The name to be displayed on Apple Pay button"
+ },
+ "network": {
+ "type": "string",
+ "description": "The network of the Apple pay payment method"
+ },
+ "type": {
+ "type": "string",
+ "description": "The type of the payment method"
+ }
+ }
+ },
+ "ApplepaySessionTokenResponse": {
+ "type": "object",
+ "required": [
+ "connector",
+ "delayed_session_token",
+ "sdk_next_action"
+ ],
+ "properties": {
+ "session_token_data": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApplePaySessionResponse"
+ }
+ ],
+ "nullable": true
+ },
+ "payment_request_data": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApplePayPaymentRequest"
+ }
+ ],
+ "nullable": true
+ },
+ "connector": {
+ "type": "string",
+ "description": "The session token is w.r.t this connector"
+ },
+ "delayed_session_token": {
+ "type": "boolean",
+ "description": "Identifier for the delayed session response"
+ },
+ "sdk_next_action": {
+ "$ref": "#/components/schemas/SdkNextAction"
+ },
+ "connector_reference_id": {
+ "type": "string",
+ "description": "The connector transaction id",
+ "nullable": true
+ },
+ "connector_sdk_public_key": {
+ "type": "string",
+ "description": "The public key id is to invoke third party sdk",
+ "nullable": true
+ },
+ "connector_merchant_id": {
+ "type": "string",
+ "description": "The connector merchant id",
+ "nullable": true
+ }
+ }
+ },
+ "AttemptStatus": {
+ "type": "string",
+ "description": "The status of the attempt",
+ "enum": [
+ "started",
+ "authentication_failed",
+ "router_declined",
+ "authentication_pending",
+ "authentication_successful",
+ "authorized",
+ "authorization_failed",
+ "charged",
+ "authorizing",
+ "cod_initiated",
+ "voided",
+ "void_initiated",
+ "capture_initiated",
+ "capture_failed",
+ "void_failed",
+ "auto_refunded",
+ "partial_charged",
+ "partial_charged_and_chargeable",
+ "unresolved",
+ "pending",
+ "failure",
+ "payment_method_awaited",
+ "confirmation_awaited",
+ "device_data_collection_pending"
+ ]
+ },
+ "AuthenticationConnectorDetails": {
+ "type": "object",
+ "required": [
+ "authentication_connectors",
+ "three_ds_requestor_url"
+ ],
+ "properties": {
+ "authentication_connectors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/AuthenticationConnectors"
+ },
+ "description": "List of authentication connectors"
+ },
+ "three_ds_requestor_url": {
+ "type": "string",
+ "description": "URL of the (customer service) website that will be shown to the shopper in case of technical errors during the 3D Secure 2 process."
+ }
+ }
+ },
+ "AuthenticationConnectors": {
+ "type": "string",
+ "enum": [
+ "threedsecureio",
+ "netcetera",
+ "gpayments",
+ "ctp_mastercard",
+ "unified_authentication_service"
+ ]
+ },
+ "AuthenticationStatus": {
+ "type": "string",
+ "enum": [
+ "started",
+ "pending",
+ "success",
+ "failed"
+ ]
+ },
+ "AuthenticationType": {
+ "type": "string",
+ "description": "Pass this parameter to force 3DS or non 3DS auth for this payment. Some connectors will still force 3DS auth even in case of passing 'no_three_ds' here and vice versa. Default value is 'no_three_ds' if not set",
+ "enum": [
+ "three_ds",
+ "no_three_ds"
+ ]
+ },
+ "AuthorizationStatus": {
+ "type": "string",
+ "enum": [
+ "success",
+ "failure",
+ "processing",
+ "unresolved"
+ ]
+ },
+ "BacsBankDebitAdditionalData": {
+ "type": "object",
+ "required": [
+ "account_number",
+ "sort_code"
+ ],
+ "properties": {
+ "account_number": {
+ "type": "string",
+ "description": "Partially masked account number for Bacs payment method",
+ "example": "0001****3456"
+ },
+ "sort_code": {
+ "type": "string",
+ "description": "Partially masked sort code for Bacs payment method",
+ "example": "108800"
+ },
+ "bank_account_holder_name": {
+ "type": "string",
+ "description": "Bank account's owner name",
+ "example": "John Doe",
+ "nullable": true
+ }
+ }
+ },
+ "BacsBankTransfer": {
+ "type": "object",
+ "required": [
+ "bank_account_number",
+ "bank_sort_code"
+ ],
+ "properties": {
+ "bank_name": {
+ "type": "string",
+ "description": "Bank name",
+ "example": "Deutsche Bank",
+ "nullable": true
+ },
+ "bank_country_code": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CountryAlpha2"
+ }
+ ],
+ "nullable": true
+ },
+ "bank_city": {
+ "type": "string",
+ "description": "Bank city",
+ "example": "California",
+ "nullable": true
+ },
+ "bank_account_number": {
+ "type": "string",
+ "description": "Bank account number is an unique identifier assigned by a bank to a customer.",
+ "example": "000123456"
+ },
+ "bank_sort_code": {
+ "type": "string",
+ "description": "[6 digits] Sort Code - used in UK and Ireland for identifying a bank and it's branches.",
+ "example": "98-76-54"
+ }
+ }
+ },
+ "BacsBankTransferAdditionalData": {
+ "type": "object",
+ "description": "Masked payout method details for bacs bank transfer payout method",
+ "required": [
+ "bank_sort_code",
+ "bank_account_number"
+ ],
+ "properties": {
+ "bank_sort_code": {
+ "type": "string",
+ "description": "Partially masked sort code for Bacs payment method",
+ "example": "108800"
+ },
+ "bank_account_number": {
+ "type": "string",
+ "description": "Bank account's owner name",
+ "example": "0001****3456"
+ },
+ "bank_name": {
+ "type": "string",
+ "description": "Bank name",
+ "example": "Deutsche Bank",
+ "nullable": true
+ },
+ "bank_country_code": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CountryAlpha2"
+ }
+ ],
+ "nullable": true
+ },
+ "bank_city": {
+ "type": "string",
+ "description": "Bank city",
+ "example": "California",
+ "nullable": true
+ }
+ }
+ },
+ "BacsBankTransferInstructions": {
+ "type": "object",
+ "required": [
+ "account_holder_name",
+ "account_number",
+ "sort_code"
+ ],
+ "properties": {
+ "account_holder_name": {
+ "type": "string",
+ "example": "Jane Doe"
+ },
+ "account_number": {
+ "type": "string",
+ "example": "10244123908"
+ },
+ "sort_code": {
+ "type": "string",
+ "example": "012"
+ }
+ }
+ },
+ "BancontactBankRedirectAdditionalData": {
+ "type": "object",
+ "properties": {
+ "last4": {
+ "type": "string",
+ "description": "Last 4 digits of the card number",
+ "example": "4242",
+ "nullable": true
+ },
+ "card_exp_month": {
+ "type": "string",
+ "description": "The card's expiry month",
+ "example": "12",
+ "nullable": true
+ },
+ "card_exp_year": {
+ "type": "string",
+ "description": "The card's expiry year",
+ "example": "24",
+ "nullable": true
+ },
+ "card_holder_name": {
+ "type": "string",
+ "description": "The card holder's name",
+ "example": "John Test",
+ "nullable": true
+ }
+ }
+ },
+ "Bank": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/AchBankTransfer"
+ },
+ {
+ "$ref": "#/components/schemas/BacsBankTransfer"
+ },
+ {
+ "$ref": "#/components/schemas/SepaBankTransfer"
+ },
+ {
+ "$ref": "#/components/schemas/PixBankTransfer"
+ }
+ ]
+ },
+ "BankAdditionalData": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/AchBankTransferAdditionalData"
+ },
+ {
+ "$ref": "#/components/schemas/BacsBankTransferAdditionalData"
+ },
+ {
+ "$ref": "#/components/schemas/SepaBankTransferAdditionalData"
+ },
+ {
+ "$ref": "#/components/schemas/PixBankTransferAdditionalData"
+ }
+ ],
+ "description": "Masked payout method details for bank payout method"
+ },
+ "BankCodeResponse": {
+ "type": "object",
+ "required": [
+ "bank_name",
+ "eligible_connectors"
+ ],
+ "properties": {
+ "bank_name": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BankNames"
+ }
+ },
+ "eligible_connectors": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "BankDebitAdditionalData": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "ach"
+ ],
+ "properties": {
+ "ach": {
+ "$ref": "#/components/schemas/AchBankDebitAdditionalData"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "bacs"
+ ],
+ "properties": {
+ "bacs": {
+ "$ref": "#/components/schemas/BacsBankDebitAdditionalData"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "becs"
+ ],
+ "properties": {
+ "becs": {
+ "$ref": "#/components/schemas/BecsBankDebitAdditionalData"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "sepa"
+ ],
+ "properties": {
+ "sepa": {
+ "$ref": "#/components/schemas/SepaBankDebitAdditionalData"
+ }
+ }
+ }
+ ]
+ },
+ "BankDebitBilling": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The billing name for bank debits",
+ "example": "John Doe",
+ "nullable": true
+ },
+ "email": {
+ "type": "string",
+ "description": "The billing email for bank debits",
+ "example": "example@example.com",
+ "nullable": true
+ },
+ "address": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AddressDetails"
+ }
+ ],
+ "nullable": true
+ }
+ }
+ },
+ "BankDebitData": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "ach_bank_debit"
+ ],
+ "properties": {
+ "ach_bank_debit": {
+ "type": "object",
+ "description": "Payment Method data for Ach bank debit",
+ "required": [
+ "account_number",
+ "routing_number",
+ "card_holder_name",
+ "bank_account_holder_name",
+ "bank_name",
+ "bank_type",
+ "bank_holder_type"
+ ],
+ "properties": {
+ "billing_details": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BankDebitBilling"
+ }
+ ],
+ "nullable": true
+ },
+ "account_number": {
+ "type": "string",
+ "description": "Account number for ach bank debit payment",
+ "example": "000123456789"
+ },
+ "routing_number": {
+ "type": "string",
+ "description": "Routing number for ach bank debit payment",
"example": "110000000"
},
"card_holder_name": {
@@ -3123,6 +4255,20 @@
}
]
},
+ "BankDebitTypes": {
+ "type": "object",
+ "required": [
+ "eligible_connectors"
+ ],
+ "properties": {
+ "eligible_connectors": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
"BankHolderType": {
"type": "string",
"enum": [
@@ -3431,7 +4577,7 @@
},
"bank_account_bic": {
"type": "string",
- "description": "Bank account details for Giropay\nBank account bic code",
+ "description": "Bank account bic code",
"nullable": true
},
"bank_account_iban": {
@@ -4346,6 +5492,25 @@
}
]
},
+ "BankTransferTypes": {
+ "type": "object",
+ "required": [
+ "eligible_connectors"
+ ],
+ "properties": {
+ "eligible_connectors": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The list of eligible connectors for a given payment experience",
+ "example": [
+ "stripe",
+ "adyen"
+ ]
+ }
+ }
+ },
"BankType": {
"type": "string",
"enum": [
@@ -4548,6 +5713,21 @@
"type": "string",
"description": "User-agent of the browser",
"nullable": true
+ },
+ "os_type": {
+ "type": "string",
+ "description": "The os type of the client device",
+ "nullable": true
+ },
+ "os_version": {
+ "type": "string",
+ "description": "The os version of the client device",
+ "nullable": true
+ },
+ "device_model": {
+ "type": "string",
+ "description": "The device model of the client",
+ "nullable": true
}
}
},
@@ -4631,6 +5811,11 @@
"description": "A list of allowed domains (glob patterns) where this link can be embedded / opened from",
"uniqueItems": true,
"nullable": true
+ },
+ "branding_visibility": {
+ "type": "boolean",
+ "description": "Toggle for HyperSwitch branding visibility",
+ "nullable": true
}
}
}
@@ -4669,7 +5854,8 @@
"automatic",
"manual",
"manual_multiple",
- "scheduled"
+ "scheduled",
+ "sequential_automatic"
]
},
"CaptureResponse": {
@@ -4900,7 +6086,8 @@
"card_number",
"card_exp_month",
"card_exp_year",
- "card_holder_name"
+ "card_holder_name",
+ "card_issuing_country"
],
"properties": {
"card_number": {
@@ -4930,9 +6117,7 @@
"nullable": true
},
"card_issuing_country": {
- "type": "string",
- "description": "Card Issuing Country",
- "nullable": true
+ "$ref": "#/components/schemas/CountryAlpha2"
},
"card_network": {
"allOf": [
@@ -4948,8 +6133,11 @@
"nullable": true
},
"card_type": {
- "type": "string",
- "description": "Card Type",
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CardType"
+ }
+ ],
"nullable": true
}
},
@@ -4961,12 +6149,12 @@
"saved_to_locker"
],
"properties": {
- "scheme": {
- "type": "string",
- "nullable": true
- },
"issuer_country": {
- "type": "string",
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CountryAlpha2"
+ }
+ ],
"nullable": true
},
"last4_digits": {
@@ -4981,10 +6169,6 @@
"type": "string",
"nullable": true
},
- "card_token": {
- "type": "string",
- "nullable": true
- },
"card_holder_name": {
"type": "string",
"nullable": true
@@ -5025,21 +6209,9 @@
"CardDetailUpdate": {
"type": "object",
"required": [
- "card_exp_month",
- "card_exp_year",
"card_holder_name"
],
"properties": {
- "card_exp_month": {
- "type": "string",
- "description": "Card Expiry Month",
- "example": "10"
- },
- "card_exp_year": {
- "type": "string",
- "description": "Card Expiry Year",
- "example": "25"
- },
"card_holder_name": {
"type": "string",
"description": "Card Holder Name",
@@ -5071,6 +6243,41 @@
"Maestro"
]
},
+ "CardNetworkTypes": {
+ "type": "object",
+ "required": [
+ "eligible_connectors"
+ ],
+ "properties": {
+ "card_network": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CardNetwork"
+ }
+ ],
+ "nullable": true
+ },
+ "surcharge_details": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SurchargeDetailsResponse"
+ }
+ ],
+ "nullable": true
+ },
+ "eligible_connectors": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The list of eligible connectors for a given card network",
+ "example": [
+ "stripe",
+ "adyen"
+ ]
+ }
+ }
+ },
"CardPayout": {
"type": "object",
"required": [
@@ -5264,6 +6471,13 @@
}
]
},
+ "CardType": {
+ "type": "string",
+ "enum": [
+ "credit",
+ "debit"
+ ]
+ },
"CashappQr": {
"type": "object"
},
@@ -5290,6 +6504,73 @@
}
}
},
+ "ClickToPaySessionResponse": {
+ "type": "object",
+ "required": [
+ "dpa_id",
+ "dpa_name",
+ "locale",
+ "card_brands",
+ "acquirer_bin",
+ "acquirer_merchant_id",
+ "merchant_category_code",
+ "merchant_country_code",
+ "transaction_amount",
+ "transaction_currency_code"
+ ],
+ "properties": {
+ "dpa_id": {
+ "type": "string"
+ },
+ "dpa_name": {
+ "type": "string"
+ },
+ "locale": {
+ "type": "string"
+ },
+ "card_brands": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "acquirer_bin": {
+ "type": "string"
+ },
+ "acquirer_merchant_id": {
+ "type": "string"
+ },
+ "merchant_category_code": {
+ "type": "string"
+ },
+ "merchant_country_code": {
+ "type": "string"
+ },
+ "transaction_amount": {
+ "type": "string",
+ "example": "38.02"
+ },
+ "transaction_currency_code": {
+ "$ref": "#/components/schemas/Currency"
+ },
+ "phone_number": {
+ "type": "string",
+ "example": "9123456789",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "email": {
+ "type": "string",
+ "example": "johntest@test.com",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "phone_country_code": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ },
"Comparison": {
"type": "object",
"description": "Represents a single comparison condition.",
@@ -5357,11 +6638,14 @@
"checkout",
"coinbase",
"cryptopay",
+ "ctp_mastercard",
"cybersource",
"datatrans",
"deutschebank",
+ "digitalvirgo",
"dlocal",
"ebanx",
+ "elavon",
"fiserv",
"fiservemea",
"fiuu",
@@ -5373,12 +6657,14 @@
"helcim",
"iatapay",
"itaubank",
+ "jpmorgan",
"klarna",
"mifinity",
"mollie",
"multisafepay",
"netcetera",
"nexinets",
+ "nexixpay",
"nmi",
"noon",
"novalnet",
@@ -5414,6 +6700,43 @@
"zsl"
]
},
+ "ConnectorFeatureMatrixResponse": {
+ "type": "object",
+ "required": [
+ "name",
+ "supported_payment_methods"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string",
+ "nullable": true
+ },
+ "category": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentConnectorCategory"
+ }
+ ],
+ "nullable": true
+ },
+ "supported_payment_methods": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/SupportedPaymentMethod"
+ }
+ },
+ "supported_webhook_flows": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/EventClass"
+ },
+ "nullable": true
+ }
+ }
+ },
"ConnectorMetadata": {
"type": "object",
"description": "Some connectors like Apple Pay, Airwallex and Noon might require some additional information, find specific details in the child attributes below.",
@@ -5551,6 +6874,11 @@
"type": "object",
"description": "This field contains the Samsung Pay certificates and credentials",
"nullable": true
+ },
+ "paze": {
+ "type": "object",
+ "description": "This field contains the Paze certificates and credentials",
+ "nullable": true
}
},
"additionalProperties": false
@@ -5917,11 +7245,37 @@
}
]
},
+ "CtpServiceDetails": {
+ "type": "object",
+ "properties": {
+ "merchant_transaction_id": {
+ "type": "string",
+ "description": "merchant transaction id",
+ "nullable": true
+ },
+ "correlation_id": {
+ "type": "string",
+ "description": "network transaction correlation id",
+ "nullable": true
+ },
+ "x_src_flow_id": {
+ "type": "string",
+ "description": "session transaction flow id",
+ "nullable": true
+ },
+ "provider": {
+ "type": "string",
+ "description": "provider Eg: Visa, Mastercard",
+ "nullable": true
+ }
+ }
+ },
"Currency": {
"type": "string",
"description": "The three letter ISO currency code in uppercase. Eg: 'USD' for the United States Dollar.",
"enum": [
"AED",
+ "AFN",
"ALL",
"AMD",
"ANG",
@@ -5941,10 +7295,12 @@
"BOB",
"BRL",
"BSD",
+ "BTN",
"BWP",
"BYN",
"BZD",
"CAD",
+ "CDF",
"CHF",
"CLP",
"CNY",
@@ -5958,6 +7314,7 @@
"DOP",
"DZD",
"EGP",
+ "ERN",
"ETB",
"EUR",
"FJD",
@@ -5979,6 +7336,8 @@
"ILS",
"INR",
"IQD",
+ "IRR",
+ "ISK",
"JMD",
"JOD",
"JPY",
@@ -5986,6 +7345,7 @@
"KGS",
"KHR",
"KMF",
+ "KPW",
"KRW",
"KWD",
"KYD",
@@ -6032,6 +7392,7 @@
"SAR",
"SBD",
"SCR",
+ "SDG",
"SEK",
"SGD",
"SHP",
@@ -6042,8 +7403,11 @@
"SSP",
"STN",
"SVC",
+ "SYP",
"SZL",
"THB",
+ "TJS",
+ "TMT",
"TND",
"TOP",
"TRY",
@@ -6065,7 +7429,8 @@
"XPF",
"YER",
"ZAR",
- "ZMW"
+ "ZMW",
+ "ZWL"
]
},
"CustomerAcceptance": {
@@ -6132,13 +7497,20 @@
"CustomerDeleteResponse": {
"type": "object",
"required": [
+ "id",
"merchant_reference_id",
"customer_deleted",
"address_deleted",
- "payment_methods_deleted",
- "id"
+ "payment_methods_deleted"
],
"properties": {
+ "id": {
+ "type": "string",
+ "description": "Unique identifier for the customer",
+ "example": "12345_cus_01926c58bc6e77c09e809964e72af8c8",
+ "maxLength": 64,
+ "minLength": 32
+ },
"merchant_reference_id": {
"type": "string",
"description": "The identifier for the customer object",
@@ -6159,10 +7531,6 @@
"type": "boolean",
"description": "Whether payment methods deleted or not",
"example": false
- },
- "id": {
- "type": "string",
- "description": "Global id"
}
}
},
@@ -6255,20 +7623,20 @@
"CustomerPaymentMethod": {
"type": "object",
"required": [
- "payment_token",
"payment_method_id",
"customer_id",
- "payment_method",
+ "payment_method_type",
"recurring_enabled",
- "installment_payment_enabled",
+ "created",
"requires_cvv",
- "default_payment_method_set"
+ "is_default"
],
"properties": {
"payment_token": {
"type": "string",
"description": "Token for payment method in temporary card locker which gets refreshed often",
- "example": "7ebf443f-a050-4067-84e5-e6f6d4800aef"
+ "example": "7ebf443f-a050-4067-84e5-e6f6d4800aef",
+ "nullable": true
},
"payment_method_id": {
"type": "string",
@@ -6278,14 +7646,14 @@
"customer_id": {
"type": "string",
"description": "The unique identifier of the customer.",
- "example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
+ "example": "12345_cus_01926c58bc6e77c09e809964e72af8c8",
"maxLength": 64,
- "minLength": 1
+ "minLength": 32
},
- "payment_method": {
+ "payment_method_type": {
"$ref": "#/components/schemas/PaymentMethod"
},
- "payment_method_type": {
+ "payment_method_subtype": {
"allOf": [
{
"$ref": "#/components/schemas/PaymentMethodType"
@@ -6293,65 +7661,15 @@
],
"nullable": true
},
- "payment_method_issuer": {
- "type": "string",
- "description": "The name of the bank/ provider issuing the payment method to the end user",
- "example": "Citibank",
- "nullable": true
- },
- "payment_method_issuer_code": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodIssuerCode"
- }
- ],
- "nullable": true
- },
"recurring_enabled": {
"type": "boolean",
"description": "Indicates whether the payment method is eligible for recurring payments",
"example": true
},
- "installment_payment_enabled": {
- "type": "boolean",
- "description": "Indicates whether the payment method is eligible for installment payments",
- "example": true
- },
- "payment_experience": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/PaymentExperience"
- },
- "description": "Type of payment experience enabled with the connector",
- "example": [
- "redirect_to_url"
- ],
- "nullable": true
- },
- "card": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CardDetailFromLocker"
- }
- ],
- "nullable": true
- },
- "metadata": {
- "type": "object",
- "description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Metadata is useful for storing additional, structured information on an object.",
- "nullable": true
- },
- "created": {
- "type": "string",
- "format": "date-time",
- "description": "A timestamp (ISO 8601 code) that determines when the customer was created",
- "example": "2023-01-18T11:04:09.922Z",
- "nullable": true
- },
- "bank_transfer": {
+ "payment_method_data": {
"allOf": [
{
- "$ref": "#/components/schemas/Bank"
+ "$ref": "#/components/schemas/PaymentMethodListData"
}
],
"nullable": true
@@ -6364,6 +7682,12 @@
],
"nullable": true
},
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "description": "A timestamp (ISO 8601 code) that determines when the payment method was created",
+ "example": "2023-01-18T11:04:09.922Z"
+ },
"surcharge_details": {
"allOf": [
{
@@ -6384,7 +7708,7 @@
"example": "2024-02-24T11:04:09.922Z",
"nullable": true
},
- "default_payment_method_set": {
+ "is_default": {
"type": "boolean",
"description": "Indicates if the payment method has been set to default or not",
"example": true
@@ -6463,8 +7787,89 @@
},
"phone_country_code": {
"type": "string",
- "description": "The country code for the customer phone number",
- "example": "+65",
+ "description": "The country code for the customer phone number",
+ "example": "+65",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "default_billing_address": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AddressDetails"
+ }
+ ],
+ "nullable": true
+ },
+ "default_shipping_address": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AddressDetails"
+ }
+ ],
+ "nullable": true
+ },
+ "metadata": {
+ "type": "object",
+ "description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500\ncharacters long. Metadata is useful for storing additional, structured information on an\nobject.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "CustomerResponse": {
+ "type": "object",
+ "required": [
+ "id",
+ "merchant_reference_id",
+ "created_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "Unique identifier for the customer",
+ "example": "12345_cus_01926c58bc6e77c09e809964e72af8c8",
+ "maxLength": 64,
+ "minLength": 32
+ },
+ "merchant_reference_id": {
+ "type": "string",
+ "description": "The identifier for the customer object",
+ "example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
+ "maxLength": 64,
+ "minLength": 1
+ },
+ "name": {
+ "type": "string",
+ "description": "The customer's name",
+ "example": "Jon Test",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "email": {
+ "type": "string",
+ "description": "The customer's email address",
+ "example": "JonTest@test.com",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "phone": {
+ "type": "string",
+ "description": "The customer's phone number",
+ "example": "9123456789",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "phone_country_code": {
+ "type": "string",
+ "description": "The country code for the customer phone number",
+ "example": "+65",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "description": {
+ "type": "string",
+ "description": "An arbitrary string that you can attach to a customer object.",
+ "example": "First Customer",
"nullable": true,
"maxLength": 255
},
@@ -6484,25 +7889,38 @@
],
"nullable": true
},
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "description": "A timestamp (ISO 8601 code) that determines when the customer was created",
+ "example": "2023-01-18T11:04:09.922Z"
+ },
"metadata": {
"type": "object",
"description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500\ncharacters long. Metadata is useful for storing additional, structured information on an\nobject.",
"nullable": true
+ },
+ "default_payment_method_id": {
+ "type": "string",
+ "description": "The identifier for the default payment method.",
+ "example": "pm_djh2837dwduh890123",
+ "nullable": true,
+ "maxLength": 64
}
}
},
- "CustomerResponse": {
+ "CustomerUpdateRequest": {
"type": "object",
"required": [
- "merchant_reference_id",
- "created_at",
- "id"
+ "name",
+ "email"
],
"properties": {
"merchant_reference_id": {
"type": "string",
- "description": "The identifier for the customer object",
+ "description": "The merchant identifier for the customer object.",
"example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
+ "nullable": true,
"maxLength": 64,
"minLength": 1
},
@@ -6510,14 +7928,12 @@
"type": "string",
"description": "The customer's name",
"example": "Jon Test",
- "nullable": true,
"maxLength": 255
},
"email": {
"type": "string",
"description": "The customer's email address",
"example": "JonTest@test.com",
- "nullable": true,
"maxLength": 255
},
"phone": {
@@ -6527,17 +7943,17 @@
"nullable": true,
"maxLength": 255
},
- "phone_country_code": {
+ "description": {
"type": "string",
- "description": "The country code for the customer phone number",
- "example": "+65",
+ "description": "An arbitrary string that you can attach to a customer object.",
+ "example": "First Customer",
"nullable": true,
"maxLength": 255
},
- "description": {
+ "phone_country_code": {
"type": "string",
- "description": "An arbitrary string that you can attach to a customer object.",
- "example": "First Customer",
+ "description": "The country code for the customer phone number",
+ "example": "+65",
"nullable": true,
"maxLength": 255
},
@@ -6557,12 +7973,6 @@
],
"nullable": true
},
- "created_at": {
- "type": "string",
- "format": "date-time",
- "description": "A timestamp (ISO 8601 code) that determines when the customer was created",
- "example": "2023-01-18T11:04:09.922Z"
- },
"metadata": {
"type": "object",
"description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500\ncharacters long. Metadata is useful for storing additional, structured information on an\nobject.",
@@ -6570,16 +7980,12 @@
},
"default_payment_method_id": {
"type": "string",
- "description": "The identifier for the default payment method.",
- "example": "pm_djh2837dwduh890123",
- "nullable": true,
- "maxLength": 64
- },
- "id": {
- "type": "string",
- "description": "Global id"
+ "description": "The unique identifier of the payment method",
+ "example": "card_rGK4Vi5iSW70MY7J2mIg",
+ "nullable": true
}
- }
+ },
+ "additionalProperties": false
},
"DecoupledAuthenticationType": {
"type": "string",
@@ -6669,8 +8075,7 @@
"description": "The dispute amount"
},
"currency": {
- "type": "string",
- "description": "The three-letter ISO currency code"
+ "$ref": "#/components/schemas/Currency"
},
"dispute_stage": {
"$ref": "#/components/schemas/DisputeStage"
@@ -6865,6 +8270,61 @@
}
}
},
+ "ElementPosition": {
+ "type": "string",
+ "enum": [
+ "left",
+ "top left",
+ "top",
+ "top right",
+ "right",
+ "bottom right",
+ "bottom",
+ "bottom left",
+ "center"
+ ]
+ },
+ "ElementSize": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "Variants"
+ ],
+ "properties": {
+ "Variants": {
+ "$ref": "#/components/schemas/SizeVariants"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "Percentage"
+ ],
+ "properties": {
+ "Percentage": {
+ "type": "integer",
+ "format": "int32",
+ "minimum": 0
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "Pixels"
+ ],
+ "properties": {
+ "Pixels": {
+ "type": "integer",
+ "format": "int32",
+ "minimum": 0
+ }
+ }
+ }
+ ]
+ },
"EnablePaymentLinkRequest": {
"type": "string",
"description": "Whether payment link is requested to be enabled or not for this transaction",
@@ -6927,6 +8387,44 @@
}
}
},
+ "ErrorCategory": {
+ "type": "string",
+ "enum": [
+ "frm_decline",
+ "processor_downtime",
+ "processor_decline_unauthorized",
+ "issue_with_payment_method",
+ "processor_decline_incorrect_data"
+ ]
+ },
+ "ErrorDetails": {
+ "type": "object",
+ "description": "Error details for the payment",
+ "required": [
+ "code",
+ "message"
+ ],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "The error code"
+ },
+ "message": {
+ "type": "string",
+ "description": "The error message"
+ },
+ "unified_code": {
+ "type": "string",
+ "description": "The unified error code across all connectors.\nThis can be relied upon for taking decisions based on the error.",
+ "nullable": true
+ },
+ "unified_message": {
+ "type": "string",
+ "description": "The unified error message across all connectors.\nIf there is a translation available, this will have the translated message",
+ "nullable": true
+ }
+ }
+ },
"EventClass": {
"type": "string",
"enum": [
@@ -7211,6 +8709,38 @@
}
}
},
+ "FeatureMatrixListResponse": {
+ "type": "object",
+ "required": [
+ "connector_count",
+ "connectors"
+ ],
+ "properties": {
+ "connector_count": {
+ "type": "integer",
+ "description": "The number of connectors included in the response",
+ "minimum": 0
+ },
+ "connectors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ConnectorFeatureMatrixResponse"
+ }
+ }
+ }
+ },
+ "FeatureMatrixRequest": {
+ "type": "object",
+ "properties": {
+ "connectors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Connector"
+ },
+ "nullable": true
+ }
+ }
+ },
"FeatureMetadata": {
"type": "object",
"description": "additional data that might be required by hyperswitch",
@@ -7230,9 +8760,25 @@
},
"description": "Additional tags to be used for global search",
"nullable": true
+ },
+ "apple_pay_recurring_details": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApplePayRecurringDetails"
+ }
+ ],
+ "nullable": true
}
}
},
+ "FeatureStatus": {
+ "type": "string",
+ "description": "The status of the feature",
+ "enum": [
+ "not_supported",
+ "supported"
+ ]
+ },
"FieldType": {
"oneOf": [
{
@@ -7556,18 +9102,49 @@
{
"type": "string",
"enum": [
- "browser_language"
+ "user_bsb_number"
]
},
{
"type": "string",
"enum": [
- "browser_ip"
+ "user_bank_sort_code"
+ ]
+ },
+ {
+ "type": "string",
+ "enum": [
+ "user_bank_routing_number"
+ ]
+ },
+ {
+ "type": "string",
+ "enum": [
+ "user_msisdn"
+ ]
+ },
+ {
+ "type": "string",
+ "enum": [
+ "user_client_identifier"
+ ]
+ },
+ {
+ "type": "string",
+ "enum": [
+ "order_details_product_name"
]
}
],
"description": "Possible field type of required fields in payment_method_data"
},
+ "ForceSync": {
+ "type": "string",
+ "enum": [
+ "true",
+ "false"
+ ]
+ },
"FrmAction": {
"type": "string",
"enum": [
@@ -8272,6 +9849,14 @@
"type": "string",
"description": "error message unified across the connectors",
"nullable": true
+ },
+ "error_category": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ErrorCategory"
+ }
+ ],
+ "nullable": true
}
}
},
@@ -8405,6 +9990,14 @@
"type": "string",
"description": "error message unified across the connectors",
"nullable": true
+ },
+ "error_category": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ErrorCategory"
+ }
+ ],
+ "nullable": true
}
}
},
@@ -8501,6 +10094,14 @@
"type": "string",
"description": "error message unified across the connectors",
"nullable": true
+ },
+ "error_category": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ErrorCategory"
+ }
+ ],
+ "nullable": true
}
}
},
@@ -8986,8 +10587,7 @@
"MerchantAccountCreate": {
"type": "object",
"required": [
- "merchant_name",
- "organization_id"
+ "merchant_name"
],
"properties": {
"merchant_name": {
@@ -9008,13 +10608,6 @@
"type": "object",
"description": "Metadata is useful for storing additional, unstructured information about the merchant account.",
"nullable": true
- },
- "organization_id": {
- "type": "string",
- "description": "The id of the organization to which the merchant belongs to. Please use the organization endpoint to create an organization",
- "example": "org_q98uSGAYbjEwqs0mJwnz",
- "maxLength": 64,
- "minLength": 1
}
},
"additionalProperties": false
@@ -9183,7 +10776,8 @@
"required": [
"connector_type",
"connector_name",
- "profile_id"
+ "profile_id",
+ "payment_methods_enabled"
],
"properties": {
"connector_type": {
@@ -9212,48 +10806,7 @@
"nullable": true
},
"payment_methods_enabled": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/PaymentMethodsEnabled"
- },
- "description": "An object containing the details about the payment methods that need to be enabled under this merchant connector account",
- "example": [
- {
- "accepted_countries": {
- "list": [
- "FR",
- "DE",
- "IN"
- ],
- "type": "disable_only"
- },
- "accepted_currencies": {
- "list": [
- "USD",
- "EUR"
- ],
- "type": "enable_only"
- },
- "installment_payment_enabled": true,
- "maximum_amount": 68607706,
- "minimum_amount": 1,
- "payment_method": "wallet",
- "payment_method_issuers": [
- "labore magna ipsum",
- "aute"
- ],
- "payment_method_types": [
- "upi_collect",
- "upi_intent"
- ],
- "payment_schemes": [
- "Discover",
- "Discover"
- ],
- "recurring_enabled": true
- }
- ],
- "nullable": true
+ "$ref": "#/components/schemas/PaymentMethodsEnabled"
},
"connector_webhook_details": {
"allOf": [
@@ -9396,6 +10949,7 @@
"connector_name",
"id",
"profile_id",
+ "payment_methods_enabled",
"status"
],
"properties": {
@@ -9426,49 +10980,7 @@
"items": {
"$ref": "#/components/schemas/PaymentMethodsEnabled"
},
- "description": "An object containing the details about the payment methods that need to be enabled under this merchant connector account",
- "example": [
- {
- "accepted_countries": {
- "list": [
- "FR",
- "DE",
- "IN"
- ],
- "type": "disable_only"
- },
- "accepted_currencies": {
- "list": [
- "USD",
- "EUR"
- ],
- "type": "enable_only"
- },
- "installment_payment_enabled": true,
- "maximum_amount": 68607706,
- "minimum_amount": 1,
- "payment_method": "wallet",
- "payment_method_issuers": [
- "labore magna ipsum",
- "aute"
- ],
- "payment_method_types": [
- "upi_collect",
- "upi_intent"
- ],
- "payment_schemes": [
- "Discover",
- "Discover"
- ],
- "recurring_enabled": true
- }
- ],
- "nullable": true
- },
- "metadata": {
- "type": "object",
- "description": "Metadata is useful for storing additional, unstructured information on an object.",
- "nullable": true
+ "description": "An object containing the details about the payment methods that need to be enabled under this merchant connector account"
},
"disabled": {
"type": "boolean",
@@ -9495,27 +11007,11 @@
"nullable": true
},
"pm_auth_config": {
- "type": "object",
- "nullable": true
- },
- "status": {
- "$ref": "#/components/schemas/ConnectorStatus"
- },
- "additional_merchant_data": {
- "allOf": [
- {
- "$ref": "#/components/schemas/AdditionalMerchantData"
- }
- ],
+ "type": "object",
"nullable": true
},
- "connector_wallets_details": {
- "allOf": [
- {
- "$ref": "#/components/schemas/ConnectorWalletDetails"
- }
- ],
- "nullable": true
+ "status": {
+ "$ref": "#/components/schemas/ConnectorStatus"
}
},
"additionalProperties": false
@@ -9528,6 +11024,7 @@
"connector_name",
"id",
"profile_id",
+ "payment_methods_enabled",
"status"
],
"properties": {
@@ -9566,44 +11063,7 @@
"items": {
"$ref": "#/components/schemas/PaymentMethodsEnabled"
},
- "description": "An object containing the details about the payment methods that need to be enabled under this merchant connector account",
- "example": [
- {
- "accepted_countries": {
- "list": [
- "FR",
- "DE",
- "IN"
- ],
- "type": "disable_only"
- },
- "accepted_currencies": {
- "list": [
- "USD",
- "EUR"
- ],
- "type": "enable_only"
- },
- "installment_payment_enabled": true,
- "maximum_amount": 68607706,
- "minimum_amount": 1,
- "payment_method": "wallet",
- "payment_method_issuers": [
- "labore magna ipsum",
- "aute"
- ],
- "payment_method_types": [
- "upi_collect",
- "upi_intent"
- ],
- "payment_schemes": [
- "Discover",
- "Discover"
- ],
- "recurring_enabled": true
- }
- ],
- "nullable": true
+ "description": "An object containing the details about the payment methods that need to be enabled under this merchant connector account"
},
"connector_webhook_details": {
"allOf": [
@@ -9701,42 +11161,6 @@
"$ref": "#/components/schemas/PaymentMethodsEnabled"
},
"description": "An object containing the details about the payment methods that need to be enabled under this merchant connector account",
- "example": [
- {
- "accepted_countries": {
- "list": [
- "FR",
- "DE",
- "IN"
- ],
- "type": "disable_only"
- },
- "accepted_currencies": {
- "list": [
- "USD",
- "EUR"
- ],
- "type": "enable_only"
- },
- "installment_payment_enabled": true,
- "maximum_amount": 68607706,
- "minimum_amount": 1,
- "payment_method": "wallet",
- "payment_method_issuers": [
- "labore magna ipsum",
- "aute"
- ],
- "payment_method_types": [
- "upi_collect",
- "upi_intent"
- ],
- "payment_schemes": [
- "Discover",
- "Discover"
- ],
- "recurring_enabled": true
- }
- ],
"nullable": true
},
"connector_webhook_details": {
@@ -10017,6 +11441,71 @@
"MobilePayRedirection": {
"type": "object"
},
+ "MobilePaymentConsent": {
+ "type": "string",
+ "enum": [
+ "consent_required",
+ "consent_not_required",
+ "consent_optional"
+ ]
+ },
+ "MobilePaymentData": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "direct_carrier_billing"
+ ],
+ "properties": {
+ "direct_carrier_billing": {
+ "type": "object",
+ "required": [
+ "msisdn"
+ ],
+ "properties": {
+ "msisdn": {
+ "type": "string",
+ "description": "The phone number of the user",
+ "example": "1234567890"
+ },
+ "client_uid": {
+ "type": "string",
+ "description": "Unique user id",
+ "example": "02iacdYXGI9CnyJdoN8c7",
+ "nullable": true
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "MobilePaymentNextStepData": {
+ "type": "object",
+ "required": [
+ "consent_data_required"
+ ],
+ "properties": {
+ "consent_data_required": {
+ "$ref": "#/components/schemas/MobilePaymentConsent"
+ }
+ }
+ },
+ "MobilePaymentResponse": {
+ "allOf": [
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MobilePaymentData"
+ }
+ ],
+ "nullable": true
+ },
+ {
+ "type": "object"
+ }
+ ]
+ },
"MomoRedirection": {
"type": "object"
},
@@ -10047,9 +11536,81 @@
}
}
},
+ "NetworkTransactionIdAndCardDetails": {
+ "type": "object",
+ "required": [
+ "card_number",
+ "card_exp_month",
+ "card_exp_year",
+ "card_holder_name",
+ "network_transaction_id"
+ ],
+ "properties": {
+ "card_number": {
+ "type": "string",
+ "description": "The card number",
+ "example": "4242424242424242"
+ },
+ "card_exp_month": {
+ "type": "string",
+ "description": "The card's expiry month",
+ "example": "24"
+ },
+ "card_exp_year": {
+ "type": "string",
+ "description": "The card's expiry year",
+ "example": "24"
+ },
+ "card_holder_name": {
+ "type": "string",
+ "description": "The card holder's name",
+ "example": "John Test"
+ },
+ "card_issuer": {
+ "type": "string",
+ "description": "The name of the issuer of card",
+ "example": "chase",
+ "nullable": true
+ },
+ "card_network": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CardNetwork"
+ }
+ ],
+ "nullable": true
+ },
+ "card_type": {
+ "type": "string",
+ "example": "CREDIT",
+ "nullable": true
+ },
+ "card_issuing_country": {
+ "type": "string",
+ "example": "INDIA",
+ "nullable": true
+ },
+ "bank_code": {
+ "type": "string",
+ "example": "JP_AMEX",
+ "nullable": true
+ },
+ "nick_name": {
+ "type": "string",
+ "description": "The card holder's nick name",
+ "example": "John Test",
+ "nullable": true
+ },
+ "network_transaction_id": {
+ "type": "string",
+ "description": "The network transaction ID provided by the card network during a CIT (Customer Initiated Transaction),\nwhere `setup_future_usage` is set to `off_session`."
+ }
+ }
+ },
"NextActionCall": {
"type": "string",
"enum": [
+ "post_session_tokens",
"confirm",
"sync",
"complete_authorize"
@@ -10245,6 +11806,25 @@
]
}
}
+ },
+ {
+ "type": "object",
+ "description": "Contains consent to collect otp for mobile payment",
+ "required": [
+ "consent_data_required",
+ "type"
+ ],
+ "properties": {
+ "consent_data_required": {
+ "$ref": "#/components/schemas/MobilePaymentConsent"
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "collect_otp"
+ ]
+ }
+ }
}
],
"discriminator": {
@@ -10259,7 +11839,8 @@
"invoke_sdk_client",
"trigger_api",
"display_bank_transfer_information",
- "display_wait_screen"
+ "display_wait_screen",
+ "collect_otp"
]
},
"NoThirdPartySdkSessionResponse": {
@@ -10417,70 +11998,6 @@
}
}
},
- "OrderDetails": {
- "type": "object",
- "required": [
- "product_name",
- "quantity"
- ],
- "properties": {
- "product_name": {
- "type": "string",
- "description": "Name of the product that is being purchased",
- "example": "shirt",
- "maxLength": 255
- },
- "quantity": {
- "type": "integer",
- "format": "int32",
- "description": "The quantity of the product to be purchased",
- "example": 1,
- "minimum": 0
- },
- "requires_shipping": {
- "type": "boolean",
- "nullable": true
- },
- "product_img_link": {
- "type": "string",
- "description": "The image URL of the product",
- "nullable": true
- },
- "product_id": {
- "type": "string",
- "description": "ID of the product that is being purchased",
- "nullable": true
- },
- "category": {
- "type": "string",
- "description": "Category of the product that is being purchased",
- "nullable": true
- },
- "sub_category": {
- "type": "string",
- "description": "Sub category of the product that is being purchased",
- "nullable": true
- },
- "brand": {
- "type": "string",
- "description": "Brand of the product that is being purchased",
- "nullable": true
- },
- "product_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/ProductType"
- }
- ],
- "nullable": true
- },
- "product_tax_code": {
- "type": "string",
- "description": "The tax code for the product",
- "nullable": true
- }
- }
- },
"OrderDetailsWithAmount": {
"type": "object",
"required": [
@@ -10507,6 +12024,18 @@
"format": "int64",
"description": "the amount per quantity of product"
},
+ "tax_rate": {
+ "type": "number",
+ "format": "double",
+ "description": "tax rate applicable to the product",
+ "nullable": true
+ },
+ "total_tax_amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "total tax amount applicable to the product",
+ "nullable": true
+ },
"requires_shipping": {
"type": "boolean",
"nullable": true
@@ -10565,14 +12094,17 @@
],
"properties": {
"organization_name": {
- "type": "string"
+ "type": "string",
+ "description": "Name of the organization"
},
"organization_details": {
"type": "object",
+ "description": "Details about the organization",
"nullable": true
},
"metadata": {
"type": "object",
+ "description": "Metadata is useful for storing additional, unstructured information on an object.",
"nullable": true
}
},
@@ -10581,27 +12113,31 @@
"OrganizationResponse": {
"type": "object",
"required": [
- "organization_id",
+ "id",
"modified_at",
"created_at"
],
"properties": {
- "organization_id": {
+ "id": {
"type": "string",
+ "description": "The unique identifier for the Organization",
"example": "org_q98uSGAYbjEwqs0mJwnz",
"maxLength": 64,
"minLength": 1
},
"organization_name": {
"type": "string",
+ "description": "Name of the Organization",
"nullable": true
},
"organization_details": {
"type": "object",
+ "description": "Details about the organization",
"nullable": true
},
"metadata": {
"type": "object",
+ "description": "Metadata is useful for storing additional, unstructured information on an object.",
"nullable": true
},
"modified_at": {
@@ -10619,14 +12155,17 @@
"properties": {
"organization_name": {
"type": "string",
+ "description": "Name of the organization",
"nullable": true
},
"organization_details": {
"type": "object",
+ "description": "Details about the organization",
"nullable": true
},
"metadata": {
"type": "object",
+ "description": "Metadata is useful for storing additional, unstructured information on an object.",
"nullable": true
}
},
@@ -10908,6 +12447,17 @@
}
}
},
+ {
+ "type": "object",
+ "required": [
+ "klarna_checkout"
+ ],
+ "properties": {
+ "klarna_checkout": {
+ "type": "object"
+ }
+ }
+ },
{
"type": "object",
"required": [
@@ -11005,13 +12555,95 @@
}
}
},
- "PaylaterResponse": {
+ "PaylaterResponse": {
+ "type": "object",
+ "properties": {
+ "klarna_sdk": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/KlarnaSdkPaymentMethodResponse"
+ }
+ ],
+ "nullable": true
+ }
+ }
+ },
+ "PaymentAmountDetailsResponse": {
"type": "object",
+ "required": [
+ "currency",
+ "external_tax_calculation",
+ "surcharge_calculation",
+ "net_amount",
+ "amount_capturable"
+ ],
"properties": {
- "klarna_sdk": {
+ "order_amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The payment amount. Amount for the payment in the lowest denomination of the currency, (i.e) in cents for USD denomination, in yen for JPY denomination etc. E.g., Pass 100 to charge $1.00 and 1 for 1¥ since ¥ is a zero-decimal currency. Read more about [the Decimal and Non-Decimal Currencies](https://github.com/juspay/hyperswitch/wiki/Decimal-and-Non%E2%80%90Decimal-Currencies)",
+ "example": 6540,
+ "minimum": 0
+ },
+ "currency": {
+ "$ref": "#/components/schemas/Currency"
+ },
+ "shipping_cost": {
"allOf": [
{
- "$ref": "#/components/schemas/KlarnaSdkPaymentMethodResponse"
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "order_tax_amount": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "external_tax_calculation": {
+ "$ref": "#/components/schemas/TaxCalculationOverride"
+ },
+ "surcharge_calculation": {
+ "$ref": "#/components/schemas/SurchargeCalculationOverride"
+ },
+ "surcharge_amount": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "tax_on_surcharge": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "net_amount": {
+ "$ref": "#/components/schemas/MinorUnit"
+ },
+ "amount_to_capture": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "amount_capturable": {
+ "$ref": "#/components/schemas/MinorUnit"
+ },
+ "amount_captured": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
}
],
"nullable": true
@@ -11041,6 +12673,13 @@
"description": "The payment attempt amount. Amount for the payment in lowest denomination of the currency. (i.e) in cents for USD denomination, in paisa for INR denomination etc.,",
"example": 6540
},
+ "order_tax_amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The payment attempt tax_amount.",
+ "example": 6540,
+ "nullable": true
+ },
"currency": {
"allOf": [
{
@@ -11169,59 +12808,6 @@
}
}
},
- "PaymentChargeRequest": {
- "type": "object",
- "description": "Fee information to be charged on the payment being collected",
- "required": [
- "charge_type",
- "fees",
- "transfer_account_id"
- ],
- "properties": {
- "charge_type": {
- "$ref": "#/components/schemas/PaymentChargeType"
- },
- "fees": {
- "type": "integer",
- "format": "int64",
- "description": "Platform fees to be collected on the payment",
- "example": 6540
- },
- "transfer_account_id": {
- "type": "string",
- "description": "Identifier for the reseller's account to send the funds to"
- }
- }
- },
- "PaymentChargeResponse": {
- "type": "object",
- "description": "Fee information to be charged on the payment being collected",
- "required": [
- "charge_type",
- "application_fees",
- "transfer_account_id"
- ],
- "properties": {
- "charge_id": {
- "type": "string",
- "description": "Identifier for charge created for the payment",
- "nullable": true
- },
- "charge_type": {
- "$ref": "#/components/schemas/PaymentChargeType"
- },
- "application_fees": {
- "type": "integer",
- "format": "int64",
- "description": "Platform fees collected on the payment",
- "example": 6540
- },
- "transfer_account_id": {
- "type": "string",
- "description": "Identifier for the reseller's account where the funds were transferred"
- }
- }
- },
"PaymentChargeType": {
"oneOf": [
{
@@ -11237,6 +12823,15 @@
}
]
},
+ "PaymentConnectorCategory": {
+ "type": "string",
+ "description": "Connector Access Method",
+ "enum": [
+ "payment_gateway",
+ "alternative_payment_method",
+ "bank_acquirer"
+ ]
+ },
"PaymentCreatePaymentLinkConfig": {
"allOf": [
{
@@ -11263,9 +12858,66 @@
"one_click",
"link_wallet",
"invoke_payment_app",
- "display_wait_screen"
+ "display_wait_screen",
+ "collect_otp"
]
},
+ "PaymentExperienceTypes": {
+ "type": "object",
+ "required": [
+ "eligible_connectors"
+ ],
+ "properties": {
+ "payment_experience_type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentExperience"
+ }
+ ],
+ "nullable": true
+ },
+ "eligible_connectors": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The list of eligible connectors for a given payment experience",
+ "example": [
+ "stripe",
+ "adyen"
+ ]
+ }
+ }
+ },
+ "PaymentLinkBackgroundImageConfig": {
+ "type": "object",
+ "required": [
+ "url"
+ ],
+ "properties": {
+ "url": {
+ "type": "string",
+ "description": "URL of the image",
+ "example": "https://hyperswitch.io/favicon.ico"
+ },
+ "position": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ElementPosition"
+ }
+ ],
+ "nullable": true
+ },
+ "size": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ElementSize"
+ }
+ ],
+ "nullable": true
+ }
+ }
+ },
"PaymentLinkConfig": {
"type": "object",
"required": [
@@ -11274,7 +12926,9 @@
"seller_name",
"sdk_layout",
"display_sdk_only",
- "enabled_saved_payment_method"
+ "enabled_saved_payment_method",
+ "hide_card_nickname_field",
+ "show_card_form_by_default"
],
"properties": {
"theme": {
@@ -11301,6 +12955,14 @@
"type": "boolean",
"description": "Enable saved payment method option for payment link"
},
+ "hide_card_nickname_field": {
+ "type": "boolean",
+ "description": "Hide card nickname field option for payment link"
+ },
+ "show_card_form_by_default": {
+ "type": "boolean",
+ "description": "Show card form by default for payment link"
+ },
"allowed_domains": {
"type": "array",
"items": {
@@ -11317,6 +12979,32 @@
},
"description": "Dynamic details related to merchant to be rendered in payment link",
"nullable": true
+ },
+ "background_image": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentLinkBackgroundImageConfig"
+ }
+ ],
+ "nullable": true
+ },
+ "details_layout": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentLinkDetailsLayout"
+ }
+ ],
+ "nullable": true
+ },
+ "branding_visibility": {
+ "type": "boolean",
+ "description": "Toggle for HyperSwitch branding visibility",
+ "nullable": true
+ },
+ "payment_button_text": {
+ "type": "string",
+ "description": "Text for payment link's handle confirm button",
+ "nullable": true
}
}
},
@@ -11365,6 +13053,20 @@
"example": true,
"nullable": true
},
+ "hide_card_nickname_field": {
+ "type": "boolean",
+ "description": "Hide card nickname field option for payment link",
+ "default": false,
+ "example": true,
+ "nullable": true
+ },
+ "show_card_form_by_default": {
+ "type": "boolean",
+ "description": "Show card form by default for payment link",
+ "default": true,
+ "example": true,
+ "nullable": true
+ },
"transaction_details": {
"type": "array",
"items": {
@@ -11372,9 +13074,37 @@
},
"description": "Dynamic details related to merchant to be rendered in payment link",
"nullable": true
+ },
+ "background_image": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentLinkBackgroundImageConfig"
+ }
+ ],
+ "nullable": true
+ },
+ "details_layout": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentLinkDetailsLayout"
+ }
+ ],
+ "nullable": true
+ },
+ "payment_button_text": {
+ "type": "string",
+ "description": "Text for payment link's handle confirm button",
+ "nullable": true
}
}
},
+ "PaymentLinkDetailsLayout": {
+ "type": "string",
+ "enum": [
+ "layout1",
+ "layout2"
+ ]
+ },
"PaymentLinkInitiateRequest": {
"type": "object",
"required": [
@@ -11555,7 +13285,8 @@
"upi",
"voucher",
"gift_card",
- "open_banking"
+ "open_banking",
+ "mobile_payment"
]
},
"PaymentMethodCollectLinkRequest": {
@@ -11669,41 +13400,17 @@
"PaymentMethodCreate": {
"type": "object",
"required": [
- "payment_method"
- ],
- "properties": {
- "payment_method": {
- "$ref": "#/components/schemas/PaymentMethod"
- },
- "payment_method_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodType"
- }
- ],
- "nullable": true
- },
- "payment_method_issuer": {
- "type": "string",
- "description": "The name of the bank/ provider issuing the payment method to the end user",
- "example": "Citibank",
- "nullable": true
- },
- "payment_method_issuer_code": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodIssuerCode"
- }
- ],
- "nullable": true
- },
- "card": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CardDetail"
- }
- ],
- "nullable": true
+ "payment_method_type",
+ "payment_method_subtype",
+ "customer_id",
+ "payment_method_data"
+ ],
+ "properties": {
+ "payment_method_type": {
+ "$ref": "#/components/schemas/PaymentMethod"
+ },
+ "payment_method_subtype": {
+ "$ref": "#/components/schemas/PaymentMethodType"
},
"metadata": {
"type": "object",
@@ -11713,45 +13420,12 @@
"customer_id": {
"type": "string",
"description": "The unique identifier of the customer.",
- "example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
- "nullable": true,
+ "example": "12345_cus_01926c58bc6e77c09e809964e72af8c8",
"maxLength": 64,
- "minLength": 1
- },
- "card_network": {
- "type": "string",
- "description": "The card network",
- "example": "Visa",
- "nullable": true
- },
- "bank_transfer": {
- "allOf": [
- {
- "$ref": "#/components/schemas/Bank"
- }
- ],
- "nullable": true
- },
- "wallet": {
- "allOf": [
- {
- "$ref": "#/components/schemas/Wallet"
- }
- ],
- "nullable": true
- },
- "client_secret": {
- "type": "string",
- "description": "For Client based calls, SDK will use the client_secret\nin order to call /payment_methods\nClient secret will be generated whenever a new\npayment method is created",
- "nullable": true
+ "minLength": 32
},
"payment_method_data": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodCreateData"
- }
- ],
- "nullable": true
+ "$ref": "#/components/schemas/PaymentMethodCreateData"
},
"billing": {
"allOf": [
@@ -11831,924 +13505,447 @@
},
{
"type": "object",
- "title": "BankRedirect",
- "required": [
- "bank_redirect"
- ],
- "properties": {
- "bank_redirect": {
- "$ref": "#/components/schemas/BankRedirectData"
- }
- }
- },
- {
- "type": "object",
- "title": "BankDebit",
- "required": [
- "bank_debit"
- ],
- "properties": {
- "bank_debit": {
- "$ref": "#/components/schemas/BankDebitData"
- }
- }
- },
- {
- "type": "object",
- "title": "BankTransfer",
- "required": [
- "bank_transfer"
- ],
- "properties": {
- "bank_transfer": {
- "$ref": "#/components/schemas/BankTransferData"
- }
- }
- },
- {
- "type": "object",
- "title": "RealTimePayment",
- "required": [
- "real_time_payment"
- ],
- "properties": {
- "real_time_payment": {
- "$ref": "#/components/schemas/RealTimePaymentData"
- }
- }
- },
- {
- "type": "object",
- "title": "Crypto",
- "required": [
- "crypto"
- ],
- "properties": {
- "crypto": {
- "$ref": "#/components/schemas/CryptoData"
- }
- }
- },
- {
- "type": "string",
- "title": "MandatePayment",
- "enum": [
- "mandate_payment"
- ]
- },
- {
- "type": "string",
- "title": "Reward",
- "enum": [
- "reward"
- ]
- },
- {
- "type": "object",
- "title": "Upi",
- "required": [
- "upi"
- ],
- "properties": {
- "upi": {
- "$ref": "#/components/schemas/UpiData"
- }
- }
- },
- {
- "type": "object",
- "title": "Voucher",
- "required": [
- "voucher"
- ],
- "properties": {
- "voucher": {
- "$ref": "#/components/schemas/VoucherData"
- }
- }
- },
- {
- "type": "object",
- "title": "GiftCard",
- "required": [
- "gift_card"
- ],
- "properties": {
- "gift_card": {
- "$ref": "#/components/schemas/GiftCardData"
- }
- }
- },
- {
- "type": "object",
- "title": "CardToken",
- "required": [
- "card_token"
- ],
- "properties": {
- "card_token": {
- "$ref": "#/components/schemas/CardToken"
- }
- }
- },
- {
- "type": "object",
- "title": "OpenBanking",
- "required": [
- "open_banking"
- ],
- "properties": {
- "open_banking": {
- "$ref": "#/components/schemas/OpenBankingData"
- }
- }
- }
- ]
- },
- "PaymentMethodDataRequest": {
- "allOf": [
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodData"
- }
- ],
- "nullable": true
- },
- {
- "type": "object",
- "properties": {
- "billing": {
- "allOf": [
- {
- "$ref": "#/components/schemas/Address"
- }
- ],
- "nullable": true
- }
- }
- }
- ],
- "description": "The payment method information provided for making a payment"
- },
- "PaymentMethodDataResponse": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "card"
- ],
- "properties": {
- "card": {
- "$ref": "#/components/schemas/CardResponse"
- }
- }
- },
- {
- "type": "object",
- "required": [
- "bank_transfer"
- ],
- "properties": {
- "bank_transfer": {
- "$ref": "#/components/schemas/BankTransferResponse"
- }
- }
- },
- {
- "type": "object",
- "required": [
- "wallet"
- ],
- "properties": {
- "wallet": {
- "$ref": "#/components/schemas/WalletResponse"
- }
- }
- },
- {
- "type": "object",
- "required": [
- "pay_later"
- ],
- "properties": {
- "pay_later": {
- "$ref": "#/components/schemas/PaylaterResponse"
- }
- }
- },
- {
- "type": "object",
- "required": [
- "bank_redirect"
- ],
- "properties": {
- "bank_redirect": {
- "$ref": "#/components/schemas/BankRedirectResponse"
- }
- }
- },
- {
- "type": "object",
+ "title": "BankRedirect",
"required": [
- "crypto"
+ "bank_redirect"
],
"properties": {
- "crypto": {
- "$ref": "#/components/schemas/CryptoResponse"
+ "bank_redirect": {
+ "$ref": "#/components/schemas/BankRedirectData"
}
}
},
{
"type": "object",
+ "title": "BankDebit",
"required": [
"bank_debit"
],
"properties": {
"bank_debit": {
- "$ref": "#/components/schemas/BankDebitResponse"
+ "$ref": "#/components/schemas/BankDebitData"
}
}
},
{
"type": "object",
+ "title": "BankTransfer",
"required": [
- "mandate_payment"
+ "bank_transfer"
],
"properties": {
- "mandate_payment": {
- "type": "object"
+ "bank_transfer": {
+ "$ref": "#/components/schemas/BankTransferData"
}
}
},
{
"type": "object",
+ "title": "RealTimePayment",
"required": [
- "reward"
+ "real_time_payment"
],
"properties": {
- "reward": {
- "type": "object"
+ "real_time_payment": {
+ "$ref": "#/components/schemas/RealTimePaymentData"
}
}
},
{
"type": "object",
+ "title": "Crypto",
"required": [
- "real_time_payment"
+ "crypto"
],
"properties": {
- "real_time_payment": {
- "$ref": "#/components/schemas/RealTimePaymentDataResponse"
+ "crypto": {
+ "$ref": "#/components/schemas/CryptoData"
}
}
},
+ {
+ "type": "string",
+ "title": "MandatePayment",
+ "enum": [
+ "mandate_payment"
+ ]
+ },
+ {
+ "type": "string",
+ "title": "Reward",
+ "enum": [
+ "reward"
+ ]
+ },
{
"type": "object",
+ "title": "Upi",
"required": [
"upi"
],
"properties": {
"upi": {
- "$ref": "#/components/schemas/UpiResponse"
+ "$ref": "#/components/schemas/UpiData"
}
}
},
{
"type": "object",
+ "title": "Voucher",
"required": [
"voucher"
],
"properties": {
"voucher": {
- "$ref": "#/components/schemas/VoucherResponse"
+ "$ref": "#/components/schemas/VoucherData"
}
}
},
{
"type": "object",
+ "title": "GiftCard",
"required": [
"gift_card"
],
"properties": {
"gift_card": {
- "$ref": "#/components/schemas/GiftCardResponse"
- }
- }
- },
- {
- "type": "object",
- "required": [
- "card_redirect"
- ],
- "properties": {
- "card_redirect": {
- "$ref": "#/components/schemas/CardRedirectResponse"
+ "$ref": "#/components/schemas/GiftCardData"
}
}
},
{
"type": "object",
+ "title": "CardToken",
"required": [
"card_token"
],
"properties": {
"card_token": {
- "$ref": "#/components/schemas/CardTokenResponse"
+ "$ref": "#/components/schemas/CardToken"
}
}
},
{
"type": "object",
+ "title": "OpenBanking",
"required": [
"open_banking"
],
"properties": {
"open_banking": {
- "$ref": "#/components/schemas/OpenBankingResponse"
+ "$ref": "#/components/schemas/OpenBankingData"
}
}
- }
- ]
- },
- "PaymentMethodDataResponseWithBilling": {
- "allOf": [
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodDataResponse"
- }
- ],
- "nullable": true
},
{
"type": "object",
+ "title": "MobilePayment",
+ "required": [
+ "mobile_payment"
+ ],
"properties": {
- "billing": {
- "allOf": [
- {
- "$ref": "#/components/schemas/Address"
- }
- ],
- "nullable": true
+ "mobile_payment": {
+ "$ref": "#/components/schemas/MobilePaymentData"
}
}
}
]
},
- "PaymentMethodDeleteResponse": {
- "type": "object",
- "required": [
- "payment_method_id",
- "deleted"
- ],
- "properties": {
- "payment_method_id": {
- "type": "string",
- "description": "The unique identifier of the Payment method",
- "example": "card_rGK4Vi5iSW70MY7J2mIg"
- },
- "deleted": {
- "type": "boolean",
- "description": "Whether payment method was deleted or not",
- "example": true
- }
- }
- },
- "PaymentMethodIssuerCode": {
- "type": "string",
- "enum": [
- "jp_hdfc",
- "jp_icici",
- "jp_googlepay",
- "jp_applepay",
- "jp_phonepay",
- "jp_wechat",
- "jp_sofort",
- "jp_giropay",
- "jp_sepa",
- "jp_bacs"
- ]
- },
- "PaymentMethodList": {
- "type": "object",
- "required": [
- "payment_method"
- ],
- "properties": {
- "payment_method": {
- "$ref": "#/components/schemas/PaymentMethod"
- },
- "payment_method_types": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/PaymentMethodType"
- },
- "description": "This is a sub-category of payment method.",
- "example": [
- "credit"
- ],
- "nullable": true
- }
- }
- },
- "PaymentMethodListResponse": {
- "type": "object",
- "required": [
- "currency",
- "payment_methods",
- "mandate_payment",
- "show_surcharge_breakup_screen",
- "request_external_three_ds_authentication",
- "is_tax_calculation_enabled"
- ],
- "properties": {
- "redirect_url": {
- "type": "string",
- "description": "Redirect URL of the merchant",
- "example": "https://www.google.com",
- "nullable": true
- },
- "currency": {
- "$ref": "#/components/schemas/Currency"
- },
- "payment_methods": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/PaymentMethodList"
- },
- "description": "Information about the payment method",
- "example": [
- {
- "payment_experience": null,
- "payment_method": "wallet",
- "payment_method_issuers": [
- "labore magna ipsum",
- "aute"
- ]
- }
- ]
- },
- "mandate_payment": {
- "$ref": "#/components/schemas/MandateType"
- },
- "merchant_name": {
- "type": "string",
- "nullable": true
- },
- "show_surcharge_breakup_screen": {
- "type": "boolean",
- "description": "flag to indicate if surcharge and tax breakup screen should be shown or not"
- },
- "payment_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentType"
- }
- ],
- "nullable": true
- },
- "request_external_three_ds_authentication": {
- "type": "boolean",
- "description": "flag to indicate whether to perform external 3ds authentication",
- "example": true
- },
- "collect_shipping_details_from_wallets": {
- "type": "boolean",
- "description": "flag that indicates whether to collect shipping details from wallets or from the customer",
- "nullable": true
- },
- "collect_billing_details_from_wallets": {
- "type": "boolean",
- "description": "flag that indicates whether to collect billing details from wallets or from the customer",
- "nullable": true
- },
- "is_tax_calculation_enabled": {
- "type": "boolean",
- "description": "flag that indicates whether to calculate tax on the order amount"
- }
- }
- },
- "PaymentMethodResponse": {
- "type": "object",
- "required": [
- "merchant_id",
- "payment_method_id",
- "payment_method",
- "recurring_enabled",
- "installment_payment_enabled"
- ],
- "properties": {
- "merchant_id": {
- "type": "string",
- "description": "Unique identifier for a merchant",
- "example": "merchant_1671528864"
- },
- "customer_id": {
- "type": "string",
- "description": "The unique identifier of the customer.",
- "example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
- "nullable": true,
- "maxLength": 64,
- "minLength": 1
- },
- "payment_method_id": {
- "type": "string",
- "description": "The unique identifier of the Payment method",
- "example": "card_rGK4Vi5iSW70MY7J2mIg"
- },
- "payment_method": {
- "$ref": "#/components/schemas/PaymentMethod"
- },
- "payment_method_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodType"
- }
- ],
- "nullable": true
- },
- "card": {
+ "PaymentMethodDataRequest": {
+ "allOf": [
+ {
"allOf": [
{
- "$ref": "#/components/schemas/CardDetailFromLocker"
+ "$ref": "#/components/schemas/PaymentMethodData"
}
],
"nullable": true
},
- "recurring_enabled": {
- "type": "boolean",
- "description": "Indicates whether the payment method is eligible for recurring payments",
- "example": true
- },
- "installment_payment_enabled": {
- "type": "boolean",
- "description": "Indicates whether the payment method is eligible for installment payments",
- "example": true
+ {
+ "type": "object",
+ "properties": {
+ "billing": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Address"
+ }
+ ],
+ "nullable": true
+ }
+ }
+ }
+ ],
+ "description": "The payment method information provided for making a payment"
+ },
+ "PaymentMethodDataResponse": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "card"
+ ],
+ "properties": {
+ "card": {
+ "$ref": "#/components/schemas/CardResponse"
+ }
+ }
},
- "payment_experience": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/PaymentExperience"
- },
- "description": "Type of payment experience enabled with the connector",
- "example": [
- "redirect_to_url"
+ {
+ "type": "object",
+ "required": [
+ "bank_transfer"
],
- "nullable": true
+ "properties": {
+ "bank_transfer": {
+ "$ref": "#/components/schemas/BankTransferResponse"
+ }
+ }
},
- "metadata": {
+ {
"type": "object",
- "description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Metadata is useful for storing additional, structured information on an object.",
- "nullable": true
+ "required": [
+ "wallet"
+ ],
+ "properties": {
+ "wallet": {
+ "$ref": "#/components/schemas/WalletResponse"
+ }
+ }
},
- "created": {
- "type": "string",
- "format": "date-time",
- "description": "A timestamp (ISO 8601 code) that determines when the customer was created",
- "example": "2023-01-18T11:04:09.922Z",
- "nullable": true
+ {
+ "type": "object",
+ "required": [
+ "pay_later"
+ ],
+ "properties": {
+ "pay_later": {
+ "$ref": "#/components/schemas/PaylaterResponse"
+ }
+ }
},
- "bank_transfer": {
- "allOf": [
- {
- "$ref": "#/components/schemas/Bank"
+ {
+ "type": "object",
+ "required": [
+ "bank_redirect"
+ ],
+ "properties": {
+ "bank_redirect": {
+ "$ref": "#/components/schemas/BankRedirectResponse"
}
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "crypto"
],
- "nullable": true
+ "properties": {
+ "crypto": {
+ "$ref": "#/components/schemas/CryptoResponse"
+ }
+ }
},
- "last_used_at": {
- "type": "string",
- "format": "date-time",
- "example": "2024-02-24T11:04:09.922Z",
- "nullable": true
+ {
+ "type": "object",
+ "required": [
+ "bank_debit"
+ ],
+ "properties": {
+ "bank_debit": {
+ "$ref": "#/components/schemas/BankDebitResponse"
+ }
+ }
},
- "client_secret": {
- "type": "string",
- "description": "For Client based calls",
- "nullable": true
- }
- }
- },
- "PaymentMethodStatus": {
- "type": "string",
- "description": "Payment Method Status",
- "enum": [
- "active",
- "inactive",
- "processing",
- "awaiting_data"
- ]
- },
- "PaymentMethodType": {
- "type": "string",
- "description": "Indicates the sub type of payment method. Eg: 'google_pay' & 'apple_pay' for wallets.",
- "enum": [
- "ach",
- "affirm",
- "afterpay_clearpay",
- "alfamart",
- "ali_pay",
- "ali_pay_hk",
- "alma",
- "apple_pay",
- "atome",
- "bacs",
- "bancontact_card",
- "becs",
- "benefit",
- "bizum",
- "blik",
- "boleto",
- "bca_bank_transfer",
- "bni_va",
- "bri_va",
- "card_redirect",
- "cimb_va",
- "classic",
- "credit",
- "crypto_currency",
- "cashapp",
- "dana",
- "danamon_va",
- "debit",
- "duit_now",
- "efecty",
- "eps",
- "fps",
- "evoucher",
- "giropay",
- "givex",
- "google_pay",
- "go_pay",
- "gcash",
- "ideal",
- "interac",
- "indomaret",
- "klarna",
- "kakao_pay",
- "local_bank_redirect",
- "mandiri_va",
- "knet",
- "mb_way",
- "mobile_pay",
- "momo",
- "momo_atm",
- "multibanco",
- "online_banking_thailand",
- "online_banking_czech_republic",
- "online_banking_finland",
- "online_banking_fpx",
- "online_banking_poland",
- "online_banking_slovakia",
- "oxxo",
- "pago_efectivo",
- "permata_bank_transfer",
- "open_banking_uk",
- "pay_bright",
- "paypal",
- "pix",
- "pay_safe_card",
- "przelewy24",
- "prompt_pay",
- "pse",
- "red_compra",
- "red_pagos",
- "samsung_pay",
- "sepa",
- "sofort",
- "swish",
- "touch_n_go",
- "trustly",
- "twint",
- "upi_collect",
- "upi_intent",
- "vipps",
- "viet_qr",
- "venmo",
- "walley",
- "we_chat_pay",
- "seven_eleven",
- "lawson",
- "mini_stop",
- "family_mart",
- "seicomart",
- "pay_easy",
- "local_bank_transfer",
- "mifinity",
- "open_banking_pis"
- ]
- },
- "PaymentMethodUpdate": {
- "type": "object",
- "properties": {
- "card": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CardDetailUpdate"
+ {
+ "type": "object",
+ "required": [
+ "mandate_payment"
+ ],
+ "properties": {
+ "mandate_payment": {
+ "type": "object"
}
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "reward"
],
- "nullable": true
+ "properties": {
+ "reward": {
+ "type": "object"
+ }
+ }
},
- "client_secret": {
- "type": "string",
- "description": "This is a 15 minute expiry token which shall be used from the client to authenticate and perform sessions from the SDK",
- "example": "secret_k2uj3he2893eiu2d",
- "nullable": true,
- "maxLength": 30,
- "minLength": 30
- }
- },
- "additionalProperties": false
- },
- "PaymentMethodsEnabled": {
- "type": "object",
- "description": "Details of all the payment methods enabled for the connector for the given merchant account",
- "required": [
- "payment_method"
- ],
- "properties": {
- "payment_method": {
- "$ref": "#/components/schemas/PaymentMethod"
+ {
+ "type": "object",
+ "required": [
+ "real_time_payment"
+ ],
+ "properties": {
+ "real_time_payment": {
+ "$ref": "#/components/schemas/RealTimePaymentDataResponse"
+ }
+ }
},
- "payment_method_types": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/RequestPaymentMethodTypes"
- },
- "description": "Subtype of payment method",
- "example": [
- "credit"
+ {
+ "type": "object",
+ "required": [
+ "upi"
],
- "nullable": true
- }
- },
- "additionalProperties": false
- },
- "PaymentProcessingDetails": {
- "type": "object",
- "required": [
- "payment_processing_certificate",
- "payment_processing_certificate_key"
- ],
- "properties": {
- "payment_processing_certificate": {
- "type": "string"
+ "properties": {
+ "upi": {
+ "$ref": "#/components/schemas/UpiResponse"
+ }
+ }
},
- "payment_processing_certificate_key": {
- "type": "string"
- }
- }
- },
- "PaymentProcessingDetailsAt": {
- "oneOf": [
{
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentProcessingDetails"
- },
- {
- "type": "object",
- "required": [
- "payment_processing_details_at"
- ],
- "properties": {
- "payment_processing_details_at": {
- "type": "string",
- "enum": [
- "Hyperswitch"
- ]
- }
- }
+ "type": "object",
+ "required": [
+ "voucher"
+ ],
+ "properties": {
+ "voucher": {
+ "$ref": "#/components/schemas/VoucherResponse"
}
- ]
+ }
},
{
"type": "object",
"required": [
- "payment_processing_details_at"
+ "gift_card"
],
"properties": {
- "payment_processing_details_at": {
- "type": "string",
- "enum": [
- "Connector"
- ]
+ "gift_card": {
+ "$ref": "#/components/schemas/GiftCardResponse"
}
}
- }
- ],
- "discriminator": {
- "propertyName": "payment_processing_details_at"
- }
- },
- "PaymentRetrieveBody": {
- "type": "object",
- "properties": {
- "merchant_id": {
- "type": "string",
- "description": "The identifier for the Merchant Account.",
- "nullable": true
},
- "force_sync": {
- "type": "boolean",
- "description": "Decider to enable or disable the connector call for retrieve request",
- "nullable": true
+ {
+ "type": "object",
+ "required": [
+ "card_redirect"
+ ],
+ "properties": {
+ "card_redirect": {
+ "$ref": "#/components/schemas/CardRedirectResponse"
+ }
+ }
},
- "client_secret": {
- "type": "string",
- "description": "This is a token which expires after 15 minutes, used from the client to authenticate and create sessions from the SDK",
- "nullable": true
+ {
+ "type": "object",
+ "required": [
+ "card_token"
+ ],
+ "properties": {
+ "card_token": {
+ "$ref": "#/components/schemas/CardTokenResponse"
+ }
+ }
},
- "expand_captures": {
- "type": "boolean",
- "description": "If enabled provides list of captures linked to latest attempt",
- "nullable": true
+ {
+ "type": "object",
+ "required": [
+ "open_banking"
+ ],
+ "properties": {
+ "open_banking": {
+ "$ref": "#/components/schemas/OpenBankingResponse"
+ }
+ }
},
- "expand_attempts": {
- "type": "boolean",
- "description": "If enabled provides list of attempts linked to payment intent",
- "nullable": true
+ {
+ "type": "object",
+ "required": [
+ "mobile_payment"
+ ],
+ "properties": {
+ "mobile_payment": {
+ "$ref": "#/components/schemas/MobilePaymentResponse"
+ }
+ }
}
- }
- },
- "PaymentType": {
- "type": "string",
- "description": "The type of the payment that differentiates between normal and various types of mandate payments. Use 'setup_mandate' in case of zero auth flow.",
- "enum": [
- "normal",
- "new_mandate",
- "setup_mandate",
- "recurring_mandate"
]
},
- "PaymentsCancelRequest": {
- "type": "object",
- "properties": {
- "cancellation_reason": {
- "type": "string",
- "description": "The reason for the payment cancel",
- "nullable": true
- },
- "merchant_connector_details": {
+ "PaymentMethodDataResponseWithBilling": {
+ "allOf": [
+ {
"allOf": [
{
- "$ref": "#/components/schemas/MerchantConnectorDetailsWrap"
+ "$ref": "#/components/schemas/PaymentMethodDataResponse"
}
],
"nullable": true
+ },
+ {
+ "type": "object",
+ "properties": {
+ "billing": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Address"
+ }
+ ],
+ "nullable": true
+ }
+ }
+ }
+ ]
+ },
+ "PaymentMethodDeleteResponse": {
+ "type": "object",
+ "required": [
+ "payment_method_id"
+ ],
+ "properties": {
+ "payment_method_id": {
+ "type": "string",
+ "description": "The unique identifier of the Payment method",
+ "example": "card_rGK4Vi5iSW70MY7J2mIg"
}
}
},
- "PaymentsCaptureRequest": {
+ "PaymentMethodIntentConfirm": {
"type": "object",
"required": [
- "amount_to_capture"
+ "payment_method_data",
+ "payment_method_type",
+ "payment_method_subtype"
],
"properties": {
- "merchant_id": {
+ "customer_id": {
"type": "string",
- "description": "The unique identifier for the merchant",
- "nullable": true
- },
- "amount_to_capture": {
- "type": "integer",
- "format": "int64",
- "description": "The Amount to be captured/ debited from the user's payment method.",
- "example": 6540
- },
- "refund_uncaptured_amount": {
- "type": "boolean",
- "description": "Decider to refund the uncaptured amount",
- "nullable": true
+ "description": "The unique identifier of the customer.",
+ "example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
+ "nullable": true,
+ "maxLength": 64,
+ "minLength": 1
},
- "statement_descriptor_suffix": {
- "type": "string",
- "description": "Provides information about a card payment that customers see on their statements.",
- "nullable": true
+ "payment_method_data": {
+ "$ref": "#/components/schemas/PaymentMethodCreateData"
},
- "statement_descriptor_prefix": {
- "type": "string",
- "description": "Concatenated with the statement descriptor suffix that’s set on the account to form the complete statement descriptor.",
- "nullable": true
+ "payment_method_type": {
+ "$ref": "#/components/schemas/PaymentMethod"
},
- "merchant_connector_details": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MerchantConnectorDetailsWrap"
- }
- ],
- "nullable": true
+ "payment_method_subtype": {
+ "$ref": "#/components/schemas/PaymentMethodType"
}
- }
+ },
+ "additionalProperties": false
},
- "PaymentsCompleteAuthorizeRequest": {
+ "PaymentMethodIntentCreate": {
"type": "object",
"required": [
- "client_secret"
+ "customer_id"
],
"properties": {
- "shipping": {
+ "metadata": {
+ "type": "object",
+ "description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Metadata is useful for storing additional, structured information on an object.",
+ "nullable": true
+ },
+ "billing": {
"allOf": [
{
"$ref": "#/components/schemas/Address"
@@ -12756,790 +13953,822 @@
],
"nullable": true
},
- "client_secret": {
+ "customer_id": {
"type": "string",
- "description": "Client Secret"
+ "description": "The unique identifier of the customer.",
+ "example": "12345_cus_01926c58bc6e77c09e809964e72af8c8",
+ "maxLength": 64,
+ "minLength": 32
}
- }
+ },
+ "additionalProperties": false
},
- "PaymentsConfirmRequest": {
- "type": "object",
- "properties": {
- "amount": {
- "type": "integer",
- "format": "int64",
- "description": "The payment amount. Amount for the payment in the lowest denomination of the currency, (i.e) in cents for USD denomination, in yen for JPY denomination etc. E.g., Pass 100 to charge $1.00 and 1 for 1¥ since ¥ is a zero-decimal currency. Read more about [the Decimal and Non-Decimal Currencies](https://github.com/juspay/hyperswitch/wiki/Decimal-and-Non%E2%80%90Decimal-Currencies)",
- "example": 6540,
- "nullable": true,
- "minimum": 0
- },
- "currency": {
- "allOf": [
- {
- "$ref": "#/components/schemas/Currency"
- }
+ "PaymentMethodIssuerCode": {
+ "type": "string",
+ "enum": [
+ "jp_hdfc",
+ "jp_icici",
+ "jp_googlepay",
+ "jp_applepay",
+ "jp_phonepay",
+ "jp_wechat",
+ "jp_sofort",
+ "jp_giropay",
+ "jp_sepa",
+ "jp_bacs"
+ ]
+ },
+ "PaymentMethodListData": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "card"
],
- "nullable": true
- },
- "amount_to_capture": {
- "type": "integer",
- "format": "int64",
- "description": "The Amount to be captured / debited from the users payment method. It shall be in lowest denomination of the currency. (i.e) in cents for USD denomination, in paisa for INR denomination etc., If not provided, the default amount_to_capture will be the payment amount. Also, it must be less than or equal to the original payment account.",
- "example": 6540,
- "nullable": true
- },
- "shipping_cost": {
- "type": "integer",
- "format": "int64",
- "description": "The shipping cost for the payment. This is required for tax calculation in some regions.",
- "example": 6540,
- "nullable": true
+ "properties": {
+ "card": {
+ "$ref": "#/components/schemas/CardDetailFromLocker"
+ }
+ }
},
- "payment_id": {
+ {
+ "type": "object",
+ "required": [
+ "bank"
+ ],
+ "properties": {
+ "bank": {
+ "$ref": "#/components/schemas/Bank"
+ }
+ }
+ }
+ ]
+ },
+ "PaymentMethodListRequest": {
+ "type": "object",
+ "properties": {
+ "client_secret": {
"type": "string",
- "description": "Unique identifier for the payment. This ensures idempotency for multiple payments\nthat have been done by a single merchant. The value for this field can be specified in the request, it will be auto generated otherwise and returned in the API response.",
- "example": "pay_mbabizu24mvu3mela5njyhpit4",
+ "description": "This is a 15 minute expiry token which shall be used from the client to authenticate and perform sessions from the SDK",
+ "example": "secret_k2uj3he2893eiu2d",
"nullable": true,
"maxLength": 30,
"minLength": 30
},
- "routing": {
- "allOf": [
- {
- "$ref": "#/components/schemas/StraightThroughAlgorithm"
- }
- ],
- "nullable": true
- },
- "connector": {
+ "accepted_countries": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/Connector"
+ "$ref": "#/components/schemas/CountryAlpha2"
},
- "description": "This allows to manually select a connector with which the payment can go through.",
+ "description": "The two-letter ISO currency code",
"example": [
- "stripe",
- "adyen"
- ],
- "nullable": true
- },
- "capture_method": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CaptureMethod"
- }
- ],
- "nullable": true
- },
- "authentication_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/AuthenticationType"
- }
+ "US",
+ "UK",
+ "IN"
],
- "default": "three_ds",
"nullable": true
},
- "billing": {
+ "amount": {
"allOf": [
{
- "$ref": "#/components/schemas/Address"
+ "$ref": "#/components/schemas/MinorUnit"
}
],
"nullable": true
},
- "confirm": {
- "type": "boolean",
- "description": "Whether to confirm the payment (if applicable). It can be used to completely process a payment by attaching a payment method, setting `confirm=true` and `capture_method = automatic` in the *Payments/Create API* request itself.",
- "default": false,
- "example": true,
- "nullable": true
- },
- "customer": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CustomerDetails"
- }
+ "accepted_currencies": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Currency"
+ },
+ "description": "The three-letter ISO currency code",
+ "example": [
+ "USD",
+ "EUR"
],
"nullable": true
},
- "customer_id": {
- "type": "string",
- "description": "The identifier for the customer",
- "example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
- "nullable": true,
- "maxLength": 64,
- "minLength": 1
- },
- "off_session": {
+ "recurring_enabled": {
"type": "boolean",
- "description": "Set to true to indicate that the customer is not in your checkout flow during this payment, and therefore is unable to authenticate. This parameter is intended for scenarios where you collect card details and charge them later. When making a recurring payment by passing a mandate_id, this parameter is mandatory",
+ "description": "Indicates whether the payment method is eligible for recurring payments",
"example": true,
"nullable": true
},
- "description": {
- "type": "string",
- "description": "A description for the payment",
- "example": "It's my first payment request",
- "nullable": true
- },
- "return_url": {
- "type": "string",
- "description": "The URL to which you want the user to be redirected after the completion of the payment operation",
- "example": "https://hyperswitch.io",
- "nullable": true
- },
- "setup_future_usage": {
- "allOf": [
- {
- "$ref": "#/components/schemas/FutureUsage"
- }
- ],
- "nullable": true
- },
- "payment_method_data": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodDataRequest"
- }
+ "card_networks": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CardNetwork"
+ },
+ "description": "Indicates whether the payment method is eligible for card netwotks",
+ "example": [
+ "visa",
+ "mastercard"
],
"nullable": true
},
- "payment_method": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethod"
- }
- ],
+ "limit": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Indicates the limit of last used payment methods",
+ "example": 1,
"nullable": true
- },
- "payment_token": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "PaymentMethodListResponse": {
+ "type": "object",
+ "required": [
+ "currency",
+ "payment_methods",
+ "mandate_payment",
+ "show_surcharge_breakup_screen",
+ "request_external_three_ds_authentication",
+ "is_tax_calculation_enabled"
+ ],
+ "properties": {
+ "redirect_url": {
"type": "string",
- "description": "As Hyperswitch tokenises the sensitive details about the payments method, it provides the payment_token as a reference to a stored payment method, ensuring that the sensitive details are not exposed in any manner.",
- "example": "187282ab-40ef-47a9-9206-5099ba31e432",
- "nullable": true
- },
- "shipping": {
- "allOf": [
- {
- "$ref": "#/components/schemas/Address"
- }
- ],
+ "description": "Redirect URL of the merchant",
+ "example": "https://www.google.com",
"nullable": true
},
- "statement_descriptor_name": {
- "type": "string",
- "description": "For non-card charges, you can use this value as the complete description that appears on your customers’ statements. Must contain at least one letter, maximum 22 characters.",
- "example": "Hyperswitch Router",
- "nullable": true,
- "maxLength": 255
- },
- "statement_descriptor_suffix": {
- "type": "string",
- "description": "Provides information about a card payment that customers see on their statements. Concatenated with the prefix (shortened descriptor) or statement descriptor that’s set on the account to form the complete statement descriptor. Maximum 22 characters for the concatenated descriptor.",
- "example": "Payment for shoes purchase",
- "nullable": true,
- "maxLength": 255
+ "currency": {
+ "$ref": "#/components/schemas/Currency"
},
- "order_details": {
+ "payment_methods": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/OrderDetailsWithAmount"
+ "$ref": "#/components/schemas/ResponsePaymentMethodsEnabled"
},
- "description": "Use this object to capture the details about the different products for which the payment is being made. The sum of amount across different products here should be equal to the overall payment amount",
- "example": "[{\n \"product_name\": \"Apple iPhone 16\",\n \"quantity\": 1,\n \"amount\" : 69000\n \"product_img_link\" : \"https://dummy-img-link.com\"\n }]",
- "nullable": true
- },
- "client_secret": {
- "type": "string",
- "description": "It's a token used for client side verification.",
- "example": "pay_U42c409qyHwOkWo3vK60_secret_el9ksDkiB8hi6j9N78yo",
- "nullable": true
+ "description": "Information about the payment method"
},
- "mandate_data": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MandateData"
- }
- ],
- "nullable": true
+ "mandate_payment": {
+ "$ref": "#/components/schemas/MandateType"
},
- "customer_acceptance": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CustomerAcceptance"
- }
- ],
+ "merchant_name": {
+ "type": "string",
"nullable": true
},
- "mandate_id": {
- "type": "string",
- "description": "A unique identifier to link the payment to a mandate. To do Recurring payments after a mandate has been created, pass the mandate_id instead of payment_method_data",
- "example": "mandate_iwer89rnjef349dni3",
- "nullable": true,
- "maxLength": 255
+ "show_surcharge_breakup_screen": {
+ "type": "boolean",
+ "description": "flag to indicate if surcharge and tax breakup screen should be shown or not"
},
- "browser_info": {
+ "payment_type": {
"allOf": [
{
- "$ref": "#/components/schemas/BrowserInformation"
+ "$ref": "#/components/schemas/PaymentType"
}
],
"nullable": true
},
- "payment_experience": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentExperience"
- }
- ],
- "nullable": true
+ "request_external_three_ds_authentication": {
+ "type": "boolean",
+ "description": "flag to indicate whether to perform external 3ds authentication",
+ "example": true
},
- "payment_method_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodType"
- }
- ],
+ "collect_shipping_details_from_wallets": {
+ "type": "boolean",
+ "description": "flag that indicates whether to collect shipping details from wallets or from the customer",
"nullable": true
},
- "merchant_connector_details": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MerchantConnectorDetailsWrap"
- }
- ],
+ "collect_billing_details_from_wallets": {
+ "type": "boolean",
+ "description": "flag that indicates whether to collect billing details from wallets or from the customer",
"nullable": true
},
- "allowed_payment_method_types": {
+ "is_tax_calculation_enabled": {
+ "type": "boolean",
+ "description": "flag that indicates whether to calculate tax on the order amount"
+ }
+ }
+ },
+ "PaymentMethodListResponseForPayments": {
+ "type": "object",
+ "required": [
+ "payment_methods_enabled"
+ ],
+ "properties": {
+ "payment_methods_enabled": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/PaymentMethodType"
+ "$ref": "#/components/schemas/ResponsePaymentMethodTypes"
},
- "description": "Use this parameter to restrict the Payment Method Types to show for a given PaymentIntent",
- "nullable": true
+ "description": "The list of payment methods that are enabled for the business profile"
},
- "retry_action": {
- "allOf": [
- {
- "$ref": "#/components/schemas/RetryAction"
- }
- ],
+ "customer_payment_methods": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CustomerPaymentMethod"
+ },
+ "description": "The list of payment methods that are saved by the given customer\nThis field is only returned if the customer_id is provided in the request",
"nullable": true
+ }
+ }
+ },
+ "PaymentMethodResponse": {
+ "type": "object",
+ "required": [
+ "merchant_id",
+ "customer_id",
+ "payment_method_id",
+ "payment_method_type",
+ "recurring_enabled"
+ ],
+ "properties": {
+ "merchant_id": {
+ "type": "string",
+ "description": "Unique identifier for a merchant",
+ "example": "merchant_1671528864"
},
- "metadata": {
- "type": "object",
- "description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Metadata is useful for storing additional, structured information on an object.",
- "nullable": true
+ "customer_id": {
+ "type": "string",
+ "description": "The unique identifier of the customer.",
+ "example": "12345_cus_01926c58bc6e77c09e809964e72af8c8",
+ "maxLength": 64,
+ "minLength": 32
},
- "connector_metadata": {
+ "payment_method_id": {
+ "type": "string",
+ "description": "The unique identifier of the Payment method",
+ "example": "card_rGK4Vi5iSW70MY7J2mIg"
+ },
+ "payment_method_type": {
+ "$ref": "#/components/schemas/PaymentMethod"
+ },
+ "payment_method_subtype": {
"allOf": [
{
- "$ref": "#/components/schemas/ConnectorMetadata"
+ "$ref": "#/components/schemas/PaymentMethodType"
}
],
"nullable": true
},
- "payment_link": {
+ "recurring_enabled": {
"type": "boolean",
- "description": "Whether to generate the payment link for this payment or not (if applicable)",
- "default": false,
- "example": true,
+ "description": "Indicates whether the payment method is eligible for recurring payments",
+ "example": true
+ },
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "description": "A timestamp (ISO 8601 code) that determines when the payment method was created",
+ "example": "2023-01-18T11:04:09.922Z",
"nullable": true
},
- "payment_link_config": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentCreatePaymentLinkConfig"
- }
- ],
+ "last_used_at": {
+ "type": "string",
+ "format": "date-time",
+ "example": "2024-02-24T11:04:09.922Z",
"nullable": true
},
- "payment_link_config_id": {
+ "ephemeral_key": {
"type": "string",
- "description": "Custom payment link config id set at business profile, send only if business_specific_configs is configured",
+ "description": "For Client based calls",
"nullable": true
},
- "payment_type": {
+ "payment_method_data": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentType"
+ "$ref": "#/components/schemas/PaymentMethodResponseData"
}
],
"nullable": true
+ }
+ }
+ },
+ "PaymentMethodResponseData": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "card"
+ ],
+ "properties": {
+ "card": {
+ "$ref": "#/components/schemas/CardDetailFromLocker"
+ }
+ }
+ }
+ ]
+ },
+ "PaymentMethodStatus": {
+ "type": "string",
+ "description": "Payment Method Status",
+ "enum": [
+ "active",
+ "inactive",
+ "processing",
+ "awaiting_data"
+ ]
+ },
+ "PaymentMethodSubtypeSpecificData": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "card_networks"
+ ],
+ "properties": {
+ "card_networks": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CardNetworkTypes"
+ }
+ }
+ }
},
- "request_incremental_authorization": {
- "type": "boolean",
- "description": "Request an incremental authorization, i.e., increase the authorized amount on a confirmed payment before you capture it.",
- "nullable": true
- },
- "session_expiry": {
- "type": "integer",
- "format": "int32",
- "description": "Will be used to expire client secret after certain amount of time to be supplied in seconds\n(900) for 15 mins",
- "example": 900,
- "nullable": true,
- "minimum": 0
- },
- "frm_metadata": {
+ {
+ "type": "object",
+ "required": [
+ "bank_names"
+ ],
+ "properties": {
+ "bank_names": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BankCodeResponse"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "PaymentMethodType": {
+ "type": "string",
+ "description": "Indicates the sub type of payment method. Eg: 'google_pay' & 'apple_pay' for wallets.",
+ "enum": [
+ "ach",
+ "affirm",
+ "afterpay_clearpay",
+ "alfamart",
+ "ali_pay",
+ "ali_pay_hk",
+ "alma",
+ "apple_pay",
+ "atome",
+ "bacs",
+ "bancontact_card",
+ "becs",
+ "benefit",
+ "bizum",
+ "blik",
+ "boleto",
+ "bca_bank_transfer",
+ "bni_va",
+ "bri_va",
+ "card_redirect",
+ "cimb_va",
+ "classic",
+ "credit",
+ "crypto_currency",
+ "cashapp",
+ "dana",
+ "danamon_va",
+ "debit",
+ "duit_now",
+ "efecty",
+ "eps",
+ "fps",
+ "evoucher",
+ "giropay",
+ "givex",
+ "google_pay",
+ "go_pay",
+ "gcash",
+ "ideal",
+ "interac",
+ "indomaret",
+ "klarna",
+ "kakao_pay",
+ "local_bank_redirect",
+ "mandiri_va",
+ "knet",
+ "mb_way",
+ "mobile_pay",
+ "momo",
+ "momo_atm",
+ "multibanco",
+ "online_banking_thailand",
+ "online_banking_czech_republic",
+ "online_banking_finland",
+ "online_banking_fpx",
+ "online_banking_poland",
+ "online_banking_slovakia",
+ "oxxo",
+ "pago_efectivo",
+ "permata_bank_transfer",
+ "open_banking_uk",
+ "pay_bright",
+ "paypal",
+ "paze",
+ "pix",
+ "pay_safe_card",
+ "przelewy24",
+ "prompt_pay",
+ "pse",
+ "red_compra",
+ "red_pagos",
+ "samsung_pay",
+ "sepa",
+ "sofort",
+ "swish",
+ "touch_n_go",
+ "trustly",
+ "twint",
+ "upi_collect",
+ "upi_intent",
+ "vipps",
+ "viet_qr",
+ "venmo",
+ "walley",
+ "we_chat_pay",
+ "seven_eleven",
+ "lawson",
+ "mini_stop",
+ "family_mart",
+ "seicomart",
+ "pay_easy",
+ "local_bank_transfer",
+ "mifinity",
+ "open_banking_pis",
+ "direct_carrier_billing"
+ ]
+ },
+ "PaymentMethodUpdate": {
+ "type": "object",
+ "required": [
+ "payment_method_data"
+ ],
+ "properties": {
+ "payment_method_data": {
+ "$ref": "#/components/schemas/PaymentMethodUpdateData"
+ }
+ },
+ "additionalProperties": false
+ },
+ "PaymentMethodUpdateData": {
+ "oneOf": [
+ {
"type": "object",
- "description": "Additional data related to some frm(Fraud Risk Management) connectors",
- "nullable": true
- },
- "request_external_three_ds_authentication": {
- "type": "boolean",
- "description": "Whether to perform external authentication (if applicable)",
- "example": true,
- "nullable": true
- },
- "recurring_details": {
- "allOf": [
- {
- "$ref": "#/components/schemas/RecurringDetails"
- }
+ "required": [
+ "card"
],
- "nullable": true
- },
- "charges": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentChargeRequest"
+ "properties": {
+ "card": {
+ "$ref": "#/components/schemas/CardDetailUpdate"
}
- ],
- "nullable": true
- },
- "merchant_order_reference_id": {
- "type": "string",
- "description": "Merchant's identifier for the payment/invoice. This will be sent to the connector\nif the connector provides support to accept multiple reference ids.\nIn case the connector supports only one reference id, Hyperswitch's Payment ID will be sent as reference.",
- "example": "Custom_Order_id_123",
- "nullable": true,
- "maxLength": 255
- },
- "skip_external_tax_calculation": {
- "type": "boolean",
- "description": "Whether to calculate tax for this payment intent",
- "nullable": true
+ }
}
- }
+ ]
},
- "PaymentsCreateIntentRequest": {
+ "PaymentMethodsEnabled": {
"type": "object",
+ "description": "Details of all the payment methods enabled for the connector for the given merchant account",
"required": [
- "amount_details"
+ "payment_method_type"
],
"properties": {
- "amount_details": {
- "$ref": "#/components/schemas/AmountDetails"
- },
- "merchant_reference_id": {
- "type": "string",
- "description": "Unique identifier for the payment. This ensures idempotency for multiple payments\nthat have been done by a single merchant.",
- "example": "pay_mbabizu24mvu3mela5njyhpit4",
- "nullable": true,
- "maxLength": 30,
- "minLength": 30
- },
- "routing_algorithm_id": {
- "type": "string",
- "description": "The routing algorithm id to be used for the payment",
- "nullable": true
- },
- "capture_method": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CaptureMethod"
- }
- ],
- "nullable": true
- },
- "authentication_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/AuthenticationType"
- }
- ],
- "default": "no_three_ds",
- "nullable": true
+ "payment_method_type": {
+ "$ref": "#/components/schemas/PaymentMethod"
},
- "billing": {
- "allOf": [
- {
- "$ref": "#/components/schemas/Address"
- }
- ],
+ "payment_method_subtypes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/RequestPaymentMethodTypes"
+ },
+ "description": "Payment method configuration, this includes all the filters associated with the payment method",
"nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "PaymentProcessingDetails": {
+ "type": "object",
+ "required": [
+ "payment_processing_certificate",
+ "payment_processing_certificate_key"
+ ],
+ "properties": {
+ "payment_processing_certificate": {
+ "type": "string"
},
- "shipping": {
+ "payment_processing_certificate_key": {
+ "type": "string"
+ }
+ }
+ },
+ "PaymentProcessingDetailsAt": {
+ "oneOf": [
+ {
"allOf": [
{
- "$ref": "#/components/schemas/Address"
- }
- ],
- "nullable": true
- },
- "customer_id": {
- "type": "string",
- "description": "The identifier for the customer",
- "example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
- "nullable": true,
- "maxLength": 64,
- "minLength": 1
- },
- "customer_present": {
- "allOf": [
+ "$ref": "#/components/schemas/PaymentProcessingDetails"
+ },
{
- "$ref": "#/components/schemas/PresenceOfCustomerDuringPayment"
+ "type": "object",
+ "required": [
+ "payment_processing_details_at"
+ ],
+ "properties": {
+ "payment_processing_details_at": {
+ "type": "string",
+ "enum": [
+ "Hyperswitch"
+ ]
+ }
+ }
}
- ],
- "nullable": true
- },
- "description": {
- "type": "string",
- "description": "A description for the payment",
- "example": "It's my first payment request",
- "nullable": true
- },
- "return_url": {
- "type": "string",
- "description": "The URL to which you want the user to be redirected after the completion of the payment operation",
- "example": "https://hyperswitch.io",
- "nullable": true
+ ]
},
- "setup_future_usage": {
- "allOf": [
- {
- "$ref": "#/components/schemas/FutureUsage"
- }
+ {
+ "type": "object",
+ "required": [
+ "payment_processing_details_at"
],
- "nullable": true
- },
- "apply_mit_exemption": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MitExemptionRequest"
+ "properties": {
+ "payment_processing_details_at": {
+ "type": "string",
+ "enum": [
+ "Connector"
+ ]
}
- ],
- "nullable": true
- },
- "statement_descriptor": {
- "type": "string",
- "description": "For non-card charges, you can use this value as the complete description that appears on your customers’ statements. Must contain at least one letter, maximum 22 characters.",
- "example": "Hyperswitch Router",
- "nullable": true,
- "maxLength": 22
- },
- "order_details": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/OrderDetailsWithAmount"
- },
- "description": "Use this object to capture the details about the different products for which the payment is being made. The sum of amount across different products here should be equal to the overall payment amount",
- "example": "[{\n \"product_name\": \"Apple iPhone 16\",\n \"quantity\": 1,\n \"amount\" : 69000\n \"product_img_link\" : \"https://dummy-img-link.com\"\n }]",
- "nullable": true
- },
- "allowed_payment_method_types": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/PaymentMethodType"
- },
- "description": "Use this parameter to restrict the Payment Method Types to show for a given PaymentIntent",
+ }
+ }
+ ],
+ "discriminator": {
+ "propertyName": "payment_processing_details_at"
+ }
+ },
+ "PaymentRetrieveBody": {
+ "type": "object",
+ "properties": {
+ "merchant_id": {
+ "type": "string",
+ "description": "The identifier for the Merchant Account.",
"nullable": true
},
- "metadata": {
- "type": "object",
- "description": "Metadata is useful for storing additional, unstructured information on an object.",
+ "force_sync": {
+ "type": "boolean",
+ "description": "Decider to enable or disable the connector call for retrieve request",
"nullable": true
},
- "connector_metadata": {
- "allOf": [
- {
- "$ref": "#/components/schemas/ConnectorMetadata"
- }
- ],
+ "client_secret": {
+ "type": "string",
+ "description": "This is a token which expires after 15 minutes, used from the client to authenticate and create sessions from the SDK",
"nullable": true
},
- "feature_metadata": {
- "allOf": [
- {
- "$ref": "#/components/schemas/FeatureMetadata"
- }
- ],
+ "expand_captures": {
+ "type": "boolean",
+ "description": "If enabled provides list of captures linked to latest attempt",
"nullable": true
},
- "payment_link_enabled": {
- "allOf": [
- {
- "$ref": "#/components/schemas/EnablePaymentLinkRequest"
- }
- ],
+ "expand_attempts": {
+ "type": "boolean",
+ "description": "If enabled provides list of attempts linked to payment intent",
"nullable": true
- },
- "payment_link_config": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentCreatePaymentLinkConfig"
- }
- ],
+ }
+ }
+ },
+ "PaymentType": {
+ "type": "string",
+ "description": "The type of the payment that differentiates between normal and various types of mandate payments. Use 'setup_mandate' in case of zero auth flow.",
+ "enum": [
+ "normal",
+ "new_mandate",
+ "setup_mandate",
+ "recurring_mandate"
+ ]
+ },
+ "PaymentsCancelRequest": {
+ "type": "object",
+ "properties": {
+ "cancellation_reason": {
+ "type": "string",
+ "description": "The reason for the payment cancel",
"nullable": true
},
- "request_incremental_authorization": {
+ "merchant_connector_details": {
"allOf": [
{
- "$ref": "#/components/schemas/RequestIncrementalAuthorization"
+ "$ref": "#/components/schemas/MerchantConnectorDetailsWrap"
}
],
"nullable": true
- },
- "session_expiry": {
+ }
+ }
+ },
+ "PaymentsCaptureRequest": {
+ "type": "object",
+ "properties": {
+ "amount_to_capture": {
"type": "integer",
- "format": "int32",
- "description": "Will be used to expire client secret after certain amount of time to be supplied in seconds, if not sent it will be taken from profile config\n(900) for 15 mins",
- "example": 900,
- "nullable": true,
- "minimum": 0
- },
- "frm_metadata": {
- "type": "object",
- "description": "Additional data related to some frm(Fraud Risk Management) connectors",
+ "format": "int64",
+ "description": "The Amount to be captured/ debited from the user's payment method. If not passed the full amount will be captured.",
+ "example": 6540,
"nullable": true
- },
- "request_external_three_ds_authentication": {
+ }
+ }
+ },
+ "PaymentsCompleteAuthorizeRequest": {
+ "type": "object",
+ "required": [
+ "client_secret"
+ ],
+ "properties": {
+ "shipping": {
"allOf": [
{
- "$ref": "#/components/schemas/External3dsAuthenticationRequest"
+ "$ref": "#/components/schemas/Address"
}
],
"nullable": true
+ },
+ "client_secret": {
+ "type": "string",
+ "description": "Client Secret"
}
- },
- "additionalProperties": false
+ }
},
- "PaymentsCreateIntentResponse": {
+ "PaymentsConfirmIntentRequest": {
"type": "object",
+ "description": "Request for Payment Intent Confirm",
"required": [
- "amount_details",
- "client_secret",
- "capture_method",
- "authentication_type",
- "customer_present",
- "setup_future_usage",
- "apply_mit_exemption",
- "payment_link_enabled",
- "request_incremental_authorization",
- "request_external_three_ds_authentication"
+ "payment_method_data",
+ "payment_method_type",
+ "payment_method_subtype"
],
"properties": {
- "amount_details": {
- "$ref": "#/components/schemas/AmountDetails"
- },
- "client_secret": {
+ "return_url": {
"type": "string",
- "description": "It's a token used for client side verification.",
- "example": "pay_U42c409qyHwOkWo3vK60_secret_el9ksDkiB8hi6j9N78yo"
+ "description": "The URL to which you want the user to be redirected after the completion of the payment operation\nIf this url is not passed, the url configured in the business profile will be used",
+ "example": "https://hyperswitch.io",
+ "nullable": true
},
- "merchant_reference_id": {
- "type": "string",
- "description": "Unique identifier for the payment. This ensures idempotency for multiple payments\nthat have been done by a single merchant.",
- "example": "pay_mbabizu24mvu3mela5njyhpit4",
- "nullable": true,
- "maxLength": 30,
- "minLength": 30
+ "payment_method_data": {
+ "$ref": "#/components/schemas/PaymentMethodDataRequest"
},
- "routing_algorithm_id": {
- "type": "string",
- "description": "The routing algorithm id to be used for the payment",
- "nullable": true
+ "payment_method_type": {
+ "$ref": "#/components/schemas/PaymentMethod"
},
- "capture_method": {
- "$ref": "#/components/schemas/CaptureMethod"
+ "payment_method_subtype": {
+ "$ref": "#/components/schemas/PaymentMethodType"
},
- "authentication_type": {
+ "shipping": {
"allOf": [
{
- "$ref": "#/components/schemas/AuthenticationType"
+ "$ref": "#/components/schemas/Address"
}
],
- "default": "no_three_ds"
+ "nullable": true
},
- "billing": {
+ "customer_acceptance": {
"allOf": [
{
- "$ref": "#/components/schemas/Address"
+ "$ref": "#/components/schemas/CustomerAcceptance"
}
],
"nullable": true
},
- "shipping": {
+ "browser_info": {
"allOf": [
{
- "$ref": "#/components/schemas/Address"
+ "$ref": "#/components/schemas/BrowserInformation"
}
],
"nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "PaymentsConfirmIntentResponse": {
+ "type": "object",
+ "description": "Response for Payment Intent Confirm",
+ "required": [
+ "id",
+ "status",
+ "amount",
+ "customer_id",
+ "connector",
+ "client_secret",
+ "created",
+ "payment_method_type",
+ "payment_method_subtype",
+ "merchant_connector_id"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "Unique identifier for the payment. This ensures idempotency for multiple payments\nthat have been done by a single merchant.",
+ "example": "12345_pay_01926c58bc6e77c09e809964e72af8c8",
+ "maxLength": 64,
+ "minLength": 32
+ },
+ "status": {
+ "$ref": "#/components/schemas/IntentStatus"
+ },
+ "amount": {
+ "$ref": "#/components/schemas/PaymentAmountDetailsResponse"
},
"customer_id": {
"type": "string",
"description": "The identifier for the customer",
- "example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
- "nullable": true,
+ "example": "12345_cus_01926c58bc6e77c09e809964e72af8c8",
"maxLength": 64,
- "minLength": 1
+ "minLength": 32
},
- "customer_present": {
- "$ref": "#/components/schemas/PresenceOfCustomerDuringPayment"
- },
- "description": {
+ "connector": {
"type": "string",
- "description": "A description for the payment",
- "example": "It's my first payment request",
- "nullable": true
+ "description": "The connector used for the payment",
+ "example": "stripe"
},
- "return_url": {
+ "client_secret": {
"type": "string",
- "description": "The URL to which you want the user to be redirected after the completion of the payment operation",
- "example": "https://hyperswitch.io",
- "nullable": true
- },
- "setup_future_usage": {
- "$ref": "#/components/schemas/FutureUsage"
- },
- "apply_mit_exemption": {
- "$ref": "#/components/schemas/MitExemptionRequest"
+ "description": "It's a token used for client side verification."
},
- "statement_descriptor": {
+ "created": {
"type": "string",
- "description": "For non-card charges, you can use this value as the complete description that appears on your customers’ statements. Must contain at least one letter, maximum 22 characters.",
- "example": "Hyperswitch Router",
- "nullable": true,
- "maxLength": 22
+ "format": "date-time",
+ "description": "Time when the payment was created",
+ "example": "2022-09-10T10:11:12Z"
},
- "order_details": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/OrderDetailsWithAmount"
- },
- "description": "Use this object to capture the details about the different products for which the payment is being made. The sum of amount across different products here should be equal to the overall payment amount",
- "example": "[{\n \"product_name\": \"Apple iPhone 16\",\n \"quantity\": 1,\n \"amount\" : 69000\n \"product_img_link\" : \"https://dummy-img-link.com\"\n }]",
+ "payment_method_data": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentMethodDataResponseWithBilling"
+ }
+ ],
"nullable": true
},
- "allowed_payment_method_types": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/PaymentMethodType"
- },
- "description": "Use this parameter to restrict the Payment Method Types to show for a given PaymentIntent",
- "nullable": true
+ "payment_method_type": {
+ "$ref": "#/components/schemas/PaymentMethod"
},
- "metadata": {
- "type": "object",
- "description": "Metadata is useful for storing additional, unstructured information on an object.",
- "nullable": true
+ "payment_method_subtype": {
+ "$ref": "#/components/schemas/PaymentMethodType"
},
- "connector_metadata": {
+ "next_action": {
"allOf": [
{
- "$ref": "#/components/schemas/ConnectorMetadata"
+ "$ref": "#/components/schemas/NextActionData"
}
],
"nullable": true
},
- "feature_metadata": {
+ "connector_transaction_id": {
+ "type": "string",
+ "description": "A unique identifier for a payment provided by the connector",
+ "example": "993672945374576J",
+ "nullable": true
+ },
+ "connector_reference_id": {
+ "type": "string",
+ "description": "reference(Identifier) to the payment at connector side",
+ "example": "993672945374576J",
+ "nullable": true
+ },
+ "merchant_connector_id": {
+ "type": "string",
+ "description": "Identifier of the connector ( merchant connector account ) which was chosen to make the payment"
+ },
+ "browser_info": {
"allOf": [
{
- "$ref": "#/components/schemas/FeatureMetadata"
+ "$ref": "#/components/schemas/BrowserInformation"
}
],
"nullable": true
},
- "payment_link_enabled": {
- "$ref": "#/components/schemas/EnablePaymentLinkRequest"
- },
- "payment_link_config": {
+ "error": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentCreatePaymentLinkConfig"
+ "$ref": "#/components/schemas/ErrorDetails"
}
],
"nullable": true
- },
- "request_incremental_authorization": {
- "$ref": "#/components/schemas/RequestIncrementalAuthorization"
- },
- "session_expiry": {
- "type": "integer",
- "format": "int32",
- "description": "Will be used to expire client secret after certain amount of time to be supplied in seconds, if not sent it will be taken from profile config\n(900) for 15 mins",
- "example": 900,
- "nullable": true,
- "minimum": 0
- },
- "frm_metadata": {
- "type": "object",
- "description": "Additional data related to some frm(Fraud Risk Management) connectors",
- "nullable": true
- },
- "request_external_three_ds_authentication": {
- "$ref": "#/components/schemas/External3dsAuthenticationRequest"
}
- },
- "additionalProperties": false
+ }
},
- "PaymentsCreateRequest": {
+ "PaymentsCreateIntentRequest": {
"type": "object",
"required": [
- "amount",
- "currency"
+ "amount_details",
+ "customer_id"
],
"properties": {
- "amount": {
- "type": "integer",
- "format": "int64",
- "description": "The payment amount. Amount for the payment in the lowest denomination of the currency, (i.e) in cents for USD denomination, in yen for JPY denomination etc. E.g., Pass 100 to charge $1.00 and 1 for 1¥ since ¥ is a zero-decimal currency. Read more about [the Decimal and Non-Decimal Currencies](https://github.com/juspay/hyperswitch/wiki/Decimal-and-Non%E2%80%90Decimal-Currencies)",
- "minimum": 0
- },
- "currency": {
- "$ref": "#/components/schemas/Currency"
- },
- "amount_to_capture": {
- "type": "integer",
- "format": "int64",
- "description": "The Amount to be captured / debited from the users payment method. It shall be in lowest denomination of the currency. (i.e) in cents for USD denomination, in paisa for INR denomination etc., If not provided, the default amount_to_capture will be the payment amount. Also, it must be less than or equal to the original payment account.",
- "example": 6540,
- "nullable": true
- },
- "shipping_cost": {
- "type": "integer",
- "format": "int64",
- "description": "The shipping cost for the payment. This is required for tax calculation in some regions.",
- "example": 6540,
- "nullable": true
+ "amount_details": {
+ "$ref": "#/components/schemas/AmountDetails"
},
- "payment_id": {
+ "merchant_reference_id": {
"type": "string",
- "description": "Unique identifier for the payment. This ensures idempotency for multiple payments\nthat have been done by a single merchant. The value for this field can be specified in the request, it will be auto generated otherwise and returned in the API response.",
+ "description": "Unique identifier for the payment. This ensures idempotency for multiple payments\nthat have been done by a single merchant.",
"example": "pay_mbabizu24mvu3mela5njyhpit4",
"nullable": true,
"maxLength": 30,
"minLength": 30
},
- "routing": {
- "allOf": [
- {
- "$ref": "#/components/schemas/StraightThroughAlgorithm"
- }
- ],
- "nullable": true
- },
- "connector": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/Connector"
- },
- "description": "This allows to manually select a connector with which the payment can go through.",
- "example": [
- "stripe",
- "adyen"
- ],
+ "routing_algorithm_id": {
+ "type": "string",
+ "description": "The routing algorithm id to be used for the payment",
"nullable": true
},
"capture_method": {
@@ -13556,7 +14785,7 @@
"$ref": "#/components/schemas/AuthenticationType"
}
],
- "default": "three_ds",
+ "default": "no_three_ds",
"nullable": true
},
"billing": {
@@ -13567,17 +14796,10 @@
],
"nullable": true
},
- "confirm": {
- "type": "boolean",
- "description": "Whether to confirm the payment (if applicable). It can be used to completely process a payment by attaching a payment method, setting `confirm=true` and `capture_method = automatic` in the *Payments/Create API* request itself.",
- "default": false,
- "example": true,
- "nullable": true
- },
- "customer": {
+ "shipping": {
"allOf": [
{
- "$ref": "#/components/schemas/CustomerDetails"
+ "$ref": "#/components/schemas/Address"
}
],
"nullable": true
@@ -13585,15 +14807,16 @@
"customer_id": {
"type": "string",
"description": "The identifier for the customer",
- "example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
- "nullable": true,
+ "example": "12345_cus_01926c58bc6e77c09e809964e72af8c8",
"maxLength": 64,
- "minLength": 1
+ "minLength": 32
},
- "off_session": {
- "type": "boolean",
- "description": "Set to true to indicate that the customer is not in your checkout flow during this payment, and therefore is unable to authenticate. This parameter is intended for scenarios where you collect card details and charge them later. When making a recurring payment by passing a mandate_id, this parameter is mandatory",
- "example": true,
+ "customer_present": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PresenceOfCustomerDuringPayment"
+ }
+ ],
"nullable": true
},
"description": {
@@ -13616,49 +14839,20 @@
],
"nullable": true
},
- "payment_method_data": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodDataRequest"
- }
- ],
- "nullable": true
- },
- "payment_method": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethod"
- }
- ],
- "nullable": true
- },
- "payment_token": {
- "type": "string",
- "description": "As Hyperswitch tokenises the sensitive details about the payments method, it provides the payment_token as a reference to a stored payment method, ensuring that the sensitive details are not exposed in any manner.",
- "example": "187282ab-40ef-47a9-9206-5099ba31e432",
- "nullable": true
- },
- "shipping": {
+ "apply_mit_exemption": {
"allOf": [
{
- "$ref": "#/components/schemas/Address"
+ "$ref": "#/components/schemas/MitExemptionRequest"
}
],
"nullable": true
},
- "statement_descriptor_name": {
+ "statement_descriptor": {
"type": "string",
"description": "For non-card charges, you can use this value as the complete description that appears on your customers’ statements. Must contain at least one letter, maximum 22 characters.",
"example": "Hyperswitch Router",
"nullable": true,
- "maxLength": 255
- },
- "statement_descriptor_suffix": {
- "type": "string",
- "description": "Provides information about a card payment that customers see on their statements. Concatenated with the prefix (shortened descriptor) or statement descriptor that’s set on the account to form the complete statement descriptor. Maximum 22 characters for the concatenated descriptor.",
- "example": "Payment for shoes purchase",
- "nullable": true,
- "maxLength": 255
+ "maxLength": 22
},
"order_details": {
"type": "array",
@@ -13669,75 +14863,6 @@
"example": "[{\n \"product_name\": \"Apple iPhone 16\",\n \"quantity\": 1,\n \"amount\" : 69000\n \"product_img_link\" : \"https://dummy-img-link.com\"\n }]",
"nullable": true
},
- "mandate_data": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MandateData"
- }
- ],
- "nullable": true
- },
- "customer_acceptance": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CustomerAcceptance"
- }
- ],
- "nullable": true
- },
- "mandate_id": {
- "type": "string",
- "description": "A unique identifier to link the payment to a mandate. To do Recurring payments after a mandate has been created, pass the mandate_id instead of payment_method_data",
- "example": "mandate_iwer89rnjef349dni3",
- "nullable": true,
- "maxLength": 255
- },
- "browser_info": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BrowserInformation"
- }
- ],
- "nullable": true
- },
- "payment_experience": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentExperience"
- }
- ],
- "nullable": true
- },
- "payment_method_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodType"
- }
- ],
- "nullable": true
- },
- "business_country": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CountryAlpha2"
- }
- ],
- "nullable": true
- },
- "business_label": {
- "type": "string",
- "description": "Business label of the merchant for this payment.\nTo be deprecated soon. Pass the profile_id instead",
- "example": "food",
- "nullable": true
- },
- "merchant_connector_details": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MerchantConnectorDetailsWrap"
- }
- ],
- "nullable": true
- },
"allowed_payment_method_types": {
"type": "array",
"items": {
@@ -13748,7 +14873,7 @@
},
"metadata": {
"type": "object",
- "description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Metadata is useful for storing additional, structured information on an object.",
+ "description": "Metadata is useful for storing additional, unstructured information on an object.",
"nullable": true
},
"connector_metadata": {
@@ -13759,100 +14884,61 @@
],
"nullable": true
},
- "payment_link": {
- "type": "boolean",
- "description": "Whether to generate the payment link for this payment or not (if applicable)",
- "default": false,
- "example": true,
- "nullable": true
- },
- "payment_link_config": {
+ "feature_metadata": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentCreatePaymentLinkConfig"
+ "$ref": "#/components/schemas/FeatureMetadata"
}
],
"nullable": true
},
- "payment_link_config_id": {
- "type": "string",
- "description": "Custom payment link config id set at business profile, send only if business_specific_configs is configured",
- "nullable": true
- },
- "profile_id": {
- "type": "string",
- "description": "The business profile to be used for this payment, if not passed the default business profile associated with the merchant account will be used. It is mandatory in case multiple business profiles have been set up.",
- "nullable": true
- },
- "surcharge_details": {
+ "payment_link_enabled": {
"allOf": [
{
- "$ref": "#/components/schemas/RequestSurchargeDetails"
+ "$ref": "#/components/schemas/EnablePaymentLinkRequest"
}
],
"nullable": true
},
- "payment_type": {
+ "payment_link_config": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentType"
+ "$ref": "#/components/schemas/PaymentLinkConfigRequest"
}
],
"nullable": true
},
"request_incremental_authorization": {
- "type": "boolean",
- "description": "Request an incremental authorization, i.e., increase the authorized amount on a confirmed payment before you capture it.",
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RequestIncrementalAuthorization"
+ }
+ ],
"nullable": true
},
"session_expiry": {
"type": "integer",
"format": "int32",
- "description": "Will be used to expire client secret after certain amount of time to be supplied in seconds\n(900) for 15 mins",
+ "description": "Will be used to expire client secret after certain amount of time to be supplied in seconds, if not sent it will be taken from profile config\n(900) for 15 mins",
"example": 900,
"nullable": true,
- "minimum": 0
- },
- "frm_metadata": {
- "type": "object",
- "description": "Additional data related to some frm(Fraud Risk Management) connectors",
- "nullable": true
- },
- "request_external_three_ds_authentication": {
- "type": "boolean",
- "description": "Whether to perform external authentication (if applicable)",
- "example": true,
- "nullable": true
+ "minimum": 0
},
- "recurring_details": {
- "allOf": [
- {
- "$ref": "#/components/schemas/RecurringDetails"
- }
- ],
+ "frm_metadata": {
+ "type": "object",
+ "description": "Additional data related to some frm(Fraud Risk Management) connectors",
"nullable": true
},
- "charges": {
+ "request_external_three_ds_authentication": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentChargeRequest"
+ "$ref": "#/components/schemas/External3dsAuthenticationRequest"
}
],
"nullable": true
- },
- "merchant_order_reference_id": {
- "type": "string",
- "description": "Merchant's identifier for the payment/invoice. This will be sent to the connector\nif the connector provides support to accept multiple reference ids.\nIn case the connector supports only one reference id, Hyperswitch's Payment ID will be sent as reference.",
- "example": "Custom_Order_id_123",
- "nullable": true,
- "maxLength": 255
- },
- "skip_external_tax_calculation": {
- "type": "boolean",
- "description": "Whether to calculate tax for this payment intent",
- "nullable": true
}
- }
+ },
+ "additionalProperties": false
},
"PaymentsCreateResponseOpenApi": {
"type": "object",
@@ -13901,6 +14987,13 @@
"description": "The payment net amount. net_amount = amount + surcharge_details.surcharge_amount + surcharge_details.tax_amount + shipping_cost + order_tax_amount,\nIf no surcharge_details, shipping_cost, order_tax_amount, net_amount = amount",
"example": 6540
},
+ "shipping_cost": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The shipping cost for the payment.",
+ "example": 6540,
+ "nullable": true
+ },
"amount_capturable": {
"type": "integer",
"format": "int64",
@@ -13944,910 +15037,723 @@
"example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
"nullable": true,
"maxLength": 64,
- "minLength": 1
- },
- "description": {
- "type": "string",
- "description": "A description of the payment",
- "example": "It's my first payment request",
- "nullable": true
- },
- "refunds": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/RefundResponse"
- },
- "description": "List of refunds that happened on this intent, as same payment intent can have multiple refund requests depending on the nature of order",
- "nullable": true
- },
- "disputes": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/DisputeResponsePaymentsRetrieve"
- },
- "description": "List of disputes that happened on this intent",
- "nullable": true
- },
- "attempts": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/PaymentAttemptResponse"
- },
- "description": "List of attempts that happened on this intent",
- "nullable": true
- },
- "captures": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/CaptureResponse"
- },
- "description": "List of captures done on latest attempt",
- "nullable": true
- },
- "mandate_id": {
- "type": "string",
- "description": "A unique identifier to link the payment to a mandate, can be used instead of payment_method_data, in case of setting up recurring payments",
- "example": "mandate_iwer89rnjef349dni3",
- "nullable": true,
- "maxLength": 255
- },
- "mandate_data": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MandateData"
- }
- ],
- "nullable": true
- },
- "setup_future_usage": {
- "allOf": [
- {
- "$ref": "#/components/schemas/FutureUsage"
- }
- ],
- "nullable": true
- },
- "off_session": {
- "type": "boolean",
- "description": "Set to true to indicate that the customer is not in your checkout flow during this payment, and therefore is unable to authenticate. This parameter is intended for scenarios where you collect card details and charge them later. This parameter can only be used with confirm=true.",
- "example": true,
- "nullable": true
- },
- "capture_method": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CaptureMethod"
- }
- ],
- "nullable": true
- },
- "payment_method": {
- "$ref": "#/components/schemas/PaymentMethod"
- },
- "payment_method_data": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodDataResponseWithBilling"
- }
- ],
- "nullable": true
- },
- "payment_token": {
- "type": "string",
- "description": "Provide a reference to a stored payment method",
- "example": "187282ab-40ef-47a9-9206-5099ba31e432",
- "nullable": true
- },
- "shipping": {
- "allOf": [
- {
- "$ref": "#/components/schemas/Address"
- }
- ],
- "nullable": true
- },
- "billing": {
- "allOf": [
- {
- "$ref": "#/components/schemas/Address"
- }
- ],
- "nullable": true
- },
- "order_details": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/OrderDetailsWithAmount"
- },
- "description": "Information about the product , quantity and amount for connectors. (e.g. Klarna)",
- "example": "[{\n \"product_name\": \"gillete creme\",\n \"quantity\": 15,\n \"amount\" : 900\n }]",
- "nullable": true
- },
- "email": {
- "type": "string",
- "description": "description: The customer's email address\nThis field will be deprecated soon. Please refer to `customer.email` object",
- "deprecated": true,
- "example": "johntest@test.com",
- "nullable": true,
- "maxLength": 255
- },
- "name": {
- "type": "string",
- "description": "description: The customer's name\nThis field will be deprecated soon. Please refer to `customer.name` object",
- "deprecated": true,
- "example": "John Test",
- "nullable": true,
- "maxLength": 255
- },
- "phone": {
- "type": "string",
- "description": "The customer's phone number\nThis field will be deprecated soon. Please refer to `customer.phone` object",
- "deprecated": true,
- "example": "9123456789",
- "nullable": true,
- "maxLength": 255
- },
- "return_url": {
- "type": "string",
- "description": "The URL to redirect after the completion of the operation",
- "example": "https://hyperswitch.io",
- "nullable": true
- },
- "authentication_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/AuthenticationType"
- }
- ],
- "default": "three_ds",
- "nullable": true
- },
- "statement_descriptor_name": {
- "type": "string",
- "description": "For non-card charges, you can use this value as the complete description that appears on your customers’ statements. Must contain at least one letter, maximum 22 characters.",
- "example": "Hyperswitch Router",
- "nullable": true,
- "maxLength": 255
- },
- "statement_descriptor_suffix": {
- "type": "string",
- "description": "Provides information about a card payment that customers see on their statements. Concatenated with the prefix (shortened descriptor) or statement descriptor that’s set on the account to form the complete statement descriptor. Maximum 255 characters for the concatenated descriptor.",
- "example": "Payment for shoes purchase",
- "nullable": true,
- "maxLength": 255
- },
- "next_action": {
- "allOf": [
- {
- "$ref": "#/components/schemas/NextActionData"
- }
- ],
- "nullable": true
- },
- "cancellation_reason": {
- "type": "string",
- "description": "If the payment was cancelled the reason will be provided here",
- "nullable": true
- },
- "error_code": {
- "type": "string",
- "description": "If there was an error while calling the connectors the code is received here",
- "example": "E0001",
- "nullable": true
- },
- "error_message": {
- "type": "string",
- "description": "If there was an error while calling the connector the error message is received here",
- "example": "Failed while verifying the card",
- "nullable": true
- },
- "payment_experience": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentExperience"
- }
- ],
- "nullable": true
- },
- "payment_method_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodType"
- }
- ],
- "nullable": true
- },
- "connector_label": {
- "type": "string",
- "description": "The connector used for this payment along with the country and business details",
- "example": "stripe_US_food",
- "nullable": true
- },
- "business_country": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CountryAlpha2"
- }
- ],
- "nullable": true
+ "minLength": 1
},
- "business_label": {
+ "description": {
"type": "string",
- "description": "The business label of merchant for this payment",
+ "description": "A description of the payment",
+ "example": "It's my first payment request",
"nullable": true
},
- "business_sub_label": {
- "type": "string",
- "description": "The business_sub_label for this payment",
+ "refunds": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/RefundResponse"
+ },
+ "description": "List of refunds that happened on this intent, as same payment intent can have multiple refund requests depending on the nature of order",
"nullable": true
},
- "allowed_payment_method_types": {
+ "disputes": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/PaymentMethodType"
+ "$ref": "#/components/schemas/DisputeResponsePaymentsRetrieve"
},
- "description": "Allowed Payment Method Types for a given PaymentIntent",
+ "description": "List of disputes that happened on this intent",
"nullable": true
},
- "ephemeral_key": {
- "allOf": [
- {
- "$ref": "#/components/schemas/EphemeralKeyCreateResponse"
- }
- ],
+ "attempts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PaymentAttemptResponse"
+ },
+ "description": "List of attempts that happened on this intent",
"nullable": true
},
- "manual_retry_allowed": {
- "type": "boolean",
- "description": "If true the payment can be retried with same or different payment method which means the confirm call can be made again.",
+ "captures": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CaptureResponse"
+ },
+ "description": "List of captures done on latest attempt",
"nullable": true
},
- "connector_transaction_id": {
+ "mandate_id": {
"type": "string",
- "description": "A unique identifier for a payment provided by the connector",
- "example": "993672945374576J",
- "nullable": true
+ "description": "A unique identifier to link the payment to a mandate, can be used instead of payment_method_data, in case of setting up recurring payments",
+ "example": "mandate_iwer89rnjef349dni3",
+ "nullable": true,
+ "maxLength": 255
},
- "frm_message": {
+ "mandate_data": {
"allOf": [
{
- "$ref": "#/components/schemas/FrmMessage"
+ "$ref": "#/components/schemas/MandateData"
}
],
"nullable": true
},
- "metadata": {
- "type": "object",
- "description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Metadata is useful for storing additional, structured information on an object.",
- "nullable": true
- },
- "connector_metadata": {
+ "setup_future_usage": {
"allOf": [
{
- "$ref": "#/components/schemas/ConnectorMetadata"
+ "$ref": "#/components/schemas/FutureUsage"
}
],
"nullable": true
},
- "feature_metadata": {
+ "off_session": {
+ "type": "boolean",
+ "description": "Set to true to indicate that the customer is not in your checkout flow during this payment, and therefore is unable to authenticate. This parameter is intended for scenarios where you collect card details and charge them later. This parameter can only be used with confirm=true.",
+ "example": true,
+ "nullable": true
+ },
+ "capture_method": {
"allOf": [
{
- "$ref": "#/components/schemas/FeatureMetadata"
+ "$ref": "#/components/schemas/CaptureMethod"
}
],
"nullable": true
},
- "reference_id": {
- "type": "string",
- "description": "reference(Identifier) to the payment at connector side",
- "example": "993672945374576J",
- "nullable": true
+ "payment_method": {
+ "$ref": "#/components/schemas/PaymentMethod"
},
- "payment_link": {
+ "payment_method_data": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentLinkResponse"
+ "$ref": "#/components/schemas/PaymentMethodDataResponseWithBilling"
}
],
"nullable": true
},
- "profile_id": {
+ "payment_token": {
"type": "string",
- "description": "The business profile that is associated with this payment",
+ "description": "Provide a reference to a stored payment method",
+ "example": "187282ab-40ef-47a9-9206-5099ba31e432",
"nullable": true
},
- "surcharge_details": {
+ "shipping": {
"allOf": [
{
- "$ref": "#/components/schemas/RequestSurchargeDetails"
+ "$ref": "#/components/schemas/Address"
}
],
"nullable": true
},
- "attempt_count": {
- "type": "integer",
- "format": "int32",
- "description": "Total number of attempts associated with this payment"
- },
- "merchant_decision": {
- "type": "string",
- "description": "Denotes the action(approve or reject) taken by merchant in case of manual review. Manual review can occur when the transaction is marked as risky by the frm_processor, payment processor or when there is underpayment/over payment incase of crypto payment",
- "nullable": true
- },
- "merchant_connector_id": {
- "type": "string",
- "description": "Identifier of the connector ( merchant connector account ) which was chosen to make the payment",
- "nullable": true
- },
- "incremental_authorization_allowed": {
- "type": "boolean",
- "description": "If true, incremental authorization can be performed on this payment, in case the funds authorized initially fall short.",
- "nullable": true
- },
- "authorization_count": {
- "type": "integer",
- "format": "int32",
- "description": "Total number of authorizations happened in an incremental_authorization payment",
- "nullable": true
- },
- "incremental_authorizations": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/IncrementalAuthorizationResponse"
- },
- "description": "List of incremental authorizations happened to the payment",
- "nullable": true
- },
- "external_authentication_details": {
+ "billing": {
"allOf": [
{
- "$ref": "#/components/schemas/ExternalAuthenticationDetailsResponse"
+ "$ref": "#/components/schemas/Address"
}
],
"nullable": true
},
- "external_3ds_authentication_attempted": {
- "type": "boolean",
- "description": "Flag indicating if external 3ds authentication is made or not",
+ "order_details": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/OrderDetailsWithAmount"
+ },
+ "description": "Information about the product , quantity and amount for connectors. (e.g. Klarna)",
+ "example": "[{\n \"product_name\": \"gillete creme\",\n \"quantity\": 15,\n \"amount\" : 900\n }]",
"nullable": true
},
- "expires_on": {
+ "email": {
"type": "string",
- "format": "date-time",
- "description": "Date Time for expiry of the payment",
- "example": "2022-09-10T10:11:12Z",
- "nullable": true
+ "description": "description: The customer's email address\nThis field will be deprecated soon. Please refer to `customer.email` object",
+ "deprecated": true,
+ "example": "johntest@test.com",
+ "nullable": true,
+ "maxLength": 255
},
- "fingerprint": {
+ "name": {
"type": "string",
- "description": "Payment Fingerprint, to identify a particular card.\nIt is a 20 character long alphanumeric code.",
- "nullable": true
- },
- "browser_info": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BrowserInformation"
- }
- ],
- "nullable": true
+ "description": "description: The customer's name\nThis field will be deprecated soon. Please refer to `customer.name` object",
+ "deprecated": true,
+ "example": "John Test",
+ "nullable": true,
+ "maxLength": 255
},
- "payment_method_id": {
+ "phone": {
"type": "string",
- "description": "Identifier for Payment Method used for the payment",
- "nullable": true
- },
- "payment_method_status": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodStatus"
- }
- ],
- "nullable": true
+ "description": "The customer's phone number\nThis field will be deprecated soon. Please refer to `customer.phone` object",
+ "deprecated": true,
+ "example": "9123456789",
+ "nullable": true,
+ "maxLength": 255
},
- "updated": {
+ "return_url": {
"type": "string",
- "format": "date-time",
- "description": "Date time at which payment was updated",
- "example": "2022-09-10T10:11:12Z",
+ "description": "The URL to redirect after the completion of the operation",
+ "example": "https://hyperswitch.io",
"nullable": true
},
- "charges": {
+ "authentication_type": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentChargeResponse"
+ "$ref": "#/components/schemas/AuthenticationType"
}
],
+ "default": "three_ds",
"nullable": true
},
- "frm_metadata": {
- "type": "object",
- "description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. FRM Metadata is useful for storing additional, structured information on an object related to FRM.",
- "nullable": true
+ "statement_descriptor_name": {
+ "type": "string",
+ "description": "For non-card charges, you can use this value as the complete description that appears on your customers’ statements. Must contain at least one letter, maximum 22 characters.",
+ "example": "Hyperswitch Router",
+ "nullable": true,
+ "maxLength": 255
},
- "merchant_order_reference_id": {
+ "statement_descriptor_suffix": {
"type": "string",
- "description": "Merchant's identifier for the payment/invoice. This will be sent to the connector\nif the connector provides support to accept multiple reference ids.\nIn case the connector supports only one reference id, Hyperswitch's Payment ID will be sent as reference.",
- "example": "Custom_Order_id_123",
+ "description": "Provides information about a card payment that customers see on their statements. Concatenated with the prefix (shortened descriptor) or statement descriptor that’s set on the account to form the complete statement descriptor. Maximum 255 characters for the concatenated descriptor.",
+ "example": "Payment for shoes purchase",
"nullable": true,
"maxLength": 255
},
- "order_tax_amount": {
+ "next_action": {
"allOf": [
{
- "$ref": "#/components/schemas/MinorUnit"
+ "$ref": "#/components/schemas/NextActionData"
}
],
"nullable": true
},
- "connector_mandate_id": {
+ "cancellation_reason": {
"type": "string",
- "description": "Connector Identifier for the payment method",
+ "description": "If the payment was cancelled the reason will be provided here",
"nullable": true
- }
- }
- },
- "PaymentsDynamicTaxCalculationRequest": {
- "type": "object",
- "required": [
- "shipping",
- "client_secret",
- "payment_method_type"
- ],
- "properties": {
- "shipping": {
- "$ref": "#/components/schemas/Address"
- },
- "client_secret": {
- "type": "string",
- "description": "Client Secret"
},
- "payment_method_type": {
- "$ref": "#/components/schemas/PaymentMethodType"
- }
- }
- },
- "PaymentsDynamicTaxCalculationResponse": {
- "type": "object",
- "required": [
- "payment_id",
- "net_amount",
- "display_amount"
- ],
- "properties": {
- "payment_id": {
+ "error_code": {
"type": "string",
- "description": "The identifier for the payment"
+ "description": "If there was an error while calling the connectors the code is received here",
+ "example": "E0001",
+ "nullable": true
},
- "net_amount": {
- "$ref": "#/components/schemas/MinorUnit"
+ "error_message": {
+ "type": "string",
+ "description": "If there was an error while calling the connector the error message is received here",
+ "example": "Failed while verifying the card",
+ "nullable": true
},
- "order_tax_amount": {
+ "payment_experience": {
"allOf": [
{
- "$ref": "#/components/schemas/MinorUnit"
+ "$ref": "#/components/schemas/PaymentExperience"
}
],
"nullable": true
},
- "shipping_cost": {
+ "payment_method_type": {
"allOf": [
{
- "$ref": "#/components/schemas/MinorUnit"
+ "$ref": "#/components/schemas/PaymentMethodType"
}
],
"nullable": true
},
- "display_amount": {
- "$ref": "#/components/schemas/DisplayAmountOnSdk"
- }
- }
- },
- "PaymentsExternalAuthenticationRequest": {
- "type": "object",
- "required": [
- "client_secret",
- "device_channel",
- "threeds_method_comp_ind"
- ],
- "properties": {
- "client_secret": {
+ "connector_label": {
"type": "string",
- "description": "Client Secret"
+ "description": "The connector used for this payment along with the country and business details",
+ "example": "stripe_US_food",
+ "nullable": true
},
- "sdk_information": {
+ "business_country": {
"allOf": [
{
- "$ref": "#/components/schemas/SdkInformation"
+ "$ref": "#/components/schemas/CountryAlpha2"
}
],
"nullable": true
},
- "device_channel": {
- "$ref": "#/components/schemas/DeviceChannel"
- },
- "threeds_method_comp_ind": {
- "$ref": "#/components/schemas/ThreeDsCompletionIndicator"
- }
- }
- },
- "PaymentsExternalAuthenticationResponse": {
- "type": "object",
- "required": [
- "trans_status",
- "three_ds_requestor_url"
- ],
- "properties": {
- "trans_status": {
- "$ref": "#/components/schemas/TransactionStatus"
- },
- "acs_url": {
+ "business_label": {
"type": "string",
- "description": "Access Server URL to be used for challenge submission",
+ "description": "The business label of merchant for this payment",
"nullable": true
},
- "challenge_request": {
+ "business_sub_label": {
"type": "string",
- "description": "Challenge request which should be sent to acs_url",
+ "description": "The business_sub_label for this payment",
"nullable": true
},
- "acs_reference_number": {
- "type": "string",
- "description": "Unique identifier assigned by the EMVCo(Europay, Mastercard and Visa)",
+ "allowed_payment_method_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PaymentMethodType"
+ },
+ "description": "Allowed Payment Method Types for a given PaymentIntent",
"nullable": true
},
- "acs_trans_id": {
- "type": "string",
- "description": "Unique identifier assigned by the ACS to identify a single transaction",
+ "ephemeral_key": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/EphemeralKeyCreateResponse"
+ }
+ ],
"nullable": true
},
- "three_dsserver_trans_id": {
- "type": "string",
- "description": "Unique identifier assigned by the 3DS Server to identify a single transaction",
+ "manual_retry_allowed": {
+ "type": "boolean",
+ "description": "If true the payment can be retried with same or different payment method which means the confirm call can be made again.",
"nullable": true
},
- "acs_signed_content": {
+ "connector_transaction_id": {
"type": "string",
- "description": "Contains the JWS object created by the ACS for the ARes(Authentication Response) message",
+ "description": "A unique identifier for a payment provided by the connector",
+ "example": "993672945374576J",
"nullable": true
},
- "three_ds_requestor_url": {
- "type": "string",
- "description": "Three DS Requestor URL"
- }
- }
- },
- "PaymentsIncrementalAuthorizationRequest": {
- "type": "object",
- "required": [
- "amount"
- ],
- "properties": {
- "amount": {
- "type": "integer",
- "format": "int64",
- "description": "The total amount including previously authorized amount and additional amount",
- "example": 6540
+ "frm_message": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/FrmMessage"
+ }
+ ],
+ "nullable": true
},
- "reason": {
- "type": "string",
- "description": "Reason for incremental authorization",
+ "metadata": {
+ "type": "object",
+ "description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Metadata is useful for storing additional, structured information on an object.",
"nullable": true
- }
- }
- },
- "PaymentsRequest": {
- "type": "object",
- "properties": {
- "amount": {
- "type": "integer",
- "format": "int64",
- "description": "The payment amount. Amount for the payment in the lowest denomination of the currency, (i.e) in cents for USD denomination, in yen for JPY denomination etc. E.g., Pass 100 to charge $1.00 and 1 for 1¥ since ¥ is a zero-decimal currency. Read more about [the Decimal and Non-Decimal Currencies](https://github.com/juspay/hyperswitch/wiki/Decimal-and-Non%E2%80%90Decimal-Currencies)",
- "example": 6540,
- "nullable": true,
- "minimum": 0
},
- "currency": {
+ "connector_metadata": {
"allOf": [
{
- "$ref": "#/components/schemas/Currency"
+ "$ref": "#/components/schemas/ConnectorMetadata"
}
],
"nullable": true
},
- "amount_to_capture": {
- "type": "integer",
- "format": "int64",
- "description": "The Amount to be captured / debited from the users payment method. It shall be in lowest denomination of the currency. (i.e) in cents for USD denomination, in paisa for INR denomination etc., If not provided, the default amount_to_capture will be the payment amount. Also, it must be less than or equal to the original payment account.",
- "example": 6540,
+ "feature_metadata": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/FeatureMetadata"
+ }
+ ],
"nullable": true
},
- "shipping_cost": {
- "type": "integer",
- "format": "int64",
- "description": "The shipping cost for the payment. This is required for tax calculation in some regions.",
- "example": 6540,
+ "reference_id": {
+ "type": "string",
+ "description": "reference(Identifier) to the payment at connector side",
+ "example": "993672945374576J",
"nullable": true
},
- "payment_id": {
- "type": "string",
- "description": "Unique identifier for the payment. This ensures idempotency for multiple payments\nthat have been done by a single merchant. The value for this field can be specified in the request, it will be auto generated otherwise and returned in the API response.",
- "example": "pay_mbabizu24mvu3mela5njyhpit4",
- "nullable": true,
- "maxLength": 30,
- "minLength": 30
+ "payment_link": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentLinkResponse"
+ }
+ ],
+ "nullable": true
},
- "merchant_id": {
+ "profile_id": {
"type": "string",
- "description": "This is an identifier for the merchant account. This is inferred from the API key\nprovided during the request",
- "example": "merchant_1668273825",
- "nullable": true,
- "maxLength": 255
+ "description": "The business profile that is associated with this payment",
+ "nullable": true
},
- "routing": {
+ "surcharge_details": {
"allOf": [
{
- "$ref": "#/components/schemas/StraightThroughAlgorithm"
+ "$ref": "#/components/schemas/RequestSurchargeDetails"
}
],
"nullable": true
},
- "connector": {
+ "attempt_count": {
+ "type": "integer",
+ "format": "int32",
+ "description": "Total number of attempts associated with this payment"
+ },
+ "merchant_decision": {
+ "type": "string",
+ "description": "Denotes the action(approve or reject) taken by merchant in case of manual review. Manual review can occur when the transaction is marked as risky by the frm_processor, payment processor or when there is underpayment/over payment incase of crypto payment",
+ "nullable": true
+ },
+ "merchant_connector_id": {
+ "type": "string",
+ "description": "Identifier of the connector ( merchant connector account ) which was chosen to make the payment",
+ "nullable": true
+ },
+ "incremental_authorization_allowed": {
+ "type": "boolean",
+ "description": "If true, incremental authorization can be performed on this payment, in case the funds authorized initially fall short.",
+ "nullable": true
+ },
+ "authorization_count": {
+ "type": "integer",
+ "format": "int32",
+ "description": "Total number of authorizations happened in an incremental_authorization payment",
+ "nullable": true
+ },
+ "incremental_authorizations": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/Connector"
+ "$ref": "#/components/schemas/IncrementalAuthorizationResponse"
},
- "description": "This allows to manually select a connector with which the payment can go through.",
- "example": [
- "stripe",
- "adyen"
- ],
+ "description": "List of incremental authorizations happened to the payment",
"nullable": true
},
- "capture_method": {
+ "external_authentication_details": {
"allOf": [
{
- "$ref": "#/components/schemas/CaptureMethod"
+ "$ref": "#/components/schemas/ExternalAuthenticationDetailsResponse"
}
],
"nullable": true
},
- "authentication_type": {
+ "external_3ds_authentication_attempted": {
+ "type": "boolean",
+ "description": "Flag indicating if external 3ds authentication is made or not",
+ "nullable": true
+ },
+ "expires_on": {
+ "type": "string",
+ "format": "date-time",
+ "description": "Date Time for expiry of the payment",
+ "example": "2022-09-10T10:11:12Z",
+ "nullable": true
+ },
+ "fingerprint": {
+ "type": "string",
+ "description": "Payment Fingerprint, to identify a particular card.\nIt is a 20 character long alphanumeric code.",
+ "nullable": true
+ },
+ "browser_info": {
"allOf": [
{
- "$ref": "#/components/schemas/AuthenticationType"
+ "$ref": "#/components/schemas/BrowserInformation"
}
],
- "default": "three_ds",
"nullable": true
},
- "billing": {
+ "payment_method_id": {
+ "type": "string",
+ "description": "Identifier for Payment Method used for the payment",
+ "nullable": true
+ },
+ "payment_method_status": {
"allOf": [
{
- "$ref": "#/components/schemas/Address"
+ "$ref": "#/components/schemas/PaymentMethodStatus"
}
],
"nullable": true
},
- "capture_on": {
+ "updated": {
"type": "string",
"format": "date-time",
- "description": "A timestamp (ISO 8601 code) that determines when the payment should be captured.\nProviding this field will automatically set `capture` to true",
+ "description": "Date time at which payment was updated",
"example": "2022-09-10T10:11:12Z",
"nullable": true
},
- "confirm": {
- "type": "boolean",
- "description": "Whether to confirm the payment (if applicable). It can be used to completely process a payment by attaching a payment method, setting `confirm=true` and `capture_method = automatic` in the *Payments/Create API* request itself.",
- "default": false,
- "example": true,
- "nullable": true
- },
- "customer": {
+ "split_payments": {
"allOf": [
{
- "$ref": "#/components/schemas/CustomerDetails"
+ "$ref": "#/components/schemas/SplitPaymentsResponse"
}
],
"nullable": true
},
- "customer_id": {
- "type": "string",
- "description": "The identifier for the customer",
- "example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
- "nullable": true,
- "maxLength": 64,
- "minLength": 1
+ "frm_metadata": {
+ "type": "object",
+ "description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. FRM Metadata is useful for storing additional, structured information on an object related to FRM.",
+ "nullable": true
},
- "email": {
+ "merchant_order_reference_id": {
"type": "string",
- "description": "The customer's email address.\nThis field will be deprecated soon, use the customer object instead",
- "deprecated": true,
- "example": "johntest@test.com",
+ "description": "Merchant's identifier for the payment/invoice. This will be sent to the connector\nif the connector provides support to accept multiple reference ids.\nIn case the connector supports only one reference id, Hyperswitch's Payment ID will be sent as reference.",
+ "example": "Custom_Order_id_123",
"nullable": true,
"maxLength": 255
},
- "name": {
- "type": "string",
- "description": "The customer's name.\nThis field will be deprecated soon, use the customer object instead.",
- "deprecated": true,
- "example": "John Test",
- "nullable": true,
- "maxLength": 255
+ "order_tax_amount": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MinorUnit"
+ }
+ ],
+ "nullable": true
},
- "phone": {
+ "connector_mandate_id": {
"type": "string",
- "description": "The customer's phone number\nThis field will be deprecated soon, use the customer object instead",
- "deprecated": true,
- "example": "9123456789",
- "nullable": true,
- "maxLength": 255
+ "description": "Connector Identifier for the payment method",
+ "nullable": true
+ }
+ }
+ },
+ "PaymentsDynamicTaxCalculationRequest": {
+ "type": "object",
+ "required": [
+ "shipping",
+ "client_secret",
+ "payment_method_type"
+ ],
+ "properties": {
+ "shipping": {
+ "$ref": "#/components/schemas/Address"
},
- "phone_country_code": {
+ "client_secret": {
"type": "string",
- "description": "The country code for the customer phone number\nThis field will be deprecated soon, use the customer object instead",
- "deprecated": true,
- "example": "+1",
- "nullable": true,
- "maxLength": 255
+ "description": "Client Secret"
},
- "off_session": {
- "type": "boolean",
- "description": "Set to true to indicate that the customer is not in your checkout flow during this payment, and therefore is unable to authenticate. This parameter is intended for scenarios where you collect card details and charge them later. When making a recurring payment by passing a mandate_id, this parameter is mandatory",
- "example": true,
- "nullable": true
+ "payment_method_type": {
+ "$ref": "#/components/schemas/PaymentMethodType"
},
- "description": {
+ "session_id": {
"type": "string",
- "description": "A description for the payment",
- "example": "It's my first payment request",
+ "description": "Session Id",
"nullable": true
- },
- "return_url": {
+ }
+ }
+ },
+ "PaymentsDynamicTaxCalculationResponse": {
+ "type": "object",
+ "required": [
+ "payment_id",
+ "net_amount",
+ "display_amount"
+ ],
+ "properties": {
+ "payment_id": {
"type": "string",
- "description": "The URL to which you want the user to be redirected after the completion of the payment operation",
- "example": "https://hyperswitch.io",
- "nullable": true
+ "description": "The identifier for the payment"
},
- "setup_future_usage": {
+ "net_amount": {
+ "$ref": "#/components/schemas/MinorUnit"
+ },
+ "order_tax_amount": {
"allOf": [
{
- "$ref": "#/components/schemas/FutureUsage"
+ "$ref": "#/components/schemas/MinorUnit"
}
],
"nullable": true
},
- "payment_method_data": {
+ "shipping_cost": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentMethodDataRequest"
+ "$ref": "#/components/schemas/MinorUnit"
}
],
"nullable": true
},
- "payment_method": {
+ "display_amount": {
+ "$ref": "#/components/schemas/DisplayAmountOnSdk"
+ }
+ }
+ },
+ "PaymentsExternalAuthenticationRequest": {
+ "type": "object",
+ "required": [
+ "client_secret",
+ "device_channel",
+ "threeds_method_comp_ind"
+ ],
+ "properties": {
+ "client_secret": {
+ "type": "string",
+ "description": "Client Secret"
+ },
+ "sdk_information": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentMethod"
+ "$ref": "#/components/schemas/SdkInformation"
}
],
"nullable": true
},
- "payment_token": {
+ "device_channel": {
+ "$ref": "#/components/schemas/DeviceChannel"
+ },
+ "threeds_method_comp_ind": {
+ "$ref": "#/components/schemas/ThreeDsCompletionIndicator"
+ }
+ }
+ },
+ "PaymentsExternalAuthenticationResponse": {
+ "type": "object",
+ "required": [
+ "trans_status",
+ "three_ds_requestor_url"
+ ],
+ "properties": {
+ "trans_status": {
+ "$ref": "#/components/schemas/TransactionStatus"
+ },
+ "acs_url": {
"type": "string",
- "description": "As Hyperswitch tokenises the sensitive details about the payments method, it provides the payment_token as a reference to a stored payment method, ensuring that the sensitive details are not exposed in any manner.",
- "example": "187282ab-40ef-47a9-9206-5099ba31e432",
+ "description": "Access Server URL to be used for challenge submission",
"nullable": true
},
- "card_cvc": {
+ "challenge_request": {
"type": "string",
- "description": "This is used along with the payment_token field while collecting during saved card payments. This field will be deprecated soon, use the payment_method_data.card_token object instead",
- "deprecated": true,
+ "description": "Challenge request which should be sent to acs_url",
"nullable": true
},
- "shipping": {
- "allOf": [
- {
- "$ref": "#/components/schemas/Address"
- }
- ],
+ "acs_reference_number": {
+ "type": "string",
+ "description": "Unique identifier assigned by the EMVCo(Europay, Mastercard and Visa)",
"nullable": true
},
- "statement_descriptor_name": {
+ "acs_trans_id": {
"type": "string",
- "description": "For non-card charges, you can use this value as the complete description that appears on your customers’ statements. Must contain at least one letter, maximum 22 characters.",
- "example": "Hyperswitch Router",
- "nullable": true,
- "maxLength": 255
+ "description": "Unique identifier assigned by the ACS to identify a single transaction",
+ "nullable": true
},
- "statement_descriptor_suffix": {
+ "three_dsserver_trans_id": {
"type": "string",
- "description": "Provides information about a card payment that customers see on their statements. Concatenated with the prefix (shortened descriptor) or statement descriptor that’s set on the account to form the complete statement descriptor. Maximum 22 characters for the concatenated descriptor.",
- "example": "Payment for shoes purchase",
- "nullable": true,
- "maxLength": 255
- },
- "order_details": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/OrderDetailsWithAmount"
- },
- "description": "Use this object to capture the details about the different products for which the payment is being made. The sum of amount across different products here should be equal to the overall payment amount",
- "example": "[{\n \"product_name\": \"Apple iPhone 16\",\n \"quantity\": 1,\n \"amount\" : 69000\n \"product_img_link\" : \"https://dummy-img-link.com\"\n }]",
+ "description": "Unique identifier assigned by the 3DS Server to identify a single transaction",
"nullable": true
},
- "client_secret": {
+ "acs_signed_content": {
"type": "string",
- "description": "It's a token used for client side verification.",
- "example": "pay_U42c409qyHwOkWo3vK60_secret_el9ksDkiB8hi6j9N78yo",
+ "description": "Contains the JWS object created by the ACS for the ARes(Authentication Response) message",
"nullable": true
},
- "mandate_data": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MandateData"
- }
- ],
- "nullable": true
+ "three_ds_requestor_url": {
+ "type": "string",
+ "description": "Three DS Requestor URL"
+ }
+ }
+ },
+ "PaymentsIncrementalAuthorizationRequest": {
+ "type": "object",
+ "required": [
+ "amount"
+ ],
+ "properties": {
+ "amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The total amount including previously authorized amount and additional amount",
+ "example": 6540
},
- "customer_acceptance": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CustomerAcceptance"
- }
- ],
+ "reason": {
+ "type": "string",
+ "description": "Reason for incremental authorization",
"nullable": true
+ }
+ }
+ },
+ "PaymentsIntentResponse": {
+ "type": "object",
+ "required": [
+ "id",
+ "status",
+ "amount_details",
+ "client_secret",
+ "profile_id",
+ "capture_method",
+ "authentication_type",
+ "customer_id",
+ "customer_present",
+ "setup_future_usage",
+ "apply_mit_exemption",
+ "payment_link_enabled",
+ "request_incremental_authorization",
+ "expires_on",
+ "request_external_three_ds_authentication"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "Global Payment Id for the payment"
},
- "mandate_id": {
+ "status": {
+ "$ref": "#/components/schemas/IntentStatus"
+ },
+ "amount_details": {
+ "$ref": "#/components/schemas/AmountDetailsResponse"
+ },
+ "client_secret": {
+ "type": "string",
+ "description": "It's a token used for client side verification.",
+ "example": "pay_U42c409qyHwOkWo3vK60_secret_el9ksDkiB8hi6j9N78yo"
+ },
+ "profile_id": {
+ "type": "string",
+ "description": "The identifier for the profile. This is inferred from the `x-profile-id` header"
+ },
+ "merchant_reference_id": {
"type": "string",
- "description": "A unique identifier to link the payment to a mandate. To do Recurring payments after a mandate has been created, pass the mandate_id instead of payment_method_data",
- "example": "mandate_iwer89rnjef349dni3",
+ "description": "Unique identifier for the payment. This ensures idempotency for multiple payments\nthat have been done by a single merchant.",
+ "example": "pay_mbabizu24mvu3mela5njyhpit4",
"nullable": true,
- "maxLength": 255
+ "maxLength": 30,
+ "minLength": 30
},
- "browser_info": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BrowserInformation"
- }
- ],
+ "routing_algorithm_id": {
+ "type": "string",
+ "description": "The routing algorithm id to be used for the payment",
"nullable": true
},
- "payment_experience": {
+ "capture_method": {
+ "$ref": "#/components/schemas/CaptureMethod"
+ },
+ "authentication_type": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentExperience"
+ "$ref": "#/components/schemas/AuthenticationType"
}
],
- "nullable": true
+ "default": "no_three_ds"
},
- "payment_method_type": {
+ "billing": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentMethodType"
+ "$ref": "#/components/schemas/Address"
}
],
"nullable": true
},
- "business_country": {
+ "shipping": {
"allOf": [
{
- "$ref": "#/components/schemas/CountryAlpha2"
+ "$ref": "#/components/schemas/Address"
}
],
"nullable": true
},
- "business_label": {
+ "customer_id": {
"type": "string",
- "description": "Business label of the merchant for this payment.\nTo be deprecated soon. Pass the profile_id instead",
- "example": "food",
+ "description": "The identifier for the customer",
+ "example": "12345_cus_01926c58bc6e77c09e809964e72af8c8",
+ "maxLength": 64,
+ "minLength": 32
+ },
+ "customer_present": {
+ "$ref": "#/components/schemas/PresenceOfCustomerDuringPayment"
+ },
+ "description": {
+ "type": "string",
+ "description": "A description for the payment",
+ "example": "It's my first payment request",
"nullable": true
},
- "merchant_connector_details": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MerchantConnectorDetailsWrap"
- }
- ],
+ "return_url": {
+ "type": "string",
+ "description": "The URL to which you want the user to be redirected after the completion of the payment operation",
+ "example": "https://hyperswitch.io",
+ "nullable": true
+ },
+ "setup_future_usage": {
+ "$ref": "#/components/schemas/FutureUsage"
+ },
+ "apply_mit_exemption": {
+ "$ref": "#/components/schemas/MitExemptionRequest"
+ },
+ "statement_descriptor": {
+ "type": "string",
+ "description": "For non-card charges, you can use this value as the complete description that appears on your customers’ statements. Must contain at least one letter, maximum 22 characters.",
+ "example": "Hyperswitch Router",
+ "nullable": true,
+ "maxLength": 22
+ },
+ "order_details": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/OrderDetailsWithAmount"
+ },
+ "description": "Use this object to capture the details about the different products for which the payment is being made. The sum of amount across different products here should be equal to the overall payment amount",
+ "example": "[{\n \"product_name\": \"Apple iPhone 16\",\n \"quantity\": 1,\n \"amount\" : 69000\n \"product_img_link\" : \"https://dummy-img-link.com\"\n }]",
"nullable": true
},
"allowed_payment_method_types": {
@@ -14858,22 +15764,9 @@
"description": "Use this parameter to restrict the Payment Method Types to show for a given PaymentIntent",
"nullable": true
},
- "business_sub_label": {
- "type": "string",
- "description": "Business sub label for the payment",
- "nullable": true
- },
- "retry_action": {
- "allOf": [
- {
- "$ref": "#/components/schemas/RetryAction"
- }
- ],
- "nullable": true
- },
"metadata": {
"type": "object",
- "description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Metadata is useful for storing additional, structured information on an object.",
+ "description": "Metadata is useful for storing additional, unstructured information on an object.",
"nullable": true
},
"connector_metadata": {
@@ -14892,59 +15785,24 @@
],
"nullable": true
},
- "payment_link": {
- "type": "boolean",
- "description": "Whether to generate the payment link for this payment or not (if applicable)",
- "default": false,
- "example": true,
- "nullable": true
+ "payment_link_enabled": {
+ "$ref": "#/components/schemas/EnablePaymentLinkRequest"
},
"payment_link_config": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentCreatePaymentLinkConfig"
- }
- ],
- "nullable": true
- },
- "payment_link_config_id": {
- "type": "string",
- "description": "Custom payment link config id set at business profile, send only if business_specific_configs is configured",
- "nullable": true
- },
- "profile_id": {
- "type": "string",
- "description": "The business profile to be used for this payment, if not passed the default business profile associated with the merchant account will be used. It is mandatory in case multiple business profiles have been set up.",
- "nullable": true
- },
- "surcharge_details": {
- "allOf": [
- {
- "$ref": "#/components/schemas/RequestSurchargeDetails"
- }
- ],
- "nullable": true
- },
- "payment_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentType"
+ "$ref": "#/components/schemas/PaymentLinkConfigRequest"
}
],
"nullable": true
},
"request_incremental_authorization": {
- "type": "boolean",
- "description": "Request an incremental authorization, i.e., increase the authorized amount on a confirmed payment before you capture it.",
- "nullable": true
+ "$ref": "#/components/schemas/RequestIncrementalAuthorization"
},
- "session_expiry": {
- "type": "integer",
- "format": "int32",
- "description": "Will be used to expire client secret after certain amount of time to be supplied in seconds\n(900) for 15 mins",
- "example": 900,
- "nullable": true,
- "minimum": 0
+ "expires_on": {
+ "type": "string",
+ "format": "date-time",
+ "description": "Will be used to expire client secret after certain amount of time to be supplied in seconds"
},
"frm_metadata": {
"type": "object",
@@ -14952,38 +15810,7 @@
"nullable": true
},
"request_external_three_ds_authentication": {
- "type": "boolean",
- "description": "Whether to perform external authentication (if applicable)",
- "example": true,
- "nullable": true
- },
- "recurring_details": {
- "allOf": [
- {
- "$ref": "#/components/schemas/RecurringDetails"
- }
- ],
- "nullable": true
- },
- "charges": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentChargeRequest"
- }
- ],
- "nullable": true
- },
- "merchant_order_reference_id": {
- "type": "string",
- "description": "Merchant's identifier for the payment/invoice. This will be sent to the connector\nif the connector provides support to accept multiple reference ids.\nIn case the connector supports only one reference id, Hyperswitch's Payment ID will be sent as reference.",
- "example": "Custom_Order_id_123",
- "nullable": true,
- "maxLength": 255
- },
- "skip_external_tax_calculation": {
- "type": "boolean",
- "description": "Whether to calculate tax for this payment intent",
- "nullable": true
+ "$ref": "#/components/schemas/External3dsAuthenticationRequest"
}
},
"additionalProperties": false
@@ -15035,6 +15862,13 @@
"description": "The payment net amount. net_amount = amount + surcharge_details.surcharge_amount + surcharge_details.tax_amount + shipping_cost + order_tax_amount,\nIf no surcharge_details, shipping_cost, order_tax_amount, net_amount = amount",
"example": 6540
},
+ "shipping_cost": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The shipping cost for the payment.",
+ "example": 6540,
+ "nullable": true
+ },
"amount_capturable": {
"type": "integer",
"format": "int64",
@@ -15510,10 +16344,10 @@
"example": "2022-09-10T10:11:12Z",
"nullable": true
},
- "charges": {
+ "split_payments": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentChargeResponse"
+ "$ref": "#/components/schemas/SplitPaymentsResponse"
}
],
"nullable": true
@@ -15547,97 +16381,149 @@
},
"PaymentsRetrieveRequest": {
"type": "object",
+ "description": "Request for Payment Status",
+ "properties": {
+ "force_sync": {
+ "type": "boolean",
+ "description": "A boolean used to indicate if the payment status should be fetched from the connector\nIf this is set to true, the status will be fetched from the connector"
+ },
+ "param": {
+ "type": "string",
+ "description": "These are the query params that are sent in case of redirect response.\nThese can be ingested by the connector to take necessary actions.",
+ "nullable": true
+ }
+ }
+ },
+ "PaymentsRetrieveResponse": {
+ "type": "object",
+ "description": "Response for Payment Intent Confirm",
"required": [
- "resource_id",
- "force_sync"
+ "id",
+ "status",
+ "amount",
+ "customer_id",
+ "client_secret",
+ "created"
],
"properties": {
- "resource_id": {
+ "id": {
"type": "string",
- "description": "The type of ID (ex: payment intent id, payment attempt id or connector txn id)"
+ "description": "Unique identifier for the payment. This ensures idempotency for multiple payments\nthat have been done by a single merchant.",
+ "example": "12345_pay_01926c58bc6e77c09e809964e72af8c8",
+ "maxLength": 64,
+ "minLength": 32
},
- "merchant_id": {
+ "status": {
+ "$ref": "#/components/schemas/IntentStatus"
+ },
+ "amount": {
+ "$ref": "#/components/schemas/PaymentAmountDetailsResponse"
+ },
+ "customer_id": {
"type": "string",
- "description": "The identifier for the Merchant Account.",
+ "description": "The identifier for the customer",
+ "example": "12345_cus_01926c58bc6e77c09e809964e72af8c8",
+ "maxLength": 64,
+ "minLength": 32
+ },
+ "connector": {
+ "type": "string",
+ "description": "The connector used for the payment",
+ "example": "stripe",
"nullable": true
},
- "force_sync": {
- "type": "boolean",
- "description": "Decider to enable or disable the connector call for retrieve request"
+ "client_secret": {
+ "type": "string",
+ "description": "It's a token used for client side verification."
},
- "param": {
+ "created": {
"type": "string",
- "description": "The parameters passed to a retrieve request",
+ "format": "date-time",
+ "description": "Time when the payment was created",
+ "example": "2022-09-10T10:11:12Z"
+ },
+ "payment_method_data": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentMethodDataResponseWithBilling"
+ }
+ ],
"nullable": true
},
- "connector": {
+ "payment_method_type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentMethod"
+ }
+ ],
+ "nullable": true
+ },
+ "payment_method_subtype": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentMethodType"
+ }
+ ],
+ "nullable": true
+ },
+ "connector_transaction_id": {
"type": "string",
- "description": "The name of the connector",
+ "description": "A unique identifier for a payment provided by the connector",
+ "example": "993672945374576J",
"nullable": true
},
- "merchant_connector_details": {
+ "connector_reference_id": {
+ "type": "string",
+ "description": "reference(Identifier) to the payment at connector side",
+ "example": "993672945374576J",
+ "nullable": true
+ },
+ "merchant_connector_id": {
+ "type": "string",
+ "description": "Identifier of the connector ( merchant connector account ) which was chosen to make the payment",
+ "nullable": true
+ },
+ "browser_info": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BrowserInformation"
+ }
+ ],
+ "nullable": true
+ },
+ "error": {
"allOf": [
{
- "$ref": "#/components/schemas/MerchantConnectorDetailsWrap"
+ "$ref": "#/components/schemas/ErrorDetails"
}
],
"nullable": true
},
- "client_secret": {
- "type": "string",
- "description": "This is a token which expires after 15 minutes, used from the client to authenticate and create sessions from the SDK",
- "nullable": true
- },
- "expand_captures": {
- "type": "boolean",
- "description": "If enabled provides list of captures linked to latest attempt",
- "nullable": true
- },
- "expand_attempts": {
- "type": "boolean",
- "description": "If enabled provides list of attempts linked to payment intent",
+ "shipping": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Address"
+ }
+ ],
"nullable": true
- }
- }
- },
- "PaymentsSessionRequest": {
- "type": "object",
- "required": [
- "payment_id",
- "client_secret",
- "wallets"
- ],
- "properties": {
- "payment_id": {
- "type": "string",
- "description": "The identifier for the payment"
- },
- "client_secret": {
- "type": "string",
- "description": "This is a token which expires after 15 minutes, used from the client to authenticate and create sessions from the SDK"
- },
- "wallets": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/PaymentMethodType"
- },
- "description": "The list of the supported wallets"
},
- "merchant_connector_details": {
+ "billing": {
"allOf": [
{
- "$ref": "#/components/schemas/MerchantConnectorDetailsWrap"
+ "$ref": "#/components/schemas/Address"
}
],
"nullable": true
}
}
},
+ "PaymentsSessionRequest": {
+ "type": "object"
+ },
"PaymentsSessionResponse": {
"type": "object",
"required": [
"payment_id",
- "client_secret",
"session_token"
],
"properties": {
@@ -15645,10 +16531,6 @@
"type": "string",
"description": "The identifier for the payment"
},
- "client_secret": {
- "type": "string",
- "description": "This is a token which expires after 15 minutes, used from the client to authenticate and create sessions from the SDK"
- },
"session_token": {
"type": "array",
"items": {
@@ -15658,65 +16540,20 @@
}
}
},
- "PaymentsUpdateRequest": {
+ "PaymentsUpdateIntentRequest": {
"type": "object",
"properties": {
- "amount": {
- "type": "integer",
- "format": "int64",
- "description": "The payment amount. Amount for the payment in the lowest denomination of the currency, (i.e) in cents for USD denomination, in yen for JPY denomination etc. E.g., Pass 100 to charge $1.00 and 1 for 1¥ since ¥ is a zero-decimal currency. Read more about [the Decimal and Non-Decimal Currencies](https://github.com/juspay/hyperswitch/wiki/Decimal-and-Non%E2%80%90Decimal-Currencies)",
- "example": 6540,
- "nullable": true,
- "minimum": 0
- },
- "currency": {
+ "amount_details": {
"allOf": [
{
- "$ref": "#/components/schemas/Currency"
+ "$ref": "#/components/schemas/AmountDetailsUpdate"
}
],
"nullable": true
},
- "amount_to_capture": {
- "type": "integer",
- "format": "int64",
- "description": "The Amount to be captured / debited from the users payment method. It shall be in lowest denomination of the currency. (i.e) in cents for USD denomination, in paisa for INR denomination etc., If not provided, the default amount_to_capture will be the payment amount. Also, it must be less than or equal to the original payment account.",
- "example": 6540,
- "nullable": true
- },
- "shipping_cost": {
- "type": "integer",
- "format": "int64",
- "description": "The shipping cost for the payment. This is required for tax calculation in some regions.",
- "example": 6540,
- "nullable": true
- },
- "payment_id": {
+ "routing_algorithm_id": {
"type": "string",
- "description": "Unique identifier for the payment. This ensures idempotency for multiple payments\nthat have been done by a single merchant. The value for this field can be specified in the request, it will be auto generated otherwise and returned in the API response.",
- "example": "pay_mbabizu24mvu3mela5njyhpit4",
- "nullable": true,
- "maxLength": 30,
- "minLength": 30
- },
- "routing": {
- "allOf": [
- {
- "$ref": "#/components/schemas/StraightThroughAlgorithm"
- }
- ],
- "nullable": true
- },
- "connector": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/Connector"
- },
- "description": "This allows to manually select a connector with which the payment can go through.",
- "example": [
- "stripe",
- "adyen"
- ],
+ "description": "The routing algorithm id to be used for the payment",
"nullable": true
},
"capture_method": {
@@ -15733,7 +16570,7 @@
"$ref": "#/components/schemas/AuthenticationType"
}
],
- "default": "three_ds",
+ "default": "no_three_ds",
"nullable": true
},
"billing": {
@@ -15744,33 +16581,20 @@
],
"nullable": true
},
- "confirm": {
- "type": "boolean",
- "description": "Whether to confirm the payment (if applicable). It can be used to completely process a payment by attaching a payment method, setting `confirm=true` and `capture_method = automatic` in the *Payments/Create API* request itself.",
- "default": false,
- "example": true,
- "nullable": true
- },
- "customer": {
+ "shipping": {
"allOf": [
{
- "$ref": "#/components/schemas/CustomerDetails"
+ "$ref": "#/components/schemas/Address"
}
],
"nullable": true
},
- "customer_id": {
- "type": "string",
- "description": "The identifier for the customer",
- "example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
- "nullable": true,
- "maxLength": 64,
- "minLength": 1
- },
- "off_session": {
- "type": "boolean",
- "description": "Set to true to indicate that the customer is not in your checkout flow during this payment, and therefore is unable to authenticate. This parameter is intended for scenarios where you collect card details and charge them later. When making a recurring payment by passing a mandate_id, this parameter is mandatory",
- "example": true,
+ "customer_present": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PresenceOfCustomerDuringPayment"
+ }
+ ],
"nullable": true
},
"description": {
@@ -15793,49 +16617,20 @@
],
"nullable": true
},
- "payment_method_data": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodDataRequest"
- }
- ],
- "nullable": true
- },
- "payment_method": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethod"
- }
- ],
- "nullable": true
- },
- "payment_token": {
- "type": "string",
- "description": "As Hyperswitch tokenises the sensitive details about the payments method, it provides the payment_token as a reference to a stored payment method, ensuring that the sensitive details are not exposed in any manner.",
- "example": "187282ab-40ef-47a9-9206-5099ba31e432",
- "nullable": true
- },
- "shipping": {
+ "apply_mit_exemption": {
"allOf": [
{
- "$ref": "#/components/schemas/Address"
+ "$ref": "#/components/schemas/MitExemptionRequest"
}
],
"nullable": true
},
- "statement_descriptor_name": {
+ "statement_descriptor": {
"type": "string",
"description": "For non-card charges, you can use this value as the complete description that appears on your customers’ statements. Must contain at least one letter, maximum 22 characters.",
"example": "Hyperswitch Router",
"nullable": true,
- "maxLength": 255
- },
- "statement_descriptor_suffix": {
- "type": "string",
- "description": "Provides information about a card payment that customers see on their statements. Concatenated with the prefix (shortened descriptor) or statement descriptor that’s set on the account to form the complete statement descriptor. Maximum 22 characters for the concatenated descriptor.",
- "example": "Payment for shoes purchase",
- "nullable": true,
- "maxLength": 255
+ "maxLength": 22
},
"order_details": {
"type": "array",
@@ -15846,54 +16641,6 @@
"example": "[{\n \"product_name\": \"Apple iPhone 16\",\n \"quantity\": 1,\n \"amount\" : 69000\n \"product_img_link\" : \"https://dummy-img-link.com\"\n }]",
"nullable": true
},
- "mandate_data": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MandateData"
- }
- ],
- "nullable": true
- },
- "customer_acceptance": {
- "allOf": [
- {
- "$ref": "#/components/schemas/CustomerAcceptance"
- }
- ],
- "nullable": true
- },
- "browser_info": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BrowserInformation"
- }
- ],
- "nullable": true
- },
- "payment_experience": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentExperience"
- }
- ],
- "nullable": true
- },
- "payment_method_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/PaymentMethodType"
- }
- ],
- "nullable": true
- },
- "merchant_connector_details": {
- "allOf": [
- {
- "$ref": "#/components/schemas/MerchantConnectorDetailsWrap"
- }
- ],
- "nullable": true
- },
"allowed_payment_method_types": {
"type": "array",
"items": {
@@ -15902,17 +16649,9 @@
"description": "Use this parameter to restrict the Payment Method Types to show for a given PaymentIntent",
"nullable": true
},
- "retry_action": {
- "allOf": [
- {
- "$ref": "#/components/schemas/RetryAction"
- }
- ],
- "nullable": true
- },
"metadata": {
"type": "object",
- "description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Metadata is useful for storing additional, structured information on an object.",
+ "description": "Metadata is useful for storing additional, unstructured information on an object. This metadata will override the metadata that was passed in payments",
"nullable": true
},
"connector_metadata": {
@@ -15923,95 +16662,53 @@
],
"nullable": true
},
- "payment_link": {
- "type": "boolean",
- "description": "Whether to generate the payment link for this payment or not (if applicable)",
- "default": false,
- "example": true,
- "nullable": true
- },
- "payment_link_config": {
+ "feature_metadata": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentCreatePaymentLinkConfig"
+ "$ref": "#/components/schemas/FeatureMetadata"
}
],
"nullable": true
},
- "payment_link_config_id": {
- "type": "string",
- "description": "Custom payment link config id set at business profile, send only if business_specific_configs is configured",
- "nullable": true
- },
- "surcharge_details": {
+ "payment_link_config": {
"allOf": [
{
- "$ref": "#/components/schemas/RequestSurchargeDetails"
+ "$ref": "#/components/schemas/PaymentLinkConfigRequest"
}
],
"nullable": true
},
- "payment_type": {
+ "request_incremental_authorization": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentType"
+ "$ref": "#/components/schemas/RequestIncrementalAuthorization"
}
],
"nullable": true
},
- "request_incremental_authorization": {
- "type": "boolean",
- "description": "Request an incremental authorization, i.e., increase the authorized amount on a confirmed payment before you capture it.",
- "nullable": true
- },
"session_expiry": {
"type": "integer",
"format": "int32",
- "description": "Will be used to expire client secret after certain amount of time to be supplied in seconds\n(900) for 15 mins",
+ "description": "Will be used to expire client secret after certain amount of time to be supplied in seconds, if not sent it will be taken from profile config\n(900) for 15 mins",
"example": 900,
"nullable": true,
"minimum": 0
},
"frm_metadata": {
- "type": "object",
- "description": "Additional data related to some frm(Fraud Risk Management) connectors",
- "nullable": true
- },
- "request_external_three_ds_authentication": {
- "type": "boolean",
- "description": "Whether to perform external authentication (if applicable)",
- "example": true,
- "nullable": true
- },
- "recurring_details": {
- "allOf": [
- {
- "$ref": "#/components/schemas/RecurringDetails"
- }
- ],
+ "type": "object",
+ "description": "Additional data related to some frm(Fraud Risk Management) connectors",
"nullable": true
},
- "charges": {
+ "request_external_three_ds_authentication": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentChargeRequest"
+ "$ref": "#/components/schemas/External3dsAuthenticationRequest"
}
],
"nullable": true
- },
- "merchant_order_reference_id": {
- "type": "string",
- "description": "Merchant's identifier for the payment/invoice. This will be sent to the connector\nif the connector provides support to accept multiple reference ids.\nIn case the connector supports only one reference id, Hyperswitch's Payment ID will be sent as reference.",
- "example": "Custom_Order_id_123",
- "nullable": true,
- "maxLength": 255
- },
- "skip_external_tax_calculation": {
- "type": "boolean",
- "description": "Whether to calculate tax for this payment intent",
- "nullable": true
}
- }
+ },
+ "additionalProperties": false
},
"PayoutActionRequest": {
"type": "object"
@@ -17127,6 +17824,56 @@
}
}
},
+ "PazeSessionTokenResponse": {
+ "type": "object",
+ "required": [
+ "client_id",
+ "client_name",
+ "client_profile_id",
+ "transaction_currency_code",
+ "transaction_amount"
+ ],
+ "properties": {
+ "client_id": {
+ "type": "string",
+ "description": "Paze Client ID"
+ },
+ "client_name": {
+ "type": "string",
+ "description": "Client Name to be displayed on the Paze screen"
+ },
+ "client_profile_id": {
+ "type": "string",
+ "description": "Paze Client Profile ID"
+ },
+ "transaction_currency_code": {
+ "$ref": "#/components/schemas/Currency"
+ },
+ "transaction_amount": {
+ "type": "string",
+ "description": "The transaction amount",
+ "example": "38.02"
+ },
+ "email_address": {
+ "type": "string",
+ "description": "Email Address",
+ "example": "johntest@test.com",
+ "nullable": true,
+ "maxLength": 255
+ }
+ }
+ },
+ "PazeWalletData": {
+ "type": "object",
+ "required": [
+ "complete_response"
+ ],
+ "properties": {
+ "complete_response": {
+ "type": "string"
+ }
+ }
+ },
"PhoneDetails": {
"type": "object",
"properties": {
@@ -17254,10 +18001,10 @@
},
"PresenceOfCustomerDuringPayment": {
"type": "string",
- "description": "Set to true to indicate that the customer is in your checkout flow during this payment, and therefore is able to authenticate. This parameter should be false when merchant's doing merchant initiated payments and customer is not present while doing the payment.",
+ "description": "Set to `present` to indicate that the customer is in your checkout flow during this payment, and therefore is able to authenticate. This parameter should be `absent` when merchant's doing merchant initiated payments and customer is not present while doing the payment.",
"enum": [
- "Present",
- "Absent"
+ "present",
+ "absent"
]
},
"PrimaryBusinessDetails": {
@@ -17464,7 +18211,18 @@
},
"is_network_tokenization_enabled": {
"type": "boolean",
- "description": "Indicates if is_network_tokenization_enabled is enabled or not.\nIf set to `true` is_network_tokenization_enabled will be checked."
+ "description": "Indicates if network tokenization is enabled or not."
+ },
+ "is_click_to_pay_enabled": {
+ "type": "boolean",
+ "description": "Indicates if click to pay is enabled or not.",
+ "default": false,
+ "example": false
+ },
+ "authentication_product_ids": {
+ "type": "object",
+ "description": "Product authentication ids",
+ "nullable": true
}
},
"additionalProperties": false
@@ -17496,7 +18254,9 @@
"enable_payment_response_hash",
"redirect_to_merchant_with_http_post",
"is_tax_connector_enabled",
- "is_network_tokenization_enabled"
+ "is_network_tokenization_enabled",
+ "should_collect_cvv_during_payment",
+ "is_click_to_pay_enabled"
],
"properties": {
"merchant_id": {
@@ -17669,9 +18429,24 @@
},
"is_network_tokenization_enabled": {
"type": "boolean",
- "description": "Indicates if is_network_tokenization_enabled is enabled or not.\nIf set to `true` is_network_tokenization_enabled will be checked.",
+ "description": "Indicates if network tokenization is enabled or not.",
+ "default": false,
+ "example": false
+ },
+ "should_collect_cvv_during_payment": {
+ "type": "boolean",
+ "description": "Indicates if CVV should be collected during payment or not."
+ },
+ "is_click_to_pay_enabled": {
+ "type": "boolean",
+ "description": "Indicates if click to pay is enabled or not.",
"default": false,
"example": false
+ },
+ "authentication_product_ids": {
+ "type": "object",
+ "description": "Product authentication ids",
+ "nullable": true
}
}
},
@@ -17848,6 +18623,24 @@
"$ref": "#/components/schemas/ProcessorPaymentToken"
}
}
+ },
+ {
+ "type": "object",
+ "required": [
+ "type",
+ "data"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "network_transaction_id_and_card_details"
+ ]
+ },
+ "data": {
+ "$ref": "#/components/schemas/NetworkTransactionIdAndCardDetails"
+ }
+ }
}
],
"description": "Details required for recurring payment",
@@ -17855,6 +18648,16 @@
"propertyName": "type"
}
},
+ "RecurringPaymentIntervalUnit": {
+ "type": "string",
+ "enum": [
+ "year",
+ "month",
+ "day",
+ "hour",
+ "minute"
+ ]
+ },
"RedirectResponse": {
"type": "object",
"properties": {
@@ -17868,19 +18671,18 @@
}
}
},
- "RefundAggregateResponse": {
+ "RefundErrorDetails": {
"type": "object",
"required": [
- "status_with_count"
+ "code",
+ "message"
],
"properties": {
- "status_with_count": {
- "type": "object",
- "description": "The list of refund status with their count",
- "additionalProperties": {
- "type": "integer",
- "format": "int64"
- }
+ "code": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
}
}
},
@@ -18060,10 +18862,10 @@
],
"nullable": true
},
- "charges": {
+ "split_refunds": {
"allOf": [
{
- "$ref": "#/components/schemas/ChargeRefunds"
+ "$ref": "#/components/schemas/SplitRefund"
}
],
"nullable": true
@@ -18074,89 +18876,89 @@
"RefundResponse": {
"type": "object",
"required": [
- "refund_id",
+ "id",
"payment_id",
"amount",
"currency",
"status",
- "connector"
+ "created_at",
+ "updated_at",
+ "connector",
+ "profile_id",
+ "merchant_connector_id"
],
"properties": {
- "refund_id": {
+ "id": {
"type": "string",
- "description": "Unique Identifier for the refund"
+ "description": "Global Refund Id for the refund"
},
"payment_id": {
"type": "string",
"description": "The payment id against which refund is initiated"
},
+ "merchant_reference_id": {
+ "type": "string",
+ "description": "Unique Identifier for the Refund. This is to ensure idempotency for multiple partial refunds initiated against the same payment.",
+ "example": "ref_mbabizu24mvu3mela5njyhpit4",
+ "nullable": true,
+ "maxLength": 30,
+ "minLength": 30
+ },
"amount": {
"type": "integer",
"format": "int64",
- "description": "The refund amount, which should be less than or equal to the total payment amount. Amount for the payment in lowest denomination of the currency. (i.e) in cents for USD denomination, in paisa for INR denomination etc",
+ "description": "The refund amount",
"example": 6540,
"minimum": 100
},
"currency": {
- "type": "string",
- "description": "The three-letter ISO currency code"
+ "$ref": "#/components/schemas/Currency"
},
"status": {
"$ref": "#/components/schemas/RefundStatus"
},
"reason": {
"type": "string",
- "description": "An arbitrary string attached to the object. Often useful for displaying to users and your customer support executive",
+ "description": "An arbitrary string attached to the object",
"nullable": true
},
"metadata": {
"type": "object",
- "description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Metadata is useful for storing additional, structured information on an object",
+ "description": "Metadata is useful for storing additional, unstructured information on an object",
"nullable": true
},
- "error_message": {
- "type": "string",
- "description": "The error message",
- "nullable": true
- },
- "error_code": {
- "type": "string",
- "description": "The code for the error",
+ "error_details": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RefundErrorDetails"
+ }
+ ],
"nullable": true
},
"created_at": {
"type": "string",
"format": "date-time",
- "description": "The timestamp at which refund is created",
- "nullable": true
+ "description": "The timestamp at which refund is created"
},
"updated_at": {
"type": "string",
"format": "date-time",
- "description": "The timestamp at which refund is updated",
- "nullable": true
+ "description": "The timestamp at which refund is updated"
},
"connector": {
- "type": "string",
- "description": "The connector used for the refund and the corresponding payment",
- "example": "stripe"
+ "$ref": "#/components/schemas/Connector"
},
"profile_id": {
"type": "string",
- "description": "The id of business profile for this refund",
- "nullable": true
+ "description": "The id of business profile for this refund"
},
"merchant_connector_id": {
"type": "string",
- "description": "The merchant_connector_id of the processor through which this payment went through",
- "nullable": true
+ "description": "The merchant_connector_id of the processor through which this payment went through"
},
- "charges": {
- "allOf": [
- {
- "$ref": "#/components/schemas/ChargeRefunds"
- }
- ],
+ "connector_refund_reference_id": {
+ "type": "string",
+ "description": "The reference id of the connector for the refund",
"nullable": true
}
}
@@ -18197,6 +18999,59 @@
},
"additionalProperties": false
},
+ "RefundsCreateRequest": {
+ "type": "object",
+ "required": [
+ "payment_id"
+ ],
+ "properties": {
+ "payment_id": {
+ "type": "string",
+ "description": "The payment id against which refund is initiated",
+ "example": "pay_mbabizu24mvu3mela5njyhpit4",
+ "maxLength": 30,
+ "minLength": 30
+ },
+ "merchant_reference_id": {
+ "type": "string",
+ "description": "Unique Identifier for the Refund. This is to ensure idempotency for multiple partial refunds initiated against the same payment.",
+ "example": "ref_mbabizu24mvu3mela5njyhpit4",
+ "nullable": true,
+ "maxLength": 30,
+ "minLength": 30
+ },
+ "amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Total amount for which the refund is to be initiated. Amount for the payment in lowest denomination of the currency. (i.e) in cents for USD denomination, in paisa for INR denomination etc., If not provided, this will default to the amount_captured of the payment",
+ "example": 6540,
+ "nullable": true,
+ "minimum": 100
+ },
+ "reason": {
+ "type": "string",
+ "description": "Reason for the refund. Often useful for displaying to users and your customer support executive.",
+ "example": "Customer returned the product",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "refund_type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RefundType"
+ }
+ ],
+ "default": "Instant",
+ "nullable": true
+ },
+ "metadata": {
+ "type": "object",
+ "description": "Metadata is useful for storing additional, unstructured information on an object.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
"RequestIncrementalAuthorization": {
"type": "string",
"enum": [
@@ -18325,6 +19180,68 @@
}
}
},
+ "ResponsePaymentMethodTypes": {
+ "allOf": [
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentMethodSubtypeSpecificData"
+ }
+ ],
+ "nullable": true
+ },
+ {
+ "type": "object",
+ "required": [
+ "payment_method_type",
+ "payment_method_subtype"
+ ],
+ "properties": {
+ "payment_method_type": {
+ "$ref": "#/components/schemas/PaymentMethodType"
+ },
+ "payment_method_subtype": {
+ "$ref": "#/components/schemas/PaymentMethodType"
+ },
+ "required_fields": {
+ "type": "object",
+ "description": "Required fields for the payment_method_type.\nThis is the union of all the required fields for the payment method type enabled in all the connectors.",
+ "additionalProperties": {
+ "$ref": "#/components/schemas/RequiredFieldInfo"
+ },
+ "nullable": true
+ },
+ "surcharge_details": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SurchargeDetailsResponse"
+ }
+ ],
+ "nullable": true
+ }
+ }
+ }
+ ]
+ },
+ "ResponsePaymentMethodsEnabled": {
+ "type": "object",
+ "required": [
+ "payment_method",
+ "payment_method_types"
+ ],
+ "properties": {
+ "payment_method": {
+ "$ref": "#/components/schemas/PaymentMethod"
+ },
+ "payment_method_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ResponsePaymentMethodTypes"
+ },
+ "description": "The list of payment method types enabled for a connector account"
+ }
+ }
+ },
"RetrieveApiKeyResponse": {
"type": "object",
"description": "The response body for retrieving an API Key.",
@@ -18553,8 +19470,10 @@
"cybersource",
"datatrans",
"deutschebank",
+ "digitalvirgo",
"dlocal",
"ebanx",
+ "elavon",
"fiserv",
"fiservemea",
"fiuu",
@@ -18565,11 +19484,13 @@
"helcim",
"iatapay",
"itaubank",
+ "jpmorgan",
"klarna",
"mifinity",
"mollie",
"multisafepay",
"nexinets",
+ "nexixpay",
"nmi",
"noon",
"novalnet",
@@ -18598,6 +19519,7 @@
"wise",
"worldline",
"worldpay",
+ "xendit",
"zen",
"plaid",
"zsl"
@@ -18861,28 +19783,82 @@
"option": {
"$ref": "#/components/schemas/SamsungPayAmountFormat"
},
- "currency_code": {
- "$ref": "#/components/schemas/Currency"
+ "currency_code": {
+ "$ref": "#/components/schemas/Currency"
+ },
+ "total": {
+ "type": "string",
+ "description": "The total amount of the transaction",
+ "example": "38.02"
+ }
+ }
+ },
+ "SamsungPayAmountFormat": {
+ "type": "string",
+ "enum": [
+ "FORMAT_TOTAL_PRICE_ONLY",
+ "FORMAT_TOTAL_ESTIMATED_AMOUNT"
+ ]
+ },
+ "SamsungPayAppWalletData": {
+ "type": "object",
+ "required": [
+ "3_d_s",
+ "payment_card_brand",
+ "payment_currency_type",
+ "payment_last4_fpan"
+ ],
+ "properties": {
+ "3_d_s": {
+ "$ref": "#/components/schemas/SamsungPayTokenData"
+ },
+ "payment_card_brand": {
+ "$ref": "#/components/schemas/SamsungPayCardBrand"
+ },
+ "payment_currency_type": {
+ "type": "string",
+ "description": "Currency type of the payment"
+ },
+ "payment_last4_dpan": {
+ "type": "string",
+ "description": "Last 4 digits of the device specific card number",
+ "nullable": true
},
- "total": {
+ "payment_last4_fpan": {
"type": "string",
- "description": "The total amount of the transaction",
- "example": "38.02"
+ "description": "Last 4 digits of the card number"
+ },
+ "merchant_ref": {
+ "type": "string",
+ "description": "Merchant reference id that was passed in the session call request",
+ "nullable": true
+ },
+ "method": {
+ "type": "string",
+ "description": "Specifies authentication method used",
+ "nullable": true
+ },
+ "recurring_payment": {
+ "type": "boolean",
+ "description": "Value if credential is enabled for recurring payment",
+ "nullable": true
}
}
},
- "SamsungPayAmountFormat": {
+ "SamsungPayCardBrand": {
"type": "string",
"enum": [
- "FORMAT_TOTAL_PRICE_ONLY",
- "FORMAT_TOTAL_ESTIMATED_AMOUNT"
+ "visa",
+ "mastercard",
+ "amex",
+ "discover",
+ "unknown"
]
},
"SamsungPayMerchantPaymentInformation": {
"type": "object",
"required": [
"name",
- "url",
"country_code"
],
"properties": {
@@ -18892,7 +19868,8 @@
},
"url": {
"type": "string",
- "description": "Merchant domain that process payments"
+ "description": "Merchant domain that process payments, required for web payments",
+ "nullable": true
},
"country_code": {
"$ref": "#/components/schemas/CountryAlpha2"
@@ -18970,6 +19947,27 @@
}
},
"SamsungPayWalletCredentials": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/SamsungPayWebWalletData"
+ },
+ {
+ "$ref": "#/components/schemas/SamsungPayAppWalletData"
+ }
+ ]
+ },
+ "SamsungPayWalletData": {
+ "type": "object",
+ "required": [
+ "payment_credential"
+ ],
+ "properties": {
+ "payment_credential": {
+ "$ref": "#/components/schemas/SamsungPayWalletCredentials"
+ }
+ }
+ },
+ "SamsungPayWebWalletData": {
"type": "object",
"required": [
"card_brand",
@@ -18988,8 +19986,7 @@
"nullable": true
},
"card_brand": {
- "type": "string",
- "description": "Brand of the payment card"
+ "$ref": "#/components/schemas/SamsungPayCardBrand"
},
"card_last4digits": {
"type": "string",
@@ -19000,16 +19997,13 @@
}
}
},
- "SamsungPayWalletData": {
- "type": "object",
- "required": [
- "payment_credential"
- ],
- "properties": {
- "payment_credential": {
- "$ref": "#/components/schemas/SamsungPayWalletCredentials"
- }
- }
+ "ScaExemptionType": {
+ "type": "string",
+ "description": "SCA Exemptions types available for authentication",
+ "enum": [
+ "low_value",
+ "transaction_risk_analysis"
+ ]
},
"SdkInformation": {
"type": "object",
@@ -19073,6 +20067,10 @@
"properties": {
"next_action": {
"$ref": "#/components/schemas/NextActionCall"
+ },
+ "order_id": {
+ "type": "string",
+ "nullable": true
}
}
},
@@ -19212,7 +20210,8 @@
"account_holder_name",
"bic",
"country",
- "iban"
+ "iban",
+ "reference"
],
"properties": {
"account_holder_name": {
@@ -19229,6 +20228,10 @@
"iban": {
"type": "string",
"example": "123456789"
+ },
+ "reference": {
+ "type": "string",
+ "example": "U2PVVSEV4V9Y"
}
}
},
@@ -19360,6 +20363,48 @@
}
]
},
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PazeSessionTokenResponse"
+ },
+ {
+ "type": "object",
+ "required": [
+ "wallet_name"
+ ],
+ "properties": {
+ "wallet_name": {
+ "type": "string",
+ "enum": [
+ "paze"
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ClickToPaySessionResponse"
+ },
+ {
+ "type": "object",
+ "required": [
+ "wallet_name"
+ ],
+ "properties": {
+ "wallet_name": {
+ "type": "string",
+ "enum": [
+ "click_to_pay"
+ ]
+ }
+ }
+ }
+ ]
+ },
{
"type": "object",
"required": [
@@ -19430,6 +20475,60 @@
}
]
},
+ "SizeVariants": {
+ "type": "string",
+ "enum": [
+ "cover",
+ "contain"
+ ]
+ },
+ "SplitPaymentsRequest": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "stripe_split_payment"
+ ],
+ "properties": {
+ "stripe_split_payment": {
+ "$ref": "#/components/schemas/StripeSplitPaymentRequest"
+ }
+ }
+ }
+ ],
+ "description": "Fee information for Split Payments to be charged on the payment being collected"
+ },
+ "SplitPaymentsResponse": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "stripe_split_payment"
+ ],
+ "properties": {
+ "stripe_split_payment": {
+ "$ref": "#/components/schemas/StripeSplitPaymentsResponse"
+ }
+ }
+ }
+ ]
+ },
+ "SplitRefund": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "stripe_split_refund"
+ ],
+ "properties": {
+ "stripe_split_refund": {
+ "$ref": "#/components/schemas/StripeSplitRefundRequest"
+ }
+ }
+ }
+ ],
+ "description": "Charge specific fields for controlling the revert of funds from either platform or connected account. Check sub-fields for more details."
+ },
"StraightThroughAlgorithm": {
"oneOf": [
{
@@ -19507,11 +20606,128 @@
"destination"
]
},
+ "StripeSplitPaymentRequest": {
+ "type": "object",
+ "description": "Fee information for Split Payments to be charged on the payment being collected for Stripe",
+ "required": [
+ "charge_type",
+ "application_fees",
+ "transfer_account_id"
+ ],
+ "properties": {
+ "charge_type": {
+ "$ref": "#/components/schemas/PaymentChargeType"
+ },
+ "application_fees": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Platform fees to be collected on the payment",
+ "example": 6540
+ },
+ "transfer_account_id": {
+ "type": "string",
+ "description": "Identifier for the reseller's account to send the funds to"
+ }
+ },
+ "additionalProperties": false
+ },
+ "StripeSplitPaymentsResponse": {
+ "type": "object",
+ "description": "Fee information to be charged on the payment being collected",
+ "required": [
+ "charge_type",
+ "application_fees",
+ "transfer_account_id"
+ ],
+ "properties": {
+ "charge_id": {
+ "type": "string",
+ "description": "Identifier for charge created for the payment",
+ "nullable": true
+ },
+ "charge_type": {
+ "$ref": "#/components/schemas/PaymentChargeType"
+ },
+ "application_fees": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Platform fees collected on the payment",
+ "example": 6540
+ },
+ "transfer_account_id": {
+ "type": "string",
+ "description": "Identifier for the reseller's account where the funds were transferred"
+ }
+ }
+ },
+ "StripeSplitRefundRequest": {
+ "type": "object",
+ "description": "Charge specific fields for controlling the revert of funds from either platform or connected account for Stripe. Check sub-fields for more details.",
+ "properties": {
+ "revert_platform_fee": {
+ "type": "boolean",
+ "description": "Toggle for reverting the application fee that was collected for the payment.\nIf set to false, the funds are pulled from the destination account.",
+ "nullable": true
+ },
+ "revert_transfer": {
+ "type": "boolean",
+ "description": "Toggle for reverting the transfer that was made during the charge.\nIf set to false, the funds are pulled from the main platform's account.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "SupportedPaymentMethod": {
+ "type": "object",
+ "required": [
+ "payment_method",
+ "payment_method_type",
+ "mandates",
+ "refunds",
+ "supported_capture_methods"
+ ],
+ "properties": {
+ "payment_method": {
+ "$ref": "#/components/schemas/PaymentMethod"
+ },
+ "payment_method_type": {
+ "$ref": "#/components/schemas/PaymentMethodType"
+ },
+ "mandates": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "refunds": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "supported_capture_methods": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CaptureMethod"
+ }
+ },
+ "supported_countries": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CountryAlpha2"
+ },
+ "uniqueItems": true,
+ "nullable": true
+ },
+ "supported_currencies": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Currency"
+ },
+ "uniqueItems": true,
+ "nullable": true
+ }
+ }
+ },
"SurchargeCalculationOverride": {
"type": "string",
"enum": [
- "Skip",
- "Calculate"
+ "skip",
+ "calculate"
]
},
"SurchargeDetailsResponse": {
@@ -19520,8 +20736,7 @@
"surcharge",
"display_surcharge_amount",
"display_tax_on_surcharge_amount",
- "display_total_surcharge_amount",
- "display_final_amount"
+ "display_total_surcharge_amount"
],
"properties": {
"surcharge": {
@@ -19549,11 +20764,6 @@
"type": "number",
"format": "double",
"description": "sum of display_surcharge_amount and display_tax_on_surcharge_amount"
- },
- "display_final_amount": {
- "type": "number",
- "format": "double",
- "description": "sum of original amount,"
}
}
},
@@ -19618,8 +20828,8 @@
"TaxCalculationOverride": {
"type": "string",
"enum": [
- "Skip",
- "Calculate"
+ "skip",
+ "calculate"
]
},
"ThirdPartySdkSessionResponse": {
@@ -20534,6 +21744,17 @@
}
}
},
+ {
+ "type": "object",
+ "required": [
+ "paze"
+ ],
+ "properties": {
+ "paze": {
+ "$ref": "#/components/schemas/PazeWalletData"
+ }
+ }
+ },
{
"type": "object",
"required": [
@@ -20676,7 +21897,8 @@
}
}
}
- ]
+ ],
+ "description": "Hyperswitch supports SDK integration with Apple Pay and Google Pay wallets. For other wallets, we integrate with their respective connectors, redirecting the customer to the connector for wallet payments. As a result, we don’t receive any payment method data in the confirm call for payments made through other wallets."
},
"WeChatPay": {
"type": "object"
@@ -20752,7 +21974,7 @@
"type": "apiKey",
"in": "header",
"name": "api-key",
- "description": "Admin API keys allow you to perform some privileged actions such as creating a merchant account and Merchant Connector account."
+ "description": "Admin API keys allow you to perform some privileged actions such as creating a merchant account and Connector account."
},
"api_key": {
"type": "apiKey",
diff --git a/api-reference-v2/rust_locker_open_api_spec.yml b/api-reference-v2/rust_locker_open_api_spec.yml
index 729886d9cd0d..17a19fec44da 100644
--- a/api-reference-v2/rust_locker_open_api_spec.yml
+++ b/api-reference-v2/rust_locker_open_api_spec.yml
@@ -2,16 +2,16 @@ openapi: "3.0.2"
info:
title: Tartarus - OpenAPI 3.0
description: |-
- This the the open API 3.0 specification for the card locker.
+ This is the OpenAPI 3.0 specification for the card locker.
This is used by the [hyperswitch](https://github.com/juspay/hyperswitch) for storing card information securely.
version: "1.0"
tags:
- name: Key Custodian
description: API used to initialize the locker after deployment.
- name: Data
- description: CRUD APIs to for working with data to be stored in the locker
+ description: CRUD APIs for working with data to be stored in the locker
- name: Cards
- description: CRUD APIs to for working with cards data to be stored in the locker (deprecated)
+ description: CRUD APIs for working with cards data to be stored in the locker (deprecated)
paths:
/custodian/key1:
post:
@@ -39,7 +39,7 @@ paths:
tags:
- Key Custodian
summary: Provide Key 2
- description: Provide the first key to unlock the locker
+ description: Provide the second key to unlock the locker
operationId: setKey2
requestBody:
description: Provide key 2 to unlock the locker
diff --git a/api-reference/api-reference/api-key/api-key--create.mdx b/api-reference/api-reference/api-key/api-key--create.mdx
index 977d4b928518..663ec4e66458 100644
--- a/api-reference/api-reference/api-key/api-key--create.mdx
+++ b/api-reference/api-reference/api-key/api-key--create.mdx
@@ -1,3 +1,3 @@
---
-openapi: post /api_keys/{merchant_id)
+openapi: post /api_keys/{merchant_id}
---
\ No newline at end of file
diff --git a/api-reference/api-reference/api-key/api-key--revoke.mdx b/api-reference/api-reference/api-key/api-key--revoke.mdx
index d95f088533e5..62bbf0203219 100644
--- a/api-reference/api-reference/api-key/api-key--revoke.mdx
+++ b/api-reference/api-reference/api-key/api-key--revoke.mdx
@@ -1,3 +1,3 @@
---
-openapi: delete /api_keys/{merchant_id)/{key_id}
+openapi: delete /api_keys/{merchant_id}/{key_id}
---
\ No newline at end of file
diff --git a/api-reference/api-reference/organization/organization--retrieve.mdx b/api-reference/api-reference/organization/organization--retrieve.mdx
index 8495797dcc4d..d5cd76a472da 100644
--- a/api-reference/api-reference/organization/organization--retrieve.mdx
+++ b/api-reference/api-reference/organization/organization--retrieve.mdx
@@ -1,3 +1,3 @@
---
-openapi: get /organization/{organization_id}
+openapi: get /organization/{id}
---
\ No newline at end of file
diff --git a/api-reference/api-reference/organization/organization--update.mdx b/api-reference/api-reference/organization/organization--update.mdx
index 202020c7ca64..e51cc5690754 100644
--- a/api-reference/api-reference/organization/organization--update.mdx
+++ b/api-reference/api-reference/organization/organization--update.mdx
@@ -1,3 +1,3 @@
---
-openapi: put /organization/{organization_id}
+openapi: put /organization/{id}
---
\ No newline at end of file
diff --git a/api-reference/api-reference/payments/payments--post-session-tokens.mdx b/api-reference/api-reference/payments/payments--post-session-tokens.mdx
new file mode 100644
index 000000000000..6c327886c529
--- /dev/null
+++ b/api-reference/api-reference/payments/payments--post-session-tokens.mdx
@@ -0,0 +1,3 @@
+---
+openapi: post /payments/{payment_id}/post_session_tokens
+---
\ No newline at end of file
diff --git a/api-reference/api-reference/relay/relay--retrieve.mdx b/api-reference/api-reference/relay/relay--retrieve.mdx
new file mode 100644
index 000000000000..d65e62d31d74
--- /dev/null
+++ b/api-reference/api-reference/relay/relay--retrieve.mdx
@@ -0,0 +1,3 @@
+---
+openapi: openapi_spec get /relay/{relay_id}
+---
\ No newline at end of file
diff --git a/api-reference/api-reference/relay/relay.mdx b/api-reference/api-reference/relay/relay.mdx
new file mode 100644
index 000000000000..a6b5962740a6
--- /dev/null
+++ b/api-reference/api-reference/relay/relay.mdx
@@ -0,0 +1,3 @@
+---
+openapi: openapi_spec post /relay
+---
\ No newline at end of file
diff --git a/api-reference/api-reference/routing/routing--activate-config.mdx b/api-reference/api-reference/routing/routing--activate-config.mdx
index 990723a90c71..12e39e519e90 100644
--- a/api-reference/api-reference/routing/routing--activate-config.mdx
+++ b/api-reference/api-reference/routing/routing--activate-config.mdx
@@ -1,3 +1,3 @@
---
-openapi: post /routing/{algorithm_id}/activate
+openapi: post /routing/{routing_algorithm_id}/activate
---
\ No newline at end of file
diff --git a/api-reference/api-reference/routing/routing--retrieve.mdx b/api-reference/api-reference/routing/routing--retrieve.mdx
index f39e44c824c3..3c5d31cb2fad 100644
--- a/api-reference/api-reference/routing/routing--retrieve.mdx
+++ b/api-reference/api-reference/routing/routing--retrieve.mdx
@@ -1,3 +1,3 @@
---
-openapi: get /routing/{algorithm_id}
+openapi: get /routing/{routing_algorithm_id}
---
\ No newline at end of file
diff --git a/api-reference/essentials/error_codes.mdx b/api-reference/essentials/error_codes.mdx
index 2f633e9cffed..e2c1e53d1111 100644
--- a/api-reference/essentials/error_codes.mdx
+++ b/api-reference/essentials/error_codes.mdx
@@ -2,8 +2,14 @@
title: Error Codes
---
-Hyperswitch uses Error codes, types, and messages to communicate errors during API calls. There are three types of error codes:
+Hyperswitch uses error codes, types, and messages to communicate errors during API calls. There are two main types of error codes: Error Codes and Unified Error Codes.
+1. **Error Codes** refer to the error code sent by the connector.
+2. **Unified Error Codes** refer to the generic error code sent by the Hyperswitch server, based on the connector's error code. Hyperswitch groups the different error codes from connectors into more generic Unified Error Codes for structured relay of PSP errors, helping merchants derive patterns and determine the next steps for ongoing transactions.
+There are four types of Error Codes and five types of Unified Error Codes.
+
+**1. Error Codes:**
+The section below contains all the error codes and their corresponding error messages.
| Error Code | Type | Description |
| ---------- | --------------------- | ------------------------------------------------------------ |
| IR | Invalid Request Error | Error caused due to invalid fields and values in API request |
@@ -31,7 +37,7 @@ Hyperswitch uses Error codes, types, and messages to communicate errors during A
| IR_15 | 400 | invalid_request_error | Invalid Ephemeral Key for the customer | Please pass the right Ephemeral key for the customer |
| IR_16 | 400 | invalid_request_error | “message” | Typically used when information involving multiple fields or previously provided information doesn’t satisfy a condition. Refer to our API documentation for required fields and format |
| IR_17 | 401 | invalid_request_error | Access forbidden, an invalid JWT token was used | Provide a valid JWT token to access the APIs |
-| IR_18 | 401 | invalid_request_error | "message" | The user is not authorised to update the customer, Contact Org. Admin for the appropriate access. |
+| IR_18 | 401 | invalid_request_error | "message" | The user is not authorised to update the customer, Contact Org. Admin for the appropriate access. |
| IR_19 | 400 | invalid_request_error | "message" | Please check and retry with correct details. Refer to our API documentation |
| IR_20 | 400 | invalid_request_error | "flow" not supported by the "connector" | Requested flow is not supported for this Connector. |
| IR_21 | 400 | invalid_request_error | Missing required params | Please add the required params in the request. Refer to our API documentation |
@@ -74,4 +80,16 @@ Hyperswitch uses Error codes, types, and messages to communicate errors during A
| WE_03 | 500 | router_error | There was some issue processing the webhook | Please try again later. If the issue persists, contact Hyperswitch support. |
| WE_04 | 404 | object_not_found | Webhook resource not found | Ensure the webhook URL is correct and the resource exists. |
| WE_05 | 400 | invalid_request_error | Unable to process the webhook body | Ensure the webhook body is correctly formatted and try again. |
-| WE_06 | 400 | invalid_request_error | Merchant Secret set by merchant for webhook source verification is invalid | Verify the Merchant Secret, then try again. |
\ No newline at end of file
+| WE_06 | 400 | invalid_request_error | Merchant Secret set by merchant for webhook source verification is invalid | Verify the Merchant Secret, then try again. |
+
+
+**2. Unified Error codes:**
+The section below contains all the unified error codes and their corresponding error messages.
+
+| Unified Error Code | Unified Error Categorisation | Unified Error message |
+| ------------------ | ------------------------------------- | ----------------------------------- |
+| UE_1000 | Customer Error | Issue with payment method details. |
+| UE_2000 | Connector Declines | Issue with Configurations. |
+| UE_3000 | Connector Error | Technical issue with PSP. |
+| UE_4000 | Integration Error | Issue in the integration. |
+| UE_9000 | Others | Something went wrong. |
\ No newline at end of file
diff --git a/api-reference/essentials/webhooks.mdx b/api-reference/essentials/webhooks.mdx
deleted file mode 100644
index 20ce3518ea72..000000000000
--- a/api-reference/essentials/webhooks.mdx
+++ /dev/null
@@ -1,45 +0,0 @@
-# Webhooks
-
-Webhooks are HTTP-based real-time push notifications that Hyperswitch would use for instant status communication to your server. Webhooks are vital in payments for the following reasons:
-
-- Preventing merchants from losing business due to delayed status communication (say, in case of flight or movie reservations where there is a need for instant payment confirmation).
-- Prevent payment reconciliation issues where payments change from “Failed” to “Succeeded”.
-- Providing the best payment experience for the end-user by instantly communicating payment status and fulfilling the purchase.
-
-## Configuring Webhooks
-
-You would need to set up a dedicated HTTPS or HTTP endpoint on your server with a URL as a webhook listener that will receive push notifications in the form of a POST request with JSON payload from the Hyperswitch server
- Update the above endpoint on your Hyperswitch dashboard under Settings -> Webhooks
-In order for Hyperswitch to receive updates from the connectors you have selected, you would need to update Hyperswitch’s corresponding endpoints on your respective connector dashboard instead of your webhook endpoints
-
-
-Hyperswitch’s webhook endpoint format is as follows:
-
-| Environment | Webhook Endpoint |
-| ----------- | ---------------- |
-| Sandbox | sandbox.hyperswitch.io/webhooks/`{merchant_id}`/`{connector_name}` |
-| Production | api.hyperswitch.io/webhooks/`{merchant_id}`/`{connector_name}`|
-
-## Handling Webhooks
-
-- **Select the events for Webhooks:** On the same page on the dashboard, select the events for which you would like to receive notifications. Currently, Webhooks are available on Hyperswitch for the following events:
-
- 1. payment_succeeded
- 2. payment_failed
- 3. payment_processing
- 4. action_required
- 5. refund_succeeded
- 6. refund_failed
- 7. dispute_opened
- 8. dispute_expired
- 9. dispute_accepted
- 10. dispute_cancelled
- 11. dispute_challenged
- 12. dispute_won
- 13. dispute_lost
-
-Click [**here**](https://juspay-78.mintlify.app/api-reference/schemas/outgoing--webhook) to see the webhook payload your endpoint would need to parse for each of the above events
-
-- **Return a 2xx response:** Your server must return a successful 2xx response on successful receipt of webhooks.
-
-- **Retries:** In case of 3xx, 4xx, or 5xx response or no response from your endpoint for webhooks, Hyperswitch has a retry mechanism that tries sending the webhooks again up to 3 times before marking the event as failed.
diff --git a/api-reference/logo/dark.svg b/api-reference/logo/dark.svg
index fbf0d89d4106..f07be0cea141 100644
--- a/api-reference/logo/dark.svg
+++ b/api-reference/logo/dark.svg
@@ -1,29 +1,21 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/api-reference/logo/light.svg b/api-reference/logo/light.svg
index c951a909dd49..66b2c279d06f 100644
--- a/api-reference/logo/light.svg
+++ b/api-reference/logo/light.svg
@@ -1,29 +1,21 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/api-reference/mint.json b/api-reference/mint.json
index 03a76fed1830..5e9c9c6d36c6 100644
--- a/api-reference/mint.json
+++ b/api-reference/mint.json
@@ -32,7 +32,6 @@
{
"group": "Essentials",
"pages": [
- "essentials/webhooks",
"essentials/error_codes",
"essentials/rate_limit",
"essentials/go-live"
@@ -235,6 +234,13 @@
"api-reference/routing/routing--activate-config"
]
},
+ {
+ "group": "Relay",
+ "pages": [
+ "api-reference/relay/relay",
+ "api-reference/relay/relay--retrieve"
+ ]
+ },
{
"group": "Schemas",
"pages": ["api-reference/schemas/outgoing--webhook"]
diff --git a/api-reference/openapi_spec.json b/api-reference/openapi_spec.json
index d91dbb9f8252..186aa6dc9c3b 100644
--- a/api-reference/openapi_spec.json
+++ b/api-reference/openapi_spec.json
@@ -867,7 +867,6 @@
"Payments"
],
"summary": "Payments - Complete Authorize",
- "description": "\n",
"operationId": "Complete Authorize a Payment",
"parameters": [
{
@@ -912,6 +911,164 @@
]
}
},
+ "/payments/{payment_id}/post_session_tokens": {
+ "post": {
+ "tags": [
+ "Payments"
+ ],
+ "summary": "Payments - Post Session Tokens",
+ "operationId": "Create Post Session Tokens for a Payment",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentsPostSessionTokensRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Post Session Token is done",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaymentsPostSessionTokensResponse"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Missing mandatory fields"
+ }
+ },
+ "security": [
+ {
+ "publishable_key": []
+ }
+ ]
+ }
+ },
+ "/relay": {
+ "post": {
+ "tags": [
+ "Relay"
+ ],
+ "summary": "Relay - Create",
+ "description": "Creates a relay request.",
+ "operationId": "Relay Request",
+ "parameters": [
+ {
+ "name": "X-Profile-Id",
+ "in": "header",
+ "description": "Profile ID for authentication",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "X-Idempotency-Key",
+ "in": "header",
+ "description": "Idempotency Key for relay request",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RelayRequest"
+ },
+ "examples": {
+ "Create a relay request": {
+ "value": {
+ "connector_id": "mca_5apGeP94tMts6rg3U3kR",
+ "connector_resource_id": "7256228702616471803954",
+ "data": {
+ "refund": {
+ "amount": 6540,
+ "currency": "USD"
+ }
+ },
+ "type": "refund"
+ }
+ }
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Relay request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RelayResponse"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Invalid data"
+ }
+ },
+ "security": [
+ {
+ "api_key": []
+ }
+ ]
+ }
+ },
+ "/relay/{relay_id}": {
+ "get": {
+ "tags": [
+ "Relay"
+ ],
+ "summary": "Relay - Retrieve",
+ "description": "Retrieves a relay details.",
+ "operationId": "Retrieve a Relay details",
+ "parameters": [
+ {
+ "name": "X-Profile-Id",
+ "in": "header",
+ "description": "Profile ID for authentication",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Relay Retrieved",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RelayResponse"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Relay details was not found"
+ }
+ },
+ "security": [
+ {
+ "api_key": []
+ },
+ {
+ "ephemeral_key": []
+ }
+ ]
+ }
+ },
"/refunds": {
"post": {
"tags": [
@@ -1078,7 +1235,7 @@
"Refunds"
],
"summary": "Refunds - List",
- "description": "Lists all the refunds associated with the merchant or a payment_id if payment_id is not provided",
+ "description": "Lists all the refunds associated with the merchant, or for a specific payment if payment_id is provided",
"operationId": "List all Refunds",
"requestBody": {
"content": {
@@ -1156,7 +1313,7 @@
]
}
},
- "/organization/{organization_id}": {
+ "/organization/{id}": {
"get": {
"tags": [
"Organization"
@@ -1166,7 +1323,7 @@
"operationId": "Retrieve an Organization",
"parameters": [
{
- "name": "organization_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the Organization",
"required": true,
@@ -1205,7 +1362,7 @@
"operationId": "Update an Organization",
"parameters": [
{
- "name": "organization_id",
+ "name": "id",
"in": "path",
"description": "The unique identifier for the Organization",
"required": true,
@@ -2228,7 +2385,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/CustomerRequest"
+ "$ref": "#/components/schemas/CustomerUpdateRequest"
},
"examples": {
"Update name and email of a customer": {
@@ -3884,14 +4041,98 @@
]
}
},
- "/account/:account_id/business_profile/:profile_id/dynamic_routing/success_based/toggle": {
+ "/account/{account_id}/business_profile/{profile_id}/dynamic_routing/success_based/config/{algorithm_id}": {
+ "patch": {
+ "tags": [
+ "Routing"
+ ],
+ "summary": "Routing - Update success based dynamic routing config for profile",
+ "description": "Update success based dynamic routing algorithm",
+ "operationId": "Update success based dynamic routing configs",
+ "parameters": [
+ {
+ "name": "account_id",
+ "in": "path",
+ "description": "Merchant id",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "profile_id",
+ "in": "path",
+ "description": "Profile id under which Dynamic routing needs to be toggled",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "algorithm_id",
+ "in": "path",
+ "description": "Success based routing algorithm id which was last activated to update the config",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/DynamicRoutingFeatures"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Routing Algorithm updated",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RoutingDictionaryRecord"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Update body is malformed"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "404": {
+ "description": "Resource missing"
+ },
+ "422": {
+ "description": "Unprocessable request"
+ },
+ "500": {
+ "description": "Internal server error"
+ }
+ },
+ "security": [
+ {
+ "api_key": []
+ },
+ {
+ "jwt_key": []
+ }
+ ]
+ }
+ },
+ "/account/{account_id}/business_profile/{profile_id}/dynamic_routing/success_based/toggle": {
"post": {
"tags": [
"Routing"
],
"summary": "Routing - Toggle success based dynamic routing for profile",
"description": "Create a success based dynamic routing algorithm",
- "operationId": "Toggle success based dynamic routing algprithm",
+ "operationId": "Toggle success based dynamic routing algorithm",
"parameters": [
{
"name": "account_id",
@@ -3912,12 +4153,12 @@
}
},
{
- "name": "status",
+ "name": "enable",
"in": "query",
- "description": "Boolean value for mentioning the expected state of dynamic routing",
+ "description": "Feature to enable for success based routing",
"required": true,
"schema": {
- "type": "boolean"
+ "$ref": "#/components/schemas/DynamicRoutingFeatures"
}
}
],
@@ -3958,14 +4199,14 @@
]
}
},
- "/account/:account_id/business_profile/:profile_id/dynamic_routing/success_based/config/:algorithm_id": {
- "patch": {
+ "/account/{account_id}/business_profile/{profile_id}/dynamic_routing/elimination/toggle": {
+ "post": {
"tags": [
"Routing"
],
- "summary": "Routing - Update config for success based dynamic routing",
- "description": "Update config for success based dynamic routing",
- "operationId": "Update configs for success based dynamic routing algorithm",
+ "summary": "Routing - Toggle elimination routing for profile",
+ "description": "Create a elimination based dynamic routing algorithm",
+ "operationId": "Toggle elimination routing algorithm",
"parameters": [
{
"name": "account_id",
@@ -3979,35 +4220,25 @@
{
"name": "profile_id",
"in": "path",
- "description": "The unique identifier for a profile",
+ "description": "Profile id under which Dynamic routing needs to be toggled",
"required": true,
"schema": {
"type": "string"
}
},
{
- "name": "algorithm_id",
- "in": "path",
- "description": "The unique identifier for routing algorithm",
+ "name": "enable",
+ "in": "query",
+ "description": "Feature to enable for success based routing",
"required": true,
"schema": {
- "type": "string"
+ "$ref": "#/components/schemas/DynamicRoutingFeatures"
}
}
],
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/SuccessBasedRoutingConfig"
- }
- }
- },
- "required": true
- },
"responses": {
"200": {
- "description": "Routing Algorithm updated",
+ "description": "Routing Algorithm created",
"content": {
"application/json": {
"schema": {
@@ -4034,7 +4265,10 @@
},
"security": [
{
- "admin_api_key": []
+ "api_key": []
+ },
+ {
+ "jwt_key": []
}
]
}
@@ -5768,29 +6002,186 @@
}
],
"nullable": true
+ },
+ "recurring_payment_request": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApplePayRecurringPaymentRequest"
+ }
+ ],
+ "nullable": true
}
}
},
- "ApplePayRedirectData": {
- "type": "object"
+ "ApplePayPaymentTiming": {
+ "type": "string",
+ "enum": [
+ "immediate",
+ "recurring"
+ ]
},
- "ApplePaySessionResponse": {
- "oneOf": [
- {
- "$ref": "#/components/schemas/ThirdPartySdkSessionResponse"
+ "ApplePayRecurringDetails": {
+ "type": "object",
+ "required": [
+ "payment_description",
+ "regular_billing",
+ "management_url"
+ ],
+ "properties": {
+ "payment_description": {
+ "type": "string",
+ "description": "A description of the recurring payment that Apple Pay displays to the user in the payment sheet"
},
- {
- "$ref": "#/components/schemas/NoThirdPartySdkSessionResponse"
+ "regular_billing": {
+ "$ref": "#/components/schemas/ApplePayRegularBillingDetails"
},
- {
- "type": "object",
- "default": null,
+ "billing_agreement": {
+ "type": "string",
+ "description": "A localized billing agreement that the payment sheet displays to the user before the user authorizes the payment",
"nullable": true
+ },
+ "management_url": {
+ "type": "string",
+ "description": "A URL to a web page where the user can update or delete the payment method for the recurring payment",
+ "example": "https://hyperswitch.io"
}
- ]
+ }
},
- "ApplePayShippingContactFields": {
- "type": "array",
+ "ApplePayRecurringPaymentRequest": {
+ "type": "object",
+ "required": [
+ "payment_description",
+ "regular_billing",
+ "management_url"
+ ],
+ "properties": {
+ "payment_description": {
+ "type": "string",
+ "description": "A description of the recurring payment that Apple Pay displays to the user in the payment sheet"
+ },
+ "regular_billing": {
+ "$ref": "#/components/schemas/ApplePayRegularBillingRequest"
+ },
+ "billing_agreement": {
+ "type": "string",
+ "description": "A localized billing agreement that the payment sheet displays to the user before the user authorizes the payment",
+ "nullable": true
+ },
+ "management_url": {
+ "type": "string",
+ "description": "A URL to a web page where the user can update or delete the payment method for the recurring payment",
+ "example": "https://hyperswitch.io"
+ }
+ }
+ },
+ "ApplePayRedirectData": {
+ "type": "object"
+ },
+ "ApplePayRegularBillingDetails": {
+ "type": "object",
+ "required": [
+ "label"
+ ],
+ "properties": {
+ "label": {
+ "type": "string",
+ "description": "The label that Apple Pay displays to the user in the payment sheet with the recurring details"
+ },
+ "recurring_payment_start_date": {
+ "type": "string",
+ "format": "date-time",
+ "description": "The date of the first payment",
+ "example": "2023-09-10T23:59:59Z",
+ "nullable": true
+ },
+ "recurring_payment_end_date": {
+ "type": "string",
+ "format": "date-time",
+ "description": "The date of the final payment",
+ "example": "2023-09-10T23:59:59Z",
+ "nullable": true
+ },
+ "recurring_payment_interval_unit": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RecurringPaymentIntervalUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "recurring_payment_interval_count": {
+ "type": "integer",
+ "format": "int32",
+ "description": "The number of interval units that make up the total payment interval",
+ "nullable": true
+ }
+ }
+ },
+ "ApplePayRegularBillingRequest": {
+ "type": "object",
+ "required": [
+ "amount",
+ "label",
+ "payment_timing"
+ ],
+ "properties": {
+ "amount": {
+ "type": "string",
+ "description": "The amount of the recurring payment",
+ "example": "38.02"
+ },
+ "label": {
+ "type": "string",
+ "description": "The label that Apple Pay displays to the user in the payment sheet with the recurring details"
+ },
+ "payment_timing": {
+ "$ref": "#/components/schemas/ApplePayPaymentTiming"
+ },
+ "recurring_payment_start_date": {
+ "type": "string",
+ "format": "date-time",
+ "description": "The date of the first payment",
+ "nullable": true
+ },
+ "recurring_payment_end_date": {
+ "type": "string",
+ "format": "date-time",
+ "description": "The date of the final payment",
+ "nullable": true
+ },
+ "recurring_payment_interval_unit": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RecurringPaymentIntervalUnit"
+ }
+ ],
+ "nullable": true
+ },
+ "recurring_payment_interval_count": {
+ "type": "integer",
+ "format": "int32",
+ "description": "The number of interval units that make up the total payment interval",
+ "nullable": true
+ }
+ }
+ },
+ "ApplePaySessionResponse": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/ThirdPartySdkSessionResponse"
+ },
+ {
+ "$ref": "#/components/schemas/NoThirdPartySdkSessionResponse"
+ },
+ {
+ "type": "object",
+ "default": null,
+ "nullable": true
+ }
+ ]
+ },
+ "ApplePayShippingContactFields": {
+ "type": "array",
"items": {
"$ref": "#/components/schemas/ApplePayAddressParameters"
}
@@ -5968,7 +6359,9 @@
"enum": [
"threedsecureio",
"netcetera",
- "gpayments"
+ "gpayments",
+ "ctp_mastercard",
+ "unified_authentication_service"
]
},
"AuthenticationStatus": {
@@ -6185,6 +6578,27 @@
],
"description": "Masked payout method details for bank payout method"
},
+ "BankCodeResponse": {
+ "type": "object",
+ "required": [
+ "bank_name",
+ "eligible_connectors"
+ ],
+ "properties": {
+ "bank_name": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BankNames"
+ }
+ },
+ "eligible_connectors": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
"BankDebitAdditionalData": {
"oneOf": [
{
@@ -6455,6 +6869,20 @@
}
]
},
+ "BankDebitTypes": {
+ "type": "object",
+ "required": [
+ "eligible_connectors"
+ ],
+ "properties": {
+ "eligible_connectors": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
"BankHolderType": {
"type": "string",
"enum": [
@@ -6763,7 +7191,7 @@
},
"bank_account_bic": {
"type": "string",
- "description": "Bank account details for Giropay\nBank account bic code",
+ "description": "Bank account bic code",
"nullable": true
},
"bank_account_iban": {
@@ -7678,6 +8106,25 @@
}
]
},
+ "BankTransferTypes": {
+ "type": "object",
+ "required": [
+ "eligible_connectors"
+ ],
+ "properties": {
+ "eligible_connectors": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The list of eligible connectors for a given payment experience",
+ "example": [
+ "stripe",
+ "adyen"
+ ]
+ }
+ }
+ },
"BankType": {
"type": "string",
"enum": [
@@ -7880,6 +8327,21 @@
"type": "string",
"description": "User-agent of the browser",
"nullable": true
+ },
+ "os_type": {
+ "type": "string",
+ "description": "The os type of the client device",
+ "nullable": true
+ },
+ "os_version": {
+ "type": "string",
+ "description": "The os version of the client device",
+ "nullable": true
+ },
+ "device_model": {
+ "type": "string",
+ "description": "The device model of the client",
+ "nullable": true
}
}
},
@@ -7963,6 +8425,11 @@
"description": "A list of allowed domains (glob patterns) where this link can be embedded / opened from",
"uniqueItems": true,
"nullable": true
+ },
+ "branding_visibility": {
+ "type": "boolean",
+ "description": "Toggle for HyperSwitch branding visibility",
+ "nullable": true
}
}
}
@@ -8001,7 +8468,8 @@
"automatic",
"manual",
"manual_multiple",
- "scheduled"
+ "scheduled",
+ "sequential_automatic"
]
},
"CaptureResponse": {
@@ -8403,6 +8871,41 @@
"Maestro"
]
},
+ "CardNetworkTypes": {
+ "type": "object",
+ "required": [
+ "eligible_connectors"
+ ],
+ "properties": {
+ "card_network": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CardNetwork"
+ }
+ ],
+ "nullable": true
+ },
+ "surcharge_details": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SurchargeDetailsResponse"
+ }
+ ],
+ "nullable": true
+ },
+ "eligible_connectors": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The list of eligible connectors for a given card network",
+ "example": [
+ "stripe",
+ "adyen"
+ ]
+ }
+ }
+ },
"CardPayout": {
"type": "object",
"required": [
@@ -8622,6 +9125,73 @@
}
}
},
+ "ClickToPaySessionResponse": {
+ "type": "object",
+ "required": [
+ "dpa_id",
+ "dpa_name",
+ "locale",
+ "card_brands",
+ "acquirer_bin",
+ "acquirer_merchant_id",
+ "merchant_category_code",
+ "merchant_country_code",
+ "transaction_amount",
+ "transaction_currency_code"
+ ],
+ "properties": {
+ "dpa_id": {
+ "type": "string"
+ },
+ "dpa_name": {
+ "type": "string"
+ },
+ "locale": {
+ "type": "string"
+ },
+ "card_brands": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "acquirer_bin": {
+ "type": "string"
+ },
+ "acquirer_merchant_id": {
+ "type": "string"
+ },
+ "merchant_category_code": {
+ "type": "string"
+ },
+ "merchant_country_code": {
+ "type": "string"
+ },
+ "transaction_amount": {
+ "type": "string",
+ "example": "38.02"
+ },
+ "transaction_currency_code": {
+ "$ref": "#/components/schemas/Currency"
+ },
+ "phone_number": {
+ "type": "string",
+ "example": "9123456789",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "email": {
+ "type": "string",
+ "example": "johntest@test.com",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "phone_country_code": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ },
"Comparison": {
"type": "object",
"description": "Represents a single comparison condition.",
@@ -8689,11 +9259,14 @@
"checkout",
"coinbase",
"cryptopay",
+ "ctp_mastercard",
"cybersource",
"datatrans",
"deutschebank",
+ "digitalvirgo",
"dlocal",
"ebanx",
+ "elavon",
"fiserv",
"fiservemea",
"fiuu",
@@ -8705,12 +9278,14 @@
"helcim",
"iatapay",
"itaubank",
+ "jpmorgan",
"klarna",
"mifinity",
"mollie",
"multisafepay",
"netcetera",
"nexinets",
+ "nexixpay",
"nmi",
"noon",
"novalnet",
@@ -8746,34 +9321,71 @@
"zsl"
]
},
- "ConnectorMetadata": {
+ "ConnectorFeatureMatrixResponse": {
"type": "object",
- "description": "Some connectors like Apple Pay, Airwallex and Noon might require some additional information, find specific details in the child attributes below.",
+ "required": [
+ "name",
+ "supported_payment_methods"
+ ],
"properties": {
- "apple_pay": {
- "allOf": [
- {
- "$ref": "#/components/schemas/ApplepayConnectorMetadataRequest"
- }
- ],
- "nullable": true
+ "name": {
+ "type": "string"
},
- "airwallex": {
- "allOf": [
- {
- "$ref": "#/components/schemas/AirwallexData"
- }
- ],
+ "description": {
+ "type": "string",
"nullable": true
},
- "noon": {
+ "category": {
"allOf": [
{
- "$ref": "#/components/schemas/NoonData"
+ "$ref": "#/components/schemas/PaymentConnectorCategory"
}
],
"nullable": true
- }
+ },
+ "supported_payment_methods": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/SupportedPaymentMethod"
+ }
+ },
+ "supported_webhook_flows": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/EventClass"
+ },
+ "nullable": true
+ }
+ }
+ },
+ "ConnectorMetadata": {
+ "type": "object",
+ "description": "Some connectors like Apple Pay, Airwallex and Noon might require some additional information, find specific details in the child attributes below.",
+ "properties": {
+ "apple_pay": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApplepayConnectorMetadataRequest"
+ }
+ ],
+ "nullable": true
+ },
+ "airwallex": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AirwallexData"
+ }
+ ],
+ "nullable": true
+ },
+ "noon": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/NoonData"
+ }
+ ],
+ "nullable": true
+ }
}
},
"ConnectorSelection": {
@@ -8883,6 +9495,11 @@
"type": "object",
"description": "This field contains the Samsung Pay certificates and credentials",
"nullable": true
+ },
+ "paze": {
+ "type": "object",
+ "description": "This field contains the Paze certificates and credentials",
+ "nullable": true
}
},
"additionalProperties": false
@@ -9249,11 +9866,37 @@
}
]
},
+ "CtpServiceDetails": {
+ "type": "object",
+ "properties": {
+ "merchant_transaction_id": {
+ "type": "string",
+ "description": "merchant transaction id",
+ "nullable": true
+ },
+ "correlation_id": {
+ "type": "string",
+ "description": "network transaction correlation id",
+ "nullable": true
+ },
+ "x_src_flow_id": {
+ "type": "string",
+ "description": "session transaction flow id",
+ "nullable": true
+ },
+ "provider": {
+ "type": "string",
+ "description": "provider Eg: Visa, Mastercard",
+ "nullable": true
+ }
+ }
+ },
"Currency": {
"type": "string",
"description": "The three letter ISO currency code in uppercase. Eg: 'USD' for the United States Dollar.",
"enum": [
"AED",
+ "AFN",
"ALL",
"AMD",
"ANG",
@@ -9273,10 +9916,12 @@
"BOB",
"BRL",
"BSD",
+ "BTN",
"BWP",
"BYN",
"BZD",
"CAD",
+ "CDF",
"CHF",
"CLP",
"CNY",
@@ -9290,6 +9935,7 @@
"DOP",
"DZD",
"EGP",
+ "ERN",
"ETB",
"EUR",
"FJD",
@@ -9311,6 +9957,8 @@
"ILS",
"INR",
"IQD",
+ "IRR",
+ "ISK",
"JMD",
"JOD",
"JPY",
@@ -9318,6 +9966,7 @@
"KGS",
"KHR",
"KMF",
+ "KPW",
"KRW",
"KWD",
"KYD",
@@ -9364,6 +10013,7 @@
"SAR",
"SBD",
"SCR",
+ "SDG",
"SEK",
"SGD",
"SHP",
@@ -9374,8 +10024,11 @@
"SSP",
"STN",
"SVC",
+ "SYP",
"SZL",
"THB",
+ "TJS",
+ "TMT",
"TND",
"TOP",
"TRY",
@@ -9397,7 +10050,8 @@
"XPF",
"YER",
"ZAR",
- "ZMW"
+ "ZMW",
+ "ZWL"
]
},
"CurrentBlockThreshold": {
@@ -9688,7 +10342,7 @@
"created": {
"type": "string",
"format": "date-time",
- "description": "A timestamp (ISO 8601 code) that determines when the customer was created",
+ "description": "A timestamp (ISO 8601 code) that determines when the payment method was created",
"example": "2023-01-18T11:04:09.922Z",
"nullable": true
},
@@ -9902,6 +10556,60 @@
}
}
},
+ "CustomerUpdateRequest": {
+ "type": "object",
+ "description": "The identifier for the customer object. If not provided the customer ID will be autogenerated.",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The customer's name",
+ "example": "Jon Test",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "email": {
+ "type": "string",
+ "description": "The customer's email address",
+ "example": "JonTest@test.com",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "phone": {
+ "type": "string",
+ "description": "The customer's phone number",
+ "example": "9123456789",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "description": {
+ "type": "string",
+ "description": "An arbitrary string that you can attach to a customer object.",
+ "example": "First Customer",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "phone_country_code": {
+ "type": "string",
+ "description": "The country code for the customer phone number",
+ "example": "+65",
+ "nullable": true,
+ "maxLength": 255
+ },
+ "address": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/AddressDetails"
+ }
+ ],
+ "nullable": true
+ },
+ "metadata": {
+ "type": "object",
+ "description": "You can specify up to 50 keys, with key names up to 40 characters long and values up to 500\ncharacters long. Metadata is useful for storing additional, structured information on an\nobject.",
+ "nullable": true
+ }
+ }
+ },
"DecoupledAuthenticationType": {
"type": "string",
"enum": [
@@ -9990,8 +10698,7 @@
"description": "The dispute amount"
},
"currency": {
- "type": "string",
- "description": "The three-letter ISO currency code"
+ "$ref": "#/components/schemas/Currency"
},
"dispute_stage": {
"$ref": "#/components/schemas/DisputeStage"
@@ -10186,6 +10893,81 @@
}
}
},
+ "DynamicRoutingConfigParams": {
+ "type": "string",
+ "enum": [
+ "PaymentMethod",
+ "PaymentMethodType",
+ "AuthenticationType",
+ "Currency",
+ "Country",
+ "CardNetwork",
+ "CardBin"
+ ]
+ },
+ "DynamicRoutingFeatures": {
+ "type": "string",
+ "enum": [
+ "metrics",
+ "dynamic_connector_selection",
+ "none"
+ ]
+ },
+ "ElementPosition": {
+ "type": "string",
+ "enum": [
+ "left",
+ "top left",
+ "top",
+ "top right",
+ "right",
+ "bottom right",
+ "bottom",
+ "bottom left",
+ "center"
+ ]
+ },
+ "ElementSize": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "Variants"
+ ],
+ "properties": {
+ "Variants": {
+ "$ref": "#/components/schemas/SizeVariants"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "Percentage"
+ ],
+ "properties": {
+ "Percentage": {
+ "type": "integer",
+ "format": "int32",
+ "minimum": 0
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "Pixels"
+ ],
+ "properties": {
+ "Pixels": {
+ "type": "integer",
+ "format": "int32",
+ "minimum": 0
+ }
+ }
+ }
+ ]
+ },
"EnabledPaymentMethod": {
"type": "object",
"description": "Object for EnabledPaymentMethod",
@@ -10240,6 +11022,16 @@
}
}
},
+ "ErrorCategory": {
+ "type": "string",
+ "enum": [
+ "frm_decline",
+ "processor_downtime",
+ "processor_decline_unauthorized",
+ "issue_with_payment_method",
+ "processor_decline_incorrect_data"
+ ]
+ },
"EventClass": {
"type": "string",
"enum": [
@@ -10516,6 +11308,38 @@
}
}
},
+ "FeatureMatrixListResponse": {
+ "type": "object",
+ "required": [
+ "connector_count",
+ "connectors"
+ ],
+ "properties": {
+ "connector_count": {
+ "type": "integer",
+ "description": "The number of connectors included in the response",
+ "minimum": 0
+ },
+ "connectors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ConnectorFeatureMatrixResponse"
+ }
+ }
+ }
+ },
+ "FeatureMatrixRequest": {
+ "type": "object",
+ "properties": {
+ "connectors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Connector"
+ },
+ "nullable": true
+ }
+ }
+ },
"FeatureMetadata": {
"type": "object",
"description": "additional data that might be required by hyperswitch",
@@ -10535,9 +11359,25 @@
},
"description": "Additional tags to be used for global search",
"nullable": true
+ },
+ "apple_pay_recurring_details": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ApplePayRecurringDetails"
+ }
+ ],
+ "nullable": true
}
}
},
+ "FeatureStatus": {
+ "type": "string",
+ "description": "The status of the feature",
+ "enum": [
+ "not_supported",
+ "supported"
+ ]
+ },
"FieldType": {
"oneOf": [
{
@@ -10861,13 +11701,37 @@
{
"type": "string",
"enum": [
- "browser_language"
+ "user_bsb_number"
+ ]
+ },
+ {
+ "type": "string",
+ "enum": [
+ "user_bank_sort_code"
]
},
{
"type": "string",
"enum": [
- "browser_ip"
+ "user_bank_routing_number"
+ ]
+ },
+ {
+ "type": "string",
+ "enum": [
+ "user_msisdn"
+ ]
+ },
+ {
+ "type": "string",
+ "enum": [
+ "user_client_identifier"
+ ]
+ },
+ {
+ "type": "string",
+ "enum": [
+ "order_details_product_name"
]
}
],
@@ -11577,6 +12441,14 @@
"type": "string",
"description": "error message unified across the connectors",
"nullable": true
+ },
+ "error_category": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ErrorCategory"
+ }
+ ],
+ "nullable": true
}
}
},
@@ -11710,6 +12582,14 @@
"type": "string",
"description": "error message unified across the connectors",
"nullable": true
+ },
+ "error_category": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ErrorCategory"
+ }
+ ],
+ "nullable": true
}
}
},
@@ -11806,6 +12686,14 @@
"type": "string",
"description": "error message unified across the connectors",
"nullable": true
+ },
+ "error_category": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ErrorCategory"
+ }
+ ],
+ "nullable": true
}
}
},
@@ -13104,11 +13992,6 @@
],
"nullable": true
},
- "metadata": {
- "type": "object",
- "description": "Metadata is useful for storing additional, unstructured information on an object.",
- "nullable": true
- },
"test_mode": {
"type": "boolean",
"description": "A boolean value to indicate if the connector is in Test mode. By default, its value is false.",
@@ -13166,22 +14049,6 @@
},
"status": {
"$ref": "#/components/schemas/ConnectorStatus"
- },
- "additional_merchant_data": {
- "allOf": [
- {
- "$ref": "#/components/schemas/AdditionalMerchantData"
- }
- ],
- "nullable": true
- },
- "connector_wallets_details": {
- "allOf": [
- {
- "$ref": "#/components/schemas/ConnectorWalletDetails"
- }
- ],
- "nullable": true
}
},
"additionalProperties": false
@@ -13701,6 +14568,71 @@
"MobilePayRedirection": {
"type": "object"
},
+ "MobilePaymentConsent": {
+ "type": "string",
+ "enum": [
+ "consent_required",
+ "consent_not_required",
+ "consent_optional"
+ ]
+ },
+ "MobilePaymentData": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "direct_carrier_billing"
+ ],
+ "properties": {
+ "direct_carrier_billing": {
+ "type": "object",
+ "required": [
+ "msisdn"
+ ],
+ "properties": {
+ "msisdn": {
+ "type": "string",
+ "description": "The phone number of the user",
+ "example": "1234567890"
+ },
+ "client_uid": {
+ "type": "string",
+ "description": "Unique user id",
+ "example": "02iacdYXGI9CnyJdoN8c7",
+ "nullable": true
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "MobilePaymentNextStepData": {
+ "type": "object",
+ "required": [
+ "consent_data_required"
+ ],
+ "properties": {
+ "consent_data_required": {
+ "$ref": "#/components/schemas/MobilePaymentConsent"
+ }
+ }
+ },
+ "MobilePaymentResponse": {
+ "allOf": [
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/MobilePaymentData"
+ }
+ ],
+ "nullable": true
+ },
+ {
+ "type": "object"
+ }
+ ]
+ },
"MomoRedirection": {
"type": "object"
},
@@ -13731,9 +14663,81 @@
}
}
},
+ "NetworkTransactionIdAndCardDetails": {
+ "type": "object",
+ "required": [
+ "card_number",
+ "card_exp_month",
+ "card_exp_year",
+ "card_holder_name",
+ "network_transaction_id"
+ ],
+ "properties": {
+ "card_number": {
+ "type": "string",
+ "description": "The card number",
+ "example": "4242424242424242"
+ },
+ "card_exp_month": {
+ "type": "string",
+ "description": "The card's expiry month",
+ "example": "24"
+ },
+ "card_exp_year": {
+ "type": "string",
+ "description": "The card's expiry year",
+ "example": "24"
+ },
+ "card_holder_name": {
+ "type": "string",
+ "description": "The card holder's name",
+ "example": "John Test"
+ },
+ "card_issuer": {
+ "type": "string",
+ "description": "The name of the issuer of card",
+ "example": "chase",
+ "nullable": true
+ },
+ "card_network": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CardNetwork"
+ }
+ ],
+ "nullable": true
+ },
+ "card_type": {
+ "type": "string",
+ "example": "CREDIT",
+ "nullable": true
+ },
+ "card_issuing_country": {
+ "type": "string",
+ "example": "INDIA",
+ "nullable": true
+ },
+ "bank_code": {
+ "type": "string",
+ "example": "JP_AMEX",
+ "nullable": true
+ },
+ "nick_name": {
+ "type": "string",
+ "description": "The card holder's nick name",
+ "example": "John Test",
+ "nullable": true
+ },
+ "network_transaction_id": {
+ "type": "string",
+ "description": "The network transaction ID provided by the card network during a CIT (Customer Initiated Transaction),\nwhere `setup_future_usage` is set to `off_session`."
+ }
+ }
+ },
"NextActionCall": {
"type": "string",
"enum": [
+ "post_session_tokens",
"confirm",
"sync",
"complete_authorize"
@@ -13929,6 +14933,25 @@
]
}
}
+ },
+ {
+ "type": "object",
+ "description": "Contains consent to collect otp for mobile payment",
+ "required": [
+ "consent_data_required",
+ "type"
+ ],
+ "properties": {
+ "consent_data_required": {
+ "$ref": "#/components/schemas/MobilePaymentConsent"
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "collect_otp"
+ ]
+ }
+ }
}
],
"discriminator": {
@@ -13943,7 +14966,8 @@
"invoke_sdk_client",
"trigger_api",
"display_bank_transfer_information",
- "display_wait_screen"
+ "display_wait_screen",
+ "collect_otp"
]
},
"NoThirdPartySdkSessionResponse": {
@@ -14101,70 +15125,6 @@
}
}
},
- "OrderDetails": {
- "type": "object",
- "required": [
- "product_name",
- "quantity"
- ],
- "properties": {
- "product_name": {
- "type": "string",
- "description": "Name of the product that is being purchased",
- "example": "shirt",
- "maxLength": 255
- },
- "quantity": {
- "type": "integer",
- "format": "int32",
- "description": "The quantity of the product to be purchased",
- "example": 1,
- "minimum": 0
- },
- "requires_shipping": {
- "type": "boolean",
- "nullable": true
- },
- "product_img_link": {
- "type": "string",
- "description": "The image URL of the product",
- "nullable": true
- },
- "product_id": {
- "type": "string",
- "description": "ID of the product that is being purchased",
- "nullable": true
- },
- "category": {
- "type": "string",
- "description": "Category of the product that is being purchased",
- "nullable": true
- },
- "sub_category": {
- "type": "string",
- "description": "Sub category of the product that is being purchased",
- "nullable": true
- },
- "brand": {
- "type": "string",
- "description": "Brand of the product that is being purchased",
- "nullable": true
- },
- "product_type": {
- "allOf": [
- {
- "$ref": "#/components/schemas/ProductType"
- }
- ],
- "nullable": true
- },
- "product_tax_code": {
- "type": "string",
- "description": "The tax code for the product",
- "nullable": true
- }
- }
- },
"OrderDetailsWithAmount": {
"type": "object",
"required": [
@@ -14191,6 +15151,18 @@
"format": "int64",
"description": "the amount per quantity of product"
},
+ "tax_rate": {
+ "type": "number",
+ "format": "double",
+ "description": "tax rate applicable to the product",
+ "nullable": true
+ },
+ "total_tax_amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "total tax amount applicable to the product",
+ "nullable": true
+ },
"requires_shipping": {
"type": "boolean",
"nullable": true
@@ -14242,14 +15214,17 @@
],
"properties": {
"organization_name": {
- "type": "string"
+ "type": "string",
+ "description": "Name of the organization"
},
"organization_details": {
"type": "object",
+ "description": "Details about the organization",
"nullable": true
},
"metadata": {
"type": "object",
+ "description": "Metadata is useful for storing additional, unstructured information on an object.",
"nullable": true
}
},
@@ -14265,20 +15240,24 @@
"properties": {
"organization_id": {
"type": "string",
+ "description": "The unique identifier for the Organization",
"example": "org_q98uSGAYbjEwqs0mJwnz",
"maxLength": 64,
"minLength": 1
},
"organization_name": {
"type": "string",
+ "description": "Name of the Organization",
"nullable": true
},
"organization_details": {
"type": "object",
+ "description": "Details about the organization",
"nullable": true
},
"metadata": {
"type": "object",
+ "description": "Metadata is useful for storing additional, unstructured information on an object.",
"nullable": true
},
"modified_at": {
@@ -14296,14 +15275,17 @@
"properties": {
"organization_name": {
"type": "string",
+ "description": "Name of the organization",
"nullable": true
},
"organization_details": {
"type": "object",
+ "description": "Details about the organization",
"nullable": true
},
"metadata": {
"type": "object",
+ "description": "Metadata is useful for storing additional, unstructured information on an object.",
"nullable": true
}
},
@@ -14585,6 +15567,17 @@
}
}
},
+ {
+ "type": "object",
+ "required": [
+ "klarna_checkout"
+ ],
+ "properties": {
+ "klarna_checkout": {
+ "type": "object"
+ }
+ }
+ },
{
"type": "object",
"required": [
@@ -14718,6 +15711,13 @@
"description": "The payment attempt amount. Amount for the payment in lowest denomination of the currency. (i.e) in cents for USD denomination, in paisa for INR denomination etc.,",
"example": 6540
},
+ "order_tax_amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The payment attempt tax_amount.",
+ "example": 6540,
+ "nullable": true
+ },
"currency": {
"allOf": [
{
@@ -14846,72 +15846,28 @@
}
}
},
- "PaymentChargeRequest": {
- "type": "object",
- "description": "Fee information to be charged on the payment being collected",
- "required": [
- "charge_type",
- "fees",
- "transfer_account_id"
- ],
- "properties": {
- "charge_type": {
- "$ref": "#/components/schemas/PaymentChargeType"
- },
- "fees": {
- "type": "integer",
- "format": "int64",
- "description": "Platform fees to be collected on the payment",
- "example": 6540
- },
- "transfer_account_id": {
- "type": "string",
- "description": "Identifier for the reseller's account to send the funds to"
+ "PaymentChargeType": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "Stripe"
+ ],
+ "properties": {
+ "Stripe": {
+ "$ref": "#/components/schemas/StripeChargeType"
+ }
+ }
}
- }
+ ]
},
- "PaymentChargeResponse": {
- "type": "object",
- "description": "Fee information to be charged on the payment being collected",
- "required": [
- "charge_type",
- "application_fees",
- "transfer_account_id"
- ],
- "properties": {
- "charge_id": {
- "type": "string",
- "description": "Identifier for charge created for the payment",
- "nullable": true
- },
- "charge_type": {
- "$ref": "#/components/schemas/PaymentChargeType"
- },
- "application_fees": {
- "type": "integer",
- "format": "int64",
- "description": "Platform fees collected on the payment",
- "example": 6540
- },
- "transfer_account_id": {
- "type": "string",
- "description": "Identifier for the reseller's account where the funds were transferred"
- }
- }
- },
- "PaymentChargeType": {
- "oneOf": [
- {
- "type": "object",
- "required": [
- "Stripe"
- ],
- "properties": {
- "Stripe": {
- "$ref": "#/components/schemas/StripeChargeType"
- }
- }
- }
+ "PaymentConnectorCategory": {
+ "type": "string",
+ "description": "Connector Access Method",
+ "enum": [
+ "payment_gateway",
+ "alternative_payment_method",
+ "bank_acquirer"
]
},
"PaymentCreatePaymentLinkConfig": {
@@ -14940,9 +15896,66 @@
"one_click",
"link_wallet",
"invoke_payment_app",
- "display_wait_screen"
+ "display_wait_screen",
+ "collect_otp"
]
},
+ "PaymentExperienceTypes": {
+ "type": "object",
+ "required": [
+ "eligible_connectors"
+ ],
+ "properties": {
+ "payment_experience_type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentExperience"
+ }
+ ],
+ "nullable": true
+ },
+ "eligible_connectors": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The list of eligible connectors for a given payment experience",
+ "example": [
+ "stripe",
+ "adyen"
+ ]
+ }
+ }
+ },
+ "PaymentLinkBackgroundImageConfig": {
+ "type": "object",
+ "required": [
+ "url"
+ ],
+ "properties": {
+ "url": {
+ "type": "string",
+ "description": "URL of the image",
+ "example": "https://hyperswitch.io/favicon.ico"
+ },
+ "position": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ElementPosition"
+ }
+ ],
+ "nullable": true
+ },
+ "size": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ElementSize"
+ }
+ ],
+ "nullable": true
+ }
+ }
+ },
"PaymentLinkConfig": {
"type": "object",
"required": [
@@ -14951,7 +15964,9 @@
"seller_name",
"sdk_layout",
"display_sdk_only",
- "enabled_saved_payment_method"
+ "enabled_saved_payment_method",
+ "hide_card_nickname_field",
+ "show_card_form_by_default"
],
"properties": {
"theme": {
@@ -14978,6 +15993,14 @@
"type": "boolean",
"description": "Enable saved payment method option for payment link"
},
+ "hide_card_nickname_field": {
+ "type": "boolean",
+ "description": "Hide card nickname field option for payment link"
+ },
+ "show_card_form_by_default": {
+ "type": "boolean",
+ "description": "Show card form by default for payment link"
+ },
"allowed_domains": {
"type": "array",
"items": {
@@ -14994,6 +16017,32 @@
},
"description": "Dynamic details related to merchant to be rendered in payment link",
"nullable": true
+ },
+ "background_image": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentLinkBackgroundImageConfig"
+ }
+ ],
+ "nullable": true
+ },
+ "details_layout": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentLinkDetailsLayout"
+ }
+ ],
+ "nullable": true
+ },
+ "branding_visibility": {
+ "type": "boolean",
+ "description": "Toggle for HyperSwitch branding visibility",
+ "nullable": true
+ },
+ "payment_button_text": {
+ "type": "string",
+ "description": "Text for payment link's handle confirm button",
+ "nullable": true
}
}
},
@@ -15042,6 +16091,20 @@
"example": true,
"nullable": true
},
+ "hide_card_nickname_field": {
+ "type": "boolean",
+ "description": "Hide card nickname field option for payment link",
+ "default": false,
+ "example": true,
+ "nullable": true
+ },
+ "show_card_form_by_default": {
+ "type": "boolean",
+ "description": "Show card form by default for payment link",
+ "default": true,
+ "example": true,
+ "nullable": true
+ },
"transaction_details": {
"type": "array",
"items": {
@@ -15049,9 +16112,37 @@
},
"description": "Dynamic details related to merchant to be rendered in payment link",
"nullable": true
+ },
+ "background_image": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentLinkBackgroundImageConfig"
+ }
+ ],
+ "nullable": true
+ },
+ "details_layout": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PaymentLinkDetailsLayout"
+ }
+ ],
+ "nullable": true
+ },
+ "payment_button_text": {
+ "type": "string",
+ "description": "Text for payment link's handle confirm button",
+ "nullable": true
}
}
},
+ "PaymentLinkDetailsLayout": {
+ "type": "string",
+ "enum": [
+ "layout1",
+ "layout2"
+ ]
+ },
"PaymentLinkInitiateRequest": {
"type": "object",
"required": [
@@ -15232,7 +16323,8 @@
"upi",
"voucher",
"gift_card",
- "open_banking"
+ "open_banking",
+ "mobile_payment"
]
},
"PaymentMethodCollectLinkRequest": {
@@ -15639,6 +16731,18 @@
"$ref": "#/components/schemas/OpenBankingData"
}
}
+ },
+ {
+ "type": "object",
+ "title": "MobilePayment",
+ "required": [
+ "mobile_payment"
+ ],
+ "properties": {
+ "mobile_payment": {
+ "$ref": "#/components/schemas/MobilePaymentData"
+ }
+ }
}
]
},
@@ -15845,6 +16949,17 @@
"$ref": "#/components/schemas/OpenBankingResponse"
}
}
+ },
+ {
+ "type": "object",
+ "required": [
+ "mobile_payment"
+ ],
+ "properties": {
+ "mobile_payment": {
+ "$ref": "#/components/schemas/MobilePaymentResponse"
+ }
+ }
}
]
},
@@ -15907,28 +17022,6 @@
"jp_bacs"
]
},
- "PaymentMethodList": {
- "type": "object",
- "required": [
- "payment_method"
- ],
- "properties": {
- "payment_method": {
- "$ref": "#/components/schemas/PaymentMethod"
- },
- "payment_method_types": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/PaymentMethodType"
- },
- "description": "This is a sub-category of payment method.",
- "example": [
- "credit"
- ],
- "nullable": true
- }
- }
- },
"PaymentMethodListResponse": {
"type": "object",
"required": [
@@ -15952,19 +17045,9 @@
"payment_methods": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/PaymentMethodList"
+ "$ref": "#/components/schemas/ResponsePaymentMethodsEnabled"
},
- "description": "Information about the payment method",
- "example": [
- {
- "payment_experience": null,
- "payment_method": "wallet",
- "payment_method_issuers": [
- "labore magna ipsum",
- "aute"
- ]
- }
- ]
+ "description": "Information about the payment method"
},
"mandate_payment": {
"$ref": "#/components/schemas/MandateType"
@@ -16082,7 +17165,7 @@
"created": {
"type": "string",
"format": "date-time",
- "description": "A timestamp (ISO 8601 code) that determines when the customer was created",
+ "description": "A timestamp (ISO 8601 code) that determines when the payment method was created",
"example": "2023-01-18T11:04:09.922Z",
"nullable": true
},
@@ -16184,6 +17267,7 @@
"open_banking_uk",
"pay_bright",
"paypal",
+ "paze",
"pix",
"pay_safe_card",
"przelewy24",
@@ -16213,7 +17297,8 @@
"pay_easy",
"local_bank_transfer",
"mifinity",
- "open_banking_pis"
+ "open_banking_pis",
+ "direct_carrier_billing"
]
},
"PaymentMethodUpdate": {
@@ -16391,7 +17476,7 @@
"amount_to_capture": {
"type": "integer",
"format": "int64",
- "description": "The Amount to be captured/ debited from the user's payment method.",
+ "description": "The Amount to be captured/ debited from the user's payment method. If not passed the full amount will be captured.",
"example": 6540
},
"refund_uncaptured_amount": {
@@ -16450,6 +17535,13 @@
"nullable": true,
"minimum": 0
},
+ "order_tax_amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Total tax amount applicable to the order",
+ "example": 6540,
+ "nullable": true
+ },
"currency": {
"allOf": [
{
@@ -16777,10 +17869,10 @@
],
"nullable": true
},
- "charges": {
+ "split_payments": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentChargeRequest"
+ "$ref": "#/components/schemas/SplitPaymentsRequest"
}
],
"nullable": true
@@ -16796,6 +17888,22 @@
"type": "boolean",
"description": "Whether to calculate tax for this payment intent",
"nullable": true
+ },
+ "psd2_sca_exemption_type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ScaExemptionType"
+ }
+ ],
+ "nullable": true
+ },
+ "ctp_service_details": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CtpServiceDetails"
+ }
+ ],
+ "nullable": true
}
}
},
@@ -16812,6 +17920,13 @@
"description": "The payment amount. Amount for the payment in the lowest denomination of the currency, (i.e) in cents for USD denomination, in yen for JPY denomination etc. E.g., Pass 100 to charge $1.00 and 1 for 1¥ since ¥ is a zero-decimal currency. Read more about [the Decimal and Non-Decimal Currencies](https://github.com/juspay/hyperswitch/wiki/Decimal-and-Non%E2%80%90Decimal-Currencies)",
"minimum": 0
},
+ "order_tax_amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Total tax amount applicable to the order",
+ "example": 6540,
+ "nullable": true
+ },
"currency": {
"$ref": "#/components/schemas/Currency"
},
@@ -17147,10 +18262,10 @@
],
"nullable": true
},
- "charges": {
+ "split_payments": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentChargeRequest"
+ "$ref": "#/components/schemas/SplitPaymentsRequest"
}
],
"nullable": true
@@ -17166,6 +18281,22 @@
"type": "boolean",
"description": "Whether to calculate tax for this payment intent",
"nullable": true
+ },
+ "psd2_sca_exemption_type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ScaExemptionType"
+ }
+ ],
+ "nullable": true
+ },
+ "ctp_service_details": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CtpServiceDetails"
+ }
+ ],
+ "nullable": true
}
}
},
@@ -17216,6 +18347,13 @@
"description": "The payment net amount. net_amount = amount + surcharge_details.surcharge_amount + surcharge_details.tax_amount + shipping_cost + order_tax_amount,\nIf no surcharge_details, shipping_cost, order_tax_amount, net_amount = amount",
"example": 6540
},
+ "shipping_cost": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The shipping cost for the payment.",
+ "example": 6540,
+ "nullable": true
+ },
"amount_capturable": {
"type": "integer",
"format": "int64",
@@ -17666,10 +18804,10 @@
"example": "2022-09-10T10:11:12Z",
"nullable": true
},
- "charges": {
+ "split_payments": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentChargeResponse"
+ "$ref": "#/components/schemas/SplitPaymentsResponse"
}
],
"nullable": true
@@ -17718,6 +18856,11 @@
},
"payment_method_type": {
"$ref": "#/components/schemas/PaymentMethodType"
+ },
+ "session_id": {
+ "type": "string",
+ "description": "Session Id",
+ "nullable": true
}
}
},
@@ -17850,26 +18993,82 @@
}
}
},
- "PaymentsRequest": {
+ "PaymentsPostSessionTokensRequest": {
"type": "object",
+ "required": [
+ "client_secret",
+ "payment_method_type",
+ "payment_method"
+ ],
"properties": {
- "amount": {
- "type": "integer",
- "format": "int64",
- "description": "The payment amount. Amount for the payment in the lowest denomination of the currency, (i.e) in cents for USD denomination, in yen for JPY denomination etc. E.g., Pass 100 to charge $1.00 and 1 for 1¥ since ¥ is a zero-decimal currency. Read more about [the Decimal and Non-Decimal Currencies](https://github.com/juspay/hyperswitch/wiki/Decimal-and-Non%E2%80%90Decimal-Currencies)",
- "example": 6540,
- "nullable": true,
- "minimum": 0
+ "client_secret": {
+ "type": "string",
+ "description": "It's a token used for client side verification."
},
- "currency": {
- "allOf": [
- {
- "$ref": "#/components/schemas/Currency"
- }
- ],
- "nullable": true
+ "payment_method_type": {
+ "$ref": "#/components/schemas/PaymentMethodType"
},
- "amount_to_capture": {
+ "payment_method": {
+ "$ref": "#/components/schemas/PaymentMethod"
+ }
+ }
+ },
+ "PaymentsPostSessionTokensResponse": {
+ "type": "object",
+ "required": [
+ "payment_id",
+ "status"
+ ],
+ "properties": {
+ "payment_id": {
+ "type": "string",
+ "description": "The identifier for the payment"
+ },
+ "next_action": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/NextActionData"
+ }
+ ],
+ "nullable": true
+ },
+ "status": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/IntentStatus"
+ }
+ ],
+ "default": "requires_confirmation"
+ }
+ }
+ },
+ "PaymentsRequest": {
+ "type": "object",
+ "properties": {
+ "amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The payment amount. Amount for the payment in the lowest denomination of the currency, (i.e) in cents for USD denomination, in yen for JPY denomination etc. E.g., Pass 100 to charge $1.00 and 1 for 1¥ since ¥ is a zero-decimal currency. Read more about [the Decimal and Non-Decimal Currencies](https://github.com/juspay/hyperswitch/wiki/Decimal-and-Non%E2%80%90Decimal-Currencies)",
+ "example": 6540,
+ "nullable": true,
+ "minimum": 0
+ },
+ "order_tax_amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Total tax amount applicable to the order",
+ "example": 6540,
+ "nullable": true
+ },
+ "currency": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Currency"
+ }
+ ],
+ "nullable": true
+ },
+ "amount_to_capture": {
"type": "integer",
"format": "int64",
"description": "The Amount to be captured / debited from the users payment method. It shall be in lowest denomination of the currency. (i.e) in cents for USD denomination, in paisa for INR denomination etc., If not provided, the default amount_to_capture will be the payment amount. Also, it must be less than or equal to the original payment account.",
@@ -18280,10 +19479,10 @@
],
"nullable": true
},
- "charges": {
+ "split_payments": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentChargeRequest"
+ "$ref": "#/components/schemas/SplitPaymentsRequest"
}
],
"nullable": true
@@ -18299,6 +19498,22 @@
"type": "boolean",
"description": "Whether to calculate tax for this payment intent",
"nullable": true
+ },
+ "psd2_sca_exemption_type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ScaExemptionType"
+ }
+ ],
+ "nullable": true
+ },
+ "ctp_service_details": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CtpServiceDetails"
+ }
+ ],
+ "nullable": true
}
},
"additionalProperties": false
@@ -18350,6 +19565,13 @@
"description": "The payment net amount. net_amount = amount + surcharge_details.surcharge_amount + surcharge_details.tax_amount + shipping_cost + order_tax_amount,\nIf no surcharge_details, shipping_cost, order_tax_amount, net_amount = amount",
"example": 6540
},
+ "shipping_cost": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The shipping cost for the payment.",
+ "example": 6540,
+ "nullable": true
+ },
"amount_capturable": {
"type": "integer",
"format": "int64",
@@ -18825,10 +20047,10 @@
"example": "2022-09-10T10:11:12Z",
"nullable": true
},
- "charges": {
+ "split_payments": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentChargeResponse"
+ "$ref": "#/components/schemas/SplitPaymentsResponse"
}
],
"nullable": true
@@ -18984,6 +20206,13 @@
"nullable": true,
"minimum": 0
},
+ "order_tax_amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Total tax amount applicable to the order",
+ "example": 6540,
+ "nullable": true
+ },
"currency": {
"allOf": [
{
@@ -19306,10 +20535,10 @@
],
"nullable": true
},
- "charges": {
+ "split_payments": {
"allOf": [
{
- "$ref": "#/components/schemas/PaymentChargeRequest"
+ "$ref": "#/components/schemas/SplitPaymentsRequest"
}
],
"nullable": true
@@ -19325,6 +20554,22 @@
"type": "boolean",
"description": "Whether to calculate tax for this payment intent",
"nullable": true
+ },
+ "psd2_sca_exemption_type": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ScaExemptionType"
+ }
+ ],
+ "nullable": true
+ },
+ "ctp_service_details": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/CtpServiceDetails"
+ }
+ ],
+ "nullable": true
}
}
},
@@ -20882,6 +22127,56 @@
}
}
},
+ "PazeSessionTokenResponse": {
+ "type": "object",
+ "required": [
+ "client_id",
+ "client_name",
+ "client_profile_id",
+ "transaction_currency_code",
+ "transaction_amount"
+ ],
+ "properties": {
+ "client_id": {
+ "type": "string",
+ "description": "Paze Client ID"
+ },
+ "client_name": {
+ "type": "string",
+ "description": "Client Name to be displayed on the Paze screen"
+ },
+ "client_profile_id": {
+ "type": "string",
+ "description": "Paze Client Profile ID"
+ },
+ "transaction_currency_code": {
+ "$ref": "#/components/schemas/Currency"
+ },
+ "transaction_amount": {
+ "type": "string",
+ "description": "The transaction amount",
+ "example": "38.02"
+ },
+ "email_address": {
+ "type": "string",
+ "description": "Email Address",
+ "example": "johntest@test.com",
+ "nullable": true,
+ "maxLength": 255
+ }
+ }
+ },
+ "PazeWalletData": {
+ "type": "object",
+ "required": [
+ "complete_response"
+ ],
+ "properties": {
+ "complete_response": {
+ "type": "string"
+ }
+ }
+ },
"PhoneDetails": {
"type": "object",
"properties": {
@@ -21219,7 +22514,7 @@
},
"is_network_tokenization_enabled": {
"type": "boolean",
- "description": "Indicates if is_network_tokenization_enabled is enabled or not.\nIf set to `true` is_network_tokenization_enabled will be checked."
+ "description": "Indicates if network tokenization is enabled or not."
},
"is_auto_retries_enabled": {
"type": "boolean",
@@ -21232,6 +22527,15 @@
"description": "Maximum number of auto retries allowed for a payment",
"nullable": true,
"minimum": 0
+ },
+ "is_click_to_pay_enabled": {
+ "type": "boolean",
+ "description": "Indicates if click to pay is enabled or not."
+ },
+ "authentication_product_ids": {
+ "type": "object",
+ "description": "Product authentication ids",
+ "nullable": true
}
},
"additionalProperties": false
@@ -21264,7 +22568,8 @@
"redirect_to_merchant_with_http_post",
"is_tax_connector_enabled",
"is_network_tokenization_enabled",
- "is_auto_retries_enabled"
+ "is_auto_retries_enabled",
+ "is_click_to_pay_enabled"
],
"properties": {
"merchant_id": {
@@ -21446,7 +22751,7 @@
},
"is_network_tokenization_enabled": {
"type": "boolean",
- "description": "Indicates if is_network_tokenization_enabled is enabled or not.\nIf set to `true` is_network_tokenization_enabled will be checked.",
+ "description": "Indicates if network tokenization is enabled or not.",
"default": false,
"example": false
},
@@ -21461,6 +22766,17 @@
"format": "int32",
"description": "Maximum number of auto retries allowed for a payment",
"nullable": true
+ },
+ "is_click_to_pay_enabled": {
+ "type": "boolean",
+ "description": "Indicates if click to pay is enabled or not.",
+ "default": false,
+ "example": false
+ },
+ "authentication_product_ids": {
+ "type": "object",
+ "description": "Product authentication ids",
+ "nullable": true
}
}
},
@@ -21637,6 +22953,24 @@
"$ref": "#/components/schemas/ProcessorPaymentToken"
}
}
+ },
+ {
+ "type": "object",
+ "required": [
+ "type",
+ "data"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "network_transaction_id_and_card_details"
+ ]
+ },
+ "data": {
+ "$ref": "#/components/schemas/NetworkTransactionIdAndCardDetails"
+ }
+ }
}
],
"description": "Details required for recurring payment",
@@ -21644,6 +22978,16 @@
"propertyName": "type"
}
},
+ "RecurringPaymentIntervalUnit": {
+ "type": "string",
+ "enum": [
+ "year",
+ "month",
+ "day",
+ "hour",
+ "minute"
+ ]
+ },
"RedirectResponse": {
"type": "object",
"properties": {
@@ -21657,22 +23001,6 @@
}
}
},
- "RefundAggregateResponse": {
- "type": "object",
- "required": [
- "status_with_count"
- ],
- "properties": {
- "status_with_count": {
- "type": "object",
- "description": "The list of refund status with their count",
- "additionalProperties": {
- "type": "integer",
- "format": "int64"
- }
- }
- }
- },
"RefundListRequest": {
"allOf": [
{
@@ -21849,10 +23177,10 @@
],
"nullable": true
},
- "charges": {
+ "split_refunds": {
"allOf": [
{
- "$ref": "#/components/schemas/ChargeRefunds"
+ "$ref": "#/components/schemas/SplitRefund"
}
],
"nullable": true
@@ -21940,10 +23268,10 @@
"description": "The merchant_connector_id of the processor through which this payment went through",
"nullable": true
},
- "charges": {
+ "split_refunds": {
"allOf": [
{
- "$ref": "#/components/schemas/ChargeRefunds"
+ "$ref": "#/components/schemas/SplitRefund"
}
],
"nullable": true
@@ -21986,6 +23314,170 @@
},
"additionalProperties": false
},
+ "RelayData": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "refund"
+ ],
+ "properties": {
+ "refund": {
+ "$ref": "#/components/schemas/RelayRefundRequest"
+ }
+ }
+ }
+ ]
+ },
+ "RelayError": {
+ "type": "object",
+ "required": [
+ "code",
+ "message"
+ ],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "The error code"
+ },
+ "message": {
+ "type": "string",
+ "description": "The error message"
+ }
+ }
+ },
+ "RelayRefundRequest": {
+ "type": "object",
+ "required": [
+ "amount",
+ "currency"
+ ],
+ "properties": {
+ "amount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The amount that is being refunded",
+ "example": 6540
+ },
+ "currency": {
+ "$ref": "#/components/schemas/Currency"
+ },
+ "reason": {
+ "type": "string",
+ "description": "The reason for the refund",
+ "example": "Customer returned the product",
+ "nullable": true,
+ "maxLength": 255
+ }
+ }
+ },
+ "RelayRequest": {
+ "type": "object",
+ "required": [
+ "connector_resource_id",
+ "connector_id",
+ "type"
+ ],
+ "properties": {
+ "connector_resource_id": {
+ "type": "string",
+ "description": "The identifier that is associated to a resource at the connector reference to which the relay request is being made",
+ "example": "7256228702616471803954"
+ },
+ "connector_id": {
+ "type": "string",
+ "description": "Identifier of the connector ( merchant connector account ) which was chosen to make the payment",
+ "example": "mca_5apGeP94tMts6rg3U3kR"
+ },
+ "type": {
+ "$ref": "#/components/schemas/RelayType"
+ },
+ "data": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RelayData"
+ }
+ ],
+ "nullable": true
+ }
+ }
+ },
+ "RelayResponse": {
+ "type": "object",
+ "required": [
+ "id",
+ "status",
+ "connector_resource_id",
+ "connector_id",
+ "profile_id",
+ "type"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "The unique identifier for the Relay",
+ "example": "relay_mbabizu24mvu3mela5njyhpit4"
+ },
+ "status": {
+ "$ref": "#/components/schemas/RelayStatus"
+ },
+ "connector_resource_id": {
+ "type": "string",
+ "description": "The identifier that is associated to a resource at the connector reference to which the relay request is being made",
+ "example": "pi_3MKEivSFNglxLpam0ZaL98q9"
+ },
+ "error": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RelayError"
+ }
+ ],
+ "nullable": true
+ },
+ "connector_reference_id": {
+ "type": "string",
+ "description": "The identifier that is associated to a resource at the connector to which the relay request is being made",
+ "example": "re_3QY4TnEOqOywnAIx1Mm1p7GQ",
+ "nullable": true
+ },
+ "connector_id": {
+ "type": "string",
+ "description": "Identifier of the connector ( merchant connector account ) which was chosen to make the payment",
+ "example": "mca_5apGeP94tMts6rg3U3kR"
+ },
+ "profile_id": {
+ "type": "string",
+ "description": "The business profile that is associated with this relay request.",
+ "example": "pro_abcdefghijklmnopqrstuvwxyz"
+ },
+ "type": {
+ "$ref": "#/components/schemas/RelayType"
+ },
+ "data": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RelayData"
+ }
+ ],
+ "nullable": true
+ }
+ }
+ },
+ "RelayStatus": {
+ "type": "string",
+ "enum": [
+ "created",
+ "pending",
+ "success",
+ "failure"
+ ]
+ },
+ "RelayType": {
+ "type": "string",
+ "enum": [
+ "refund"
+ ]
+ },
"RequestPaymentMethodTypes": {
"type": "object",
"required": [
@@ -22106,6 +23598,97 @@
}
}
},
+ "ResponsePaymentMethodTypes": {
+ "type": "object",
+ "required": [
+ "payment_method_type"
+ ],
+ "properties": {
+ "payment_method_type": {
+ "$ref": "#/components/schemas/PaymentMethodType"
+ },
+ "payment_experience": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PaymentExperienceTypes"
+ },
+ "description": "The list of payment experiences enabled, if applicable for a payment method type",
+ "nullable": true
+ },
+ "card_networks": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CardNetworkTypes"
+ },
+ "description": "The list of card networks enabled, if applicable for a payment method type",
+ "nullable": true
+ },
+ "bank_names": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BankCodeResponse"
+ },
+ "description": "The list of banks enabled, if applicable for a payment method type",
+ "nullable": true
+ },
+ "bank_debits": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BankDebitTypes"
+ }
+ ],
+ "nullable": true
+ },
+ "bank_transfers": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BankTransferTypes"
+ }
+ ],
+ "nullable": true
+ },
+ "required_fields": {
+ "type": "object",
+ "description": "Required fields for the payment_method_type.",
+ "additionalProperties": {
+ "$ref": "#/components/schemas/RequiredFieldInfo"
+ },
+ "nullable": true
+ },
+ "surcharge_details": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SurchargeDetailsResponse"
+ }
+ ],
+ "nullable": true
+ },
+ "pm_auth_connector": {
+ "type": "string",
+ "description": "auth service connector label for this payment method type, if exists",
+ "nullable": true
+ }
+ }
+ },
+ "ResponsePaymentMethodsEnabled": {
+ "type": "object",
+ "required": [
+ "payment_method",
+ "payment_method_types"
+ ],
+ "properties": {
+ "payment_method": {
+ "$ref": "#/components/schemas/PaymentMethod"
+ },
+ "payment_method_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ResponsePaymentMethodTypes"
+ },
+ "description": "The list of payment method types enabled for a connector account"
+ }
+ }
+ },
"RetrieveApiKeyResponse": {
"type": "object",
"description": "The response body for retrieving an API Key.",
@@ -22334,8 +23917,10 @@
"cybersource",
"datatrans",
"deutschebank",
+ "digitalvirgo",
"dlocal",
"ebanx",
+ "elavon",
"fiserv",
"fiservemea",
"fiuu",
@@ -22346,11 +23931,13 @@
"helcim",
"iatapay",
"itaubank",
+ "jpmorgan",
"klarna",
"mifinity",
"mollie",
"multisafepay",
"nexinets",
+ "nexixpay",
"nmi",
"noon",
"novalnet",
@@ -22379,6 +23966,7 @@
"wise",
"worldline",
"worldpay",
+ "xendit",
"zen",
"plaid",
"zsl"
@@ -22650,11 +24238,65 @@
"FORMAT_TOTAL_ESTIMATED_AMOUNT"
]
},
+ "SamsungPayAppWalletData": {
+ "type": "object",
+ "required": [
+ "3_d_s",
+ "payment_card_brand",
+ "payment_currency_type",
+ "payment_last4_fpan"
+ ],
+ "properties": {
+ "3_d_s": {
+ "$ref": "#/components/schemas/SamsungPayTokenData"
+ },
+ "payment_card_brand": {
+ "$ref": "#/components/schemas/SamsungPayCardBrand"
+ },
+ "payment_currency_type": {
+ "type": "string",
+ "description": "Currency type of the payment"
+ },
+ "payment_last4_dpan": {
+ "type": "string",
+ "description": "Last 4 digits of the device specific card number",
+ "nullable": true
+ },
+ "payment_last4_fpan": {
+ "type": "string",
+ "description": "Last 4 digits of the card number"
+ },
+ "merchant_ref": {
+ "type": "string",
+ "description": "Merchant reference id that was passed in the session call request",
+ "nullable": true
+ },
+ "method": {
+ "type": "string",
+ "description": "Specifies authentication method used",
+ "nullable": true
+ },
+ "recurring_payment": {
+ "type": "boolean",
+ "description": "Value if credential is enabled for recurring payment",
+ "nullable": true
+ }
+ }
+ },
+ "SamsungPayCardBrand": {
+ "type": "string",
+ "enum": [
+ "visa",
+ "mastercard",
+ "amex",
+ "discover",
+ "unknown"
+ ]
+ },
"SamsungPayMerchantPaymentInformation": {
"type": "object",
"required": [
"name",
- "url",
"country_code"
],
"properties": {
@@ -22664,7 +24306,8 @@
},
"url": {
"type": "string",
- "description": "Merchant domain that process payments"
+ "description": "Merchant domain that process payments, required for web payments",
+ "nullable": true
},
"country_code": {
"$ref": "#/components/schemas/CountryAlpha2"
@@ -22741,7 +24384,28 @@
}
}
},
- "SamsungPayWalletCredentials": {
+ "SamsungPayWalletCredentials": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/SamsungPayWebWalletData"
+ },
+ {
+ "$ref": "#/components/schemas/SamsungPayAppWalletData"
+ }
+ ]
+ },
+ "SamsungPayWalletData": {
+ "type": "object",
+ "required": [
+ "payment_credential"
+ ],
+ "properties": {
+ "payment_credential": {
+ "$ref": "#/components/schemas/SamsungPayWalletCredentials"
+ }
+ }
+ },
+ "SamsungPayWebWalletData": {
"type": "object",
"required": [
"card_brand",
@@ -22760,8 +24424,7 @@
"nullable": true
},
"card_brand": {
- "type": "string",
- "description": "Brand of the payment card"
+ "$ref": "#/components/schemas/SamsungPayCardBrand"
},
"card_last4digits": {
"type": "string",
@@ -22772,16 +24435,13 @@
}
}
},
- "SamsungPayWalletData": {
- "type": "object",
- "required": [
- "payment_credential"
- ],
- "properties": {
- "payment_credential": {
- "$ref": "#/components/schemas/SamsungPayWalletCredentials"
- }
- }
+ "ScaExemptionType": {
+ "type": "string",
+ "description": "SCA Exemptions types available for authentication",
+ "enum": [
+ "low_value",
+ "transaction_risk_analysis"
+ ]
},
"SdkInformation": {
"type": "object",
@@ -22845,6 +24505,10 @@
"properties": {
"next_action": {
"$ref": "#/components/schemas/NextActionCall"
+ },
+ "order_id": {
+ "type": "string",
+ "nullable": true
}
}
},
@@ -22984,7 +24648,8 @@
"account_holder_name",
"bic",
"country",
- "iban"
+ "iban",
+ "reference"
],
"properties": {
"account_holder_name": {
@@ -23001,6 +24666,10 @@
"iban": {
"type": "string",
"example": "123456789"
+ },
+ "reference": {
+ "type": "string",
+ "example": "U2PVVSEV4V9Y"
}
}
},
@@ -23132,6 +24801,48 @@
}
]
},
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/PazeSessionTokenResponse"
+ },
+ {
+ "type": "object",
+ "required": [
+ "wallet_name"
+ ],
+ "properties": {
+ "wallet_name": {
+ "type": "string",
+ "enum": [
+ "paze"
+ ]
+ }
+ }
+ }
+ ]
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ClickToPaySessionResponse"
+ },
+ {
+ "type": "object",
+ "required": [
+ "wallet_name"
+ ],
+ "properties": {
+ "wallet_name": {
+ "type": "string",
+ "enum": [
+ "click_to_pay"
+ ]
+ }
+ }
+ }
+ ]
+ },
{
"type": "object",
"required": [
@@ -23202,6 +24913,60 @@
}
]
},
+ "SizeVariants": {
+ "type": "string",
+ "enum": [
+ "cover",
+ "contain"
+ ]
+ },
+ "SplitPaymentsRequest": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "stripe_split_payment"
+ ],
+ "properties": {
+ "stripe_split_payment": {
+ "$ref": "#/components/schemas/StripeSplitPaymentRequest"
+ }
+ }
+ }
+ ],
+ "description": "Fee information for Split Payments to be charged on the payment being collected"
+ },
+ "SplitPaymentsResponse": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "stripe_split_payment"
+ ],
+ "properties": {
+ "stripe_split_payment": {
+ "$ref": "#/components/schemas/StripeSplitPaymentsResponse"
+ }
+ }
+ }
+ ]
+ },
+ "SplitRefund": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "stripe_split_refund"
+ ],
+ "properties": {
+ "stripe_split_refund": {
+ "$ref": "#/components/schemas/StripeSplitRefundRequest"
+ }
+ }
+ }
+ ],
+ "description": "Charge specific fields for controlling the revert of funds from either platform or connected account. Check sub-fields for more details."
+ },
"StraightThroughAlgorithm": {
"oneOf": [
{
@@ -23279,13 +25044,84 @@
"destination"
]
},
+ "StripeSplitPaymentRequest": {
+ "type": "object",
+ "description": "Fee information for Split Payments to be charged on the payment being collected for Stripe",
+ "required": [
+ "charge_type",
+ "application_fees",
+ "transfer_account_id"
+ ],
+ "properties": {
+ "charge_type": {
+ "$ref": "#/components/schemas/PaymentChargeType"
+ },
+ "application_fees": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Platform fees to be collected on the payment",
+ "example": 6540
+ },
+ "transfer_account_id": {
+ "type": "string",
+ "description": "Identifier for the reseller's account to send the funds to"
+ }
+ },
+ "additionalProperties": false
+ },
+ "StripeSplitPaymentsResponse": {
+ "type": "object",
+ "description": "Fee information to be charged on the payment being collected",
+ "required": [
+ "charge_type",
+ "application_fees",
+ "transfer_account_id"
+ ],
+ "properties": {
+ "charge_id": {
+ "type": "string",
+ "description": "Identifier for charge created for the payment",
+ "nullable": true
+ },
+ "charge_type": {
+ "$ref": "#/components/schemas/PaymentChargeType"
+ },
+ "application_fees": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Platform fees collected on the payment",
+ "example": 6540
+ },
+ "transfer_account_id": {
+ "type": "string",
+ "description": "Identifier for the reseller's account where the funds were transferred"
+ }
+ }
+ },
+ "StripeSplitRefundRequest": {
+ "type": "object",
+ "description": "Charge specific fields for controlling the revert of funds from either platform or connected account for Stripe. Check sub-fields for more details.",
+ "properties": {
+ "revert_platform_fee": {
+ "type": "boolean",
+ "description": "Toggle for reverting the application fee that was collected for the payment.\nIf set to false, the funds are pulled from the destination account.",
+ "nullable": true
+ },
+ "revert_transfer": {
+ "type": "boolean",
+ "description": "Toggle for reverting the transfer that was made during the charge.\nIf set to false, the funds are pulled from the main platform's account.",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
"SuccessBasedRoutingConfig": {
"type": "object",
"properties": {
"params": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/SuccessBasedRoutingConfigParams"
+ "$ref": "#/components/schemas/DynamicRoutingConfigParams"
},
"nullable": true
},
@@ -23329,27 +25165,49 @@
}
}
},
- "SuccessBasedRoutingConfigParams": {
- "type": "string",
- "enum": [
- "PaymentMethod",
- "PaymentMethodType",
- "Currency",
- "AuthenticationType"
- ]
- },
- "SuccessBasedRoutingUpdateConfigQuery": {
+ "SupportedPaymentMethod": {
"type": "object",
"required": [
- "algorithm_id",
- "profile_id"
+ "payment_method",
+ "payment_method_type",
+ "mandates",
+ "refunds",
+ "supported_capture_methods"
],
"properties": {
- "algorithm_id": {
- "type": "string"
+ "payment_method": {
+ "$ref": "#/components/schemas/PaymentMethod"
},
- "profile_id": {
- "type": "string"
+ "payment_method_type": {
+ "$ref": "#/components/schemas/PaymentMethodType"
+ },
+ "mandates": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "refunds": {
+ "$ref": "#/components/schemas/FeatureStatus"
+ },
+ "supported_capture_methods": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CaptureMethod"
+ }
+ },
+ "supported_countries": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CountryAlpha2"
+ },
+ "uniqueItems": true,
+ "nullable": true
+ },
+ "supported_currencies": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Currency"
+ },
+ "uniqueItems": true,
+ "nullable": true
}
}
},
@@ -23359,8 +25217,7 @@
"surcharge",
"display_surcharge_amount",
"display_tax_on_surcharge_amount",
- "display_total_surcharge_amount",
- "display_final_amount"
+ "display_total_surcharge_amount"
],
"properties": {
"surcharge": {
@@ -23388,11 +25245,6 @@
"type": "number",
"format": "double",
"description": "sum of display_surcharge_amount and display_tax_on_surcharge_amount"
- },
- "display_final_amount": {
- "type": "number",
- "format": "double",
- "description": "sum of original amount,"
}
}
},
@@ -23575,6 +25427,28 @@
}
}
},
+ "ToggleDynamicRoutingPath": {
+ "type": "object",
+ "required": [
+ "profile_id"
+ ],
+ "properties": {
+ "profile_id": {
+ "type": "string"
+ }
+ }
+ },
+ "ToggleDynamicRoutingQuery": {
+ "type": "object",
+ "required": [
+ "enable"
+ ],
+ "properties": {
+ "enable": {
+ "$ref": "#/components/schemas/DynamicRoutingFeatures"
+ }
+ }
+ },
"ToggleKVRequest": {
"type": "object",
"required": [
@@ -23608,28 +25482,6 @@
}
}
},
- "ToggleSuccessBasedRoutingPath": {
- "type": "object",
- "required": [
- "profile_id"
- ],
- "properties": {
- "profile_id": {
- "type": "string"
- }
- }
- },
- "ToggleSuccessBasedRoutingQuery": {
- "type": "object",
- "required": [
- "status"
- ],
- "properties": {
- "status": {
- "type": "boolean"
- }
- }
- },
"TouchNGoRedirection": {
"type": "object"
},
@@ -24388,6 +26240,17 @@
}
}
},
+ {
+ "type": "object",
+ "required": [
+ "paze"
+ ],
+ "properties": {
+ "paze": {
+ "$ref": "#/components/schemas/PazeWalletData"
+ }
+ }
+ },
{
"type": "object",
"required": [
@@ -24530,7 +26393,8 @@
}
}
}
- ]
+ ],
+ "description": "Hyperswitch supports SDK integration with Apple Pay and Google Pay wallets. For other wallets, we integrate with their respective connectors, redirecting the customer to the connector for wallet payments. As a result, we don’t receive any payment method data in the confirm call for payments made through other wallets."
},
"WeChatPay": {
"type": "object"
diff --git a/api-reference/rust_locker_open_api_spec.yml b/api-reference/rust_locker_open_api_spec.yml
index 729886d9cd0d..17a19fec44da 100644
--- a/api-reference/rust_locker_open_api_spec.yml
+++ b/api-reference/rust_locker_open_api_spec.yml
@@ -2,16 +2,16 @@ openapi: "3.0.2"
info:
title: Tartarus - OpenAPI 3.0
description: |-
- This the the open API 3.0 specification for the card locker.
+ This is the OpenAPI 3.0 specification for the card locker.
This is used by the [hyperswitch](https://github.com/juspay/hyperswitch) for storing card information securely.
version: "1.0"
tags:
- name: Key Custodian
description: API used to initialize the locker after deployment.
- name: Data
- description: CRUD APIs to for working with data to be stored in the locker
+ description: CRUD APIs for working with data to be stored in the locker
- name: Cards
- description: CRUD APIs to for working with cards data to be stored in the locker (deprecated)
+ description: CRUD APIs for working with cards data to be stored in the locker (deprecated)
paths:
/custodian/key1:
post:
@@ -39,7 +39,7 @@ paths:
tags:
- Key Custodian
summary: Provide Key 2
- description: Provide the first key to unlock the locker
+ description: Provide the second key to unlock the locker
operationId: setKey2
requestBody:
description: Provide key 2 to unlock the locker
diff --git a/aws/hyperswitch_aws_setup.sh b/aws/hyperswitch_aws_setup.sh
index dd71b698e93e..e3af286a58da 100644
--- a/aws/hyperswitch_aws_setup.sh
+++ b/aws/hyperswitch_aws_setup.sh
@@ -38,12 +38,11 @@ echo "Creating Security Group for Application..."
export EC2_SG="application-sg"
-echo `(aws ec2 create-security-group \
+echo "$(aws ec2 create-security-group \
--region $REGION \
--group-name $EC2_SG \
--description "Security Group for Hyperswitch EC2 instance" \
---tag-specifications "ResourceType=security-group,Tags=[{Key=ManagedBy,Value=hyperswitch}]" \
-)`
+--tag-specifications "ResourceType=security-group,Tags=[{Key=ManagedBy,Value=hyperswitch}]")"
export APP_SG_ID=$(aws ec2 describe-security-groups --group-names $EC2_SG --region $REGION --output text --query 'SecurityGroups[0].GroupId')
@@ -51,24 +50,23 @@ echo "Security Group for Application CREATED.\n"
echo "Creating Security Group ingress for port 80..."
-echo `aws ec2 authorize-security-group-ingress \
+echo "$(aws ec2 authorize-security-group-ingress \
--group-id $APP_SG_ID \
--protocol tcp \
--port 80 \
--cidr 0.0.0.0/0 \
---region $REGION`
+--region $REGION)"
echo "Security Group ingress for port 80 CREATED.\n"
-
echo "Creating Security Group ingress for port 22..."
-echo `aws ec2 authorize-security-group-ingress \
+echo "$(aws ec2 authorize-security-group-ingress \
--group-id $APP_SG_ID \
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0 \
---region $REGION`
+--region $REGION)"
echo "Security Group ingress for port 22 CREATED.\n"
@@ -78,11 +76,11 @@ echo "Security Group ingress for port 22 CREATED.\n"
echo "Creating Security Group for Elasticache..."
export REDIS_GROUP_NAME=redis-sg
-echo `aws ec2 create-security-group \
+echo "$(aws ec2 create-security-group \
--group-name $REDIS_GROUP_NAME \
--description "SG attached to elasticache" \
--tag-specifications "ResourceType=security-group,Tags=[{Key=ManagedBy,Value=hyperswitch}]" \
---region $REGION`
+--region $REGION)"
echo "Security Group for Elasticache CREATED.\n"
@@ -91,12 +89,12 @@ echo "Creating Inbound rules for Redis..."
export REDIS_SG_ID=$(aws ec2 describe-security-groups --group-names $REDIS_GROUP_NAME --region $REGION --output text --query 'SecurityGroups[0].GroupId')
# CREATE INBOUND RULES
-echo `aws ec2 authorize-security-group-ingress \
+echo "$(aws ec2 authorize-security-group-ingress \
--group-id $REDIS_SG_ID \
--protocol tcp \
--port 6379 \
--source-group $EC2_SG \
---region $REGION`
+--region $REGION)"
echo "Inbound rules for Redis CREATED.\n"
@@ -105,11 +103,11 @@ echo "Inbound rules for Redis CREATED.\n"
echo "Creating Security Group for RDS..."
export RDS_GROUP_NAME=rds-sg
-echo `aws ec2 create-security-group \
+echo "$(aws ec2 create-security-group \
--group-name $RDS_GROUP_NAME \
--description "SG attached to RDS" \
--tag-specifications "ResourceType=security-group,Tags=[{Key=ManagedBy,Value=hyperswitch}]" \
---region $REGION`
+--region $REGION)"
echo "Security Group for RDS CREATED.\n"
@@ -118,21 +116,21 @@ echo "Creating Inbound rules for RDS..."
export RDS_SG_ID=$(aws ec2 describe-security-groups --group-names $RDS_GROUP_NAME --region $REGION --output text --query 'SecurityGroups[0].GroupId')
# CREATE INBOUND RULES
-echo `aws ec2 authorize-security-group-ingress \
+echo "$(aws ec2 authorize-security-group-ingress \
--group-id $RDS_SG_ID \
--protocol tcp \
--port 5432 \
--source-group $EC2_SG \
---region $REGION`
+--region $REGION)"
echo "Inbound rules for RDS CREATED.\n"
-echo `aws ec2 authorize-security-group-ingress \
+echo "$(aws ec2 authorize-security-group-ingress \
--group-id $RDS_SG_ID \
--protocol tcp \
--port 5432 \
--cidr 0.0.0.0/0 \
- --region $REGION`
+ --region $REGION)"
echo "Inbound rules for RDS (from any IP) CREATED.\n"
@@ -140,7 +138,7 @@ echo "Creating Elasticache with Redis engine..."
export CACHE_CLUSTER_ID=hyperswitch-cluster
-echo `aws elasticache create-cache-cluster \
+echo "$(aws elasticache create-cache-cluster \
--cache-cluster-id $CACHE_CLUSTER_ID \
--cache-node-type cache.t3.medium \
--engine redis \
@@ -148,14 +146,14 @@ echo `aws elasticache create-cache-cluster \
--security-group-ids $REDIS_SG_ID \
--engine-version 7.0 \
--tags "Key=ManagedBy,Value=hyperswitch" \
---region $REGION`
+--region $REGION)"
echo "Elasticache with Redis engine CREATED.\n"
echo "Creating RDS with PSQL..."
export DB_INSTANCE_ID=hyperswitch-db
-echo `aws rds create-db-instance \
+echo "$(aws rds create-db-instance \
--db-instance-identifier $DB_INSTANCE_ID\
--db-instance-class db.t3.micro \
--engine postgres \
@@ -166,7 +164,7 @@ echo `aws rds create-db-instance \
--region $REGION \
--db-name hyperswitch_db \
--tags "Key=ManagedBy,Value=hyperswitch" \
- --vpc-security-group-ids $RDS_SG_ID`
+ --vpc-security-group-ids $RDS_SG_ID)"
echo "RDS with PSQL CREATED.\n"
@@ -308,17 +306,17 @@ echo "EC2 instance launched.\n"
echo "Add Tags to EC2 instance..."
-echo `aws ec2 create-tags \
+echo "$(aws ec2 create-tags \
--resources $HYPERSWITCH_INSTANCE_ID \
--tags "Key=Name,Value=hyperswitch-router" \
---region $REGION`
+--region $REGION)"
echo "Tag added to EC2 instance.\n"
-echo `aws ec2 create-tags \
+echo "$(aws ec2 create-tags \
--resources $HYPERSWITCH_INSTANCE_ID \
--tags "Key=ManagedBy,Value=hyperswitch" \
---region $REGION`
+--region $REGION)"
echo "ManagedBy tag added to EC2 instance.\n"
diff --git a/aws/hyperswitch_cleanup_setup.sh b/aws/hyperswitch_cleanup_setup.sh
index 383f23d5bd00..df75623746c9 100644
--- a/aws/hyperswitch_cleanup_setup.sh
+++ b/aws/hyperswitch_cleanup_setup.sh
@@ -45,7 +45,7 @@ for cluster_arn in $ALL_ELASTIC_CACHE; do
if [[ $? -eq 0 ]]; then
echo -n "Delete $cluster_id (Y/n)? "
if yes_or_no; then
- echo `aws elasticache delete-cache-cluster --region $REGION --cache-cluster-id $cluster_id`
+ echo "$(aws elasticache delete-cache-cluster --region $REGION --cache-cluster-id $cluster_id)"
fi
fi
done
@@ -59,7 +59,7 @@ echo -n "Deleting ( $ALL_KEY_PAIRS ) key pairs? (Y/n)?"
if yes_or_no; then
for KEY_ID in $ALL_KEY_PAIRS; do
- echo `aws ec2 delete-key-pair --key-pair-id $KEY_ID --region $REGION`
+ echo "$(aws ec2 delete-key-pair --key-pair-id $KEY_ID --region $REGION)"
done
fi
@@ -78,7 +78,7 @@ echo -n "Terminating ( $ALL_INSTANCES ) instances? (Y/n)?"
if yes_or_no; then
for INSTANCE_ID in $ALL_INSTANCES; do
- echo `aws ec2 terminate-instances --instance-ids $INSTANCE_ID --region $REGION`
+ echo "$(aws ec2 terminate-instances --instance-ids $INSTANCE_ID --region $REGION)"
done
fi
@@ -105,15 +105,15 @@ for resource_id in $ALL_DB_RESOURCES; do
echo -n "Create a snapshot before deleting ( $DB_INSTANCE_ID ) the database (Y/n)? "
if yes_or_no; then
- echo `aws rds delete-db-instance \
+ echo "$(aws rds delete-db-instance \
--db-instance-identifier $DB_INSTANCE_ID \
--region $REGION \
- --final-db-snapshot-identifier hyperswitch-db-snapshot-`date +%s``
+ --final-db-snapshot-identifier hyperswitch-db-snapshot-$(date +%s))"
else
- echo `aws rds delete-db-instance \
+ echo "$(aws rds delete-db-instance \
--region $REGION \
--db-instance-identifier $DB_INSTANCE_ID \
- --skip-final-snapshot`
+ --skip-final-snapshot)"
fi
fi
fi
diff --git a/config/config.example.toml b/config/config.example.toml
index a6aeba7427ab..999266321144 100644
--- a/config/config.example.toml
+++ b/config/config.example.toml
@@ -183,6 +183,7 @@ adyen.payout_base_url = "https://pal-test.adyen.com/"
adyen.dispute_base_url = "https://ca-test.adyen.com/"
adyenplatform.base_url = "https://balanceplatform-api-test.adyen.com/"
airwallex.base_url = "https://api-demo.airwallex.com/"
+amazonpay.base_url = "https://pay-api.amazon.com/v2"
applepay.base_url = "https://apple-pay-gateway.apple.com/"
authorizedotnet.base_url = "https://apitest.authorize.net/xml/v1/request.api"
bambora.base_url = "https://api.na.bambora.com"
@@ -202,9 +203,11 @@ cryptopay.base_url = "https://business-sandbox.cryptopay.me"
cybersource.base_url = "https://apitest.cybersource.com/"
datatrans.base_url = "https://api.sandbox.datatrans.com/"
deutschebank.base_url = "https://testmerch.directpos.de/rest-api"
+digitalvirgo.base_url = "https://dcb-integration-service-sandbox-external.staging.digitalvirgo.pl"
dlocal.base_url = "https://sandbox.dlocal.com/"
dummyconnector.base_url = "http://localhost:8080/dummy-connector"
ebanx.base_url = "https://sandbox.ebanxpay.com/"
+elavon.base_url = "https://api.demo.convergepay.com/VirtualMerchantDemo/"
fiserv.base_url = "https://cert.api.fiservapps.com/"
fiservemea.base_url = "https://prod.emea.api.fiservapps.com/sandbox"
fiuu.base_url = "https://sandbox.merchant.razer.com/"
@@ -217,7 +220,10 @@ gocardless.base_url = "https://api-sandbox.gocardless.com"
gpayments.base_url = "https://{{merchant_endpoint_prefix}}-test.api.as1.gpayments.net"
helcim.base_url = "https://api.helcim.com/"
iatapay.base_url = "https://sandbox.iata-pay.iata.org/api/v1"
+inespay.base_url = "https://apiflow.inespay.com/san/v21"
itaubank.base_url = "https://sandbox.devportal.itau.com.br/"
+jpmorgan.base_url = "https://api-mock.payments.jpmorgan.com/api/v2"
+jpmorgan.secondary_base_url= "https://id.payments.jpmorgan.com"
klarna.base_url = "https://api{{klarna_region}}.playground.klarna.com/"
mifinity.base_url = "https://demo.mifinity.com/"
mollie.base_url = "https://api.mollie.com/v2/"
@@ -227,6 +233,7 @@ netcetera.base_url = "https://{{merchant_endpoint_prefix}}.3ds-server.prev.netce
nexinets.base_url = "https://apitest.payengine.de/v1"
nexixpay.base_url = "https://xpaysandbox.nexigroup.com/api/phoenix-0.0/psp/api/v1"
nmi.base_url = "https://secure.nmi.com/"
+nomupay.base_url = "https://payout-api.sandbox.nomupay.com"
noon.base_url = "https://api-test.noonpayments.com/"
novalnet.base_url = "https://payport.novalnet.de/v2"
noon.key_mode = "Test"
@@ -246,6 +253,7 @@ powertranz.base_url = "https://staging.ptranz.com/api/"
prophetpay.base_url = "https://ccm-thirdparty.cps.golf/"
rapyd.base_url = "https://sandboxapi.rapyd.net"
razorpay.base_url = "https://sandbox.juspay.in/"
+redsys.base_url = "https://sis-t.redsys.es:25443/sis/realizarPago"
riskified.base_url = "https://sandbox.riskified.com/api"
shift4.base_url = "https://api.shift4.com/"
signifyd.base_url = "https://api.signifyd.com/"
@@ -260,12 +268,14 @@ stripe.base_url_file_upload = "https://files.stripe.com/"
trustpay.base_url = "https://test-tpgw.trustpay.eu/"
trustpay.base_url_bank_redirects = "https://aapi.trustpay.eu/"
tsys.base_url = "https://stagegw.transnox.com/"
+unified_authentication_service.base_url = "http://localhost:8000"
volt.base_url = "https://api.sandbox.volt.io/"
wellsfargo.base_url = "https://apitest.cybersource.com/"
wellsfargopayout.base_url = "https://api-sandbox.wellsfargo.com/"
wise.base_url = "https://api.sandbox.transferwise.tech/"
worldline.base_url = "https://eu.sandbox.api-ingenico.com/"
worldpay.base_url = "https://try.access.worldpay.com/"
+xendit.base_url = "https://api.xendit.co"
zsl.base_url = "https://api.sitoffalb.net/"
zen.base_url = "https://api.zen-test.com/"
zen.secondary_base_url = "https://secure.zen-test.com/"
@@ -309,6 +319,7 @@ cards = [
"cybersource",
"datatrans",
"deutschebank",
+ "digitalvirgo",
"globalpay",
"globepay",
"gocardless",
@@ -323,6 +334,7 @@ cards = [
"threedsecureio",
"thunes",
"worldpay",
+ "xendit",
"zen",
"zsl",
]
@@ -393,6 +405,8 @@ password_validity_in_days = 90 # Number of days after which password shoul
two_factor_auth_expiry_in_secs = 300 # Number of seconds after which 2FA should be done again if doing update/change from inside
totp_issuer_name = "Hyperswitch" # Name of the issuer for TOTP
base_url = "" # Base url used for user specific redirects and emails
+force_two_factor_auth = false # Whether to force two factor authentication for all users
+force_cookies = true # Whether to use only cookies for JWT extraction and authentication
#tokenization configuration which describe token lifetime and payment method for specific connector
[tokenization]
@@ -416,6 +430,7 @@ nmi = { payment_method = "card" }
payme = { payment_method = "card" }
deutschebank = { payment_method = "bank_debit" }
paybox = { payment_method = "card" }
+nexixpay = { payment_method = "card" }
[dummy_connector]
enabled = true # Whether dummy connector is enabled or not
@@ -501,6 +516,10 @@ seicomart = { country = "JP", currency = "JPY" }
pay_easy = { country = "JP", currency = "JPY" }
boleto = { country = "BR", currency = "BRL" }
+[pm_filters.bambora]
+credit = { country = "US,CA", currency = "USD" }
+debit = { country = "US,CA", currency = "USD" }
+
[pm_filters.volt]
open_banking_uk = { country = "DE,GB,AT,BE,CY,EE,ES,FI,FR,GR,HR,IE,IT,LT,LU,LV,MT,NL,PT,SI,SK,BG,CZ,DK,HU,NO,PL,RO,SE,AU,BR", currency = "EUR,GBP,DKK,NOK,PLN,SEK,AUD,BRL" }
@@ -532,11 +551,12 @@ apple_pay = { currency = "USD" }
google_pay = { currency = "USD" }
[pm_filters.cybersource]
-credit = { currency = "USD,GBP,EUR" }
-debit = { currency = "USD,GBP,EUR" }
-apple_pay = { currency = "USD,GBP,EUR" }
-google_pay = { currency = "USD,GBP,EUR" }
+credit = { currency = "USD,GBP,EUR,PLN" }
+debit = { currency = "USD,GBP,EUR,PLN" }
+apple_pay = { currency = "USD,GBP,EUR,PLN" }
+google_pay = { currency = "USD,GBP,EUR,PLN" }
samsung_pay = { currency = "USD,GBP,EUR" }
+paze = { currency = "USD" }
[pm_filters.stax]
credit = { currency = "USD" }
@@ -553,6 +573,17 @@ debit = { currency = "USD" }
[pm_filters.klarna]
klarna = { country = "AU,AT,BE,CA,CZ,DK,FI,FR,DE,GR,IE,IT,NL,NZ,NO,PL,PT,ES,SE,CH,GB,US", currency = "CHF,DKK,EUR,GBP,NOK,PLN,SEK,USD,AUD,NZD,CAD" }
+[pm_filters.nexixpay]
+credit = { country = "AT,BE,CY,EE,FI,FR,DE,GR,IE,IT,LV,LT,LU,MT,NL,PT,SK,SI,ES,BG,HR,DK,GB,NO,PL,CZ,RO,SE,CH,HU", currency = "ARS,AUD,BHD,CAD,CLP,CNY,COP,HRK,CZK,DKK,HKD,HUF,INR,JPY,KZT,JOD,KRW,KWD,MYR,MXN,NGN,NOK,PHP,QAR,RUB,SAR,SGD,VND,ZAR,SEK,CHF,THB,AED,EGP,GBP,USD,TWD,BYN,RSD,AZN,RON,TRY,AOA,BGN,EUR,UAH,PLN,BRL" }
+debit = { country = "AT,BE,CY,EE,FI,FR,DE,GR,IE,IT,LV,LT,LU,MT,NL,PT,SK,SI,ES,BG,HR,DK,GB,NO,PL,CZ,RO,SE,CH,HU", currency = "ARS,AUD,BHD,CAD,CLP,CNY,COP,HRK,CZK,DKK,HKD,HUF,INR,JPY,KZT,JOD,KRW,KWD,MYR,MXN,NGN,NOK,PHP,QAR,RUB,SAR,SGD,VND,ZAR,SEK,CHF,THB,AED,EGP,GBP,USD,TWD,BYN,RSD,AZN,RON,TRY,AOA,BGN,EUR,UAH,PLN,BRL" }
+
+[pm_filters.novalnet]
+credit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+debit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+apple_pay = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+google_pay = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+paypal = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+
[pm_filters.mifinity]
mifinity = { country = "BR,CN,SG,MY,DE,CH,DK,GB,ES,AD,GI,FI,FR,GR,HR,IT,JP,MX,AR,CO,CL,PE,VE,UY,PY,BO,EC,GT,HN,SV,NI,CR,PA,DO,CU,PR,NL,NO,PL,PT,SE,RU,TR,TW,HK,MO,AX,AL,DZ,AS,AO,AI,AG,AM,AW,AU,AT,AZ,BS,BH,BD,BB,BE,BZ,BJ,BM,BT,BQ,BA,BW,IO,BN,BG,BF,BI,KH,CM,CA,CV,KY,CF,TD,CX,CC,KM,CG,CK,CI,CW,CY,CZ,DJ,DM,EG,GQ,ER,EE,ET,FK,FO,FJ,GF,PF,TF,GA,GM,GE,GH,GL,GD,GP,GU,GG,GN,GW,GY,HT,HM,VA,IS,IN,ID,IE,IM,IL,JE,JO,KZ,KE,KI,KW,KG,LA,LV,LB,LS,LI,LT,LU,MK,MG,MW,MV,ML,MT,MH,MQ,MR,MU,YT,FM,MD,MC,MN,ME,MS,MA,MZ,NA,NR,NP,NC,NZ,NE,NG,NU,NF,MP,OM,PK,PW,PS,PG,PH,PN,QA,RE,RO,RW,BL,SH,KN,LC,MF,PM,VC,WS,SM,ST,SA,SN,RS,SC,SL,SX,SK,SI,SB,SO,ZA,GS,KR,LK,SR,SJ,SZ,TH,TL,TG,TK,TO,TT,TN,TM,TC,TV,UG,UA,AE,UZ,VU,VN,VG,VI,WF,EH,ZM", currency = "AUD,CAD,CHF,CNY,CZK,DKK,EUR,GBP,INR,JPY,NOK,NZD,PLN,RUB,SEK,ZAR,USD,EGP,UYU,UZS" }
@@ -574,6 +605,10 @@ apple_pay_ppc_key = "APPLE_PAY_PAYMENT_PROCESSING_CERTIFICATE_KEY" # Private key
apple_pay_merchant_cert = "APPLE_PAY_MERCHNAT_CERTIFICATE" # Merchant Certificate provided by Apple Pay (https://developer.apple.com/) Certificates, Identifiers & Profiles > Apple Pay Merchant Identity Certificate
apple_pay_merchant_cert_key = "APPLE_PAY_MERCHNAT_CERTIFICATE_KEY" # Private key generated by RSA:2048 algorithm. Refer Hyperswitch Docs (https://docs.hyperswitch.io/hyperswitch-cloud/payment-methods-setup/wallets/apple-pay/ios-application/) to generate the private key
+[paze_decrypt_keys]
+paze_private_key = "PAZE_PRIVATE_KEY" # Base 64 Encoded Private Key File cakey.pem generated for Paze -> Command to create private key: openssl req -newkey rsa:2048 -x509 -keyout cakey.pem -out cacert.pem -days 365
+paze_private_key_passphrase = "PAZE_PRIVATE_KEY_PASSPHRASE" # PEM Passphrase used for generating Private Key File cakey.pem
+
[applepay_merchant_configs]
# Run below command to get common merchant identifier for applepay in shell
#
@@ -631,6 +666,7 @@ pm_auth_key = "Some_pm_auth_key"
# Analytics configuration.
[analytics]
source = "sqlx" # The Analytics source/strategy to be used
+forex_enabled = false # Enable or disable forex conversion for analytics
[analytics.clickhouse]
username = "" # Clickhouse username
@@ -716,6 +752,10 @@ payment_attempts = "hyperswitch-payment-attempt-events"
payment_intents = "hyperswitch-payment-intent-events"
refunds = "hyperswitch-refund-events"
disputes = "hyperswitch-dispute-events"
+sessionizer_payment_attempts = "sessionizer-payment-attempt-events"
+sessionizer_payment_intents = "sessionizer-payment-intent-events"
+sessionizer_refunds = "sessionizer-refund-events"
+sessionizer_disputes = "sessionizer-dispute-events"
[saved_payment_methods]
sdk_eligible_payment_methods = "card"
@@ -724,8 +764,15 @@ sdk_eligible_payment_methods = "card"
enabled = false
global_tenant = { schema = "public", redis_key_prefix = "", clickhouse_database = "default"}
-[multitenancy.tenants]
-public = { name = "hyperswitch", base_url = "http://localhost:8080", schema = "public", redis_key_prefix = "", clickhouse_database = "default" } # schema -> Postgres db schema, redis_key_prefix -> redis key distinguisher, base_url -> url of the tenant
+[multitenancy.tenants.public]
+base_url = "http://localhost:8080" # URL of the tenant
+schema = "public" # Postgres db schema
+redis_key_prefix = "" # Redis key distinguisher
+clickhouse_database = "default" # Clickhouse database
+
+[multitenancy.tenants.public.user]
+control_center_url = "http://localhost:9000" # Control center URL
+
[user_auth_methods]
encryption_key = "" # Encryption key used for encrypting data in user_authentication_methods table
@@ -755,6 +802,20 @@ check_token_status_url= "" # base url to check token status from token servic
[network_tokenization_supported_connectors]
connector_list = "cybersource" # Supported connectors for network tokenization
+[network_transaction_id_supported_connectors]
+connector_list = "stripe,adyen,cybersource" # Supported connectors for network transaction id
+
[grpc_client.dynamic_routing_client] # Dynamic Routing Client Configuration
host = "localhost" # Client Host
port = 7000 # Client Port
+service = "dynamo" # Service name
+
+[theme.storage]
+file_storage_backend = "file_system" # Theme storage backend to be used
+
+[theme.email_config]
+entity_name = "Hyperswitch" # Name of the entity to be showed in emails
+entity_logo_url = "https://example.com/logo.svg" # Logo URL of the entity to be used in emails
+foreground_color = "#000000" # Foreground color of email text
+primary_color = "#006DF9" # Primary color of email body
+background_color = "#FFFFFF" # Background color of email body
diff --git a/config/dashboard.toml b/config/dashboard.toml
index 4cafdd49ab3c..87c007217367 100644
--- a/config/dashboard.toml
+++ b/config/dashboard.toml
@@ -35,5 +35,6 @@ global_search=true
dispute_analytics=true
configure_pmts=false
branding=false
+user_management_revamp=true
totp=true
live_users_counter=false
\ No newline at end of file
diff --git a/config/deployments/env_specific.toml b/config/deployments/env_specific.toml
index db43cac979b7..967b847dae51 100644
--- a/config/deployments/env_specific.toml
+++ b/config/deployments/env_specific.toml
@@ -9,6 +9,7 @@ database_name = "clickhouse_db_name" # Clickhouse database name
# Analytics configuration.
[analytics]
source = "sqlx" # The Analytics source/strategy to be used
+forex_enabled = false # Boolean to enable or disable forex conversion
[analytics.sqlx]
username = "db_user" # Analytics DB Username
@@ -29,6 +30,10 @@ apple_pay_ppc_key = "APPLE_PAY_PAYMENT_PROCESSING_CERTIFICATE_KEY" # Private key
apple_pay_merchant_cert = "APPLE_PAY_MERCHNAT_CERTIFICATE" # Merchant Certificate provided by Apple Pay (https://developer.apple.com/) Certificates, Identifiers & Profiles > Apple Pay Merchant Identity Certificate
apple_pay_merchant_cert_key = "APPLE_PAY_MERCHNAT_CERTIFICATE_KEY" # Private key generated by RSA:2048 algorithm. Refer Hyperswitch Docs (https://docs.hyperswitch.io/hyperswitch-cloud/payment-methods-setup/wallets/apple-pay/ios-application/) to generate the private key
+[paze_decrypt_keys]
+paze_private_key = "PAZE_PRIVATE_KEY" # Base 64 Encoded Private Key File cakey.pem generated for Paze -> Command to create private key: openssl req -newkey rsa:2048 -x509 -keyout cakey.pem -out cacert.pem -days 365
+paze_private_key_passphrase = "PAZE_PRIVATE_KEY_PASSPHRASE" # PEM Passphrase used for generating Private Key File cakey.pem
+
[applepay_merchant_configs]
common_merchant_identifier = "APPLE_PAY_COMMON_MERCHANT_IDENTIFIER" # Refer to config.example.toml to learn how you can generate this value
merchant_cert = "APPLE_PAY_MERCHANT_CERTIFICATE" # Merchant Certificate provided by Apple Pay (https://developer.apple.com/) Certificates, Identifiers & Profiles > Apple Pay Merchant Identity Certificate
@@ -248,6 +253,10 @@ payment_attempts = "hyperswitch-payment-attempt-events"
payment_intents = "hyperswitch-payment-intent-events"
refunds = "hyperswitch-refund-events"
disputes = "hyperswitch-dispute-events"
+sessionizer_payment_attempts = "sessionizer-payment-attempt-events"
+sessionizer_payment_intents = "sessionizer-payment-intent-events"
+sessionizer_refunds = "sessionizer-refund-events"
+sessionizer_disputes = "sessionizer-dispute-events"
# Configuration for the Key Manager Service
[key_manager]
@@ -296,8 +305,14 @@ region = "kms_region" # The AWS region used by the KMS SDK for decrypting data.
enabled = false
global_tenant = { schema = "public", redis_key_prefix = "", clickhouse_database = "default"}
-[multitenancy.tenants]
-public = { name = "hyperswitch", base_url = "http://localhost:8080", schema = "public", redis_key_prefix = "", clickhouse_database = "default" }
+[multitenancy.tenants.public]
+base_url = "http://localhost:8080"
+schema = "public"
+redis_key_prefix = ""
+clickhouse_database = "default"
+
+[multitenancy.tenants.public.user]
+control_center_url = "http://localhost:9000"
[user_auth_methods]
encryption_key = "user_auth_table_encryption_key" # Encryption key used for encrypting data in user_authentication_methods table
@@ -318,3 +333,21 @@ check_token_status_url= "" # base url to check token status from token servic
[grpc_client.dynamic_routing_client] # Dynamic Routing Client Configuration
host = "localhost" # Client Host
port = 7000 # Client Port
+service = "dynamo" # Service name
+
+[theme.storage]
+file_storage_backend = "aws_s3" # Theme storage backend to be used
+
+[theme.storage.aws_s3]
+region = "bucket_region" # AWS region where the S3 bucket for theme storage is located
+bucket_name = "bucket" # AWS S3 bucket name for theme storage
+
+[theme.email_config]
+entity_name = "Hyperswitch" # Name of the entity to be showed in emails
+entity_logo_url = "https://example.com/logo.svg" # Logo URL of the entity to be used in emails
+foreground_color = "#000000" # Foreground color of email text
+primary_color = "#006DF9" # Primary color of email body
+background_color = "#FFFFFF" # Background color of email body
+
+[connectors.unified_authentication_service] #Unified Authentication Service Configuration
+base_url = "http://localhost:8000" #base url to call unified authentication service
diff --git a/config/deployments/integration_test.toml b/config/deployments/integration_test.toml
index 35385af59743..6283382258a8 100644
--- a/config/deployments/integration_test.toml
+++ b/config/deployments/integration_test.toml
@@ -25,6 +25,7 @@ adyen.payout_base_url = "https://pal-test.adyen.com/"
adyen.dispute_base_url = "https://ca-test.adyen.com/"
adyenplatform.base_url = "https://balanceplatform-api-test.adyen.com/"
airwallex.base_url = "https://api-demo.airwallex.com/"
+amazonpay.base_url = "https://pay-api.amazon.com/v2"
applepay.base_url = "https://apple-pay-gateway.apple.com/"
authorizedotnet.base_url = "https://apitest.authorize.net/xml/v1/request.api"
bambora.base_url = "https://api.na.bambora.com"
@@ -44,9 +45,11 @@ cryptopay.base_url = "https://business-sandbox.cryptopay.me"
cybersource.base_url = "https://apitest.cybersource.com/"
datatrans.base_url = "https://api.sandbox.datatrans.com/"
deutschebank.base_url = "https://testmerch.directpos.de/rest-api"
+digitalvirgo.base_url = "https://dcb-integration-service-sandbox-external.staging.digitalvirgo.pl"
dlocal.base_url = "https://sandbox.dlocal.com/"
dummyconnector.base_url = "http://localhost:8080/dummy-connector"
ebanx.base_url = "https://sandbox.ebanxpay.com/"
+elavon.base_url = "https://api.demo.convergepay.com/VirtualMerchantDemo/"
fiserv.base_url = "https://cert.api.fiservapps.com/"
fiservemea.base_url = "https://prod.emea.api.fiservapps.com/sandbox"
fiuu.base_url = "https://sandbox.merchant.razer.com/"
@@ -59,7 +62,10 @@ gocardless.base_url = "https://api-sandbox.gocardless.com"
gpayments.base_url = "https://{{merchant_endpoint_prefix}}-test.api.as1.gpayments.net"
helcim.base_url = "https://api.helcim.com/"
iatapay.base_url = "https://sandbox.iata-pay.iata.org/api/v1"
+inespay.base_url = "https://apiflow.inespay.com/san/v21"
itaubank.base_url = "https://sandbox.devportal.itau.com.br/"
+jpmorgan.base_url = "https://api-mock.payments.jpmorgan.com/api/v2"
+jpmorgan.secondary_base_url="https://id.payments.jpmorgan.com"
klarna.base_url = "https://api{{klarna_region}}.playground.klarna.com/"
mifinity.base_url = "https://demo.mifinity.com/"
mollie.base_url = "https://api.mollie.com/v2/"
@@ -68,6 +74,7 @@ multisafepay.base_url = "https://testapi.multisafepay.com/"
nexinets.base_url = "https://apitest.payengine.de/v1"
nexixpay.base_url = "https://xpaysandbox.nexigroup.com/api/phoenix-0.0/psp/api/v1"
nmi.base_url = "https://secure.nmi.com/"
+nomupay.base_url = "https://payout-api.sandbox.nomupay.com"
noon.base_url = "https://api-test.noonpayments.com/"
noon.key_mode = "Test"
novalnet.base_url = "https://payport.novalnet.de/v2"
@@ -87,6 +94,7 @@ powertranz.base_url = "https://staging.ptranz.com/api/"
prophetpay.base_url = "https://ccm-thirdparty.cps.golf/"
rapyd.base_url = "https://sandboxapi.rapyd.net"
razorpay.base_url = "https://sandbox.juspay.in/"
+redsys.base_url = "https://sis-t.redsys.es:25443/sis/realizarPago"
shift4.base_url = "https://api.shift4.com/"
signifyd.base_url = "https://api.signifyd.com/"
riskified.base_url = "https://sandbox.riskified.com/api"
@@ -106,6 +114,7 @@ wellsfargopayout.base_url = "https://api-sandbox.wellsfargo.com/"
wise.base_url = "https://api.sandbox.transferwise.tech/"
worldline.base_url = "https://eu.sandbox.api-ingenico.com/"
worldpay.base_url = "https://try.access.worldpay.com/"
+xendit.base_url = "https://api.xendit.co"
zen.base_url = "https://api.zen-test.com/"
zen.secondary_base_url = "https://secure.zen-test.com/"
zsl.base_url = "https://api.sitoffalb.net/"
@@ -137,6 +146,8 @@ password_validity_in_days = 90
two_factor_auth_expiry_in_secs = 300
totp_issuer_name = "Hyperswitch Integ"
base_url = "https://integ.hyperswitch.io"
+force_two_factor_auth = false
+force_cookies = true
[frm]
enabled = true
@@ -149,19 +160,31 @@ payout_connector_list = "stripe,wise"
connectors_with_delayed_session_response = "trustpay,payme" # List of connectors which have delayed session response
[mandates.supported_payment_methods]
-bank_debit.ach = { connector_list = "gocardless,adyen" } # Mandate supported payment method type and connector for bank_debit
-bank_debit.becs = { connector_list = "gocardless" } # Mandate supported payment method type and connector for bank_debit
-bank_debit.bacs = { connector_list = "adyen" } # Mandate supported payment method type and connector for bank_debit
-bank_debit.sepa = { connector_list = "gocardless,adyen" } # Mandate supported payment method type and connector for bank_debit
-card.credit.connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree" # Mandate supported payment method type and connector for card
-card.debit.connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree" # Mandate supported payment method type and connector for card
-pay_later.klarna.connector_list = "adyen" # Mandate supported payment method type and connector for pay_later
-wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon,bankofamerica" # Mandate supported payment method type and connector for wallets
-wallet.google_pay.connector_list = "stripe,adyen,cybersource,bankofamerica" # Mandate supported payment method type and connector for wallets
-wallet.paypal.connector_list = "adyen" # Mandate supported payment method type and connector for wallets
-bank_redirect.ideal.connector_list = "stripe,adyen,globalpay,multisafepay" # Mandate supported payment method type and connector for bank_redirect
-bank_redirect.sofort.connector_list = "stripe,adyen,globalpay" # Mandate supported payment method type and connector for bank_redirect
-bank_redirect.giropay.connector_list = "adyen,globalpay,multisafepay" # Mandate supported payment method type and connector for bank_redirect
+bank_debit.ach = { connector_list = "gocardless,adyen,stripe" }
+bank_debit.becs = { connector_list = "gocardless,stripe,adyen" }
+bank_debit.bacs = { connector_list = "stripe,gocardless" }
+bank_debit.sepa = { connector_list = "gocardless,adyen,stripe,deutschebank" }
+card.credit.connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree,nuvei,payme,wellsfargo,bamboraapac,elavon,fiuu,nexixpay,novalnet,paybox,paypal"
+card.debit.connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree,nuvei,payme,wellsfargo,bamboraapac,elavon,fiuu,nexixpay,novalnet,paybox,paypal"
+pay_later.klarna.connector_list = "adyen"
+wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon,bankofamerica,nexinets,novalnet"
+wallet.google_pay.connector_list = "stripe,adyen,cybersource,bankofamerica,noon,globalpay,multisafepay,novalnet"
+wallet.paypal.connector_list = "adyen,globalpay,nexinets,novalnet,paypal"
+wallet.momo.connector_list = "adyen"
+wallet.kakao_pay.connector_list = "adyen"
+wallet.go_pay.connector_list = "adyen"
+wallet.gcash.connector_list = "adyen"
+wallet.dana.connector_list = "adyen"
+wallet.twint.connector_list = "adyen"
+wallet.vipps.connector_list = "adyen"
+
+bank_redirect.ideal.connector_list = "stripe,adyen,globalpay,multisafepay,nexinets"
+bank_redirect.sofort.connector_list = "stripe,adyen,globalpay"
+bank_redirect.giropay.connector_list = "adyen,globalpay,multisafepay,nexinets"
+bank_redirect.bancontact_card.connector_list="adyen,stripe"
+bank_redirect.trustly.connector_list="adyen"
+bank_redirect.open_banking_uk.connector_list="adyen"
+bank_redirect.eps.connector_list="globalpay,nexinets"
[mandates.update_mandate_supported]
card.credit = { connector_list = "cybersource" } # Update Mandate supported payment method type and connector for card
@@ -195,7 +218,7 @@ alfamart = { country = "ID", currency = "IDR" }
ali_pay = { country = "AU,JP,HK,SG,MY,TH,ES,GB,SE,NO,AT,NL,DE,CY,CH,BE,FR,DK,FI,RO,MT,SI,GR,PT,IE,IT,CA,US", currency = "USD,EUR,GBP,JPY,AUD,SGD,CHF,SEK,NOK,NZD,THB,HKD,CAD" }
ali_pay_hk = { country = "HK", currency = "HKD" }
alma = { country = "FR", currency = "EUR" }
-apple_pay = { country = "AU,NZ,CN,JP,HK,SG,MY,BH,AE,KW,BR,ES,GB,SE,NO,AT,NL,DE,HU,CY,LU,CH,BE,FR,DK,FI,RO,HR,LI,UA,MT,SI,GR,PT,IE,CZ,EE,LT,LV,IT,PL,IS,CA,US", currency = "AUD,CHF,CAD,EUR,GBP,HKD,SGD,USD" }
+apple_pay = { country = "AU,NZ,CN,JP,HK,SG,MY,BH,AE,KW,BR,ES,GB,SE,NO,AT,NL,DE,HU,CY,LU,CH,BE,FR,DK,FI,RO,HR,LI,UA,MT,SI,GR,PT,IE,CZ,EE,LT,LV,IT,PL,IS,CA,US", currency = "AUD,CHF,CAD,EUR,GBP,HKD,SGD,USD,MYR" }
atome = { country = "MY,SG", currency = "MYR,SGD" }
bacs = { country = "GB", currency = "GBP" }
bancontact_card = { country = "BE", currency = "EUR" }
@@ -255,6 +278,10 @@ we_chat_pay = { country = "AU,NZ,CN,JP,HK,SG,ES,GB,SE,NO,AT,NL,DE,CY,CH,BE,FR,DK
google_pay.currency = "CHF,DKK,EUR,GBP,NOK,PLN,SEK,USD,AUD,NZD,CAD"
paypal.currency = "CHF,DKK,EUR,GBP,NOK,PLN,SEK,USD,AUD,NZD,CAD"
+[pm_filters.bambora]
+credit = { country = "US,CA", currency = "USD" }
+debit = { country = "US,CA", currency = "USD" }
+
[pm_filters.bankofamerica]
credit = { currency = "USD" }
debit = { currency = "USD" }
@@ -276,6 +303,10 @@ debit.currency = "USD"
ali_pay.currency = "GBP,CNY"
we_chat_pay.currency = "GBP,CNY"
+[pm.filters.jpmorgan]
+debit = { country = "CA, EU, UK, US", currency = "CAD, EUR, GBP, USD" }
+credit = { country = "CA, EU, UK, US", currency = "CAD, EUR, GBP, USD" }
+
[pm_filters.klarna]
klarna = { country = "AU,AT,BE,CA,CZ,DK,FI,FR,DE,GR,IE,IT,NL,NZ,NO,PL,PT,ES,SE,CH,GB,US", currency = "CHF,DKK,EUR,GBP,NOK,PLN,SEK,USD,AUD,NZD,CAD" }
@@ -301,11 +332,23 @@ klarna = { country = "AU,AT,BE,CA,CZ,DK,FI,FR,DE,GR,IE,IT,NL,NZ,NO,PL,PT,ES,SE,C
sofort = { country = "AT,BE,DE,IT,NL,ES", currency = "EUR" }
[pm_filters.cybersource]
-credit = { currency = "USD,GBP,EUR" }
-debit = { currency = "USD,GBP,EUR" }
-apple_pay = { currency = "USD,GBP,EUR" }
-google_pay = { currency = "USD,GBP,EUR" }
+credit = { currency = "USD,GBP,EUR,PLN" }
+debit = { currency = "USD,GBP,EUR,PLN" }
+apple_pay = { currency = "USD,GBP,EUR,PLN" }
+google_pay = { currency = "USD,GBP,EUR,PLN" }
samsung_pay = { currency = "USD,GBP,EUR" }
+paze = { currency = "USD" }
+
+[pm_filters.nexixpay]
+credit = { country = "AT,BE,CY,EE,FI,FR,DE,GR,IE,IT,LV,LT,LU,MT,NL,PT,SK,SI,ES,BG,HR,DK,GB,NO,PL,CZ,RO,SE,CH,HU", currency = "ARS,AUD,BHD,CAD,CLP,CNY,COP,HRK,CZK,DKK,HKD,HUF,INR,JPY,KZT,JOD,KRW,KWD,MYR,MXN,NGN,NOK,PHP,QAR,RUB,SAR,SGD,VND,ZAR,SEK,CHF,THB,AED,EGP,GBP,USD,TWD,BYN,RSD,AZN,RON,TRY,AOA,BGN,EUR,UAH,PLN,BRL" }
+debit = { country = "AT,BE,CY,EE,FI,FR,DE,GR,IE,IT,LV,LT,LU,MT,NL,PT,SK,SI,ES,BG,HR,DK,GB,NO,PL,CZ,RO,SE,CH,HU", currency = "ARS,AUD,BHD,CAD,CLP,CNY,COP,HRK,CZK,DKK,HKD,HUF,INR,JPY,KZT,JOD,KRW,KWD,MYR,MXN,NGN,NOK,PHP,QAR,RUB,SAR,SGD,VND,ZAR,SEK,CHF,THB,AED,EGP,GBP,USD,TWD,BYN,RSD,AZN,RON,TRY,AOA,BGN,EUR,UAH,PLN,BRL" }
+
+[pm_filters.novalnet]
+credit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+debit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+apple_pay = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+google_pay = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+paypal = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
[pm_filters.volt]
open_banking_uk = {country = "DE,GB,AT,BE,CY,EE,ES,FI,FR,GR,HR,IE,IT,LT,LU,LV,MT,NL,PT,SI,SK,BG,CZ,DK,HU,NO,PL,RO,SE,AU,BR", currency = "EUR,GBP,DKK,NOK,PLN,SEK,AUD,BRL"}
@@ -317,8 +360,10 @@ upi_collect = {country = "IN", currency = "INR"}
open_banking_pis = {currency = "EUR,GBP"}
[pm_filters.worldpay]
-apple_pay.country = "AU,CN,HK,JP,MO,MY,NZ,SG,TW,AM,AT,AZ,BY,BE,BG,HR,CY,CZ,DK,EE,FO,FI,FR,GE,DE,GR,GL,GG,HU,IS,IE,IM,IT,KZ,JE,LV,LI,LT,LU,MT,MD,MC,ME,NL,NO,PL,PT,RO,SM,RS,SK,SI,ES,SE,CH,UA,GB,AR,CO,CR,BR,MX,PE,BH,IL,JO,KW,PS,QA,SA,AE,CA,UM,US"
-google_pay.country = "AL,DZ,AS,AO,AG,AR,AU,AT,AZ,BH,BY,BE,BR,BG,CA,CL,CO,HR,CZ,DK,DO,EG,EE,FI,FR,DE,GR,HK,HU,IN,ID,IE,IL,IT,JP,JO,KZ,KE,KW,LV,LB,LT,LU,MY,MX,NL,NZ,NO,OM,PK,PA,PE,PH,PL,PT,QA,RO,RU,SA,SG,SK,ZA,ES,LK,SE,CH,TW,TH,TR,UA,AE,GB,US,UY,VN"
+debit = { country = "AF,DZ,AW,AU,AZ,BS,BH,BD,BB,BZ,BM,BT,BO,BA,BW,BR,BN,BG,BI,KH,CA,CV,KY,CL,CO,KM,CD,CR,CZ,DK,DJ,ST,DO,EC,EG,SV,ER,ET,FK,FJ,GM,GE,GH,GI,GT,GN,GY,HT,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IL,IT,JM,JP,JO,KZ,KE,KW,LA,LB,LS,LR,LY,LT,MO,MK,MG,MW,MY,MV,MR,MU,MX,MD,MN,MA,MZ,MM,NA,NZ,NI,NG,KP,NO,AR,PK,PG,PY,PE,UY,PH,PL,GB,QA,OM,RO,RU,RW,WS,SG,ST,ZA,KR,LK,SH,SD,SR,SZ,SE,CH,SY,TW,TJ,TZ,TH,TT,TN,TR,UG,UA,US,UZ,VU,VE,VN,ZM,ZW", currency = "AFN,DZD,ANG,AWG,AUD,AZN,BSD,BHD,BDT,BBD,BZD,BMD,BTN,BOB,BAM,BWP,BRL,BND,BGN,BIF,KHR,CAD,CVE,KYD,XOF,XAF,XPF,CLP,COP,KMF,CDF,CRC,EUR,CZK,DKK,DJF,DOP,XCD,EGP,SVC,ERN,ETB,EUR,FKP,FJD,GMD,GEL,GHS,GIP,GTQ,GNF,GYD,HTG,HNL,HKD,HUF,ISK,INR,IDR,IRR,IQD,ILS,JMD,JPY,JOD,KZT,KES,KWD,LAK,LBP,LSL,LRD,LYD,MOP,MKD,MGA,MWK,MYR,MVR,MRU,MUR,MXN,MDL,MNT,MAD,MZN,MMK,NAD,NPR,NZD,NIO,NGN,KPW,NOK,ARS,PKR,PAB,PGK,PYG,PEN,UYU,PHP,PLN,GBP,QAR,OMR,RON,RUB,RWF,WST,SAR,RSD,SCR,SLL,SGD,STN,SBD,SOS,ZAR,KRW,LKR,SHP,SDG,SRD,SZL,SEK,CHF,SYP,TWD,TJS,TZS,THB,TOP,TTD,TND,TRY,TMT,AED,UGX,UAH,USD,UZS,VUV,VND,YER,CNY,ZMW,ZWL" }
+credit = { country = "AF,DZ,AW,AU,AZ,BS,BH,BD,BB,BZ,BM,BT,BO,BA,BW,BR,BN,BG,BI,KH,CA,CV,KY,CL,CO,KM,CD,CR,CZ,DK,DJ,ST,DO,EC,EG,SV,ER,ET,FK,FJ,GM,GE,GH,GI,GT,GN,GY,HT,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IL,IT,JM,JP,JO,KZ,KE,KW,LA,LB,LS,LR,LY,LT,MO,MK,MG,MW,MY,MV,MR,MU,MX,MD,MN,MA,MZ,MM,NA,NZ,NI,NG,KP,NO,AR,PK,PG,PY,PE,UY,PH,PL,GB,QA,OM,RO,RU,RW,WS,SG,ST,ZA,KR,LK,SH,SD,SR,SZ,SE,CH,SY,TW,TJ,TZ,TH,TT,TN,TR,UG,UA,US,UZ,VU,VE,VN,ZM,ZW", currency = "AFN,DZD,ANG,AWG,AUD,AZN,BSD,BHD,BDT,BBD,BZD,BMD,BTN,BOB,BAM,BWP,BRL,BND,BGN,BIF,KHR,CAD,CVE,KYD,XOF,XAF,XPF,CLP,COP,KMF,CDF,CRC,EUR,CZK,DKK,DJF,DOP,XCD,EGP,SVC,ERN,ETB,EUR,FKP,FJD,GMD,GEL,GHS,GIP,GTQ,GNF,GYD,HTG,HNL,HKD,HUF,ISK,INR,IDR,IRR,IQD,ILS,JMD,JPY,JOD,KZT,KES,KWD,LAK,LBP,LSL,LRD,LYD,MOP,MKD,MGA,MWK,MYR,MVR,MRU,MUR,MXN,MDL,MNT,MAD,MZN,MMK,NAD,NPR,NZD,NIO,NGN,KPW,NOK,ARS,PKR,PAB,PGK,PYG,PEN,UYU,PHP,PLN,GBP,QAR,OMR,RON,RUB,RWF,WST,SAR,RSD,SCR,SLL,SGD,STN,SBD,SOS,ZAR,KRW,LKR,SHP,SDG,SRD,SZL,SEK,CHF,SYP,TWD,TJS,TZS,THB,TOP,TTD,TND,TRY,TMT,AED,UGX,UAH,USD,UZS,VUV,VND,YER,CNY,ZMW,ZWL" }
+google_pay = { country = "AL,DZ,AS,AO,AG,AR,AU,AT,AZ,BH,BY,BE,BR,BG,CA,CL,CO,HR,CZ,DK,DO,EG,EE,FI,FR,DE,GR,HK,HU,IN,ID,IE,IL,IT,JP,JO,KZ,KE,KW,LV,LB,LT,LU,MY,MX,NL,NZ,NO,OM,PK,PA,PE,PH,PL,PT,QA,RO,RU,SA,SG,SK,ZA,ES,LK,SE,CH,TW,TH,TR,UA,AE,GB,US,UY,VN" }
+apple_pay = { country = "AU,CN,HK,JP,MO,MY,NZ,SG,TW,AM,AT,AZ,BY,BE,BG,HR,CY,CZ,DK,EE,FO,FI,FR,GE,DE,GR,GL,GG,HU,IS,IE,IM,IT,KZ,JE,LV,LI,LT,LU,MT,MD,MC,ME,NL,NO,PL,PT,RO,SM,RS,SK,SI,ES,SE,CH,UA,GB,AR,CO,CR,BR,MX,PE,BH,IL,JO,KW,PS,QA,SA,AE,CA,UM,US" }
[pm_filters.zen]
boleto = { country = "BR", currency = "BRL" }
@@ -333,6 +378,9 @@ red_pagos = { country = "UY", currency = "UYU" }
[pm_filters.zsl]
local_bank_transfer = { country = "CN", currency = "CNY" }
+[pm_filters.fiuu]
+duit_now = { country ="MY", currency = "MYR" }
+
[payout_method_filters.adyenplatform]
sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,CZ,DE,HU,NO,PL,SE,GB,CH" , currency = "EUR,CZK,DKK,HUF,NOK,PLN,SEK,GBP,CHF" }
@@ -350,6 +398,7 @@ nmi.payment_method = "card"
payme.payment_method = "card"
deutschebank = { payment_method = "bank_debit" }
paybox = { payment_method = "card" }
+nexixpay = { payment_method = "card" }
#tokenization configuration which describe token lifetime and payment method for specific connector
[tokenization]
@@ -370,7 +419,7 @@ outgoing_enabled = true
connectors_with_webhook_source_verification_call = "paypal" # List of connectors which has additional source verification api-call
[unmasked_headers]
-keys = "accept-language,user-agent"
+keys = "accept-language,user-agent,x-profile-id"
[saved_payment_methods]
sdk_eligible_payment_methods = "card"
@@ -382,4 +431,7 @@ connector_list = ""
card_networks = "Visa, AmericanExpress, Mastercard"
[network_tokenization_supported_connectors]
-connector_list = "cybersource"
\ No newline at end of file
+connector_list = "cybersource"
+
+[platform]
+enabled = true
diff --git a/config/deployments/production.toml b/config/deployments/production.toml
index cab8317dfa45..3537834fd07e 100644
--- a/config/deployments/production.toml
+++ b/config/deployments/production.toml
@@ -28,7 +28,8 @@ adyen.base_url = "https://{{merchant_endpoint_prefix}}-checkout-live.adyenpaymen
adyen.payout_base_url = "https://{{merchant_endpoint_prefix}}-pal-live.adyenpayments.com/"
adyen.dispute_base_url = "https://{{merchant_endpoint_prefix}}-ca-live.adyen.com/"
adyenplatform.base_url = "https://balanceplatform-api-live.adyen.com/"
-airwallex.base_url = "https://api-demo.airwallex.com/"
+airwallex.base_url = "https://api.airwallex.com/"
+amazonpay.base_url = "https://pay-api.amazon.com/v2"
applepay.base_url = "https://apple-pay-gateway.apple.com/"
authorizedotnet.base_url = "https://api.authorize.net/xml/v1/request.api"
bambora.base_url = "https://api.na.bambora.com"
@@ -47,10 +48,12 @@ coinbase.base_url = "https://api.commerce.coinbase.com"
cryptopay.base_url = "https://business.cryptopay.me/"
cybersource.base_url = "https://api.cybersource.com/"
datatrans.base_url = "https://api.datatrans.com/"
-dlocal.base_url = "https://sandbox.dlocal.com/"
deutschebank.base_url = "https://merch.directpos.de/rest-api"
+digitalvirgo.base_url = "https://dcb-integration-service-sandbox-external.staging.digitalvirgo.pl"
+dlocal.base_url = "https://sandbox.dlocal.com/"
dummyconnector.base_url = "http://localhost:8080/dummy-connector"
ebanx.base_url = "https://sandbox.ebanxpay.com/"
+elavon.base_url = "https://api.convergepay.com/VirtualMerchant/"
fiserv.base_url = "https://cert.api.fiservapps.com/"
fiservemea.base_url = "https://prod.emea.api.fiservapps.com"
fiuu.base_url = "https://pay.merchant.razer.com/"
@@ -63,7 +66,10 @@ gocardless.base_url = "https://api.gocardless.com"
gpayments.base_url = "https://{{merchant_endpoint_prefix}}-test.api.as1.gpayments.net"
helcim.base_url = "https://api.helcim.com/"
iatapay.base_url = "https://iata-pay.iata.org/api/v1"
+inespay.base_url = "https://apiflow.inespay.com/san/v21"
itaubank.base_url = "https://secure.api.itau/"
+jpmorgan.base_url = "https://api-ms.payments.jpmorgan.com/api/v2"
+jpmorgan.secondary_base_url="https://id.payments.jpmorgan.com"
klarna.base_url = "https://api{{klarna_region}}.klarna.com/"
mifinity.base_url = "https://secure.mifinity.com/"
mollie.base_url = "https://api.mollie.com/v2/"
@@ -72,6 +78,7 @@ multisafepay.base_url = "https://testapi.multisafepay.com/"
nexinets.base_url = "https://api.payengine.de/v1"
nexixpay.base_url = "https://xpay.nexigroup.com/api/phoenix-0.0/psp/api/v1"
nmi.base_url = "https://secure.nmi.com/"
+nomupay.base_url = "https://payout-api.nomupay.com"
noon.base_url = "https://api.noonpayments.com/"
noon.key_mode = "Live"
novalnet.base_url = "https://payport.novalnet.de/v2"
@@ -91,6 +98,7 @@ powertranz.base_url = "https://staging.ptranz.com/api/"
prophetpay.base_url = "https://ccm-thirdparty.cps.golf/"
rapyd.base_url = "https://sandboxapi.rapyd.net"
razorpay.base_url = "https://api.juspay.in"
+redsys.base_url = "https://sis.redsys.es:25443/sis/realizarPago"
riskified.base_url = "https://wh.riskified.com/api/"
shift4.base_url = "https://api.shift4.com/"
signifyd.base_url = "https://api.signifyd.com/"
@@ -110,6 +118,7 @@ wellsfargopayout.base_url = "https://api.wellsfargo.com/"
wise.base_url = "https://api.sandbox.transferwise.tech/"
worldline.base_url = "https://eu.sandbox.api-ingenico.com/"
worldpay.base_url = "https://try.access.worldpay.com/"
+xendit.base_url = "https://api.xendit.co"
zen.base_url = "https://api.zen.com/"
zen.secondary_base_url = "https://secure.zen.com/"
zsl.base_url = "https://apirh.prodoffalb.net/"
@@ -144,29 +153,45 @@ password_validity_in_days = 90
two_factor_auth_expiry_in_secs = 300
totp_issuer_name = "Hyperswitch Production"
base_url = "https://live.hyperswitch.io"
+force_two_factor_auth = true
+force_cookies = false
[frm]
enabled = false
[mandates.supported_payment_methods]
-bank_debit.ach = { connector_list = "gocardless,adyen" } # Mandate supported payment method type and connector for bank_debit
-bank_debit.becs = { connector_list = "gocardless" } # Mandate supported payment method type and connector for bank_debit
-bank_debit.bacs = { connector_list = "adyen" } # Mandate supported payment method type and connector for bank_debit
-bank_debit.sepa = { connector_list = "gocardless,adyen" } # Mandate supported payment method type and connector for bank_debit
-card.credit.connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree" # Mandate supported payment method type and connector for card
-card.debit.connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree" # Mandate supported payment method type and connector for card
-pay_later.klarna.connector_list = "adyen" # Mandate supported payment method type and connector for pay_later
-wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon,bankofamerica" # Mandate supported payment method type and connector for wallets
-wallet.google_pay.connector_list = "stripe,adyen,cybersource,bankofamerica" # Mandate supported payment method type and connector for wallets
-wallet.paypal.connector_list = "adyen" # Mandate supported payment method type and connector for wallets
-bank_redirect.ideal.connector_list = "stripe,adyen,globalpay,multisafepay" # Mandate supported payment method type and connector for bank_redirect
-bank_redirect.sofort.connector_list = "stripe,adyen,globalpay" # Mandate supported payment method type and connector for bank_redirect
-bank_redirect.giropay.connector_list = "adyen,globalpay,multisafepay" # Mandate supported payment method type and connector for bank_redirect
+bank_debit.ach = { connector_list = "gocardless,adyen,stripe" }
+bank_debit.becs = { connector_list = "gocardless,stripe,adyen" }
+bank_debit.bacs = { connector_list = "stripe,gocardless" }
+bank_debit.sepa = { connector_list = "gocardless,adyen,stripe,deutschebank" }
+card.credit.connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree,nuvei,payme,wellsfargo,bamboraapac,elavon,fiuu,nexixpay,novalnet,paybox,paypal"
+card.debit.connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree,nuvei,payme,wellsfargo,bamboraapac,elavon,fiuu,nexixpay,novalnet,paybox,paypal"
+pay_later.klarna.connector_list = "adyen"
+wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon,bankofamerica,nexinets,novalnet"
+wallet.google_pay.connector_list = "stripe,adyen,cybersource,bankofamerica,noon,globalpay,multisafepay,novalnet"
+wallet.paypal.connector_list = "adyen,globalpay,nexinets,novalnet,paypal"
+wallet.momo.connector_list = "adyen"
+wallet.kakao_pay.connector_list = "adyen"
+wallet.go_pay.connector_list = "adyen"
+wallet.gcash.connector_list = "adyen"
+wallet.dana.connector_list = "adyen"
+wallet.twint.connector_list = "adyen"
+wallet.vipps.connector_list = "adyen"
+
+bank_redirect.ideal.connector_list = "stripe,adyen,globalpay,multisafepay,nexinets"
+bank_redirect.sofort.connector_list = "stripe,adyen,globalpay"
+bank_redirect.giropay.connector_list = "adyen,globalpay,multisafepay,nexinets"
+bank_redirect.bancontact_card.connector_list="adyen,stripe"
+bank_redirect.trustly.connector_list="adyen"
+bank_redirect.open_banking_uk.connector_list="adyen"
+bank_redirect.eps.connector_list="globalpay,nexinets"
[mandates.update_mandate_supported]
card.credit = { connector_list = "cybersource" } # Update Mandate supported payment method type and connector for card
card.debit = { connector_list = "cybersource" } # Update Mandate supported payment method type and connector for card
+[network_transaction_id_supported_connectors]
+connector_list = "adyen"
[payouts]
payout_eligibility = true # Defaults the eligibility of a payout method to true in case connector does not provide checks for payout eligibility
@@ -208,7 +233,7 @@ alfamart = { country = "ID", currency = "IDR" }
ali_pay = { country = "AU,JP,HK,SG,MY,TH,ES,GB,SE,NO,AT,NL,DE,CY,CH,BE,FR,DK,FI,RO,MT,SI,GR,PT,IE,IT,CA,US", currency = "USD,EUR,GBP,JPY,AUD,SGD,CHF,SEK,NOK,NZD,THB,HKD,CAD" }
ali_pay_hk = { country = "HK", currency = "HKD" }
alma = { country = "FR", currency = "EUR" }
-apple_pay = { country = "AE,AM,AR,AT,AU,AZ,BE,BG,BH,BR,BY,CA,CH,CN,CO,CR,CY,CZ,DE,DK,EE,ES,FI,FO,FR,GB,GE,GG,GL,GR,HK,HR,HU,IE,IL,IM,IS,IT,JE,JO,JP,KW,KZ,LI,LT,LU,LV,MC,MD,ME,MO,MT,MX,MY,NL,NO,NZ,PE,PL,PS,PT,QA,RO,RS,SA,SE,SG,SI,SK,SM,TW,UA,GB,UM,US", currency = "AUD,CHF,CAD,EUR,GBP,HKD,SGD,USD" }
+apple_pay = { country = "AE,AM,AR,AT,AU,AZ,BE,BG,BH,BR,BY,CA,CH,CN,CO,CR,CY,CZ,DE,DK,EE,ES,FI,FO,FR,GB,GE,GG,GL,GR,HK,HR,HU,IE,IL,IM,IS,IT,JE,JO,JP,KW,KZ,LI,LT,LU,LV,MC,MD,ME,MO,MT,MX,MY,NL,NO,NZ,PE,PL,PS,PT,QA,RO,RS,SA,SE,SG,SI,SK,SM,TW,UA,GB,UM,US", currency = "AUD,CHF,CAD,EUR,GBP,HKD,SGD,USD,MYR" }
atome = { country = "MY,SG", currency = "MYR,SGD" }
bacs = { country = "GB", currency = "GBP" }
bancontact_card = { country = "BE", currency = "EUR" }
@@ -267,6 +292,10 @@ we_chat_pay = { country = "AU,NZ,CN,JP,HK,SG,ES,GB,SE,NO,AT,NL,DE,CY,CH,BE,FR,DK
google_pay.currency = "CHF,DKK,EUR,GBP,NOK,PLN,SEK,USD,AUD,NZD,CAD"
paypal.currency = "CHF,DKK,EUR,GBP,NOK,PLN,SEK,USD,AUD,NZD,CAD"
+[pm_filters.bambora]
+credit = { country = "US,CA", currency = "USD" }
+debit = { country = "US,CA", currency = "USD" }
+
[pm_filters.bankofamerica]
credit = { currency = "USD" }
debit = { currency = "USD" }
@@ -275,11 +304,23 @@ google_pay = { currency = "USD" }
[pm_filters.cybersource]
-credit = { currency = "USD,GBP,EUR" }
-debit = { currency = "USD,GBP,EUR" }
-apple_pay = { currency = "USD,GBP,EUR" }
-google_pay = { currency = "USD,GBP,EUR" }
+credit = { currency = "USD,GBP,EUR,PLN" }
+debit = { currency = "USD,GBP,EUR,PLN" }
+apple_pay = { currency = "USD,GBP,EUR,PLN" }
+google_pay = { currency = "USD,GBP,EUR,PLN" }
samsung_pay = { currency = "USD,GBP,EUR" }
+paze = { currency = "USD" }
+
+[pm_filters.nexixpay]
+credit = { country = "AT,BE,CY,EE,FI,FR,DE,GR,IE,IT,LV,LT,LU,MT,NL,PT,SK,SI,ES,BG,HR,DK,GB,NO,PL,CZ,RO,SE,CH,HU", currency = "ARS,AUD,BHD,CAD,CLP,CNY,COP,HRK,CZK,DKK,HKD,HUF,INR,JPY,KZT,JOD,KRW,KWD,MYR,MXN,NGN,NOK,PHP,QAR,RUB,SAR,SGD,VND,ZAR,SEK,CHF,THB,AED,EGP,GBP,USD,TWD,BYN,RSD,AZN,RON,TRY,AOA,BGN,EUR,UAH,PLN,BRL" }
+debit = { country = "AT,BE,CY,EE,FI,FR,DE,GR,IE,IT,LV,LT,LU,MT,NL,PT,SK,SI,ES,BG,HR,DK,GB,NO,PL,CZ,RO,SE,CH,HU", currency = "ARS,AUD,BHD,CAD,CLP,CNY,COP,HRK,CZK,DKK,HKD,HUF,INR,JPY,KZT,JOD,KRW,KWD,MYR,MXN,NGN,NOK,PHP,QAR,RUB,SAR,SGD,VND,ZAR,SEK,CHF,THB,AED,EGP,GBP,USD,TWD,BYN,RSD,AZN,RON,TRY,AOA,BGN,EUR,UAH,PLN,BRL" }
+
+[pm_filters.novalnet]
+credit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+debit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+apple_pay = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+google_pay = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+paypal = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
[pm_filters.braintree]
paypal.currency = "AUD,BRL,CAD,CNY,CZK,DKK,EUR,HKD,HUF,ILS,JPY,MYR,MXN,TWD,NZD,NOK,PHP,PLN,GBP,RUB,SGD,SEK,CHF,THB,USD"
@@ -296,6 +337,10 @@ debit.currency = "USD"
ali_pay.currency = "GBP,CNY"
we_chat_pay.currency = "GBP,CNY"
+[pm.filters.jpmorgan]
+debit = { country = "CA, EU, UK, US", currency = "CAD, EUR, GBP, USD" }
+credit = { country = "CA, EU, UK, US", currency = "CAD, EUR, GBP, USD" }
+
[pm_filters.klarna]
klarna = { country = "AU,AT,BE,CA,CZ,DK,FI,FR,DE,GR,IE,IT,NL,NZ,NO,PL,PT,ES,SE,CH,GB,US", currency = "CHF,DKK,EUR,GBP,NOK,PLN,SEK,USD,AUD,NZD,CAD" }
@@ -330,8 +375,10 @@ upi_collect = {country = "IN", currency = "INR"}
open_banking_pis = {currency = "EUR,GBP"}
[pm_filters.worldpay]
-apple_pay.country = "AU,CN,HK,JP,MO,MY,NZ,SG,TW,AM,AT,AZ,BY,BE,BG,HR,CY,CZ,DK,EE,FO,FI,FR,GE,DE,GR,GL,GG,HU,IS,IE,IM,IT,KZ,JE,LV,LI,LT,LU,MT,MD,MC,ME,NL,NO,PL,PT,RO,SM,RS,SK,SI,ES,SE,CH,UA,GB,AR,CO,CR,BR,MX,PE,BH,IL,JO,KW,PS,QA,SA,AE,CA,UM,US"
-google_pay.country = "AL,DZ,AS,AO,AG,AR,AU,AT,AZ,BH,BY,BE,BR,BG,CA,CL,CO,HR,CZ,DK,DO,EG,EE,FI,FR,DE,GR,HK,HU,IN,ID,IE,IL,IT,JP,JO,KZ,KE,KW,LV,LB,LT,LU,MY,MX,NL,NZ,NO,OM,PK,PA,PE,PH,PL,PT,QA,RO,RU,SA,SG,SK,ZA,ES,LK,SE,CH,TW,TH,TR,UA,AE,GB,US,UY,VN"
+debit = { country = "AF,DZ,AW,AU,AZ,BS,BH,BD,BB,BZ,BM,BT,BO,BA,BW,BR,BN,BG,BI,KH,CA,CV,KY,CL,CO,KM,CD,CR,CZ,DK,DJ,ST,DO,EC,EG,SV,ER,ET,FK,FJ,GM,GE,GH,GI,GT,GN,GY,HT,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IL,IT,JM,JP,JO,KZ,KE,KW,LA,LB,LS,LR,LY,LT,MO,MK,MG,MW,MY,MV,MR,MU,MX,MD,MN,MA,MZ,MM,NA,NZ,NI,NG,KP,NO,AR,PK,PG,PY,PE,UY,PH,PL,GB,QA,OM,RO,RU,RW,WS,SG,ST,ZA,KR,LK,SH,SD,SR,SZ,SE,CH,SY,TW,TJ,TZ,TH,TT,TN,TR,UG,UA,US,UZ,VU,VE,VN,ZM,ZW", currency = "AFN,DZD,ANG,AWG,AUD,AZN,BSD,BHD,BDT,BBD,BZD,BMD,BTN,BOB,BAM,BWP,BRL,BND,BGN,BIF,KHR,CAD,CVE,KYD,XOF,XAF,XPF,CLP,COP,KMF,CDF,CRC,EUR,CZK,DKK,DJF,DOP,XCD,EGP,SVC,ERN,ETB,EUR,FKP,FJD,GMD,GEL,GHS,GIP,GTQ,GNF,GYD,HTG,HNL,HKD,HUF,ISK,INR,IDR,IRR,IQD,ILS,JMD,JPY,JOD,KZT,KES,KWD,LAK,LBP,LSL,LRD,LYD,MOP,MKD,MGA,MWK,MYR,MVR,MRU,MUR,MXN,MDL,MNT,MAD,MZN,MMK,NAD,NPR,NZD,NIO,NGN,KPW,NOK,ARS,PKR,PAB,PGK,PYG,PEN,UYU,PHP,PLN,GBP,QAR,OMR,RON,RUB,RWF,WST,SAR,RSD,SCR,SLL,SGD,STN,SBD,SOS,ZAR,KRW,LKR,SHP,SDG,SRD,SZL,SEK,CHF,SYP,TWD,TJS,TZS,THB,TOP,TTD,TND,TRY,TMT,AED,UGX,UAH,USD,UZS,VUV,VND,YER,CNY,ZMW,ZWL" }
+credit = { country = "AF,DZ,AW,AU,AZ,BS,BH,BD,BB,BZ,BM,BT,BO,BA,BW,BR,BN,BG,BI,KH,CA,CV,KY,CL,CO,KM,CD,CR,CZ,DK,DJ,ST,DO,EC,EG,SV,ER,ET,FK,FJ,GM,GE,GH,GI,GT,GN,GY,HT,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IL,IT,JM,JP,JO,KZ,KE,KW,LA,LB,LS,LR,LY,LT,MO,MK,MG,MW,MY,MV,MR,MU,MX,MD,MN,MA,MZ,MM,NA,NZ,NI,NG,KP,NO,AR,PK,PG,PY,PE,UY,PH,PL,GB,QA,OM,RO,RU,RW,WS,SG,ST,ZA,KR,LK,SH,SD,SR,SZ,SE,CH,SY,TW,TJ,TZ,TH,TT,TN,TR,UG,UA,US,UZ,VU,VE,VN,ZM,ZW", currency = "AFN,DZD,ANG,AWG,AUD,AZN,BSD,BHD,BDT,BBD,BZD,BMD,BTN,BOB,BAM,BWP,BRL,BND,BGN,BIF,KHR,CAD,CVE,KYD,XOF,XAF,XPF,CLP,COP,KMF,CDF,CRC,EUR,CZK,DKK,DJF,DOP,XCD,EGP,SVC,ERN,ETB,EUR,FKP,FJD,GMD,GEL,GHS,GIP,GTQ,GNF,GYD,HTG,HNL,HKD,HUF,ISK,INR,IDR,IRR,IQD,ILS,JMD,JPY,JOD,KZT,KES,KWD,LAK,LBP,LSL,LRD,LYD,MOP,MKD,MGA,MWK,MYR,MVR,MRU,MUR,MXN,MDL,MNT,MAD,MZN,MMK,NAD,NPR,NZD,NIO,NGN,KPW,NOK,ARS,PKR,PAB,PGK,PYG,PEN,UYU,PHP,PLN,GBP,QAR,OMR,RON,RUB,RWF,WST,SAR,RSD,SCR,SLL,SGD,STN,SBD,SOS,ZAR,KRW,LKR,SHP,SDG,SRD,SZL,SEK,CHF,SYP,TWD,TJS,TZS,THB,TOP,TTD,TND,TRY,TMT,AED,UGX,UAH,USD,UZS,VUV,VND,YER,CNY,ZMW,ZWL" }
+google_pay = { country = "AL,DZ,AS,AO,AG,AR,AU,AT,AZ,BH,BY,BE,BR,BG,CA,CL,CO,HR,CZ,DK,DO,EG,EE,FI,FR,DE,GR,HK,HU,IN,ID,IE,IL,IT,JP,JO,KZ,KE,KW,LV,LB,LT,LU,MY,MX,NL,NZ,NO,OM,PK,PA,PE,PH,PL,PT,QA,RO,RU,SA,SG,SK,ZA,ES,LK,SE,CH,TW,TH,TR,UA,AE,GB,US,UY,VN" }
+apple_pay = { country = "AU,CN,HK,JP,MO,MY,NZ,SG,TW,AM,AT,AZ,BY,BE,BG,HR,CY,CZ,DK,EE,FO,FI,FR,GE,DE,GR,GL,GG,HU,IS,IE,IM,IT,KZ,JE,LV,LI,LT,LU,MT,MD,MC,ME,NL,NO,PL,PT,RO,SM,RS,SK,SI,ES,SE,CH,UA,GB,AR,CO,CR,BR,MX,PE,BH,IL,JO,KW,PS,QA,SA,AE,CA,UM,US" }
[pm_filters.zen]
boleto = { country = "BR", currency = "BRL" }
@@ -346,6 +393,10 @@ red_pagos = { country = "UY", currency = "UYU" }
[pm_filters.zsl]
local_bank_transfer = { country = "CN", currency = "CNY" }
+
+[pm_filters.fiuu]
+duit_now = { country ="MY", currency = "MYR" }
+
[payout_method_filters.adyenplatform]
sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,CZ,DE,HU,NO,PL,SE,GB,CH" , currency = "EUR,CZK,DKK,HUF,NOK,PLN,SEK,GBP,CHF" }
@@ -363,6 +414,7 @@ nmi.payment_method = "card"
payme.payment_method = "card"
deutschebank = { payment_method = "bank_debit" }
paybox = { payment_method = "card" }
+nexixpay = { payment_method = "card" }
#tokenization configuration which describe token lifetime and payment method for specific connector
[tokenization]
@@ -383,7 +435,7 @@ outgoing_enabled = true
connectors_with_webhook_source_verification_call = "paypal" # List of connectors which has additional source verification api-call
[unmasked_headers]
-keys = "accept-language,user-agent"
+keys = "accept-language,user-agent,x-profile-id"
[saved_payment_methods]
sdk_eligible_payment_methods = "card"
@@ -395,4 +447,7 @@ connector_list = ""
card_networks = "Visa, AmericanExpress, Mastercard"
[network_tokenization_supported_connectors]
-connector_list = "cybersource"
\ No newline at end of file
+connector_list = "cybersource"
+
+[platform]
+enabled = false
diff --git a/config/deployments/sandbox.toml b/config/deployments/sandbox.toml
index 78972c0b2907..fcfadb339d9d 100644
--- a/config/deployments/sandbox.toml
+++ b/config/deployments/sandbox.toml
@@ -29,6 +29,7 @@ adyen.payout_base_url = "https://pal-test.adyen.com/"
adyen.dispute_base_url = "https://ca-test.adyen.com/"
adyenplatform.base_url = "https://balanceplatform-api-test.adyen.com/"
airwallex.base_url = "https://api-demo.airwallex.com/"
+amazonpay.base_url = "https://pay-api.amazon.com/v2"
applepay.base_url = "https://apple-pay-gateway.apple.com/"
authorizedotnet.base_url = "https://apitest.authorize.net/xml/v1/request.api"
bambora.base_url = "https://api.na.bambora.com"
@@ -47,10 +48,12 @@ coinbase.base_url = "https://api.commerce.coinbase.com"
cryptopay.base_url = "https://business-sandbox.cryptopay.me"
cybersource.base_url = "https://apitest.cybersource.com/"
datatrans.base_url = "https://api.sandbox.datatrans.com/"
-dlocal.base_url = "https://sandbox.dlocal.com/"
deutschebank.base_url = "https://testmerch.directpos.de/rest-api"
+digitalvirgo.base_url = "https://dcb-integration-service-sandbox-external.staging.digitalvirgo.pl"
+dlocal.base_url = "https://sandbox.dlocal.com/"
dummyconnector.base_url = "http://localhost:8080/dummy-connector"
ebanx.base_url = "https://sandbox.ebanxpay.com/"
+elavon.base_url = "https://api.demo.convergepay.com/VirtualMerchantDemo/"
fiserv.base_url = "https://cert.api.fiservapps.com/"
fiservemea.base_url = "https://prod.emea.api.fiservapps.com/sandbox"
fiuu.base_url = "https://sandbox.merchant.razer.com/"
@@ -63,7 +66,10 @@ gocardless.base_url = "https://api-sandbox.gocardless.com"
gpayments.base_url = "https://{{merchant_endpoint_prefix}}-test.api.as1.gpayments.net"
helcim.base_url = "https://api.helcim.com/"
iatapay.base_url = "https://sandbox.iata-pay.iata.org/api/v1"
+inespay.base_url = "https://apiflow.inespay.com/san/v21"
itaubank.base_url = "https://sandbox.devportal.itau.com.br/"
+jpmorgan.base_url = "https://api-mock.payments.jpmorgan.com/api/v2"
+jpmorgan.secondary_base_url="https://id.payments.jpmorgan.com"
klarna.base_url = "https://api{{klarna_region}}.playground.klarna.com/"
mifinity.base_url = "https://demo.mifinity.com/"
mollie.base_url = "https://api.mollie.com/v2/"
@@ -72,6 +78,7 @@ multisafepay.base_url = "https://testapi.multisafepay.com/"
nexinets.base_url = "https://apitest.payengine.de/v1"
nexixpay.base_url = "https://xpaysandbox.nexigroup.com/api/phoenix-0.0/psp/api/v1"
nmi.base_url = "https://secure.nmi.com/"
+nomupay.base_url = "https://payout-api.sandbox.nomupay.com"
noon.base_url = "https://api-test.noonpayments.com/"
noon.key_mode = "Test"
novalnet.base_url = "https://payport.novalnet.de/v2"
@@ -91,6 +98,7 @@ powertranz.base_url = "https://staging.ptranz.com/api/"
prophetpay.base_url = "https://ccm-thirdparty.cps.golf/"
rapyd.base_url = "https://sandboxapi.rapyd.net"
razorpay.base_url = "https://sandbox.juspay.in/"
+redsys.base_url = "https://sis-t.redsys.es:25443/sis/realizarPago"
riskified.base_url = "https://sandbox.riskified.com/api"
shift4.base_url = "https://api.shift4.com/"
signifyd.base_url = "https://api.signifyd.com/"
@@ -110,6 +118,7 @@ wellsfargopayout.base_url = "https://api-sandbox.wellsfargo.com/"
wise.base_url = "https://api.sandbox.transferwise.tech/"
worldline.base_url = "https://eu.sandbox.api-ingenico.com/"
worldpay.base_url = "https://try.access.worldpay.com/"
+xendit.base_url = "https://api.xendit.co"
zen.base_url = "https://api.zen-test.com/"
zen.secondary_base_url = "https://secure.zen-test.com/"
zsl.base_url = "https://api.sitoffalb.net/"
@@ -144,24 +153,38 @@ password_validity_in_days = 90
two_factor_auth_expiry_in_secs = 300
totp_issuer_name = "Hyperswitch Sandbox"
base_url = "https://app.hyperswitch.io"
+force_two_factor_auth = false
+force_cookies = false
[frm]
enabled = true
[mandates.supported_payment_methods]
-bank_debit.ach = { connector_list = "gocardless,adyen" } # Mandate supported payment method type and connector for bank_debit
-bank_debit.becs = { connector_list = "gocardless" } # Mandate supported payment method type and connector for bank_debit
-bank_debit.bacs = { connector_list = "adyen" } # Mandate supported payment method type and connector for bank_debit
-bank_debit.sepa = { connector_list = "gocardless,adyen" } # Mandate supported payment method type and connector for bank_debit
-card.credit.connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree" # Mandate supported payment method type and connector for card
-card.debit.connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree" # Mandate supported payment method type and connector for card
-pay_later.klarna.connector_list = "adyen" # Mandate supported payment method type and connector for pay_later
-wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon,bankofamerica" # Mandate supported payment method type and connector for wallets
-wallet.google_pay.connector_list = "stripe,adyen,cybersource,bankofamerica" # Mandate supported payment method type and connector for wallets
-wallet.paypal.connector_list = "adyen" # Mandate supported payment method type and connector for wallets
-bank_redirect.ideal.connector_list = "stripe,adyen,globalpay,multisafepay" # Mandate supported payment method type and connector for bank_redirect
-bank_redirect.sofort.connector_list = "stripe,adyen,globalpay" # Mandate supported payment method type and connector for bank_redirect
-bank_redirect.giropay.connector_list = "adyen,globalpay,multisafepay" # Mandate supported payment method type and connector for bank_redirect
+bank_debit.ach = { connector_list = "gocardless,adyen,stripe" }
+bank_debit.becs = { connector_list = "gocardless,stripe,adyen" }
+bank_debit.bacs = { connector_list = "stripe,gocardless" }
+bank_debit.sepa = { connector_list = "gocardless,adyen,stripe,deutschebank" }
+card.credit.connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree,nuvei,payme,wellsfargo,bamboraapac,elavon,fiuu,nexixpay,novalnet,paybox,paypal"
+card.debit.connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree,nuvei,payme,wellsfargo,bamboraapac,elavon,fiuu,nexixpay,novalnet,paybox,paypal"
+pay_later.klarna.connector_list = "adyen"
+wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon,bankofamerica,nexinets,novalnet"
+wallet.google_pay.connector_list = "stripe,adyen,cybersource,bankofamerica,noon,globalpay,multisafepay,novalnet"
+wallet.paypal.connector_list = "adyen,globalpay,nexinets,novalnet,paypal"
+wallet.momo.connector_list = "adyen"
+wallet.kakao_pay.connector_list = "adyen"
+wallet.go_pay.connector_list = "adyen"
+wallet.gcash.connector_list = "adyen"
+wallet.dana.connector_list = "adyen"
+wallet.twint.connector_list = "adyen"
+wallet.vipps.connector_list = "adyen"
+
+bank_redirect.ideal.connector_list = "stripe,adyen,globalpay,multisafepay,nexinets"
+bank_redirect.sofort.connector_list = "stripe,adyen,globalpay"
+bank_redirect.giropay.connector_list = "adyen,globalpay,multisafepay,nexinets"
+bank_redirect.bancontact_card.connector_list="adyen,stripe"
+bank_redirect.trustly.connector_list="adyen"
+bank_redirect.open_banking_uk.connector_list="adyen"
+bank_redirect.eps.connector_list="globalpay,nexinets"
[mandates.update_mandate_supported]
card.credit = { connector_list = "cybersource" } # Update Mandate supported payment method type and connector for card
@@ -211,7 +234,7 @@ alfamart = { country = "ID", currency = "IDR" }
ali_pay = { country = "AU,JP,HK,SG,MY,TH,ES,GB,SE,NO,AT,NL,DE,CY,CH,BE,FR,DK,FI,RO,MT,SI,GR,PT,IE,IT,CA,US", currency = "USD,EUR,GBP,JPY,AUD,SGD,CHF,SEK,NOK,NZD,THB,HKD,CAD" }
ali_pay_hk = { country = "HK", currency = "HKD" }
alma = { country = "FR", currency = "EUR" }
-apple_pay = { country = "AU,NZ,CN,JP,HK,SG,MY,BH,AE,KW,BR,ES,GB,SE,NO,AT,NL,DE,HU,CY,LU,CH,BE,FR,DK,FI,RO,HR,LI,UA,MT,SI,GR,PT,IE,CZ,EE,LT,LV,IT,PL,IS,CA,US", currency = "AUD,CHF,CAD,EUR,GBP,HKD,SGD,USD" }
+apple_pay = { country = "AU,NZ,CN,JP,HK,SG,MY,BH,AE,KW,BR,ES,GB,SE,NO,AT,NL,DE,HU,CY,LU,CH,BE,FR,DK,FI,RO,HR,LI,UA,MT,SI,GR,PT,IE,CZ,EE,LT,LV,IT,PL,IS,CA,US", currency = "AUD,CHF,CAD,EUR,GBP,HKD,SGD,USD,MYR" }
atome = { country = "MY,SG", currency = "MYR,SGD" }
bacs = { country = "GB", currency = "GBP" }
bancontact_card = { country = "BE", currency = "EUR" }
@@ -271,6 +294,10 @@ pix = { country = "BR", currency = "BRL" }
google_pay.currency = "CHF,DKK,EUR,GBP,NOK,PLN,SEK,USD,AUD,NZD,CAD"
paypal.currency = "CHF,DKK,EUR,GBP,NOK,PLN,SEK,USD,AUD,NZD,CAD"
+[pm_filters.bambora]
+credit = { country = "US,CA", currency = "USD" }
+debit = { country = "US,CA", currency = "USD" }
+
[pm_filters.bankofamerica]
credit = { currency = "USD" }
debit = { currency = "USD" }
@@ -278,11 +305,23 @@ apple_pay = { currency = "USD" }
google_pay = { currency = "USD" }
[pm_filters.cybersource]
-credit = { currency = "USD,GBP,EUR" }
-debit = { currency = "USD,GBP,EUR" }
-apple_pay = { currency = "USD,GBP,EUR" }
-google_pay = { currency = "USD,GBP,EUR" }
+credit = { currency = "USD,GBP,EUR,PLN" }
+debit = { currency = "USD,GBP,EUR,PLN" }
+apple_pay = { currency = "USD,GBP,EUR,PLN" }
+google_pay = { currency = "USD,GBP,EUR,PLN" }
samsung_pay = { currency = "USD,GBP,EUR" }
+paze = { currency = "USD" }
+
+[pm_filters.nexixpay]
+credit = { country = "AT,BE,CY,EE,FI,FR,DE,GR,IE,IT,LV,LT,LU,MT,NL,PT,SK,SI,ES,BG,HR,DK,GB,NO,PL,CZ,RO,SE,CH,HU", currency = "ARS,AUD,BHD,CAD,CLP,CNY,COP,HRK,CZK,DKK,HKD,HUF,INR,JPY,KZT,JOD,KRW,KWD,MYR,MXN,NGN,NOK,PHP,QAR,RUB,SAR,SGD,VND,ZAR,SEK,CHF,THB,AED,EGP,GBP,USD,TWD,BYN,RSD,AZN,RON,TRY,AOA,BGN,EUR,UAH,PLN,BRL" }
+debit = { country = "AT,BE,CY,EE,FI,FR,DE,GR,IE,IT,LV,LT,LU,MT,NL,PT,SK,SI,ES,BG,HR,DK,GB,NO,PL,CZ,RO,SE,CH,HU", currency = "ARS,AUD,BHD,CAD,CLP,CNY,COP,HRK,CZK,DKK,HKD,HUF,INR,JPY,KZT,JOD,KRW,KWD,MYR,MXN,NGN,NOK,PHP,QAR,RUB,SAR,SGD,VND,ZAR,SEK,CHF,THB,AED,EGP,GBP,USD,TWD,BYN,RSD,AZN,RON,TRY,AOA,BGN,EUR,UAH,PLN,BRL" }
+
+[pm_filters.novalnet]
+credit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+debit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+apple_pay = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+google_pay = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+paypal = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
[pm_filters.braintree]
paypal.currency = "AUD,BRL,CAD,CNY,CZK,DKK,EUR,HKD,HUF,ILS,JPY,MYR,MXN,TWD,NZD,NOK,PHP,PLN,GBP,RUB,SGD,SEK,CHF,THB,USD"
@@ -299,6 +338,10 @@ debit.currency = "USD"
ali_pay.currency = "GBP,CNY"
we_chat_pay.currency = "GBP,CNY"
+[pm.filters.jpmorgan]
+debit = { country = "CA, EU, UK, US", currency = "CAD, EUR, GBP, USD" }
+credit = { country = "CA, EU, UK, US", currency = "CAD, EUR, GBP, USD" }
+
[pm_filters.klarna]
klarna = { country = "AU,AT,BE,CA,CZ,DK,FI,FR,DE,GR,IE,IT,NL,NZ,NO,PL,PT,ES,SE,CH,GB,US", currency = "CHF,DKK,EUR,GBP,NOK,PLN,SEK,USD,AUD,NZD,CAD" }
@@ -334,8 +377,10 @@ upi_collect = {country = "IN", currency = "INR"}
open_banking_pis = {currency = "EUR,GBP"}
[pm_filters.worldpay]
-apple_pay.country = "AU,CN,HK,JP,MO,MY,NZ,SG,TW,AM,AT,AZ,BY,BE,BG,HR,CY,CZ,DK,EE,FO,FI,FR,GE,DE,GR,GL,GG,HU,IS,IE,IM,IT,KZ,JE,LV,LI,LT,LU,MT,MD,MC,ME,NL,NO,PL,PT,RO,SM,RS,SK,SI,ES,SE,CH,UA,GB,AR,CO,CR,BR,MX,PE,BH,IL,JO,KW,PS,QA,SA,AE,CA,UM,US"
-google_pay.country = "AL,DZ,AS,AO,AG,AR,AU,AT,AZ,BH,BY,BE,BR,BG,CA,CL,CO,HR,CZ,DK,DO,EG,EE,FI,FR,DE,GR,HK,HU,IN,ID,IE,IL,IT,JP,JO,KZ,KE,KW,LV,LB,LT,LU,MY,MX,NL,NZ,NO,OM,PK,PA,PE,PH,PL,PT,QA,RO,RU,SA,SG,SK,ZA,ES,LK,SE,CH,TW,TH,TR,UA,AE,GB,US,UY,VN"
+debit = { country = "AF,DZ,AW,AU,AZ,BS,BH,BD,BB,BZ,BM,BT,BO,BA,BW,BR,BN,BG,BI,KH,CA,CV,KY,CL,CO,KM,CD,CR,CZ,DK,DJ,ST,DO,EC,EG,SV,ER,ET,FK,FJ,GM,GE,GH,GI,GT,GN,GY,HT,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IL,IT,JM,JP,JO,KZ,KE,KW,LA,LB,LS,LR,LY,LT,MO,MK,MG,MW,MY,MV,MR,MU,MX,MD,MN,MA,MZ,MM,NA,NZ,NI,NG,KP,NO,AR,PK,PG,PY,PE,UY,PH,PL,GB,QA,OM,RO,RU,RW,WS,SG,ST,ZA,KR,LK,SH,SD,SR,SZ,SE,CH,SY,TW,TJ,TZ,TH,TT,TN,TR,UG,UA,US,UZ,VU,VE,VN,ZM,ZW", currency = "AFN,DZD,ANG,AWG,AUD,AZN,BSD,BHD,BDT,BBD,BZD,BMD,BTN,BOB,BAM,BWP,BRL,BND,BGN,BIF,KHR,CAD,CVE,KYD,XOF,XAF,XPF,CLP,COP,KMF,CDF,CRC,EUR,CZK,DKK,DJF,DOP,XCD,EGP,SVC,ERN,ETB,EUR,FKP,FJD,GMD,GEL,GHS,GIP,GTQ,GNF,GYD,HTG,HNL,HKD,HUF,ISK,INR,IDR,IRR,IQD,ILS,JMD,JPY,JOD,KZT,KES,KWD,LAK,LBP,LSL,LRD,LYD,MOP,MKD,MGA,MWK,MYR,MVR,MRU,MUR,MXN,MDL,MNT,MAD,MZN,MMK,NAD,NPR,NZD,NIO,NGN,KPW,NOK,ARS,PKR,PAB,PGK,PYG,PEN,UYU,PHP,PLN,GBP,QAR,OMR,RON,RUB,RWF,WST,SAR,RSD,SCR,SLL,SGD,STN,SBD,SOS,ZAR,KRW,LKR,SHP,SDG,SRD,SZL,SEK,CHF,SYP,TWD,TJS,TZS,THB,TOP,TTD,TND,TRY,TMT,AED,UGX,UAH,USD,UZS,VUV,VND,YER,CNY,ZMW,ZWL" }
+credit = { country = "AF,DZ,AW,AU,AZ,BS,BH,BD,BB,BZ,BM,BT,BO,BA,BW,BR,BN,BG,BI,KH,CA,CV,KY,CL,CO,KM,CD,CR,CZ,DK,DJ,ST,DO,EC,EG,SV,ER,ET,FK,FJ,GM,GE,GH,GI,GT,GN,GY,HT,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IL,IT,JM,JP,JO,KZ,KE,KW,LA,LB,LS,LR,LY,LT,MO,MK,MG,MW,MY,MV,MR,MU,MX,MD,MN,MA,MZ,MM,NA,NZ,NI,NG,KP,NO,AR,PK,PG,PY,PE,UY,PH,PL,GB,QA,OM,RO,RU,RW,WS,SG,ST,ZA,KR,LK,SH,SD,SR,SZ,SE,CH,SY,TW,TJ,TZ,TH,TT,TN,TR,UG,UA,US,UZ,VU,VE,VN,ZM,ZW", currency = "AFN,DZD,ANG,AWG,AUD,AZN,BSD,BHD,BDT,BBD,BZD,BMD,BTN,BOB,BAM,BWP,BRL,BND,BGN,BIF,KHR,CAD,CVE,KYD,XOF,XAF,XPF,CLP,COP,KMF,CDF,CRC,EUR,CZK,DKK,DJF,DOP,XCD,EGP,SVC,ERN,ETB,EUR,FKP,FJD,GMD,GEL,GHS,GIP,GTQ,GNF,GYD,HTG,HNL,HKD,HUF,ISK,INR,IDR,IRR,IQD,ILS,JMD,JPY,JOD,KZT,KES,KWD,LAK,LBP,LSL,LRD,LYD,MOP,MKD,MGA,MWK,MYR,MVR,MRU,MUR,MXN,MDL,MNT,MAD,MZN,MMK,NAD,NPR,NZD,NIO,NGN,KPW,NOK,ARS,PKR,PAB,PGK,PYG,PEN,UYU,PHP,PLN,GBP,QAR,OMR,RON,RUB,RWF,WST,SAR,RSD,SCR,SLL,SGD,STN,SBD,SOS,ZAR,KRW,LKR,SHP,SDG,SRD,SZL,SEK,CHF,SYP,TWD,TJS,TZS,THB,TOP,TTD,TND,TRY,TMT,AED,UGX,UAH,USD,UZS,VUV,VND,YER,CNY,ZMW,ZWL" }
+google_pay = { country = "AL,DZ,AS,AO,AG,AR,AU,AT,AZ,BH,BY,BE,BR,BG,CA,CL,CO,HR,CZ,DK,DO,EG,EE,FI,FR,DE,GR,HK,HU,IN,ID,IE,IL,IT,JP,JO,KZ,KE,KW,LV,LB,LT,LU,MY,MX,NL,NZ,NO,OM,PK,PA,PE,PH,PL,PT,QA,RO,RU,SA,SG,SK,ZA,ES,LK,SE,CH,TW,TH,TR,UA,AE,GB,US,UY,VN" }
+apple_pay = { country = "AU,CN,HK,JP,MO,MY,NZ,SG,TW,AM,AT,AZ,BY,BE,BG,HR,CY,CZ,DK,EE,FO,FI,FR,GE,DE,GR,GL,GG,HU,IS,IE,IM,IT,KZ,JE,LV,LI,LT,LU,MT,MD,MC,ME,NL,NO,PL,PT,RO,SM,RS,SK,SI,ES,SE,CH,UA,GB,AR,CO,CR,BR,MX,PE,BH,IL,JO,KW,PS,QA,SA,AE,CA,UM,US" }
[pm_filters.zen]
boleto = { country = "BR", currency = "BRL" }
@@ -350,6 +395,10 @@ red_pagos = { country = "UY", currency = "UYU" }
[pm_filters.zsl]
local_bank_transfer = { country = "CN", currency = "CNY" }
+
+[pm_filters.fiuu]
+duit_now = { country ="MY", currency = "MYR" }
+
[payout_method_filters.adyenplatform]
sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,CZ,DE,HU,NO,PL,SE,GB,CH" , currency = "EUR,CZK,DKK,HUF,NOK,PLN,SEK,GBP,CHF" }
@@ -367,6 +416,7 @@ nmi.payment_method = "card"
payme.payment_method = "card"
deutschebank = { payment_method = "bank_debit" }
paybox = { payment_method = "card" }
+nexixpay = { payment_method = "card" }
#tokenization configuration which describe token lifetime and payment method for specific connector
[tokenization]
@@ -387,7 +437,7 @@ outgoing_enabled = true
connectors_with_webhook_source_verification_call = "paypal" # List of connectors which has additional source verification api-call
[unmasked_headers]
-keys = "accept-language,user-agent"
+keys = "accept-language,user-agent,x-profile-id"
[saved_payment_methods]
sdk_eligible_payment_methods = "card"
@@ -400,3 +450,6 @@ card_networks = "Visa, AmericanExpress, Mastercard"
[network_tokenization_supported_connectors]
connector_list = "cybersource"
+
+[platform]
+enabled = false
diff --git a/config/development.toml b/config/development.toml
index d723e09ec4bb..4c9b8516b5ad 100644
--- a/config/development.toml
+++ b/config/development.toml
@@ -99,6 +99,7 @@ cards = [
"adyen",
"adyenplatform",
"airwallex",
+ "amazonpay",
"authorizedotnet",
"bambora",
"bamboraapac",
@@ -114,9 +115,11 @@ cards = [
"cybersource",
"datatrans",
"deutschebank",
+ "digitalvirgo",
"dlocal",
"dummyconnector",
"ebanx",
+ "elavon",
"fiserv",
"fiservemea",
"fiuu",
@@ -127,13 +130,16 @@ cards = [
"gpayments",
"helcim",
"iatapay",
+ "inespay",
"itaubank",
+ "jpmorgan",
"mollie",
"multisafepay",
"netcetera",
"nexinets",
"nexixpay",
"nmi",
+ "nomupay",
"noon",
"novalnet",
"nuvei",
@@ -149,6 +155,7 @@ cards = [
"plaid",
"powertranz",
"prophetpay",
+ "redsys",
"shift4",
"square",
"stax",
@@ -158,12 +165,14 @@ cards = [
"thunes",
"trustpay",
"tsys",
+ "unified_authentication_service",
"volt",
"wellsfargo",
"wellsfargopayout",
"wise",
"worldline",
"worldpay",
+ "xendit",
"zen",
"zsl",
]
@@ -192,6 +201,7 @@ adyenplatform.base_url = "https://balanceplatform-api-test.adyen.com/"
adyen.payout_base_url = "https://pal-test.adyen.com/"
adyen.dispute_base_url = "https://ca-test.adyen.com/"
airwallex.base_url = "https://api-demo.airwallex.com/"
+amazonpay.base_url = "https://pay-api.amazon.com/v2"
applepay.base_url = "https://apple-pay-gateway.apple.com/"
authorizedotnet.base_url = "https://apitest.authorize.net/xml/v1/request.api"
bambora.base_url = "https://api.na.bambora.com"
@@ -211,9 +221,11 @@ cryptopay.base_url = "https://business-sandbox.cryptopay.me"
cybersource.base_url = "https://apitest.cybersource.com/"
datatrans.base_url = "https://api.sandbox.datatrans.com/"
deutschebank.base_url = "https://testmerch.directpos.de/rest-api"
+digitalvirgo.base_url = "https://dcb-integration-service-sandbox-external.staging.digitalvirgo.pl"
dlocal.base_url = "https://sandbox.dlocal.com/"
dummyconnector.base_url = "http://localhost:8080/dummy-connector"
ebanx.base_url = "https://sandbox.ebanxpay.com/"
+elavon.base_url = "https://api.demo.convergepay.com/VirtualMerchantDemo/"
fiserv.base_url = "https://cert.api.fiservapps.com/"
fiservemea.base_url = "https://prod.emea.api.fiservapps.com/sandbox"
fiuu.base_url = "https://sandbox.merchant.razer.com/"
@@ -226,7 +238,10 @@ gocardless.base_url = "https://api-sandbox.gocardless.com"
gpayments.base_url = "https://{{merchant_endpoint_prefix}}-test.api.as1.gpayments.net"
helcim.base_url = "https://api.helcim.com/"
iatapay.base_url = "https://sandbox.iata-pay.iata.org/api/v1"
+inespay.base_url = "https://apiflow.inespay.com/san/v21"
itaubank.base_url = "https://sandbox.devportal.itau.com.br/"
+jpmorgan.base_url = "https://api-mock.payments.jpmorgan.com/api/v2"
+jpmorgan.secondary_base_url= "https://id.payments.jpmorgan.com"
klarna.base_url = "https://api{{klarna_region}}.playground.klarna.com/"
mifinity.base_url = "https://demo.mifinity.com/"
mollie.base_url = "https://api.mollie.com/v2/"
@@ -236,6 +251,7 @@ netcetera.base_url = "https://{{merchant_endpoint_prefix}}.3ds-server.prev.netce
nexinets.base_url = "https://apitest.payengine.de/v1"
nexixpay.base_url = "https://xpaysandbox.nexigroup.com/api/phoenix-0.0/psp/api/v1"
nmi.base_url = "https://secure.nmi.com/"
+nomupay.base_url = "https://payout-api.sandbox.nomupay.com"
noon.base_url = "https://api-test.noonpayments.com/"
novalnet.base_url = "https://payport.novalnet.de/v2"
noon.key_mode = "Test"
@@ -255,6 +271,7 @@ powertranz.base_url = "https://staging.ptranz.com/api/"
prophetpay.base_url = "https://ccm-thirdparty.cps.golf/"
rapyd.base_url = "https://sandboxapi.rapyd.net"
razorpay.base_url = "https://sandbox.juspay.in/"
+redsys.base_url = "https://sis-t.redsys.es:25443/sis/realizarPago"
riskified.base_url = "https://sandbox.riskified.com/api"
shift4.base_url = "https://api.shift4.com/"
signifyd.base_url = "https://api.signifyd.com/"
@@ -269,8 +286,10 @@ stripe.base_url_file_upload = "https://files.stripe.com/"
wise.base_url = "https://api.sandbox.transferwise.tech/"
worldline.base_url = "https://eu.sandbox.api-ingenico.com/"
worldpay.base_url = "https://try.access.worldpay.com/"
+xendit.base_url = "https://api.xendit.co"
trustpay.base_url = "https://test-tpgw.trustpay.eu/"
tsys.base_url = "https://stagegw.transnox.com/"
+unified_authentication_service.base_url = "http://localhost:8000"
volt.base_url = "https://api.sandbox.volt.io/"
wellsfargo.base_url = "https://apitest.cybersource.com/"
wellsfargopayout.base_url = "https://api-sandbox.wellsfargo.com/"
@@ -301,7 +320,7 @@ wildcard_origin = true
sender_email = "example@example.com"
aws_region = ""
allowed_unverified_days = 1
-active_email_client = "SES"
+active_email_client = "NO_EMAIL_CLIENT"
recon_recipient_email = "recon@example.com"
prod_intent_recipient_email = "business@example.com"
@@ -314,6 +333,8 @@ password_validity_in_days = 90
two_factor_auth_expiry_in_secs = 300
totp_issuer_name = "Hyperswitch Dev"
base_url = "http://localhost:8080"
+force_two_factor_auth = false
+force_cookies = true
[bank_config.eps]
stripe = { banks = "arzte_und_apotheker_bank,austrian_anadi_bank_ag,bank_austria,bankhaus_carl_spangler,bankhaus_schelhammer_und_schattera_ag,bawag_psk_ag,bks_bank_ag,brull_kallmus_bank_ag,btv_vier_lander_bank,capital_bank_grawe_gruppe_ag,dolomitenbank,easybank_ag,erste_bank_und_sparkassen,hypo_alpeadriabank_international_ag,hypo_noe_lb_fur_niederosterreich_u_wien,hypo_oberosterreich_salzburg_steiermark,hypo_tirol_bank_ag,hypo_vorarlberg_bank_ag,hypo_bank_burgenland_aktiengesellschaft,marchfelder_bank,oberbank_ag,raiffeisen_bankengruppe_osterreich,schoellerbank_ag,sparda_bank_wien,volksbank_gruppe,volkskreditbank_ag,vr_bank_braunau" }
@@ -381,7 +402,7 @@ open_banking_pis = {currency = "EUR,GBP"}
[pm_filters.adyen]
google_pay = { country = "AU,NZ,JP,HK,SG,MY,TH,VN,BH,AE,KW,BR,ES,GB,SE,NO,SK,AT,NL,DE,HU,CY,LU,CH,BE,FR,DK,RO,HR,LI,MT,SI,GR,PT,IE,CZ,EE,LT,LV,IT,PL,TR,IS,CA,US", currency = "AED,ALL,AMD,ANG,AOA,ARS,AUD,AWG,AZN,BAM,BBD,BDT,BGN,BHD,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CHF,CLP,CNY,COP,CRC,CUP,CVE,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,FKP,GBP,GEL,GHS,GIP,GMD,GNF,GTQ,GYD,HKD,HNL,HTG,HUF,IDR,ILS,INR,IQD,JMD,JOD,JPY,KES,KGS,KHR,KMF,KRW,KWD,KYD,KZT,LAK,LBP,LKR,LYD,MAD,MDL,MKD,MMK,MNT,MOP,MRU,MUR,MVR,MWK,MXN,MYR,MZN,NAD,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLE,SOS,SRD,STN,SVC,SZL,THB,TND,TOP,TRY,TTD,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,XOF,XPF,YER,ZAR,ZMW" }
-apple_pay = { country = "AU,NZ,CN,JP,HK,SG,MY,BH,AE,KW,BR,ES,GB,SE,NO,AT,NL,DE,HU,CY,LU,CH,BE,FR,DK,FI,RO,HR,LI,UA,MT,SI,GR,PT,IE,CZ,EE,LT,LV,IT,PL,IS,CA,US", currency = "AUD,CHF,CAD,EUR,GBP,HKD,SGD,USD" }
+apple_pay = { country = "AU,NZ,CN,JP,HK,SG,MY,BH,AE,KW,BR,ES,GB,SE,NO,AT,NL,DE,HU,CY,LU,CH,BE,FR,DK,FI,RO,HR,LI,UA,MT,SI,GR,PT,IE,CZ,EE,LT,LV,IT,PL,IS,CA,US", currency = "AUD,CHF,CAD,EUR,GBP,HKD,SGD,USD,MYR" }
paypal = { country = "AU,NZ,CN,JP,HK,MY,TH,KR,PH,ID,AE,KW,BR,ES,GB,SE,NO,SK,AT,NL,DE,HU,CY,LU,CH,BE,FR,DK,FI,RO,HR,UA,MT,SI,GI,PT,IE,CZ,EE,LT,LV,IT,PL,IS,CA,US", currency = "AUD,BRL,CAD,CZK,DKK,EUR,HKD,HUF,INR,JPY,MYR,MXN,NZD,NOK,PHP,PLN,RUB,GBP,SGD,SEK,CHF,THB,USD" }
mobile_pay = { country = "DK,FI", currency = "DKK,SEK,NOK,EUR" }
ali_pay = { country = "AU,JP,HK,SG,MY,TH,ES,GB,SE,NO,AT,NL,DE,CY,CH,BE,FR,DK,FI,RO,MT,SI,GR,PT,IE,IT,CA,US", currency = "USD,EUR,GBP,JPY,AUD,SGD,CHF,SEK,NOK,NZD,THB,HKD,CAD" }
@@ -438,6 +459,10 @@ pay_easy = { country = "JP", currency = "JPY" }
pix = { country = "BR", currency = "BRL" }
boleto = { country = "BR", currency = "BRL" }
+[pm_filters.bambora]
+credit = { country = "US,CA", currency = "USD" }
+debit = { country = "US,CA", currency = "USD" }
+
[pm_filters.bankofamerica]
credit = { currency = "USD" }
debit = { currency = "USD" }
@@ -446,11 +471,23 @@ google_pay = { currency = "USD" }
[pm_filters.cybersource]
-credit = { currency = "USD,GBP,EUR" }
-debit = { currency = "USD,GBP,EUR" }
-apple_pay = { currency = "USD,GBP,EUR" }
-google_pay = { currency = "USD,GBP,EUR" }
+credit = { currency = "USD,GBP,EUR,PLN" }
+debit = { currency = "USD,GBP,EUR,PLN" }
+apple_pay = { currency = "USD,GBP,EUR,PLN" }
+google_pay = { currency = "USD,GBP,EUR,PLN" }
samsung_pay = { currency = "USD,GBP,EUR" }
+paze = { currency = "USD" }
+
+[pm_filters.nexixpay]
+credit = { country = "AT,BE,CY,EE,FI,FR,DE,GR,IE,IT,LV,LT,LU,MT,NL,PT,SK,SI,ES,BG,HR,DK,GB,NO,PL,CZ,RO,SE,CH,HU", currency = "ARS,AUD,BHD,CAD,CLP,CNY,COP,HRK,CZK,DKK,HKD,HUF,INR,JPY,KZT,JOD,KRW,KWD,MYR,MXN,NGN,NOK,PHP,QAR,RUB,SAR,SGD,VND,ZAR,SEK,CHF,THB,AED,EGP,GBP,USD,TWD,BYN,RSD,AZN,RON,TRY,AOA,BGN,EUR,UAH,PLN,BRL" }
+debit = { country = "AT,BE,CY,EE,FI,FR,DE,GR,IE,IT,LV,LT,LU,MT,NL,PT,SK,SI,ES,BG,HR,DK,GB,NO,PL,CZ,RO,SE,CH,HU", currency = "ARS,AUD,BHD,CAD,CLP,CNY,COP,HRK,CZK,DKK,HKD,HUF,INR,JPY,KZT,JOD,KRW,KWD,MYR,MXN,NGN,NOK,PHP,QAR,RUB,SAR,SGD,VND,ZAR,SEK,CHF,THB,AED,EGP,GBP,USD,TWD,BYN,RSD,AZN,RON,TRY,AOA,BGN,EUR,UAH,PLN,BRL" }
+
+[pm_filters.novalnet]
+credit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+debit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+apple_pay = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+google_pay = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+paypal = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
[pm_filters.braintree]
paypal = { currency = "AUD,BRL,CAD,CNY,CZK,DKK,EUR,HKD,HUF,ILS,JPY,MYR,MXN,TWD,NZD,NOK,PHP,PLN,GBP,RUB,SGD,SEK,CHF,THB,USD" }
@@ -459,6 +496,10 @@ paypal = { currency = "AUD,BRL,CAD,CNY,CZK,DKK,EUR,HKD,HUF,ILS,JPY,MYR,MXN,TWD,N
credit = { currency = "USD" }
debit = { currency = "USD" }
+[pm.filters.jpmorgan]
+debit = { country = "CA, EU, UK, US", currency = "CAD, EUR, GBP, USD" }
+credit = { country = "CA, EU, UK, US", currency = "CAD, EUR, GBP, USD" }
+
[pm_filters.klarna]
klarna = { country = "AU,AT,BE,CA,CZ,DK,FI,FR,DE,GR,IE,IT,NL,NZ,NO,PL,PT,ES,SE,CH,GB,US", currency = "AUD,EUR,EUR,CAD,CZK,DKK,EUR,EUR,EUR,EUR,EUR,EUR,EUR,NZD,NOK,PLN,EUR,EUR,SEK,CHF,GBP,USD" }
@@ -511,6 +552,8 @@ google_pay = { currency = "CHF,DKK,EUR,GBP,NOK,PLN,SEK,USD,AUD,NZD,CAD" }
paypal = { currency = "CHF,DKK,EUR,GBP,NOK,PLN,SEK,USD,AUD,NZD,CAD" }
[pm_filters.worldpay]
+debit = { country = "AF,DZ,AW,AU,AZ,BS,BH,BD,BB,BZ,BM,BT,BO,BA,BW,BR,BN,BG,BI,KH,CA,CV,KY,CL,CO,KM,CD,CR,CZ,DK,DJ,ST,DO,EC,EG,SV,ER,ET,FK,FJ,GM,GE,GH,GI,GT,GN,GY,HT,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IL,IT,JM,JP,JO,KZ,KE,KW,LA,LB,LS,LR,LY,LT,MO,MK,MG,MW,MY,MV,MR,MU,MX,MD,MN,MA,MZ,MM,NA,NZ,NI,NG,KP,NO,AR,PK,PG,PY,PE,UY,PH,PL,GB,QA,OM,RO,RU,RW,WS,SG,ST,ZA,KR,LK,SH,SD,SR,SZ,SE,CH,SY,TW,TJ,TZ,TH,TT,TN,TR,UG,UA,US,UZ,VU,VE,VN,ZM,ZW", currency = "AFN,DZD,ANG,AWG,AUD,AZN,BSD,BHD,BDT,BBD,BZD,BMD,BTN,BOB,BAM,BWP,BRL,BND,BGN,BIF,KHR,CAD,CVE,KYD,XOF,XAF,XPF,CLP,COP,KMF,CDF,CRC,EUR,CZK,DKK,DJF,DOP,XCD,EGP,SVC,ERN,ETB,EUR,FKP,FJD,GMD,GEL,GHS,GIP,GTQ,GNF,GYD,HTG,HNL,HKD,HUF,ISK,INR,IDR,IRR,IQD,ILS,JMD,JPY,JOD,KZT,KES,KWD,LAK,LBP,LSL,LRD,LYD,MOP,MKD,MGA,MWK,MYR,MVR,MRU,MUR,MXN,MDL,MNT,MAD,MZN,MMK,NAD,NPR,NZD,NIO,NGN,KPW,NOK,ARS,PKR,PAB,PGK,PYG,PEN,UYU,PHP,PLN,GBP,QAR,OMR,RON,RUB,RWF,WST,SAR,RSD,SCR,SLL,SGD,STN,SBD,SOS,ZAR,KRW,LKR,SHP,SDG,SRD,SZL,SEK,CHF,SYP,TWD,TJS,TZS,THB,TOP,TTD,TND,TRY,TMT,AED,UGX,UAH,USD,UZS,VUV,VND,YER,CNY,ZMW,ZWL" }
+credit = { country = "AF,DZ,AW,AU,AZ,BS,BH,BD,BB,BZ,BM,BT,BO,BA,BW,BR,BN,BG,BI,KH,CA,CV,KY,CL,CO,KM,CD,CR,CZ,DK,DJ,ST,DO,EC,EG,SV,ER,ET,FK,FJ,GM,GE,GH,GI,GT,GN,GY,HT,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IL,IT,JM,JP,JO,KZ,KE,KW,LA,LB,LS,LR,LY,LT,MO,MK,MG,MW,MY,MV,MR,MU,MX,MD,MN,MA,MZ,MM,NA,NZ,NI,NG,KP,NO,AR,PK,PG,PY,PE,UY,PH,PL,GB,QA,OM,RO,RU,RW,WS,SG,ST,ZA,KR,LK,SH,SD,SR,SZ,SE,CH,SY,TW,TJ,TZ,TH,TT,TN,TR,UG,UA,US,UZ,VU,VE,VN,ZM,ZW", currency = "AFN,DZD,ANG,AWG,AUD,AZN,BSD,BHD,BDT,BBD,BZD,BMD,BTN,BOB,BAM,BWP,BRL,BND,BGN,BIF,KHR,CAD,CVE,KYD,XOF,XAF,XPF,CLP,COP,KMF,CDF,CRC,EUR,CZK,DKK,DJF,DOP,XCD,EGP,SVC,ERN,ETB,EUR,FKP,FJD,GMD,GEL,GHS,GIP,GTQ,GNF,GYD,HTG,HNL,HKD,HUF,ISK,INR,IDR,IRR,IQD,ILS,JMD,JPY,JOD,KZT,KES,KWD,LAK,LBP,LSL,LRD,LYD,MOP,MKD,MGA,MWK,MYR,MVR,MRU,MUR,MXN,MDL,MNT,MAD,MZN,MMK,NAD,NPR,NZD,NIO,NGN,KPW,NOK,ARS,PKR,PAB,PGK,PYG,PEN,UYU,PHP,PLN,GBP,QAR,OMR,RON,RUB,RWF,WST,SAR,RSD,SCR,SLL,SGD,STN,SBD,SOS,ZAR,KRW,LKR,SHP,SDG,SRD,SZL,SEK,CHF,SYP,TWD,TJS,TZS,THB,TOP,TTD,TND,TRY,TMT,AED,UGX,UAH,USD,UZS,VUV,VND,YER,CNY,ZMW,ZWL" }
google_pay = { country = "AL,DZ,AS,AO,AG,AR,AU,AT,AZ,BH,BY,BE,BR,BG,CA,CL,CO,HR,CZ,DK,DO,EG,EE,FI,FR,DE,GR,HK,HU,IN,ID,IE,IL,IT,JP,JO,KZ,KE,KW,LV,LB,LT,LU,MY,MX,NL,NZ,NO,OM,PK,PA,PE,PH,PL,PT,QA,RO,RU,SA,SG,SK,ZA,ES,LK,SE,CH,TW,TH,TR,UA,AE,GB,US,UY,VN" }
apple_pay = { country = "AU,CN,HK,JP,MO,MY,NZ,SG,TW,AM,AT,AZ,BY,BE,BG,HR,CY,CZ,DK,EE,FO,FI,FR,GE,DE,GR,GL,GG,HU,IS,IE,IM,IT,KZ,JE,LV,LI,LT,LU,MT,MD,MC,ME,NL,NO,PL,PT,RO,SM,RS,SK,SI,ES,SE,CH,UA,GB,AR,CO,CR,BR,MX,PE,BH,IL,JO,KW,PS,QA,SA,AE,CA,UM,US" }
@@ -522,6 +565,9 @@ region = ""
credit = { currency = "USD" }
debit = { currency = "USD" }
+[pm_filters.fiuu]
+duit_now = { country ="MY", currency = "MYR" }
+
[tokenization]
stripe = { long_lived_token = false, payment_method = "wallet", payment_method_type = { type = "disable_only", list = "google_pay" } }
checkout = { long_lived_token = false, payment_method = "wallet", apple_pay_pre_decrypt_flow = "network_tokenization" }
@@ -544,6 +590,7 @@ nmi = { payment_method = "card" }
payme = { payment_method = "card" }
deutschebank = { payment_method = "bank_debit" }
paybox = { payment_method = "card" }
+nexixpay = { payment_method = "card" }
[connector_customer]
connector_list = "gocardless,stax,stripe"
@@ -576,19 +623,31 @@ connectors_with_delayed_session_response = "trustpay,payme"
connectors_with_webhook_source_verification_call = "paypal"
[mandates.supported_payment_methods]
-pay_later.klarna = { connector_list = "adyen" }
-wallet.google_pay = { connector_list = "stripe,adyen,cybersource,bankofamerica" }
-wallet.apple_pay = { connector_list = "stripe,adyen,cybersource,noon,bankofamerica" }
-wallet.paypal = { connector_list = "adyen" }
-card.credit = { connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree" }
-card.debit = { connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree" }
-bank_debit.ach = { connector_list = "gocardless,adyen" }
-bank_debit.becs = { connector_list = "gocardless" }
-bank_debit.bacs = { connector_list = "adyen" }
-bank_debit.sepa = { connector_list = "gocardless,adyen" }
-bank_redirect.ideal = { connector_list = "stripe,adyen,globalpay,multisafepay" }
-bank_redirect.sofort = { connector_list = "stripe,adyen,globalpay" }
-bank_redirect.giropay = { connector_list = "adyen,globalpay,multisafepay" }
+bank_debit.ach = { connector_list = "gocardless,adyen,stripe" }
+bank_debit.becs = { connector_list = "gocardless,stripe,adyen" }
+bank_debit.bacs = { connector_list = "stripe,gocardless" }
+bank_debit.sepa = { connector_list = "gocardless,adyen,stripe,deutschebank" }
+card.credit.connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree,nuvei,payme,wellsfargo,bamboraapac,elavon,fiuu,nexixpay,novalnet,paybox,paypal"
+card.debit.connector_list = "stripe,adyen,authorizedotnet,cybersource,globalpay,worldpay,multisafepay,nmi,nexinets,noon,bankofamerica,braintree,nuvei,payme,wellsfargo,bamboraapac,elavon,fiuu,nexixpay,novalnet,paybox,paypal"
+pay_later.klarna.connector_list = "adyen"
+wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon,bankofamerica,nexinets,novalnet"
+wallet.google_pay.connector_list = "stripe,adyen,cybersource,bankofamerica,noon,globalpay,multisafepay,novalnet"
+wallet.paypal.connector_list = "adyen,globalpay,nexinets,novalnet,paypal"
+wallet.momo.connector_list = "adyen"
+wallet.kakao_pay.connector_list = "adyen"
+wallet.go_pay.connector_list = "adyen"
+wallet.gcash.connector_list = "adyen"
+wallet.dana.connector_list = "adyen"
+wallet.twint.connector_list = "adyen"
+wallet.vipps.connector_list = "adyen"
+
+bank_redirect.ideal.connector_list = "stripe,adyen,globalpay,multisafepay,nexinets"
+bank_redirect.sofort.connector_list = "stripe,adyen,globalpay"
+bank_redirect.giropay.connector_list = "adyen,globalpay,multisafepay,nexinets"
+bank_redirect.bancontact_card.connector_list="adyen,stripe"
+bank_redirect.trustly.connector_list="adyen"
+bank_redirect.open_banking_uk.connector_list="adyen"
+bank_redirect.eps.connector_list="globalpay,nexinets"
[mandates.update_mandate_supported]
card.credit = { connector_list = "cybersource" }
@@ -610,6 +669,10 @@ apple_pay_ppc_key = "APPLE_PAY_PAYMENT_PROCESSING_CERTIFICATE_KEY"
apple_pay_merchant_cert = "APPLE_PAY_MERCHNAT_CERTIFICATE"
apple_pay_merchant_cert_key = "APPLE_PAY_MERCHNAT_CERTIFICATE_KEY"
+[paze_decrypt_keys]
+paze_private_key = "PAZE_PRIVATE_KEY"
+paze_private_key_passphrase = "PAZE_PRIVATE_KEY_PASSPHRASE"
+
[generic_link]
[generic_link.payment_method_collect]
sdk_url = "http://localhost:9050/HyperLoader.js"
@@ -677,6 +740,7 @@ authentication_analytics_topic = "hyperswitch-authentication-events"
[analytics]
source = "sqlx"
+forex_enabled = false
[analytics.clickhouse]
username = "default"
@@ -704,7 +768,7 @@ enabled = true
file_storage_backend = "file_system"
[unmasked_headers]
-keys = "accept-language,user-agent"
+keys = "accept-language,user-agent,x-profile-id"
[opensearch]
host = "https://localhost:9200"
@@ -720,6 +784,10 @@ payment_attempts = "hyperswitch-payment-attempt-events"
payment_intents = "hyperswitch-payment-intent-events"
refunds = "hyperswitch-refund-events"
disputes = "hyperswitch-dispute-events"
+sessionizer_payment_attempts = "sessionizer-payment-attempt-events"
+sessionizer_payment_intents = "sessionizer-payment-intent-events"
+sessionizer_refunds = "sessionizer-refund-events"
+sessionizer_disputes = "sessionizer-dispute-events"
[saved_payment_methods]
sdk_eligible_payment_methods = "card"
@@ -728,8 +796,14 @@ sdk_eligible_payment_methods = "card"
enabled = false
global_tenant = { schema = "public", redis_key_prefix = "", clickhouse_database = "default"}
-[multitenancy.tenants]
-public = { name = "hyperswitch", base_url = "http://localhost:8080", schema = "public", redis_key_prefix = "", clickhouse_database = "default"}
+[multitenancy.tenants.public]
+base_url = "http://localhost:8080"
+schema = "public"
+redis_key_prefix = ""
+clickhouse_database = "default"
+
+[multitenancy.tenants.public.user]
+control_center_url = "http://localhost:9000"
[user_auth_methods]
encryption_key = "A8EF32E029BC3342E54BF2E172A4D7AA43E8EF9D2C3A624A9F04E2EF79DC698F"
@@ -745,3 +819,21 @@ card_networks = "Visa, AmericanExpress, Mastercard"
[network_tokenization_supported_connectors]
connector_list = "cybersource"
+
+[grpc_client.dynamic_routing_client]
+host = "localhost"
+port = 7000
+service = "dynamo"
+
+[theme.storage]
+file_storage_backend = "file_system" # Theme storage backend to be used
+
+[theme.email_config]
+entity_name = "Hyperswitch" # Name of the entity to be showed in emails
+entity_logo_url = "https://example.com/logo.svg" # Logo URL of the entity to be used in emails
+foreground_color = "#000000" # Foreground color of email text
+primary_color = "#006DF9" # Primary color of email body
+background_color = "#FFFFFF" # Background color of email body
+
+[platform]
+enabled = true
diff --git a/config/docker_compose.toml b/config/docker_compose.toml
index fad5759648b4..75699d0a9674 100644
--- a/config/docker_compose.toml
+++ b/config/docker_compose.toml
@@ -56,6 +56,8 @@ password_validity_in_days = 90
two_factor_auth_expiry_in_secs = 300
totp_issuer_name = "Hyperswitch"
base_url = "http://localhost:8080"
+force_two_factor_auth = false
+force_cookies = true
[locker]
host = ""
@@ -112,6 +114,7 @@ adyenplatform.base_url = "https://balanceplatform-api-test.adyen.com/"
adyen.payout_base_url = "https://pal-test.adyen.com/"
adyen.dispute_base_url = "https://ca-test.adyen.com/"
airwallex.base_url = "https://api-demo.airwallex.com/"
+amazonpay.base_url = "https://pay-api.amazon.com/v2"
applepay.base_url = "https://apple-pay-gateway.apple.com/"
authorizedotnet.base_url = "https://apitest.authorize.net/xml/v1/request.api"
bambora.base_url = "https://api.na.bambora.com"
@@ -131,9 +134,11 @@ cryptopay.base_url = "https://business-sandbox.cryptopay.me"
cybersource.base_url = "https://apitest.cybersource.com/"
datatrans.base_url = "https://api.sandbox.datatrans.com/"
deutschebank.base_url = "https://testmerch.directpos.de/rest-api"
+digitalvirgo.base_url = "https://dcb-integration-service-sandbox-external.staging.digitalvirgo.pl"
dlocal.base_url = "https://sandbox.dlocal.com/"
dummyconnector.base_url = "http://localhost:8080/dummy-connector"
ebanx.base_url = "https://sandbox.ebanxpay.com/"
+elavon.base_url = "https://api.demo.convergepay.com/VirtualMerchantDemo/"
fiserv.base_url = "https://cert.api.fiservapps.com/"
fiservemea.base_url = "https://prod.emea.api.fiservapps.com/sandbox"
fiuu.base_url = "https://sandbox.merchant.razer.com/"
@@ -146,7 +151,10 @@ gocardless.base_url = "https://api-sandbox.gocardless.com"
gpayments.base_url = "https://{{merchant_endpoint_prefix}}-test.api.as1.gpayments.net"
helcim.base_url = "https://api.helcim.com/"
iatapay.base_url = "https://sandbox.iata-pay.iata.org/api/v1"
+inespay.base_url = "https://apiflow.inespay.com/san/v21"
itaubank.base_url = "https://sandbox.devportal.itau.com.br/"
+jpmorgan.base_url = "https://api-mock.payments.jpmorgan.com/api/v2"
+jpmorgan.secondary_base_url="https://id.payments.jpmorgan.com"
klarna.base_url = "https://api{{klarna_region}}.playground.klarna.com/"
mifinity.base_url = "https://demo.mifinity.com/"
mollie.base_url = "https://api.mollie.com/v2/"
@@ -156,6 +164,7 @@ netcetera.base_url = "https://{{merchant_endpoint_prefix}}.3ds-server.prev.netce
nexinets.base_url = "https://apitest.payengine.de/v1"
nexixpay.base_url = "https://xpaysandbox.nexigroup.com/api/phoenix-0.0/psp/api/v1"
nmi.base_url = "https://secure.nmi.com/"
+nomupay.base_url = "https://payout-api.sandbox.nomupay.com"
noon.base_url = "https://api-test.noonpayments.com/"
novalnet.base_url = "https://payport.novalnet.de/v2"
noon.key_mode = "Test"
@@ -175,6 +184,7 @@ powertranz.base_url = "https://staging.ptranz.com/api/"
prophetpay.base_url = "https://ccm-thirdparty.cps.golf/"
rapyd.base_url = "https://sandboxapi.rapyd.net"
razorpay.base_url = "https://sandbox.juspay.in/"
+redsys.base_url = "https://sis-t.redsys.es:25443/sis/realizarPago"
riskified.base_url = "https://sandbox.riskified.com/api"
shift4.base_url = "https://api.shift4.com/"
signifyd.base_url = "https://api.signifyd.com/"
@@ -189,12 +199,14 @@ stripe.base_url_file_upload = "https://files.stripe.com/"
trustpay.base_url = "https://test-tpgw.trustpay.eu/"
trustpay.base_url_bank_redirects = "https://aapi.trustpay.eu/"
tsys.base_url = "https://stagegw.transnox.com/"
+unified_authentication_service.base_url = "http://localhost:8000"
volt.base_url = "https://api.sandbox.volt.io/"
wellsfargo.base_url = "https://apitest.cybersource.com/"
wellsfargopayout.base_url = "https://api-sandbox.wellsfargo.com/"
wise.base_url = "https://api.sandbox.transferwise.tech/"
worldline.base_url = "https://eu.sandbox.api-ingenico.com/"
worldpay.base_url = "https://try.access.worldpay.com/"
+xendit.base_url = "https://api.xendit.co"
zen.base_url = "https://api.zen-test.com/"
zen.secondary_base_url = "https://secure.zen-test.com/"
zsl.base_url = "https://api.sitoffalb.net/"
@@ -211,6 +223,7 @@ cards = [
"adyen",
"adyenplatform",
"airwallex",
+ "amazonpay",
"authorizedotnet",
"bambora",
"bamboraapac",
@@ -226,9 +239,11 @@ cards = [
"cybersource",
"datatrans",
"deutschebank",
+ "digitalvirgo",
"dlocal",
"dummyconnector",
"ebanx",
+ "elavon",
"fiserv",
"fiservemea",
"fiuu",
@@ -239,13 +254,16 @@ cards = [
"gpayments",
"helcim",
"iatapay",
+ "inespay",
"itaubank",
+ "jpmorgan",
"mollie",
"multisafepay",
"netcetera",
"nexinets",
"nexixpay",
"nmi",
+ "nomupay",
"noon",
"novalnet",
"nuvei",
@@ -261,6 +279,7 @@ cards = [
"plaid",
"powertranz",
"prophetpay",
+ "redsys",
"shift4",
"square",
"stax",
@@ -270,12 +289,14 @@ cards = [
"thunes",
"trustpay",
"tsys",
+ "unified_authentication_service",
"volt",
"wellsfargo",
"wellsfargopayout",
"wise",
"worldline",
"worldpay",
+ "xendit",
"zen",
"zsl",
]
@@ -320,6 +341,7 @@ nmi = { payment_method = "card" }
payme = { payment_method = "card" }
deutschebank = { payment_method = "bank_debit" }
paybox = { payment_method = "card" }
+nexixpay = { payment_method = "card" }
[dummy_connector]
enabled = true
@@ -345,35 +367,72 @@ discord_invite_url = "https://discord.gg/wJZ7DVW8mm"
payout_eligibility = true
[pm_filters.adyen]
-online_banking_fpx = { country = "MY", currency = "MYR" }
-online_banking_thailand = { country = "TH", currency = "THB" }
-touch_n_go = { country = "MY", currency = "MYR" }
+ach = { country = "US", currency = "USD" }
+affirm = { country = "US", currency = "USD" }
+afterpay_clearpay = { country = "US,CA,GB,AU,NZ", currency = "GBP,AUD,NZD,CAD,USD" }
+alfamart = { country = "ID", currency = "IDR" }
+ali_pay = { country = "AU,JP,HK,SG,MY,TH,ES,GB,SE,NO,AT,NL,DE,CY,CH,BE,FR,DK,FI,RO,MT,SI,GR,PT,IE,IT,CA,US", currency = "USD,EUR,GBP,JPY,AUD,SGD,CHF,SEK,NOK,NZD,THB,HKD,CAD" }
+ali_pay_hk = { country = "HK", currency = "HKD" }
+alma = { country = "FR", currency = "EUR" }
+apple_pay = { country = "AU,NZ,CN,JP,HK,SG,MY,BH,AE,KW,BR,ES,GB,SE,NO,AT,NL,DE,HU,CY,LU,CH,BE,FR,DK,FI,RO,HR,LI,UA,MT,SI,GR,PT,IE,CZ,EE,LT,LV,IT,PL,IS,CA,US", currency = "AUD,CHF,CAD,EUR,GBP,HKD,SGD,USD,MYR" }
atome = { country = "MY,SG", currency = "MYR,SGD" }
-swish = { country = "SE", currency = "SEK" }
-permata_bank_transfer = { country = "ID", currency = "IDR" }
+bacs = { country = "GB", currency = "GBP" }
+bancontact_card = { country = "BE", currency = "EUR" }
bca_bank_transfer = { country = "ID", currency = "IDR" }
+bizum = { country = "ES", currency = "EUR" }
+blik = { country = "PL", currency = "PLN" }
bni_va = { country = "ID", currency = "IDR" }
+boleto = { country = "BR", currency = "BRL" }
bri_va = { country = "ID", currency = "IDR" }
cimb_va = { country = "ID", currency = "IDR" }
+dana = { country = "ID", currency = "IDR" }
danamon_va = { country = "ID", currency = "IDR" }
-mandiri_va = { country = "ID", currency = "IDR" }
-alfamart = { country = "ID", currency = "IDR" }
+eps = { country = "AT", currency = "EUR" }
+family_mart = { country = "JP", currency = "JPY" }
+gcash = { country = "PH", currency = "PHP" }
+giropay = { country = "DE", currency = "EUR" }
+go_pay = { country = "ID", currency = "IDR" }
+google_pay = { country = "AU,NZ,JP,HK,SG,MY,TH,VN,BH,AE,KW,BR,ES,GB,SE,NO,SK,AT,NL,DE,HU,CY,LU,CH,BE,FR,DK,RO,HR,LI,MT,SI,GR,PT,IE,CZ,EE,LT,LV,IT,PL,TR,IS,CA,US", currency = "AED,ALL,AMD,ANG,AOA,ARS,AUD,AWG,AZN,BAM,BBD,BDT,BGN,BHD,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CHF,CLP,CNY,COP,CRC,CUP,CVE,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,FKP,GBP,GEL,GHS,GIP,GMD,GNF,GTQ,GYD,HKD,HNL,HTG,HUF,IDR,ILS,INR,IQD,JMD,JOD,JPY,KES,KGS,KHR,KMF,KRW,KWD,KYD,KZT,LAK,LBP,LKR,LYD,MAD,MDL,MKD,MMK,MNT,MOP,MRU,MUR,MVR,MWK,MXN,MYR,MZN,NAD,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLE,SOS,SRD,STN,SVC,SZL,THB,TND,TOP,TRY,TTD,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,XOF,XPF,YER,ZAR,ZMW" }
+ideal = { country = "NL", currency = "EUR" }
indomaret = { country = "ID", currency = "IDR" }
+kakao_pay = { country = "KR", currency = "KRW" }
+klarna = { country = "AU,AT,BE,CA,CZ,DK,FI,FR,DE,GR,IE,IT,NO,PL,PT,RO,ES,SE,CH,NL,GB,US", currency = "AUD,EUR,CAD,CZK,DKK,NOK,PLN,RON,SEK,CHF,GBP,USD"}
+lawson = { country = "JP", currency = "JPY" }
+mandiri_va = { country = "ID", currency = "IDR" }
+mb_way = { country = "PT", currency = "EUR" }
+mini_stop = { country = "JP", currency = "JPY" }
+mobile_pay = { country = "DK,FI", currency = "DKK,SEK,NOK,EUR" }
+momo = { country = "VN", currency = "VND" }
+momo_atm = { country = "VN", currency = "VND" }
+online_banking_czech_republic = { country = "CZ", currency = "EUR,CZK" }
+online_banking_finland = { country = "FI", currency = "EUR" }
+online_banking_fpx = { country = "MY", currency = "MYR" }
+online_banking_poland = { country = "PL", currency = "PLN" }
+online_banking_slovakia = { country = "SK", currency = "EUR,CZK" }
+online_banking_thailand = { country = "TH", currency = "THB" }
open_banking_uk = { country = "GB", currency = "GBP" }
oxxo = { country = "MX", currency = "MXN" }
+pay_bright = { country = "CA", currency = "CAD" }
+pay_easy = { country = "JP", currency = "JPY" }
pay_safe_card = { country = "AT,AU,BE,BR,BE,CA,HR,CY,CZ,DK,FI,FR,GE,DE,GI,HU,IS,IE,KW,LV,IE,LI,LT,LU,MT,MX,MD,ME,NL,NZ,NO,PY,PE,PL,PT,RO,SA,RS,SK,SI,ES,SE,CH,TR,AE,GB,US,UY", currency = "EUR,AUD,BRL,CAD,CZK,DKK,GEL,GIP,HUF,KWD,CHF,MXN,MDL,NZD,NOK,PYG,PEN,PLN,RON,SAR,RSD,SEK,TRY,AED,GBP,USD,UYU" }
-seven_eleven = { country = "JP", currency = "JPY" }
-lawson = { country = "JP", currency = "JPY" }
-mini_stop = { country = "JP", currency = "JPY" }
-family_mart = { country = "JP", currency = "JPY" }
+permata_bank_transfer = { country = "ID", currency = "IDR" }
seicomart = { country = "JP", currency = "JPY" }
-pay_easy = { country = "JP", currency = "JPY" }
-boleto = { country = "BR", currency = "BRL" }
-ideal = { country = "NL", currency = "EUR" }
-klarna = { country = "AU,AT,BE,CA,CZ,DK,FI,FR,DE,GR,IE,IT,NO,PL,PT,RO,ES,SE,CH,NL,GB,US", currency = "AUD,EUR,CAD,CZK,DKK,NOK,PLN,RON,SEK,CHF,GBP,USD" }
+sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT", currency = "EUR" }
+seven_eleven = { country = "JP", currency = "JPY" }
+sofort = { country = "AT,BE,DE,ES,CH,NL", currency = "CHF,EUR"}
paypal = { country = "AU,NZ,CN,JP,HK,MY,TH,KR,PH,ID,AE,KW,BR,ES,GB,SE,NO,SK,AT,NL,DE,HU,CY,LU,CH,BE,FR,DK,FI,RO,HR,UA,MT,SI,GI,PT,IE,CZ,EE,LT,LV,IT,PL,IS,CA,US", currency = "AUD,BRL,CAD,CZK,DKK,EUR,HKD,HUF,INR,JPY,MYR,MXN,NZD,NOK,PHP,PLN,RUB,GBP,SGD,SEK,CHF,THB,USD" }
-sofort = { country = "AT,BE,DE,ES,CH,NL", currency = "CHF,EUR" }
+swish = { country = "SE", currency = "SEK" }
+touch_n_go = { country = "MY", currency = "MYR" }
+trustly = { country = "ES,GB,SE,NO,AT,NL,DE,DK,FI,EE,LT,LV", currency = "CZK,DKK,EUR,GBP,NOK,SEK" }
+twint = { country = "CH", currency = "CHF" }
+vipps = { country = "NO", currency = "NOK" }
+walley = { country = "SE,NO,DK,FI", currency = "DKK,EUR,NOK,SEK" }
+we_chat_pay = { country = "AU,NZ,CN,JP,HK,SG,ES,GB,SE,NO,AT,NL,DE,CY,CH,BE,FR,DK,LI,MT,SI,GR,PT,IT,CA,US", currency = "AUD,CAD,CNY,EUR,GBP,HKD,JPY,NZD,SGD,USD,CNY" }
+
+[pm_filters.bambora]
+credit = { country = "US,CA", currency = "USD" }
+debit = { country = "US,CA", currency = "USD" }
[pm_filters.volt]
open_banking_uk = { country = "DE,GB,AT,BE,CY,EE,ES,FI,FR,GR,HR,IE,IT,LT,LU,LV,MT,NL,PT,SI,SK,BG,CZ,DK,HU,NO,PL,RO,SE,AU,BR", currency = "EUR,GBP,DKK,NOK,PLN,SEK,AUD,BRL" }
@@ -412,11 +471,23 @@ apple_pay = { currency = "USD" }
google_pay = { currency = "USD" }
[pm_filters.cybersource]
-credit = { currency = "USD,GBP,EUR" }
-debit = { currency = "USD,GBP,EUR" }
-apple_pay = { currency = "USD,GBP,EUR" }
-google_pay = { currency = "USD,GBP,EUR" }
+credit = { currency = "USD,GBP,EUR,PLN" }
+debit = { currency = "USD,GBP,EUR,PLN" }
+apple_pay = { currency = "USD,GBP,EUR,PLN" }
+google_pay = { currency = "USD,GBP,EUR,PLN" }
samsung_pay = { currency = "USD,GBP,EUR" }
+paze = { currency = "USD" }
+
+[pm_filters.nexixpay]
+credit = { country = "AT,BE,CY,EE,FI,FR,DE,GR,IE,IT,LV,LT,LU,MT,NL,PT,SK,SI,ES,BG,HR,DK,GB,NO,PL,CZ,RO,SE,CH,HU", currency = "ARS,AUD,BHD,CAD,CLP,CNY,COP,HRK,CZK,DKK,HKD,HUF,INR,JPY,KZT,JOD,KRW,KWD,MYR,MXN,NGN,NOK,PHP,QAR,RUB,SAR,SGD,VND,ZAR,SEK,CHF,THB,AED,EGP,GBP,USD,TWD,BYN,RSD,AZN,RON,TRY,AOA,BGN,EUR,UAH,PLN,BRL" }
+debit = { country = "AT,BE,CY,EE,FI,FR,DE,GR,IE,IT,LV,LT,LU,MT,NL,PT,SK,SI,ES,BG,HR,DK,GB,NO,PL,CZ,RO,SE,CH,HU", currency = "ARS,AUD,BHD,CAD,CLP,CNY,COP,HRK,CZK,DKK,HKD,HUF,INR,JPY,KZT,JOD,KRW,KWD,MYR,MXN,NGN,NOK,PHP,QAR,RUB,SAR,SGD,VND,ZAR,SEK,CHF,THB,AED,EGP,GBP,USD,TWD,BYN,RSD,AZN,RON,TRY,AOA,BGN,EUR,UAH,PLN,BRL" }
+
+[pm_filters.novalnet]
+credit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+debit = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+apple_pay = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+google_pay = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
+paypal = { country = "AD,AE,AL,AM,AR,AT,AU,AZ,BA,BB,BD,BE,BG,BH,BI,BM,BN,BO,BR,BS,BW,BY,BZ,CA,CD,CH,CL,CN,CO,CR,CU,CY,CZ,DE,DJ,DK,DO,DZ,EE,EG,ET,ES,FI,FJ,FR,GB,GE,GH,GI,GM,GR,GT,GY,HK,HN,HR,HU,ID,IE,IL,IN,IS,IT,JM,JO,JP,KE,KH,KR,KW,KY,KZ,LB,LK,LT,LV,LY,MA,MC,MD,ME,MG,MK,MN,MO,MT,MV,MW,MX,MY,NG,NI,NO,NP,NL,NZ,OM,PA,PE,PG,PH,PK,PL,PT,PY,QA,RO,RS,RU,RW,SA,SB,SC,SE,SG,SH,SI,SK,SL,SO,SM,SR,ST,SV,SY,TH,TJ,TN,TO,TR,TW,TZ,UA,UG,US,UY,UZ,VE,VA,VN,VU,WS,CF,AG,DM,GD,KN,LC,VC,YE,ZA,ZM", currency = "AED,ALL,AMD,ARS,AUD,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CZK,DJF,DKK,DOP,DZD,EGP,ETB,EUR,FJD,GBP,GEL,GHS,GIP,GMD,GTQ,GYD,HKD,HNL,HRK,HUF,IDR,ILS,INR,ISK,JMD,JOD,JPY,KES,KHR,KRW,KWD,KYD,KZT,LBP,LKR,LYD,MAD,MDL,MGA,MKD,MNT,MOP,MVR,MWK,MXN,MYR,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SEK,SGD,SHP,SLL,SOS,SRD,STN,SVC,SYP,THB,TJS,TND,TOP,TRY,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,YER,ZAR,ZMW"}
[pm_filters.helcim]
credit = { currency = "USD" }
@@ -433,6 +504,12 @@ credit = { currency = "USD" }
debit = { currency = "USD" }
ach = { currency = "USD" }
+[pm_filters.worldpay]
+debit = { country = "AF,DZ,AW,AU,AZ,BS,BH,BD,BB,BZ,BM,BT,BO,BA,BW,BR,BN,BG,BI,KH,CA,CV,KY,CL,CO,KM,CD,CR,CZ,DK,DJ,ST,DO,EC,EG,SV,ER,ET,FK,FJ,GM,GE,GH,GI,GT,GN,GY,HT,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IL,IT,JM,JP,JO,KZ,KE,KW,LA,LB,LS,LR,LY,LT,MO,MK,MG,MW,MY,MV,MR,MU,MX,MD,MN,MA,MZ,MM,NA,NZ,NI,NG,KP,NO,AR,PK,PG,PY,PE,UY,PH,PL,GB,QA,OM,RO,RU,RW,WS,SG,ST,ZA,KR,LK,SH,SD,SR,SZ,SE,CH,SY,TW,TJ,TZ,TH,TT,TN,TR,UG,UA,US,UZ,VU,VE,VN,ZM,ZW", currency = "AFN,DZD,ANG,AWG,AUD,AZN,BSD,BHD,BDT,BBD,BZD,BMD,BTN,BOB,BAM,BWP,BRL,BND,BGN,BIF,KHR,CAD,CVE,KYD,XOF,XAF,XPF,CLP,COP,KMF,CDF,CRC,EUR,CZK,DKK,DJF,DOP,XCD,EGP,SVC,ERN,ETB,EUR,FKP,FJD,GMD,GEL,GHS,GIP,GTQ,GNF,GYD,HTG,HNL,HKD,HUF,ISK,INR,IDR,IRR,IQD,ILS,JMD,JPY,JOD,KZT,KES,KWD,LAK,LBP,LSL,LRD,LYD,MOP,MKD,MGA,MWK,MYR,MVR,MRU,MUR,MXN,MDL,MNT,MAD,MZN,MMK,NAD,NPR,NZD,NIO,NGN,KPW,NOK,ARS,PKR,PAB,PGK,PYG,PEN,UYU,PHP,PLN,GBP,QAR,OMR,RON,RUB,RWF,WST,SAR,RSD,SCR,SLL,SGD,STN,SBD,SOS,ZAR,KRW,LKR,SHP,SDG,SRD,SZL,SEK,CHF,SYP,TWD,TJS,TZS,THB,TOP,TTD,TND,TRY,TMT,AED,UGX,UAH,USD,UZS,VUV,VND,YER,CNY,ZMW,ZWL" }
+credit = { country = "AF,DZ,AW,AU,AZ,BS,BH,BD,BB,BZ,BM,BT,BO,BA,BW,BR,BN,BG,BI,KH,CA,CV,KY,CL,CO,KM,CD,CR,CZ,DK,DJ,ST,DO,EC,EG,SV,ER,ET,FK,FJ,GM,GE,GH,GI,GT,GN,GY,HT,HN,HK,HU,IS,IN,ID,IR,IQ,IE,IL,IT,JM,JP,JO,KZ,KE,KW,LA,LB,LS,LR,LY,LT,MO,MK,MG,MW,MY,MV,MR,MU,MX,MD,MN,MA,MZ,MM,NA,NZ,NI,NG,KP,NO,AR,PK,PG,PY,PE,UY,PH,PL,GB,QA,OM,RO,RU,RW,WS,SG,ST,ZA,KR,LK,SH,SD,SR,SZ,SE,CH,SY,TW,TJ,TZ,TH,TT,TN,TR,UG,UA,US,UZ,VU,VE,VN,ZM,ZW", currency = "AFN,DZD,ANG,AWG,AUD,AZN,BSD,BHD,BDT,BBD,BZD,BMD,BTN,BOB,BAM,BWP,BRL,BND,BGN,BIF,KHR,CAD,CVE,KYD,XOF,XAF,XPF,CLP,COP,KMF,CDF,CRC,EUR,CZK,DKK,DJF,DOP,XCD,EGP,SVC,ERN,ETB,EUR,FKP,FJD,GMD,GEL,GHS,GIP,GTQ,GNF,GYD,HTG,HNL,HKD,HUF,ISK,INR,IDR,IRR,IQD,ILS,JMD,JPY,JOD,KZT,KES,KWD,LAK,LBP,LSL,LRD,LYD,MOP,MKD,MGA,MWK,MYR,MVR,MRU,MUR,MXN,MDL,MNT,MAD,MZN,MMK,NAD,NPR,NZD,NIO,NGN,KPW,NOK,ARS,PKR,PAB,PGK,PYG,PEN,UYU,PHP,PLN,GBP,QAR,OMR,RON,RUB,RWF,WST,SAR,RSD,SCR,SLL,SGD,STN,SBD,SOS,ZAR,KRW,LKR,SHP,SDG,SRD,SZL,SEK,CHF,SYP,TWD,TJS,TZS,THB,TOP,TTD,TND,TRY,TMT,AED,UGX,UAH,USD,UZS,VUV,VND,YER,CNY,ZMW,ZWL" }
+google_pay = { country = "AL,DZ,AS,AO,AG,AR,AU,AT,AZ,BH,BY,BE,BR,BG,CA,CL,CO,HR,CZ,DK,DO,EG,EE,FI,FR,DE,GR,HK,HU,IN,ID,IE,IL,IT,JP,JO,KZ,KE,KW,LV,LB,LT,LU,MY,MX,NL,NZ,NO,OM,PK,PA,PE,PH,PL,PT,QA,RO,RU,SA,SG,SK,ZA,ES,LK,SE,CH,TW,TH,TR,UA,AE,GB,US,UY,VN" }
+apple_pay = { country = "AU,CN,HK,JP,MO,MY,NZ,SG,TW,AM,AT,AZ,BY,BE,BG,HR,CY,CZ,DK,EE,FO,FI,FR,GE,DE,GR,GL,GG,HU,IS,IE,IM,IT,KZ,JE,LV,LI,LT,LU,MT,MD,MC,ME,NL,NO,PL,PT,RO,SM,RS,SK,SI,ES,SE,CH,UA,GB,AR,CO,CR,BR,MX,PE,BH,IL,JO,KW,PS,QA,SA,AE,CA,UM,US" }
+
[bank_config.online_banking_fpx]
adyen.banks = "affin_bank,agro_bank,alliance_bank,am_bank,bank_islam,bank_muamalat,bank_rakyat,bank_simpanan_nasional,cimb_bank,hong_leong_bank,hsbc_bank,kuwait_finance_house,maybank,ocbc_bank,public_bank,rhb_bank,standard_chartered_bank,uob_bank"
fiuu.banks = "affin_bank,agro_bank,alliance_bank,am_bank,bank_of_china,bank_islam,bank_muamalat,bank_rakyat,bank_simpanan_nasional,cimb_bank,hong_leong_bank,hsbc_bank,kuwait_finance_house,maybank,ocbc_bank,public_bank,rhb_bank,standard_chartered_bank,uob_bank"
@@ -532,7 +609,7 @@ source = "logs"
file_storage_backend = "file_system"
[unmasked_headers]
-keys = "accept-language,user-agent"
+keys = "accept-language,user-agent,x-profile-id"
[opensearch]
host = "https://opensearch:9200"
@@ -548,6 +625,10 @@ payment_attempts = "hyperswitch-payment-attempt-events"
payment_intents = "hyperswitch-payment-intent-events"
refunds = "hyperswitch-refund-events"
disputes = "hyperswitch-dispute-events"
+sessionizer_payment_attempts = "sessionizer-payment-attempt-events"
+sessionizer_payment_intents = "sessionizer-payment-intent-events"
+sessionizer_refunds = "sessionizer-refund-events"
+sessionizer_disputes = "sessionizer-dispute-events"
[saved_payment_methods]
sdk_eligible_payment_methods = "card"
@@ -556,8 +637,14 @@ sdk_eligible_payment_methods = "card"
enabled = false
global_tenant = { schema = "public", redis_key_prefix = "", clickhouse_database = "default" }
-[multitenancy.tenants]
-public = { name = "hyperswitch", base_url = "http://localhost:8080", schema = "public", redis_key_prefix = "", clickhouse_database = "default" }
+[multitenancy.tenants.public]
+base_url = "http://localhost:8080"
+schema = "public"
+redis_key_prefix = ""
+clickhouse_database = "default"
+
+[multitenancy.tenants.public.user]
+control_center_url = "http://localhost:9000"
[user_auth_methods]
encryption_key = "A8EF32E029BC3342E54BF2E172A4D7AA43E8EF9D2C3A624A9F04E2EF79DC698F"
@@ -608,7 +695,7 @@ connector_list = "cybersource"
sender_email = "example@example.com" # Sender email
aws_region = "" # AWS region used by AWS SES
allowed_unverified_days = 1 # Number of days the api calls ( with jwt token ) can be made without verifying the email
-active_email_client = "SES" # The currently active email client
+active_email_client = "NO_EMAIL_CLIENT" # The currently active email client
recon_recipient_email = "recon@example.com" # Recipient email for recon request email
prod_intent_recipient_email = "business@example.com" # Recipient email for prod intent email
@@ -616,3 +703,16 @@ prod_intent_recipient_email = "business@example.com" # Recipient email for prod
[email.aws_ses]
email_role_arn = "" # The amazon resource name ( arn ) of the role which has permission to send emails
sts_role_session_name = "" # An identifier for the assumed role session, used to uniquely identify a session.
+
+[theme.storage]
+file_storage_backend = "file_system" # Theme storage backend to be used
+
+[theme.email_config]
+entity_name = "Hyperswitch" # Name of the entity to be showed in emails
+entity_logo_url = "https://example.com/logo.svg" # Logo URL of the entity to be used in emails
+foreground_color = "#000000" # Foreground color of email text
+primary_color = "#006DF9" # Primary color of email body
+background_color = "#FFFFFF" # Background color of email body
+
+[platform]
+enabled = true
diff --git a/config/loki.yaml b/config/loki.yaml
index da84e3c3e22d..51b4fa3e40da 100644
--- a/config/loki.yaml
+++ b/config/loki.yaml
@@ -23,9 +23,9 @@ ingester:
schema_config:
configs:
- from: 2020-10-24
- store: boltdb-shipper
+ store: tsdb
object_store: filesystem
- schema: v11
+ schema: v13
index:
prefix: index_
period: 24h
diff --git a/config/otel-collector.yaml b/config/otel-collector.yaml
index d7d571c7c87a..9e64dbc4e229 100644
--- a/config/otel-collector.yaml
+++ b/config/otel-collector.yaml
@@ -2,6 +2,7 @@ receivers:
otlp:
protocols:
grpc:
+ endpoint: 0.0.0.0:4317
exporters:
otlp:
@@ -9,8 +10,8 @@ exporters:
tls:
insecure: true
- logging:
- loglevel: debug
+ debug:
+ verbosity: detailed
prometheus:
endpoint: 0.0.0.0:8889
@@ -21,7 +22,7 @@ exporters:
service:
telemetry:
logs:
- level: debug
+ level: DEBUG
metrics:
level: detailed
address: 0.0.0.0:8888
diff --git a/config/vector.yaml b/config/vector.yaml
index 54ff25cab5af..4b801935ae5b 100644
--- a/config/vector.yaml
+++ b/config/vector.yaml
@@ -1,5 +1,16 @@
acknowledgements:
enabled: true
+enrichment_tables:
+ sdk_map:
+ type: file
+ file:
+ path: /etc/vector/config/sdk_map.csv
+ encoding:
+ type: csv
+ schema:
+ publishable_key: string
+ merchant_id: string
+
api:
enabled: true
@@ -18,6 +29,15 @@ sources:
decoding:
codec: json
+ sessionized_kafka_tx_events:
+ type: kafka
+ bootstrap_servers: kafka0:29092
+ group_id: sessionizer
+ topics:
+ - ^sessionizer
+ decoding:
+ codec: json
+
app_logs:
type: docker_logs
include_labels:
@@ -35,10 +55,19 @@ sources:
encoding: json
transforms:
+ events_create_ts:
+ inputs:
+ - kafka_tx_events
+ source: |-
+ .timestamp = from_unix_timestamp(.created_at, unit: "seconds") ?? now()
+ ."@timestamp" = from_unix_timestamp(.created_at, unit: "seconds") ?? now()
+ type: remap
+
plus_1_events:
type: filter
inputs:
- - kafka_tx_events
+ - events_create_ts
+ - sessionized_events_create_ts
condition: ".sign_flag == 1"
hs_server_logs:
@@ -54,13 +83,13 @@ transforms:
source: |-
.message = parse_json!(.message)
- events:
+ sessionized_events_create_ts:
type: remap
inputs:
- - plus_1_events
+ - sessionized_kafka_tx_events
source: |-
- .timestamp = from_unix_timestamp!(.created_at, unit: "seconds")
- ."@timestamp" = from_unix_timestamp(.created_at, unit: "seconds") ?? now()
+ .timestamp = from_unix_timestamp(.created_at, unit: "milliseconds") ?? now()
+ ."@timestamp" = from_unix_timestamp(.created_at, unit: "milliseconds") ?? now()
sdk_transformed:
type: throttle
@@ -69,12 +98,27 @@ transforms:
key_field: "{{ .payment_id }}{{ .merchant_id }}"
threshold: 1000
window_secs: 60
+
+ amend_sdk_logs:
+ type: remap
+ inputs:
+ - sdk_transformed
+ source: |
+ .before_transform = now()
+
+ merchant_id = .merchant_id
+ row = get_enrichment_table_record!("sdk_map", { "publishable_key" : merchant_id }, case_sensitive: true)
+ .merchant_id = row.merchant_id
+
+ .after_transform = now()
+
+
sinks:
opensearch_events_1:
type: elasticsearch
inputs:
- - events
+ - plus_1_events
endpoints:
- "https://opensearch:9200"
id_key: message_key
@@ -92,13 +136,16 @@ sinks:
- offset
- partition
- topic
+ - clickhouse_database
+ - last_synced
+ - sign_flag
bulk:
index: "vector-{{ .topic }}"
opensearch_events_2:
type: elasticsearch
inputs:
- - events
+ - plus_1_events
endpoints:
- "https://opensearch:9200"
id_key: message_key
@@ -116,10 +163,40 @@ sinks:
- offset
- partition
- topic
+ - clickhouse_database
+ - last_synced
+ - sign_flag
bulk:
# Add a date suffixed index for better grouping
index: "vector-{{ .topic }}-%Y-%m-%d"
+ opensearch_events_3:
+ type: elasticsearch
+ inputs:
+ - plus_1_events
+ endpoints:
+ - "https://opensearch:9200"
+ id_key: message_key
+ api_version: v7
+ tls:
+ verify_certificate: false
+ verify_hostname: false
+ auth:
+ strategy: basic
+ user: admin
+ password: 0penS3arc#
+ encoding:
+ except_fields:
+ - message_key
+ - offset
+ - partition
+ - topic
+ - clickhouse_database
+ - last_synced
+ - sign_flag
+ bulk:
+ index: "{{ .topic }}"
+
opensearch_logs:
type: elasticsearch
inputs:
@@ -143,6 +220,7 @@ sinks:
type: loki
inputs:
- kafka_tx_events
+ - sessionized_kafka_tx_events
endpoint: http://loki:3100
labels:
source: vector
@@ -178,7 +256,7 @@ sinks:
- "path"
- "source_type"
inputs:
- - "sdk_transformed"
+ - "amend_sdk_logs"
bootstrap_servers: kafka0:29092
topic: hyper-sdk-logs
key_field: ".merchant_id"
diff --git a/connector-template/mod.rs b/connector-template/mod.rs
index ae450aecf20b..ee5f4872d6eb 100644
--- a/connector-template/mod.rs
+++ b/connector-template/mod.rs
@@ -32,7 +32,7 @@ use hyperswitch_domain_models::{
},
};
use hyperswitch_interfaces::{
- api::{self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorValidation},
+ api::{self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorValidation, ConnectorSpecifications},
configs::Connectors,
errors,
events::connector_api_logs::ConnectorEvent,
@@ -551,3 +551,6 @@ impl webhooks::IncomingWebhook for {{project-name | downcase | pascal_case}} {
Err(report!(errors::ConnectorError::WebhooksNotImplemented))
}
}
+
+impl ConnectorSpecifications for {{project-name | downcase | pascal_case}} {}
+
diff --git a/connector-template/transformers.rs b/connector-template/transformers.rs
index 7c81a7504655..b508596cbc08 100644
--- a/connector-template/transformers.rs
+++ b/connector-template/transformers.rs
@@ -75,7 +75,7 @@ impl TryFrom<&{{project-name | downcase | pascal_case}}RouterData<&PaymentsAutho
card,
})
}
- _ => Err(errors::ConnectorError::NotImplemented("Payment methods".to_string()).into()),
+ _ => Err(errors::ConnectorError::NotImplemented("Payment method".to_string()).into()),
}
}
}
@@ -132,8 +132,8 @@ impl TryFrom 0;
CREATE MATERIALIZED VIEW sdk_events_audit_mv TO sdk_events_audit (
- `payment_id` Nullable(String),
+ `payment_id` String,
`merchant_id` String,
`remote_ip` Nullable(String),
`log_type` LowCardinality(Nullable(String)),
diff --git a/crates/analytics/src/api_event/core.rs b/crates/analytics/src/api_event/core.rs
index 305de7e69c86..27cc2a4d6975 100644
--- a/crates/analytics/src/api_event/core.rs
+++ b/crates/analytics/src/api_event/core.rs
@@ -12,7 +12,6 @@ use common_utils::errors::ReportSwitchExt;
use error_stack::ResultExt;
use router_env::{
instrument, logger,
- metrics::add_attributes,
tracing::{self, Instrument},
};
@@ -118,7 +117,7 @@ pub async fn get_api_event_metrics(
&req.group_by_names.clone(),
&merchant_id_scoped,
&req.filters,
- &req.time_series.map(|t| t.granularity),
+ req.time_series.map(|t| t.granularity),
&req.time_range,
)
.await
@@ -136,14 +135,14 @@ pub async fn get_api_event_metrics(
.change_context(AnalyticsError::UnknownError)?
{
let data = data?;
- let attributes = &add_attributes([
+ let attributes = router_env::metric_attributes!(
("metric_type", metric.to_string()),
("source", pool.to_string()),
- ]);
+ );
let value = u64::try_from(data.len());
if let Ok(val) = value {
- metrics::BUCKETS_FETCHED.record(&metrics::CONTEXT, val, attributes);
+ metrics::BUCKETS_FETCHED.record(val, attributes);
logger::debug!("Attributes: {:?}, Buckets fetched: {}", attributes, val);
}
for (id, value) in data {
diff --git a/crates/analytics/src/api_event/metrics.rs b/crates/analytics/src/api_event/metrics.rs
index ac29ec15169f..ad49f5d0ccd9 100644
--- a/crates/analytics/src/api_event/metrics.rs
+++ b/crates/analytics/src/api_event/metrics.rs
@@ -45,7 +45,7 @@ where
dimensions: &[ApiEventDimensions],
merchant_id: &common_utils::id_type::MerchantId,
filters: &ApiEventFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult>;
@@ -66,7 +66,7 @@ where
dimensions: &[ApiEventDimensions],
merchant_id: &common_utils::id_type::MerchantId,
filters: &ApiEventFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
diff --git a/crates/analytics/src/api_event/metrics/api_count.rs b/crates/analytics/src/api_event/metrics/api_count.rs
index f00c01bbf381..85f6cac01cec 100644
--- a/crates/analytics/src/api_event/metrics/api_count.rs
+++ b/crates/analytics/src/api_event/metrics/api_count.rs
@@ -32,7 +32,7 @@ where
_dimensions: &[ApiEventDimensions],
merchant_id: &common_utils::id_type::MerchantId,
filters: &ApiEventFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
@@ -62,7 +62,7 @@ where
alias: Some("end_bucket"),
})
.switch()?;
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
granularity
.set_group_by_clause(&mut query_builder)
.attach_printable("Error adding granularity")
diff --git a/crates/analytics/src/api_event/metrics/latency.rs b/crates/analytics/src/api_event/metrics/latency.rs
index 5d71da2a0aa1..03c1a226e441 100644
--- a/crates/analytics/src/api_event/metrics/latency.rs
+++ b/crates/analytics/src/api_event/metrics/latency.rs
@@ -35,7 +35,7 @@ where
_dimensions: &[ApiEventDimensions],
merchant_id: &common_utils::id_type::MerchantId,
filters: &ApiEventFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
@@ -67,7 +67,7 @@ where
alias: Some("end_bucket"),
})
.switch()?;
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
granularity
.set_group_by_clause(&mut query_builder)
.attach_printable("Error adding granularity")
diff --git a/crates/analytics/src/api_event/metrics/status_code_count.rs b/crates/analytics/src/api_event/metrics/status_code_count.rs
index b4fff367b629..f67d3d73e593 100644
--- a/crates/analytics/src/api_event/metrics/status_code_count.rs
+++ b/crates/analytics/src/api_event/metrics/status_code_count.rs
@@ -32,7 +32,7 @@ where
_dimensions: &[ApiEventDimensions],
merchant_id: &common_utils::id_type::MerchantId,
filters: &ApiEventFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
@@ -68,7 +68,7 @@ where
alias: Some("end_bucket"),
})
.switch()?;
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
granularity
.set_group_by_clause(&mut query_builder)
.attach_printable("Error adding granularity")
diff --git a/crates/analytics/src/auth_events/core.rs b/crates/analytics/src/auth_events/core.rs
index 250dc07fee74..3fd134bc4980 100644
--- a/crates/analytics/src/auth_events/core.rs
+++ b/crates/analytics/src/auth_events/core.rs
@@ -38,7 +38,7 @@ pub async fn get_metrics(
&metric_type,
&merchant_id_scoped,
&publishable_key_scoped,
- &req.time_series.map(|t| t.granularity),
+ req.time_series.map(|t| t.granularity),
&req.time_range,
)
.await
diff --git a/crates/analytics/src/auth_events/metrics.rs b/crates/analytics/src/auth_events/metrics.rs
index da5bf6309fe4..4a1fbd0e1470 100644
--- a/crates/analytics/src/auth_events/metrics.rs
+++ b/crates/analytics/src/auth_events/metrics.rs
@@ -46,7 +46,7 @@ where
&self,
merchant_id: &common_utils::id_type::MerchantId,
publishable_key: &str,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult>;
@@ -66,7 +66,7 @@ where
&self,
merchant_id: &common_utils::id_type::MerchantId,
publishable_key: &str,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
diff --git a/crates/analytics/src/auth_events/metrics/authentication_attempt_count.rs b/crates/analytics/src/auth_events/metrics/authentication_attempt_count.rs
index 4fee15e2afd1..5faeefec6861 100644
--- a/crates/analytics/src/auth_events/metrics/authentication_attempt_count.rs
+++ b/crates/analytics/src/auth_events/metrics/authentication_attempt_count.rs
@@ -31,7 +31,7 @@ where
&self,
_merchant_id: &common_utils::id_type::MerchantId,
publishable_key: &str,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
@@ -45,7 +45,7 @@ where
})
.switch()?;
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
query_builder
.add_granularity_in_mins(granularity)
.switch()?;
diff --git a/crates/analytics/src/auth_events/metrics/authentication_success_count.rs b/crates/analytics/src/auth_events/metrics/authentication_success_count.rs
index 06de7a694fc8..663473c2d895 100644
--- a/crates/analytics/src/auth_events/metrics/authentication_success_count.rs
+++ b/crates/analytics/src/auth_events/metrics/authentication_success_count.rs
@@ -31,7 +31,7 @@ where
&self,
_merchant_id: &common_utils::id_type::MerchantId,
publishable_key: &str,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
@@ -45,7 +45,7 @@ where
})
.switch()?;
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
query_builder
.add_granularity_in_mins(granularity)
.switch()?;
diff --git a/crates/analytics/src/auth_events/metrics/challenge_attempt_count.rs b/crates/analytics/src/auth_events/metrics/challenge_attempt_count.rs
index 2f744f15e909..15cd86e5cc8d 100644
--- a/crates/analytics/src/auth_events/metrics/challenge_attempt_count.rs
+++ b/crates/analytics/src/auth_events/metrics/challenge_attempt_count.rs
@@ -31,7 +31,7 @@ where
&self,
merchant_id: &common_utils::id_type::MerchantId,
_publishable_key: &str,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
@@ -45,7 +45,7 @@ where
})
.switch()?;
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
query_builder
.add_granularity_in_mins(granularity)
.switch()?;
diff --git a/crates/analytics/src/auth_events/metrics/challenge_flow_count.rs b/crates/analytics/src/auth_events/metrics/challenge_flow_count.rs
index 551810d8e5a7..61b10e6fb9e9 100644
--- a/crates/analytics/src/auth_events/metrics/challenge_flow_count.rs
+++ b/crates/analytics/src/auth_events/metrics/challenge_flow_count.rs
@@ -31,7 +31,7 @@ where
&self,
_merchant_id: &common_utils::id_type::MerchantId,
publishable_key: &str,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
@@ -45,7 +45,7 @@ where
})
.switch()?;
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
query_builder
.add_granularity_in_mins(granularity)
.switch()?;
diff --git a/crates/analytics/src/auth_events/metrics/challenge_success_count.rs b/crates/analytics/src/auth_events/metrics/challenge_success_count.rs
index c6c7d1cda08d..c5bf7bf81cec 100644
--- a/crates/analytics/src/auth_events/metrics/challenge_success_count.rs
+++ b/crates/analytics/src/auth_events/metrics/challenge_success_count.rs
@@ -31,7 +31,7 @@ where
&self,
merchant_id: &common_utils::id_type::MerchantId,
_publishable_key: &str,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
@@ -45,7 +45,7 @@ where
})
.switch()?;
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
query_builder
.add_granularity_in_mins(granularity)
.switch()?;
diff --git a/crates/analytics/src/auth_events/metrics/frictionless_flow_count.rs b/crates/analytics/src/auth_events/metrics/frictionless_flow_count.rs
index 69b4eeba4a61..c08cc511e169 100644
--- a/crates/analytics/src/auth_events/metrics/frictionless_flow_count.rs
+++ b/crates/analytics/src/auth_events/metrics/frictionless_flow_count.rs
@@ -31,7 +31,7 @@ where
&self,
_merchant_id: &common_utils::id_type::MerchantId,
publishable_key: &str,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
@@ -45,7 +45,7 @@ where
})
.switch()?;
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
query_builder
.add_granularity_in_mins(granularity)
.switch()?;
diff --git a/crates/analytics/src/auth_events/metrics/frictionless_success_count.rs b/crates/analytics/src/auth_events/metrics/frictionless_success_count.rs
index 6ea26a909799..b310567c9db3 100644
--- a/crates/analytics/src/auth_events/metrics/frictionless_success_count.rs
+++ b/crates/analytics/src/auth_events/metrics/frictionless_success_count.rs
@@ -31,7 +31,7 @@ where
&self,
merchant_id: &common_utils::id_type::MerchantId,
_publishable_key: &str,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
@@ -45,7 +45,7 @@ where
})
.switch()?;
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
query_builder
.add_granularity_in_mins(granularity)
.switch()?;
diff --git a/crates/analytics/src/auth_events/metrics/three_ds_sdk_count.rs b/crates/analytics/src/auth_events/metrics/three_ds_sdk_count.rs
index ca67400a9b2e..4ce10c9aad37 100644
--- a/crates/analytics/src/auth_events/metrics/three_ds_sdk_count.rs
+++ b/crates/analytics/src/auth_events/metrics/three_ds_sdk_count.rs
@@ -31,7 +31,7 @@ where
&self,
_merchant_id: &common_utils::id_type::MerchantId,
publishable_key: &str,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
@@ -45,7 +45,7 @@ where
})
.switch()?;
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
query_builder
.add_granularity_in_mins(granularity)
.switch()?;
diff --git a/crates/analytics/src/clickhouse.rs b/crates/analytics/src/clickhouse.rs
index 37a011c9a5a6..cd870c12b236 100644
--- a/crates/analytics/src/clickhouse.rs
+++ b/crates/analytics/src/clickhouse.rs
@@ -16,7 +16,9 @@ use super::{
distribution::PaymentDistributionRow, filters::PaymentFilterRow, metrics::PaymentMetricRow,
},
query::{Aggregate, ToSql, Window},
- refunds::{filters::RefundFilterRow, metrics::RefundMetricRow},
+ refunds::{
+ distribution::RefundDistributionRow, filters::RefundFilterRow, metrics::RefundMetricRow,
+ },
sdk_events::{filters::SdkEventFilter, metrics::SdkEventMetricRow},
types::{AnalyticsCollection, AnalyticsDataSource, LoadRow, QueryExecutionError},
};
@@ -130,12 +132,18 @@ impl AnalyticsDataSource for ClickhouseClient {
fn get_table_engine(table: AnalyticsCollection) -> TableEngine {
match table {
AnalyticsCollection::Payment
+ | AnalyticsCollection::PaymentSessionized
| AnalyticsCollection::Refund
+ | AnalyticsCollection::RefundSessionized
| AnalyticsCollection::FraudCheck
| AnalyticsCollection::PaymentIntent
+ | AnalyticsCollection::PaymentIntentSessionized
| AnalyticsCollection::Dispute => {
TableEngine::CollapsingMergeTree { sign: "sign_flag" }
}
+ AnalyticsCollection::DisputeSessionized => {
+ TableEngine::CollapsingMergeTree { sign: "sign_flag" }
+ }
AnalyticsCollection::SdkEvents
| AnalyticsCollection::SdkEventsAnalytics
| AnalyticsCollection::ApiEvents
@@ -164,6 +172,7 @@ impl super::payment_intents::filters::PaymentIntentFilterAnalytics for Clickhous
impl super::payment_intents::metrics::PaymentIntentMetricAnalytics for ClickhouseClient {}
impl super::refunds::metrics::RefundMetricAnalytics for ClickhouseClient {}
impl super::refunds::filters::RefundFilterAnalytics for ClickhouseClient {}
+impl super::refunds::distribution::RefundDistributionAnalytics for ClickhouseClient {}
impl super::frm::metrics::FrmMetricAnalytics for ClickhouseClient {}
impl super::frm::filters::FrmFilterAnalytics for ClickhouseClient {}
impl super::sdk_events::filters::SdkEventFilterAnalytics for ClickhouseClient {}
@@ -294,6 +303,16 @@ impl TryInto for serde_json::Value {
}
}
+impl TryInto for serde_json::Value {
+ type Error = Report;
+
+ fn try_into(self) -> Result {
+ serde_json::from_value(self).change_context(ParsingError::StructParseFailure(
+ "Failed to parse RefundDistributionRow in clickhouse results",
+ ))
+ }
+}
+
impl TryInto for serde_json::Value {
type Error = Report;
@@ -423,16 +442,20 @@ impl ToSql for AnalyticsCollection {
fn to_sql(&self, _table_engine: &TableEngine) -> error_stack::Result {
match self {
Self::Payment => Ok("payment_attempts".to_string()),
+ Self::PaymentSessionized => Ok("sessionizer_payment_attempts".to_string()),
Self::Refund => Ok("refunds".to_string()),
+ Self::RefundSessionized => Ok("sessionizer_refunds".to_string()),
Self::FraudCheck => Ok("fraud_check".to_string()),
Self::SdkEvents => Ok("sdk_events_audit".to_string()),
Self::SdkEventsAnalytics => Ok("sdk_events".to_string()),
Self::ApiEvents => Ok("api_events_audit".to_string()),
Self::ApiEventsAnalytics => Ok("api_events".to_string()),
Self::PaymentIntent => Ok("payment_intents".to_string()),
+ Self::PaymentIntentSessionized => Ok("sessionizer_payment_intents".to_string()),
Self::ConnectorEvents => Ok("connector_events_audit".to_string()),
Self::OutgoingWebhookEvent => Ok("outgoing_webhook_events_audit".to_string()),
Self::Dispute => Ok("dispute".to_string()),
+ Self::DisputeSessionized => Ok("sessionizer_dispute".to_string()),
Self::ActivePaymentsAnalytics => Ok("active_payments".to_string()),
}
}
diff --git a/crates/analytics/src/disputes/accumulators.rs b/crates/analytics/src/disputes/accumulators.rs
index 1997d75d3230..41bd3beebdb7 100644
--- a/crates/analytics/src/disputes/accumulators.rs
+++ b/crates/analytics/src/disputes/accumulators.rs
@@ -5,8 +5,8 @@ use super::metrics::DisputeMetricRow;
#[derive(Debug, Default)]
pub struct DisputeMetricsAccumulator {
pub disputes_status_rate: RateAccumulator,
- pub total_amount_disputed: SumAccumulator,
- pub total_dispute_lost_amount: SumAccumulator,
+ pub disputed_amount: DisputedAmountAccumulator,
+ pub dispute_lost_amount: DisputedAmountAccumulator,
}
#[derive(Debug, Default)]
pub struct RateAccumulator {
@@ -17,7 +17,7 @@ pub struct RateAccumulator {
}
#[derive(Debug, Default)]
#[repr(transparent)]
-pub struct SumAccumulator {
+pub struct DisputedAmountAccumulator {
pub total: Option,
}
@@ -29,7 +29,7 @@ pub trait DisputeMetricAccumulator {
fn collect(self) -> Self::MetricOutput;
}
-impl DisputeMetricAccumulator for SumAccumulator {
+impl DisputeMetricAccumulator for DisputedAmountAccumulator {
type MetricOutput = Option;
#[inline]
fn add_metrics_bucket(&mut self, metrics: &DisputeMetricRow) {
@@ -92,8 +92,8 @@ impl DisputeMetricsAccumulator {
disputes_challenged: challenge_rate,
disputes_won: won_rate,
disputes_lost: lost_rate,
- total_amount_disputed: self.total_amount_disputed.collect(),
- total_dispute_lost_amount: self.total_dispute_lost_amount.collect(),
+ disputed_amount: self.disputed_amount.collect(),
+ dispute_lost_amount: self.dispute_lost_amount.collect(),
total_dispute,
}
}
diff --git a/crates/analytics/src/disputes/core.rs b/crates/analytics/src/disputes/core.rs
index b8b44a757dec..540a14104c1f 100644
--- a/crates/analytics/src/disputes/core.rs
+++ b/crates/analytics/src/disputes/core.rs
@@ -5,13 +5,12 @@ use api_models::analytics::{
DisputeDimensions, DisputeMetrics, DisputeMetricsBucketIdentifier,
DisputeMetricsBucketResponse,
},
- AnalyticsMetadata, DisputeFilterValue, DisputeFiltersResponse, GetDisputeFilterRequest,
- GetDisputeMetricRequest, MetricsResponse,
+ DisputeFilterValue, DisputeFiltersResponse, DisputesAnalyticsMetadata, DisputesMetricsResponse,
+ GetDisputeFilterRequest, GetDisputeMetricRequest,
};
use error_stack::ResultExt;
use router_env::{
logger,
- metrics::add_attributes,
tracing::{self, Instrument},
};
@@ -30,7 +29,7 @@ pub async fn get_metrics(
pool: &AnalyticsProvider,
auth: &AuthInfo,
req: GetDisputeMetricRequest,
-) -> AnalyticsResult> {
+) -> AnalyticsResult> {
let mut metrics_accumulator: HashMap<
DisputeMetricsBucketIdentifier,
DisputeMetricsAccumulator,
@@ -54,7 +53,7 @@ pub async fn get_metrics(
&req.group_by_names.clone(),
&auth_scoped,
&req.filters,
- &req.time_series.map(|t| t.granularity),
+ req.time_series.map(|t| t.granularity),
&req.time_range,
)
.await
@@ -72,14 +71,14 @@ pub async fn get_metrics(
.change_context(AnalyticsError::UnknownError)?
{
let data = data?;
- let attributes = &add_attributes([
+ let attributes = router_env::metric_attributes!(
("metric_type", metric.to_string()),
("source", pool.to_string()),
- ]);
+ );
let value = u64::try_from(data.len());
if let Ok(val) = value {
- metrics::BUCKETS_FETCHED.record(&metrics::CONTEXT, val, attributes);
+ metrics::BUCKETS_FETCHED.record(val, attributes);
logger::debug!("Attributes: {:?}, Buckets fetched: {}", attributes, val);
}
@@ -87,14 +86,17 @@ pub async fn get_metrics(
logger::debug!(bucket_id=?id, bucket_value=?value, "Bucket row for metric {metric}");
let metrics_builder = metrics_accumulator.entry(id).or_default();
match metric {
- DisputeMetrics::DisputeStatusMetric => metrics_builder
+ DisputeMetrics::DisputeStatusMetric
+ | DisputeMetrics::SessionizedDisputeStatusMetric => metrics_builder
.disputes_status_rate
.add_metrics_bucket(&value),
- DisputeMetrics::TotalAmountDisputed => metrics_builder
- .total_amount_disputed
- .add_metrics_bucket(&value),
- DisputeMetrics::TotalDisputeLostAmount => metrics_builder
- .total_dispute_lost_amount
+ DisputeMetrics::TotalAmountDisputed
+ | DisputeMetrics::SessionizedTotalAmountDisputed => {
+ metrics_builder.disputed_amount.add_metrics_bucket(&value)
+ }
+ DisputeMetrics::TotalDisputeLostAmount
+ | DisputeMetrics::SessionizedTotalDisputeLostAmount => metrics_builder
+ .dispute_lost_amount
.add_metrics_bucket(&value),
}
}
@@ -105,18 +107,31 @@ pub async fn get_metrics(
metrics_accumulator
);
}
+ let mut total_disputed_amount = 0;
+ let mut total_dispute_lost_amount = 0;
let query_data: Vec = metrics_accumulator
.into_iter()
- .map(|(id, val)| DisputeMetricsBucketResponse {
- values: val.collect(),
- dimensions: id,
+ .map(|(id, val)| {
+ let collected_values = val.collect();
+ if let Some(amount) = collected_values.disputed_amount {
+ total_disputed_amount += amount;
+ }
+ if let Some(amount) = collected_values.dispute_lost_amount {
+ total_dispute_lost_amount += amount;
+ }
+
+ DisputeMetricsBucketResponse {
+ values: collected_values,
+ dimensions: id,
+ }
})
.collect();
- Ok(MetricsResponse {
+ Ok(DisputesMetricsResponse {
query_data,
- meta_data: [AnalyticsMetadata {
- current_time_range: req.time_range,
+ meta_data: [DisputesAnalyticsMetadata {
+ total_disputed_amount: Some(total_disputed_amount),
+ total_dispute_lost_amount: Some(total_dispute_lost_amount),
}],
})
}
diff --git a/crates/analytics/src/disputes/metrics.rs b/crates/analytics/src/disputes/metrics.rs
index dd1aa3c1bbd4..6514e5fcbe0c 100644
--- a/crates/analytics/src/disputes/metrics.rs
+++ b/crates/analytics/src/disputes/metrics.rs
@@ -1,4 +1,5 @@
mod dispute_status_metric;
+mod sessionized_metrics;
mod total_amount_disputed;
mod total_dispute_lost_amount;
@@ -51,7 +52,7 @@ where
dimensions: &[DisputeDimensions],
auth: &AuthInfo,
filters: &DisputeFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult>;
@@ -72,7 +73,7 @@ where
dimensions: &[DisputeDimensions],
auth: &AuthInfo,
filters: &DisputeFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
@@ -92,6 +93,21 @@ where
.load_metrics(dimensions, auth, filters, granularity, time_range, pool)
.await
}
+ Self::SessionizedTotalAmountDisputed => {
+ sessionized_metrics::TotalAmountDisputed::default()
+ .load_metrics(dimensions, auth, filters, granularity, time_range, pool)
+ .await
+ }
+ Self::SessionizedDisputeStatusMetric => {
+ sessionized_metrics::DisputeStatusMetric::default()
+ .load_metrics(dimensions, auth, filters, granularity, time_range, pool)
+ .await
+ }
+ Self::SessionizedTotalDisputeLostAmount => {
+ sessionized_metrics::TotalDisputeLostAmount::default()
+ .load_metrics(dimensions, auth, filters, granularity, time_range, pool)
+ .await
+ }
}
}
}
diff --git a/crates/analytics/src/disputes/metrics/dispute_status_metric.rs b/crates/analytics/src/disputes/metrics/dispute_status_metric.rs
index bbce460e475c..ce962e284f6f 100644
--- a/crates/analytics/src/disputes/metrics/dispute_status_metric.rs
+++ b/crates/analytics/src/disputes/metrics/dispute_status_metric.rs
@@ -32,7 +32,7 @@ where
dimensions: &[DisputeDimensions],
auth: &AuthInfo,
filters: &DisputeFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult>
@@ -80,7 +80,7 @@ where
.add_group_by_clause("dispute_status")
.switch()?;
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
granularity
.set_group_by_clause(&mut query_builder)
.switch()?;
diff --git a/crates/analytics/src/disputes/metrics/sessionized_metrics.rs b/crates/analytics/src/disputes/metrics/sessionized_metrics.rs
new file mode 100644
index 000000000000..4d41194634db
--- /dev/null
+++ b/crates/analytics/src/disputes/metrics/sessionized_metrics.rs
@@ -0,0 +1,8 @@
+mod dispute_status_metric;
+mod total_amount_disputed;
+mod total_dispute_lost_amount;
+pub(super) use dispute_status_metric::DisputeStatusMetric;
+pub(super) use total_amount_disputed::TotalAmountDisputed;
+pub(super) use total_dispute_lost_amount::TotalDisputeLostAmount;
+
+pub use super::{DisputeMetric, DisputeMetricAnalytics, DisputeMetricRow};
diff --git a/crates/analytics/src/disputes/metrics/sessionized_metrics/dispute_status_metric.rs b/crates/analytics/src/disputes/metrics/sessionized_metrics/dispute_status_metric.rs
new file mode 100644
index 000000000000..9a7b05358192
--- /dev/null
+++ b/crates/analytics/src/disputes/metrics/sessionized_metrics/dispute_status_metric.rs
@@ -0,0 +1,120 @@
+use std::collections::HashSet;
+
+use api_models::analytics::{
+ disputes::{DisputeDimensions, DisputeFilters, DisputeMetricsBucketIdentifier},
+ Granularity, TimeRange,
+};
+use common_utils::errors::ReportSwitchExt;
+use error_stack::ResultExt;
+use time::PrimitiveDateTime;
+
+use super::DisputeMetricRow;
+use crate::{
+ enums::AuthInfo,
+ query::{Aggregate, GroupByClause, QueryBuilder, QueryFilter, SeriesBucket, ToSql, Window},
+ types::{AnalyticsCollection, AnalyticsDataSource, MetricsError, MetricsResult},
+};
+#[derive(Default)]
+pub(crate) struct DisputeStatusMetric {}
+
+#[async_trait::async_trait]
+impl super::DisputeMetric for DisputeStatusMetric
+where
+ T: AnalyticsDataSource + super::DisputeMetricAnalytics,
+ PrimitiveDateTime: ToSql,
+ AnalyticsCollection: ToSql,
+ Granularity: GroupByClause,
+ Aggregate<&'static str>: ToSql,
+ Window<&'static str>: ToSql,
+{
+ async fn load_metrics(
+ &self,
+ dimensions: &[DisputeDimensions],
+ auth: &AuthInfo,
+ filters: &DisputeFilters,
+ granularity: Option,
+ time_range: &TimeRange,
+ pool: &T,
+ ) -> MetricsResult>
+ where
+ T: AnalyticsDataSource + super::DisputeMetricAnalytics,
+ {
+ let mut query_builder = QueryBuilder::new(AnalyticsCollection::DisputeSessionized);
+
+ for dim in dimensions {
+ query_builder.add_select_column(dim).switch()?;
+ }
+
+ query_builder.add_select_column("dispute_status").switch()?;
+
+ query_builder
+ .add_select_column(Aggregate::Count {
+ field: None,
+ alias: Some("count"),
+ })
+ .switch()?;
+ query_builder
+ .add_select_column(Aggregate::Min {
+ field: "created_at",
+ alias: Some("start_bucket"),
+ })
+ .switch()?;
+ query_builder
+ .add_select_column(Aggregate::Max {
+ field: "created_at",
+ alias: Some("end_bucket"),
+ })
+ .switch()?;
+
+ filters.set_filter_clause(&mut query_builder).switch()?;
+
+ auth.set_filter_clause(&mut query_builder).switch()?;
+
+ time_range.set_filter_clause(&mut query_builder).switch()?;
+
+ for dim in dimensions {
+ query_builder.add_group_by_clause(dim).switch()?;
+ }
+
+ query_builder
+ .add_group_by_clause("dispute_status")
+ .switch()?;
+
+ if let Some(granularity) = granularity {
+ granularity
+ .set_group_by_clause(&mut query_builder)
+ .switch()?;
+ }
+
+ query_builder
+ .execute_query::(pool)
+ .await
+ .change_context(MetricsError::QueryBuildingError)?
+ .change_context(MetricsError::QueryExecutionFailure)?
+ .into_iter()
+ .map(|i| {
+ Ok((
+ DisputeMetricsBucketIdentifier::new(
+ i.dispute_stage.as_ref().map(|i| i.0),
+ i.connector.clone(),
+ TimeRange {
+ start_time: match (granularity, i.start_bucket) {
+ (Some(g), Some(st)) => g.clip_to_start(st)?,
+ _ => time_range.start_time,
+ },
+ end_time: granularity.as_ref().map_or_else(
+ || Ok(time_range.end_time),
+ |g| i.end_bucket.map(|et| g.clip_to_end(et)).transpose(),
+ )?,
+ },
+ ),
+ i,
+ ))
+ })
+ .collect::,
+ crate::query::PostProcessingError,
+ >>()
+ .change_context(MetricsError::PostProcessingFailure)
+ }
+}
diff --git a/crates/analytics/src/disputes/metrics/sessionized_metrics/total_amount_disputed.rs b/crates/analytics/src/disputes/metrics/sessionized_metrics/total_amount_disputed.rs
new file mode 100644
index 000000000000..5c5eceb06196
--- /dev/null
+++ b/crates/analytics/src/disputes/metrics/sessionized_metrics/total_amount_disputed.rs
@@ -0,0 +1,118 @@
+use std::collections::HashSet;
+
+use api_models::analytics::{
+ disputes::{DisputeDimensions, DisputeFilters, DisputeMetricsBucketIdentifier},
+ Granularity, TimeRange,
+};
+use common_utils::errors::ReportSwitchExt;
+use error_stack::ResultExt;
+use time::PrimitiveDateTime;
+
+use super::DisputeMetricRow;
+use crate::{
+ enums::AuthInfo,
+ query::{Aggregate, GroupByClause, QueryBuilder, QueryFilter, SeriesBucket, ToSql, Window},
+ types::{AnalyticsCollection, AnalyticsDataSource, MetricsError, MetricsResult},
+};
+#[derive(Default)]
+pub(crate) struct TotalAmountDisputed {}
+
+#[async_trait::async_trait]
+impl super::DisputeMetric for TotalAmountDisputed
+where
+ T: AnalyticsDataSource + super::DisputeMetricAnalytics,
+ PrimitiveDateTime: ToSql,
+ AnalyticsCollection: ToSql,
+ Granularity: GroupByClause,
+ Aggregate<&'static str>: ToSql,
+ Window<&'static str>: ToSql,
+{
+ async fn load_metrics(
+ &self,
+ dimensions: &[DisputeDimensions],
+ auth: &AuthInfo,
+ filters: &DisputeFilters,
+ granularity: Option,
+ time_range: &TimeRange,
+ pool: &T,
+ ) -> MetricsResult>
+ where
+ T: AnalyticsDataSource + super::DisputeMetricAnalytics,
+ {
+ let mut query_builder: QueryBuilder =
+ QueryBuilder::new(AnalyticsCollection::DisputeSessionized);
+
+ for dim in dimensions {
+ query_builder.add_select_column(dim).switch()?;
+ }
+
+ query_builder
+ .add_select_column(Aggregate::Sum {
+ field: "dispute_amount",
+ alias: Some("total"),
+ })
+ .switch()?;
+ query_builder
+ .add_select_column(Aggregate::Min {
+ field: "created_at",
+ alias: Some("start_bucket"),
+ })
+ .switch()?;
+ query_builder
+ .add_select_column(Aggregate::Max {
+ field: "created_at",
+ alias: Some("end_bucket"),
+ })
+ .switch()?;
+
+ filters.set_filter_clause(&mut query_builder).switch()?;
+
+ auth.set_filter_clause(&mut query_builder).switch()?;
+
+ time_range
+ .set_filter_clause(&mut query_builder)
+ .attach_printable("Error filtering time range")
+ .switch()?;
+
+ for dim in dimensions.iter() {
+ query_builder.add_group_by_clause(dim).switch()?;
+ }
+
+ if let Some(granularity) = granularity {
+ granularity
+ .set_group_by_clause(&mut query_builder)
+ .switch()?;
+ }
+ query_builder
+ .add_filter_clause("dispute_status", "dispute_won")
+ .switch()?;
+
+ query_builder
+ .execute_query::(pool)
+ .await
+ .change_context(MetricsError::QueryBuildingError)?
+ .change_context(MetricsError::QueryExecutionFailure)?
+ .into_iter()
+ .map(|i| {
+ Ok((
+ DisputeMetricsBucketIdentifier::new(
+ i.dispute_stage.as_ref().map(|i| i.0),
+ i.connector.clone(),
+ TimeRange {
+ start_time: match (granularity, i.start_bucket) {
+ (Some(g), Some(st)) => g.clip_to_start(st)?,
+ _ => time_range.start_time,
+ },
+ end_time: granularity.as_ref().map_or_else(
+ || Ok(time_range.end_time),
+ |g| i.end_bucket.map(|et| g.clip_to_end(et)).transpose(),
+ )?,
+ },
+ ),
+ i,
+ ))
+ })
+ .collect::, crate::query::PostProcessingError>>()
+ .change_context(MetricsError::PostProcessingFailure)
+ }
+}
diff --git a/crates/analytics/src/disputes/metrics/sessionized_metrics/total_dispute_lost_amount.rs b/crates/analytics/src/disputes/metrics/sessionized_metrics/total_dispute_lost_amount.rs
new file mode 100644
index 000000000000..d6308b09f33b
--- /dev/null
+++ b/crates/analytics/src/disputes/metrics/sessionized_metrics/total_dispute_lost_amount.rs
@@ -0,0 +1,119 @@
+use std::collections::HashSet;
+
+use api_models::analytics::{
+ disputes::{DisputeDimensions, DisputeFilters, DisputeMetricsBucketIdentifier},
+ Granularity, TimeRange,
+};
+use common_utils::errors::ReportSwitchExt;
+use error_stack::ResultExt;
+use time::PrimitiveDateTime;
+
+use super::DisputeMetricRow;
+use crate::{
+ enums::AuthInfo,
+ query::{Aggregate, GroupByClause, QueryBuilder, QueryFilter, SeriesBucket, ToSql, Window},
+ types::{AnalyticsCollection, AnalyticsDataSource, MetricsError, MetricsResult},
+};
+#[derive(Default)]
+pub(crate) struct TotalDisputeLostAmount {}
+
+#[async_trait::async_trait]
+impl super::DisputeMetric for TotalDisputeLostAmount
+where
+ T: AnalyticsDataSource + super::DisputeMetricAnalytics,
+ PrimitiveDateTime: ToSql,
+ AnalyticsCollection: ToSql,
+ Granularity: GroupByClause,
+ Aggregate<&'static str>: ToSql,
+ Window<&'static str>: ToSql,
+{
+ async fn load_metrics(
+ &self,
+ dimensions: &[DisputeDimensions],
+ auth: &AuthInfo,
+ filters: &DisputeFilters,
+ granularity: Option,
+ time_range: &TimeRange,
+ pool: &T,
+ ) -> MetricsResult>
+ where
+ T: AnalyticsDataSource + super::DisputeMetricAnalytics,
+ {
+ let mut query_builder: QueryBuilder =
+ QueryBuilder::new(AnalyticsCollection::DisputeSessionized);
+
+ for dim in dimensions.iter() {
+ query_builder.add_select_column(dim).switch()?;
+ }
+
+ query_builder
+ .add_select_column(Aggregate::Sum {
+ field: "dispute_amount",
+ alias: Some("total"),
+ })
+ .switch()?;
+ query_builder
+ .add_select_column(Aggregate::Min {
+ field: "created_at",
+ alias: Some("start_bucket"),
+ })
+ .switch()?;
+ query_builder
+ .add_select_column(Aggregate::Max {
+ field: "created_at",
+ alias: Some("end_bucket"),
+ })
+ .switch()?;
+
+ filters.set_filter_clause(&mut query_builder).switch()?;
+
+ auth.set_filter_clause(&mut query_builder).switch()?;
+
+ time_range
+ .set_filter_clause(&mut query_builder)
+ .attach_printable("Error filtering time range")
+ .switch()?;
+
+ for dim in dimensions.iter() {
+ query_builder.add_group_by_clause(dim).switch()?;
+ }
+
+ if let Some(granularity) = granularity {
+ granularity
+ .set_group_by_clause(&mut query_builder)
+ .switch()?;
+ }
+
+ query_builder
+ .add_filter_clause("dispute_status", "dispute_lost")
+ .switch()?;
+
+ query_builder
+ .execute_query::(pool)
+ .await
+ .change_context(MetricsError::QueryBuildingError)?
+ .change_context(MetricsError::QueryExecutionFailure)?
+ .into_iter()
+ .map(|i| {
+ Ok((
+ DisputeMetricsBucketIdentifier::new(
+ i.dispute_stage.as_ref().map(|i| i.0),
+ i.connector.clone(),
+ TimeRange {
+ start_time: match (granularity, i.start_bucket) {
+ (Some(g), Some(st)) => g.clip_to_start(st)?,
+ _ => time_range.start_time,
+ },
+ end_time: granularity.as_ref().map_or_else(
+ || Ok(time_range.end_time),
+ |g| i.end_bucket.map(|et| g.clip_to_end(et)).transpose(),
+ )?,
+ },
+ ),
+ i,
+ ))
+ })
+ .collect::, crate::query::PostProcessingError>>()
+ .change_context(MetricsError::PostProcessingFailure)
+ }
+}
diff --git a/crates/analytics/src/disputes/metrics/total_amount_disputed.rs b/crates/analytics/src/disputes/metrics/total_amount_disputed.rs
index 5b9d0f54622f..68c7fa6d166c 100644
--- a/crates/analytics/src/disputes/metrics/total_amount_disputed.rs
+++ b/crates/analytics/src/disputes/metrics/total_amount_disputed.rs
@@ -32,7 +32,7 @@ where
dimensions: &[DisputeDimensions],
auth: &AuthInfo,
filters: &DisputeFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult>
@@ -77,7 +77,7 @@ where
query_builder.add_group_by_clause(dim).switch()?;
}
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
granularity
.set_group_by_clause(&mut query_builder)
.switch()?;
diff --git a/crates/analytics/src/disputes/metrics/total_dispute_lost_amount.rs b/crates/analytics/src/disputes/metrics/total_dispute_lost_amount.rs
index e13f3a0f5305..d14d49827010 100644
--- a/crates/analytics/src/disputes/metrics/total_dispute_lost_amount.rs
+++ b/crates/analytics/src/disputes/metrics/total_dispute_lost_amount.rs
@@ -32,7 +32,7 @@ where
dimensions: &[DisputeDimensions],
auth: &AuthInfo,
filters: &DisputeFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult>
@@ -77,7 +77,7 @@ where
query_builder.add_group_by_clause(dim).switch()?;
}
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
granularity
.set_group_by_clause(&mut query_builder)
.switch()?;
diff --git a/crates/analytics/src/errors.rs b/crates/analytics/src/errors.rs
index 0e39a4ddd928..d7b15a6db115 100644
--- a/crates/analytics/src/errors.rs
+++ b/crates/analytics/src/errors.rs
@@ -12,6 +12,8 @@ pub enum AnalyticsError {
UnknownError,
#[error("Access Forbidden Analytics Error")]
AccessForbiddenError,
+ #[error("Failed to fetch currency exchange rate")]
+ ForexFetchFailed,
}
impl ErrorSwitch for AnalyticsError {
@@ -32,6 +34,12 @@ impl ErrorSwitch for AnalyticsError {
Self::AccessForbiddenError => {
ApiErrorResponse::Unauthorized(ApiError::new("IR", 0, "Access Forbidden", None))
}
+ Self::ForexFetchFailed => ApiErrorResponse::InternalServerError(ApiError::new(
+ "HE",
+ 0,
+ "Failed to fetch currency exchange rate",
+ None,
+ )),
}
}
}
diff --git a/crates/analytics/src/frm/core.rs b/crates/analytics/src/frm/core.rs
index d2b79ad2773b..195266b4191a 100644
--- a/crates/analytics/src/frm/core.rs
+++ b/crates/analytics/src/frm/core.rs
@@ -9,7 +9,6 @@ use api_models::analytics::{
use error_stack::ResultExt;
use router_env::{
logger,
- metrics::add_attributes,
tracing::{self, Instrument},
};
@@ -47,7 +46,7 @@ pub async fn get_metrics(
&req.group_by_names.clone(),
&merchant_id_scoped,
&req.filters,
- &req.time_series.map(|t| t.granularity),
+ req.time_series.map(|t| t.granularity),
&req.time_range,
)
.await
@@ -66,13 +65,13 @@ pub async fn get_metrics(
{
let data = data?;
- let attributes = &add_attributes([
+ let attributes = router_env::metric_attributes!(
("metric_type", metric.to_string()),
("source", pool.to_string()),
- ]);
+ );
let value = u64::try_from(data.len());
if let Ok(val) = value {
- metrics::BUCKETS_FETCHED.record(&metrics::CONTEXT, val, attributes);
+ metrics::BUCKETS_FETCHED.record(val, attributes);
logger::debug!("Attributes: {:?}, Buckets fetched: {}", attributes, val);
}
diff --git a/crates/analytics/src/frm/metrics.rs b/crates/analytics/src/frm/metrics.rs
index 7f5b4ea32be3..b3780dfd3cbd 100644
--- a/crates/analytics/src/frm/metrics.rs
+++ b/crates/analytics/src/frm/metrics.rs
@@ -44,7 +44,7 @@ where
dimensions: &[FrmDimensions],
merchant_id: &common_utils::id_type::MerchantId,
filters: &FrmFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult>;
@@ -65,7 +65,7 @@ where
dimensions: &[FrmDimensions],
merchant_id: &common_utils::id_type::MerchantId,
filters: &FrmFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
diff --git a/crates/analytics/src/frm/metrics/frm_blocked_rate.rs b/crates/analytics/src/frm/metrics/frm_blocked_rate.rs
index 7154478c0267..00903cdcaef0 100644
--- a/crates/analytics/src/frm/metrics/frm_blocked_rate.rs
+++ b/crates/analytics/src/frm/metrics/frm_blocked_rate.rs
@@ -29,7 +29,7 @@ where
dimensions: &[FrmDimensions],
merchant_id: &common_utils::id_type::MerchantId,
filters: &FrmFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult>
@@ -76,7 +76,7 @@ where
query_builder.add_group_by_clause(dim).switch()?;
}
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
granularity
.set_group_by_clause(&mut query_builder)
.switch()?;
diff --git a/crates/analytics/src/frm/metrics/frm_triggered_attempts.rs b/crates/analytics/src/frm/metrics/frm_triggered_attempts.rs
index 168a256ffa62..dd487cdc93f7 100644
--- a/crates/analytics/src/frm/metrics/frm_triggered_attempts.rs
+++ b/crates/analytics/src/frm/metrics/frm_triggered_attempts.rs
@@ -30,7 +30,7 @@ where
dimensions: &[FrmDimensions],
merchant_id: &common_utils::id_type::MerchantId,
filters: &FrmFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult> {
@@ -77,7 +77,7 @@ where
.switch()?;
}
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
granularity
.set_group_by_clause(&mut query_builder)
.attach_printable("Error adding granularity")
diff --git a/crates/analytics/src/lib.rs b/crates/analytics/src/lib.rs
index d5cb3c718dfb..0ad8886b8208 100644
--- a/crates/analytics/src/lib.rs
+++ b/crates/analytics/src/lib.rs
@@ -29,6 +29,7 @@ use hyperswitch_interfaces::secrets_interface::{
secret_state::{RawSecret, SecretStateContainer, SecuredSecret},
SecretManagementInterface, SecretsManagementError,
};
+use refunds::distribution::{RefundDistribution, RefundDistributionRow};
pub use types::AnalyticsDomain;
pub mod lambda_utils;
pub mod utils;
@@ -52,7 +53,7 @@ use api_models::analytics::{
sdk_events::{
SdkEventDimensions, SdkEventFilters, SdkEventMetrics, SdkEventMetricsBucketIdentifier,
},
- Distribution, Granularity, TimeRange,
+ Granularity, PaymentDistributionBody, RefundDistributionBody, TimeRange,
};
use clickhouse::ClickhouseClient;
pub use clickhouse::ClickhouseConfig;
@@ -115,7 +116,7 @@ impl AnalyticsProvider {
dimensions: &[PaymentDimensions],
auth: &AuthInfo,
filters: &PaymentFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
) -> types::MetricsResult> {
// Metrics to get the fetch time for each payment metric
@@ -215,11 +216,11 @@ impl AnalyticsProvider {
pub async fn get_payment_distribution(
&self,
- distribution: &Distribution,
+ distribution: &PaymentDistributionBody,
dimensions: &[PaymentDimensions],
auth: &AuthInfo,
filters: &PaymentFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
) -> types::MetricsResult> {
// Metrics to get the fetch time for each payment metric
@@ -329,7 +330,7 @@ impl AnalyticsProvider {
dimensions: &[PaymentIntentDimensions],
auth: &AuthInfo,
filters: &PaymentIntentFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
) -> types::MetricsResult>
{
@@ -434,7 +435,7 @@ impl AnalyticsProvider {
dimensions: &[RefundDimensions],
auth: &AuthInfo,
filters: &RefundFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
) -> types::MetricsResult> {
// Metrics to get the fetch time for each refund metric
@@ -528,13 +529,123 @@ impl AnalyticsProvider {
.await
}
+ pub async fn get_refund_distribution(
+ &self,
+ distribution: &RefundDistributionBody,
+ dimensions: &[RefundDimensions],
+ auth: &AuthInfo,
+ filters: &RefundFilters,
+ granularity: &Option,
+ time_range: &TimeRange,
+ ) -> types::MetricsResult> {
+ // Metrics to get the fetch time for each payment metric
+ metrics::request::record_operation_time(
+ async {
+ match self {
+ Self::Sqlx(pool) => {
+ distribution.distribution_for
+ .load_distribution(
+ distribution,
+ dimensions,
+ auth,
+ filters,
+ granularity,
+ time_range,
+ pool,
+ )
+ .await
+ }
+ Self::Clickhouse(pool) => {
+ distribution.distribution_for
+ .load_distribution(
+ distribution,
+ dimensions,
+ auth,
+ filters,
+ granularity,
+ time_range,
+ pool,
+ )
+ .await
+ }
+ Self::CombinedCkh(sqlx_pool, ckh_pool) => {
+ let (ckh_result, sqlx_result) = tokio::join!(distribution.distribution_for
+ .load_distribution(
+ distribution,
+ dimensions,
+ auth,
+ filters,
+ granularity,
+ time_range,
+ ckh_pool,
+ ),
+ distribution.distribution_for
+ .load_distribution(
+ distribution,
+ dimensions,
+ auth,
+ filters,
+ granularity,
+ time_range,
+ sqlx_pool,
+ ));
+ match (&sqlx_result, &ckh_result) {
+ (Ok(ref sqlx_res), Ok(ref ckh_res)) if sqlx_res != ckh_res => {
+ router_env::logger::error!(clickhouse_result=?ckh_res, postgres_result=?sqlx_res, "Mismatch between clickhouse & postgres payments analytics distribution")
+ },
+ _ => {}
+
+ };
+
+ ckh_result
+ }
+ Self::CombinedSqlx(sqlx_pool, ckh_pool) => {
+ let (ckh_result, sqlx_result) = tokio::join!(distribution.distribution_for
+ .load_distribution(
+ distribution,
+ dimensions,
+ auth,
+ filters,
+ granularity,
+ time_range,
+ ckh_pool,
+ ),
+ distribution.distribution_for
+ .load_distribution(
+ distribution,
+ dimensions,
+ auth,
+ filters,
+ granularity,
+ time_range,
+ sqlx_pool,
+ ));
+ match (&sqlx_result, &ckh_result) {
+ (Ok(ref sqlx_res), Ok(ref ckh_res)) if sqlx_res != ckh_res => {
+ router_env::logger::error!(clickhouse_result=?ckh_res, postgres_result=?sqlx_res, "Mismatch between clickhouse & postgres payments analytics distribution")
+ },
+ _ => {}
+
+ };
+
+ sqlx_result
+ }
+ }
+ },
+ &metrics::METRIC_FETCH_TIME,
+ &distribution.distribution_for,
+ self,
+ )
+ .await
+ }
+
pub async fn get_frm_metrics(
&self,
metric: &FrmMetrics,
dimensions: &[FrmDimensions],
merchant_id: &common_utils::id_type::MerchantId,
filters: &FrmFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
) -> types::MetricsResult> {
// Metrics to get the fetch time for each refund metric
@@ -634,7 +745,7 @@ impl AnalyticsProvider {
dimensions: &[DisputeDimensions],
auth: &AuthInfo,
filters: &DisputeFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
) -> types::MetricsResult> {
// Metrics to get the fetch time for each refund metric
@@ -734,7 +845,7 @@ impl AnalyticsProvider {
dimensions: &[SdkEventDimensions],
publishable_key: &str,
filters: &SdkEventFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
) -> types::MetricsResult> {
match self {
@@ -799,7 +910,7 @@ impl AnalyticsProvider {
metric: &AuthEventMetrics,
merchant_id: &common_utils::id_type::MerchantId,
publishable_key: &str,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
) -> types::MetricsResult> {
match self {
@@ -830,7 +941,7 @@ impl AnalyticsProvider {
dimensions: &[ApiEventDimensions],
merchant_id: &common_utils::id_type::MerchantId,
filters: &ApiEventFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
) -> types::MetricsResult> {
match self {
@@ -858,21 +969,25 @@ impl AnalyticsProvider {
tenant: &dyn storage_impl::config::TenantConfig,
) -> Self {
match config {
- AnalyticsConfig::Sqlx { sqlx } => {
+ AnalyticsConfig::Sqlx { sqlx, .. } => {
Self::Sqlx(SqlxClient::from_conf(sqlx, tenant.get_schema()).await)
}
- AnalyticsConfig::Clickhouse { clickhouse } => Self::Clickhouse(ClickhouseClient {
+ AnalyticsConfig::Clickhouse { clickhouse, .. } => Self::Clickhouse(ClickhouseClient {
config: Arc::new(clickhouse.clone()),
database: tenant.get_clickhouse_database().to_string(),
}),
- AnalyticsConfig::CombinedCkh { sqlx, clickhouse } => Self::CombinedCkh(
+ AnalyticsConfig::CombinedCkh {
+ sqlx, clickhouse, ..
+ } => Self::CombinedCkh(
SqlxClient::from_conf(sqlx, tenant.get_schema()).await,
ClickhouseClient {
config: Arc::new(clickhouse.clone()),
database: tenant.get_clickhouse_database().to_string(),
},
),
- AnalyticsConfig::CombinedSqlx { sqlx, clickhouse } => Self::CombinedSqlx(
+ AnalyticsConfig::CombinedSqlx {
+ sqlx, clickhouse, ..
+ } => Self::CombinedSqlx(
SqlxClient::from_conf(sqlx, tenant.get_schema()).await,
ClickhouseClient {
config: Arc::new(clickhouse.clone()),
@@ -889,20 +1004,35 @@ impl AnalyticsProvider {
pub enum AnalyticsConfig {
Sqlx {
sqlx: Database,
+ forex_enabled: bool,
},
Clickhouse {
clickhouse: ClickhouseConfig,
+ forex_enabled: bool,
},
CombinedCkh {
sqlx: Database,
clickhouse: ClickhouseConfig,
+ forex_enabled: bool,
},
CombinedSqlx {
sqlx: Database,
clickhouse: ClickhouseConfig,
+ forex_enabled: bool,
},
}
+impl AnalyticsConfig {
+ pub fn get_forex_enabled(&self) -> bool {
+ match self {
+ Self::Sqlx { forex_enabled, .. }
+ | Self::Clickhouse { forex_enabled, .. }
+ | Self::CombinedCkh { forex_enabled, .. }
+ | Self::CombinedSqlx { forex_enabled, .. } => *forex_enabled,
+ }
+ }
+}
+
#[async_trait::async_trait]
impl SecretsHandler for AnalyticsConfig {
async fn convert_to_raw_secret(
@@ -913,7 +1043,7 @@ impl SecretsHandler for AnalyticsConfig {
let decrypted_password = match analytics_config {
// Todo: Perform kms decryption of clickhouse password
Self::Clickhouse { .. } => masking::Secret::new(String::default()),
- Self::Sqlx { sqlx }
+ Self::Sqlx { sqlx, .. }
| Self::CombinedCkh { sqlx, .. }
| Self::CombinedSqlx { sqlx, .. } => {
secret_management_client
@@ -923,26 +1053,46 @@ impl SecretsHandler for AnalyticsConfig {
};
Ok(value.transition_state(|conf| match conf {
- Self::Sqlx { sqlx } => Self::Sqlx {
+ Self::Sqlx {
+ sqlx,
+ forex_enabled,
+ } => Self::Sqlx {
sqlx: Database {
password: decrypted_password,
..sqlx
},
+ forex_enabled,
},
- Self::Clickhouse { clickhouse } => Self::Clickhouse { clickhouse },
- Self::CombinedCkh { sqlx, clickhouse } => Self::CombinedCkh {
+ Self::Clickhouse {
+ clickhouse,
+ forex_enabled,
+ } => Self::Clickhouse {
+ clickhouse,
+ forex_enabled,
+ },
+ Self::CombinedCkh {
+ sqlx,
+ clickhouse,
+ forex_enabled,
+ } => Self::CombinedCkh {
sqlx: Database {
password: decrypted_password,
..sqlx
},
clickhouse,
+ forex_enabled,
},
- Self::CombinedSqlx { sqlx, clickhouse } => Self::CombinedSqlx {
+ Self::CombinedSqlx {
+ sqlx,
+ clickhouse,
+ forex_enabled,
+ } => Self::CombinedSqlx {
sqlx: Database {
password: decrypted_password,
..sqlx
},
clickhouse,
+ forex_enabled,
},
}))
}
@@ -952,6 +1102,7 @@ impl Default for AnalyticsConfig {
fn default() -> Self {
Self::Sqlx {
sqlx: Database::default(),
+ forex_enabled: false,
}
}
}
@@ -996,6 +1147,7 @@ pub enum AnalyticsFlow {
GetSearchResults,
GetDisputeFilters,
GetDisputeMetrics,
+ GetSankey,
}
impl FlowMetric for AnalyticsFlow {}
diff --git a/crates/analytics/src/metrics.rs b/crates/analytics/src/metrics.rs
index 6222315a8c06..03eab289333d 100644
--- a/crates/analytics/src/metrics.rs
+++ b/crates/analytics/src/metrics.rs
@@ -1,9 +1,8 @@
-use router_env::{global_meter, histogram_metric, histogram_metric_u64, metrics_context};
+use router_env::{global_meter, histogram_metric_f64, histogram_metric_u64};
-metrics_context!(CONTEXT);
global_meter!(GLOBAL_METER, "ROUTER_API");
-histogram_metric!(METRIC_FETCH_TIME, GLOBAL_METER);
+histogram_metric_f64!(METRIC_FETCH_TIME, GLOBAL_METER);
histogram_metric_u64!(BUCKETS_FETCHED, GLOBAL_METER);
pub mod request;
diff --git a/crates/analytics/src/metrics/request.rs b/crates/analytics/src/metrics/request.rs
index 39375d391a3e..c30e34da8ee2 100644
--- a/crates/analytics/src/metrics/request.rs
+++ b/crates/analytics/src/metrics/request.rs
@@ -1,7 +1,5 @@
use std::time;
-use router_env::metrics::add_attributes;
-
#[inline]
pub async fn record_operation_time(
future: F,
@@ -14,12 +12,12 @@ where
T: ToString,
{
let (result, time) = time_future(future).await;
- let attributes = &add_attributes([
+ let attributes = router_env::metric_attributes!(
("metric_name", metric_name.to_string()),
("source", source.to_string()),
- ]);
+ );
let value = time.as_secs_f64();
- metric.record(&super::CONTEXT, value, attributes);
+ metric.record(value, attributes);
router_env::logger::debug!("Attributes: {:?}, Time: {}", attributes, value);
result
diff --git a/crates/analytics/src/opensearch.rs b/crates/analytics/src/opensearch.rs
index 149c77212a07..e85340e49d2d 100644
--- a/crates/analytics/src/opensearch.rs
+++ b/crates/analytics/src/opensearch.rs
@@ -1,3 +1,5 @@
+use std::collections::HashSet;
+
use api_models::{
analytics::search::SearchIndex,
errors::types::{ApiError, ApiErrorResponse},
@@ -42,6 +44,10 @@ pub struct OpenSearchIndexes {
pub payment_intents: String,
pub refunds: String,
pub disputes: String,
+ pub sessionizer_payment_attempts: String,
+ pub sessionizer_payment_intents: String,
+ pub sessionizer_refunds: String,
+ pub sessionizer_disputes: String,
}
#[derive(Debug, Clone, Copy, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
@@ -81,6 +87,10 @@ impl Default for OpenSearchConfig {
payment_intents: "hyperswitch-payment-intent-events".to_string(),
refunds: "hyperswitch-refund-events".to_string(),
disputes: "hyperswitch-dispute-events".to_string(),
+ sessionizer_payment_attempts: "sessionizer-payment-attempt-events".to_string(),
+ sessionizer_payment_intents: "sessionizer-payment-intent-events".to_string(),
+ sessionizer_refunds: "sessionizer-refund-events".to_string(),
+ sessionizer_disputes: "sessionizer-dispute-events".to_string(),
},
}
}
@@ -104,6 +114,8 @@ pub enum OpenSearchError {
IndexAccessNotPermittedError(SearchIndex),
#[error("Opensearch unknown error")]
UnknownError,
+ #[error("Opensearch access forbidden error")]
+ AccessForbiddenError,
}
impl ErrorSwitch for QueryBuildingError {
@@ -159,6 +171,12 @@ impl ErrorSwitch for OpenSearchError {
Self::UnknownError => {
ApiErrorResponse::InternalServerError(ApiError::new("IR", 6, "Unknown error", None))
}
+ Self::AccessForbiddenError => ApiErrorResponse::ForbiddenCommonResource(ApiError::new(
+ "IR",
+ 7,
+ "Access Forbidden error",
+ None,
+ )),
}
}
}
@@ -211,6 +229,14 @@ impl OpenSearchClient {
SearchIndex::PaymentIntents => self.indexes.payment_intents.clone(),
SearchIndex::Refunds => self.indexes.refunds.clone(),
SearchIndex::Disputes => self.indexes.disputes.clone(),
+ SearchIndex::SessionizerPaymentAttempts => {
+ self.indexes.sessionizer_payment_attempts.clone()
+ }
+ SearchIndex::SessionizerPaymentIntents => {
+ self.indexes.sessionizer_payment_intents.clone()
+ }
+ SearchIndex::SessionizerRefunds => self.indexes.sessionizer_refunds.clone(),
+ SearchIndex::SessionizerDisputes => self.indexes.sessionizer_disputes.clone(),
}
}
@@ -316,6 +342,36 @@ impl OpenSearchIndexes {
))
})?;
+ when(
+ self.sessionizer_payment_attempts.is_default_or_empty(),
+ || {
+ Err(ApplicationError::InvalidConfigurationValueError(
+ "Opensearch Sessionizer Payment Attempts index must not be empty".into(),
+ ))
+ },
+ )?;
+
+ when(
+ self.sessionizer_payment_intents.is_default_or_empty(),
+ || {
+ Err(ApplicationError::InvalidConfigurationValueError(
+ "Opensearch Sessionizer Payment Intents index must not be empty".into(),
+ ))
+ },
+ )?;
+
+ when(self.sessionizer_refunds.is_default_or_empty(), || {
+ Err(ApplicationError::InvalidConfigurationValueError(
+ "Opensearch Sessionizer Refunds index must not be empty".into(),
+ ))
+ })?;
+
+ when(self.sessionizer_disputes.is_default_or_empty(), || {
+ Err(ApplicationError::InvalidConfigurationValueError(
+ "Opensearch Sessionizer Disputes index must not be empty".into(),
+ ))
+ })?;
+
Ok(())
}
}
@@ -402,7 +458,8 @@ pub struct OpenSearchQueryBuilder {
pub count: Option,
pub filters: Vec<(String, Vec)>,
pub time_range: Option,
- pub search_params: Vec,
+ search_params: Vec,
+ case_sensitive_fields: HashSet<&'static str>,
}
impl OpenSearchQueryBuilder {
@@ -415,6 +472,12 @@ impl OpenSearchQueryBuilder {
count: Default::default(),
filters: Default::default(),
time_range: Default::default(),
+ case_sensitive_fields: HashSet::from([
+ "customer_email.keyword",
+ "search_tags.keyword",
+ "card_last_4.keyword",
+ "payment_id.keyword",
+ ]),
}
}
@@ -434,67 +497,35 @@ impl OpenSearchQueryBuilder {
Ok(())
}
- pub fn get_status_field(&self, index: &SearchIndex) -> &str {
+ pub fn get_status_field(&self, index: SearchIndex) -> &str {
match index {
- SearchIndex::Refunds => "refund_status.keyword",
- SearchIndex::Disputes => "dispute_status.keyword",
+ SearchIndex::Refunds | SearchIndex::SessionizerRefunds => "refund_status.keyword",
+ SearchIndex::Disputes | SearchIndex::SessionizerDisputes => "dispute_status.keyword",
_ => "status.keyword",
}
}
- pub fn replace_status_field(&self, filters: &[Value], index: &SearchIndex) -> Vec {
- filters
- .iter()
- .map(|filter| {
- if let Some(terms) = filter.get("terms").and_then(|v| v.as_object()) {
- let mut new_filter = filter.clone();
- if let Some(new_terms) =
- new_filter.get_mut("terms").and_then(|v| v.as_object_mut())
- {
- let key = "status.keyword";
- if let Some(status_terms) = terms.get(key) {
- new_terms.remove(key);
- new_terms.insert(
- self.get_status_field(index).to_string(),
- status_terms.clone(),
- );
- }
- }
- new_filter
- } else {
- filter.clone()
- }
- })
- .collect()
- }
-
- /// # Panics
- ///
- /// This function will panic if:
- ///
- /// * The structure of the JSON query is not as expected (e.g., missing keys or incorrect types).
- ///
- /// Ensure that the input data and the structure of the query are valid and correctly handled.
- pub fn construct_payload(&self, indexes: &[SearchIndex]) -> QueryResult> {
- let mut query_obj = Map::new();
- let mut bool_obj = Map::new();
+ pub fn build_filter_array(
+ &self,
+ case_sensitive_filters: Vec<&(String, Vec)>,
+ ) -> Vec {
let mut filter_array = Vec::new();
+ if !self.query.is_empty() {
+ filter_array.push(json!({
+ "multi_match": {
+ "type": "phrase",
+ "query": self.query,
+ "lenient": true
+ }
+ }));
+ }
- filter_array.push(json!({
- "multi_match": {
- "type": "phrase",
- "query": self.query,
- "lenient": true
- }
- }));
-
- let mut filters = self
- .filters
- .iter()
+ let case_sensitive_json_filters = case_sensitive_filters
+ .into_iter()
.map(|(k, v)| json!({"terms": {k: v}}))
.collect::>();
- filter_array.append(&mut filters);
+ filter_array.extend(case_sensitive_json_filters);
if let Some(ref time_range) = self.time_range {
let range = json!(time_range);
@@ -505,8 +536,72 @@ impl OpenSearchQueryBuilder {
}));
}
- let should_array = self
- .search_params
+ filter_array
+ }
+
+ pub fn build_case_insensitive_filters(
+ &self,
+ mut payload: Value,
+ case_insensitive_filters: &[&(String, Vec)],
+ auth_array: Vec,
+ index: SearchIndex,
+ ) -> Value {
+ let mut must_array = case_insensitive_filters
+ .iter()
+ .map(|(k, v)| {
+ let key = if *k == "status.keyword" {
+ self.get_status_field(index).to_string()
+ } else {
+ k.clone()
+ };
+ json!({
+ "bool": {
+ "must": [
+ {
+ "bool": {
+ "should": v.iter().map(|value| {
+ json!({
+ "term": {
+ format!("{}", key): {
+ "value": value,
+ "case_insensitive": true
+ }
+ }
+ })
+ }).collect::>(),
+ "minimum_should_match": 1
+ }
+ }
+ ]
+ }
+ })
+ })
+ .collect::>();
+
+ must_array.push(json!({ "bool": {
+ "must": [
+ {
+ "bool": {
+ "should": auth_array,
+ "minimum_should_match": 1
+ }
+ }
+ ]
+ }}));
+
+ if let Some(query) = payload.get_mut("query") {
+ if let Some(bool_obj) = query.get_mut("bool") {
+ if let Some(bool_map) = bool_obj.as_object_mut() {
+ bool_map.insert("must".to_string(), Value::Array(must_array));
+ }
+ }
+ }
+
+ payload
+ }
+
+ pub fn build_auth_array(&self) -> Vec {
+ self.search_params
.iter()
.map(|user_level| match user_level {
AuthInfo::OrgLevel { org_id } => {
@@ -525,11 +620,17 @@ impl OpenSearchQueryBuilder {
})
}
AuthInfo::MerchantLevel {
- org_id: _,
+ org_id,
merchant_ids,
} => {
let must_clauses = vec![
- // TODO: Add org_id field to the filters
+ json!({
+ "term": {
+ "organization_id.keyword": {
+ "value": org_id
+ }
+ }
+ }),
json!({
"terms": {
"merchant_id.keyword": merchant_ids
@@ -544,12 +645,18 @@ impl OpenSearchQueryBuilder {
})
}
AuthInfo::ProfileLevel {
- org_id: _,
+ org_id,
merchant_id,
profile_ids,
} => {
let must_clauses = vec![
- // TODO: Add org_id field to the filters
+ json!({
+ "term": {
+ "organization_id.keyword": {
+ "value": org_id
+ }
+ }
+ }),
json!({
"term": {
"merchant_id.keyword": {
@@ -571,55 +678,58 @@ impl OpenSearchQueryBuilder {
})
}
})
- .collect::>();
+ .collect::>()
+ }
+
+ /// # Panics
+ ///
+ /// This function will panic if:
+ ///
+ /// * The structure of the JSON query is not as expected (e.g., missing keys or incorrect types).
+ ///
+ /// Ensure that the input data and the structure of the query are valid and correctly handled.
+ pub fn construct_payload(&self, indexes: &[SearchIndex]) -> QueryResult> {
+ let mut query_obj = Map::new();
+ let mut bool_obj = Map::new();
+
+ let (case_sensitive_filters, case_insensitive_filters): (Vec<_>, Vec<_>) = self
+ .filters
+ .iter()
+ .partition(|(k, _)| self.case_sensitive_fields.contains(k.as_str()));
+
+ let filter_array = self.build_filter_array(case_sensitive_filters);
if !filter_array.is_empty() {
bool_obj.insert("filter".to_string(), Value::Array(filter_array));
}
- if !bool_obj.is_empty() {
- query_obj.insert("bool".to_string(), Value::Object(bool_obj));
- }
- let mut query = Map::new();
- query.insert("query".to_string(), Value::Object(query_obj));
+ let should_array = self.build_auth_array();
+
+ query_obj.insert("bool".to_string(), Value::Object(bool_obj));
+
+ let mut sort_obj = Map::new();
+ sort_obj.insert(
+ "@timestamp".to_string(),
+ json!({
+ "order": "desc"
+ }),
+ );
Ok(indexes
.iter()
.map(|index| {
- let updated_query = query
- .get("query")
- .and_then(|q| q.get("bool"))
- .and_then(|b| b.get("filter"))
- .and_then(|f| f.as_array())
- .map(|filters| self.replace_status_field(filters, index))
- .unwrap_or_default();
- let mut final_bool_obj = Map::new();
- if !updated_query.is_empty() {
- final_bool_obj.insert("filter".to_string(), Value::Array(updated_query));
- }
- if !should_array.is_empty() {
- final_bool_obj.insert("should".to_string(), Value::Array(should_array.clone()));
- final_bool_obj
- .insert("minimum_should_match".to_string(), Value::Number(1.into()));
- }
- let mut final_query = Map::new();
- if !final_bool_obj.is_empty() {
- final_query.insert("bool".to_string(), Value::Object(final_bool_obj));
- }
-
- let mut sort_obj = Map::new();
- sort_obj.insert(
- "@timestamp".to_string(),
- json!({
- "order": "desc"
- }),
- );
- let payload = json!({
- "query": Value::Object(final_query),
+ let mut payload = json!({
+ "query": query_obj.clone(),
"sort": [
- Value::Object(sort_obj)
+ Value::Object(sort_obj.clone())
]
});
+ payload = self.build_case_insensitive_filters(
+ payload,
+ &case_insensitive_filters,
+ should_array.clone(),
+ *index,
+ );
payload
})
.collect::>())
diff --git a/crates/analytics/src/payment_intents.rs b/crates/analytics/src/payment_intents.rs
index 449dd94788c3..809be1b20a1f 100644
--- a/crates/analytics/src/payment_intents.rs
+++ b/crates/analytics/src/payment_intents.rs
@@ -2,6 +2,7 @@ pub mod accumulator;
mod core;
pub mod filters;
pub mod metrics;
+pub mod sankey;
pub mod types;
pub use accumulator::{PaymentIntentMetricAccumulator, PaymentIntentMetricsAccumulator};
@@ -10,4 +11,4 @@ pub trait PaymentIntentAnalytics:
{
}
-pub use self::core::{get_filters, get_metrics};
+pub use self::core::{get_filters, get_metrics, get_sankey};
diff --git a/crates/analytics/src/payment_intents/accumulator.rs b/crates/analytics/src/payment_intents/accumulator.rs
index 8fd98a1e73cc..d8f27501b567 100644
--- a/crates/analytics/src/payment_intents/accumulator.rs
+++ b/crates/analytics/src/payment_intents/accumulator.rs
@@ -1,5 +1,6 @@
use api_models::analytics::payment_intents::PaymentIntentMetricsBucketValue;
use bigdecimal::ToPrimitive;
+use diesel_models::enums as storage_enums;
use super::metrics::PaymentIntentMetricRow;
@@ -7,8 +8,11 @@ use super::metrics::PaymentIntentMetricRow;
pub struct PaymentIntentMetricsAccumulator {
pub successful_smart_retries: CountAccumulator,
pub total_smart_retries: CountAccumulator,
- pub smart_retried_amount: SumAccumulator,
+ pub smart_retried_amount: SmartRetriedAmountAccumulator,
pub payment_intent_count: CountAccumulator,
+ pub payments_success_rate: PaymentsSuccessRateAccumulator,
+ pub payment_processed_amount: ProcessedAmountAccumulator,
+ pub payments_distribution: PaymentsDistributionAccumulator,
}
#[derive(Debug, Default)]
@@ -38,9 +42,31 @@ pub trait PaymentIntentMetricAccumulator {
}
#[derive(Debug, Default)]
-#[repr(transparent)]
-pub struct SumAccumulator {
- pub total: Option,
+pub struct SmartRetriedAmountAccumulator {
+ pub amount: Option,
+ pub amount_without_retries: Option,
+}
+
+#[derive(Debug, Default)]
+pub struct PaymentsSuccessRateAccumulator {
+ pub success: u32,
+ pub success_without_retries: u32,
+ pub total: u32,
+}
+
+#[derive(Debug, Default)]
+pub struct ProcessedAmountAccumulator {
+ pub count_with_retries: Option,
+ pub total_with_retries: Option,
+ pub count_without_retries: Option,
+ pub total_without_retries: Option,
+}
+
+#[derive(Debug, Default)]
+pub struct PaymentsDistributionAccumulator {
+ pub success_without_retries: u32,
+ pub failed_without_retries: u32,
+ pub total: u32,
}
impl PaymentIntentMetricAccumulator for CountAccumulator {
@@ -59,32 +85,276 @@ impl PaymentIntentMetricAccumulator for CountAccumulator {
}
}
-impl PaymentIntentMetricAccumulator for SumAccumulator {
- type MetricOutput = Option;
+impl PaymentIntentMetricAccumulator for SmartRetriedAmountAccumulator {
+ type MetricOutput = (Option, Option, Option, Option);
#[inline]
fn add_metrics_bucket(&mut self, metrics: &PaymentIntentMetricRow) {
- self.total = match (
- self.total,
+ self.amount = match (
+ self.amount,
metrics.total.as_ref().and_then(ToPrimitive::to_i64),
) {
(None, None) => None,
(None, i @ Some(_)) | (i @ Some(_), None) => i,
(Some(a), Some(b)) => Some(a + b),
+ };
+ if metrics.first_attempt.unwrap_or(0) == 1 {
+ self.amount_without_retries = match (
+ self.amount_without_retries,
+ metrics.total.as_ref().and_then(ToPrimitive::to_i64),
+ ) {
+ (None, None) => None,
+ (None, i @ Some(_)) | (i @ Some(_), None) => i,
+ (Some(a), Some(b)) => Some(a + b),
+ }
+ } else {
+ self.amount_without_retries = Some(0);
}
}
#[inline]
fn collect(self) -> Self::MetricOutput {
- self.total.and_then(|i| u64::try_from(i).ok())
+ let with_retries = self.amount.and_then(|i| u64::try_from(i).ok()).or(Some(0));
+ let without_retries = self
+ .amount_without_retries
+ .and_then(|i| u64::try_from(i).ok())
+ .or(Some(0));
+ (with_retries, without_retries, Some(0), Some(0))
+ }
+}
+
+impl PaymentIntentMetricAccumulator for PaymentsSuccessRateAccumulator {
+ type MetricOutput = (
+ Option,
+ Option,
+ Option,
+ Option,
+ Option,
+ );
+
+ fn add_metrics_bucket(&mut self, metrics: &PaymentIntentMetricRow) {
+ if let Some(ref status) = metrics.status {
+ if status.as_ref() == &storage_enums::IntentStatus::Succeeded {
+ if let Some(success) = metrics
+ .count
+ .and_then(|success| u32::try_from(success).ok())
+ {
+ self.success += success;
+ if metrics.first_attempt.unwrap_or(0) == 1 {
+ self.success_without_retries += success;
+ }
+ }
+ }
+ if status.as_ref() != &storage_enums::IntentStatus::RequiresCustomerAction
+ && status.as_ref() != &storage_enums::IntentStatus::RequiresPaymentMethod
+ && status.as_ref() != &storage_enums::IntentStatus::RequiresMerchantAction
+ && status.as_ref() != &storage_enums::IntentStatus::RequiresConfirmation
+ {
+ if let Some(total) = metrics.count.and_then(|total| u32::try_from(total).ok()) {
+ self.total += total;
+ }
+ }
+ }
+ }
+
+ fn collect(self) -> Self::MetricOutput {
+ if self.total == 0 {
+ (None, None, None, None, None)
+ } else {
+ let success = Some(self.success);
+ let success_without_retries = Some(self.success_without_retries);
+ let total = Some(self.total);
+
+ let success_rate = match (success, total) {
+ (Some(s), Some(t)) if t > 0 => Some(f64::from(s) * 100.0 / f64::from(t)),
+ _ => None,
+ };
+
+ let success_without_retries_rate = match (success_without_retries, total) {
+ (Some(s), Some(t)) if t > 0 => Some(f64::from(s) * 100.0 / f64::from(t)),
+ _ => None,
+ };
+
+ (
+ success,
+ success_without_retries,
+ total,
+ success_rate,
+ success_without_retries_rate,
+ )
+ }
+ }
+}
+
+impl PaymentIntentMetricAccumulator for ProcessedAmountAccumulator {
+ type MetricOutput = (
+ Option,
+ Option,
+ Option,
+ Option,
+ Option,
+ Option,
+ );
+ #[inline]
+ fn add_metrics_bucket(&mut self, metrics: &PaymentIntentMetricRow) {
+ self.total_with_retries = match (
+ self.total_with_retries,
+ metrics.total.as_ref().and_then(ToPrimitive::to_i64),
+ ) {
+ (None, None) => None,
+ (None, i @ Some(_)) | (i @ Some(_), None) => i,
+ (Some(a), Some(b)) => Some(a + b),
+ };
+
+ self.count_with_retries = match (self.count_with_retries, metrics.count) {
+ (None, None) => None,
+ (None, i @ Some(_)) | (i @ Some(_), None) => i,
+ (Some(a), Some(b)) => Some(a + b),
+ };
+
+ if metrics.first_attempt.unwrap_or(0) == 1 {
+ self.total_without_retries = match (
+ self.total_without_retries,
+ metrics.total.as_ref().and_then(ToPrimitive::to_i64),
+ ) {
+ (None, None) => None,
+ (None, i @ Some(_)) | (i @ Some(_), None) => i,
+ (Some(a), Some(b)) => Some(a + b),
+ };
+
+ self.count_without_retries = match (self.count_without_retries, metrics.count) {
+ (None, None) => None,
+ (None, i @ Some(_)) | (i @ Some(_), None) => i,
+ (Some(a), Some(b)) => Some(a + b),
+ };
+ }
+ }
+ #[inline]
+ fn collect(self) -> Self::MetricOutput {
+ let total_with_retries = u64::try_from(self.total_with_retries.unwrap_or(0)).ok();
+ let count_with_retries = self.count_with_retries.and_then(|i| u64::try_from(i).ok());
+
+ let total_without_retries = u64::try_from(self.total_without_retries.unwrap_or(0)).ok();
+ let count_without_retries = self
+ .count_without_retries
+ .and_then(|i| u64::try_from(i).ok());
+
+ (
+ total_with_retries,
+ count_with_retries,
+ total_without_retries,
+ count_without_retries,
+ Some(0),
+ Some(0),
+ )
+ }
+}
+
+impl PaymentIntentMetricAccumulator for PaymentsDistributionAccumulator {
+ type MetricOutput = (Option, Option);
+
+ fn add_metrics_bucket(&mut self, metrics: &PaymentIntentMetricRow) {
+ let first_attempt = metrics.first_attempt.unwrap_or(0);
+ if let Some(ref status) = metrics.status {
+ if status.as_ref() == &storage_enums::IntentStatus::Succeeded {
+ if let Some(success) = metrics
+ .count
+ .and_then(|success| u32::try_from(success).ok())
+ {
+ if first_attempt == 1 {
+ self.success_without_retries += success;
+ }
+ }
+ }
+ if let Some(failed) = metrics.count.and_then(|failed| u32::try_from(failed).ok()) {
+ if first_attempt == 0
+ || (first_attempt == 1
+ && status.as_ref() == &storage_enums::IntentStatus::Failed)
+ {
+ self.failed_without_retries += failed;
+ }
+ }
+
+ if status.as_ref() != &storage_enums::IntentStatus::RequiresCustomerAction
+ && status.as_ref() != &storage_enums::IntentStatus::RequiresPaymentMethod
+ && status.as_ref() != &storage_enums::IntentStatus::RequiresMerchantAction
+ && status.as_ref() != &storage_enums::IntentStatus::RequiresConfirmation
+ {
+ if let Some(total) = metrics.count.and_then(|total| u32::try_from(total).ok()) {
+ self.total += total;
+ }
+ }
+ }
+ }
+
+ fn collect(self) -> Self::MetricOutput {
+ if self.total == 0 {
+ (None, None)
+ } else {
+ let success_without_retries = Some(self.success_without_retries);
+ let failed_without_retries = Some(self.failed_without_retries);
+ let total = Some(self.total);
+
+ let success_rate_without_retries = match (success_without_retries, total) {
+ (Some(s), Some(t)) if t > 0 => Some(f64::from(s) * 100.0 / f64::from(t)),
+ _ => None,
+ };
+
+ let failed_rate_without_retries = match (failed_without_retries, total) {
+ (Some(s), Some(t)) if t > 0 => Some(f64::from(s) * 100.0 / f64::from(t)),
+ _ => None,
+ };
+ (success_rate_without_retries, failed_rate_without_retries)
+ }
}
}
impl PaymentIntentMetricsAccumulator {
pub fn collect(self) -> PaymentIntentMetricsBucketValue {
+ let (
+ successful_payments,
+ successful_payments_without_smart_retries,
+ total_payments,
+ payments_success_rate,
+ payments_success_rate_without_smart_retries,
+ ) = self.payments_success_rate.collect();
+ let (
+ smart_retried_amount,
+ smart_retried_amount_without_smart_retries,
+ smart_retried_amount_in_usd,
+ smart_retried_amount_without_smart_retries_in_usd,
+ ) = self.smart_retried_amount.collect();
+ let (
+ payment_processed_amount,
+ payment_processed_count,
+ payment_processed_amount_without_smart_retries,
+ payment_processed_count_without_smart_retries,
+ payment_processed_amount_in_usd,
+ payment_processed_amount_without_smart_retries_in_usd,
+ ) = self.payment_processed_amount.collect();
+ let (
+ payments_success_rate_distribution_without_smart_retries,
+ payments_failure_rate_distribution_without_smart_retries,
+ ) = self.payments_distribution.collect();
PaymentIntentMetricsBucketValue {
successful_smart_retries: self.successful_smart_retries.collect(),
total_smart_retries: self.total_smart_retries.collect(),
- smart_retried_amount: self.smart_retried_amount.collect(),
+ smart_retried_amount,
+ smart_retried_amount_in_usd,
+ smart_retried_amount_without_smart_retries,
+ smart_retried_amount_without_smart_retries_in_usd,
payment_intent_count: self.payment_intent_count.collect(),
+ successful_payments,
+ successful_payments_without_smart_retries,
+ total_payments,
+ payments_success_rate,
+ payments_success_rate_without_smart_retries,
+ payment_processed_amount,
+ payment_processed_count,
+ payment_processed_amount_without_smart_retries,
+ payment_processed_count_without_smart_retries,
+ payments_success_rate_distribution_without_smart_retries,
+ payments_failure_rate_distribution_without_smart_retries,
+ payment_processed_amount_in_usd,
+ payment_processed_amount_without_smart_retries_in_usd,
}
}
}
diff --git a/crates/analytics/src/payment_intents/core.rs b/crates/analytics/src/payment_intents/core.rs
index f8a5c48986ab..0a512c419ec0 100644
--- a/crates/analytics/src/payment_intents/core.rs
+++ b/crates/analytics/src/payment_intents/core.rs
@@ -6,20 +6,23 @@ use api_models::analytics::{
MetricsBucketResponse, PaymentIntentDimensions, PaymentIntentMetrics,
PaymentIntentMetricsBucketIdentifier,
},
- AnalyticsMetadata, GetPaymentIntentFiltersRequest, GetPaymentIntentMetricRequest,
- MetricsResponse, PaymentIntentFilterValue, PaymentIntentFiltersResponse,
+ GetPaymentIntentFiltersRequest, GetPaymentIntentMetricRequest, PaymentIntentFilterValue,
+ PaymentIntentFiltersResponse, PaymentIntentsAnalyticsMetadata, PaymentIntentsMetricsResponse,
};
-use common_utils::errors::CustomResult;
+use bigdecimal::ToPrimitive;
+use common_enums::Currency;
+use common_utils::{errors::CustomResult, types::TimeRange};
+use currency_conversion::{conversion::convert, types::ExchangeRates};
use error_stack::ResultExt;
use router_env::{
instrument, logger,
- metrics::add_attributes,
tracing::{self, Instrument},
};
use super::{
filters::{get_payment_intent_filter_for_dimension, PaymentIntentFilterRow},
metrics::PaymentIntentMetricRow,
+ sankey::{get_sankey_data, SankeyRow},
PaymentIntentMetricsAccumulator,
};
use crate::{
@@ -41,12 +44,34 @@ pub enum TaskType {
),
}
+#[instrument(skip_all)]
+pub async fn get_sankey(
+ pool: &AnalyticsProvider,
+ auth: &AuthInfo,
+ req: TimeRange,
+) -> AnalyticsResult> {
+ match pool {
+ AnalyticsProvider::Sqlx(_) => Err(AnalyticsError::NotImplemented(
+ "Sankey not implemented for sqlx",
+ ))?,
+ AnalyticsProvider::Clickhouse(ckh_pool)
+ | AnalyticsProvider::CombinedCkh(_, ckh_pool)
+ | AnalyticsProvider::CombinedSqlx(_, ckh_pool) => {
+ let sankey_rows = get_sankey_data(ckh_pool, auth, &req)
+ .await
+ .change_context(AnalyticsError::UnknownError)?;
+ Ok(sankey_rows)
+ }
+ }
+}
+
#[instrument(skip_all)]
pub async fn get_metrics(
pool: &AnalyticsProvider,
+ ex_rates: &Option,
auth: &AuthInfo,
req: GetPaymentIntentMetricRequest,
-) -> AnalyticsResult> {
+) -> AnalyticsResult> {
let mut metrics_accumulator: HashMap<
PaymentIntentMetricsBucketIdentifier,
PaymentIntentMetricsAccumulator,
@@ -72,7 +97,7 @@ pub async fn get_metrics(
&req.group_by_names.clone(),
&auth_scoped,
&req.filters,
- &req.time_series.map(|t| t.granularity),
+ req.time_series.map(|t| t.granularity),
&req.time_range,
)
.await
@@ -92,14 +117,14 @@ pub async fn get_metrics(
match task_type {
TaskType::MetricTask(metric, data) => {
let data = data?;
- let attributes = &add_attributes([
+ let attributes = router_env::metric_attributes!(
("metric_type", metric.to_string()),
("source", pool.to_string()),
- ]);
+ );
let value = u64::try_from(data.len());
if let Ok(val) = value {
- metrics::BUCKETS_FETCHED.record(&metrics::CONTEXT, val, attributes);
+ metrics::BUCKETS_FETCHED.record(val, attributes);
logger::debug!("Attributes: {:?}, Buckets fetched: {}", attributes, val);
}
@@ -107,18 +132,35 @@ pub async fn get_metrics(
logger::debug!(bucket_id=?id, bucket_value=?value, "Bucket row for metric {metric}");
let metrics_builder = metrics_accumulator.entry(id).or_default();
match metric {
- PaymentIntentMetrics::SuccessfulSmartRetries => metrics_builder
- .successful_smart_retries
- .add_metrics_bucket(&value),
- PaymentIntentMetrics::TotalSmartRetries => metrics_builder
+ PaymentIntentMetrics::SuccessfulSmartRetries
+ | PaymentIntentMetrics::SessionizedSuccessfulSmartRetries => {
+ metrics_builder
+ .successful_smart_retries
+ .add_metrics_bucket(&value)
+ }
+ PaymentIntentMetrics::TotalSmartRetries
+ | PaymentIntentMetrics::SessionizedTotalSmartRetries => metrics_builder
.total_smart_retries
.add_metrics_bucket(&value),
- PaymentIntentMetrics::SmartRetriedAmount => metrics_builder
+ PaymentIntentMetrics::SmartRetriedAmount
+ | PaymentIntentMetrics::SessionizedSmartRetriedAmount => metrics_builder
.smart_retried_amount
.add_metrics_bucket(&value),
- PaymentIntentMetrics::PaymentIntentCount => metrics_builder
+ PaymentIntentMetrics::PaymentIntentCount
+ | PaymentIntentMetrics::SessionizedPaymentIntentCount => metrics_builder
.payment_intent_count
.add_metrics_bucket(&value),
+ PaymentIntentMetrics::PaymentsSuccessRate
+ | PaymentIntentMetrics::SessionizedPaymentsSuccessRate => metrics_builder
+ .payments_success_rate
+ .add_metrics_bucket(&value),
+ PaymentIntentMetrics::SessionizedPaymentProcessedAmount
+ | PaymentIntentMetrics::PaymentProcessedAmount => metrics_builder
+ .payment_processed_amount
+ .add_metrics_bucket(&value),
+ PaymentIntentMetrics::SessionizedPaymentsDistribution => metrics_builder
+ .payments_distribution
+ .add_metrics_bucket(&value),
}
}
@@ -131,18 +173,191 @@ pub async fn get_metrics(
}
}
+ let mut success = 0;
+ let mut success_without_smart_retries = 0;
+ let mut total_smart_retried_amount = 0;
+ let mut total_smart_retried_amount_in_usd = 0;
+ let mut total_smart_retried_amount_without_smart_retries = 0;
+ let mut total_smart_retried_amount_without_smart_retries_in_usd = 0;
+ let mut total = 0;
+ let mut total_payment_processed_amount = 0;
+ let mut total_payment_processed_amount_in_usd = 0;
+ let mut total_payment_processed_count = 0;
+ let mut total_payment_processed_amount_without_smart_retries = 0;
+ let mut total_payment_processed_amount_without_smart_retries_in_usd = 0;
+ let mut total_payment_processed_count_without_smart_retries = 0;
let query_data: Vec = metrics_accumulator
.into_iter()
- .map(|(id, val)| MetricsBucketResponse {
- values: val.collect(),
- dimensions: id,
+ .map(|(id, val)| {
+ let mut collected_values = val.collect();
+ if let Some(success_count) = collected_values.successful_payments {
+ success += success_count;
+ }
+ if let Some(success_count) = collected_values.successful_payments_without_smart_retries
+ {
+ success_without_smart_retries += success_count;
+ }
+ if let Some(total_count) = collected_values.total_payments {
+ total += total_count;
+ }
+ if let Some(retried_amount) = collected_values.smart_retried_amount {
+ let amount_in_usd = if let Some(ex_rates) = ex_rates {
+ id.currency
+ .and_then(|currency| {
+ i64::try_from(retried_amount)
+ .inspect_err(|e| logger::error!("Amount conversion error: {:?}", e))
+ .ok()
+ .and_then(|amount_i64| {
+ convert(ex_rates, currency, Currency::USD, amount_i64)
+ .inspect_err(|e| {
+ logger::error!("Currency conversion error: {:?}", e)
+ })
+ .ok()
+ })
+ })
+ .map(|amount| (amount * rust_decimal::Decimal::new(100, 0)).to_u64())
+ .unwrap_or_default()
+ } else {
+ None
+ };
+ collected_values.smart_retried_amount_in_usd = amount_in_usd;
+ total_smart_retried_amount += retried_amount;
+ total_smart_retried_amount_in_usd += amount_in_usd.unwrap_or(0);
+ }
+ if let Some(retried_amount) =
+ collected_values.smart_retried_amount_without_smart_retries
+ {
+ let amount_in_usd = if let Some(ex_rates) = ex_rates {
+ id.currency
+ .and_then(|currency| {
+ i64::try_from(retried_amount)
+ .inspect_err(|e| logger::error!("Amount conversion error: {:?}", e))
+ .ok()
+ .and_then(|amount_i64| {
+ convert(ex_rates, currency, Currency::USD, amount_i64)
+ .inspect_err(|e| {
+ logger::error!("Currency conversion error: {:?}", e)
+ })
+ .ok()
+ })
+ })
+ .map(|amount| (amount * rust_decimal::Decimal::new(100, 0)).to_u64())
+ .unwrap_or_default()
+ } else {
+ None
+ };
+ collected_values.smart_retried_amount_without_smart_retries_in_usd = amount_in_usd;
+ total_smart_retried_amount_without_smart_retries += retried_amount;
+ total_smart_retried_amount_without_smart_retries_in_usd +=
+ amount_in_usd.unwrap_or(0);
+ }
+ if let Some(amount) = collected_values.payment_processed_amount {
+ let amount_in_usd = if let Some(ex_rates) = ex_rates {
+ id.currency
+ .and_then(|currency| {
+ i64::try_from(amount)
+ .inspect_err(|e| logger::error!("Amount conversion error: {:?}", e))
+ .ok()
+ .and_then(|amount_i64| {
+ convert(ex_rates, currency, Currency::USD, amount_i64)
+ .inspect_err(|e| {
+ logger::error!("Currency conversion error: {:?}", e)
+ })
+ .ok()
+ })
+ })
+ .map(|amount| (amount * rust_decimal::Decimal::new(100, 0)).to_u64())
+ .unwrap_or_default()
+ } else {
+ None
+ };
+ collected_values.payment_processed_amount_in_usd = amount_in_usd;
+ total_payment_processed_amount_in_usd += amount_in_usd.unwrap_or(0);
+ total_payment_processed_amount += amount;
+ }
+ if let Some(count) = collected_values.payment_processed_count {
+ total_payment_processed_count += count;
+ }
+ if let Some(amount) = collected_values.payment_processed_amount_without_smart_retries {
+ let amount_in_usd = if let Some(ex_rates) = ex_rates {
+ id.currency
+ .and_then(|currency| {
+ i64::try_from(amount)
+ .inspect_err(|e| logger::error!("Amount conversion error: {:?}", e))
+ .ok()
+ .and_then(|amount_i64| {
+ convert(ex_rates, currency, Currency::USD, amount_i64)
+ .inspect_err(|e| {
+ logger::error!("Currency conversion error: {:?}", e)
+ })
+ .ok()
+ })
+ })
+ .map(|amount| (amount * rust_decimal::Decimal::new(100, 0)).to_u64())
+ .unwrap_or_default()
+ } else {
+ None
+ };
+ collected_values.payment_processed_amount_without_smart_retries_in_usd =
+ amount_in_usd;
+ total_payment_processed_amount_without_smart_retries_in_usd +=
+ amount_in_usd.unwrap_or(0);
+ total_payment_processed_amount_without_smart_retries += amount;
+ }
+ if let Some(count) = collected_values.payment_processed_count_without_smart_retries {
+ total_payment_processed_count_without_smart_retries += count;
+ }
+ MetricsBucketResponse {
+ values: collected_values,
+ dimensions: id,
+ }
})
.collect();
-
- Ok(MetricsResponse {
+ let total_success_rate = match (success, total) {
+ (s, t) if t > 0 => Some(f64::from(s) * 100.0 / f64::from(t)),
+ _ => None,
+ };
+ let total_success_rate_without_smart_retries = match (success_without_smart_retries, total) {
+ (s, t) if t > 0 => Some(f64::from(s) * 100.0 / f64::from(t)),
+ _ => None,
+ };
+ Ok(PaymentIntentsMetricsResponse {
query_data,
- meta_data: [AnalyticsMetadata {
- current_time_range: req.time_range,
+ meta_data: [PaymentIntentsAnalyticsMetadata {
+ total_success_rate,
+ total_success_rate_without_smart_retries,
+ total_smart_retried_amount: Some(total_smart_retried_amount),
+ total_smart_retried_amount_without_smart_retries: Some(
+ total_smart_retried_amount_without_smart_retries,
+ ),
+ total_payment_processed_amount: Some(total_payment_processed_amount),
+ total_payment_processed_amount_without_smart_retries: Some(
+ total_payment_processed_amount_without_smart_retries,
+ ),
+ total_smart_retried_amount_in_usd: if ex_rates.is_some() {
+ Some(total_smart_retried_amount_in_usd)
+ } else {
+ None
+ },
+ total_smart_retried_amount_without_smart_retries_in_usd: if ex_rates.is_some() {
+ Some(total_smart_retried_amount_without_smart_retries_in_usd)
+ } else {
+ None
+ },
+ total_payment_processed_amount_in_usd: if ex_rates.is_some() {
+ Some(total_payment_processed_amount_in_usd)
+ } else {
+ None
+ },
+ total_payment_processed_amount_without_smart_retries_in_usd: if ex_rates.is_some() {
+ Some(total_payment_processed_amount_without_smart_retries_in_usd)
+ } else {
+ None
+ },
+ total_payment_processed_count: Some(total_payment_processed_count),
+ total_payment_processed_count_without_smart_retries: Some(
+ total_payment_processed_count_without_smart_retries,
+ ),
}],
})
}
@@ -217,6 +432,15 @@ pub async fn get_filters(
PaymentIntentDimensions::PaymentIntentStatus => fil.status.map(|i| i.as_ref().to_string()),
PaymentIntentDimensions::Currency => fil.currency.map(|i| i.as_ref().to_string()),
PaymentIntentDimensions::ProfileId => fil.profile_id,
+ PaymentIntentDimensions::Connector => fil.connector,
+ PaymentIntentDimensions::AuthType => fil.authentication_type.map(|i| i.as_ref().to_string()),
+ PaymentIntentDimensions::PaymentMethod => fil.payment_method,
+ PaymentIntentDimensions::PaymentMethodType => fil.payment_method_type,
+ PaymentIntentDimensions::CardNetwork => fil.card_network,
+ PaymentIntentDimensions::MerchantId => fil.merchant_id,
+ PaymentIntentDimensions::CardLast4 => fil.card_last_4,
+ PaymentIntentDimensions::CardIssuer => fil.card_issuer,
+ PaymentIntentDimensions::ErrorReason => fil.error_reason,
})
.collect::>();
res.query_data.push(PaymentIntentFilterValue {
diff --git a/crates/analytics/src/payment_intents/filters.rs b/crates/analytics/src/payment_intents/filters.rs
index e81b050214c5..1468a67570aa 100644
--- a/crates/analytics/src/payment_intents/filters.rs
+++ b/crates/analytics/src/payment_intents/filters.rs
@@ -1,6 +1,6 @@
use api_models::analytics::{payment_intents::PaymentIntentDimensions, Granularity, TimeRange};
use common_utils::errors::ReportSwitchExt;
-use diesel_models::enums::{Currency, IntentStatus};
+use diesel_models::enums::{AuthenticationType, Currency, IntentStatus};
use error_stack::ResultExt;
use time::PrimitiveDateTime;
@@ -54,4 +54,14 @@ pub struct PaymentIntentFilterRow {
pub status: Option>,
pub currency: Option>,
pub profile_id: Option,
+ pub connector: Option,
+ pub authentication_type: Option>,
+ pub payment_method: Option,
+ pub payment_method_type: Option,
+ pub card_network: Option,
+ pub merchant_id: Option,
+ pub card_last_4: Option,
+ pub card_issuer: Option,
+ pub error_reason: Option,
+ pub customer_id: Option,
}
diff --git a/crates/analytics/src/payment_intents/metrics.rs b/crates/analytics/src/payment_intents/metrics.rs
index f27a02368aec..c063b3a7c044 100644
--- a/crates/analytics/src/payment_intents/metrics.rs
+++ b/crates/analytics/src/payment_intents/metrics.rs
@@ -17,11 +17,16 @@ use crate::{
};
mod payment_intent_count;
+mod payment_processed_amount;
+mod payments_success_rate;
+mod sessionized_metrics;
mod smart_retried_amount;
mod successful_smart_retries;
mod total_smart_retries;
use payment_intent_count::PaymentIntentCount;
+use payment_processed_amount::PaymentProcessedAmount;
+use payments_success_rate::PaymentsSuccessRate;
use smart_retried_amount::SmartRetriedAmount;
use successful_smart_retries::SuccessfulSmartRetries;
use total_smart_retries::TotalSmartRetries;
@@ -31,6 +36,16 @@ pub struct PaymentIntentMetricRow {
pub status: Option>,
pub currency: Option>,
pub profile_id: Option,
+ pub connector: Option,
+ pub authentication_type: Option>,
+ pub payment_method: Option,
+ pub payment_method_type: Option,
+ pub card_network: Option,
+ pub merchant_id: Option,
+ pub card_last_4: Option,
+ pub card_issuer: Option,
+ pub error_reason: Option,
+ pub first_attempt: Option,
pub total: Option,
pub count: Option,
#[serde(with = "common_utils::custom_serde::iso8601::option")]
@@ -51,7 +66,7 @@ where
dimensions: &[PaymentIntentDimensions],
auth: &AuthInfo,
filters: &PaymentIntentFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult>;
@@ -72,7 +87,7 @@ where
dimensions: &[PaymentIntentDimensions],
auth: &AuthInfo,
filters: &PaymentIntentFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult>
@@ -98,6 +113,51 @@ where
.load_metrics(dimensions, auth, filters, granularity, time_range, pool)
.await
}
+ Self::PaymentsSuccessRate => {
+ PaymentsSuccessRate
+ .load_metrics(dimensions, auth, filters, granularity, time_range, pool)
+ .await
+ }
+ Self::PaymentProcessedAmount => {
+ PaymentProcessedAmount
+ .load_metrics(dimensions, auth, filters, granularity, time_range, pool)
+ .await
+ }
+ Self::SessionizedSuccessfulSmartRetries => {
+ sessionized_metrics::SuccessfulSmartRetries
+ .load_metrics(dimensions, auth, filters, granularity, time_range, pool)
+ .await
+ }
+ Self::SessionizedTotalSmartRetries => {
+ sessionized_metrics::TotalSmartRetries
+ .load_metrics(dimensions, auth, filters, granularity, time_range, pool)
+ .await
+ }
+ Self::SessionizedSmartRetriedAmount => {
+ sessionized_metrics::SmartRetriedAmount
+ .load_metrics(dimensions, auth, filters, granularity, time_range, pool)
+ .await
+ }
+ Self::SessionizedPaymentIntentCount => {
+ sessionized_metrics::PaymentIntentCount
+ .load_metrics(dimensions, auth, filters, granularity, time_range, pool)
+ .await
+ }
+ Self::SessionizedPaymentsSuccessRate => {
+ sessionized_metrics::PaymentsSuccessRate
+ .load_metrics(dimensions, auth, filters, granularity, time_range, pool)
+ .await
+ }
+ Self::SessionizedPaymentProcessedAmount => {
+ sessionized_metrics::PaymentProcessedAmount
+ .load_metrics(dimensions, auth, filters, granularity, time_range, pool)
+ .await
+ }
+ Self::SessionizedPaymentsDistribution => {
+ sessionized_metrics::PaymentsDistribution
+ .load_metrics(dimensions, auth, filters, granularity, time_range, pool)
+ .await
+ }
}
}
}
diff --git a/crates/analytics/src/payment_intents/metrics/payment_intent_count.rs b/crates/analytics/src/payment_intents/metrics/payment_intent_count.rs
index 4632cbe9f370..424901ca7e41 100644
--- a/crates/analytics/src/payment_intents/metrics/payment_intent_count.rs
+++ b/crates/analytics/src/payment_intents/metrics/payment_intent_count.rs
@@ -35,7 +35,7 @@ where
dimensions: &[PaymentIntentDimensions],
auth: &AuthInfo,
filters: &PaymentIntentFilters,
- granularity: &Option,
+ granularity: Option,
time_range: &TimeRange,
pool: &T,
) -> MetricsResult>
@@ -82,7 +82,7 @@ where
.switch()?;
}
- if let Some(granularity) = granularity.as_ref() {
+ if let Some(granularity) = granularity {
granularity
.set_group_by_clause(&mut query_builder)
.attach_printable("Error adding granularity")
@@ -101,6 +101,15 @@ where
i.status.as_ref().map(|i| i.0),
i.currency.as_ref().map(|i| i.0),
i.profile_id.clone(),
+ i.connector.clone(),
+ i.authentication_type.as_ref().map(|i| i.0),
+ i.payment_method.clone(),
+ i.payment_method_type.clone(),
+ i.card_network.clone(),
+ i.merchant_id.clone(),
+ i.card_last_4.clone(),
+ i.card_issuer.clone(),
+ i.error_reason.clone(),
TimeRange {
start_time: match (granularity, i.start_bucket) {
(Some(g), Some(st)) => g.clip_to_start(st)?,
diff --git a/crates/analytics/src/payment_intents/metrics/payment_processed_amount.rs b/crates/analytics/src/payment_intents/metrics/payment_processed_amount.rs
new file mode 100644
index 000000000000..d913bfe9a344
--- /dev/null
+++ b/crates/analytics/src/payment_intents/metrics/payment_processed_amount.rs
@@ -0,0 +1,161 @@
+use std::collections::HashSet;
+
+use api_models::analytics::{
+ payment_intents::{
+ PaymentIntentDimensions, PaymentIntentFilters, PaymentIntentMetricsBucketIdentifier,
+ },
+ Granularity, TimeRange,
+};
+use common_utils::errors::ReportSwitchExt;
+use diesel_models::enums as storage_enums;
+use error_stack::ResultExt;
+use time::PrimitiveDateTime;
+
+use super::PaymentIntentMetricRow;
+use crate::{
+ enums::AuthInfo,
+ query::{Aggregate, GroupByClause, QueryBuilder, QueryFilter, SeriesBucket, ToSql, Window},
+ types::{AnalyticsCollection, AnalyticsDataSource, MetricsError, MetricsResult},
+};
+
+#[derive(Default)]
+pub(super) struct PaymentProcessedAmount;
+
+#[async_trait::async_trait]
+impl super::PaymentIntentMetric for PaymentProcessedAmount
+where
+ T: AnalyticsDataSource + super::PaymentIntentMetricAnalytics,
+ PrimitiveDateTime: ToSql,
+ AnalyticsCollection: ToSql,
+ Granularity: GroupByClause,
+ Aggregate<&'static str>: ToSql