{
	"info": {
		"name": "Digital Savings — DJS API",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
		"description": "Runnable requests for every DJS operation, targeting the `{{baseUrl}}` variable. Import whichever environment file matches your target stage (`develop.postman_environment.json`, `internal.postman_environment.json`) — its `baseUrl` is prefilled to that stage's live host.\n\nThe OpenAPI spec (`openapi.json`) stays the contract-of-record; this collection is generated from the same operation contracts as a hands-on artifact for the MoMo connectivity test.\n\nProduction ingress (the MoMo gateway channel) is mutual TLS: configure a client certificate for the host in your client (Postman → Settings → Certificates). The contract itself (this file) needs no network access."
	},
	"item": [
		{
			"name": "check_registration_status",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"arguments\": [\n    {\n      \"key\": {\n        \"value\": \"operation_name\"\n      },\n      \"value\": {\n        \"value\": \"check_registration_status\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"ACCOUNT_HOLDER_MSISDN\"\n      },\n      \"value\": {\n        \"value\": \"242060000001\"\n      }\n    }\n  ],\n  \"languageCode\": \"fr\",\n  \"sessionIdentifier\": \"example-session\",\n  \"journeyIdentifier\": \"example-journey\"\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseUrl}}/getdynamicarguments",
					"host": [
						"{{baseUrl}}"
					],
					"path": [
						"getdynamicarguments"
					]
				},
				"description": "Is this MSISDN registered? Routes to the Home Menu or to the registration disclosure screen."
			},
			"event": [
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							"pm.test(\"status is 200\", () => pm.response.to.have.status(200));"
						]
					}
				}
			]
		},
		{
			"name": "register_savings_account",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"arguments\": [\n    {\n      \"key\": {\n        \"value\": \"operation_name\"\n      },\n      \"value\": {\n        \"value\": \"register_savings_account\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"ACCOUNT_HOLDER_MSISDN\"\n      },\n      \"value\": {\n        \"value\": \"242060000001\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"ACCOUNT_HOLDER_EMAIL\"\n      },\n      \"value\": {\n        \"value\": \"client@example.cd\"\n      }\n    }\n  ],\n  \"languageCode\": \"fr\",\n  \"sessionIdentifier\": \"example-session\",\n  \"journeyIdentifier\": \"example-journey\"\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseUrl}}/getdynamicarguments",
					"host": [
						"{{baseUrl}}"
					],
					"path": [
						"getdynamicarguments"
					]
				},
				"description": "Opens the savings account for this MSISDN (idempotent; re-dial → ALREADY_REGISTERED)."
			},
			"event": [
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							"pm.test(\"status is 200\", () => pm.response.to.have.status(200));"
						]
					}
				}
			]
		},
		{
			"name": "create_deposit_summary",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"arguments\": [\n    {\n      \"key\": {\n        \"value\": \"operation_name\"\n      },\n      \"value\": {\n        \"value\": \"create_deposit_summary\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"ACCOUNT_HOLDER_MSISDN\"\n      },\n      \"value\": {\n        \"value\": \"242060000001\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"amount\"\n      },\n      \"value\": {\n        \"value\": \"50000\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"product_code\"\n      },\n      \"value\": {\n        \"value\": \"prod3m\"\n      }\n    }\n  ],\n  \"languageCode\": \"fr\",\n  \"sessionIdentifier\": \"example-session\",\n  \"journeyIdentifier\": \"example-journey\"\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseUrl}}/getdynamicarguments",
					"host": [
						"{{baseUrl}}"
					],
					"path": [
						"getdynamicarguments"
					]
				},
				"description": "Quotes the chosen amount + lock period against the live offerable product version (no state written)."
			},
			"event": [
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							"pm.test(\"status is 200\", () => pm.response.to.have.status(200));"
						]
					}
				}
			]
		},
		{
			"name": "confirm_deposit",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"arguments\": [\n    {\n      \"key\": {\n        \"value\": \"operation_name\"\n      },\n      \"value\": {\n        \"value\": \"confirm_deposit\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"ACCOUNT_HOLDER_MSISDN\"\n      },\n      \"value\": {\n        \"value\": \"242060000001\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"amount\"\n      },\n      \"value\": {\n        \"value\": \"50000\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"product_code\"\n      },\n      \"value\": {\n        \"value\": \"prod3m\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"deposit_reference\"\n      },\n      \"value\": {\n        \"value\": \"dep_2f1c…\"\n      }\n    }\n  ],\n  \"languageCode\": \"fr\",\n  \"sessionIdentifier\": \"example-session\",\n  \"journeyIdentifier\": \"example-journey\"\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseUrl}}/getdynamicarguments",
					"host": [
						"{{baseUrl}}"
					],
					"path": [
						"getdynamicarguments"
					]
				},
				"description": "Writes the PENDING PaymentOrder + fires the MoMo Request-to-Pay; PENDING_VALIDATION until the async outcome settles."
			},
			"event": [
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							"pm.test(\"status is 200\", () => pm.response.to.have.status(200));"
						]
					}
				}
			]
		},
		{
			"name": "create_withdrawal_summary",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"arguments\": [\n    {\n      \"key\": {\n        \"value\": \"operation_name\"\n      },\n      \"value\": {\n        \"value\": \"create_withdrawal_summary\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"ACCOUNT_HOLDER_MSISDN\"\n      },\n      \"value\": {\n        \"value\": \"242060000001\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"locked_account_id\"\n      },\n      \"value\": {\n        \"value\": \"7ade4636-df3e-4ac9-a73b-32635bccc7d3\"\n      }\n    }\n  ],\n  \"languageCode\": \"fr\",\n  \"sessionIdentifier\": \"example-session\",\n  \"journeyIdentifier\": \"example-journey\"\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseUrl}}/getdynamicarguments",
					"host": [
						"{{baseUrl}}"
					],
					"path": [
						"getdynamicarguments"
					]
				},
				"description": "Quotes the early-exit terms for the position's full balance (no state written). Mints withdrawal_reference for confirm."
			},
			"event": [
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							"pm.test(\"status is 200\", () => pm.response.to.have.status(200));"
						]
					}
				}
			]
		},
		{
			"name": "confirm_withdrawal",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"arguments\": [\n    {\n      \"key\": {\n        \"value\": \"operation_name\"\n      },\n      \"value\": {\n        \"value\": \"confirm_withdrawal\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"ACCOUNT_HOLDER_MSISDN\"\n      },\n      \"value\": {\n        \"value\": \"242060000001\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"withdrawal_reference\"\n      },\n      \"value\": {\n        \"value\": \"c4e7f8a2-1b3d-4f9e-8c0a-5d2e6f7a9b1c\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"locked_account_id\"\n      },\n      \"value\": {\n        \"value\": \"7ade4636-df3e-4ac9-a73b-32635bccc7d3\"\n      }\n    }\n  ],\n  \"languageCode\": \"fr\",\n  \"sessionIdentifier\": \"example-session\",\n  \"journeyIdentifier\": \"example-journey\"\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseUrl}}/getdynamicarguments",
					"host": [
						"{{baseUrl}}"
					],
					"path": [
						"getdynamicarguments"
					]
				},
				"description": "Reserves the LOCKED position + fires the MoMo Disbursement; PENDING until the async outcome settles."
			},
			"event": [
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							"pm.test(\"status is 200\", () => pm.response.to.have.status(200));"
						]
					}
				}
			]
		},
		{
			"name": "get_savings_balance",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"arguments\": [\n    {\n      \"key\": {\n        \"value\": \"operation_name\"\n      },\n      \"value\": {\n        \"value\": \"get_savings_balance\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"ACCOUNT_HOLDER_MSISDN\"\n      },\n      \"value\": {\n        \"value\": \"242060000001\"\n      }\n    }\n  ],\n  \"languageCode\": \"fr\",\n  \"sessionIdentifier\": \"example-session\",\n  \"journeyIdentifier\": \"example-journey\"\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseUrl}}/getdynamicarguments",
					"host": [
						"{{baseUrl}}"
					],
					"path": [
						"getdynamicarguments"
					]
				},
				"description": "Locked savings balance: principal with computed interest."
			},
			"event": [
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							"pm.test(\"status is 200\", () => pm.response.to.have.status(200));"
						]
					}
				}
			]
		},
		{
			"name": "confirm_opt_out (stub)",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"arguments\": [\n    {\n      \"key\": {\n        \"value\": \"operation_name\"\n      },\n      \"value\": {\n        \"value\": \"confirm_opt_out\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"ACCOUNT_HOLDER_MSISDN\"\n      },\n      \"value\": {\n        \"value\": \"242060000001\"\n      }\n    }\n  ],\n  \"languageCode\": \"fr\",\n  \"sessionIdentifier\": \"example-session\",\n  \"journeyIdentifier\": \"example-journey\"\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseUrl}}/getdynamicarguments",
					"host": [
						"{{baseUrl}}"
					],
					"path": [
						"getdynamicarguments"
					]
				},
				"description": "Confirms opt-out / account closure (stub)."
			},
			"event": [
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							"pm.test(\"status is 200\", () => pm.response.to.have.status(200));"
						]
					}
				}
			]
		},
		{
			"name": "get_user_email",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"arguments\": [\n    {\n      \"key\": {\n        \"value\": \"operation_name\"\n      },\n      \"value\": {\n        \"value\": \"get_user_email\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"ACCOUNT_HOLDER_MSISDN\"\n      },\n      \"value\": {\n        \"value\": \"242060000001\"\n      }\n    }\n  ],\n  \"languageCode\": \"fr\",\n  \"sessionIdentifier\": \"example-session\",\n  \"journeyIdentifier\": \"example-journey\"\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseUrl}}/getdynamicarguments",
					"host": [
						"{{baseUrl}}"
					],
					"path": [
						"getdynamicarguments"
					]
				},
				"description": "Fetches the email on file (internal step; happy path = on file)."
			},
			"event": [
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							"pm.test(\"status is 200\", () => pm.response.to.have.status(200));"
						]
					}
				}
			]
		},
		{
			"name": "request_full_statement (stub)",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"arguments\": [\n    {\n      \"key\": {\n        \"value\": \"operation_name\"\n      },\n      \"value\": {\n        \"value\": \"request_full_statement\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"ACCOUNT_HOLDER_MSISDN\"\n      },\n      \"value\": {\n        \"value\": \"242060000001\"\n      }\n    }\n  ],\n  \"languageCode\": \"fr\",\n  \"sessionIdentifier\": \"example-session\",\n  \"journeyIdentifier\": \"example-journey\"\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseUrl}}/getdynamicarguments",
					"host": [
						"{{baseUrl}}"
					],
					"path": [
						"getdynamicarguments"
					]
				},
				"description": "Requests a full statement (async email delivery) (stub)."
			},
			"event": [
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							"pm.test(\"status is 200\", () => pm.response.to.have.status(200));"
						]
					}
				}
			]
		},
		{
			"name": "list_locked_accounts",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"arguments\": [\n    {\n      \"key\": {\n        \"value\": \"operation_name\"\n      },\n      \"value\": {\n        \"value\": \"list_locked_accounts\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"ACCOUNT_HOLDER_MSISDN\"\n      },\n      \"value\": {\n        \"value\": \"242060000001\"\n      }\n    }\n  ],\n  \"languageCode\": \"fr\",\n  \"sessionIdentifier\": \"example-session\",\n  \"journeyIdentifier\": \"example-journey\"\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseUrl}}/getdynamicoptions",
					"host": [
						"{{baseUrl}}"
					],
					"path": [
						"getdynamicoptions"
					]
				},
				"description": "Locked positions the customer can withdraw from. One row per open LOCKED position; balance reflects any in-progress reservation."
			},
			"event": [
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							"pm.test(\"status is 200\", () => pm.response.to.have.status(200));"
						]
					}
				}
			]
		},
		{
			"name": "list_recent_transactions",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n  \"arguments\": [\n    {\n      \"key\": {\n        \"value\": \"operation_name\"\n      },\n      \"value\": {\n        \"value\": \"list_recent_transactions\"\n      }\n    },\n    {\n      \"key\": {\n        \"value\": \"ACCOUNT_HOLDER_MSISDN\"\n      },\n      \"value\": {\n        \"value\": \"242060000001\"\n      }\n    }\n  ],\n  \"languageCode\": \"fr\",\n  \"sessionIdentifier\": \"example-session\",\n  \"journeyIdentifier\": \"example-journey\"\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseUrl}}/getdynamicoptions",
					"host": [
						"{{baseUrl}}"
					],
					"path": [
						"getdynamicoptions"
					]
				},
				"description": "The last few transactions (mini statement)."
			},
			"event": [
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							"pm.test(\"status is 200\", () => pm.response.to.have.status(200));"
						]
					}
				}
			]
		}
	]
}
