@atbas/m-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +364 -0
  3. package/dist/builder/transaction-builder.d.ts +53 -0
  4. package/dist/builder/transaction-builder.d.ts.map +1 -0
  5. package/dist/builder/transaction-builder.js +159 -0
  6. package/dist/builder/transaction-builder.js.map +1 -0
  7. package/dist/catalogue/default-catalogue.d.ts +18 -0
  8. package/dist/catalogue/default-catalogue.d.ts.map +1 -0
  9. package/dist/catalogue/default-catalogue.js +21 -0
  10. package/dist/catalogue/default-catalogue.js.map +1 -0
  11. package/dist/catalogue/endpoints.d.ts +22 -0
  12. package/dist/catalogue/endpoints.d.ts.map +1 -0
  13. package/dist/catalogue/endpoints.js +24 -0
  14. package/dist/catalogue/endpoints.js.map +1 -0
  15. package/dist/catalogue/flows.d.ts +32 -0
  16. package/dist/catalogue/flows.d.ts.map +1 -0
  17. package/dist/catalogue/flows.js +64 -0
  18. package/dist/catalogue/flows.js.map +1 -0
  19. package/dist/catalogue/hash-options.d.ts +112 -0
  20. package/dist/catalogue/hash-options.d.ts.map +1 -0
  21. package/dist/catalogue/hash-options.js +151 -0
  22. package/dist/catalogue/hash-options.js.map +1 -0
  23. package/dist/catalogue/types.d.ts +279 -0
  24. package/dist/catalogue/types.d.ts.map +1 -0
  25. package/dist/catalogue/types.js +360 -0
  26. package/dist/catalogue/types.js.map +1 -0
  27. package/dist/codegen/generate.d.ts +14 -0
  28. package/dist/codegen/generate.d.ts.map +1 -0
  29. package/dist/codegen/generate.js +490 -0
  30. package/dist/codegen/generate.js.map +1 -0
  31. package/dist/codegen/languages/node.d.ts +3 -0
  32. package/dist/codegen/languages/node.d.ts.map +1 -0
  33. package/dist/codegen/languages/node.js +32 -0
  34. package/dist/codegen/languages/node.js.map +1 -0
  35. package/dist/codegen/languages/php.d.ts +3 -0
  36. package/dist/codegen/languages/php.d.ts.map +1 -0
  37. package/dist/codegen/languages/php.js +27 -0
  38. package/dist/codegen/languages/php.js.map +1 -0
  39. package/dist/codegen/languages/python.d.ts +3 -0
  40. package/dist/codegen/languages/python.d.ts.map +1 -0
  41. package/dist/codegen/languages/python.js +27 -0
  42. package/dist/codegen/languages/python.js.map +1 -0
  43. package/dist/codegen/renderer.d.ts +24 -0
  44. package/dist/codegen/renderer.d.ts.map +1 -0
  45. package/dist/codegen/renderer.js +59 -0
  46. package/dist/codegen/renderer.js.map +1 -0
  47. package/dist/codegen/types.d.ts +50 -0
  48. package/dist/codegen/types.d.ts.map +1 -0
  49. package/dist/codegen/types.js +5 -0
  50. package/dist/codegen/types.js.map +1 -0
  51. package/dist/config/credentials.d.ts +64 -0
  52. package/dist/config/credentials.d.ts.map +1 -0
  53. package/dist/config/credentials.js +216 -0
  54. package/dist/config/credentials.js.map +1 -0
  55. package/dist/config/environment.d.ts +23 -0
  56. package/dist/config/environment.d.ts.map +1 -0
  57. package/dist/config/environment.js +54 -0
  58. package/dist/config/environment.js.map +1 -0
  59. package/dist/core/dependencies.d.ts +43 -0
  60. package/dist/core/dependencies.d.ts.map +1 -0
  61. package/dist/core/dependencies.js +2 -0
  62. package/dist/core/dependencies.js.map +1 -0
  63. package/dist/core/registry.d.ts +33 -0
  64. package/dist/core/registry.d.ts.map +1 -0
  65. package/dist/core/registry.js +13 -0
  66. package/dist/core/registry.js.map +1 -0
  67. package/dist/core/server.d.ts +61 -0
  68. package/dist/core/server.d.ts.map +1 -0
  69. package/dist/core/server.js +90 -0
  70. package/dist/core/server.js.map +1 -0
  71. package/dist/dependencies.d.ts +28 -0
  72. package/dist/dependencies.d.ts.map +1 -0
  73. package/dist/dependencies.js +2 -0
  74. package/dist/dependencies.js.map +1 -0
  75. package/dist/diagnostics/diagnose.d.ts +43 -0
  76. package/dist/diagnostics/diagnose.d.ts.map +1 -0
  77. package/dist/diagnostics/diagnose.js +121 -0
  78. package/dist/diagnostics/diagnose.js.map +1 -0
  79. package/dist/domain/amount.d.ts +157 -0
  80. package/dist/domain/amount.d.ts.map +1 -0
  81. package/dist/domain/amount.js +275 -0
  82. package/dist/domain/amount.js.map +1 -0
  83. package/dist/domain/datetime.d.ts +95 -0
  84. package/dist/domain/datetime.d.ts.map +1 -0
  85. package/dist/domain/datetime.js +211 -0
  86. package/dist/domain/datetime.js.map +1 -0
  87. package/dist/domain/response-codes.d.ts +116 -0
  88. package/dist/domain/response-codes.d.ts.map +1 -0
  89. package/dist/domain/response-codes.js +380 -0
  90. package/dist/domain/response-codes.js.map +1 -0
  91. package/dist/domain/secure-hash.d.ts +78 -0
  92. package/dist/domain/secure-hash.d.ts.map +1 -0
  93. package/dist/domain/secure-hash.js +69 -0
  94. package/dist/domain/secure-hash.js.map +1 -0
  95. package/dist/domain/signature/jazzcash.d.ts +56 -0
  96. package/dist/domain/signature/jazzcash.d.ts.map +1 -0
  97. package/dist/domain/signature/jazzcash.js +214 -0
  98. package/dist/domain/signature/jazzcash.js.map +1 -0
  99. package/dist/domain/signature/registry.d.ts +69 -0
  100. package/dist/domain/signature/registry.d.ts.map +1 -0
  101. package/dist/domain/signature/registry.js +92 -0
  102. package/dist/domain/signature/registry.js.map +1 -0
  103. package/dist/domain/signature/scheme.d.ts +349 -0
  104. package/dist/domain/signature/scheme.d.ts.map +1 -0
  105. package/dist/domain/signature/scheme.js +398 -0
  106. package/dist/domain/signature/scheme.js.map +1 -0
  107. package/dist/domain/txn-ref.d.ts +76 -0
  108. package/dist/domain/txn-ref.d.ts.map +1 -0
  109. package/dist/domain/txn-ref.js +126 -0
  110. package/dist/domain/txn-ref.js.map +1 -0
  111. package/dist/domain/types.d.ts +45 -0
  112. package/dist/domain/types.d.ts.map +1 -0
  113. package/dist/domain/types.js +70 -0
  114. package/dist/domain/types.js.map +1 -0
  115. package/dist/errors.d.ts +84 -0
  116. package/dist/errors.d.ts.map +1 -0
  117. package/dist/errors.js +87 -0
  118. package/dist/errors.js.map +1 -0
  119. package/dist/gateway/checkout-form.d.ts +16 -0
  120. package/dist/gateway/checkout-form.d.ts.map +1 -0
  121. package/dist/gateway/checkout-form.js +103 -0
  122. package/dist/gateway/checkout-form.js.map +1 -0
  123. package/dist/gateway/checkout-output.d.ts +70 -0
  124. package/dist/gateway/checkout-output.d.ts.map +1 -0
  125. package/dist/gateway/checkout-output.js +199 -0
  126. package/dist/gateway/checkout-output.js.map +1 -0
  127. package/dist/gateway/guards.d.ts +37 -0
  128. package/dist/gateway/guards.d.ts.map +1 -0
  129. package/dist/gateway/guards.js +44 -0
  130. package/dist/gateway/guards.js.map +1 -0
  131. package/dist/gateway/http-client.d.ts +42 -0
  132. package/dist/gateway/http-client.d.ts.map +1 -0
  133. package/dist/gateway/http-client.js +153 -0
  134. package/dist/gateway/http-client.js.map +1 -0
  135. package/dist/gateway/rest-client.d.ts +42 -0
  136. package/dist/gateway/rest-client.d.ts.map +1 -0
  137. package/dist/gateway/rest-client.js +241 -0
  138. package/dist/gateway/rest-client.js.map +1 -0
  139. package/dist/gateway/transport.d.ts +31 -0
  140. package/dist/gateway/transport.d.ts.map +1 -0
  141. package/dist/gateway/transport.js +73 -0
  142. package/dist/gateway/transport.js.map +1 -0
  143. package/dist/index.d.ts +3 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +75 -0
  146. package/dist/index.js.map +1 -0
  147. package/dist/install/cli.d.ts +38 -0
  148. package/dist/install/cli.d.ts.map +1 -0
  149. package/dist/install/cli.js +274 -0
  150. package/dist/install/cli.js.map +1 -0
  151. package/dist/install/harnesses.d.ts +74 -0
  152. package/dist/install/harnesses.d.ts.map +1 -0
  153. package/dist/install/harnesses.js +263 -0
  154. package/dist/install/harnesses.js.map +1 -0
  155. package/dist/knowledge/corpus.d.ts +15 -0
  156. package/dist/knowledge/corpus.d.ts.map +1 -0
  157. package/dist/knowledge/corpus.js +129 -0
  158. package/dist/knowledge/corpus.js.map +1 -0
  159. package/dist/knowledge/search.d.ts +29 -0
  160. package/dist/knowledge/search.d.ts.map +1 -0
  161. package/dist/knowledge/search.js +181 -0
  162. package/dist/knowledge/search.js.map +1 -0
  163. package/dist/knowledge/source.d.ts +60 -0
  164. package/dist/knowledge/source.d.ts.map +1 -0
  165. package/dist/knowledge/source.js +91 -0
  166. package/dist/knowledge/source.js.map +1 -0
  167. package/dist/knowledge/types.d.ts +40 -0
  168. package/dist/knowledge/types.d.ts.map +1 -0
  169. package/dist/knowledge/types.js +19 -0
  170. package/dist/knowledge/types.js.map +1 -0
  171. package/dist/paths.d.ts +26 -0
  172. package/dist/paths.d.ts.map +1 -0
  173. package/dist/paths.js +106 -0
  174. package/dist/paths.js.map +1 -0
  175. package/dist/prompts/integration-walkthrough.d.ts +11 -0
  176. package/dist/prompts/integration-walkthrough.d.ts.map +1 -0
  177. package/dist/prompts/integration-walkthrough.js +52 -0
  178. package/dist/prompts/integration-walkthrough.js.map +1 -0
  179. package/dist/prompts/register.d.ts +4 -0
  180. package/dist/prompts/register.d.ts.map +1 -0
  181. package/dist/prompts/register.js +4 -0
  182. package/dist/prompts/register.js.map +1 -0
  183. package/dist/registry.d.ts +14 -0
  184. package/dist/registry.d.ts.map +1 -0
  185. package/dist/registry.js +2 -0
  186. package/dist/registry.js.map +1 -0
  187. package/dist/resources/knowledge-resources.d.ts +5 -0
  188. package/dist/resources/knowledge-resources.d.ts.map +1 -0
  189. package/dist/resources/knowledge-resources.js +121 -0
  190. package/dist/resources/knowledge-resources.js.map +1 -0
  191. package/dist/resources/register.d.ts +4 -0
  192. package/dist/resources/register.d.ts.map +1 -0
  193. package/dist/resources/register.js +8 -0
  194. package/dist/resources/register.js.map +1 -0
  195. package/dist/server.d.ts +40 -0
  196. package/dist/server.d.ts.map +1 -0
  197. package/dist/server.js +56 -0
  198. package/dist/server.js.map +1 -0
  199. package/dist/telemetry/logger.d.ts +31 -0
  200. package/dist/telemetry/logger.d.ts.map +1 -0
  201. package/dist/telemetry/logger.js +67 -0
  202. package/dist/telemetry/logger.js.map +1 -0
  203. package/dist/telemetry/redaction.d.ts +88 -0
  204. package/dist/telemetry/redaction.d.ts.map +1 -0
  205. package/dist/telemetry/redaction.js +238 -0
  206. package/dist/telemetry/redaction.js.map +1 -0
  207. package/dist/tools/build-transaction-parameters.d.ts +10 -0
  208. package/dist/tools/build-transaction-parameters.d.ts.map +1 -0
  209. package/dist/tools/build-transaction-parameters.js +154 -0
  210. package/dist/tools/build-transaction-parameters.js.map +1 -0
  211. package/dist/tools/call-context.d.ts +47 -0
  212. package/dist/tools/call-context.d.ts.map +1 -0
  213. package/dist/tools/call-context.js +15 -0
  214. package/dist/tools/call-context.js.map +1 -0
  215. package/dist/tools/codegen-tools.d.ts +4 -0
  216. package/dist/tools/codegen-tools.d.ts.map +1 -0
  217. package/dist/tools/codegen-tools.js +131 -0
  218. package/dist/tools/codegen-tools.js.map +1 -0
  219. package/dist/tools/credential-tools.d.ts +32 -0
  220. package/dist/tools/credential-tools.d.ts.map +1 -0
  221. package/dist/tools/credential-tools.js +65 -0
  222. package/dist/tools/credential-tools.js.map +1 -0
  223. package/dist/tools/descriptor.d.ts +52 -0
  224. package/dist/tools/descriptor.d.ts.map +1 -0
  225. package/dist/tools/descriptor.js +2 -0
  226. package/dist/tools/descriptor.js.map +1 -0
  227. package/dist/tools/diagnostic-tools.d.ts +3 -0
  228. package/dist/tools/diagnostic-tools.d.ts.map +1 -0
  229. package/dist/tools/diagnostic-tools.js +128 -0
  230. package/dist/tools/diagnostic-tools.js.map +1 -0
  231. package/dist/tools/gateway-tools.d.ts +6 -0
  232. package/dist/tools/gateway-tools.d.ts.map +1 -0
  233. package/dist/tools/gateway-tools.js +381 -0
  234. package/dist/tools/gateway-tools.js.map +1 -0
  235. package/dist/tools/hash-tools.d.ts +5 -0
  236. package/dist/tools/hash-tools.d.ts.map +1 -0
  237. package/dist/tools/hash-tools.js +238 -0
  238. package/dist/tools/hash-tools.js.map +1 -0
  239. package/dist/tools/knowledge-tools.d.ts +7 -0
  240. package/dist/tools/knowledge-tools.d.ts.map +1 -0
  241. package/dist/tools/knowledge-tools.js +247 -0
  242. package/dist/tools/knowledge-tools.js.map +1 -0
  243. package/dist/tools/onboarding-checklist.d.ts +3 -0
  244. package/dist/tools/onboarding-checklist.d.ts.map +1 -0
  245. package/dist/tools/onboarding-checklist.js +141 -0
  246. package/dist/tools/onboarding-checklist.js.map +1 -0
  247. package/dist/tools/register.d.ts +60 -0
  248. package/dist/tools/register.d.ts.map +1 -0
  249. package/dist/tools/register.js +145 -0
  250. package/dist/tools/register.js.map +1 -0
  251. package/dist/tools/tool-kit.d.ts +88 -0
  252. package/dist/tools/tool-kit.d.ts.map +1 -0
  253. package/dist/tools/tool-kit.js +297 -0
  254. package/dist/tools/tool-kit.js.map +1 -0
  255. package/dist/validation/payload-validator.d.ts +29 -0
  256. package/dist/validation/payload-validator.d.ts.map +1 -0
  257. package/dist/validation/payload-validator.js +79 -0
  258. package/dist/validation/payload-validator.js.map +1 -0
  259. package/dist/validation/rules/amount.d.ts +3 -0
  260. package/dist/validation/rules/amount.d.ts.map +1 -0
  261. package/dist/validation/rules/amount.js +77 -0
  262. package/dist/validation/rules/amount.js.map +1 -0
  263. package/dist/validation/rules/bill-reference.d.ts +10 -0
  264. package/dist/validation/rules/bill-reference.d.ts.map +1 -0
  265. package/dist/validation/rules/bill-reference.js +34 -0
  266. package/dist/validation/rules/bill-reference.js.map +1 -0
  267. package/dist/validation/rules/cnic.d.ts +3 -0
  268. package/dist/validation/rules/cnic.d.ts.map +1 -0
  269. package/dist/validation/rules/cnic.js +42 -0
  270. package/dist/validation/rules/cnic.js.map +1 -0
  271. package/dist/validation/rules/constants.d.ts +9 -0
  272. package/dist/validation/rules/constants.d.ts.map +1 -0
  273. package/dist/validation/rules/constants.js +28 -0
  274. package/dist/validation/rules/constants.js.map +1 -0
  275. package/dist/validation/rules/constraints.d.ts +3 -0
  276. package/dist/validation/rules/constraints.d.ts.map +1 -0
  277. package/dist/validation/rules/constraints.js +113 -0
  278. package/dist/validation/rules/constraints.js.map +1 -0
  279. package/dist/validation/rules/datetime.d.ts +3 -0
  280. package/dist/validation/rules/datetime.d.ts.map +1 -0
  281. package/dist/validation/rules/datetime.js +49 -0
  282. package/dist/validation/rules/datetime.js.map +1 -0
  283. package/dist/validation/rules/empty-string.d.ts +13 -0
  284. package/dist/validation/rules/empty-string.d.ts.map +1 -0
  285. package/dist/validation/rules/empty-string.js +32 -0
  286. package/dist/validation/rules/empty-string.js.map +1 -0
  287. package/dist/validation/rules/expiry.d.ts +3 -0
  288. package/dist/validation/rules/expiry.d.ts.map +1 -0
  289. package/dist/validation/rules/expiry.js +52 -0
  290. package/dist/validation/rules/expiry.js.map +1 -0
  291. package/dist/validation/rules/msisdn.d.ts +3 -0
  292. package/dist/validation/rules/msisdn.d.ts.map +1 -0
  293. package/dist/validation/rules/msisdn.js +45 -0
  294. package/dist/validation/rules/msisdn.js.map +1 -0
  295. package/dist/validation/rules/presence.d.ts +3 -0
  296. package/dist/validation/rules/presence.d.ts.map +1 -0
  297. package/dist/validation/rules/presence.js +90 -0
  298. package/dist/validation/rules/presence.js.map +1 -0
  299. package/dist/validation/rules/return-url.d.ts +14 -0
  300. package/dist/validation/rules/return-url.d.ts.map +1 -0
  301. package/dist/validation/rules/return-url.js +58 -0
  302. package/dist/validation/rules/return-url.js.map +1 -0
  303. package/dist/validation/rules/tool-argument.d.ts +16 -0
  304. package/dist/validation/rules/tool-argument.d.ts.map +1 -0
  305. package/dist/validation/rules/tool-argument.js +38 -0
  306. package/dist/validation/rules/tool-argument.js.map +1 -0
  307. package/dist/validation/rules/txn-ref.d.ts +3 -0
  308. package/dist/validation/rules/txn-ref.d.ts.map +1 -0
  309. package/dist/validation/rules/txn-ref.js +47 -0
  310. package/dist/validation/rules/txn-ref.js.map +1 -0
  311. package/dist/validation/rules/unknown-fields.d.ts +10 -0
  312. package/dist/validation/rules/unknown-fields.d.ts.map +1 -0
  313. package/dist/validation/rules/unknown-fields.js +29 -0
  314. package/dist/validation/rules/unknown-fields.js.map +1 -0
  315. package/dist/validation/types.d.ts +36 -0
  316. package/dist/validation/types.d.ts.map +1 -0
  317. package/dist/validation/types.js +12 -0
  318. package/dist/validation/types.js.map +1 -0
  319. package/dist/version.d.ts +23 -0
  320. package/dist/version.d.ts.map +1 -0
  321. package/dist/version.js +23 -0
  322. package/dist/version.js.map +1 -0
  323. package/knowledge/diagnostics/symptoms.json +321 -0
  324. package/knowledge/docs/bnpl-guide.md +77 -0
  325. package/knowledge/docs/card-page-redirection.md +67 -0
  326. package/knowledge/docs/card-refund.md +91 -0
  327. package/knowledge/docs/hmac-sha256-calculation.md +72 -0
  328. package/knowledge/docs/index.json +189 -0
  329. package/knowledge/docs/ipn-implementation.md +89 -0
  330. package/knowledge/docs/mwallet-recurring.md +117 -0
  331. package/knowledge/docs/mwallet-refund.md +65 -0
  332. package/knowledge/docs/mwallet-rest-v1-1.md +126 -0
  333. package/knowledge/docs/mwallet-rest-v2-0-cnic.md +113 -0
  334. package/knowledge/docs/portal-guide.md +45 -0
  335. package/knowledge/docs/shopify-guide.md +74 -0
  336. package/knowledge/docs/status-inquiry-2025-26.md +32 -0
  337. package/knowledge/docs/status-inquiry.md +111 -0
  338. package/knowledge/docs/wordpress-guide.md +49 -0
  339. package/knowledge/flow.schema.json +390 -0
  340. package/knowledge/flows/bnpl-page-redirection-v1.1.json +211 -0
  341. package/knowledge/flows/card-page-redirection-v1.1.json +211 -0
  342. package/knowledge/flows/mwallet-rest-v1.1.json +187 -0
  343. package/knowledge/flows/mwallet-rest-v2.0-cnic.json +197 -0
  344. package/knowledge/flows/mwallet-token-pay-v4.0.json +130 -0
  345. package/knowledge/flows/refund-bnpl.json +105 -0
  346. package/knowledge/flows/refund-card-v1.1.json +112 -0
  347. package/knowledge/flows/refund-card-v2.0.json +121 -0
  348. package/knowledge/flows/refund-mwallet-v1.1.json +106 -0
  349. package/knowledge/flows/status-inquiry-v1.1.json +102 -0
  350. package/knowledge/flows/status-inquiry-v2.0.json +103 -0
  351. package/knowledge/flows/token-delete-v1.json +85 -0
  352. package/knowledge/flows/token-inquiry-v1.json +85 -0
  353. package/knowledge/flows/wallet-linking-portal.json +103 -0
  354. package/knowledge/templates/node/checkout-redirect.tmpl +166 -0
  355. package/knowledge/templates/node/ipn-handler.tmpl +108 -0
  356. package/knowledge/templates/node/rest-client.tmpl +197 -0
  357. package/knowledge/templates/node/wallet-linking.tmpl +147 -0
  358. package/knowledge/templates/php/checkout-redirect.tmpl +149 -0
  359. package/knowledge/templates/php/ipn-handler.tmpl +105 -0
  360. package/knowledge/templates/php/rest-client.tmpl +191 -0
  361. package/knowledge/templates/php/wallet-linking.tmpl +137 -0
  362. package/knowledge/templates/python/checkout-redirect.tmpl +148 -0
  363. package/knowledge/templates/python/ipn-handler.tmpl +110 -0
  364. package/knowledge/templates/python/rest-client.tmpl +179 -0
  365. package/knowledge/templates/python/wallet-linking.tmpl +133 -0
  366. package/package.json +84 -0
