{"info":{"_postman_id":"291bd8ff-bb1e-4d7d-af56-eaf6e24b83b1","name":"Reseller API","description":"<html><head></head><body><h2 id=\"overview\">Overview</h2>\n<p>Improved, well-documented Postman collection for the Reseller API.</p>\n<ul>\n<li>Authentication for reseller endpoints uses the <code>r-api-key</code> header.</li>\n</ul>\n<h3 id=\"variables\">Variables</h3>\n<ul>\n<li><p><code>reseller_api_key</code>: Your reseller API key.</p>\n</li>\n<li><p><code>reseller_sub_user_id</code>: A sub-user ID you own.</p>\n</li>\n</ul>\n<h3 id=\"response-envelope\">Response Envelope</h3>\n<p>Unless otherwise specified, responses follow:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"data\": any,\n  \"metadata\": any | undefined,\n  \"message\": string | undefined\n}\n\n</code></pre>\n<h3 id=\"service-types\">Service Types</h3>\n<p>Use one of:</p>\n<ul>\n<li><p>RESIDENTIAL-PREMIUM</p>\n</li>\n<li><p>ROTATING-DATACENTER</p>\n</li>\n</ul>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"21778434","collectionId":"291bd8ff-bb1e-4d7d-af56-eaf6e24b83b1","publishedId":"2sB3QKsA64","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2025-10-13T11:05:27.000Z"},"item":[{"name":"/reseller/user/create","id":"48b1d9e5-b700-437b-961d-cc61c07a66c1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"r-api-key","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"email\": \"sub.user@example.com\",\n  \"traffic_limit\": 1000, //mb, 1000 = 1 gb\n  \"username\": \"sub_user_001\",\n  \"password\": \"01234567-89ab-cdef-0123-456789abcdef\",\n  \"serviceType\": \"RESIDENTIAL-PREMIUM\", // RESIDENTIAL-PREMIUM or ROTATING-DATACENTER\n  \"current_period_end\": \"2025-12-31T23:59:59.000Z\"\n}","options":{"raw":{"language":"json"}}},"url":"https://app-api.geonode.com/api/reseller/user/create","description":"<p>Create a sub-user.</p>\n<p>Auth:</p>\n<ul>\n<li>Header <code>r-api-key: </code></li>\n</ul>\n<p>Body (CreateSubUserDto):</p>\n<ul>\n<li><p>email: string (email)</p>\n</li>\n<li><p>username: string (alphanumeric + underscore)</p>\n</li>\n<li><p>password: string (exactly 36 chars)</p>\n</li>\n<li><p>traffic_limit: number (MB)</p>\n</li>\n<li><p>serviceType: enum [RESIDENTIAL-PREMIUM, SHARED-DATACENTER, HTML-SCRAPPER]</p>\n</li>\n<li><p>current_period_end: string (ISO 8601, optional)</p>\n</li>\n</ul>\n<p>Notes:</p>\n<ul>\n<li><p>Requires your reseller subscription to be active.</p>\n</li>\n<li><p>Validates username uniqueness and password length.</p>\n</li>\n</ul>\n<p>Response:</p>\n<ul>\n<li><p>200: { data: ResellerSubUser, message: 'createSubUser' }</p>\n</li>\n<li><p>409: No active service | Access denied | Email already exist</p>\n</li>\n</ul>\n","urlObject":{"protocol":"https","path":["api","reseller","user","create"],"host":["app-api","geonode","com"],"query":[],"variable":[]}},"response":[{"id":"058156a5-3378-431e-a9c8-c91a7d2eec16","name":"200 OK","originalRequest":{"method":"POST","header":[{"key":"r-api-key","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"email\": \"sub.user@example.com\",\n  \"traffic_limit\": 1000, //mb, 1000 = 1 gb\n  \"username\": \"sub_user_001\",\n  \"password\": \"01234567-89ab-cdef-0123-456789abcdef\",\n  \"serviceType\": \"RESIDENTIAL-PREMIUM\", // RESIDENTIAL-PREMIUM or ROTATING-DATACENTER\n  \"current_period_end\": \"2025-12-31T23:59:59.000Z\"\n}","options":{"raw":{"language":"json"}}},"url":"https://app-api.geonode.com/api/reseller/user/create","description":"Create a sub-user.\n\nAuth:\n\n- Header `r-api-key: `\n    \n\nBody (CreateSubUserDto):\n\n- email: string (email)\n    \n- username: string (alphanumeric + underscore)\n    \n- password: string (exactly 36 chars)\n    \n- traffic_limit: number (MB)\n    \n- serviceType: enum \\[RESIDENTIAL-PREMIUM, SHARED-DATACENTER, HTML-SCRAPPER\\]\n    \n- current_period_end: string (ISO 8601, optional)\n    \n\nNotes:\n\n- Requires your reseller subscription to be active.\n    \n- Validates username uniqueness and password length.\n    \n\nResponse:\n\n- 200: { data: ResellerSubUser, message: 'createSubUser' }\n    \n- 409: No active service | Access denied | Email already exist"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"data\": {\n    \"id\": \"{{reseller_sub_user_id}}\",\n    \"resellerId\": \"11111111-1111-1111-1111-111111111111\",\n    \"email\": \"sub.user@example.com\",\n    \"traffic_limit\": 1000,\n    \"serviceType\": \"RESIDENTIAL-PREMIUM\",\n    \"configurationId\": \"22222222-2222-2222-2222-222222222222\",\n    \"subscription_status\": \"ACTIVE\",\n    \"auto_disable\": false,\n    \"current_period_start\": \"2025-09-12T00:00:00.000Z\",\n    \"current_period_end\": \"2025-10-12T00:00:00.000Z\"\n  },\n  \"message\": \"createSubUser\"\n}"}],"_postman_id":"48b1d9e5-b700-437b-961d-cc61c07a66c1"},{"name":"/reseller/user/:userId","id":"8e4e7d19-f1e5-4f56-b676-ba8cdaa03b9a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"r-api-key","value":"","type":"text"}],"url":"https://app-api.geonode.com/api/reseller/user/:subUserId","description":"<p>Get a sub-user by ID. Adds authorization credentials to the response.</p>\n<p>Response:</p>\n<ul>\n<li>200: { data: ResellerSubUser &amp; { authorization: { username, password } }, message: 'getResellerSubUser' }</li>\n<li>409: Access denied (user not found or not yours)</li>\n</ul>\n","urlObject":{"protocol":"https","path":["api","reseller","user",":subUserId"],"host":["app-api","geonode","com"],"query":[],"variable":[{"type":"any","value":"","key":"subUserId"}]}},"response":[{"id":"88a60d4d-79f1-4f82-bf18-3f1279defef1","name":"200 OK","originalRequest":{"method":"GET","header":[{"key":"r-api-key","value":"","type":"text"}],"url":{"raw":"https://app-api.geonode.com/api/reseller/user/:subUserId","protocol":"https","host":["app-api","geonode","com"],"path":["api","reseller","user",":subUserId"],"variable":[{"key":"subUserId","value":""}]},"description":"Get a sub-user by ID. Adds authorization credentials to the response.\n\nResponse:\n- 200: { data: ResellerSubUser & { authorization: { username, password } }, message: 'getResellerSubUser' }\n- 409: Access denied (user not found or not yours)"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"data\": {\n    \"id\": \"{{reseller_sub_user_id}}\",\n    \"email\": \"sub.user@example.com\",\n    \"traffic_limit\": 1000,\n    \"serviceType\": \"RESIDENTIAL-PREMIUM\",\n    \"subscription_status\": \"ACTIVE\",\n    \"current_period_start\": \"2025-09-12T00:00:00.000Z\",\n    \"current_period_end\": \"2025-10-12T00:00:00.000Z\",\n    \"authorization\": {\n      \"username\": \"sub_user_001\",\n      \"password\": \"01234567-89ab-cdef-0123-456789abcdef\"\n    }\n  },\n  \"message\": \"getResellerSubUser\"\n}"}],"_postman_id":"8e4e7d19-f1e5-4f56-b676-ba8cdaa03b9a"},{"name":"/reseller/user/:userId","id":"d830ae7f-077c-410a-88a4-4adcfc101bc3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"r-api-key","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"traffic_limit\": 2000, // mb\n  \"auto_disable\": false,\n  \"subscription_status\": \"ACTIVE\",\n  \"password\": \"fedcba98-7654-3210-fedc-ba9876543210\",\n  \"current_period_start\": \"2025-09-15T00:00:00.000Z\",\n  \"current_period_end\": \"2025-10-15T00:00:00.000Z\"\n}","options":{"raw":{"language":"json"}}},"url":"https://app-api.geonode.com/api/reseller/user/:subUserId","description":"<p>Update sub-user. All fields optional.</p>\n<p>Body (UpdateSubUserDto):</p>\n<ul>\n<li>traffic_limit: number (MB)</li>\n<li>auto_disable: boolean</li>\n<li>subscription_status: enum InternalSubscriptionStatus</li>\n<li>password: string (exactly 36 chars) -&gt; updates proxy password</li>\n<li>current_period_start: string (ISO 8601) (cannot be earlier than existing)</li>\n<li>current_period_end: string (ISO 8601)</li>\n</ul>\n<p>Response:</p>\n<ul>\n<li>200: { data: updatedUser, message: 'Sub user updated.' }</li>\n<li>409: validation/access errors</li>\n</ul>\n","urlObject":{"protocol":"https","path":["api","reseller","user",":subUserId"],"host":["app-api","geonode","com"],"query":[],"variable":[{"type":"any","value":"","key":"subUserId"}]}},"response":[{"id":"528d28a8-4df5-415d-883e-de7511b6fd68","name":"200 OK","originalRequest":{"method":"PUT","header":[{"key":"r-api-key","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"traffic_limit\": 2000, // mb\n  \"auto_disable\": false,\n  \"subscription_status\": \"ACTIVE\",\n  \"password\": \"fedcba98-7654-3210-fedc-ba9876543210\",\n  \"current_period_start\": \"2025-09-15T00:00:00.000Z\",\n  \"current_period_end\": \"2025-10-15T00:00:00.000Z\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://app-api.geonode.com/api/reseller/user/:subUserId","protocol":"https","host":["app-api","geonode","com"],"path":["api","reseller","user",":subUserId"],"variable":[{"key":"subUserId","value":""}]},"description":"Update sub-user. All fields optional.\n\nBody (UpdateSubUserDto):\n- traffic_limit: number (MB)\n- auto_disable: boolean\n- subscription_status: enum InternalSubscriptionStatus\n- password: string (exactly 36 chars) -> updates proxy password\n- current_period_start: string (ISO 8601) (cannot be earlier than existing)\n- current_period_end: string (ISO 8601)\n\nResponse:\n- 200: { data: updatedUser, message: 'Sub user updated.' }\n- 409: validation/access errors"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"data\": {\n    \"id\": \"{{reseller_sub_user_id}}\",\n    \"traffic_limit\": 2000,\n    \"subscription_status\": \"ACTIVE\"\n  },\n  \"message\": \"Sub user updated.\"\n}"}],"_postman_id":"d830ae7f-077c-410a-88a4-4adcfc101bc3"},{"name":"/reseller/user/:userId","id":"68724ff9-70ea-4c78-9247-4c8f95d56148","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"r-api-key","value":"","type":"text"}],"url":"https://app-api.geonode.com/api/reseller/user/:subUserId","description":"<p>Delete sub-user by ID.</p>\n<p>Response:</p>\n<ul>\n<li>200: { data: { status: 'deleted', id }, message: 'deleteSubUser' }</li>\n<li>409: Access denied</li>\n</ul>\n","urlObject":{"protocol":"https","path":["api","reseller","user",":subUserId"],"host":["app-api","geonode","com"],"query":[],"variable":[{"type":"any","value":"","key":"subUserId"}]}},"response":[{"id":"7b171d22-72a9-4a98-9766-368eade489d1","name":"200 OK","originalRequest":{"method":"DELETE","header":[{"key":"r-api-key","value":"","type":"text"}],"url":{"raw":"https://app-api.geonode.com/api/reseller/user/:subUserId","protocol":"https","host":["app-api","geonode","com"],"path":["api","reseller","user",":subUserId"],"variable":[{"key":"subUserId","value":""}]},"description":"Delete sub-user by ID.\n\nResponse:\n- 200: { data: { status: 'deleted', id }, message: 'deleteSubUser' }\n- 409: Access denied"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"data\": { \"status\": \"deleted\", \"id\": \"{{reseller_sub_user_id}}\" },\n  \"message\": \"deleteSubUser\"\n}"}],"_postman_id":"68724ff9-70ea-4c78-9247-4c8f95d56148"},{"name":"/reseller/user/traffic/:userId","id":"b76e69d0-97f2-42fd-b57b-2ce2dc3b845e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"r-api-key","value":"","type":"text"}],"url":"https://app-api.geonode.com/api/reseller/user/traffic/:subUserId","description":"<p>Get current bandwidth usage and limit for a sub-user.</p>\n<p>Response:</p>\n<ul>\n<li>200: { data: { usageBandwidth: number, trafficLimitInBytes: number }, message: 'getSubUserTraffic' }</li>\n</ul>\n<p><em>usageBandwidth -</em> In bytes.<br /><em>trafficLimitInBytes</em> - In bytes.</p>\n","urlObject":{"protocol":"https","path":["api","reseller","user","traffic",":subUserId"],"host":["app-api","geonode","com"],"query":[],"variable":[{"type":"any","value":"","key":"subUserId"}]}},"response":[{"id":"c7e1b980-6fc0-47cc-b6ec-a39920de88c6","name":"200 OK","originalRequest":{"method":"GET","header":[{"key":"r-api-key","value":"","type":"text"}],"url":{"raw":"https://app-api.geonode.com/api/reseller/user/traffic/:subUserId","protocol":"https","host":["app-api","geonode","com"],"path":["api","reseller","user","traffic",":subUserId"],"variable":[{"key":"subUserId","value":""}]},"description":"Get current bandwidth usage and limit for a sub-user.\n\nResponse:\n\n- 200: { data: { usageBandwidth: number, trafficLimitInBytes: number }, message: 'getSubUserTraffic' }\n    \n\n_usageBandwidth -_ In bytes.  \n_trafficLimitInBytes_ - In bytes."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"data\": {\n    \"usageBandwidth\": 524288000,\n    \"trafficLimitInBytes\": 1048576000\n  },\n  \"message\": \"getSubUserTraffic\"\n}"}],"_postman_id":"b76e69d0-97f2-42fd-b57b-2ce2dc3b845e"},{"name":"/reseller/sub-users/list","id":"02a3a6cc-1596-4d38-8f0a-1dbd304a7343","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"r-api-key","value":"","type":"text"}],"url":"https://app-api.geonode.com/api/reseller/sub-users/list?perPage=25&pageNumber=1&serviceType=RESIDENTIAL-PREMIUM&sortBy=&sortOrder=desc&contains=&searchKey=&filters=","description":"<p>List sub-users with pagination and optional filters.</p>\n<p>Query (GetResellerSubUsersDto + BaseQueryDTO):</p>\n<ul>\n<li><p>perPage: number (1-100)</p>\n</li>\n<li><p>pageNumber: number (&gt;=1)</p>\n</li>\n<li><p>serviceType: enum [RESIDENTIAL-PREMIUM, SHARED-DATACENTER, HTML-SCRAPPER] (optional)</p>\n</li>\n<li><p>sortBy: string (optional)</p>\n</li>\n<li><p>sortOrder: 'desc' | 'asc' (optional)</p>\n</li>\n<li><p>contains: base64 string (optional)</p>\n</li>\n<li><p>searchKey: string (optional)</p>\n</li>\n<li><p>filters: string (optional)</p>\n</li>\n</ul>\n<p>Response:</p>\n<ul>\n<li>200: { data: { id, trafficLimitInBytes, usageBandwidth, username, apiKey }, metadata: { count, perPage, pageNumber } }<br />  <em>usageBandwidth - in bytes<br />  trafficLimitInBytes - in bytes</em></li>\n</ul>\n","urlObject":{"protocol":"https","path":["api","reseller","sub-users","list"],"host":["app-api","geonode","com"],"query":[{"description":{"content":"<p>1-100 items per page</p>\n","type":"text/plain"},"key":"perPage","value":"25"},{"description":{"content":"<p>Page number (&gt;=1)</p>\n","type":"text/plain"},"key":"pageNumber","value":"1"},{"description":{"content":"<p>Optional filter</p>\n","type":"text/plain"},"key":"serviceType","value":"RESIDENTIAL-PREMIUM"},{"description":{"content":"<p>Optional field to sort by</p>\n","type":"text/plain"},"key":"sortBy","value":""},{"description":{"content":"<p>desc|asc</p>\n","type":"text/plain"},"key":"sortOrder","value":"desc"},{"description":{"content":"<p>Optional search (base64-encoded)</p>\n","type":"text/plain"},"key":"contains","value":""},{"description":{"content":"<p>Optional field to search against</p>\n","type":"text/plain"},"key":"searchKey","value":""},{"description":{"content":"<p>Optional structured filters string</p>\n","type":"text/plain"},"key":"filters","value":""}],"variable":[]}},"response":[{"id":"4a1ae4a9-42e2-4d33-a70e-73aad23284bc","name":"200 OK","originalRequest":{"header":[]},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"data\": [\n    { \"id\": \"{{reseller_sub_user_id}}\", \"email\": \"sub.user@example.com\", \"serviceType\": \"RESIDENTIAL-PREMIUM\", \"username\": \"d23284d2Xdasd\",\n\t\t\t\"apiKey\": \"c14c82ac-7ab6-4b01-9b90-77065e57bf12\",\n\t\t\t\"trafficLimitInBytes\": 1000000000,\n\t\t\t\"usageBandwidth\": 10240230}\n  ],\n  \"metadata\": { \"count\": 1, \"perPage\": 25, \"pageNumber\": 1 }\n}"}],"_postman_id":"02a3a6cc-1596-4d38-8f0a-1dbd304a7343"},{"name":"/reseller/sub-users/allocated-traffic","id":"e46daceb-594b-4aa3-a156-f4e5bd4f285a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"r-api-key","value":"","type":"text"}],"url":"https://app-api.geonode.com/api/reseller/sub-users/allocated-traffic","description":"<p>Get total allocated bandwidth (MB) and count of active sub-users.</p>\n<p>Response:</p>\n<ul>\n<li>200: { data: [{ _id: resellerId, allocatedTraffic, activeUsers }], message: 'getSubUsersAllocatedTraffic' }</li>\n</ul>\n","urlObject":{"protocol":"https","path":["api","reseller","sub-users","allocated-traffic"],"host":["app-api","geonode","com"],"query":[],"variable":[]}},"response":[{"id":"1d4cc1d1-b4d7-4486-9113-6583e502a1ff","name":"200 OK","originalRequest":{"method":"GET","header":[{"key":"r-api-key","value":"","type":"text"}],"url":"https://app-api.geonode.com/api/reseller/sub-users/allocated-traffic","description":"Get total allocated bandwidth (MB) and count of active sub-users.\n\nResponse:\n- 200: { data: [{ _id: resellerId, allocatedTraffic, activeUsers }], message: 'getSubUsersAllocatedTraffic' }"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"data\": [\n    { \"_id\": \"11111111-1111-1111-1111-111111111111\", \"allocatedTraffic\": 3000, \"activeUsers\": 3 }\n  ],\n  \"message\": \"getSubUsersAllocatedTraffic\"\n}"}],"_postman_id":"e46daceb-594b-4aa3-a156-f4e5bd4f285a"},{"name":"/reseller/user/whitelisted-ips/:userId (GET)","id":"e136e648-7adf-4f39-8bf7-248fea2f1c2d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"r-api-key","value":"","type":"text"}],"url":"https://app-api.geonode.com/api/reseller/user/whitelisted-ips/:subUserId","description":"<p>Get whitelisted IPs for a sub-user.</p>\n<p>Response:</p>\n<ul>\n<li>200: { data: [{ ip, description }], message: 'getWhitelistIps' }</li>\n</ul>\n","urlObject":{"protocol":"https","path":["api","reseller","user","whitelisted-ips",":subUserId"],"host":["app-api","geonode","com"],"query":[],"variable":[{"type":"any","value":"","key":"subUserId"}]}},"response":[{"id":"63ced835-690c-4b46-9c16-7c4f94339b8f","name":"200 OK","originalRequest":{"method":"GET","header":[{"key":"r-api-key","value":"","type":"text"}],"url":{"raw":"https://app-api.geonode.com/api/reseller/user/whitelisted-ips/:subUserId","protocol":"https","host":["app-api","geonode","com"],"path":["api","reseller","user","whitelisted-ips",":subUserId"],"variable":[{"key":"subUserId","value":""}]},"description":"Get whitelisted IPs for a sub-user.\n\nResponse:\n- 200: { data: [{ ip, description }], message: 'getWhitelistIps' }"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"data\": [\n    { \"ip\": \"1.1.1.1\", \"description\": \"Office IP\" },\n    { \"ip\": \"2.2.2.2\", \"description\": \"Home IP\" }\n  ],\n  \"message\": \"getWhitelistIps\"\n}"}],"_postman_id":"e136e648-7adf-4f39-8bf7-248fea2f1c2d"},{"name":"/reseller/user/whitelisted-ips/:userId (PUT)","id":"10187027-e7a0-4a5e-ac6a-306fe0b97e38","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"r-api-key","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"whitelistIps\": [\n    { \"ip\": \"1.1.1.5\", \"description\": \"Office VPN\" }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://app-api.geonode.com/api/reseller/user/whitelisted-ips/:subUserId","description":"<p>Add IPs to whitelist for a sub-user.</p>\n<p>Body (WhitelistIpsDto):</p>\n<ul>\n<li>whitelistIps: Array&lt;{ ip: string, description: string (1-100) }&gt; (max 150)</li>\n</ul>\n<p>Response:</p>\n<ul>\n<li>200: { data: [{ ip, description }], message: 'addWhitelistIps' }</li>\n<li>409: Access denied</li>\n</ul>\n","urlObject":{"protocol":"https","path":["api","reseller","user","whitelisted-ips",":subUserId"],"host":["app-api","geonode","com"],"query":[],"variable":[{"type":"any","value":"","key":"subUserId"}]}},"response":[{"id":"65e4dd8b-756c-405b-8e72-45b201458b5b","name":"200 OK","originalRequest":{"method":"PUT","header":[{"key":"r-api-key","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"whitelistIps\": [\n    { \"ip\": \"1.1.1.5\", \"description\": \"Office VPN\" }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://app-api.geonode.com/api/reseller/user/whitelisted-ips/:subUserId","protocol":"https","host":["app-api","geonode","com"],"path":["api","reseller","user","whitelisted-ips",":subUserId"],"variable":[{"key":"subUserId","value":""}]},"description":"Add IPs to whitelist for a sub-user.\n\nBody (WhitelistIpsDto):\n- whitelistIps: Array<{ ip: string, description: string (1-100) }> (max 150)\n\nResponse:\n- 200: { data: [{ ip, description }], message: 'addWhitelistIps' }\n- 409: Access denied"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"data\": [\n    { \"ip\": \"1.1.1.5\", \"description\": \"Office VPN\" }\n  ],\n  \"message\": \"addWhitelistIps\"\n}"}],"_postman_id":"10187027-e7a0-4a5e-ac6a-306fe0b97e38"},{"name":"/reseller/user/whitelisted-ips/:userId (DELETE)","id":"3db952b3-e204-4a3b-9046-a9855cc15d74","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"r-api-key","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"whitelistIps\": [\n    \"1.1.1.5\"\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://app-api.geonode.com/api/reseller/user/whitelisted-ips/:subUserId","description":"<p>Remove IPs from whitelist for a sub-user.</p>\n<p>Body (DeleteWhiteListedIpsDTO):</p>\n<ul>\n<li>whitelistIps: string[] (IPs to remove, max 150)</li>\n</ul>\n<p>Response:</p>\n<ul>\n<li>200: { data: remainingWhitelistedIps[], message: 'addWhitelistIps' }</li>\n</ul>\n","urlObject":{"protocol":"https","path":["api","reseller","user","whitelisted-ips",":subUserId"],"host":["app-api","geonode","com"],"query":[],"variable":[{"type":"any","value":"","key":"subUserId"}]}},"response":[{"id":"a5ed2009-c17d-4ffe-9011-a8b5fe29a27a","name":"200 OK","originalRequest":{"method":"DELETE","header":[{"key":"r-api-key","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"whitelistIps\": [\n    \"1.1.1.5\"\n  ]\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://app-api.geonode.com/api/reseller/user/whitelisted-ips/:subUserId","protocol":"https","host":["app-api","geonode","com"],"path":["api","reseller","user","whitelisted-ips",":subUserId"],"variable":[{"key":"subUserId","value":""}]},"description":"Remove IPs from whitelist for a sub-user.\n\nBody (DeleteWhiteListedIpsDTO):\n- whitelistIps: string[] (IPs to remove, max 150)\n\nResponse:\n- 200: { data: remainingWhitelistedIps[], message: 'addWhitelistIps' }"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n  \"data\": [\n    { \"ip\": \"1.1.1.1\", \"description\": \"Office IP\" }\n  ],\n  \"message\": \"addWhitelistIps\"\n}"}],"_postman_id":"3db952b3-e204-4a3b-9046-a9855cc15d74"},{"name":"Statistics - Aggregate by period (charts)","id":"ecc6da93-ca19-4317-88fc-44229f15d93d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"r-api-key","value":"{{r-api-key}}","description":"<p>Reseller API key</p>\n","type":"text"}],"url":"https://monitor.geonode.com/statistics/:serviceType/per-period?granularity={{granularity}}&dateFrom={{dateFrom}}&dateTo={{dateTo}}&subUserFilter={{subUserFilter}}","description":"<p>Returns aggregate statistics grouped by time period defined by granularity.</p>\n<p>Use case:</p>\n<ul>\n<li>Line charts and time series visualizations</li>\n</ul>\n<p>Path parameter:</p>\n<ul>\n<li><p>serviceType (enum)</p>\n<ul>\n<li><p>RESIDENTIAL-PREMIUM</p>\n</li>\n<li><p>ROTATING-DATACENTER</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>Constraints:</p>\n<ul>\n<li><p>Maximum 720 units between dateFrom and dateTo based on granularity</p>\n</li>\n<li><p>date range is inclusive</p>\n</li>\n</ul>\n<p>Required headers:</p>\n<ul>\n<li>r-api-key</li>\n</ul>\n","urlObject":{"protocol":"https","path":["statistics",":serviceType","per-period"],"host":["monitor","geonode","com"],"query":[{"description":{"content":"<p>Aggregation unit, minute | hour | day</p>\n","type":"text/plain"},"key":"granularity","value":"{{granularity}}"},{"description":{"content":"<p>Inclusive ISO date string, example 2026-01-01T00:00:00Z</p>\n","type":"text/plain"},"key":"dateFrom","value":"{{dateFrom}}"},{"description":{"content":"<p>Inclusive ISO date string, example 2026-01-02T00:00:00Z</p>\n","type":"text/plain"},"key":"dateTo","value":"{{dateTo}}"},{"description":{"content":"<p>.all | .master | specific subuser id</p>\n","type":"text/plain"},"key":"subUserFilter","value":"{{subUserFilter}}"}],"variable":[{"type":"any","value":"","key":"serviceType"}]}},"response":[],"_postman_id":"ecc6da93-ca19-4317-88fc-44229f15d93d"},{"name":"Statistics - Aggregate by target host and target country (paginated table)","id":"4261f4a1-d885-4cc5-bc00-fead05de8eb5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"r-api-key","value":"{{r-api-key}}","description":"<p>Reseller API key</p>\n","type":"text"}],"url":"https://monitor.geonode.com/statistics/:serviceType/per-subuser-host-country?granularity={{granularity}}&dateFrom={{dateFrom}}&dateTo={{dateTo}}&subUserFilter={{subUserFilter}}&limit={{limit}}&offset={{offset}}","description":"<p>Returns aggregate statistics grouped by target country and target host.</p>\n<p>Use case:</p>\n<ul>\n<li>Paginated tables in dashboards</li>\n</ul>\n<p>Path parameter:</p>\n<ul>\n<li><p>serviceType (enum)</p>\n<ul>\n<li><p>RESIDENTIAL-PREMIUM</p>\n</li>\n<li><p>ROTATING-DATACENTER</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>Constraints:</p>\n<ul>\n<li><p>Maximum 720 units between dateFrom and dateTo based on granularity</p>\n</li>\n<li><p>date range is inclusive</p>\n</li>\n</ul>\n<p>Required headers:</p>\n<ul>\n<li>r-api-key</li>\n</ul>\n","urlObject":{"protocol":"https","path":["statistics",":serviceType","per-subuser-host-country"],"host":["monitor","geonode","com"],"query":[{"description":{"content":"<p>Aggregation unit, minute | hour | day</p>\n","type":"text/plain"},"key":"granularity","value":"{{granularity}}"},{"description":{"content":"<p>Inclusive ISO date string, example 2026-01-01T00:00:00Z</p>\n","type":"text/plain"},"key":"dateFrom","value":"{{dateFrom}}"},{"description":{"content":"<p>Inclusive ISO date string, example 2026-01-02T00:00:00Z</p>\n","type":"text/plain"},"key":"dateTo","value":"{{dateTo}}"},{"description":{"content":"<p>.all | .master | specific subuser id</p>\n","type":"text/plain"},"key":"subUserFilter","value":"{{subUserFilter}}"},{"description":{"content":"<p>Pagination size, integer from 1 to 5000</p>\n","type":"text/plain"},"key":"limit","value":"{{limit}}"},{"description":{"content":"<p>Pagination offset</p>\n","type":"text/plain"},"key":"offset","value":"{{offset}}"}],"variable":[{"type":"any","value":"","key":"serviceType"}]}},"response":[],"_postman_id":"4261f4a1-d885-4cc5-bc00-fead05de8eb5"}],"event":[{"listen":"prerequest","script":{"id":"346e71cb-2f87-41f9-9e18-64dc52729863","type":"text/javascript","packages":{},"requests":{},"exec":[""]}},{"listen":"test","script":{"id":"081575ea-612e-4340-827c-dd939661a93a","type":"text/javascript","packages":{},"requests":{},"exec":[""]}}],"variable":[{"key":"reseller_api_key","value":""},{"key":"serviceType","value":"RESIDENTIAL-PREMIUM","description":"The proxy service type. Allowed values: RESIDENTIAL-PREMIUM, ROTATING-DATACENTER"}]}