Manage whitelisted IPs for Residential and Mobile proxies. The create and update call is a single upsert, which is why it can return either 200 or 201.
The whitelist endpoints manage IP whitelisting: letting a known IP address connect without sending proxy credentials on every request. You add an IP, retrieve it, and remove it when it is no longer yours.All requests go to https://api.nodemaven.com/api/v2/base/ and carry the header Authorization: x-api-key YOUR_API_KEY. See the NodeMaven API overview for the shared basics.
IP whitelisting is available for Residential and Mobile proxies only. It is not available for ISP proxies. If you are working with ISP proxies, see ISP authentication instead, because these endpoints do not apply to them.
Deleting a whitelisted IP immediately cuts off access for anything relying on it. Any machine that was connecting without credentials because its IP was whitelisted stops being able to connect as soon as the entry is removed. Make sure the client has credentials to fall back on, or a replacement whitelist entry, before you delete.
IP whitelist is the dashboard view of the same feature.
ISP authentication covers how ISP proxies authenticate, since whitelisting does not apply to them.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"NodeMaven","colors":{"primary":"#040404","light":"#36b2d0","dark":"#4394ed"},"logo":{"light":"https://mintcdn.com/node-maven/6hNMQgM9F7aPu_XV/images/logo-light.svg?fit=max\u0026auto=format\u0026n=6hNMQgM9F7aPu_XV\u0026q=85\u0026s=246eb26f0612267f8d60a54a5fcedf51","dark":"https://mintcdn.com/node-maven/6hNMQgM9F7aPu_XV/images/logo-dark.svg?fit=max\u0026auto=format\u0026n=6hNMQgM9F7aPu_XV\u0026q=85\u0026s=aa36a2f4afcc88540f821fa093a7dc89"},"favicon":"https://mintlify.s3.us-west-1.amazonaws.com/node-maven/favicon.svg","navbar":{"primary":{"type":"button","label":"Go to dashboard","href":"https://dashboard.nodemaven.com/dashboard"}},"footer":{"socials":{"x":"https://x.com/nodemaven","linkedin":"https://www.linkedin.com/company/nodemaven"}},"styling":{"eyebrows":"breadcrumbs","latex":true},"integrations":{"intercom":{"appId":"yvkc0rpk"}},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"node-maven","hasAudioNarration":false,"actualSubdomain":"node-maven","customDomains":["docs.nodemaven.com"],"gitSource":{"type":"github","owner":"mintlify-community","repo":"docs-node-maven-2e96ded6","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aec4b7c8029e5fb8e3dc13c","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"Guides","count":146},{"language":"default","tag":"More","count":116},{"language":"default","tag":"Integrations","count":45},{"language":"default","tag":"Product FAQs","count":34},{"language":"default","tag":"Products","count":23},{"language":"default","tag":"Accounts and Billing","count":21},{"language":"default","tag":"Anti-detect browsers","count":21},{"language":"default","tag":"API Reference","count":16},{"language":"default","tag":"Residential and mobile proxies","count":14},{"language":"default","tag":"Platform API","count":13}],"searchSettings":{"showContentSnippets":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"privacy":{"consentBanner":{"enabled":false}},"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"proxy-api/whitelist","slug":"/proxy-api/whitelist","pageMetadata":{"title":"IP whitelist","sidebarTitle":"IP whitelist","description":"Manage whitelisted IPs for Residential and Mobile proxies. The create and update call is a single upsert, which is why it can return either 200 or 201.","icon":"shield-check","href":"/proxy-api/whitelist"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Manage whitelisted IPs for Residential and Mobile proxies. The create and update call is a single upsert, which is why it can return either 200 or 201.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`The whitelist endpoints manage IP whitelisting: letting a known IP address connect without sending proxy credentials on every request. You add an IP, retrieve it, and remove it when it is no longer yours.`}),`\n`,_jsxs(_components.p,{children:[`All requests go to `,_jsx(_components.code,{children:`https://api.nodemaven.com/api/v2/base/`}),` and carry the header `,_jsx(_components.code,{children:`Authorization: x-api-key YOUR_API_KEY`}),`. See the `,_jsx(_components.a,{href:`/proxy-api/overview`,children:`NodeMaven API overview`}),` for the shared basics.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`IP whitelisting is available for Residential and Mobile proxies only. It is not available for ISP proxies.`}),` If you are working with ISP proxies, see `,_jsx(_components.a,{href:`/isp/authentication`,children:`ISP authentication`}),` instead, because these endpoints do not apply to them.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`endpoints`,children:`Endpoints`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Method`}),_jsx(_components.th,{children:`Path`}),_jsx(_components.th,{children:`What it does`}),_jsx(_components.th,{children:`Request body`}),_jsx(_components.th,{children:`Responses`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`GET`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`/whitelist/ips`})}),_jsx(_components.td,{children:`Retrieve whitelisted IPs`}),_jsx(_components.td,{}),_jsx(_components.td,{\"data-numeric\":`true`,children:`200, 403`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`POST`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`/whitelist/ip/upsert`})}),_jsx(_components.td,{children:`Create or update a whitelist IP`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`WhitelistIPRequest`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:`200, 201, 400, 403, 404`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`GET`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`/whitelist/ip/{id}`})}),_jsx(_components.td,{children:`Retrieve a whitelisted IP by ID`}),_jsx(_components.td,{}),_jsx(_components.td,{\"data-numeric\":`true`,children:`200, 404, 500`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`DELETE`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`/whitelist/ip/{id}`})}),_jsx(_components.td,{children:`Delete a whitelisted IP by ID`}),_jsx(_components.td,{}),_jsx(_components.td,{\"data-numeric\":`true`,children:`200, 404, 500`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`one-endpoint-creates-and-updates`,children:`One endpoint creates and updates`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`POST /whitelist/ip/upsert`}),` is an upsert, so it handles both cases:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Include `,_jsx(_components.code,{children:`id`})]}),` and it updates the existing whitelist entry with that ID.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Omit `,_jsx(_components.code,{children:`id`})]}),` and it creates a new entry.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`That is why the endpoint lists both 200 and 201 as success responses: 201 for something newly created, 200 for something updated.`}),`\n`,_jsx(Heading,{level:`2`,id:`whitelistiprequest`,children:`WhitelistIPRequest`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Notes`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`id`})}),_jsx(_components.td,{children:`uuid`}),_jsx(_components.td,{children:`For updates. Omit it to create`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ip`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`The IP address to whitelist`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`name`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`Optional label to help you tell entries apart`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sticky`})}),_jsx(_components.td,{children:`boolean`}),_jsxs(_components.td,{children:[`Defaults to `,_jsx(_components.code,{children:`false`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ttl`})}),_jsx(_components.td,{children:`integer`}),_jsxs(_components.td,{children:[`In `,_jsx(_components.strong,{children:`seconds`}),`. Defaults to `,_jsx(_components.code,{children:`0`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`protocol`})}),_jsx(_components.td,{children:`enum`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`HTTP`}),` or `,_jsx(_components.code,{children:`SOCKS5`}),`. Defaults to `,_jsx(_components.code,{children:`HTTP`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`type`})}),_jsx(_components.td,{children:`enum`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`residential`}),` or `,_jsx(_components.code,{children:`mobile`}),`. Defaults to `,_jsx(_components.code,{children:`residential`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`quality_filter_enabled`})}),_jsx(_components.td,{children:`boolean`}),_jsxs(_components.td,{children:[`Defaults to `,_jsx(_components.code,{children:`false`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ports_count`})}),_jsx(_components.td,{children:`integer`}),_jsx(_components.td,{children:`How many ports to allocate`})]})]})]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://api.nodemaven.com/api/v2/base/whitelist/ip/upsert`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: x-api-key YOUR_API_KEY\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ip\": \"203.0.113.10\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"name\": \"Office egress\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"protocol\": \"HTTP\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"type\": \"residential\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`ttl`}),` is in seconds, not minutes.`]}),` It defaults to `,_jsx(_components.code,{children:`0`}),`, so set it explicitly if the lifetime of the entry matters to you.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`deleting-cuts-access-immediately`,children:`Deleting cuts access immediately`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Deleting a whitelisted IP immediately cuts off access for anything relying on it.`}),` Any machine that was connecting without credentials because its IP was whitelisted stops being able to connect as soon as the entry is removed. Make sure the client has credentials to fall back on, or a replacement whitelist entry, before you delete.`]})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` DELETE`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://api.nodemaven.com/api/v2/base/whitelist/ip/WHITELIST_IP_ID`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: x-api-key YOUR_API_KEY\"`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`related-reading`,children:`Related reading`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/residential-mobile/ip-whitelist`,children:`IP whitelist`}),` is the dashboard view of the same feature.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/isp/authentication`,children:`ISP authentication`}),` covers how ISP proxies authenticate, since whitelisting does not apply to them.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"IP whitelist","sidebarTitle":"IP whitelist","description":"Manage whitelisted IPs for Residential and Mobile proxies. The create and update call is a single upsert, which is why it can return either 200 or 201.","icon":"shield-check","href":"/proxy-api/whitelist"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Endpoints","slug":"endpoints","depth":2,"children":[]},{"title":"One endpoint creates and updates","slug":"one-endpoint-creates-and-updates","depth":2,"children":[]},{"title":"WhitelistIPRequest","slug":"whitelistiprequest","depth":2,"children":[]},{"title":"Deleting cuts access immediately","slug":"deleting-cuts-access-immediately","depth":2,"children":[]},{"title":"Related reading","slug":"related-reading","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"node-maven","siteName":"NodeMaven","title":"IP whitelist - NodeMaven","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-01T11:34:05.171Z","originalFileLocation":"proxy-api/whitelist.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Manage whitelisted IPs for Residential and Mobile proxies. The create and update call is a single upsert, which is why it can return either 200 or 201.\">\u003cmeta data-mint-head name=\"application-name\" content=\"NodeMaven\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/svg+xml\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/node-maven/favicon.svg\">\u003clink data-mint-head rel=\"icon\" type=\"image/svg+xml\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/node-maven/favicon.svg\">\u003clink data-mint-head rel=\"icon\" type=\"image/svg+xml\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/node-maven/favicon.svg\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/svg+xml\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/node-maven/favicon.svg\">\u003cmeta data-mint-head property=\"og:title\" content=\"IP whitelist - NodeMaven\">\u003cmeta data-mint-head property=\"og:description\" content=\"Manage whitelisted IPs for Residential and Mobile proxies. The create and update call is a single upsert, which is why it can return either 200 or 201.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"NodeMaven\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.nodemaven.com/proxy-api/whitelist\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://node-maven.mintlify.site/_mintlify/api/og/v2?division=Proxy+API\u0026amp;title=IP+whitelist\u0026amp;description=Manage+whitelisted+IPs+for+Residential+and+Mobile+proxies.+The+create+and+update+call+is+a+single+upsert%2C+which+is+why+it+can+return+either+200+or+201.\u0026amp;theme=2e34642cd68cb11f4f6492d3\u0026amp;signature=2d76c879711faf728803c5c69281109adb2c6271df0f1c1eb149411f8e287ccf\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"IP whitelist - NodeMaven\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Manage whitelisted IPs for Residential and Mobile proxies. The create and update call is a single upsert, which is why it can return either 200 or 201.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://node-maven.mintlify.site/_mintlify/api/og/v2?division=Proxy+API\u0026amp;title=IP+whitelist\u0026amp;description=Manage+whitelisted+IPs+for+Residential+and+Mobile+proxies.+The+create+and+update+call+is+a+single+upsert%2C+which+is+why+it+can+return+either+200+or+201.\u0026amp;theme=2e34642cd68cb11f4f6492d3\u0026amp;signature=2d76c879711faf728803c5c69281109adb2c6271df0f1c1eb149411f8e287ccf\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/node-maven/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"NodeMaven\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#040404\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.nodemaven.com/proxy-api/whitelist\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/proxy-api/whitelist.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.nodemaven.com/#organization\",\"name\":\"NodeMaven\",\"url\":\"https://docs.nodemaven.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/node-maven/6hNMQgM9F7aPu_XV/images/logo-light.svg?fit=max\u0026auto=format\u0026n=6hNMQgM9F7aPu_XV\u0026q=85\u0026s=246eb26f0612267f8d60a54a5fcedf51\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.nodemaven.com#website\",\"name\":\"NodeMaven\",\"url\":\"https://docs.nodemaven.com\",\"publisher\":{\"@id\":\"https://docs.nodemaven.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.nodemaven.com/proxy-api/whitelist#webpage\",\"url\":\"https://docs.nodemaven.com/proxy-api/whitelist\",\"name\":\"IP whitelist\",\"description\":\"Manage whitelisted IPs for Residential and Mobile proxies. The create and update call is a single upsert, which is why it can return either 200 or 201.\",\"dateModified\":\"2026-10-01T11:34:05.171Z\",\"isPartOf\":{\"@id\":\"https://docs.nodemaven.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.nodemaven.com/proxy-api/whitelist#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.nodemaven.com/proxy-api/whitelist#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Platform API\",\"item\":\"https://docs.nodemaven.com/proxy-api/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Proxy API\",\"item\":\"https://docs.nodemaven.com/proxy-api/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"IP whitelist\",\"item\":\"https://docs.nodemaven.com/proxy-api/whitelist\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.nodemaven.com/proxy-api/whitelist#article\",\"headline\":\"IP whitelist\",\"name\":\"IP whitelist\",\"description\":\"Manage whitelisted IPs for Residential and Mobile proxies. The create and update call is a single upsert, which is why it can return either 200 or 201.\",\"url\":\"https://docs.nodemaven.com/proxy-api/whitelist\",\"mainEntityOfPage\":{\"@id\":\"https://docs.nodemaven.com/proxy-api/whitelist#webpage\"},\"dateModified\":\"2026-10-01T11:34:05.171Z\",\"publisher\":{\"@id\":\"https://docs.nodemaven.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.nodemaven.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"NodeMaven\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"NodeMaven","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API Reference","groups":[{"group":"Platform API","pages":[{"group":"Proxy API","icon":"code","expanded":false,"pages":[{"title":"NodeMaven API","sidebarTitle":"Overview","icon":"key","href":"/proxy-api/overview"},{"title":"Webhooks","sidebarTitle":"Webhooks","icon":"bell","href":"/proxy-api/webhooks"},{"title":"API keys","sidebarTitle":"API keys","icon":"key-skeleton","href":"/proxy-api/api-keys"},{"title":"Account","sidebarTitle":"Account","icon":"gauge","href":"/proxy-api/account"},{"title":"Users","sidebarTitle":"Users","icon":"user","href":"/proxy-api/users"},{"title":"Locations","sidebarTitle":"Locations","icon":"location-dot","href":"/proxy-api/locations"},{"title":"Statistics","sidebarTitle":"Statistics","icon":"chart-line","href":"/proxy-api/statistics"},{"title":"Sub-users","sidebarTitle":"Sub-users","description":"Create, update, delete and reset sub-users. Traffic limits are set in bytes, usernames and passwords have a 9-character minimum, and two limit fields cannot be combined.","icon":"users","href":"/proxy-api/sub-users"},{"title":"IP whitelist","sidebarTitle":"IP whitelist","icon":"shield-check","href":"/proxy-api/whitelist"},{"title":"Proxy capabilities","sidebarTitle":"Proxy capabilities","description":"Discover which configuration options are valid for a product before you build a proxy string, instead of hardcoding them.","icon":"sliders","href":"/proxy-api/proxy-capabilities"},{"title":"Proxy checks","sidebarTitle":"Proxy checks","icon":"circle-check","href":"/proxy-api/proxy-checks"},{"title":"Notifications","sidebarTitle":"Notifications","icon":"envelope","href":"/proxy-api/notifications"},{"title":"Checkout","sidebarTitle":"Checkout","icon":"cart-shopping","href":"/proxy-api/checkout"}]}]},{"group":"Product APIs","pages":[{"group":"Scraping Browser","icon":"browser","expanded":false,"pages":[{"title":"Scraping Browser API reference","sidebarTitle":"API reference","icon":"code","href":"/scraping-browser/api-reference"},{"title":"Proxy \u0026 Profile Best Practices","sidebarTitle":"Best practices","icon":"shield-check","href":"/scraping-browser/best-practices"}]},{"group":"LLM API Reference","icon":"sparkles","expanded":false,"pages":[{"title":"Ask ChatGPT and Gemini through one endpoint, priced only for what actually comes back.","sidebarTitle":"Reference","icon":"sparkles","href":"/llm-api/reference"}]}]}]}]},"basePath":"","title":"IP whitelist - NodeMaven","buildId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","deploymentId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","dynamics":[],"chunks":[]}