@@ -0,0 +1,197 @@
1
+ {
2
+ "id": "mwallet-rest-v2.0-cnic",
3
+ "title": "MWallet REST API v2.0 (with CNIC)",
4
+ "provider": "jazzcash",
5
+ "product": "mwallet",
6
+ "version": "2.0",
7
+ "transport": "rest",
8
+ "summary": "Server-to-server mobile account debit with CNIC verification.",
9
+ "useWhen": "You want to charge a JazzCash mobile wallet and your account is enabled for CNIC verification.",
10
+ "endpoints": {
11
+ "sandbox": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v2/rest/payments/m-wallet",
12
+ "production": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v2/rest/payments/m-wallet"
13
+ },
14
+ "sameEndpointForBothEnvironments": true,
15
+ "movesMoney": true,
16
+ "responseContext": "payment",
17
+ "constants": {
18
+ "pp_Language": "EN",
19
+ "pp_TxnCurrency": "PKR"
20
+ },
21
+ "parameters": [
22
+ {
23
+ "name": "pp_Amount",
24
+ "requirement": "mandatory",
25
+ "valueType": "minor-units",
26
+ "notes": "Minor units. Multiply the order total by 100: PKR 100.00 is sent as \"10000\"."
27
+ },
28
+ {
29
+ "name": "pp_BankID",
30
+ "requirement": "must-be-empty",
31
+ "valueType": "string",
32
+ "notes": "Send as \"\". Do not use null and do not omit it."
33
+ },
34
+ {
35
+ "name": "pp_BillReference",
36
+ "requirement": "mandatory",
37
+ "valueType": "bill-reference",
38
+ "notes": "Alphanumeric only. May repeat across transactions."
39
+ },
40
+ {
41
+ "name": "pp_CNIC",
42
+ "requirement": "mandatory",
43
+ "valueType": "cnic",
44
+ "notes": "Last six digits of the customer's CNIC.",
45
+ "sensitive": true
46
+ },
47
+ {
48
+ "name": "pp_Description",
49
+ "requirement": "mandatory",
50
+ "valueType": "string",
51
+ "notes": "Product or order description."
52
+ },
53
+ {
54
+ "name": "pp_Language",
55
+ "requirement": "mandatory",
56
+ "valueType": "constant",
57
+ "notes": "Constant. Must not be modified.",
58
+ "constantValue": "EN"
59
+ },
60
+ {
61
+ "name": "pp_MerchantID",
62
+ "requirement": "mandatory",
63
+ "valueType": "string",
64
+ "notes": "From Integration > Credentials in the merchant portal."
65
+ },
66
+ {
67
+ "name": "pp_MobileNumber",
68
+ "requirement": "mandatory",
69
+ "valueType": "msisdn",
70
+ "notes": "The customer's JazzCash mobile account number.",
71
+ "sensitive": true
72
+ },
73
+ {
74
+ "name": "pp_Password",
75
+ "requirement": "mandatory",
76
+ "valueType": "string",
77
+ "notes": "From Integration > Credentials. Never render this into client-side code.",
78
+ "sensitive": true
79
+ },
80
+ {
81
+ "name": "pp_ProductID",
82
+ "requirement": "must-be-empty",
83
+ "valueType": "string",
84
+ "notes": "Send as \"\". Do not use null and do not omit it."
85
+ },
86
+ {
87
+ "name": "pp_SecureHash",
88
+ "requirement": "mandatory",
89
+ "valueType": "secure-hash",
90
+ "notes": "HMAC-SHA256 over the sorted non-empty values, prefixed by the Integrity Salt. Excluded from its own input."
91
+ },
92
+ {
93
+ "name": "pp_SubMerchantID",
94
+ "requirement": "must-be-empty",
95
+ "valueType": "string",
96
+ "notes": "Send as \"\". Do not use null and do not omit it."
97
+ },
98
+ {
99
+ "name": "pp_TxnCurrency",
100
+ "requirement": "mandatory",
101
+ "valueType": "constant",
102
+ "notes": "The gateway processes PKR only and performs no conversion.",
103
+ "constantValue": "PKR"
104
+ },
105
+ {
106
+ "name": "pp_TxnDateTime",
107
+ "requirement": "mandatory",
108
+ "valueType": "pkt-datetime",
109
+ "notes": "YYYYMMDDHHMMSS in Pakistan Standard Time."
110
+ },
111
+ {
112
+ "name": "pp_TxnExpiryDateTime",
113
+ "requirement": "mandatory",
114
+ "valueType": "pkt-expiry",
115
+ "notes": "YYYYMMDDHHMMSS in Pakistan Standard Time, one day after pp_TxnDateTime."
116
+ },
117
+ {
118
+ "name": "pp_TxnRefNo",
119
+ "requirement": "mandatory",
120
+ "valueType": "txn-ref",
121
+ "notes": "Unique for every transaction. Recommended shape: three-letter merchant prefix followed by YYYYMMDDHHMMSS.",
122
+ "maxLength": 20
123
+ },
124
+ {
125
+ "name": "ppmpf_1",
126
+ "requirement": "must-be-empty",
127
+ "valueType": "string",
128
+ "notes": "Leave empty."
129
+ },
130
+ {
131
+ "name": "ppmpf_2",
132
+ "requirement": "must-be-empty",
133
+ "valueType": "string",
134
+ "notes": "Leave empty."
135
+ },
136
+ {
137
+ "name": "ppmpf_3",
138
+ "requirement": "must-be-empty",
139
+ "valueType": "string",
140
+ "notes": "Leave empty."
141
+ },
142
+ {
143
+ "name": "ppmpf_4",
144
+ "requirement": "must-be-empty",
145
+ "valueType": "string",
146
+ "notes": "Leave empty."
147
+ },
148
+ {
149
+ "name": "ppmpf_5",
150
+ "requirement": "must-be-empty",
151
+ "valueType": "string",
152
+ "notes": "Leave empty."
153
+ }
154
+ ],
155
+ "hash": {
156
+ "algorithm": "hmac-sha256",
157
+ "includeFieldPrefixes": ["pp_", "ppmpf_"],
158
+ "excludeFields": ["pp_SecureHash", "SecureHash"],
159
+ "outputEncoding": "hex-lowercase",
160
+ "comparison": "case-insensitive"
161
+ },
162
+ "response": {
163
+ "hashField": "pp_SecureHash",
164
+ "hashFieldPrefixes": [],
165
+ "successField": "pp_ResponseCode",
166
+ "successValue": "000",
167
+ "messageField": "pp_ResponseMessage",
168
+ "hashVerification": "assumed-all-non-empty",
169
+ "notableFields": ["pp_ResponseCode", "pp_ResponseMessage", "pp_AuthCode", "pp_RetreivalReferenceNo"]
170
+ },
171
+ "companionFlows": ["status-inquiry-v2.0", "refund-mwallet-v1.1"],
172
+ "docRefs": [
173
+ {
174
+ "docId": "mwallet-rest-v2-0-cnic",
175
+ "sectionId": "implementation-notes",
176
+ "label": "MWallet API v2.0 (With CNIC) Merchant Guide, 2026"
177
+ },
178
+ {
179
+ "docId": "hmac-sha256-calculation",
180
+ "sectionId": "how-is-hmac-sha256-calculated"
181
+ }
182
+ ],
183
+ "knownIssues": [
184
+ {
185
+ "id": "identical-sandbox-and-production-endpoint",
186
+ "summary": "Sandbox and production use the same URL",
187
+ "detail": "The guide lists an identical endpoint for both environments, so the URL carries no information about which environment a request reaches. The environment is determined entirely by the credentials.",
188
+ "guidance": "Declare the environment explicitly on every call and cross-check it against the credential profile in use. Never infer it from the endpoint."
189
+ },
190
+ {
191
+ "id": "v2-request-omits-version-and-txntype",
192
+ "summary": "The v2.0 request sample carries neither pp_Version nor pp_TxnType",
193
+ "detail": "Unlike v1.1, the documented v2.0 request payload omits both fields; the response echoes them back as empty strings.",
194
+ "guidance": "Send exactly the documented field set. Adding pp_Version or pp_TxnType would change the hash and breaks the guide's rule that no parameters may be added."
195
+ }
196
+ ]
197
+ }
@@ -0,0 +1,130 @@
1
+ {
2
+ "id": "mwallet-token-pay-v4.0",
3
+ "title": "MWallet Pay via Token v4.0",
4
+ "provider": "jazzcash",
5
+ "product": "mwallet",
6
+ "version": "4.0",
7
+ "transport": "rest",
8
+ "summary": "Charge a previously linked mobile wallet using its payment token, without customer interaction.",
9
+ "useWhen": "You have linked a wallet through the Wallet Linking Portal and want to take a recurring payment.",
10
+ "endpoints": {
11
+ "sandbox": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v4/rest/payments/m-wallet",
12
+ "production": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v4/rest/payments/m-wallet"
13
+ },
14
+ "sameEndpointForBothEnvironments": true,
15
+ "movesMoney": true,
16
+ "responseContext": "payment",
17
+ "constants": {
18
+ "pp_TxnCurrency": "PKR"
19
+ },
20
+ "parameters": [
21
+ {
22
+ "name": "pp_MerchantID",
23
+ "requirement": "mandatory",
24
+ "valueType": "string",
25
+ "notes": "From Integration > Credentials in the merchant portal."
26
+ },
27
+ {
28
+ "name": "pp_Password",
29
+ "requirement": "mandatory",
30
+ "valueType": "string",
31
+ "notes": "From Integration > Credentials. Never render this into client-side code.",
32
+ "sensitive": true
33
+ },
34
+ {
35
+ "name": "pp_PaymentToken",
36
+ "requirement": "mandatory",
37
+ "valueType": "payment-token",
38
+ "notes": "Token returned by wallet linking or by the Token Inquiry API.",
39
+ "sensitive": true
40
+ },
41
+ {
42
+ "name": "pp_TxnRefNo",
43
+ "requirement": "mandatory",
44
+ "valueType": "txn-ref",
45
+ "notes": "Unique for every transaction. Recommended shape: three-letter merchant prefix followed by YYYYMMDDHHMMSS.",
46
+ "maxLength": 20
47
+ },
48
+ {
49
+ "name": "pp_Amount",
50
+ "requirement": "mandatory",
51
+ "valueType": "minor-units",
52
+ "notes": "Minor units. Multiply the order total by 100: PKR 100.00 is sent as \"10000\"."
53
+ },
54
+ {
55
+ "name": "pp_TxnCurrency",
56
+ "requirement": "mandatory",
57
+ "valueType": "constant",
58
+ "notes": "The gateway processes PKR only and performs no conversion.",
59
+ "constantValue": "PKR"
60
+ },
61
+ {
62
+ "name": "pp_TxnDateTime",
63
+ "requirement": "mandatory",
64
+ "valueType": "pkt-datetime",
65
+ "notes": "YYYYMMDDHHMMSS in Pakistan Standard Time."
66
+ },
67
+ {
68
+ "name": "pp_BillReference",
69
+ "requirement": "mandatory",
70
+ "valueType": "bill-reference",
71
+ "notes": "Alphanumeric only. May repeat across transactions."
72
+ },
73
+ {
74
+ "name": "pp_Description",
75
+ "requirement": "mandatory",
76
+ "valueType": "string",
77
+ "notes": "Product or order description."
78
+ },
79
+ {
80
+ "name": "pp_TxnExpiryDateTime",
81
+ "requirement": "mandatory",
82
+ "valueType": "pkt-expiry",
83
+ "notes": "YYYYMMDDHHMMSS in Pakistan Standard Time, one day after pp_TxnDateTime."
84
+ },
85
+ {
86
+ "name": "pp_SecureHash",
87
+ "requirement": "mandatory",
88
+ "valueType": "secure-hash",
89
+ "notes": "HMAC-SHA256 over the sorted non-empty values, prefixed by the Integrity Salt. Excluded from its own input."
90
+ }
91
+ ],
92
+ "hash": {
93
+ "algorithm": "hmac-sha256",
94
+ "includeFieldPrefixes": ["pp_", "ppmpf_"],
95
+ "excludeFields": ["pp_SecureHash", "SecureHash"],
96
+ "outputEncoding": "hex-lowercase",
97
+ "comparison": "case-insensitive"
98
+ },
99
+ "response": {
100
+ "hashField": "pp_SecureHash",
101
+ "hashFieldPrefixes": [],
102
+ "successField": "pp_ResponseCode",
103
+ "successValue": "000",
104
+ "messageField": "pp_ResponseMessage",
105
+ "hashVerification": "assumed-all-non-empty",
106
+ "notableFields": ["pp_ResponseCode", "pp_ResponseMessage", "pp_RetreivalReferenceNo", "pp_DiscountedAmount"]
107
+ },
108
+ "companionFlows": ["status-inquiry-v1.1", "token-inquiry-v1"],
109
+ "docRefs": [
110
+ {
111
+ "docId": "mwallet-recurring",
112
+ "sectionId": "mwallet-pay-via-token",
113
+ "label": "MWallet Recurring Payments (Linking & Payment), 2026"
114
+ }
115
+ ],
116
+ "knownIssues": [
117
+ {
118
+ "id": "identical-sandbox-and-production-endpoint",
119
+ "summary": "Sandbox and production use the same URL",
120
+ "detail": "The guide lists an identical endpoint for both environments, so the URL carries no information about which environment a request reaches. The environment is determined entirely by the credentials.",
121
+ "guidance": "Declare the environment explicitly on every call and cross-check it against the credential profile in use. Never infer it from the endpoint."
122
+ },
123
+ {
124
+ "id": "sample-expiry-precedes-transaction",
125
+ "summary": "The guide's sample has an expiry earlier than its transaction time",
126
+ "detail": "The sample request pairs pp_TxnDateTime 20251117153308 with pp_TxnExpiryDateTime 20250926003252, which is nearly two months earlier.",
127
+ "guidance": "Ignore the sample values. Set the expiry one day after the transaction time, as the shared rules require."
128
+ }
129
+ ]
130
+ }
@@ -0,0 +1,105 @@
1
+ {
2
+ "id": "refund-bnpl",
3
+ "title": "BNPL Refund API",
4
+ "provider": "jazzcash",
5
+ "product": "refund",
6
+ "version": "1.1",
7
+ "transport": "rest",
8
+ "summary": "Refund a completed BNPL transaction. Shares an endpoint with Card Refund v1.1 but documents a different payload.",
9
+ "useWhen": "A customer returns an order paid with Buy Now Pay Later.",
10
+ "endpoints": {
11
+ "sandbox": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/mpgs/authorize/refund",
12
+ "production": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/mpgs/authorize/refund"
13
+ },
14
+ "sameEndpointForBothEnvironments": true,
15
+ "movesMoney": true,
16
+ "responseContext": "refund",
17
+ "constants": {
18
+ "pp_TxnCurrency": "PKR"
19
+ },
20
+ "parameters": [
21
+ {
22
+ "name": "pp_TxnRefNo",
23
+ "requirement": "mandatory",
24
+ "valueType": "txn-ref",
25
+ "notes": "Unique for every transaction. Recommended shape: three-letter merchant prefix followed by YYYYMMDDHHMMSS.",
26
+ "maxLength": 20
27
+ },
28
+ {
29
+ "name": "pp_MerchantID",
30
+ "requirement": "mandatory",
31
+ "valueType": "string",
32
+ "notes": "From Integration > Credentials in the merchant portal."
33
+ },
34
+ {
35
+ "name": "pp_Password",
36
+ "requirement": "mandatory",
37
+ "valueType": "string",
38
+ "notes": "From Integration > Credentials. Never render this into client-side code.",
39
+ "sensitive": true
40
+ },
41
+ {
42
+ "name": "pp_SecureHash",
43
+ "requirement": "mandatory",
44
+ "valueType": "secure-hash",
45
+ "notes": "HMAC-SHA256 over the sorted non-empty values, prefixed by the Integrity Salt. Excluded from its own input."
46
+ },
47
+ {
48
+ "name": "pp_Amount",
49
+ "requirement": "mandatory",
50
+ "valueType": "minor-units",
51
+ "notes": "Minor units. Multiply the order total by 100: PKR 100.00 is sent as \"10000\"."
52
+ },
53
+ {
54
+ "name": "pp_TxnCurrency",
55
+ "requirement": "mandatory",
56
+ "valueType": "constant",
57
+ "notes": "The gateway processes PKR only and performs no conversion.",
58
+ "constantValue": "PKR"
59
+ }
60
+ ],
61
+ "hash": {
62
+ "algorithm": "hmac-sha256",
63
+ "includeFieldPrefixes": ["pp_", "ppmpf_"],
64
+ "excludeFields": ["pp_SecureHash", "SecureHash"],
65
+ "outputEncoding": "hex-lowercase",
66
+ "comparison": "case-insensitive"
67
+ },
68
+ "response": {
69
+ "hashField": "SecureHash",
70
+ "hashFieldPrefixes": [],
71
+ "successField": "ResponseCode",
72
+ "successValue": "000",
73
+ "messageField": "ResponseMessage",
74
+ "hashVerification": "assumed-all-non-empty",
75
+ "notableFields": ["ResponseCode", "ResponseMessage", "RefundAmount", "TotalRefundAmount"]
76
+ },
77
+ "companionFlows": ["status-inquiry-v1.1"],
78
+ "docRefs": [
79
+ {
80
+ "docId": "bnpl-guide",
81
+ "sectionId": "bnpl-refund-api",
82
+ "label": "JazzCash Buy Now Pay Later (BNPL) Guide, 2026"
83
+ }
84
+ ],
85
+ "knownIssues": [
86
+ {
87
+ "id": "identical-sandbox-and-production-endpoint",
88
+ "summary": "Sandbox and production use the same URL",
89
+ "detail": "The guide lists an identical endpoint for both environments, so the URL carries no information about which environment a request reaches. The environment is determined entirely by the credentials.",
90
+ "guidance": "Declare the environment explicitly on every call and cross-check it against the credential profile in use. Never infer it from the endpoint."
91
+ },
92
+ {
93
+ "id": "shares-endpoint-with-card-refund-v1-1",
94
+ "summary": "Identical endpoint to Card Refund v1.1, different documented payload",
95
+ "detail": "Both guides give /api/v1/rest/payments/mpgs/authorize/refund, but the BNPL sample omits pp_MerchantMPIN, which the card refund sample marks mandatory.",
96
+ "guidance": "Send the payload from the BNPL guide for a BNPL transaction. If the gateway rejects it, add pp_MerchantMPIN and report the documentation conflict to JazzCash."
97
+ },
98
+ {
99
+ "id": "response-uses-bare-securehash",
100
+ "summary": "The response returns SecureHash, not pp_SecureHash",
101
+ "detail": "BNPL refund responses use unprefixed ResponseCode, ResponseMessage and SecureHash.",
102
+ "guidance": "Read the bare field names when verifying a BNPL refund response."
103
+ }
104
+ ]
105
+ }
@@ -0,0 +1,112 @@
1
+ {
2
+ "id": "refund-card-v1.1",
3
+ "title": "Card Refund API v1.1",
4
+ "provider": "jazzcash",
5
+ "product": "refund",
6
+ "version": "1.1",
7
+ "transport": "rest",
8
+ "summary": "Refund a completed card transaction, in whole or in part.",
9
+ "useWhen": "A customer returns an order paid by card.",
10
+ "endpoints": {
11
+ "sandbox": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/mpgs/authorize/refund",
12
+ "production": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/mpgs/authorize/refund"
13
+ },
14
+ "sameEndpointForBothEnvironments": true,
15
+ "movesMoney": true,
16
+ "responseContext": "refund",
17
+ "constants": {
18
+ "pp_TxnCurrency": "PKR"
19
+ },
20
+ "parameters": [
21
+ {
22
+ "name": "pp_TxnRefNo",
23
+ "requirement": "mandatory",
24
+ "valueType": "txn-ref",
25
+ "notes": "Unique for every transaction. Recommended shape: three-letter merchant prefix followed by YYYYMMDDHHMMSS.",
26
+ "maxLength": 20
27
+ },
28
+ {
29
+ "name": "pp_Amount",
30
+ "requirement": "mandatory",
31
+ "valueType": "minor-units",
32
+ "notes": "Minor units. Multiply the order total by 100: PKR 100.00 is sent as \"10000\"."
33
+ },
34
+ {
35
+ "name": "pp_TxnCurrency",
36
+ "requirement": "mandatory",
37
+ "valueType": "constant",
38
+ "notes": "The gateway processes PKR only and performs no conversion.",
39
+ "constantValue": "PKR"
40
+ },
41
+ {
42
+ "name": "pp_MerchantID",
43
+ "requirement": "mandatory",
44
+ "valueType": "string",
45
+ "notes": "From Integration > Credentials in the merchant portal."
46
+ },
47
+ {
48
+ "name": "pp_Password",
49
+ "requirement": "mandatory",
50
+ "valueType": "string",
51
+ "notes": "From Integration > Credentials. Never render this into client-side code.",
52
+ "sensitive": true
53
+ },
54
+ {
55
+ "name": "pp_MerchantMPIN",
56
+ "requirement": "mandatory",
57
+ "valueType": "string",
58
+ "notes": "Merchant MPIN, saved in the merchant portal. Refunds fail until it is set.",
59
+ "sensitive": true
60
+ },
61
+ {
62
+ "name": "pp_SecureHash",
63
+ "requirement": "mandatory",
64
+ "valueType": "secure-hash",
65
+ "notes": "HMAC-SHA256 over the sorted non-empty values, prefixed by the Integrity Salt. Excluded from its own input."
66
+ }
67
+ ],
68
+ "hash": {
69
+ "algorithm": "hmac-sha256",
70
+ "includeFieldPrefixes": ["pp_", "ppmpf_"],
71
+ "excludeFields": ["pp_SecureHash", "SecureHash"],
72
+ "outputEncoding": "hex-lowercase",
73
+ "comparison": "case-insensitive"
74
+ },
75
+ "response": {
76
+ "hashField": "SecureHash",
77
+ "hashFieldPrefixes": [],
78
+ "successField": "ResponseCode",
79
+ "successValue": "000",
80
+ "messageField": "ResponseMessage",
81
+ "hashVerification": "assumed-all-non-empty",
82
+ "notableFields": ["ResponseCode", "ResponseMessage", "RefundAmount", "TotalRefundAmount"]
83
+ },
84
+ "companionFlows": ["status-inquiry-v1.1"],
85
+ "docRefs": [
86
+ {
87
+ "docId": "card-refund",
88
+ "sectionId": "rest-based-card-refund-api-v1-1",
89
+ "label": "Card Refund API, 2026"
90
+ }
91
+ ],
92
+ "knownIssues": [
93
+ {
94
+ "id": "identical-sandbox-and-production-endpoint",
95
+ "summary": "Sandbox and production use the same URL",
96
+ "detail": "The guide lists an identical endpoint for both environments, so the URL carries no information about which environment a request reaches. The environment is determined entirely by the credentials.",
97
+ "guidance": "Declare the environment explicitly on every call and cross-check it against the credential profile in use. Never infer it from the endpoint."
98
+ },
99
+ {
100
+ "id": "response-uses-bare-securehash",
101
+ "summary": "The response returns SecureHash, not pp_SecureHash",
102
+ "detail": "Card refund responses use unprefixed ResponseCode, ResponseMessage and SecureHash, unlike every other documented response.",
103
+ "guidance": "Read the bare field names when verifying a card refund response, or verification will be silently skipped."
104
+ },
105
+ {
106
+ "id": "mpin-must-be-saved-in-portal",
107
+ "summary": "Refunds fail until the MPIN is saved in the merchant portal",
108
+ "detail": "The Shopify guide notes that refunds require the MPIN to already be stored in the merchant portal, in addition to being sent in the request.",
109
+ "guidance": "Save the MPIN in the portal before the first refund attempt."
110
+ }
111
+ ]
112
+ }
@@ -0,0 +1,121 @@
1
+ {
2
+ "id": "refund-card-v2.0",
3
+ "title": "Card Refund API v2.0",
4
+ "provider": "jazzcash",
5
+ "product": "refund",
6
+ "version": "2.0",
7
+ "transport": "rest",
8
+ "summary": "Refund a completed card transaction, in whole or in part.",
9
+ "useWhen": "A customer returns an order paid by card.",
10
+ "endpoints": {
11
+ "sandbox": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/mpgs/v2.0/authorize/refund",
12
+ "production": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/mpgs/v2.0/authorize/refund"
13
+ },
14
+ "sameEndpointForBothEnvironments": true,
15
+ "movesMoney": true,
16
+ "responseContext": "refund",
17
+ "constants": {
18
+ "pp_TxnCurrency": "PKR"
19
+ },
20
+ "parameters": [
21
+ {
22
+ "name": "pp_TxnRefNo",
23
+ "requirement": "mandatory",
24
+ "valueType": "txn-ref",
25
+ "notes": "Unique for every transaction. Recommended shape: three-letter merchant prefix followed by YYYYMMDDHHMMSS.",
26
+ "maxLength": 20
27
+ },
28
+ {
29
+ "name": "pp_Amount",
30
+ "requirement": "mandatory",
31
+ "valueType": "minor-units",
32
+ "notes": "Minor units. Multiply the order total by 100: PKR 100.00 is sent as \"10000\"."
33
+ },
34
+ {
35
+ "name": "pp_TxnCurrency",
36
+ "requirement": "mandatory",
37
+ "valueType": "constant",
38
+ "notes": "The gateway processes PKR only and performs no conversion.",
39
+ "constantValue": "PKR"
40
+ },
41
+ {
42
+ "name": "pp_MerchantID",
43
+ "requirement": "mandatory",
44
+ "valueType": "string",
45
+ "notes": "From Integration > Credentials in the merchant portal."
46
+ },
47
+ {
48
+ "name": "pp_Password",
49
+ "requirement": "mandatory",
50
+ "valueType": "string",
51
+ "notes": "From Integration > Credentials. Never render this into client-side code.",
52
+ "sensitive": true
53
+ },
54
+ {
55
+ "name": "pp_MerchantMPIN",
56
+ "requirement": "mandatory",
57
+ "valueType": "string",
58
+ "notes": "Merchant MPIN, saved in the merchant portal. Refunds fail until it is set.",
59
+ "sensitive": true
60
+ },
61
+ {
62
+ "name": "pp_SecureHash",
63
+ "requirement": "mandatory",
64
+ "valueType": "secure-hash",
65
+ "notes": "HMAC-SHA256 over the sorted non-empty values, prefixed by the Integrity Salt. Excluded from its own input."
66
+ }
67
+ ],
68
+ "hash": {
69
+ "algorithm": "hmac-sha256",
70
+ "includeFieldPrefixes": ["pp_", "ppmpf_"],
71
+ "excludeFields": ["pp_SecureHash", "SecureHash"],
72
+ "outputEncoding": "hex-lowercase",
73
+ "comparison": "case-insensitive"
74
+ },
75
+ "response": {
76
+ "hashField": "SecureHash",
77
+ "hashFieldPrefixes": [],
78
+ "successField": "ResponseCode",
79
+ "successValue": "000",
80
+ "messageField": "ResponseMessage",
81
+ "hashVerification": "assumed-all-non-empty",
82
+ "notableFields": [
83
+ "ResponseCode",
84
+ "ResponseMessage",
85
+ "RefundAmount",
86
+ "TotalRefundAmount",
87
+ "RetrievalReferenceNo",
88
+ "Stan",
89
+ "Receipt",
90
+ "Terminal"
91
+ ]
92
+ },
93
+ "companionFlows": ["status-inquiry-v1.1"],
94
+ "docRefs": [
95
+ {
96
+ "docId": "card-refund",
97
+ "sectionId": "rest-based-card-refund-api-v2-0",
98
+ "label": "Card Refund API, 2026"
99
+ }
100
+ ],
101
+ "knownIssues": [
102
+ {
103
+ "id": "identical-sandbox-and-production-endpoint",
104
+ "summary": "Sandbox and production use the same URL",
105
+ "detail": "The guide lists an identical endpoint for both environments, so the URL carries no information about which environment a request reaches. The environment is determined entirely by the credentials.",
106
+ "guidance": "Declare the environment explicitly on every call and cross-check it against the credential profile in use. Never infer it from the endpoint."
107
+ },
108
+ {
109
+ "id": "response-uses-bare-securehash",
110
+ "summary": "The response returns SecureHash, not pp_SecureHash",
111
+ "detail": "Card refund responses use unprefixed ResponseCode, ResponseMessage and SecureHash, unlike every other documented response.",
112
+ "guidance": "Read the bare field names when verifying a card refund response, or verification will be silently skipped."
113
+ },
114
+ {
115
+ "id": "mpin-must-be-saved-in-portal",
116
+ "summary": "Refunds fail until the MPIN is saved in the merchant portal",
117
+ "detail": "The Shopify guide notes that refunds require the MPIN to already be stored in the merchant portal, in addition to being sent in the request.",
118
+ "guidance": "Save the MPIN in the portal before the first refund attempt."
119
+ }
120
+ ]
121
+ }