{"info":{"_postman_id":"d9c66db6-d0c3-4644-84b8-9ad4e1f77645","name":"Investors","description":"<html><head></head><body><p>This folder contains all API endpoints related to core investor management operations across the platform.<br>It includes authentication workflows, investor profile retrieval, portfolio insights, watchlist and subscription management, agreement handling, and investment-related actions.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"17877195","collectionId":"d9c66db6-d0c3-4644-84b8-9ad4e1f77645","publishedId":"2sB3WvLcwd","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2025-11-18T04:19:45.000Z"},"item":[{"name":"InvestorAPIS","item":[{"name":"OAuth","event":[{"listen":"test","script":{"id":"d6da59dc-bf79-4e6d-9cac-1901e9e08449","exec":["// Parse response","let response = pm.response.json();","","// Capture tokens","pm.environment.set(\"access_token\", response.access_token);","pm.environment.set(\"refresh_token\", response.refresh_token);","pm.environment.set(\"token_type\", response.token_type);","pm.environment.set(\"expires_in\", response.expires_in);","","// Debug logs (optional)","console.log(\"Access Token:\", response.access_token);","console.log(\"Refresh Token:\", response.refresh_token);"],"type":"text/javascript","packages":{},"requests":{}}},{"listen":"prerequest","script":{"id":"46abafb0-387b-4242-8724-c64cb9d5ee63","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"c9b0962d-410e-472f-9413-abe9a9818802","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"{{email}}\",\n    \"password\": \"{{password}}\",\n   \"grant_type\":\"password\",\n   \"client_id\":\"evident-investor-portal\"\n}\n"},"url":"{{baseUrl}}/oauth/token","description":"<p>Authenticates an investor and returns an access token.</p>\n","urlObject":{"path":["oauth","token"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"c9b0962d-410e-472f-9413-abe9a9818802"},{"name":"Auth → Login Investor (User 1)","event":[{"listen":"test","script":{"exec":["var responseBody = pm.response.json()","","  pm.environment.set(\"investor1Token\", responseBody.token);",""],"type":"text/javascript","packages":{},"requests":{},"id":"d6da59dc-bf79-4e6d-9cac-1901e9e08449"}},{"listen":"prerequest","script":{"exec":[""],"type":"text/javascript","packages":{},"requests":{},"id":"46abafb0-387b-4242-8724-c64cb9d5ee63"}}],"id":"339c39c2-1e97-4190-8123-ff2645e127fb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"{{email}}\",\n    \"password\": \"{{password}}\",\n    \"ipInfo\": {\n        \"asn\": \"\",\n        \"asnName\": \"\",\n        \"city\": \"\",\n        \"countryName\": \"\",\n        \"ip\": \"\",\n        \"latitude\": \"\",\n        \"longitude\": \"\",\n        \"isEu\": false,\n        \"isAnonymous\": false,\n        \"isBogon\": false,\n        \"isDatacenter\": false,\n        \"isIcloudRelay\": false,\n        \"isKnownAbuser\": false,\n        \"isKnownAttacker\": false,\n        \"isProxy\": false,\n        \"isThreat\": false,\n        \"isTor\": false\n    }\n}\n\n"},"url":"{{baseUrl}}/user/login","description":"<p>Authenticates an investor and returns an access token.</p>\n","urlObject":{"path":["user","login"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"339c39c2-1e97-4190-8123-ff2645e127fb"},{"name":"Portfolio → Get Wallet Overview","event":[{"listen":"test","script":{"exec":[""],"type":"text/javascript","packages":{},"requests":{},"id":"3dbc87ea-b892-4f5b-bd1b-c5dfc602b190"}}],"id":"de26a2a6-1c58-4bb8-808c-358df44c29d1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/user/wallet/overview","description":"<p>Retrieves the wallet overview details of the authenticated investor.</p>\n","urlObject":{"path":["user","wallet","overview"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"de26a2a6-1c58-4bb8-808c-358df44c29d1"},{"name":"Investor → Get Profile","event":[{"listen":"test","script":{"exec":[""],"type":"text/javascript","packages":{},"requests":{},"id":"6dcdf585-bff6-41ae-b444-b94928b741e7"}}],"id":"828cbaf1-5c29-4511-a140-20fc178745de","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/user/me","description":"<p>Fetches the profile information of the authenticated investor.</p>\n","urlObject":{"path":["user","me"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"828cbaf1-5c29-4511-a140-20fc178745de"},{"name":"Watchlist → Get All","event":[{"listen":"test","script":{"exec":[""],"type":"text/javascript","packages":{},"requests":{},"id":"6d8310ea-84cb-44e7-9050-4e5db37b2c48"}}],"id":"a1f1d789-87a5-4294-9e47-e5b8e29d48da","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/user/watchlist/all","description":"<p>Retrieves the complete watchlist items for the investor.</p>\n","urlObject":{"path":["user","watchlist","all"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"a1f1d789-87a5-4294-9e47-e5b8e29d48da"},{"name":"Assets → Get All","event":[{"listen":"test","script":{"exec":["// Get the response JSON","const responseJson = pm.response.json();","","// Validate the response code is 200","pm.test(\"Response status code is 200\", function () {","    pm.response.to.have.status(200);","});","","// Validate the response structure","pm.test(\"Response structure is correct\", function () {","    pm.expect(responseJson).to.have.property('meta');","    pm.expect(responseJson.meta).to.have.property('total');","    pm.expect(responseJson.meta).to.have.property('per_page');","    pm.expect(responseJson.meta).to.have.property('current_page');","    pm.expect(responseJson.meta).to.have.property('last_page');","    pm.expect(responseJson.meta).to.have.property('first_page');","    pm.expect(responseJson.meta).to.have.property('first_page_url');","    pm.expect(responseJson.meta).to.have.property('last_page_url');","    pm.expect(responseJson.meta).to.have.property('next_page_url');","    pm.expect(responseJson.meta).to.have.property('previous_page_url');","    ","    pm.expect(responseJson).to.have.property('data');","    pm.expect(responseJson.data).to.be.an('array');","});","","// Validate all assets have visibility set to PUBLIC","pm.test(\"All assets have visibility set to PUBLIC\", function () {","    const assets = responseJson.data;","    assets.forEach(asset => {","        pm.expect(asset.visibility).to.eql(\"PUBLIC\");","    });","});",""],"type":"text/javascript","packages":{},"requests":{},"id":"e1e31693-fca7-4fad-b3fb-18689408a2b9"}}],"id":"686feb74-e65d-4ab4-a537-25cd518ae46d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"page\": 1\n}"},"url":"{{baseUrl}}/asset/investor/list","description":"<p>Fetches the list of all available assets for investors.</p>\n","urlObject":{"path":["asset","investor","list"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"686feb74-e65d-4ab4-a537-25cd518ae46d"},{"name":"Assets → Get All with filters","event":[{"listen":"test","script":{"exec":["// Get the response JSON","const responseJson = pm.response.json();","","// Validate the response code is 200","pm.test(\"Response status code is 200\", function () {","    pm.response.to.have.status(200);","});","","// Validate the response structure","pm.test(\"Response structure is correct\", function () {","    pm.expect(responseJson).to.have.property('meta');","    pm.expect(responseJson.meta).to.have.property('total');","    pm.expect(responseJson.meta).to.have.property('per_page');","    pm.expect(responseJson.meta).to.have.property('current_page');","    pm.expect(responseJson.meta).to.have.property('last_page');","    pm.expect(responseJson.meta).to.have.property('first_page');","    pm.expect(responseJson.meta).to.have.property('first_page_url');","    pm.expect(responseJson.meta).to.have.property('last_page_url');","    pm.expect(responseJson.meta).to.have.property('next_page_url');","    pm.expect(responseJson.meta).to.have.property('previous_page_url');","    ","    pm.expect(responseJson).to.have.property('data');","    pm.expect(responseJson.data).to.be.an('array');","});","","// Validate all assets have visibility set to PUBLIC","pm.test(\"All assets have visibility set to PUBLIC\", function () {","    const assets = responseJson.data;","    assets.forEach(asset => {","        pm.expect(asset.visibility).to.eql(\"PUBLIC\");","    });","});",""],"type":"text/javascript","packages":{},"requests":{},"id":"c629236f-e585-4435-ba48-6322b012b436"}}],"id":"c0006a28-5672-4152-b4db-9adc6aa40e13","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"page\": 1,\n    \"assetVerticalIds\": [\n        1\n    ],\n    \"statusTags\": [\n        \"Available for Trading\"\n    ],\n    \"investmentMode\": [\n        \"Trading\"\n    ]\n}"},"url":"{{baseUrl}}/asset/investor/list","description":"<p>Retrieves filtered asset listings based on provided criteria.</p>\n","urlObject":{"path":["asset","investor","list"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"c0006a28-5672-4152-b4db-9adc6aa40e13"},{"name":"Watchlist → Add Item","event":[{"listen":"test","script":{"exec":["var jsonData = pm.response.json();","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","pm.test(\"Validate code and message\", function () {","    pm.expect(jsonData.code).to.eql(\"ADDED\");","    pm.expect(jsonData.message).to.eql(\"Asset added to the watchlist\");","});",""],"type":"text/javascript","packages":{},"requests":{},"id":"5a642025-238c-4153-9920-ca67c8cd2381"}}],"id":"2720eeac-afe2-40d0-a820-b7d3a3ae78f4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/asset/{{assetId}}/watchlist/toggle","description":"<p>Adds the specified asset to the investor’s watchlist.</p>\n","urlObject":{"path":["asset","{{assetId}}","watchlist","toggle"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"2720eeac-afe2-40d0-a820-b7d3a3ae78f4"},{"name":"Watchlist → Get By Investor","event":[{"listen":"test","script":{"exec":["// Get the response JSON","const responseJson = pm.response.json();","","// Get the asset ID from the environment variable","const expectedAssetId = pm.environment.get(\"assetId\");","","// Validate the response code is 200","pm.test(\"Response status code is 200\", function () {","    pm.response.to.have.status(200);","});","","// Validate the response structure","pm.test(\"Response structure is correct\", function () {","    pm.expect(responseJson).to.have.property('watchLists');","    pm.expect(responseJson.watchLists).to.be.an('array').that.is.not.empty;","    responseJson.watchLists.forEach(watchList => {","        pm.expect(watchList).to.have.property('asset');","        pm.expect(watchList.asset).to.have.property('id');","    });","});","","// Validate the asset ID matches the expected asset ID","pm.test(\"Asset ID matches expected value\", function () {","    const assetId = responseJson.watchLists[0].asset.id;","    pm.expect(assetId).to.eql(parseInt(expectedAssetId, 10));","});",""],"type":"text/javascript","packages":{},"requests":{},"id":"c5a41bba-40f8-46cd-954c-9e0d8f19adb0"}}],"id":"7ff9e00a-dc6a-4330-b795-bac59137345a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/user/watchlist/all","description":"<p>Gets the watchlist items associated with the authenticated investor.</p>\n","urlObject":{"path":["user","watchlist","all"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"7ff9e00a-dc6a-4330-b795-bac59137345a"},{"name":"Watchlist → Remove Item","event":[{"listen":"test","script":{"exec":["var jsonData = pm.response.json();","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"Validate code and message\", function () {","    pm.expect(jsonData.code).to.eql(\"REMOVED\");","    pm.expect(jsonData.message).to.eql(\"Asset removed from the watchlist\");","});",""],"type":"text/javascript","packages":{},"requests":{},"id":"9d9dd38c-b84d-41d5-aa4f-f4a7c612754a"}}],"id":"98b123df-b3bf-40e9-8348-35cb62fb4993","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/asset/{{assetId}}/watchlist/toggle","description":"<p>Removes the specified asset from the investor’s watchlist.</p>\n","urlObject":{"path":["asset","{{assetId}}","watchlist","toggle"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"98b123df-b3bf-40e9-8348-35cb62fb4993"},{"name":"Agreements → Sign Commitment","event":[{"listen":"test","script":{"exec":["// Parse response","const data = pm.response.json();","","// Safety checks","pm.test(\"assetAgreement array exists\", function () {","  pm.expect(data).to.have.property(\"assetAgreement\");","  pm.expect(data.assetAgreement).to.be.an(\"array\").that.is.not.empty;","});","","// 1) Prefer 0th index if it is \"Investment terms\"","let target = data.assetAgreement[0];","if (!target || (target.title || \"\").toLowerCase() !== \"investment terms\") {","  // 2) Fallback: find by title anywhere in the array","  target = data.assetAgreement.find(a => (a.title || \"\").toLowerCase() === \"investment terms\");","}","","pm.test(\"Found 'Investment terms' agreement\", function () {","  pm.expect(target, \"No agreement with title 'Investment terms' found\").to.exist;","  pm.expect(target).to.have.property(\"id\");","});","","// Set environment variable","pm.environment.set(\"investmentTermsAgreementId\", target.id);","","// Optional logs","console.log(\"✅ investmentTermsAgreementId:\", target.id);",""],"type":"text/javascript","packages":{},"requests":{},"id":"2d5da4a7-911c-48b0-9d86-8ac4872fbef5"}}],"id":"069c8ebb-018d-488b-85bb-17e54ee5431b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/asset/{{commitmentTradeId}}/agreement","description":"<p>Retrieves commitment agreements required for signing.</p>\n","urlObject":{"path":["asset","{{commitmentTradeId}}","agreement"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"069c8ebb-018d-488b-85bb-17e54ee5431b"},{"name":"Agreements → Confirm Commitment Signing","event":[{"listen":"test","script":{"exec":["// Parse the JSON response","var jsonData = pm.response.json();","","// Check if agreement was already signed or newly accepted","if (pm.response.code === 201) {","    pm.test(\"✅ Status code is 201 - Agreement signed successfully\", function () {","        pm.response.to.have.status(201);","    });","    console.log(\"Agreement signed successfully:\", jsonData);","}","else if (pm.response.code === 400 && jsonData.code === \"AGREEMENT_ALREADY_ACCEPTED\") {","    pm.test(\"⚠️ Status code is 400 - Agreement already accepted\", function () {","        pm.response.to.have.status(400);","        pm.expect(jsonData.message).to.eql(\"You have already accepted the agreement\");","    });","    console.warn(\"Agreement was already accepted previously.\");","}","else {","    pm.test(\"❌ Unexpected status code: \" + pm.response.code, function () {","        pm.expect(pm.response.code).to.be.oneOf([201, 400]);","    });","    console.error(\"Unexpected response:\", jsonData);","}",""],"type":"text/javascript","packages":{},"requests":{},"id":"e1bae6b3-3896-47e6-8ce6-526f372129fc"}}],"id":"3a016c31-e1c1-4527-9495-fe7bae212101","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"assetId\": {{commitmentTradeId}},\n    \"agreementId\":{{investmentTermsAgreementId}},\n    \"signedAt\": \"TRADE\",\n    \"ipAddress\": \"\"\n}"},"url":"{{baseUrl}}/asset/accept-agreement/","description":"<p>Submits the investor’s confirmation for a commitment agreement.</p>\n","urlObject":{"path":["asset","accept-agreement",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"3a016c31-e1c1-4527-9495-fe7bae212101"},{"name":"Trades → Commit on Asset","event":[{"listen":"test","script":{"exec":[""],"type":"text/javascript","packages":{},"requests":{},"id":"d8bc7d99-dd4f-41b0-94d4-282c691757fc"}}],"id":"48a9dfe8-3bfe-468e-8757-1785be54567a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"commitmentAmount\": 100,\n  \"commitmentType\": \"HARD\",\n  \"discountCode\": \"\",\n  \"referralCode\": \"\"\n}\n"},"url":"{{baseUrl}}/asset/{{commitmentTradeId}}/commitments/{{commitmentId}}/invest","description":"<p>Creates an investment commitment for the selected asset.</p>\n","urlObject":{"path":["asset","{{commitmentTradeId}}","commitments","{{commitmentId}}","invest"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"48a9dfe8-3bfe-468e-8757-1785be54567a"},{"name":"Agreements → Sign Subscription","event":[{"listen":"test","script":{"exec":["// Parse response","const data = pm.response.json();","","// Safety checks","pm.test(\"assetAgreement array exists\", function () {","  pm.expect(data).to.have.property(\"assetAgreement\");","  pm.expect(data.assetAgreement).to.be.an(\"array\").that.is.not.empty;","});","","// 1) Prefer 0th index if it is \"Investment terms\"","let target = data.assetAgreement[0];","if (!target || (target.title || \"\").toLowerCase() !== \"investment terms\") {","  // 2) Fallback: find by title anywhere in the array","  target = data.assetAgreement.find(a => (a.title || \"\").toLowerCase() === \"investment terms\");","}","","pm.test(\"Found 'Investment terms' agreement\", function () {","  pm.expect(target, \"No agreement with title 'Investment terms' found\").to.exist;","  pm.expect(target).to.have.property(\"id\");","});","","// Set environment variable","pm.environment.set(\"investmentTermsAgreementId\", target.id);","","// Optional logs","console.log(\"✅ investmentTermsAgreementId:\", target.id);",""],"type":"text/javascript","packages":{},"requests":{},"id":"a1ecae69-bc78-436b-a7a4-aea6435c32f3"}}],"id":"af2dc063-36af-4fc3-bc5a-0cb482809cd6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/asset/{{tradeAssetId}}/agreement","description":"<p>Retrieves subscription agreements required for signing.</p>\n","urlObject":{"path":["asset","{{tradeAssetId}}","agreement"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"af2dc063-36af-4fc3-bc5a-0cb482809cd6"},{"name":"Investor → Create Subscription","event":[{"listen":"test","script":{"exec":["// Parse JSON response","let response = pm.response.json();","","// ✅ Verify status code is 200 OK","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","// ✅ Validate response structure","pm.test(\"Response contains valid subscription confirmation\", function () {","    pm.expect(response).to.have.property(\"code\");","    pm.expect(response).to.have.property(\"message\");","});","","// ✅ Check for expected code and message","pm.test(\"Subscription successfully requested\", function () {","    pm.expect(response.code).to.eql(\"SUBSCRIPTION_REQUESTED\");","    pm.expect(response.message).to.include(\"Subscription request has been created\");","});","","// 🧩 Optional: Log output to console","console.log(\"✅ Subscription API Response:\", response);",""],"type":"text/javascript","packages":{},"requests":{},"id":"a2e40407-bd16-4b62-a9c9-a0060402a687"}}],"id":"28d372bb-fda8-4027-ac9d-b83aab23cfe9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"operationType\": \"SUBSCRIPTION\",\n    \"amount\": 50,\n    \"subscriptionDiscountCode\": \"\",\n    \"tokenizationDiscountCode\": \"\"\n}"},"url":"{{baseUrl}}/asset/{{tradeAssetId}}/subscribe","description":"<p>Creates a subscription request for the investor.</p>\n","urlObject":{"path":["asset","{{tradeAssetId}}","subscribe"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"28d372bb-fda8-4027-ac9d-b83aab23cfe9"},{"name":"Portfolio → Get Holdings","event":[{"listen":"test","script":{"exec":[""],"type":"text/javascript","packages":{},"requests":{},"id":"1541a16e-8aff-406d-bace-35f166c35752"}}],"id":"fdd9d674-7a4a-496e-b882-69bda200b44b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/investor/trade/{{tradeAssetId}}/holdings","description":"<p>Fetches the investor’s holdings for the specified trade asset.</p>\n","urlObject":{"path":["investor","trade","{{tradeAssetId}}","holdings"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"fdd9d674-7a4a-496e-b882-69bda200b44b"},{"name":"Subscription → Subscription History","event":[{"listen":"test","script":{"exec":["// Parse JSON response","let response = pm.response.json();","","// ✅ Verify status code is 200","pm.test(\"Status code is 200 OK\", function () {","    pm.response.to.have.status(200);","});","","",""],"type":"text/javascript","packages":{},"requests":{},"id":"bc9ed944-da23-4f87-933b-9ad9a29da589"}}],"id":"b62f5527-fbf7-4cb1-b91a-69dc59487cf5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/asset/{{tradeAssetId}}/user/subscription-history","description":"<p>Retrieves the subscription history for the investor.</p>\n","urlObject":{"path":["asset","{{tradeAssetId}}","user","subscription-history"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"b62f5527-fbf7-4cb1-b91a-69dc59487cf5"},{"name":"Investor →Redemption","event":[{"listen":"test","script":{"exec":["// Parse JSON response","let response = pm.response.json();","","// ✅ Verify status code is 200 OK","pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});","","// ✅ Validate response structure","pm.test(\"Response contains valid subscription confirmation\", function () {","    pm.expect(response).to.have.property(\"code\");","    pm.expect(response).to.have.property(\"message\");","});","","// ✅ Check for expected code and message","pm.test(\"Subscription successfully requested\", function () {","    pm.expect(response.code).to.eql(\"REDEMPTION_REQUESTED\");","    pm.expect(response.message).to.include(\"Redemption request has been created\");","});","","// 🧩 Optional: Log output to console","console.log(\"✅ Subscription API Response:\", response);",""],"type":"text/javascript","packages":{},"requests":{},"id":"6f784877-a54c-4378-ac6a-ef2220a6128c"}}],"id":"5c28002e-bc2c-448a-bd1b-1605b53dec9a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"operationType\": \"REDEMPTION\",\n    \"amount\": 50,\n    \"subscriptionDiscountCode\": \"\",\n    \"tokenizationDiscountCode\": \"\"\n}"},"url":"{{baseUrl}}/asset/{{tradeAssetId}}/subscribe","description":"<p>Creates a redemption request for the investor.</p>\n","urlObject":{"path":["asset","{{tradeAssetId}}","subscribe"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"5c28002e-bc2c-448a-bd1b-1605b53dec9a"},{"name":"Auth → Login Investor (User 2)","event":[{"listen":"test","script":{"exec":["var responseBody = pm.response.json()","","  pm.environment.set(\"token\", responseBody.token);",""],"type":"text/javascript","packages":{},"requests":{},"id":"c8d4c08d-45da-4d03-937e-d34d71a4b1cb"}}],"id":"0dcaff64-a5fc-4d6c-a892-c1eb8229a317","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Origin","value":"https://test.evident.capital","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"{{email}}\",\n    \"password\": \"{{password}}\",\n    \"ipInfo\": {\n        \"asn\": \"\",\n        \"asnName\": \"\",\n        \"city\": \"\",\n        \"countryName\": \"\",\n        \"ip\": \"\",\n        \"latitude\": \"\",\n        \"longitude\": \"\",\n        \"isEu\": false,\n        \"isAnonymous\": false,\n        \"isBogon\": false,\n        \"isDatacenter\": false,\n        \"isIcloudRelay\": false,\n        \"isKnownAbuser\": false,\n        \"isKnownAttacker\": false,\n        \"isProxy\": false,\n        \"isThreat\": false,\n        \"isTor\": false\n    }\n}\n\n"},"url":"{{baseUrl}}/user/login","description":"<p>Authenticates a second investor user and returns an access token.</p>\n","urlObject":{"path":["user","login"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"0dcaff64-a5fc-4d6c-a892-c1eb8229a317"},{"name":"Investor → Get Investment Agreement","event":[{"listen":"test","script":{"exec":["// Parse the response body","let jsonData = pm.response.json();","","// Get the ID of the \"Investment terms\" agreement","let agreementId = jsonData.assetAgreement[0].id;","","// Store it as a Postman environment variable","pm.environment.set(\"agreementId\", agreementId);","","// Log for confirmation","console.log(\"✅ Agreement ID set:\", agreementId);",""],"type":"text/javascript","packages":{},"requests":{},"id":"b8d379b2-d294-4046-9ed1-ab067ebe4161"}}],"id":"e954d43c-f3b7-45e7-8fc4-4471d090c0bf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/asset/{{tradeAssetId}}/agreement","description":"<p>Retrieves the investment agreement details for the selected asset.</p>\n","urlObject":{"path":["asset","{{tradeAssetId}}","agreement"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"e954d43c-f3b7-45e7-8fc4-4471d090c0bf"},{"name":"Investor → Sign Trade Agreement","event":[{"listen":"test","script":{"exec":["// Parse the JSON response","var jsonData = pm.response.json();","","// Check if agreement was already signed or newly accepted","if (pm.response.code === 201) {","    pm.test(\"✅ Status code is 201 - Agreement signed successfully\", function () {","        pm.response.to.have.status(201);","    });","    console.log(\"Agreement signed successfully:\", jsonData);","}","else if (pm.response.code === 400 && jsonData.code === \"AGREEMENT_ALREADY_ACCEPTED\") {","    pm.test(\"⚠️ Status code is 400 - Agreement already accepted\", function () {","        pm.response.to.have.status(400);","        pm.expect(jsonData.message).to.eql(\"You have already accepted the agreement\");","    });","    console.warn(\"Agreement was already accepted previously.\");","}","else {","    pm.test(\"❌ Unexpected status code: \" + pm.response.code, function () {","        pm.expect(pm.response.code).to.be.oneOf([201, 400]);","    });","    console.error(\"Unexpected response:\", jsonData);","}",""],"type":"text/javascript","packages":{},"requests":{},"id":"4468aa65-c117-42ae-9415-7bf0c289b9f8"}}],"id":"cec88d74-fd5e-4699-b0c7-5acbe48bbebe","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"assetId\": {{tradeAssetId}},\n    \"agreementId\": {{agreementId}},\n    \"signedAt\": \"TRADE\",\n    \"ipAddress\": \"\"\n}"},"url":"{{baseUrl}}/asset/accept-agreement/","description":"<p>Submits the investor’s signature for a trade agreement.</p>\n","urlObject":{"path":["asset","accept-agreement",""],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"cec88d74-fd5e-4699-b0c7-5acbe48bbebe"},{"name":"Investor →MakeOffer-PlaceAsk","event":[{"listen":"test","script":{"exec":["// // Parse the JSON response","// let jsonData = pm.response.json();","","// // Safely access the tradeQueue object","// if (jsonData.tradeQueue && jsonData.tradeQueue.id) {","//     let tradeId = jsonData.tradeQueue.id;","","//     // Set tradeId as environment variable","//     pm.environment.set(\"placeAsktradeId\", tradeId);","","//     // Validate and log","//     pm.test(\"✅ Trade ID fetched and saved to environment\", function () {","//         pm.expect(tradeId).to.be.a(\"number\");","//     });","","//     console.log(\"✅ Trade ID set:\", tradeId);","// } else {","//     pm.test(\"❌ Trade ID not found in response\", function () {","//         pm.expect.fail(\"tradeQueue.id not found in response\");","//     });","// }",""],"type":"text/javascript","packages":{},"requests":{},"id":"dce447e3-42f5-4d2b-aefe-750f383654ea"}}],"id":"186df7b9-2b97-47bf-94c1-78ca06c10956","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"type\": \"sell\",\n    \"totalUnits\": 2,\n    \"price\": 2,\n    \"discountCode\": \"{{discountCode}}\"\n}"},"url":"{{baseUrl}}/asset/{{tradeAssetId}}/trade/offer/make","description":"<p>Creates an ask offer for selling units of an asset.</p>\n","urlObject":{"path":["asset","{{tradeAssetId}}","trade","offer","make"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"186df7b9-2b97-47bf-94c1-78ca06c10956"},{"name":"Investor →Get Trade Id for Place Ask","event":[{"listen":"test","script":{"exec":["// Parse the JSON response","let jsonData = pm.response.json();","","// Ensure data exists","pm.test(\"Response contains trade data array\", function () {","    pm.expect(jsonData).to.have.property(\"data\");","    pm.expect(jsonData.data).to.be.an(\"array\");","});","","// Filter to find the matching trade","let matchingTrade = jsonData.data.find(trade =>","    trade.availableUnits === \"2.000\" && trade.price === \"2.00\"",");","","// If found, set as environment variable","if (matchingTrade) {","    let tradeId = matchingTrade.id;","    pm.environment.set(\"placeAsktradeId\", tradeId);","","    pm.test(\"✅ Found matching trade and saved tradeId\", function () {","        pm.expect(tradeId).to.be.a(\"number\");","    });","","    console.log(\"✅ Matching trade found:\", matchingTrade);","    console.log(\"✅ placeAsktradeId set:\", tradeId);","","}"],"type":"text/javascript","packages":{},"requests":{},"id":"17869568-8cea-4566-8c77-b5f3d433eaad"}}],"id":"9f4a7e40-b0be-415d-9fb1-eeab66c7e5bc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":""},"url":"{{baseUrl}}/investor/trade/{{tradeAssetId}}/open/buy/offers?page=1&limit=5","description":"<p>Retrieves the trade ID required to place an ask offer.</p>\n","urlObject":{"path":["investor","trade","{{tradeAssetId}}","open","buy","offers"],"host":["{{baseUrl}}"],"query":[{"key":"page","value":"1"},{"key":"limit","value":"5"}],"variable":[]}},"response":[],"_postman_id":"9f4a7e40-b0be-415d-9fb1-eeab66c7e5bc"},{"name":"Auth → Login Investor (User 1)","event":[{"listen":"test","script":{"exec":["var responseBody = pm.response.json()","","  pm.environment.set(\"token\", responseBody.token);",""],"type":"text/javascript","packages":{},"requests":{},"id":"ed1b706e-6bd3-492f-9382-c5657a05b5ad"}}],"id":"1931e9c0-12c2-48c6-8f7b-478cb93b2fad","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Origin","value":"https://test.evident.capital","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"{{email}}\",\n    \"password\": \"{{password}}\",\n    \"ipInfo\": {\n        \"asn\": \"\",\n        \"asnName\": \"\",\n        \"city\": \"\",\n        \"countryName\": \"\",\n        \"ip\": \"\",\n        \"latitude\": \"\",\n        \"longitude\": \"\",\n        \"isEu\": false,\n        \"isAnonymous\": false,\n        \"isBogon\": false,\n        \"isDatacenter\": false,\n        \"isIcloudRelay\": false,\n        \"isKnownAbuser\": false,\n        \"isKnownAttacker\": false,\n        \"isProxy\": false,\n        \"isThreat\": false,\n        \"isTor\": false\n    }\n}\n\n"},"url":"{{baseUrl}}/user/login","description":"<p>Authenticates an investor and returns an access token.</p>\n","urlObject":{"path":["user","login"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"1931e9c0-12c2-48c6-8f7b-478cb93b2fad"},{"name":"Trades → Buy Now","event":[{"listen":"test","script":{"exec":[""],"type":"text/javascript","packages":{},"requests":{},"id":"88e881d4-5d15-4927-91b8-19b8d3f370f5"}}],"id":"aa80a641-f15c-41dd-9cba-6a539597a415","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"tradeId\": {{placeAsktradeId}},\n    \"totalUnits\": 2,\n    \"referralCode\": \"\",\n    \"discountCode\": \"\"\n}"},"url":"{{baseUrl}}/asset/{{tradeAssetId}}/trade/offer/take","description":"<p>Executes a buy-now action on an available trade offer.</p>\n","urlObject":{"path":["asset","{{tradeAssetId}}","trade","offer","take"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"aa80a641-f15c-41dd-9cba-6a539597a415"},{"name":"Trades → Place Bid","event":[{"listen":"test","script":{"exec":[""],"type":"text/javascript","packages":{},"requests":{},"id":"7dce45f0-914c-4c4a-bf9e-4a4a0c696358"}}],"id":"252cf6dc-2a30-4139-a070-f7a0abaf419f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"type\": \"buy\",\n    \"totalUnits\": 7,\n    \"price\": 7,\n    \"discountCode\": \"{{discountCode}}\"\n}\n\n"},"url":"{{baseUrl}}/asset/{{tradeAssetId}}/trade/offer/make","description":"<p>Places a bid offer for purchasing asset units.</p>\n","urlObject":{"path":["asset","{{tradeAssetId}}","trade","offer","make"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"252cf6dc-2a30-4139-a070-f7a0abaf419f"},{"name":"Auth → Login Investor (User 2)","event":[{"listen":"test","script":{"exec":["var responseBody = pm.response.json()","","  pm.environment.set(\"token\", responseBody.token);",""],"type":"text/javascript","packages":{},"requests":{},"id":"125c3d42-6a2c-48c1-8e10-57e406e7bd32"}}],"id":"372c5786-696d-401d-8c44-6c22005a3575","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Origin","value":"https://test.evident.capital","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"{{email}}\",\n    \"password\": \"{{password}}\",\n    \"ipInfo\": {\n        \"asn\": \"\",\n        \"asnName\": \"\",\n        \"city\": \"\",\n        \"countryName\": \"\",\n        \"ip\": \"\",\n        \"latitude\": \"\",\n        \"longitude\": \"\",\n        \"isEu\": false,\n        \"isAnonymous\": false,\n        \"isBogon\": false,\n        \"isDatacenter\": false,\n        \"isIcloudRelay\": false,\n        \"isKnownAbuser\": false,\n        \"isKnownAttacker\": false,\n        \"isProxy\": false,\n        \"isThreat\": false,\n        \"isTor\": false\n    }\n}\n\n"},"url":"{{baseUrl}}/user/login","description":"<p>Authenticates a second investor user and returns an access token.</p>\n","urlObject":{"path":["user","login"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"372c5786-696d-401d-8c44-6c22005a3575"},{"name":"Trades → Sell Now","event":[{"listen":"test","script":{"exec":["// Parse the JSON response","var jsonData = pm.response.json();","","// Check if agreement was already signed or newly accepted","if (pm.response.code === 201) {","    pm.test(\"✅ Status code is 201 - Agreement signed successfully\", function () {","        pm.response.to.have.status(201);","    });","    console.log(\"Agreement signed successfully:\", jsonData);","}","else if (pm.response.code === 400 && jsonData.code === \"AGREEMENT_ALREADY_ACCEPTED\") {","    pm.test(\"⚠️ Status code is 400 - Agreement already accepted\", function () {","        pm.response.to.have.status(400);","        pm.expect(jsonData.message).to.eql(\"You have already accepted the agreement\");","    });","    console.warn(\"Agreement was already accepted previously.\");","}","else {","    pm.test(\"❌ Unexpected status code: \" + pm.response.code, function () {","        pm.expect(pm.response.code).to.be.oneOf([201, 400]);","    });","    console.error(\"Unexpected response:\", jsonData);","}",""],"type":"text/javascript","packages":{},"requests":{},"id":"7f1cabb0-5b52-486e-b726-07cbea2af83a"}}],"id":"a9726f76-312f-4ebd-ac61-2a65893eac1e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"tradeId\": {{placeBidtradeId}},\n  \"totalUnits\": 2,\n  \"referralCode\": \"\",\n  \"discountCode\": \"\"\n}\n"},"url":"{{baseUrl}}/asset/{{tradeAssetId}}/trade/offer/take","description":"<p>Executes a sell-now action on a matching trade offer.</p>\n","urlObject":{"path":["asset","{{tradeAssetId}}","trade","offer","take"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"a9726f76-312f-4ebd-ac61-2a65893eac1e"},{"name":"Bank → Get Active Bank","event":[{"listen":"test","script":{"exec":["// Fetching id from the first bank object in the response","const responseJson = pm.response.json();","const activeBankIdInv1 = responseJson.banks[0].id;","","// Setting the environment variable","pm.environment.set(\"activeBankIdInv1\", activeBankIdInv1);","","// Logging for confirmation","console.log(\"Bank ID set as activeBankIdInv1:\", activeBankIdInv1);",""],"type":"text/javascript","packages":{},"requests":{},"id":"f573abb6-bc17-495e-887d-9d46e638f97d"}}],"id":"5d3cc460-03a7-4652-ac93-4aefcd24fc65","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{token}}"}]},"isInherited":false},"method":"GET","header":[],"url":"{{baseUrl}}/user/banks/get/active","description":"<p>Retrieves the investor’s active bank account details.</p>\n","urlObject":{"path":["user","banks","get","active"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"5d3cc460-03a7-4652-ac93-4aefcd24fc65"}],"id":"7ffbbb4c-dac5-4cfb-b993-a97b20d0dae8","description":"<p>These endpoints specifically handle investor-related actions such as login, profile updates, and authentication flows. It provides endpoints for user authentication, session management, and retrieval of investor-specific data needed for personalized experiences within the platform. Use this subfolder to test APIs that interact directly with investor accounts and authentication services.</p>\n","event":[{"listen":"prerequest","script":{"type":"text/javascript","packages":{},"requests":{},"exec":["// Set the environment variable baseUrl","pm.environment.set(\"baseUrl\", \"https://api-uat.evident.capital\");","","","// Set the environment variable investor1Email","pm.environment.set(\"investor1Email\", \"sai.mansanpally+1509ind@evident.capital\");","// Set the environment variable investor2Email","pm.environment.set(\"investor2Email\", \"sai.mansanpally+1509corpipi@evident.capital\");","pm.environment.set(\"password\", \"Evident@01\");","","pm.environment.set(\"assetId\", \"339\");","pm.environment.set(\"tradeAssetId\", \"391\");","pm.environment.set(\"discountCode\", \"42IZDRUK\");","pm.environment.set(\"commitmentTradeId\", \"405\");","pm.environment.set(\"commitmentId\", \"149\");","","","","","",""],"id":"928ef9ce-b3ac-4de6-b41d-c5e74481fce0"}},{"listen":"test","script":{"type":"text/javascript","packages":{},"requests":{},"exec":[""],"id":"6b25a167-de1d-488a-94b7-1936e8f97f38"}}],"_postman_id":"7ffbbb4c-dac5-4cfb-b993-a97b20d0dae8"}]}