Bug: [FEATURE] Create a new workflow to validate the generated openAPI spec file (generated.json)



### Feature Description

There should be a check for validating the `generated.json` file whenever a change is pushed in the codebase.

### Possible Implementation

We can configure a new workflow via **GitHub Actions** to automate the mentioned test.

### Have you spent some time to check if this feature request has been raised before?

- [X] I checked and didn't find similar issue

### Have you read the Contributing Guidelines?

- [X] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

Yes I am willing to submit a PR!
diff --git a/Cargo.lock b/Cargo.lock
index 3690b937999..50173a250e5 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -11,7 +11,7 @@ dependencies = [
  "actix-rt",
  "actix_derive",
  "bitflags 1.3.2",
- "bytes",
+ "bytes 1.4.0",
  "crossbeam-channel",
  "futures-core",
  "futures-sink",
@@ -20,10 +20,10 @@ dependencies = [
  "log",
  "once_cell",
  "parking_lot",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "smallvec",
- "tokio",
- "tokio-util",
+ "tokio 1.28.2",
+ "tokio-util 0.7.8",
 ]
 
 [[package]]
@@ -33,14 +33,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "57a7559404a7f3573127aab53c08ce37a6c6a315c374a31070f3c91cd1b4a7fe"
 dependencies = [
  "bitflags 1.3.2",
- "bytes",
+ "bytes 1.4.0",
  "futures-core",
  "futures-sink",
  "log",
  "memchr",
- "pin-project-lite",
- "tokio",
- "tokio-util",
+ "pin-project-lite 0.2.9",
+ "tokio 1.28.2",
+ "tokio-util 0.7.8",
 ]
 
 [[package]]
@@ -72,27 +72,27 @@ dependencies = [
  "base64 0.21.2",
  "bitflags 1.3.2",
  "brotli",
- "bytes",
+ "bytes 1.4.0",
  "bytestring",
  "derive_more",
  "encoding_rs",
  "flate2",
  "futures-core",
- "h2",
+ "h2 0.3.19",
  "http",
  "httparse",
- "httpdate",
- "itoa",
+ "httpdate 1.0.2",
+ "itoa 1.0.6",
  "language-tags",
  "local-channel",
  "mime",
  "percent-encoding",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "rand 0.8.5",
  "sha1",
  "smallvec",
- "tokio",
- "tokio-util",
+ "tokio 1.28.2",
+ "tokio-util 0.7.8",
  "tracing",
  "zstd",
 ]
@@ -116,7 +116,7 @@ dependencies = [
  "actix-multipart-derive",
  "actix-utils",
  "actix-web",
- "bytes",
+ "bytes 1.4.0",
  "derive_more",
  "futures-core",
  "futures-util",
@@ -129,7 +129,7 @@ dependencies = [
  "serde_json",
  "serde_plain",
  "tempfile",
- "tokio",
+ "tokio 1.28.2",
 ]
 
 [[package]]
@@ -166,7 +166,7 @@ checksum = "15265b6b8e2347670eb363c47fc8c75208b4a4994b27192f345fcbe707804f3e"
 dependencies = [
  "actix-macros",
  "futures-core",
- "tokio",
+ "tokio 1.28.2",
 ]
 
 [[package]]
@@ -180,10 +180,10 @@ dependencies = [
  "actix-utils",
  "futures-core",
  "futures-util",
- "mio",
+ "mio 0.8.6",
  "num_cpus",
- "socket2",
- "tokio",
+ "socket2 0.4.9",
+ "tokio 1.28.2",
  "tracing",
 ]
 
@@ -195,7 +195,7 @@ checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a"
 dependencies = [
  "futures-core",
  "paste",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
 ]
 
 [[package]]
@@ -211,9 +211,9 @@ dependencies = [
  "futures-core",
  "http",
  "log",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "tokio-rustls",
- "tokio-util",
+ "tokio-util 0.7.8",
  "webpki-roots",
 ]
 
@@ -224,7 +224,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8"
 dependencies = [
  "local-waker",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
 ]
 
 [[package]]
@@ -243,27 +243,27 @@ dependencies = [
  "actix-utils",
  "actix-web-codegen",
  "ahash 0.7.6",
- "bytes",
+ "bytes 1.4.0",
  "bytestring",
- "cfg-if",
+ "cfg-if 1.0.0",
  "cookie",
  "derive_more",
  "encoding_rs",
  "futures-core",
  "futures-util",
  "http",
- "itoa",
+ "itoa 1.0.6",
  "language-tags",
  "log",
  "mime",
  "once_cell",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "regex",
  "serde",
  "serde_json",
  "serde_urlencoded",
  "smallvec",
- "socket2",
+ "socket2 0.4.9",
  "time 0.3.21",
  "url",
 ]
@@ -314,7 +314,7 @@ version = "0.8.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
  "getrandom 0.2.9",
  "once_cell",
  "version_check",
@@ -378,7 +378,7 @@ dependencies = [
  "frunk_core",
  "masking",
  "mime",
- "reqwest",
+ "reqwest 0.11.18",
  "router_derive",
  "serde",
  "serde_json",
@@ -406,6 +406,12 @@ version = "0.3.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
 
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
 [[package]]
 name = "arrayvec"
 version = "0.7.2"
@@ -431,7 +437,7 @@ dependencies = [
  "bb8",
  "diesel",
  "thiserror",
- "tokio",
+ "tokio 1.28.2",
 ]
 
 [[package]]
@@ -454,8 +460,8 @@ dependencies = [
  "flate2",
  "futures-core",
  "memchr",
- "pin-project-lite",
- "tokio",
+ "pin-project-lite 0.2.9",
+ "tokio 1.28.2",
 ]
 
 [[package]]
@@ -466,7 +472,7 @@ checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
 dependencies = [
  "async-lock",
  "autocfg",
- "cfg-if",
+ "cfg-if 1.0.0",
  "concurrent-queue",
  "futures-lite",
  "log",
@@ -474,7 +480,7 @@ dependencies = [
  "polling",
  "rustix",
  "slab",
- "socket2",
+ "socket2 0.4.9",
  "waker-fn",
 ]
 
@@ -495,7 +501,7 @@ checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
 dependencies = [
  "async-stream-impl",
  "futures-core",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
 ]
 
 [[package]]
@@ -528,7 +534,7 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
 dependencies = [
  "hermit-abi 0.1.19",
  "libc",
- "winapi",
+ "winapi 0.3.9",
 ]
 
 [[package]]
@@ -551,25 +557,25 @@ dependencies = [
  "actix-utils",
  "ahash 0.7.6",
  "base64 0.21.2",
- "bytes",
- "cfg-if",
+ "bytes 1.4.0",
+ "cfg-if 1.0.0",
  "cookie",
  "derive_more",
  "futures-core",
  "futures-util",
- "h2",
+ "h2 0.3.19",
  "http",
- "itoa",
+ "itoa 1.0.6",
  "log",
  "mime",
  "percent-encoding",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "rand 0.8.5",
  "rustls",
  "serde",
  "serde_json",
  "serde_urlencoded",
- "tokio",
+ "tokio 1.28.2",
 ]
 
 [[package]]
@@ -589,14 +595,14 @@ dependencies = [
  "aws-smithy-json",
  "aws-smithy-types",
  "aws-types",
- "bytes",
+ "bytes 1.4.0",
  "fastrand",
  "hex",
  "http",
- "hyper",
+ "hyper 0.14.26",
  "ring",
  "time 0.3.21",
- "tokio",
+ "tokio 1.28.2",
  "tower",
  "tracing",
  "zeroize",
@@ -611,7 +617,7 @@ dependencies = [
  "aws-smithy-async",
  "aws-smithy-types",
  "fastrand",
- "tokio",
+ "tokio 1.28.2",
  "tracing",
  "zeroize",
 ]
@@ -640,12 +646,12 @@ dependencies = [
  "aws-smithy-http",
  "aws-smithy-types",
  "aws-types",
- "bytes",
+ "bytes 1.4.0",
  "http",
- "http-body",
+ "http-body 0.4.5",
  "lazy_static",
  "percent-encoding",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "tracing",
 ]
 
@@ -666,7 +672,7 @@ dependencies = [
  "aws-smithy-json",
  "aws-smithy-types",
  "aws-types",
- "bytes",
+ "bytes 1.4.0",
  "http",
  "regex",
  "tokio-stream",
@@ -695,9 +701,9 @@ dependencies = [
  "aws-smithy-types",
  "aws-smithy-xml",
  "aws-types",
- "bytes",
+ "bytes 1.4.0",
  "http",
- "http-body",
+ "http-body 0.4.5",
  "once_cell",
  "percent-encoding",
  "regex",
@@ -724,7 +730,7 @@ dependencies = [
  "aws-smithy-json",
  "aws-smithy-types",
  "aws-types",
- "bytes",
+ "bytes 1.4.0",
  "http",
  "regex",
  "tokio-stream",
@@ -749,7 +755,7 @@ dependencies = [
  "aws-smithy-json",
  "aws-smithy-types",
  "aws-types",
- "bytes",
+ "bytes 1.4.0",
  "http",
  "regex",
  "tokio-stream",
@@ -776,7 +782,7 @@ dependencies = [
  "aws-smithy-types",
  "aws-smithy-xml",
  "aws-types",
- "bytes",
+ "bytes 1.4.0",
  "http",
  "regex",
  "tower",
@@ -806,7 +812,7 @@ checksum = "9d2ce6f507be68e968a33485ced670111d1cbad161ddbbab1e313c03d37d8f4c"
 dependencies = [
  "aws-smithy-eventstream",
  "aws-smithy-http",
- "bytes",
+ "bytes 1.4.0",
  "form_urlencoded",
  "hex",
  "hmac",
@@ -826,8 +832,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "13bda3996044c202d75b91afeb11a9afae9db9a721c6a7a427410018e286b880"
 dependencies = [
  "futures-util",
- "pin-project-lite",
- "tokio",
+ "pin-project-lite 0.2.9",
+ "tokio 1.28.2",
  "tokio-stream",
 ]
 
@@ -839,14 +845,14 @@ checksum = "07ed8b96d95402f3f6b8b57eb4e0e45ee365f78b1a924faf20ff6e97abf1eae6"
 dependencies = [
  "aws-smithy-http",
  "aws-smithy-types",
- "bytes",
+ "bytes 1.4.0",
  "crc32c",
  "crc32fast",
  "hex",
  "http",
- "http-body",
+ "http-body 0.4.5",
  "md-5",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "sha1",
  "sha2",
  "tracing",
@@ -862,16 +868,16 @@ dependencies = [
  "aws-smithy-http",
  "aws-smithy-http-tower",
  "aws-smithy-types",
- "bytes",
+ "bytes 1.4.0",
  "fastrand",
  "http",
- "http-body",
- "hyper",
+ "http-body 0.4.5",
+ "hyper 0.14.26",
  "hyper-rustls",
  "lazy_static",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "rustls",
- "tokio",
+ "tokio 1.28.2",
  "tower",
  "tracing",
 ]
@@ -883,7 +889,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "460c8da5110835e3d9a717c61f5556b20d03c32a1dec57f8fc559b360f733bb8"
 dependencies = [
  "aws-smithy-types",
- "bytes",
+ "bytes 1.4.0",
  "crc32fast",
 ]
 
@@ -895,18 +901,18 @@ checksum = "2b3b693869133551f135e1f2c77cb0b8277d9e3e17feaf2213f735857c4f0d28"
 dependencies = [
  "aws-smithy-eventstream",
  "aws-smithy-types",
- "bytes",
+ "bytes 1.4.0",
  "bytes-utils",
  "futures-core",
  "http",
- "http-body",
- "hyper",
+ "http-body 0.4.5",
+ "hyper 0.14.26",
  "once_cell",
  "percent-encoding",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "pin-utils",
- "tokio",
- "tokio-util",
+ "tokio 1.28.2",
+ "tokio-util 0.7.8",
  "tracing",
 ]
 
@@ -918,10 +924,10 @@ checksum = "3ae4f6c5798a247fac98a867698197d9ac22643596dc3777f0c76b91917616b9"
 dependencies = [
  "aws-smithy-http",
  "aws-smithy-types",
- "bytes",
+ "bytes 1.4.0",
  "http",
- "http-body",
- "pin-project-lite",
+ "http-body 0.4.5",
+ "pin-project-lite 0.2.9",
  "tower",
  "tracing",
 ]
@@ -952,7 +958,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "16a3d0bf4f324f4ef9793b86a1701d9700fbcdbd12a846da45eed104c634c6e8"
 dependencies = [
  "base64-simd",
- "itoa",
+ "itoa 1.0.6",
  "num-integer",
  "ryu",
  "time 0.3.21",
@@ -992,17 +998,17 @@ dependencies = [
  "async-trait",
  "axum-core",
  "bitflags 1.3.2",
- "bytes",
+ "bytes 1.4.0",
  "futures-util",
  "http",
- "http-body",
- "hyper",
- "itoa",
+ "http-body 0.4.5",
+ "hyper 0.14.26",
+ "itoa 1.0.6",
  "matchit",
  "memchr",
  "mime",
  "percent-encoding",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "rustversion",
  "serde",
  "sync_wrapper",
@@ -1018,10 +1024,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
 dependencies = [
  "async-trait",
- "bytes",
+ "bytes 1.4.0",
  "futures-util",
  "http",
- "http-body",
+ "http-body 0.4.5",
  "mime",
  "rustversion",
  "tower-layer",
@@ -1060,7 +1066,7 @@ dependencies = [
  "futures-channel",
  "futures-util",
  "parking_lot",
- "tokio",
+ "tokio 1.28.2",
 ]
 
 [[package]]
@@ -1090,6 +1096,17 @@ version = "2.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6776fc96284a0bb647b615056fc496d1fe1644a7ab01829818a6d91cae888b84"
 
+[[package]]
+name = "blake2b_simd"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587"
+dependencies = [
+ "arrayref",
+ "arrayvec 0.5.2",
+ "constant_time_eq 0.1.5",
+]
+
 [[package]]
 name = "blake3"
 version = "1.3.3"
@@ -1097,10 +1114,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef"
 dependencies = [
  "arrayref",
- "arrayvec",
+ "arrayvec 0.7.2",
  "cc",
- "cfg-if",
- "constant_time_eq",
+ "cfg-if 1.0.0",
+ "constant_time_eq 0.2.5",
  "digest",
 ]
 
@@ -1152,6 +1169,12 @@ version = "1.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
 
+[[package]]
+name = "bytes"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
+
 [[package]]
 name = "bytes"
 version = "1.4.0"
@@ -1164,7 +1187,7 @@ version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e47d3a8076e283f3acd27400535992edb3ba4b5bb72f8891ad8fbe7932a7d4b9"
 dependencies = [
- "bytes",
+ "bytes 1.4.0",
  "either",
 ]
 
@@ -1174,7 +1197,7 @@ version = "1.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "238e4886760d98c4f899360c834fa93e62cf7f721ac3c2da375cbdf4b8679aae"
 dependencies = [
- "bytes",
+ "bytes 1.4.0",
 ]
 
 [[package]]
@@ -1217,7 +1240,7 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa"
 dependencies = [
  "camino",
  "cargo-platform",
- "semver",
+ "semver 1.0.17",
  "serde",
  "serde_json",
 ]
@@ -1230,7 +1253,7 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a"
 dependencies = [
  "camino",
  "cargo-platform",
- "semver",
+ "semver 1.0.17",
  "serde",
  "serde_json",
  "thiserror",
@@ -1256,6 +1279,12 @@ dependencies = [
  "uuid",
 ]
 
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
 [[package]]
 name = "cfg-if"
 version = "1.0.0"
@@ -1275,7 +1304,7 @@ dependencies = [
  "serde",
  "time 0.1.45",
  "wasm-bindgen",
- "winapi",
+ "winapi 0.3.9",
 ]
 
 [[package]]
@@ -1328,6 +1357,17 @@ dependencies = [
  "unicode-width",
 ]
 
+[[package]]
+name = "colored"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi 0.3.9",
+]
+
 [[package]]
 name = "common_enums"
 version = "0.1.0"
@@ -1345,7 +1385,7 @@ name = "common_utils"
 version = "0.1.0"
 dependencies = [
  "async-trait",
- "bytes",
+ "bytes 1.4.0",
  "diesel",
  "error-stack",
  "fake",
@@ -1368,7 +1408,7 @@ dependencies = [
  "signal-hook-tokio",
  "thiserror",
  "time 0.3.21",
- "tokio",
+ "tokio 1.28.2",
 ]
 
 [[package]]
@@ -1399,6 +1439,12 @@ dependencies = [
  "yaml-rust",
 ]
 
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
 [[package]]
 name = "constant_time_eq"
 version = "0.2.5"
@@ -1474,7 +1520,7 @@ version = "1.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
 ]
 
 [[package]]
@@ -1483,7 +1529,7 @@ version = "0.5.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
  "crossbeam-utils",
 ]
 
@@ -1494,7 +1540,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
 dependencies = [
  "autocfg",
- "cfg-if",
+ "cfg-if 1.0.0",
  "crossbeam-utils",
  "memoffset",
  "scopeguard",
@@ -1506,7 +1552,7 @@ version = "0.8.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
 ]
 
 [[package]]
@@ -1519,6 +1565,27 @@ dependencies = [
  "typenum",
 ]
 
+[[package]]
+name = "csv"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "626ae34994d3d8d668f4269922248239db4ae42d538b14c398b74a52208e8086"
+dependencies = [
+ "csv-core",
+ "itoa 1.0.6",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+dependencies = [
+ "memchr",
+]
+
 [[package]]
 name = "cxx"
 version = "1.0.94"
@@ -1639,7 +1706,7 @@ version = "5.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
  "hashbrown",
  "lock_api",
  "once_cell",
@@ -1656,7 +1723,7 @@ dependencies = [
  "deadpool-runtime",
  "num_cpus",
  "retain_mut",
- "tokio",
+ "tokio 1.28.2",
 ]
 
 [[package]]
@@ -1698,7 +1765,7 @@ dependencies = [
  "bitflags 2.3.1",
  "byteorder",
  "diesel_derives",
- "itoa",
+ "itoa 1.0.6",
  "pq-sys",
  "r2d2",
  "serde_json",
@@ -1743,6 +1810,17 @@ version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "af83450b771231745d43edf36dc9b7813ab83be5e8cbea344ccced1a09dfebcd"
 
+[[package]]
+name = "dirs"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901"
+dependencies = [
+ "libc",
+ "redox_users 0.3.5",
+ "winapi 0.3.9",
+]
+
 [[package]]
 name = "dirs"
 version = "4.0.0"
@@ -1759,8 +1837,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
 dependencies = [
  "libc",
- "redox_users",
- "winapi",
+ "redox_users 0.4.3",
+ "winapi 0.3.9",
 ]
 
 [[package]]
@@ -1789,7 +1867,7 @@ dependencies = [
  "serde_path_to_error",
  "storage_models",
  "thiserror",
- "tokio",
+ "tokio 1.28.2",
 ]
 
 [[package]]
@@ -1804,13 +1882,19 @@ version = "1.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
 
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
 [[package]]
 name = "encoding_rs"
 version = "0.8.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
 ]
 
 [[package]]
@@ -1891,7 +1975,7 @@ dependencies = [
  "router_env",
  "serde",
  "thiserror",
- "tokio",
+ "tokio 1.28.2",
 ]
 
 [[package]]
@@ -1915,13 +1999,13 @@ dependencies = [
  "futures-core",
  "futures-util",
  "http",
- "hyper",
+ "hyper 0.14.26",
  "hyper-rustls",
  "mime",
  "serde",
  "serde_json",
  "time 0.3.21",
- "tokio",
+ "tokio 1.28.2",
  "url",
  "webdriver",
 ]
@@ -1993,9 +2077,9 @@ dependencies = [
  "arc-swap",
  "arcstr",
  "async-trait",
- "bytes",
+ "bytes 1.4.0",
  "bytes-utils",
- "cfg-if",
+ "cfg-if 1.0.0",
  "float-cmp",
  "futures",
  "lazy_static",
@@ -2004,11 +2088,11 @@ dependencies = [
  "pretty_env_logger",
  "rand 0.8.5",
  "redis-protocol",
- "semver",
+ "semver 1.0.17",
  "sha-1",
- "tokio",
+ "tokio 1.28.2",
  "tokio-stream",
- "tokio-util",
+ "tokio-util 0.7.8",
  "tracing",
  "tracing-futures",
  "url",
@@ -2078,6 +2162,22 @@ dependencies = [
  "syn 1.0.109",
 ]
 
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags 1.3.2",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
 [[package]]
 name = "futures"
 version = "0.3.28"
@@ -2137,7 +2237,7 @@ dependencies = [
  "futures-io",
  "memchr",
  "parking",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "waker-fn",
 ]
 
@@ -2183,7 +2283,7 @@ dependencies = [
  "futures-sink",
  "futures-task",
  "memchr",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "pin-utils",
  "slab",
 ]
@@ -2214,7 +2314,7 @@ version = "0.1.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
  "libc",
  "wasi 0.9.0+wasi-snapshot-preview1",
 ]
@@ -2225,7 +2325,7 @@ version = "0.2.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
  "libc",
  "wasi 0.11.0+wasi-snapshot-preview1",
 ]
@@ -2249,13 +2349,33 @@ version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
 
+[[package]]
+name = "h2"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e4728fd124914ad25e99e3d15a9361a879f6620f63cb56bbb08f95abb97a535"
+dependencies = [
+ "bytes 0.5.6",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio 0.2.25",
+ "tokio-util 0.3.1",
+ "tracing",
+ "tracing-futures",
+]
+
 [[package]]
 name = "h2"
 version = "0.3.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782"
 dependencies = [
- "bytes",
+ "bytes 1.4.0",
  "fnv",
  "futures-core",
  "futures-sink",
@@ -2263,8 +2383,8 @@ dependencies = [
  "http",
  "indexmap",
  "slab",
- "tokio",
- "tokio-util",
+ "tokio 1.28.2",
+ "tokio-util 0.7.8",
  "tracing",
 ]
 
@@ -2328,9 +2448,19 @@ version = "0.2.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
 dependencies = [
- "bytes",
+ "bytes 1.4.0",
  "fnv",
- "itoa",
+ "itoa 1.0.6",
+]
+
+[[package]]
+name = "http-body"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b"
+dependencies = [
+ "bytes 0.5.6",
+ "http",
 ]
 
 [[package]]
@@ -2339,9 +2469,9 @@ version = "0.4.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
 dependencies = [
- "bytes",
+ "bytes 1.4.0",
  "http",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
 ]
 
 [[package]]
@@ -2356,7 +2486,7 @@ dependencies = [
  "futures-lite",
  "http",
  "infer 0.2.3",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "rand 0.7.3",
  "serde",
  "serde_json",
@@ -2371,6 +2501,12 @@ version = "1.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
 
+[[package]]
+name = "httpdate"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"
+
 [[package]]
 name = "httpdate"
 version = "1.0.2"
@@ -2386,25 +2522,49 @@ dependencies = [
  "quick-error",
 ]
 
+[[package]]
+name = "hyper"
+version = "0.13.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a6f157065790a3ed2f88679250419b5cdd96e714a0d65f7797fd337186e96bb"
+dependencies = [
+ "bytes 0.5.6",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2 0.2.7",
+ "http",
+ "http-body 0.3.1",
+ "httparse",
+ "httpdate 0.3.2",
+ "itoa 0.4.8",
+ "pin-project",
+ "socket2 0.3.19",
+ "tokio 0.2.25",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
 [[package]]
 name = "hyper"
 version = "0.14.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"
 dependencies = [
- "bytes",
+ "bytes 1.4.0",
  "futures-channel",
  "futures-core",
  "futures-util",
- "h2",
+ "h2 0.3.19",
  "http",
- "http-body",
+ "http-body 0.4.5",
  "httparse",
- "httpdate",
- "itoa",
- "pin-project-lite",
- "socket2",
- "tokio",
+ "httpdate 1.0.2",
+ "itoa 1.0.6",
+ "pin-project-lite 0.2.9",
+ "socket2 0.4.9",
+ "tokio 1.28.2",
  "tower-service",
  "tracing",
  "want",
@@ -2417,11 +2577,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c"
 dependencies = [
  "http",
- "hyper",
+ "hyper 0.14.26",
  "log",
  "rustls",
  "rustls-native-certs",
- "tokio",
+ "tokio 1.28.2",
  "tokio-rustls",
 ]
 
@@ -2431,22 +2591,35 @@ version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
 dependencies = [
- "hyper",
- "pin-project-lite",
- "tokio",
+ "hyper 0.14.26",
+ "pin-project-lite 0.2.9",
+ "tokio 1.28.2",
  "tokio-io-timeout",
 ]
 
+[[package]]
+name = "hyper-tls"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d979acc56dcb5b8dddba3917601745e877576475aa046df3226eabdecef78eed"
+dependencies = [
+ "bytes 0.5.6",
+ "hyper 0.13.10",
+ "native-tls",
+ "tokio 0.2.25",
+ "tokio-tls",
+]
+
 [[package]]
 name = "hyper-tls"
 version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
 dependencies = [
- "bytes",
- "hyper",
+ "bytes 1.4.0",
+ "hyper 0.14.26",
  "native-tls",
- "tokio",
+ "tokio 1.28.2",
  "tokio-native-tls",
 ]
 
@@ -2522,7 +2695,7 @@ version = "0.1.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
 ]
 
 [[package]]
@@ -2536,6 +2709,15 @@ dependencies = [
  "windows-sys 0.48.0",
 ]
 
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
 [[package]]
 name = "ipnet"
 version = "2.7.2"
@@ -2551,6 +2733,12 @@ dependencies = [
  "either",
 ]
 
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
 [[package]]
 name = "itoa"
 version = "1.0.6"
@@ -2618,6 +2806,16 @@ dependencies = [
  "simple_asn1",
 ]
 
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
 [[package]]
 name = "language-tags"
 version = "0.3.2"
@@ -2737,7 +2935,7 @@ version = "0.4.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
 ]
 
 [[package]]
@@ -2758,11 +2956,17 @@ dependencies = [
  "libc",
 ]
 
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
 [[package]]
 name = "masking"
 version = "0.1.0"
 dependencies = [
- "bytes",
+ "bytes 1.4.0",
  "diesel",
  "serde",
  "serde_json",
@@ -2793,7 +2997,7 @@ checksum = "b0bab19cef8a7fe1c18a43e881793bfc9d4ea984befec3ae5bd0415abf3ecf00"
 dependencies = [
  "actix-web",
  "futures-util",
- "itoa",
+ "itoa 1.0.6",
  "maud_macros",
 ]
 
@@ -2879,6 +3083,25 @@ dependencies = [
  "adler",
 ]
 
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log",
+ "miow",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
 [[package]]
 name = "mio"
 version = "0.8.6"
@@ -2891,6 +3114,18 @@ dependencies = [
  "windows-sys 0.45.0",
 ]
 
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
 [[package]]
 name = "moka"
 version = "0.10.2"
@@ -2944,6 +3179,17 @@ dependencies = [
  "tempfile",
 ]
 
+[[package]]
+name = "net2"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
 [[package]]
 name = "nom"
 version = "7.1.3"
@@ -2961,7 +3207,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
 dependencies = [
  "overload",
- "winapi",
+ "winapi 0.3.9",
 ]
 
 [[package]]
@@ -3005,6 +3251,30 @@ dependencies = [
  "libc",
 ]
 
+[[package]]
+name = "oas3"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f8d29c198db98412285776c0ff6acdf24b26591730ace3580d1afe9edcbde07"
+dependencies = [
+ "bytes 0.5.6",
+ "colored",
+ "derive_more",
+ "http",
+ "lazy_static",
+ "log",
+ "maplit",
+ "prettytable-rs",
+ "regex",
+ "reqwest 0.10.10",
+ "semver 0.11.0",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "serde_yaml",
+ "url",
+]
+
 [[package]]
 name = "once_cell"
 version = "1.17.1"
@@ -3018,7 +3288,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56"
 dependencies = [
  "bitflags 1.3.2",
- "cfg-if",
+ "cfg-if 1.0.0",
  "foreign-types",
  "libc",
  "once_cell",
@@ -3077,7 +3347,7 @@ dependencies = [
  "opentelemetry-proto",
  "prost",
  "thiserror",
- "tokio",
+ "tokio 1.28.2",
  "tonic",
 ]
 
@@ -3104,7 +3374,7 @@ dependencies = [
  "indexmap",
  "js-sys",
  "once_cell",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "thiserror",
 ]
 
@@ -3125,7 +3395,7 @@ dependencies = [
  "percent-encoding",
  "rand 0.8.5",
  "thiserror",
- "tokio",
+ "tokio 1.28.2",
  "tokio-stream",
 ]
 
@@ -3173,7 +3443,7 @@ version = "0.9.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
  "libc",
  "redox_syscall 0.2.16",
  "smallvec",
@@ -3277,6 +3547,12 @@ dependencies = [
  "syn 2.0.18",
 ]
 
+[[package]]
+name = "pin-project-lite"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777"
+
 [[package]]
 name = "pin-project-lite"
 version = "0.2.9"
@@ -3303,11 +3579,11 @@ checksum = "4be1c66a6add46bff50935c313dae30a5030cf8385c5206e8a95e9e9def974aa"
 dependencies = [
  "autocfg",
  "bitflags 1.3.2",
- "cfg-if",
+ "cfg-if 1.0.0",
  "concurrent-queue",
  "libc",
  "log",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "windows-sys 0.48.0",
 ]
 
@@ -3336,6 +3612,20 @@ dependencies = [
  "log",
 ]
 
+[[package]]
+name = "prettytable-rs"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fd04b170004fa2daccf418a7f8253aaf033c27760b5f225889024cf66d7ac2e"
+dependencies = [
+ "atty",
+ "csv",
+ "encode_unicode",
+ "lazy_static",
+ "term",
+ "unicode-width",
+]
+
 [[package]]
 name = "proc-macro-error"
 version = "1.0.4"
@@ -3401,7 +3691,7 @@ version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
 dependencies = [
- "bytes",
+ "bytes 1.4.0",
  "prost-derive",
 ]
 
@@ -3442,7 +3732,7 @@ dependencies = [
  "raw-cpuid",
  "wasi 0.11.0+wasi-snapshot-preview1",
  "web-sys",
- "winapi",
+ "winapi 0.3.9",
 ]
 
 [[package]]
@@ -3576,7 +3866,7 @@ version = "4.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9c31deddf734dc0a39d3112e73490e88b61a05e83e074d211f348404cee4d2c6"
 dependencies = [
- "bytes",
+ "bytes 1.4.0",
  "bytes-utils",
  "cookie-factory",
  "crc16",
@@ -3596,9 +3886,15 @@ dependencies = [
  "router_env",
  "serde",
  "thiserror",
- "tokio",
+ "tokio 1.28.2",
 ]
 
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
 [[package]]
 name = "redox_syscall"
 version = "0.2.16"
@@ -3617,6 +3913,17 @@ dependencies = [
  "bitflags 1.3.2",
 ]
 
+[[package]]
+name = "redox_users"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"
+dependencies = [
+ "getrandom 0.1.16",
+ "redox_syscall 0.1.57",
+ "rust-argon2",
+]
+
 [[package]]
 name = "redox_users"
 version = "0.4.3"
@@ -3660,6 +3967,42 @@ version = "0.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
 
+[[package]]
+name = "reqwest"
+version = "0.10.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0718f81a8e14c4dbb3b34cf23dc6aaf9ab8a0dfec160c534b3dbca1aaa21f47c"
+dependencies = [
+ "base64 0.13.1",
+ "bytes 0.5.6",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body 0.3.1",
+ "hyper 0.13.10",
+ "hyper-tls 0.4.3",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite 0.2.9",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio 0.2.25",
+ "tokio-tls",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg 0.7.0",
+]
+
 [[package]]
 name = "reqwest"
 version = "0.11.18"
@@ -3668,15 +4011,15 @@ checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
 dependencies = [
  "async-compression",
  "base64 0.21.2",
- "bytes",
+ "bytes 1.4.0",
  "encoding_rs",
  "futures-core",
  "futures-util",
- "h2",
+ "h2 0.3.19",
  "http",
- "http-body",
- "hyper",
- "hyper-tls",
+ "http-body 0.4.5",
+ "hyper 0.14.26",
+ "hyper-tls 0.5.0",
  "ipnet",
  "js-sys",
  "log",
@@ -3685,19 +4028,19 @@ dependencies = [
  "native-tls",
  "once_cell",
  "percent-encoding",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "serde",
  "serde_json",
  "serde_urlencoded",
- "tokio",
+ "tokio 1.28.2",
  "tokio-native-tls",
- "tokio-util",
+ "tokio-util 0.7.8",
  "tower-service",
  "url",
  "wasm-bindgen",
  "wasm-bindgen-futures",
  "web-sys",
- "winreg",
+ "winreg 0.10.1",
 ]
 
 [[package]]
@@ -3718,7 +4061,7 @@ dependencies = [
  "spin",
  "untrusted",
  "web-sys",
- "winapi",
+ "winapi 0.3.9",
 ]
 
 [[package]]
@@ -3751,7 +4094,7 @@ dependencies = [
  "base64 0.21.2",
  "bb8",
  "blake3",
- "bytes",
+ "bytes 1.4.0",
  "cards",
  "clap",
  "common_utils",
@@ -3779,11 +4122,12 @@ dependencies = [
  "moka",
  "nanoid",
  "num_cpus",
+ "oas3",
  "once_cell",
  "rand 0.8.5",
  "redis_interface",
  "regex",
- "reqwest",
+ "reqwest 0.11.18",
  "ring",
  "router_derive",
  "router_env",
@@ -3801,7 +4145,7 @@ dependencies = [
  "thirtyfour",
  "thiserror",
  "time 0.3.21",
- "tokio",
+ "tokio 1.28.2",
  "toml 0.7.4",
  "url",
  "utoipa",
@@ -3840,7 +4184,7 @@ dependencies = [
  "serde_path_to_error",
  "strum",
  "time 0.3.21",
- "tokio",
+ "tokio 1.28.2",
  "tracing",
  "tracing-actix-web",
  "tracing-appender",
@@ -3850,6 +4194,18 @@ dependencies = [
  "vergen",
 ]
 
+[[package]]
+name = "rust-argon2"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb"
+dependencies = [
+ "base64 0.13.1",
+ "blake2b_simd",
+ "constant_time_eq 0.1.5",
+ "crossbeam-utils",
+]
+
 [[package]]
 name = "rust-embed"
 version = "6.6.1"
@@ -3891,7 +4247,7 @@ version = "0.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
  "ordered-multimap",
 ]
 
@@ -3907,7 +4263,7 @@ version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
 dependencies = [
- "semver",
+ "semver 1.0.17",
 ]
 
 [[package]]
@@ -4053,6 +4409,15 @@ dependencies = [
  "libc",
 ]
 
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser",
+]
+
 [[package]]
 name = "semver"
 version = "1.0.17"
@@ -4062,6 +4427,15 @@ dependencies = [
  "serde",
 ]
 
+[[package]]
+name = "semver-parser"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest",
+]
+
 [[package]]
 name = "serde"
 version = "1.0.163"
@@ -4089,7 +4463,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
 dependencies = [
  "indexmap",
- "itoa",
+ "itoa 1.0.6",
  "ryu",
  "serde",
 ]
@@ -4161,7 +4535,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
 dependencies = [
  "form_urlencoded",
- "itoa",
+ "itoa 1.0.6",
  "ryu",
  "serde",
 ]
@@ -4194,6 +4568,18 @@ dependencies = [
  "syn 2.0.18",
 ]
 
+[[package]]
+name = "serde_yaml"
+version = "0.8.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
+dependencies = [
+ "indexmap",
+ "ryu",
+ "serde",
+ "yaml-rust",
+]
+
 [[package]]
 name = "serial_test"
 version = "2.0.0"
@@ -4225,7 +4611,7 @@ version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
  "cpufeatures",
  "digest",
 ]
@@ -4236,7 +4622,7 @@ version = "0.10.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
  "cpufeatures",
  "digest",
 ]
@@ -4247,7 +4633,7 @@ version = "0.10.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
  "cpufeatures",
  "digest",
 ]
@@ -4267,7 +4653,7 @@ version = "2.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4"
 dependencies = [
- "dirs",
+ "dirs 4.0.0",
 ]
 
 [[package]]
@@ -4298,7 +4684,7 @@ dependencies = [
  "futures-core",
  "libc",
  "signal-hook",
- "tokio",
+ "tokio 1.28.2",
 ]
 
 [[package]]
@@ -4343,6 +4729,17 @@ version = "1.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
 
+[[package]]
+name = "socket2"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "winapi 0.3.9",
+]
+
 [[package]]
 name = "socket2"
 version = "0.4.9"
@@ -4350,7 +4747,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
 dependencies = [
  "libc",
- "winapi",
+ "winapi 0.3.9",
 ]
 
 [[package]]
@@ -4465,13 +4862,24 @@ version = "3.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
  "fastrand",
  "redox_syscall 0.3.5",
  "rustix",
  "windows-sys 0.45.0",
 ]
 
+[[package]]
+name = "term"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42"
+dependencies = [
+ "byteorder",
+ "dirs 1.0.5",
+ "winapi 0.3.9",
+]
+
 [[package]]
 name = "termcolor"
 version = "1.2.0"
@@ -4502,7 +4910,7 @@ dependencies = [
  "stringmatch",
  "thirtyfour-macros",
  "thiserror",
- "tokio",
+ "tokio 1.28.2",
  "url",
  "urlparse",
 ]
@@ -4545,7 +4953,7 @@ version = "1.1.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
  "once_cell",
 ]
 
@@ -4557,7 +4965,7 @@ checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
 dependencies = [
  "libc",
  "wasi 0.10.0+wasi-snapshot-preview1",
- "winapi",
+ "winapi 0.3.9",
 ]
 
 [[package]]
@@ -4566,7 +4974,7 @@ version = "0.3.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc"
 dependencies = [
- "itoa",
+ "itoa 1.0.6",
  "serde",
  "time-core",
  "time-macros",
@@ -4602,6 +5010,23 @@ version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
 
+[[package]]
+name = "tokio"
+version = "0.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6703a273949a90131b290be1fe7b039d0fc884aa1935860dfcbe056f28cd8092"
+dependencies = [
+ "bytes 0.5.6",
+ "fnv",
+ "futures-core",
+ "iovec",
+ "lazy_static",
+ "memchr",
+ "mio 0.6.23",
+ "pin-project-lite 0.1.12",
+ "slab",
+]
+
 [[package]]
 name = "tokio"
 version = "1.28.2"
@@ -4609,14 +5034,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2"
 dependencies = [
  "autocfg",
- "bytes",
+ "bytes 1.4.0",
  "libc",
- "mio",
+ "mio 0.8.6",
  "num_cpus",
  "parking_lot",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "signal-hook-registry",
- "socket2",
+ "socket2 0.4.9",
  "tokio-macros",
  "windows-sys 0.48.0",
 ]
@@ -4627,8 +5052,8 @@ version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
 dependencies = [
- "pin-project-lite",
- "tokio",
+ "pin-project-lite 0.2.9",
+ "tokio 1.28.2",
 ]
 
 [[package]]
@@ -4649,7 +5074,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
 dependencies = [
  "native-tls",
- "tokio",
+ "tokio 1.28.2",
 ]
 
 [[package]]
@@ -4659,7 +5084,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
 dependencies = [
  "rustls",
- "tokio",
+ "tokio 1.28.2",
  "webpki",
 ]
 
@@ -4670,8 +5095,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
 dependencies = [
  "futures-core",
- "pin-project-lite",
- "tokio",
+ "pin-project-lite 0.2.9",
+ "tokio 1.28.2",
+]
+
+[[package]]
+name = "tokio-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a70f4fcd7b3b24fb194f837560168208f669ca8cb70d0c4b862944452396343"
+dependencies = [
+ "native-tls",
+ "tokio 0.2.25",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499"
+dependencies = [
+ "bytes 0.5.6",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite 0.1.12",
+ "tokio 0.2.25",
 ]
 
 [[package]]
@@ -4680,11 +5129,11 @@ version = "0.7.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
 dependencies = [
- "bytes",
+ "bytes 1.4.0",
  "futures-core",
  "futures-sink",
- "pin-project-lite",
- "tokio",
+ "pin-project-lite 0.2.9",
+ "tokio 1.28.2",
  "tracing",
 ]
 
@@ -4741,21 +5190,21 @@ dependencies = [
  "async-trait",
  "axum",
  "base64 0.13.1",
- "bytes",
+ "bytes 1.4.0",
  "futures-core",
  "futures-util",
- "h2",
+ "h2 0.3.19",
  "http",
- "http-body",
- "hyper",
+ "http-body 0.4.5",
+ "hyper 0.14.26",
  "hyper-timeout",
  "percent-encoding",
  "pin-project",
  "prost",
  "prost-derive",
- "tokio",
+ "tokio 1.28.2",
  "tokio-stream",
- "tokio-util",
+ "tokio-util 0.7.8",
  "tower",
  "tower-layer",
  "tower-service",
@@ -4773,11 +5222,11 @@ dependencies = [
  "futures-util",
  "indexmap",
  "pin-project",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "rand 0.8.5",
  "slab",
- "tokio",
- "tokio-util",
+ "tokio 1.28.2",
+ "tokio-util 0.7.8",
  "tower-layer",
  "tower-service",
  "tracing",
@@ -4801,9 +5250,9 @@ version = "0.1.36"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
  "log",
- "pin-project-lite",
+ "pin-project-lite 0.2.9",
  "tracing-attributes",
  "tracing-core",
 ]
@@ -5174,7 +5623,9 @@ version = "0.2.86"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
+ "serde",
+ "serde_json",
  "wasm-bindgen-macro",
 ]
 
@@ -5199,7 +5650,7 @@ version = "0.4.34"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
 dependencies = [
- "cfg-if",
+ "cfg-if 1.0.0",
  "js-sys",
  "wasm-bindgen",
  "web-sys",
@@ -5251,7 +5702,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9973cb72c8587d5ad5efdb91e663d36177dc37725e6c90ca86c626b0cc45c93f"
 dependencies = [
  "base64 0.13.1",
- "bytes",
+ "bytes 1.4.0",
  "cookie",
  "http",
  "log",
@@ -5282,6 +5733,12 @@ dependencies = [
  "webpki",
 ]
 
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
 [[package]]
 name = "winapi"
 version = "0.3.9"
@@ -5292,6 +5749,12 @@ dependencies = [
  "winapi-x86_64-pc-windows-gnu",
 ]
 
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
 [[package]]
 name = "winapi-i686-pc-windows-gnu"
 version = "0.4.0"
@@ -5304,7 +5767,7 @@ version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
 dependencies = [
- "winapi",
+ "winapi 0.3.9",
 ]
 
 [[package]]
@@ -5478,13 +5941,22 @@ dependencies = [
  "memchr",
 ]
 
+[[package]]
+name = "winreg"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
+dependencies = [
+ "winapi 0.3.9",
+]
+
 [[package]]
 name = "winreg"
 version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
 dependencies = [
- "winapi",
+ "winapi 0.3.9",
 ]
 
 [[package]]
@@ -5500,13 +5972,23 @@ dependencies = [
  "futures",
  "futures-timer",
  "http-types",
- "hyper",
+ "hyper 0.14.26",
  "log",
  "once_cell",
  "regex",
  "serde",
  "serde_json",
- "tokio",
+ "tokio 1.28.2",
+]
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
 ]
 
 [[package]]
diff --git a/crates/api_models/src/customers.rs b/crates/api_models/src/customers.rs
index 7e4962a895e..05e2a1307de 100644
--- a/crates/api_models/src/customers.rs
+++ b/crates/api_models/src/customers.rs
@@ -15,13 +15,13 @@ pub struct CustomerRequest {
     #[serde(default = "unknown_merchant", skip)]
     pub merchant_id: String,
     /// The customer's name
-    #[schema(max_length = 255, example = "Jon Test")]
+    #[schema(max_length = 255, value_type = Option<String>, example = "Jon Test")]
     pub name: Option<Secret<String>>,
     /// The customer's email address
-    #[schema(value_type = Option<String>,max_length = 255, example = "JonTest@test.com")]
+    #[schema(value_type = Option<String>, max_length = 255, example = "JonTest@test.com")]
     pub email: Option<pii::Email>,
     /// The customer's phone number
-    #[schema(value_type = Option<String>,max_length = 255, example = "9999999999")]
+    #[schema(value_type = Option<String>, max_length = 255, example = "9999999999")]
     pub phone: Option<Secret<String>>,
     /// An arbitrary string that you can attach to a customer object.
     #[schema(max_length = 255, example = "First Customer")]
@@ -55,7 +55,7 @@ pub struct CustomerResponse {
     #[schema(max_length = 255, example = "cus_y3oqhf46pyzuxjbcn2giaqnb44")]
     pub customer_id: String,
     /// The customer's name
-    #[schema(max_length = 255, example = "Jon Test")]
+    #[schema(max_length = 255, value_type = Option<String>, example = "Jon Test")]
     pub name: crypto::OptionalEncryptableName,
     /// The customer's email address
     #[schema(value_type = Option<String>,max_length = 255, example = "JonTest@test.com")]
diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs
index 4815b19ad2d..8f52619c5d0 100644
--- a/crates/api_models/src/payments.rs
+++ b/crates/api_models/src/payments.rs
@@ -726,14 +726,20 @@ pub enum BankRedirectData {
     },
 }
 
-#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
+#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)]
 pub struct AchBillingDetails {
+    /// The Email ID for ACH billing
+    #[schema(value_type = String, example = "example@me.com")]
     pub email: Email,
 }
 
-#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
+#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)]
 pub struct SepaAndBacsBillingDetails {
+    /// The Email ID for SEPA and BACS billing
+    #[schema(value_type = String, example = "example@me.com")]
     pub email: Email,
+    /// The billing name for SEPA and BACS billing
+    #[schema(value_type = String, example = "Jane Doe")]
     pub name: Secret<String>,
 }
 
@@ -762,13 +768,19 @@ pub struct BankRedirectBilling {
 #[serde(rename_all = "snake_case")]
 pub enum BankTransferData {
     AchBankTransfer {
+        /// The billing details for ACH Bank Transfer
         billing_details: AchBillingDetails,
     },
     SepaBankTransfer {
+        /// The billing details for SEPA
         billing_details: SepaAndBacsBillingDetails,
+
+        /// The two-letter ISO country code for SEPA and BACS
+        #[schema(value_type = CountryAlpha2, example = "US")]
         country: api_enums::CountryAlpha2,
     },
     BacsBankTransfer {
+        /// The billing details for SEPA
         billing_details: SepaAndBacsBillingDetails,
     },
 }
@@ -1082,48 +1094,65 @@ pub enum NextActionData {
     },
 }
 
-#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
+#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize, ToSchema)]
 pub struct BankTransferNextStepsData {
+    /// The instructions for performing a bank transfer
     #[serde(flatten)]
     pub bank_transfer_instructions: BankTransferInstructions,
+    /// The details received by the receiver
     pub receiver: ReceiverDetails,
 }
 
-#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
+#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize, ToSchema)]
 #[serde(rename_all = "snake_case")]
 pub enum BankTransferInstructions {
+    /// The credit transfer for ACH transactions
     AchCreditTransfer(Box<AchTransfer>),
+    /// The instructions for SEPA bank transactions
     SepaBankInstructions(Box<SepaBankTransferInstructions>),
+    /// The instructions for BACS bank transactions
     BacsBankInstructions(Box<BacsBankTransferInstructions>),
 }
 
-#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
+#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)]
 pub struct SepaBankTransferInstructions {
+    #[schema(value_type = String, example = "Jane Doe")]
     pub account_holder_name: Secret<String>,
+    #[schema(value_type = String, example = "1024419982")]
     pub bic: Secret<String>,
     pub country: String,
+    #[schema(value_type = String, example = "123456789")]
     pub iban: Secret<String>,
 }
 
-#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
+#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)]
 pub struct BacsBankTransferInstructions {
+    #[schema(value_type = String, example = "Jane Doe")]
     pub account_holder_name: Secret<String>,
+    #[schema(value_type = String, example = "10244123908")]
     pub account_number: Secret<String>,
+    #[schema(value_type = String, example = "012")]
     pub sort_code: Secret<String>,
 }
 
-#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
+#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize, ToSchema)]
 pub struct AchTransfer {
+    #[schema(value_type = String, example = "122385736258")]
     pub account_number: Secret<String>,
     pub bank_name: String,
+    #[schema(value_type = String, example = "012")]
     pub routing_number: Secret<String>,
+    #[schema(value_type = String, example = "234")]
     pub swift_code: Secret<String>,
 }
 
-#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
+#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize, ToSchema)]
 pub struct ReceiverDetails {
+    /// The amount received by receiver
     amount_received: i64,
+    /// The amount charged by ACH
     amount_charged: Option<i64>,
+    /// The amount remaining to be sent via ACH
     amount_remaining: Option<i64>,
 }
 
@@ -1296,7 +1325,7 @@ pub struct PaymentsResponse {
     pub connector_label: Option<String>,
 
     /// The business country of merchant for this payment
-    #[schema(value_type = CountryAlpha2)]
+    #[schema(value_type = CountryAlpha2, example = "US")]
     pub business_country: api_enums::CountryAlpha2,
 
     /// The business label of merchant for this payment
@@ -1563,6 +1592,7 @@ pub struct Metadata {
     pub order_category: Option<String>,
 
     /// Redirection response coming in request as metadata field only for redirection scenarios
+    #[schema(value_type = Option<RedirectResponse>)]
     pub redirect_response: Option<RedirectResponse>,
 
     /// Allowed payment method types for a payment intent
@@ -1572,6 +1602,7 @@ pub struct Metadata {
 
 #[derive(Default, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize, Clone, ToSchema)]
 pub struct RedirectResponse {
+    #[schema(value_type = Option<String>)]
     pub param: Option<Secret<String>>,
     #[schema(value_type = Option<Object>)]
     pub json_payload: Option<pii::SecretSerdeValue>,
diff --git a/crates/router/Cargo.toml b/crates/router/Cargo.toml
index 254503f57d4..3f29ca2408a 100644
--- a/crates/router/Cargo.toml
+++ b/crates/router/Cargo.toml
@@ -22,7 +22,7 @@ olap = []
 oltp = []
 kv_store = []
 accounts_cache = []
-openapi = ["olap", "oltp"]
+openapi = ["olap", "oltp", "dep:oas3"]
 vergen = ["router_env/vergen"]
 multiple_mca = ["api_models/multiple_mca"]
 dummy_connector = ["api_models/dummy_connector"]
@@ -62,6 +62,7 @@ mime = "0.3.17"
 moka = { version = "0.10", features = ["future"] }
 nanoid = "0.4.0"
 num_cpus = "1.15.0"
+oas3 = { version = "0.2.1", optional = true }
 once_cell = "1.17.1"
 rand = "0.8.5"
 regex = "1.7.3"
diff --git a/crates/router/src/bin/router.rs b/crates/router/src/bin/router.rs
index 02ff2c241ef..da8880146f5 100644
--- a/crates/router/src/bin/router.rs
+++ b/crates/router/src/bin/router.rs
@@ -13,13 +13,13 @@ async fn main() -> ApplicationResult<()> {
     {
         use router::configs::settings::Subcommand;
         if let Some(Subcommand::GenerateOpenapiSpec) = cmd_line.subcommand {
-            let file_path = "openapi/generated.json";
+            let file_path = "openapi/openapi_spec.json";
             #[allow(clippy::expect_used)]
             std::fs::write(
                 file_path,
                 <router::openapi::ApiDoc as utoipa::OpenApi>::openapi()
                     .to_pretty_json()
-                    .expect("Failed to generate serialize OpenAPI specification as JSON"),
+                    .expect("Failed to serialize OpenAPI specification as JSON"),
             )
             .expect("Failed to write OpenAPI specification to file");
             println!("Successfully saved OpenAPI specification file at '{file_path}'");
diff --git a/crates/router/src/openapi.rs b/crates/router/src/openapi.rs
index 03316ae05a3..183ed60cf2e 100644
--- a/crates/router/src/openapi.rs
+++ b/crates/router/src/openapi.rs
@@ -222,6 +222,16 @@ Never share your secret api keys. Keep them guarded and secure.
         api_models::payments::PaymentsCancelRequest,
         api_models::payments::PaymentListConstraints,
         api_models::payments::PaymentListResponse,
+        api_models::payments::BankTransferData,
+        api_models::payments::BankTransferNextStepsData,
+        api_models::payments::SepaAndBacsBillingDetails,
+        api_models::payments::AchBillingDetails,
+        api_models::payments::BankTransferInstructions,
+        api_models::payments::ReceiverDetails,
+        api_models::payments::AchTransfer,
+        api_models::payments::SepaBankTransferInstructions,
+        api_models::payments::BacsBankTransferInstructions,
+        api_models::payments::RedirectResponse,
         api_models::refunds::RefundListRequest,
         api_models::refunds::RefundListResponse,
         api_models::mandates::MandateRevokedResponse,
diff --git a/openapi/generated.json b/openapi/openapi_spec.json
similarity index 88%
rename from openapi/generated.json
rename to openapi/openapi_spec.json
index 711f1cba104..8b813817436 100644
--- a/openapi/generated.json
+++ b/openapi/openapi_spec.json
@@ -22,7 +22,9 @@
   "paths": {
     "/account/payment_methods": {
       "get": {
-        "tags": ["Payment Methods"],
+        "tags": [
+          "Payment Methods"
+        ],
         "summary": "List payment methods for a Merchant",
         "description": "List payment methods for a Merchant\n\nTo filter and list the applicable payment methods for a particular Merchant ID",
         "operationId": "List all Payment Methods for a Merchant",
@@ -129,7 +131,9 @@
     },
     "/customer/{customer_id}/payment_methods": {
       "get": {
-        "tags": ["Payment Methods"],
+        "tags": [
+          "Payment Methods"
+        ],
         "summary": "List payment methods for a Customer",
         "description": "List payment methods for a Customer\n\nTo filter and list the applicable payment methods for a particular Customer ID",
         "operationId": "List all Payment Methods for a Customer",
@@ -236,7 +240,9 @@
     },
     "/customers": {
       "post": {
-        "tags": ["Customers"],
+        "tags": [
+          "Customers"
+        ],
         "summary": "Create Customer",
         "description": "Create Customer\n\nCreate a customer object and store the customer details to be reused for future payments. Incase the customer already exists in the system, this API will respond with the customer details.",
         "operationId": "Create a Customer",
@@ -274,7 +280,9 @@
     },
     "/customers/{customer_id}": {
       "get": {
-        "tags": ["Customers"],
+        "tags": [
+          "Customers"
+        ],
         "summary": "Retrieve Customer",
         "description": "Retrieve Customer\n\nRetrieve a customer's details.",
         "operationId": "Retrieve a Customer",
@@ -314,7 +322,9 @@
         ]
       },
       "post": {
-        "tags": ["Customers"],
+        "tags": [
+          "Customers"
+        ],
         "summary": "Update Customer",
         "description": "Update Customer\n\nUpdates the customer's details in a customer object.",
         "operationId": "Update a Customer",
@@ -361,7 +371,9 @@
         ]
       },
       "delete": {
-        "tags": ["Customers"],
+        "tags": [
+          "Customers"
+        ],
         "summary": "Delete Customer",
         "description": "Delete Customer\n\nDelete a customer record.",
         "operationId": "Delete a Customer",
@@ -400,7 +412,9 @@
     },
     "/disputes/list": {
       "get": {
-        "tags": ["Disputes"],
+        "tags": [
+          "Disputes"
+        ],
         "summary": "Disputes - List Disputes",
         "description": "Disputes - List Disputes",
         "operationId": "List Disputes",
@@ -547,7 +561,9 @@
     },
     "/disputes/{dispute_id}": {
       "get": {
-        "tags": ["Disputes"],
+        "tags": [
+          "Disputes"
+        ],
         "summary": "Disputes - Retrieve Dispute",
         "description": "Disputes - Retrieve Dispute",
         "operationId": "Retrieve a Dispute",
@@ -586,7 +602,9 @@
     },
     "/mandates/revoke/{mandate_id}": {
       "post": {
-        "tags": ["Mandates"],
+        "tags": [
+          "Mandates"
+        ],
         "summary": "Mandates - Revoke Mandate",
         "description": "Mandates - Revoke Mandate\n\nRevoke a mandate",
         "operationId": "Revoke a Mandate",
@@ -625,7 +643,9 @@
     },
     "/mandates/{mandate_id}": {
       "get": {
-        "tags": ["Mandates"],
+        "tags": [
+          "Mandates"
+        ],
         "summary": "Mandates - Retrieve Mandate",
         "description": "Mandates - Retrieve Mandate\n\nRetrieve a mandate",
         "operationId": "Retrieve a Mandate",
@@ -664,7 +684,9 @@
     },
     "/payment_methods": {
       "post": {
-        "tags": ["Payment Methods"],
+        "tags": [
+          "Payment Methods"
+        ],
         "summary": "PaymentMethods - Create",
         "description": "PaymentMethods - Create\n\nTo create a payment method against a customer object. In case of cards, this API could be used only by PCI compliant merchants",
         "operationId": "Create a Payment Method",
@@ -702,7 +724,9 @@
     },
     "/payment_methods/{method_id}": {
       "get": {
-        "tags": ["Payment Methods"],
+        "tags": [
+          "Payment Methods"
+        ],
         "summary": "Payment Method - Retrieve",
         "description": "Payment Method - Retrieve\n\nTo retrieve a payment method",
         "operationId": "Retrieve a Payment method",
@@ -739,7 +763,9 @@
         ]
       },
       "post": {
-        "tags": ["Payment Methods"],
+        "tags": [
+          "Payment Methods"
+        ],
         "summary": "Payment Method - Update",
         "description": "Payment Method - Update\n\nTo update an existing payment method attached to a customer object. This API is useful for use cases such as updating the card number for expired cards to prevent discontinuity in recurring payments",
         "operationId": "Update a Payment method",
@@ -786,7 +812,9 @@
         ]
       },
       "delete": {
-        "tags": ["Payment Methods"],
+        "tags": [
+          "Payment Methods"
+        ],
         "summary": "Payment Method - Delete",
         "description": "Payment Method - Delete\n\nDelete payment method",
         "operationId": "Delete a Payment method",
@@ -825,7 +853,9 @@
     },
     "/payments": {
       "post": {
-        "tags": ["Payments"],
+        "tags": [
+          "Payments"
+        ],
         "summary": "Payments - Create",
         "description": "Payments - Create\n\nTo process a payment you will have to create a payment, attach a payment method and confirm. Depending on the user journey you wish to achieve, you may opt to all the steps in a single request or in a sequence of API request using following APIs: (i) Payments - Update, (ii) Payments - Confirm, and (iii) Payments - Capture",
         "operationId": "Create a Payment",
@@ -863,7 +893,9 @@
     },
     "/payments/list": {
       "get": {
-        "tags": ["Payments"],
+        "tags": [
+          "Payments"
+        ],
         "summary": "Payments - List",
         "description": "Payments - List\n\nTo list the payments",
         "operationId": "List all Payments",
@@ -973,7 +1005,9 @@
     },
     "/payments/session_tokens": {
       "post": {
-        "tags": ["Payments"],
+        "tags": [
+          "Payments"
+        ],
         "summary": "Payments - Session token",
         "description": "Payments - Session token\n\nTo create the session object or to get session token for wallets",
         "operationId": "Create Session tokens for a Payment",
@@ -1011,7 +1045,9 @@
     },
     "/payments/{payment_id}": {
       "get": {
-        "tags": ["Payments"],
+        "tags": [
+          "Payments"
+        ],
         "summary": "Payments - Retrieve",
         "description": "Payments - Retrieve\n\nTo retrieve the properties of a Payment. This may be used to get the status of a previously initiated payment or next action for an ongoing payment",
         "operationId": "Retrieve a Payment",
@@ -1061,7 +1097,9 @@
         ]
       },
       "post": {
-        "tags": ["Payments"],
+        "tags": [
+          "Payments"
+        ],
         "summary": "Payments - Update",
         "description": "Payments - Update\n\nTo update the properties of a PaymentIntent object. This may include attaching a payment method, or attaching customer object or metadata fields after the Payment is created",
         "operationId": "Update a Payment",
@@ -1113,7 +1151,9 @@
     },
     "/payments/{payment_id}/cancel": {
       "post": {
-        "tags": ["Payments"],
+        "tags": [
+          "Payments"
+        ],
         "summary": "Payments - Cancel",
         "description": "Payments - Cancel\n\nA Payment could can be cancelled when it is in one of these statuses: requires_payment_method, requires_capture, requires_confirmation, requires_customer_action",
         "operationId": "Cancel a Payment",
@@ -1155,7 +1195,9 @@
     },
     "/payments/{payment_id}/capture": {
       "post": {
-        "tags": ["Payments"],
+        "tags": [
+          "Payments"
+        ],
         "summary": "Payments - Capture",
         "description": "Payments - Capture\n\nTo capture the funds for an uncaptured payment",
         "operationId": "Capture a Payment",
@@ -1204,7 +1246,9 @@
     },
     "/payments/{payment_id}/confirm": {
       "post": {
-        "tags": ["Payments"],
+        "tags": [
+          "Payments"
+        ],
         "summary": "Payments - Confirm",
         "description": "Payments - Confirm\n\nThis API is to confirm the payment request and forward payment to the payment processor. This API provides more granular control upon when the API is forwarded to the payment processor. Alternatively you can confirm the payment within the Payments Create API",
         "operationId": "Confirm a Payment",
@@ -1256,7 +1300,9 @@
     },
     "/refunds": {
       "post": {
-        "tags": ["Refunds"],
+        "tags": [
+          "Refunds"
+        ],
         "summary": "Refunds - Create",
         "description": "Refunds - Create\n\nTo create a refund against an already processed payment",
         "operationId": "Create a Refund",
@@ -1294,7 +1340,9 @@
     },
     "/refunds/list": {
       "get": {
-        "tags": ["Refunds"],
+        "tags": [
+          "Refunds"
+        ],
         "summary": "Refunds - List",
         "description": "Refunds - List\n\nTo list the refunds associated with a payment_id or with the merchant, if payment_id is not provided",
         "operationId": "List all Refunds",
@@ -1390,7 +1438,9 @@
     },
     "/refunds/{refund_id}": {
       "get": {
-        "tags": ["Refunds"],
+        "tags": [
+          "Refunds"
+        ],
         "summary": "Refunds - Retrieve (GET)",
         "description": "Refunds - Retrieve (GET)\n\nTo retrieve the properties of a Refund. This may be used to get the status of a previously initiated payment or next action for an ongoing payment",
         "operationId": "Retrieve a Refund",
@@ -1427,7 +1477,9 @@
         ]
       },
       "post": {
-        "tags": ["Refunds"],
+        "tags": [
+          "Refunds"
+        ],
         "summary": "Refunds - Update",
         "description": "Refunds - Update\n\nTo update the properties of a Refund object. This may include attaching a reason for the refund or metadata fields",
         "operationId": "Update a Refund",
@@ -1479,17 +1531,25 @@
     "schemas": {
       "AcceptanceType": {
         "type": "string",
-        "enum": ["online", "offline"]
+        "enum": [
+          "online",
+          "offline"
+        ]
       },
       "AcceptedCountries": {
         "oneOf": [
           {
             "type": "object",
-            "required": ["type", "list"],
+            "required": [
+              "type",
+              "list"
+            ],
             "properties": {
               "type": {
                 "type": "string",
-                "enum": ["enable_only"]
+                "enum": [
+                  "enable_only"
+                ]
               },
               "list": {
                 "type": "array",
@@ -1501,11 +1561,16 @@
           },
           {
             "type": "object",
-            "required": ["type", "list"],
+            "required": [
+              "type",
+              "list"
+            ],
             "properties": {
               "type": {
                 "type": "string",
-                "enum": ["disable_only"]
+                "enum": [
+                  "disable_only"
+                ]
               },
               "list": {
                 "type": "array",
@@ -1517,11 +1582,15 @@
           },
           {
             "type": "object",
-            "required": ["type"],
+            "required": [
+              "type"
+            ],
             "properties": {
               "type": {
                 "type": "string",
-                "enum": ["all_accepted"]
+                "enum": [
+                  "all_accepted"
+                ]
               }
             }
           }
@@ -1534,11 +1603,16 @@
         "oneOf": [
           {
             "type": "object",
-            "required": ["type", "list"],
+            "required": [
+              "type",
+              "list"
+            ],
             "properties": {
               "type": {
                 "type": "string",
-                "enum": ["enable_only"]
+                "enum": [
+                  "enable_only"
+                ]
               },
               "list": {
                 "type": "array",
@@ -1550,11 +1624,16 @@
           },
           {
             "type": "object",
-            "required": ["type", "list"],
+            "required": [
+              "type",
+              "list"
+            ],
             "properties": {
               "type": {
                 "type": "string",
-                "enum": ["disable_only"]
+                "enum": [
+                  "disable_only"
+                ]
               },
               "list": {
                 "type": "array",
@@ -1566,11 +1645,15 @@
           },
           {
             "type": "object",
-            "required": ["type"],
+            "required": [
+              "type"
+            ],
             "properties": {
               "type": {
                 "type": "string",
-                "enum": ["all_accepted"]
+                "enum": [
+                  "all_accepted"
+                ]
               }
             }
           }
@@ -1579,6 +1662,45 @@
           "propertyName": "type"
         }
       },
+      "AchBillingDetails": {
+        "type": "object",
+        "required": [
+          "email"
+        ],
+        "properties": {
+          "email": {
+            "type": "string",
+            "description": "The Email ID for ACH billing",
+            "example": "example@me.com"
+          }
+        }
+      },
+      "AchTransfer": {
+        "type": "object",
+        "required": [
+          "account_number",
+          "bank_name",
+          "routing_number",
+          "swift_code"
+        ],
+        "properties": {
+          "account_number": {
+            "type": "string",
+            "example": "122385736258"
+          },
+          "bank_name": {
+            "type": "string"
+          },
+          "routing_number": {
+            "type": "string",
+            "example": "012"
+          },
+          "swift_code": {
+            "type": "string",
+            "example": "234"
+          }
+        }
+      },
       "Address": {
         "type": "object",
         "properties": {
@@ -1673,7 +1795,11 @@
       },
       "AmountInfo": {
         "type": "object",
-        "required": ["label", "type", "amount"],
+        "required": [
+          "label",
+          "type",
+          "amount"
+        ],
         "properties": {
           "label": {
             "type": "string",
@@ -1693,7 +1819,9 @@
         "oneOf": [
           {
             "type": "string",
-            "enum": ["never"]
+            "enum": [
+              "never"
+            ]
           },
           {
             "type": "string",
@@ -1832,7 +1960,11 @@
       },
       "ApplepayPaymentMethod": {
         "type": "object",
-        "required": ["display_name", "network", "type"],
+        "required": [
+          "display_name",
+          "network",
+          "type"
+        ],
         "properties": {
           "display_name": {
             "type": "string",
@@ -1850,7 +1982,11 @@
       },
       "ApplepaySessionTokenResponse": {
         "type": "object",
-        "required": ["session_token_data", "payment_request_data", "connector"],
+        "required": [
+          "session_token_data",
+          "payment_request_data",
+          "connector"
+        ],
         "properties": {
           "session_token_data": {
             "$ref": "#/components/schemas/ApplePaySessionResponse"
@@ -1865,11 +2001,39 @@
       },
       "AuthenticationType": {
         "type": "string",
-        "enum": ["three_ds", "no_three_ds"]
+        "enum": [
+          "three_ds",
+          "no_three_ds"
+        ]
+      },
+      "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"
+          }
+        }
       },
       "BankDebitBilling": {
         "type": "object",
-        "required": ["name", "email"],
+        "required": [
+          "name",
+          "email"
+        ],
         "properties": {
           "name": {
             "type": "string",
@@ -1895,7 +2059,9 @@
         "oneOf": [
           {
             "type": "object",
-            "required": ["ach_bank_debit"],
+            "required": [
+              "ach_bank_debit"
+            ],
             "properties": {
               "ach_bank_debit": {
                 "type": "object",
@@ -1935,7 +2101,9 @@
           },
           {
             "type": "object",
-            "required": ["sepa_bank_debit"],
+            "required": [
+              "sepa_bank_debit"
+            ],
             "properties": {
               "sepa_bank_debit": {
                 "type": "object",
@@ -1964,11 +2132,17 @@
           },
           {
             "type": "object",
-            "required": ["becs_bank_debit"],
+            "required": [
+              "becs_bank_debit"
+            ],
             "properties": {
               "becs_bank_debit": {
                 "type": "object",
-                "required": ["billing_details", "account_number", "bsb_number"],
+                "required": [
+                  "billing_details",
+                  "account_number",
+                  "bsb_number"
+                ],
                 "properties": {
                   "billing_details": {
                     "$ref": "#/components/schemas/BankDebitBilling"
@@ -1989,7 +2163,9 @@
           },
           {
             "type": "object",
-            "required": ["bacs_bank_debit"],
+            "required": [
+              "bacs_bank_debit"
+            ],
             "properties": {
               "bacs_bank_debit": {
                 "type": "object",
@@ -2133,7 +2309,10 @@
       },
       "BankRedirectBilling": {
         "type": "object",
-        "required": ["billing_name", "email"],
+        "required": [
+          "billing_name",
+          "email"
+        ],
         "properties": {
           "billing_name": {
             "type": "string",
@@ -2151,7 +2330,9 @@
         "oneOf": [
           {
             "type": "object",
-            "required": ["bancontact_card"],
+            "required": [
+              "bancontact_card"
+            ],
             "properties": {
               "bancontact_card": {
                 "type": "object",
@@ -2196,11 +2377,15 @@
           },
           {
             "type": "object",
-            "required": ["blik"],
+            "required": [
+              "blik"
+            ],
             "properties": {
               "blik": {
                 "type": "object",
-                "required": ["blik_code"],
+                "required": [
+                  "blik_code"
+                ],
                 "properties": {
                   "blik_code": {
                     "type": "string"
@@ -2211,11 +2396,16 @@
           },
           {
             "type": "object",
-            "required": ["eps"],
+            "required": [
+              "eps"
+            ],
             "properties": {
               "eps": {
                 "type": "object",
-                "required": ["billing_details", "bank_name"],
+                "required": [
+                  "billing_details",
+                  "bank_name"
+                ],
                 "properties": {
                   "billing_details": {
                     "$ref": "#/components/schemas/BankRedirectBilling"
@@ -2229,11 +2419,15 @@
           },
           {
             "type": "object",
-            "required": ["giropay"],
+            "required": [
+              "giropay"
+            ],
             "properties": {
               "giropay": {
                 "type": "object",
-                "required": ["billing_details"],
+                "required": [
+                  "billing_details"
+                ],
                 "properties": {
                   "billing_details": {
                     "$ref": "#/components/schemas/BankRedirectBilling"
@@ -2254,11 +2448,16 @@
           },
           {
             "type": "object",
-            "required": ["ideal"],
+            "required": [
+              "ideal"
+            ],
             "properties": {
               "ideal": {
                 "type": "object",
-                "required": ["billing_details", "bank_name"],
+                "required": [
+                  "billing_details",
+                  "bank_name"
+                ],
                 "properties": {
                   "billing_details": {
                     "$ref": "#/components/schemas/BankRedirectBilling"
@@ -2272,11 +2471,16 @@
           },
           {
             "type": "object",
-            "required": ["interac"],
+            "required": [
+              "interac"
+            ],
             "properties": {
               "interac": {
                 "type": "object",
-                "required": ["country", "email"],
+                "required": [
+                  "country",
+                  "email"
+                ],
                 "properties": {
                   "country": {
                     "$ref": "#/components/schemas/CountryAlpha2"
@@ -2291,11 +2495,15 @@
           },
           {
             "type": "object",
-            "required": ["online_banking_czech_republic"],
+            "required": [
+              "online_banking_czech_republic"
+            ],
             "properties": {
               "online_banking_czech_republic": {
                 "type": "object",
-                "required": ["issuer"],
+                "required": [
+                  "issuer"
+                ],
                 "properties": {
                   "issuer": {
                     "$ref": "#/components/schemas/BankNames"
@@ -2306,7 +2514,9 @@
           },
           {
             "type": "object",
-            "required": ["online_banking_finland"],
+            "required": [
+              "online_banking_finland"
+            ],
             "properties": {
               "online_banking_finland": {
                 "type": "object",
@@ -2321,11 +2531,15 @@
           },
           {
             "type": "object",
-            "required": ["online_banking_poland"],
+            "required": [
+              "online_banking_poland"
+            ],
             "properties": {
               "online_banking_poland": {
                 "type": "object",
-                "required": ["issuer"],
+                "required": [
+                  "issuer"
+                ],
                 "properties": {
                   "issuer": {
                     "$ref": "#/components/schemas/BankNames"
@@ -2336,11 +2550,15 @@
           },
           {
             "type": "object",
-            "required": ["online_banking_slovakia"],
+            "required": [
+              "online_banking_slovakia"
+            ],
             "properties": {
               "online_banking_slovakia": {
                 "type": "object",
-                "required": ["issuer"],
+                "required": [
+                  "issuer"
+                ],
                 "properties": {
                   "issuer": {
                     "$ref": "#/components/schemas/BankNames"
@@ -2351,11 +2569,15 @@
           },
           {
             "type": "object",
-            "required": ["przelewy24"],
+            "required": [
+              "przelewy24"
+            ],
             "properties": {
               "przelewy24": {
                 "type": "object",
-                "required": ["billing_details"],
+                "required": [
+                  "billing_details"
+                ],
                 "properties": {
                   "bank_name": {
                     "allOf": [
@@ -2374,7 +2596,9 @@
           },
           {
             "type": "object",
-            "required": ["sofort"],
+            "required": [
+              "sofort"
+            ],
             "properties": {
               "sofort": {
                 "type": "object",
@@ -2401,7 +2625,9 @@
           },
           {
             "type": "object",
-            "required": ["swish"],
+            "required": [
+              "swish"
+            ],
             "properties": {
               "swish": {
                 "type": "object"
@@ -2410,24 +2636,153 @@
           },
           {
             "type": "object",
-            "required": ["trustly"],
+            "required": [
+              "trustly"
+            ],
             "properties": {
               "trustly": {
                 "type": "object",
-                "required": ["country"],
+                "required": [
+                  "country"
+                ],
+                "properties": {
+                  "country": {
+                    "$ref": "#/components/schemas/CountryAlpha2"
+                  }
+                }
+              }
+            }
+          }
+        ]
+      },
+      "BankTransferData": {
+        "oneOf": [
+          {
+            "type": "object",
+            "required": [
+              "ach_bank_transfer"
+            ],
+            "properties": {
+              "ach_bank_transfer": {
+                "type": "object",
+                "required": [
+                  "billing_details"
+                ],
+                "properties": {
+                  "billing_details": {
+                    "$ref": "#/components/schemas/AchBillingDetails"
+                  }
+                }
+              }
+            }
+          },
+          {
+            "type": "object",
+            "required": [
+              "sepa_bank_transfer"
+            ],
+            "properties": {
+              "sepa_bank_transfer": {
+                "type": "object",
+                "required": [
+                  "billing_details",
+                  "country"
+                ],
                 "properties": {
+                  "billing_details": {
+                    "$ref": "#/components/schemas/SepaAndBacsBillingDetails"
+                  },
                   "country": {
                     "$ref": "#/components/schemas/CountryAlpha2"
                   }
                 }
               }
             }
+          },
+          {
+            "type": "object",
+            "required": [
+              "bacs_bank_transfer"
+            ],
+            "properties": {
+              "bacs_bank_transfer": {
+                "type": "object",
+                "required": [
+                  "billing_details"
+                ],
+                "properties": {
+                  "billing_details": {
+                    "$ref": "#/components/schemas/SepaAndBacsBillingDetails"
+                  }
+                }
+              }
+            }
+          }
+        ]
+      },
+      "BankTransferInstructions": {
+        "oneOf": [
+          {
+            "type": "object",
+            "required": [
+              "ach_credit_transfer"
+            ],
+            "properties": {
+              "ach_credit_transfer": {
+                "$ref": "#/components/schemas/AchTransfer"
+              }
+            }
+          },
+          {
+            "type": "object",
+            "required": [
+              "sepa_bank_instructions"
+            ],
+            "properties": {
+              "sepa_bank_instructions": {
+                "$ref": "#/components/schemas/SepaBankTransferInstructions"
+              }
+            }
+          },
+          {
+            "type": "object",
+            "required": [
+              "bacs_bank_instructions"
+            ],
+            "properties": {
+              "bacs_bank_instructions": {
+                "$ref": "#/components/schemas/BacsBankTransferInstructions"
+              }
+            }
+          }
+        ]
+      },
+      "BankTransferNextStepsData": {
+        "allOf": [
+          {
+            "$ref": "#/components/schemas/BankTransferInstructions"
+          },
+          {
+            "type": "object",
+            "required": [
+              "receiver"
+            ],
+            "properties": {
+              "receiver": {
+                "$ref": "#/components/schemas/ReceiverDetails"
+              }
+            }
           }
         ]
       },
       "CaptureMethod": {
         "type": "string",
-        "enum": ["automatic", "manual", "manual_multiple", "scheduled"]
+        "enum": [
+          "automatic",
+          "manual",
+          "manual_multiple",
+          "scheduled"
+        ]
       },
       "Card": {
         "type": "object",
@@ -2570,7 +2925,6 @@
           "aci",
           "adyen",
           "airwallex",
-          "applepay",
           "authorizedotnet",
           "bitpay",
           "bluesnap",
@@ -2578,7 +2932,6 @@
           "checkout",
           "coinbase",
           "cybersource",
-          "dummy",
           "iatapay",
           "dummyconnector1",
           "dummyconnector2",
@@ -2594,6 +2947,7 @@
           "multisafepay",
           "nexinets",
           "nmi",
+          "noon",
           "nuvei",
           "paypal",
           "payu",
@@ -2875,7 +3229,10 @@
       "CreateApiKeyRequest": {
         "type": "object",
         "description": "The request body for creating an API Key.",
-        "required": ["name", "expiration"],
+        "required": [
+          "name",
+          "expiration"
+        ],
         "properties": {
           "name": {
             "type": "string",
@@ -3062,7 +3419,9 @@
       },
       "CustomerAcceptance": {
         "type": "object",
-        "required": ["acceptance_type"],
+        "required": [
+          "acceptance_type"
+        ],
         "properties": {
           "acceptance_type": {
             "$ref": "#/components/schemas/AcceptanceType"
@@ -3177,7 +3536,9 @@
               "$ref": "#/components/schemas/PaymentExperience"
             },
             "description": "Type of payment experience enabled with the connector",
-            "example": ["redirect_to_url"],
+            "example": [
+              "redirect_to_url"
+            ],
             "nullable": true
           },
           "card": {
@@ -3204,7 +3565,9 @@
       },
       "CustomerPaymentMethodsListResponse": {
         "type": "object",
-        "required": ["customer_payment_methods"],
+        "required": [
+          "customer_payment_methods"
+        ],
         "properties": {
           "customer_payment_methods": {
             "type": "array",
@@ -3218,6 +3581,9 @@
       "CustomerRequest": {
         "type": "object",
         "description": "The customer details",
+        "required": [
+          "name"
+        ],
         "properties": {
           "customer_id": {
             "type": "string",
@@ -3229,7 +3595,6 @@
             "type": "string",
             "description": "The customer's name",
             "example": "Jon Test",
-            "nullable": true,
             "maxLength": 255
           },
           "email": {
@@ -3274,7 +3639,10 @@
       },
       "CustomerResponse": {
         "type": "object",
-        "required": ["customer_id", "created_at"],
+        "required": [
+          "customer_id",
+          "created_at"
+        ],
         "properties": {
           "customer_id": {
             "type": "string",
@@ -3490,7 +3858,11 @@
       },
       "DisputeStage": {
         "type": "string",
-        "enum": ["pre_dispute", "dispute", "pre_arbitration"]
+        "enum": [
+          "pre_dispute",
+          "dispute",
+          "pre_arbitration"
+        ]
       },
       "DisputeStatus": {
         "type": "string",
@@ -3504,26 +3876,62 @@
           "dispute_lost"
         ]
       },
-      "FrmAction": {
-        "type": "string",
-        "enum": ["cancel_txn", "auto_refund", "manual_review"]
-      },
-      "FrmConfigs": {
+      "EphemeralKeyCreateResponse": {
         "type": "object",
-        "description": "Details of FrmConfigs are mentioned here... it should be passed in payment connector create api call, and stored in merchant_connector_table",
-        "required": ["frm_action", "frm_preferred_flow_type"],
+        "required": [
+          "customer_id",
+          "created_at",
+          "expires",
+          "secret"
+        ],
         "properties": {
-          "frm_enabled_pms": {
-            "type": "array",
-            "items": {
-              "type": "string"
-            },
-            "nullable": true
+          "customer_id": {
+            "type": "string",
+            "description": "customer_id to which this ephemeral key belongs to"
           },
-          "frm_enabled_pm_types": {
-            "type": "array",
-            "items": {
-              "type": "string"
+          "created_at": {
+            "type": "integer",
+            "format": "int64",
+            "description": "time at which this ephemeral key was created"
+          },
+          "expires": {
+            "type": "integer",
+            "format": "int64",
+            "description": "time at which this ephemeral key would expire"
+          },
+          "secret": {
+            "type": "string",
+            "description": "ephemeral key"
+          }
+        }
+      },
+      "FrmAction": {
+        "type": "string",
+        "enum": [
+          "cancel_txn",
+          "auto_refund",
+          "manual_review"
+        ]
+      },
+      "FrmConfigs": {
+        "type": "object",
+        "description": "Details of FrmConfigs are mentioned here... it should be passed in payment connector create api call, and stored in merchant_connector_table",
+        "required": [
+          "frm_action",
+          "frm_preferred_flow_type"
+        ],
+        "properties": {
+          "frm_enabled_pms": {
+            "type": "array",
+            "items": {
+              "type": "string"
+            },
+            "nullable": true
+          },
+          "frm_enabled_pm_types": {
+            "type": "array",
+            "items": {
+              "type": "string"
             },
             "nullable": true
           },
@@ -3544,15 +3952,24 @@
       },
       "FrmPreferredFlowTypes": {
         "type": "string",
-        "enum": ["pre", "post"]
+        "enum": [
+          "pre",
+          "post"
+        ]
       },
       "FutureUsage": {
         "type": "string",
-        "enum": ["off_session", "on_session"]
+        "enum": [
+          "off_session",
+          "on_session"
+        ]
       },
       "GooglePayPaymentMethodInfo": {
         "type": "object",
-        "required": ["card_network", "card_details"],
+        "required": [
+          "card_network",
+          "card_details"
+        ],
         "properties": {
           "card_network": {
             "type": "string",
@@ -3566,7 +3983,12 @@
       },
       "GooglePayWalletData": {
         "type": "object",
-        "required": ["type", "description", "info", "tokenization_data"],
+        "required": [
+          "type",
+          "description",
+          "info",
+          "tokenization_data"
+        ],
         "properties": {
           "type": {
             "type": "string",
@@ -3586,7 +4008,10 @@
       },
       "GpayAllowedMethodsParameters": {
         "type": "object",
-        "required": ["allowed_auth_methods", "allowed_card_networks"],
+        "required": [
+          "allowed_auth_methods",
+          "allowed_card_networks"
+        ],
         "properties": {
           "allowed_auth_methods": {
             "type": "array",
@@ -3606,7 +4031,11 @@
       },
       "GpayAllowedPaymentMethods": {
         "type": "object",
-        "required": ["type", "parameters", "tokenization_specification"],
+        "required": [
+          "type",
+          "parameters",
+          "tokenization_specification"
+        ],
         "properties": {
           "type": {
             "type": "string",
@@ -3622,7 +4051,9 @@
       },
       "GpayMerchantInfo": {
         "type": "object",
-        "required": ["merchant_name"],
+        "required": [
+          "merchant_name"
+        ],
         "properties": {
           "merchant_name": {
             "type": "string",
@@ -3659,7 +4090,9 @@
       },
       "GpayTokenParameters": {
         "type": "object",
-        "required": ["gateway"],
+        "required": [
+          "gateway"
+        ],
         "properties": {
           "gateway": {
             "type": "string",
@@ -3682,7 +4115,10 @@
       },
       "GpayTokenizationData": {
         "type": "object",
-        "required": ["type", "token"],
+        "required": [
+          "type",
+          "token"
+        ],
         "properties": {
           "type": {
             "type": "string",
@@ -3696,7 +4132,10 @@
       },
       "GpayTokenizationSpecification": {
         "type": "object",
-        "required": ["type", "parameters"],
+        "required": [
+          "type",
+          "parameters"
+        ],
         "properties": {
           "type": {
             "type": "string",
@@ -3728,8 +4167,7 @@
             "description": "The total price status (ex: 'FINAL')"
           },
           "total_price": {
-            "type": "integer",
-            "format": "int64",
+            "type": "string",
             "description": "The total price"
           }
         }
@@ -3750,7 +4188,10 @@
       },
       "KlarnaSessionTokenResponse": {
         "type": "object",
-        "required": ["session_token", "session_id"],
+        "required": [
+          "session_token",
+          "session_id"
+        ],
         "properties": {
           "session_token": {
             "type": "string",
@@ -3764,7 +4205,10 @@
       },
       "MandateAmountData": {
         "type": "object",
-        "required": ["amount", "currency"],
+        "required": [
+          "amount",
+          "currency"
+        ],
         "properties": {
           "amount": {
             "type": "integer",
@@ -3843,13 +4287,22 @@
       },
       "MandateData": {
         "type": "object",
-        "required": ["customer_acceptance", "mandate_type"],
         "properties": {
           "customer_acceptance": {
-            "$ref": "#/components/schemas/CustomerAcceptance"
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CustomerAcceptance"
+              }
+            ],
+            "nullable": true
           },
           "mandate_type": {
-            "$ref": "#/components/schemas/MandateType"
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/MandateType"
+              }
+            ],
+            "nullable": true
           }
         }
       },
@@ -3897,7 +4350,10 @@
       },
       "MandateRevokedResponse": {
         "type": "object",
-        "required": ["mandate_id", "status"],
+        "required": [
+          "mandate_id",
+          "status"
+        ],
         "properties": {
           "mandate_id": {
             "type": "string",
@@ -3911,13 +4367,20 @@
       "MandateStatus": {
         "type": "string",
         "description": "The status of the mandate, which indicates whether it can be used to initiate a payment",
-        "enum": ["active", "inactive", "pending", "revoked"]
+        "enum": [
+          "active",
+          "inactive",
+          "pending",
+          "revoked"
+        ]
       },
       "MandateType": {
         "oneOf": [
           {
             "type": "object",
-            "required": ["single_use"],
+            "required": [
+              "single_use"
+            ],
             "properties": {
               "single_use": {
                 "$ref": "#/components/schemas/MandateAmountData"
@@ -3926,7 +4389,9 @@
           },
           {
             "type": "object",
-            "required": ["multi_use"],
+            "required": [
+              "multi_use"
+            ],
             "properties": {
               "multi_use": {
                 "allOf": [
@@ -3942,7 +4407,9 @@
       },
       "MbWayRedirection": {
         "type": "object",
-        "required": ["telephone_number"],
+        "required": [
+          "telephone_number"
+        ],
         "properties": {
           "telephone_number": {
             "type": "string",
@@ -3952,7 +4419,9 @@
       },
       "MerchantAccountCreate": {
         "type": "object",
-        "required": ["merchant_id"],
+        "required": [
+          "merchant_id"
+        ],
         "properties": {
           "merchant_id": {
             "type": "string",
@@ -4052,6 +4521,11 @@
             ],
             "nullable": true
           },
+          "frm_routing_algorithm": {
+            "type": "object",
+            "description": "The frm routing algorithm to be used for routing payments to desired FRM's",
+            "nullable": true
+          },
           "intent_fulfillment_time": {
             "type": "integer",
             "format": "int32",
@@ -4064,7 +4538,10 @@
       },
       "MerchantAccountDeleteResponse": {
         "type": "object",
-        "required": ["merchant_id", "deleted"],
+        "required": [
+          "merchant_id",
+          "deleted"
+        ],
         "properties": {
           "merchant_id": {
             "type": "string",
@@ -4188,6 +4665,14 @@
             },
             "description": "Default business details for connector routing"
           },
+          "frm_routing_algorithm": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/RoutingAlgorithm"
+              }
+            ],
+            "nullable": true
+          },
           "intent_fulfillment_time": {
             "type": "integer",
             "format": "int64",
@@ -4198,7 +4683,9 @@
       },
       "MerchantAccountUpdate": {
         "type": "object",
-        "required": ["merchant_id"],
+        "required": [
+          "merchant_id"
+        ],
         "properties": {
           "merchant_id": {
             "type": "string",
@@ -4298,6 +4785,11 @@
             "description": "Default business details for connector routing",
             "nullable": true
           },
+          "frm_routing_algorithm": {
+            "type": "object",
+            "description": "The frm routing algorithm to be used for routing payments to desired FRM's",
+            "nullable": true
+          },
           "intent_fulfillment_time": {
             "type": "integer",
             "format": "int32",
@@ -4310,7 +4802,11 @@
       "MerchantConnectorCreate": {
         "type": "object",
         "description": "Create a new Merchant Connector for the merchant account. The connector could be a payment processor / facilitator / acquirer or specialized services like Fraud / Accounting etc.\"",
-        "required": ["connector_type", "connector_name", "connector_label"],
+        "required": [
+          "connector_type",
+          "connector_name",
+          "connector_label"
+        ],
         "properties": {
           "connector_type": {
             "$ref": "#/components/schemas/ConnectorType"
@@ -4358,16 +4854,32 @@
             "example": [
               {
                 "payment_method": "wallet",
-                "payment_method_types": ["upi_collect", "upi_intent"],
-                "payment_method_issuers": ["labore magna ipsum", "aute"],
-                "payment_schemes": ["Discover", "Discover"],
+                "payment_method_types": [
+                  "upi_collect",
+                  "upi_intent"
+                ],
+                "payment_method_issuers": [
+                  "labore magna ipsum",
+                  "aute"
+                ],
+                "payment_schemes": [
+                  "Discover",
+                  "Discover"
+                ],
                 "accepted_currencies": {
                   "type": "enable_only",
-                  "list": ["USD", "EUR"]
+                  "list": [
+                    "USD",
+                    "EUR"
+                  ]
                 },
                 "accepted_countries": {
                   "type": "disable_only",
-                  "list": ["FR", "DE", "IN"]
+                  "list": [
+                    "FR",
+                    "DE",
+                    "IN"
+                  ]
                 },
                 "minimum_amount": 1,
                 "maximum_amount": 68607706,
@@ -4412,7 +4924,11 @@
       },
       "MerchantConnectorDeleteResponse": {
         "type": "object",
-        "required": ["merchant_id", "merchant_connector_id", "deleted"],
+        "required": [
+          "merchant_id",
+          "merchant_connector_id",
+          "deleted"
+        ],
         "properties": {
           "merchant_id": {
             "type": "string",
@@ -4449,7 +4965,9 @@
       },
       "MerchantConnectorDetailsWrap": {
         "type": "object",
-        "required": ["creds_identifier"],
+        "required": [
+          "creds_identifier"
+        ],
         "properties": {
           "creds_identifier": {
             "type": "string",
@@ -4467,7 +4985,10 @@
       },
       "MerchantConnectorId": {
         "type": "object",
-        "required": ["merchant_id", "merchant_connector_id"],
+        "required": [
+          "merchant_id",
+          "merchant_connector_id"
+        ],
         "properties": {
           "merchant_id": {
             "type": "string"
@@ -4534,16 +5055,32 @@
             "example": [
               {
                 "payment_method": "wallet",
-                "payment_method_types": ["upi_collect", "upi_intent"],
-                "payment_method_issuers": ["labore magna ipsum", "aute"],
-                "payment_schemes": ["Discover", "Discover"],
+                "payment_method_types": [
+                  "upi_collect",
+                  "upi_intent"
+                ],
+                "payment_method_issuers": [
+                  "labore magna ipsum",
+                  "aute"
+                ],
+                "payment_schemes": [
+                  "Discover",
+                  "Discover"
+                ],
                 "accepted_currencies": {
                   "type": "enable_only",
-                  "list": ["USD", "EUR"]
+                  "list": [
+                    "USD",
+                    "EUR"
+                  ]
                 },
                 "accepted_countries": {
                   "type": "disable_only",
-                  "list": ["FR", "DE", "IN"]
+                  "list": [
+                    "FR",
+                    "DE",
+                    "IN"
+                  ]
                 },
                 "minimum_amount": 1,
                 "maximum_amount": 68607706,
@@ -4585,7 +5122,9 @@
       "MerchantConnectorUpdate": {
         "type": "object",
         "description": "Create a new Merchant Connector for the merchant account. The connector could be a payment processor / facilitator / acquirer or specialized services like Fraud / Accounting etc.\"",
-        "required": ["connector_type"],
+        "required": [
+          "connector_type"
+        ],
         "properties": {
           "connector_type": {
             "$ref": "#/components/schemas/ConnectorType"
@@ -4618,16 +5157,32 @@
             "example": [
               {
                 "payment_method": "wallet",
-                "payment_method_types": ["upi_collect", "upi_intent"],
-                "payment_method_issuers": ["labore magna ipsum", "aute"],
-                "payment_schemes": ["Discover", "Discover"],
+                "payment_method_types": [
+                  "upi_collect",
+                  "upi_intent"
+                ],
+                "payment_method_issuers": [
+                  "labore magna ipsum",
+                  "aute"
+                ],
+                "payment_schemes": [
+                  "Discover",
+                  "Discover"
+                ],
                 "accepted_currencies": {
                   "type": "enable_only",
-                  "list": ["USD", "EUR"]
+                  "list": [
+                    "USD",
+                    "EUR"
+                  ]
                 },
                 "accepted_countries": {
                   "type": "disable_only",
-                  "list": ["FR", "DE", "IN"]
+                  "list": [
+                    "FR",
+                    "DE",
+                    "IN"
+                  ]
                 },
                 "minimum_amount": 1,
                 "maximum_amount": 68607706,
@@ -4731,16 +5286,27 @@
             "type": "object",
             "properties": {
               "order_details": {
-                "type": "array",
-                "items": {
-                  "$ref": "#/components/schemas/OrderDetails"
-                },
-                "description": "Information about the product and quantity for specific connectors. (e.g. Klarna)",
+                "allOf": [
+                  {
+                    "$ref": "#/components/schemas/OrderDetails"
+                  }
+                ],
                 "nullable": true
               },
-              "payload": {
+              "routing_parameters": {
                 "type": "object",
-                "description": "Payload coming in request as a metadata field",
+                "description": "Information used for routing",
+                "additionalProperties": {
+                  "type": "string"
+                },
+                "nullable": true
+              },
+              "redirect_response": {
+                "allOf": [
+                  {
+                    "$ref": "#/components/schemas/RedirectResponse"
+                  }
+                ],
                 "nullable": true
               },
               "allowed_payment_method_types": {
@@ -4758,19 +5324,49 @@
       "MobilePayRedirection": {
         "type": "object"
       },
-      "NextAction": {
-        "type": "object",
-        "required": ["type"],
-        "properties": {
-          "type": {
-            "$ref": "#/components/schemas/NextActionType"
-          },
-          "redirect_to_url": {
-            "type": "string",
+      "NextActionData": {
+        "oneOf": [
+          {
+            "type": "object",
             "description": "Contains the url for redirection flow",
-            "example": "https://router.juspay.io/redirect/fakushdfjlksdfasklhdfj",
-            "nullable": true
+            "required": [
+              "redirect_to_url",
+              "type"
+            ],
+            "properties": {
+              "redirect_to_url": {
+                "type": "string"
+              },
+              "type": {
+                "type": "string",
+                "enum": [
+                  "redirect_to_url"
+                ]
+              }
+            }
+          },
+          {
+            "type": "object",
+            "description": "Informs the next steps for bank transfer and also contains the charges details (ex: amount received, amount charged etc)",
+            "required": [
+              "bank_transfer_steps_and_charges_details",
+              "type"
+            ],
+            "properties": {
+              "bank_transfer_steps_and_charges_details": {
+                "$ref": "#/components/schemas/BankTransferNextStepsData"
+              },
+              "type": {
+                "type": "string",
+                "enum": [
+                  "display_bank_transfer_information"
+                ]
+              }
+            }
           }
+        ],
+        "discriminator": {
+          "propertyName": "type"
         }
       },
       "NextActionType": {
@@ -4779,12 +5375,16 @@
           "redirect_to_url",
           "display_qr_code",
           "invoke_sdk_client",
-          "trigger_api"
+          "trigger_api",
+          "display_bank_transfer_information"
         ]
       },
       "OnlineMandate": {
         "type": "object",
-        "required": ["ip_address", "user_agent"],
+        "required": [
+          "ip_address",
+          "user_agent"
+        ],
         "properties": {
           "ip_address": {
             "type": "string",
@@ -4799,7 +5399,10 @@
       },
       "OrderDetails": {
         "type": "object",
-        "required": ["product_name", "quantity", "amount"],
+        "required": [
+          "product_name",
+          "quantity"
+        ],
         "properties": {
           "product_name": {
             "type": "string",
@@ -4813,11 +5416,6 @@
             "description": "The quantity of the product to be purchased",
             "example": 1,
             "minimum": 0.0
-          },
-          "amount": {
-            "type": "integer",
-            "format": "int64",
-            "description": "the amount per quantity of product"
           }
         }
       },
@@ -4825,12 +5423,17 @@
         "oneOf": [
           {
             "type": "object",
-            "required": ["klarna_redirect"],
+            "required": [
+              "klarna_redirect"
+            ],
             "properties": {
               "klarna_redirect": {
                 "type": "object",
                 "description": "For KlarnaRedirect as PayLater Option",
-                "required": ["billing_email", "billing_country"],
+                "required": [
+                  "billing_email",
+                  "billing_country"
+                ],
                 "properties": {
                   "billing_email": {
                     "type": "string",
@@ -4845,12 +5448,16 @@
           },
           {
             "type": "object",
-            "required": ["klarna_sdk"],
+            "required": [
+              "klarna_sdk"
+            ],
             "properties": {
               "klarna_sdk": {
                 "type": "object",
                 "description": "For Klarna Sdk as PayLater Option",
-                "required": ["token"],
+                "required": [
+                  "token"
+                ],
                 "properties": {
                   "token": {
                     "type": "string",
@@ -4862,7 +5469,9 @@
           },
           {
             "type": "object",
-            "required": ["affirm_redirect"],
+            "required": [
+              "affirm_redirect"
+            ],
             "properties": {
               "affirm_redirect": {
                 "type": "object",
@@ -4872,12 +5481,17 @@
           },
           {
             "type": "object",
-            "required": ["afterpay_clearpay_redirect"],
+            "required": [
+              "afterpay_clearpay_redirect"
+            ],
             "properties": {
               "afterpay_clearpay_redirect": {
                 "type": "object",
                 "description": "For AfterpayClearpay redirect as PayLater Option",
-                "required": ["billing_email", "billing_name"],
+                "required": [
+                  "billing_email",
+                  "billing_name"
+                ],
                 "properties": {
                   "billing_email": {
                     "type": "string",
@@ -4893,7 +5507,9 @@
           },
           {
             "type": "object",
-            "required": ["pay_bright"],
+            "required": [
+              "pay_bright"
+            ],
             "properties": {
               "pay_bright": {
                 "type": "object"
@@ -4902,7 +5518,9 @@
           },
           {
             "type": "object",
-            "required": ["walley"],
+            "required": [
+              "walley"
+            ],
             "properties": {
               "walley": {
                 "type": "object"
@@ -4913,7 +5531,9 @@
       },
       "PayPalWalletData": {
         "type": "object",
-        "required": ["token"],
+        "required": [
+          "token"
+        ],
         "properties": {
           "token": {
             "type": "string",
@@ -4936,7 +5556,9 @@
         "oneOf": [
           {
             "type": "object",
-            "required": ["PaymentIntentId"],
+            "required": [
+              "PaymentIntentId"
+            ],
             "properties": {
               "PaymentIntentId": {
                 "type": "string",
@@ -4946,7 +5568,9 @@
           },
           {
             "type": "object",
-            "required": ["ConnectorTransactionId"],
+            "required": [
+              "ConnectorTransactionId"
+            ],
             "properties": {
               "ConnectorTransactionId": {
                 "type": "string",
@@ -4956,13 +5580,27 @@
           },
           {
             "type": "object",
-            "required": ["PaymentAttemptId"],
+            "required": [
+              "PaymentAttemptId"
+            ],
             "properties": {
               "PaymentAttemptId": {
                 "type": "string",
                 "description": "The identifier for payment attempt"
               }
             }
+          },
+          {
+            "type": "object",
+            "required": [
+              "PreprocessingId"
+            ],
+            "properties": {
+              "PreprocessingId": {
+                "type": "string",
+                "description": "The identifier for preprocessing step"
+              }
+            }
           }
         ]
       },
@@ -5032,7 +5670,10 @@
       },
       "PaymentListResponse": {
         "type": "object",
-        "required": ["size", "data"],
+        "required": [
+          "size",
+          "data"
+        ],
         "properties": {
           "size": {
             "type": "integer",
@@ -5054,13 +5695,16 @@
           "pay_later",
           "wallet",
           "bank_redirect",
+          "bank_transfer",
           "crypto",
           "bank_debit"
         ]
       },
       "PaymentMethodCreate": {
         "type": "object",
-        "required": ["payment_method"],
+        "required": [
+          "payment_method"
+        ],
         "properties": {
           "payment_method": {
             "$ref": "#/components/schemas/PaymentMethodType"
@@ -5118,7 +5762,9 @@
         "oneOf": [
           {
             "type": "object",
-            "required": ["card"],
+            "required": [
+              "card"
+            ],
             "properties": {
               "card": {
                 "$ref": "#/components/schemas/Card"
@@ -5127,7 +5773,9 @@
           },
           {
             "type": "object",
-            "required": ["wallet"],
+            "required": [
+              "wallet"
+            ],
             "properties": {
               "wallet": {
                 "$ref": "#/components/schemas/WalletData"
@@ -5136,7 +5784,9 @@
           },
           {
             "type": "object",
-            "required": ["pay_later"],
+            "required": [
+              "pay_later"
+            ],
             "properties": {
               "pay_later": {
                 "$ref": "#/components/schemas/PayLaterData"
@@ -5145,7 +5795,9 @@
           },
           {
             "type": "object",
-            "required": ["bank_redirect"],
+            "required": [
+              "bank_redirect"
+            ],
             "properties": {
               "bank_redirect": {
                 "$ref": "#/components/schemas/BankRedirectData"
@@ -5154,7 +5806,9 @@
           },
           {
             "type": "object",
-            "required": ["bank_debit"],
+            "required": [
+              "bank_debit"
+            ],
             "properties": {
               "bank_debit": {
                 "$ref": "#/components/schemas/BankDebitData"
@@ -5163,7 +5817,20 @@
           },
           {
             "type": "object",
-            "required": ["crypto"],
+            "required": [
+              "bank_transfer"
+            ],
+            "properties": {
+              "bank_transfer": {
+                "$ref": "#/components/schemas/BankTransferData"
+              }
+            }
+          },
+          {
+            "type": "object",
+            "required": [
+              "crypto"
+            ],
             "properties": {
               "crypto": {
                 "$ref": "#/components/schemas/CryptoData"
@@ -5172,13 +5839,18 @@
           },
           {
             "type": "string",
-            "enum": ["mandate_payment"]
+            "enum": [
+              "mandate_payment"
+            ]
           }
         ]
       },
       "PaymentMethodDeleteResponse": {
         "type": "object",
-        "required": ["payment_method_id", "deleted"],
+        "required": [
+          "payment_method_id",
+          "deleted"
+        ],
         "properties": {
           "payment_method_id": {
             "type": "string",
@@ -5209,7 +5881,9 @@
       },
       "PaymentMethodList": {
         "type": "object",
-        "required": ["payment_method"],
+        "required": [
+          "payment_method"
+        ],
         "properties": {
           "payment_method": {
             "$ref": "#/components/schemas/PaymentMethod"
@@ -5220,14 +5894,19 @@
               "$ref": "#/components/schemas/PaymentMethodType"
             },
             "description": "This is a sub-category of payment method.",
-            "example": ["credit"],
+            "example": [
+              "credit"
+            ],
             "nullable": true
           }
         }
       },
       "PaymentMethodListResponse": {
         "type": "object",
-        "required": ["payment_methods"],
+        "required": [
+          "payment_methods",
+          "mandate_payment"
+        ],
         "properties": {
           "redirect_url": {
             "type": "string",
@@ -5245,9 +5924,15 @@
               {
                 "payment_method": "wallet",
                 "payment_experience": null,
-                "payment_method_issuers": ["labore magna ipsum", "aute"]
+                "payment_method_issuers": [
+                  "labore magna ipsum",
+                  "aute"
+                ]
               }
             ]
+          },
+          "mandate_payment": {
+            "$ref": "#/components/schemas/MandateType"
           }
         }
       },
@@ -5312,7 +5997,9 @@
               "$ref": "#/components/schemas/PaymentExperience"
             },
             "description": "Type of payment experience enabled with the connector",
-            "example": ["redirect_to_url"],
+            "example": [
+              "redirect_to_url"
+            ],
             "nullable": true
           },
           "metadata": {
@@ -5348,6 +6035,7 @@
           "giropay",
           "google_pay",
           "ideal",
+          "interac",
           "klarna",
           "mb_way",
           "mobile_pay",
@@ -5395,7 +6083,9 @@
       "PaymentMethodsEnabled": {
         "type": "object",
         "description": "Details of all the payment methods enabled for the connector for the given merchant account",
-        "required": ["payment_method"],
+        "required": [
+          "payment_method"
+        ],
         "properties": {
           "payment_method": {
             "$ref": "#/components/schemas/PaymentMethod"
@@ -5406,7 +6096,9 @@
               "$ref": "#/components/schemas/PaymentMethodType"
             },
             "description": "Subtype of payment method",
-            "example": ["credit"],
+            "example": [
+              "credit"
+            ],
             "nullable": true
           }
         }
@@ -5428,7 +6120,9 @@
       },
       "PaymentsCancelRequest": {
         "type": "object",
-        "required": ["merchant_connector_details"],
+        "required": [
+          "merchant_connector_details"
+        ],
         "properties": {
           "cancellation_reason": {
             "type": "string",
@@ -5486,85 +6180,52 @@
       },
       "PaymentsCreateRequest": {
         "type": "object",
-        "required": ["amount", "currency"],
+        "required": [
+          "currency",
+          "amount",
+          "manual_retry"
+        ],
         "properties": {
-          "confirm": {
-            "type": "boolean",
-            "description": "Whether to confirm the payment (if applicable)",
-            "default": false,
-            "example": true,
-            "nullable": true
-          },
-          "merchant_id": {
+          "mandate_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
-          },
-          "customer_id": {
-            "type": "string",
-            "description": "The identifier for the customer object. If not provided the customer ID will be autogenerated.",
-            "example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
-            "nullable": true,
-            "maxLength": 255
-          },
-          "name": {
-            "type": "string",
-            "description": "description: The customer's name",
-            "example": "John Test",
-            "nullable": true,
-            "maxLength": 255
-          },
-          "connector": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Connector"
-            },
-            "description": "This allows the merchant to manually select a connector with which the payment can go through",
-            "example": ["stripe", "adyen"],
-            "nullable": true
-          },
-          "phone_country_code": {
-            "type": "string",
-            "description": "The country code for the customer phone number",
-            "example": "+1",
-            "nullable": true,
-            "maxLength": 255
-          },
-          "business_label": {
-            "type": "string",
-            "description": "Business label of the merchant for this payment",
-            "example": "food",
-            "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",
+            "description": "A unique identifier to link the payment to a mandate, can be use instead of payment_method_data",
+            "example": "mandate_iwer89rnjef349dni3",
             "nullable": true,
             "maxLength": 255
           },
-          "payment_experience": {
+          "routing": {
             "allOf": [
               {
-                "$ref": "#/components/schemas/PaymentExperience"
+                "$ref": "#/components/schemas/RoutingAlgorithm"
               }
             ],
             "nullable": true
           },
-          "payment_method_data": {
+          "payment_token": {
+            "type": "string",
+            "description": "Provide a reference to a stored payment method",
+            "example": "187282ab-40ef-47a9-9206-5099ba31e432",
+            "nullable": true
+          },
+          "currency": {
             "allOf": [
               {
-                "$ref": "#/components/schemas/PaymentMethodData"
+                "$ref": "#/components/schemas/Currency"
               }
             ],
             "nullable": true
           },
-          "authentication_type": {
+          "phone_country_code": {
+            "type": "string",
+            "description": "The country code for the customer phone number",
+            "example": "+1",
+            "nullable": true,
+            "maxLength": 255
+          },
+          "payment_method_type": {
             "allOf": [
               {
-                "$ref": "#/components/schemas/AuthenticationType"
+                "$ref": "#/components/schemas/PaymentMethodType"
               }
             ],
             "nullable": true
@@ -5577,76 +6238,105 @@
             "description": "Allowed Payment Method Types for a given PaymentIntent",
             "nullable": true
           },
-          "capture_method": {
+          "confirm": {
+            "type": "boolean",
+            "description": "Whether to confirm the payment (if applicable)",
+            "default": false,
+            "example": true,
+            "nullable": true
+          },
+          "metadata": {
             "allOf": [
               {
-                "$ref": "#/components/schemas/CaptureMethod"
+                "$ref": "#/components/schemas/Metadata"
               }
             ],
             "nullable": true
           },
-          "card_cvc": {
-            "type": "string",
-            "description": "This is used when payment is to be confirmed and the card is not saved",
+          "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.,\nIf not provided, the default amount_to_capture will be the payment amount.",
+            "example": 6540,
             "nullable": true
           },
-          "capture_on": {
-            "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",
-            "example": "2022-09-10T10:11:12Z",
-            "nullable": true
+          "amount": {
+            "type": "integer",
+            "format": "int64",
+            "description": "The 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.,",
+            "example": 6540,
+            "nullable": true,
+            "minimum": 0.0
           },
-          "mandate_id": {
+          "merchant_id": {
             "type": "string",
-            "description": "A unique identifier to link the payment to a mandate, can be use instead of payment_method_data",
-            "example": "mandate_iwer89rnjef349dni3",
+            "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
           },
-          "merchant_connector_details": {
+          "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
+          },
+          "shipping": {
             "allOf": [
               {
-                "$ref": "#/components/schemas/MerchantConnectorDetailsWrap"
+                "$ref": "#/components/schemas/Address"
               }
             ],
             "nullable": true
           },
-          "payment_id": {
+          "phone": {
             "type": "string",
-            "description": "Unique identifier for the payment. This ensures idempotency for multiple payments\nthat have been done by a single merchant. This field is auto generated and is returned in the API response.",
-            "example": "pay_mbabizu24mvu3mela5njyhpit4",
+            "description": "The customer's phone number",
+            "example": "3141592653",
             "nullable": true,
-            "maxLength": 30,
-            "minLength": 30
+            "maxLength": 255
           },
-          "routing": {
+          "client_secret": {
+            "type": "string",
+            "description": "It's a token used for client side verification.",
+            "example": "pay_U42c409qyHwOkWo3vK60_secret_el9ksDkiB8hi6j9N78yo",
+            "nullable": true
+          },
+          "authentication_type": {
             "allOf": [
               {
-                "$ref": "#/components/schemas/RoutingAlgorithm"
+                "$ref": "#/components/schemas/AuthenticationType"
               }
             ],
             "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,
+          "capture_method": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CaptureMethod"
+              }
+            ],
             "nullable": true
           },
-          "return_url": {
+          "business_label": {
             "type": "string",
-            "description": "The URL to redirect after the completion of the operation",
-            "example": "https://hyperswitch.io",
+            "description": "Business label of the merchant for this payment",
+            "example": "food",
             "nullable": true
           },
-          "amount": {
-            "type": "integer",
-            "format": "int64",
-            "description": "The 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.,",
-            "example": 6540,
+          "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,
-            "minimum": 0.0
+            "maxLength": 255
+          },
+          "name": {
+            "type": "string",
+            "description": "description: The customer's name",
+            "example": "John Test",
+            "nullable": true,
+            "maxLength": 255
           },
           "setup_future_usage": {
             "allOf": [
@@ -5656,31 +6346,48 @@
             ],
             "nullable": true
           },
-          "statement_descriptor_suffix": {
+          "connector": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Connector"
+            },
+            "description": "This allows the merchant to manually select a connector with which the payment can go through",
+            "example": [
+              "stripe",
+              "adyen"
+            ],
+            "nullable": true
+          },
+          "statement_descriptor_name": {
             "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",
+            "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
           },
-          "shipping": {
+          "card_cvc": {
+            "type": "string",
+            "description": "This is used when payment is to be confirmed and the card is not saved",
+            "nullable": true
+          },
+          "payment_method": {
             "allOf": [
               {
-                "$ref": "#/components/schemas/Address"
+                "$ref": "#/components/schemas/PaymentMethod"
               }
             ],
             "nullable": true
           },
-          "client_secret": {
+          "description": {
             "type": "string",
-            "description": "It's a token used for client side verification.",
-            "example": "pay_U42c409qyHwOkWo3vK60_secret_el9ksDkiB8hi6j9N78yo",
+            "description": "A description of the payment",
+            "example": "It's my first payment request",
             "nullable": true
           },
-          "payment_method_type": {
+          "mandate_data": {
             "allOf": [
               {
-                "$ref": "#/components/schemas/PaymentMethodType"
+                "$ref": "#/components/schemas/MandateData"
               }
             ],
             "nullable": true
@@ -5693,66 +6400,59 @@
             ],
             "nullable": true
           },
-          "metadata": {
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Metadata"
-              }
-            ],
+          "business_sub_label": {
+            "type": "string",
+            "description": "Business sub label for the payment",
             "nullable": true
           },
-          "billing": {
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Address"
-              }
-            ],
+          "capture_on": {
+            "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",
+            "example": "2022-09-10T10:11:12Z",
             "nullable": true
           },
-          "description": {
+          "return_url": {
             "type": "string",
-            "description": "A description of the payment",
-            "example": "It's my first payment request",
+            "description": "The URL to redirect after the completion of the operation",
+            "example": "https://hyperswitch.io",
             "nullable": true
           },
-          "currency": {
+          "payment_experience": {
             "allOf": [
               {
-                "$ref": "#/components/schemas/Currency"
+                "$ref": "#/components/schemas/PaymentExperience"
               }
             ],
             "nullable": true
           },
-          "business_sub_label": {
-            "type": "string",
-            "description": "Business sub label for the payment",
-            "nullable": true
-          },
-          "payment_method": {
+          "billing": {
             "allOf": [
               {
-                "$ref": "#/components/schemas/PaymentMethod"
+                "$ref": "#/components/schemas/Address"
               }
             ],
             "nullable": true
           },
-          "phone": {
+          "customer_id": {
             "type": "string",
-            "description": "The customer's phone number",
-            "example": "3141592653",
+            "description": "The identifier for the customer object. If not provided the customer ID will be autogenerated.",
+            "example": "cus_y3oqhf46pyzuxjbcn2giaqnb44",
             "nullable": true,
             "maxLength": 255
           },
-          "payment_token": {
+          "payment_id": {
             "type": "string",
-            "description": "Provide a reference to a stored payment method",
-            "example": "187282ab-40ef-47a9-9206-5099ba31e432",
-            "nullable": true
+            "description": "Unique identifier for the payment. This ensures idempotency for multiple payments\nthat have been done by a single merchant. This field is auto generated and is returned in the API response.",
+            "example": "pay_mbabizu24mvu3mela5njyhpit4",
+            "nullable": true,
+            "maxLength": 30,
+            "minLength": 30
           },
-          "mandate_data": {
+          "merchant_connector_details": {
             "allOf": [
               {
-                "$ref": "#/components/schemas/MandateData"
+                "$ref": "#/components/schemas/MerchantConnectorDetailsWrap"
               }
             ],
             "nullable": true
@@ -5762,11 +6462,12 @@
             "description": "Additional details required by 3DS 2.0",
             "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.,\nIf not provided, the default amount_to_capture will be the payment amount.",
-            "example": 6540,
+          "payment_method_data": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/PaymentMethodData"
+              }
+            ],
             "nullable": true
           },
           "email": {
@@ -5775,6 +6476,10 @@
             "example": "johntest@test.com",
             "nullable": true,
             "maxLength": 255
+          },
+          "manual_retry": {
+            "type": "boolean",
+            "description": "If enabled payment can be retried from the client side until the payment is successful or payment expires or the attempts(configured by the merchant) for payment are exhausted."
           }
         }
       },
@@ -5818,7 +6523,10 @@
               "$ref": "#/components/schemas/Connector"
             },
             "description": "This allows the merchant to manually select a connector with which the payment can go through",
-            "example": ["stripe", "adyen"],
+            "example": [
+              "stripe",
+              "adyen"
+            ],
             "nullable": true
           },
           "currency": {
@@ -6068,6 +6776,10 @@
             "type": "string",
             "description": "Business sub label for the payment",
             "nullable": true
+          },
+          "manual_retry": {
+            "type": "boolean",
+            "description": "If enabled payment can be retried from the client side until the payment is successful or payment expires or the attempts(configured by the merchant) for payment are exhausted."
           }
         }
       },
@@ -6307,7 +7019,7 @@
           "next_action": {
             "allOf": [
               {
-                "$ref": "#/components/schemas/NextAction"
+                "$ref": "#/components/schemas/NextActionData"
               }
             ],
             "nullable": true
@@ -6370,12 +7082,23 @@
             },
             "description": "Allowed Payment Method Types for a given PaymentIntent",
             "nullable": true
+          },
+          "ephemeral_key": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/EphemeralKeyCreateResponse"
+              }
+            ],
+            "nullable": true
           }
         }
       },
       "PaymentsRetrieveRequest": {
         "type": "object",
-        "required": ["resource_id", "force_sync"],
+        "required": [
+          "resource_id",
+          "force_sync"
+        ],
         "properties": {
           "resource_id": {
             "$ref": "#/components/schemas/PaymentIdType"
@@ -6411,7 +7134,11 @@
       },
       "PaymentsSessionRequest": {
         "type": "object",
-        "required": ["payment_id", "client_secret", "wallets"],
+        "required": [
+          "payment_id",
+          "client_secret",
+          "wallets"
+        ],
         "properties": {
           "payment_id": {
             "type": "string",
@@ -6440,7 +7167,11 @@
       },
       "PaymentsSessionResponse": {
         "type": "object",
-        "required": ["payment_id", "client_secret", "session_token"],
+        "required": [
+          "payment_id",
+          "client_secret",
+          "session_token"
+        ],
         "properties": {
           "payment_id": {
             "type": "string",
@@ -6461,7 +7192,11 @@
       },
       "PaymentsStartRequest": {
         "type": "object",
-        "required": ["payment_id", "merchant_id", "attempt_id"],
+        "required": [
+          "payment_id",
+          "merchant_id",
+          "attempt_id"
+        ],
         "properties": {
           "payment_id": {
             "type": "string",
@@ -6482,7 +7217,9 @@
       },
       "PaypalSessionTokenResponse": {
         "type": "object",
-        "required": ["session_token"],
+        "required": [
+          "session_token"
+        ],
         "properties": {
           "session_token": {
             "type": "string",
@@ -6509,7 +7246,10 @@
       },
       "PrimaryBusinessDetails": {
         "type": "object",
-        "required": ["country", "business"],
+        "required": [
+          "country",
+          "business"
+        ],
         "properties": {
           "country": {
             "$ref": "#/components/schemas/CountryAlpha2"
@@ -6520,6 +7260,44 @@
           }
         }
       },
+      "ReceiverDetails": {
+        "type": "object",
+        "required": [
+          "amount_received"
+        ],
+        "properties": {
+          "amount_received": {
+            "type": "integer",
+            "format": "int64",
+            "description": "The amount received by receiver"
+          },
+          "amount_charged": {
+            "type": "integer",
+            "format": "int64",
+            "description": "The amount charged by ACH",
+            "nullable": true
+          },
+          "amount_remaining": {
+            "type": "integer",
+            "format": "int64",
+            "description": "The amount remaining to be sent via ACH",
+            "nullable": true
+          }
+        }
+      },
+      "RedirectResponse": {
+        "type": "object",
+        "properties": {
+          "param": {
+            "type": "string",
+            "nullable": true
+          },
+          "json_payload": {
+            "type": "object",
+            "nullable": true
+          }
+        }
+      },
       "RefundListRequest": {
         "type": "object",
         "properties": {
@@ -6568,7 +7346,10 @@
       },
       "RefundListResponse": {
         "type": "object",
-        "required": ["size", "data"],
+        "required": [
+          "size",
+          "data"
+        ],
         "properties": {
           "size": {
             "type": "integer",
@@ -6586,7 +7367,9 @@
       },
       "RefundRequest": {
         "type": "object",
-        "required": ["payment_id"],
+        "required": [
+          "payment_id"
+        ],
         "properties": {
           "refund_id": {
             "type": "string",
@@ -6721,11 +7504,19 @@
       "RefundStatus": {
         "type": "string",
         "description": "The status for refunds",
-        "enum": ["succeeded", "failed", "pending", "review"]
+        "enum": [
+          "succeeded",
+          "failed",
+          "pending",
+          "review"
+        ]
       },
       "RefundType": {
         "type": "string",
-        "enum": ["scheduled", "instant"]
+        "enum": [
+          "scheduled",
+          "instant"
+        ]
       },
       "RefundUpdateRequest": {
         "type": "object",
@@ -6800,7 +7591,11 @@
       "RevokeApiKeyResponse": {
         "type": "object",
         "description": "The response body for revoking an API Key.",
-        "required": ["merchant_id", "key_id", "revoked"],
+        "required": [
+          "merchant_id",
+          "key_id",
+          "revoked"
+        ],
         "properties": {
           "merchant_id": {
             "type": "string",
@@ -6824,9 +7619,59 @@
       "RoutingAlgorithm": {
         "type": "string",
         "description": "The routing algorithm to be used to process the incoming request from merchant to outgoing payment processor or payment method. The default is 'Custom'",
-        "enum": ["round_robin", "max_conversion", "min_cost", "custom"],
+        "enum": [
+          "round_robin",
+          "max_conversion",
+          "min_cost",
+          "custom"
+        ],
         "example": "custom"
       },
+      "SepaAndBacsBillingDetails": {
+        "type": "object",
+        "required": [
+          "email",
+          "name"
+        ],
+        "properties": {
+          "email": {
+            "type": "string",
+            "description": "The Email ID for SEPA and BACS billing",
+            "example": "example@me.com"
+          },
+          "name": {
+            "type": "string",
+            "description": "The billing name for SEPA and BACS billing",
+            "example": "Jane Doe"
+          }
+        }
+      },
+      "SepaBankTransferInstructions": {
+        "type": "object",
+        "required": [
+          "account_holder_name",
+          "bic",
+          "country",
+          "iban"
+        ],
+        "properties": {
+          "account_holder_name": {
+            "type": "string",
+            "example": "Jane Doe"
+          },
+          "bic": {
+            "type": "string",
+            "example": "1024419982"
+          },
+          "country": {
+            "type": "string"
+          },
+          "iban": {
+            "type": "string",
+            "example": "123456789"
+          }
+        }
+      },
       "SessionToken": {
         "oneOf": [
           {
@@ -6836,11 +7681,15 @@
               },
               {
                 "type": "object",
-                "required": ["wallet_name"],
+                "required": [
+                  "wallet_name"
+                ],
                 "properties": {
                   "wallet_name": {
                     "type": "string",
-                    "enum": ["google_pay"]
+                    "enum": [
+                      "google_pay"
+                    ]
                   }
                 }
               }
@@ -6853,11 +7702,15 @@
               },
               {
                 "type": "object",
-                "required": ["wallet_name"],
+                "required": [
+                  "wallet_name"
+                ],
                 "properties": {
                   "wallet_name": {
                     "type": "string",
-                    "enum": ["klarna"]
+                    "enum": [
+                      "klarna"
+                    ]
                   }
                 }
               }
@@ -6870,11 +7723,15 @@
               },
               {
                 "type": "object",
-                "required": ["wallet_name"],
+                "required": [
+                  "wallet_name"
+                ],
                 "properties": {
                   "wallet_name": {
                     "type": "string",
-                    "enum": ["paypal"]
+                    "enum": [
+                      "paypal"
+                    ]
                   }
                 }
               }
@@ -6887,11 +7744,15 @@
               },
               {
                 "type": "object",
-                "required": ["wallet_name"],
+                "required": [
+                  "wallet_name"
+                ],
                 "properties": {
                   "wallet_name": {
                     "type": "string",
-                    "enum": ["apple_pay"]
+                    "enum": [
+                      "apple_pay"
+                    ]
                   }
                 }
               }
@@ -6934,7 +7795,9 @@
         "oneOf": [
           {
             "type": "object",
-            "required": ["ali_pay"],
+            "required": [
+              "ali_pay"
+            ],
             "properties": {
               "ali_pay": {
                 "$ref": "#/components/schemas/AliPayRedirection"
@@ -6943,7 +7806,9 @@
           },
           {
             "type": "object",
-            "required": ["apple_pay"],
+            "required": [
+              "apple_pay"
+            ],
             "properties": {
               "apple_pay": {
                 "$ref": "#/components/schemas/ApplePayWalletData"
@@ -6952,7 +7817,9 @@
           },
           {
             "type": "object",
-            "required": ["google_pay"],
+            "required": [
+              "google_pay"
+            ],
             "properties": {
               "google_pay": {
                 "$ref": "#/components/schemas/GooglePayWalletData"
@@ -6961,7 +7828,9 @@
           },
           {
             "type": "object",
-            "required": ["mb_way"],
+            "required": [
+              "mb_way"
+            ],
             "properties": {
               "mb_way": {
                 "$ref": "#/components/schemas/MbWayRedirection"
@@ -6970,7 +7839,9 @@
           },
           {
             "type": "object",
-            "required": ["mobile_pay"],
+            "required": [
+              "mobile_pay"
+            ],
             "properties": {
               "mobile_pay": {
                 "$ref": "#/components/schemas/MobilePayRedirection"
@@ -6979,7 +7850,9 @@
           },
           {
             "type": "object",
-            "required": ["paypal_redirect"],
+            "required": [
+              "paypal_redirect"
+            ],
             "properties": {
               "paypal_redirect": {
                 "$ref": "#/components/schemas/PaypalRedirection"
@@ -6988,7 +7861,9 @@
           },
           {
             "type": "object",
-            "required": ["paypal_sdk"],
+            "required": [
+              "paypal_sdk"
+            ],
             "properties": {
               "paypal_sdk": {
                 "$ref": "#/components/schemas/PayPalWalletData"
@@ -6997,7 +7872,9 @@
           },
           {
             "type": "object",
-            "required": ["we_chat_pay_redirect"],
+            "required": [
+              "we_chat_pay_redirect"
+            ],
             "properties": {
               "we_chat_pay_redirect": {
                 "$ref": "#/components/schemas/WeChatPayRedirection"
@@ -7121,4 +7998,4 @@
       "description": "Manage disputes"
     }
   ]
-}
+}
\ No newline at end of file

## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [x] New feature
- [x] CI/CD

## Description
<!-- Describe your changes in detail -->
This PR adds a new workflow in the CI pipeline to validate the generated openAPI spec file(`openapi_spec.json`). It utilizes the [Swagger CLI](https://apitools.dev/swagger-cli/) to do so. Also, it changes the name of the openAPI spec file from `generated.json` to `openapi_spec.json` 

## Motivation and Context
<!--
Why is this change required? What problem does it solve?
If it fixes an open issue, please link to the issue here.

If you don't have an issue, we'd recommend starting with one first so the PR
can focus on the implementation (unless its an obvious bug or documentation fix
that will have little conversation).
-->
This PR resolves [this](https://github.com/juspay/hyperswitch/issues/1296) issue.

## How did you test it?
<!--
Did you write an integration/unit/API test to verify the code changes?
Or did you test this change manually (provide relevant screenshots)?
-->
I tested it locally using [ACT](https://github.com/nektos/act).

## Checklist
<!-- Put an `x` in the boxes that apply -->

- [x] I formatted the code `cargo +nightly fmt --all`
- [x] I addressed lints thrown by `cargo clippy`
- [x] I reviewed submitted code