> ## Documentation Index > Fetch the complete documentation index at: https://support.appgate.com/llms.txt > Use this file to discover all available pages before exploring further. # Update an existing Site > Update an existing Site. ## OpenAPI ````json PUT /sites/{id} { "openapi": "3.0.0", "info": { "title": "AppGate SDP Controller REST API", "version": "API version 24.0", "license": { "name": "Proprietary", "url": "https://www.appgate.com" }, "description": "# About\n This specification documents the REST API calls for the AppGate SDP Controller.\n\n Please refer to the REST API chapter in the manual or contact AppGate support with any questions about\n this functionality.\n# Getting Started\n Requirements for API scripting:\n - Access to the Admin/API TLS Connection (default port 8443) of a Controller appliance.\n (https://support.appgate.com/docs/adminapi-tls-connection-v6-6)\n - An API user with relevant permissions.\n (https://support.appgate.com/docs/configure-admin-roles-v6-6)\n - In order to use the simple login API, Admin MFA must be disabled or the API user must be excluded.\n (https://support.appgate.com/docs/mfa-for-admins-v6-6)\n# Base path\n HTTPS requests must be sent to the Admin Interface hostname and port, with **/admin** path.\n\n For example: **https://appgate.company.com:8443/admin**\n\n All requests must have the **Accept** header as:\n\n **application/vnd.appgate.peer-v24+json**\n\n An exception is made for the **/admin/version** endpoint which instead expects an **application/json** Accept header.\n# API Conventions\n API conventions are important to understand and follow strictly.\n\n - While updating objects (via PUT), entire object must be sent with all fields.\n - For example, in order to add a remedy method to the condition below:\n ```\n {\n \"id\": \"12699e27-b584-464a-81ee-5b4784b6d425\",\n \"name\": \"Test\",\n \"notes\": \"Making a point\",\n \"tags\": [\"test\", \"tag\"],\n \"expression\": \"return true;\",\n \"remedyMethods\": []\n }\n ```\n - send the entire object with updated and non-updated fields:\n ```\n {\n \"id\": \"12699e27-b584-464a-81ee-5b4784b6d425\",\n \"name\": \"Test\",\n \"notes\": \"Making a point\",\n \"tags\": [\"test\", \"tag\"],\n \"expression\": \"return true;\",\n \"remedyMethods\": [{\"type\": \"DisplayMessage\", \"message\": \"test message\"}]\n }\n ```\n\n - In case Controller returns an error (non-2xx HTTP status code), response body is JSON.\n The \"message\" field contains information about the error.\n HTTP 422 \"Unprocessable Entity\" has extra `errors` field to list all the issues with specific fields.\n\n - Empty string (\"\") is considered a different value than \"null\" or field being omitted from JSON.\n Omitting the field is recommended if no value is intended.\n Empty string (\"\") will be almost always rejected as invalid value.\n\n - There are common pattern between many objects:\n - **Configuration Objects**: There are many objects with common fields, namely \"id\", \"name\", \"notes\", \"created\"\n and \"updated\". These entities are listed, queried, created, updated and deleted in a similar fashion.\n - **Distinguished Name**: Users and Devices are identified with what is called Distinguished Names, as used in\n LDAP. The distinguished format that identifies a device and a user combination is\n \"CN=\\,CN=\\,OU=\\\". Some objects have the\n \"userDistinguishedName\" field, which does not include the CN for Device ID.\n This identifies a user on every device.", "x-logo": { "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdcAAADMCAYAAAAh4uktAAAa1UlEQVR4nO3debgkVXmA8fcOAzOAwOAgIpHFQQbcARGXCEhEE0MkGkAF0RDF3UQTjRuKC0lcYtRozKIIAaNRk6CgUYkbAY0LsqmDIMKAuAEDjMAA4yydP75pvNPTt+ur6lPdfe+8v+ep55Gx69RXfavrVJ3lOyBJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJUrumxh3AHHQ8cGTFZ94BXDyCWLR52wp4ILAvsDewI7AI2BZYs2FbAfwMWA58b8P/1vCOAJ4KvB24bsyxSLPeFHAV0KnYPjKuADXnHQi8EfgqcBfV12LvdgPwSeBEYOcRxz6XPJ34PlcDHwL2HGs00ix3KLkb2O3AvcYUo+aeXYDXA5dTvzIdtK0FzgWOAeaP7Gzmhm7l2t1+DZwKLBlnUNJsdQb5G9fzxhSj5o49gH+g2Rtq3e064OVEU7Oq9Vau3W0NcDrRXC8pYQdgFfmb1dfHE6bmgG2JvrzVtF+p9m7LgaPaP8VZb6bKdXole/LYopNmkRdR/0a171gi1Wz2FOBaRl+p9m6fBe7X7qnOalWVawc4Z2zRSbPIt6l/g3rXWCLVbLQlcb2sZ/wVa3e7Efj9Nk96FrNylQp4KM1uTr8gbprSIIuBCxh/ZdpvWwf8ZXunPmtZuW7m5o07gDni+Q332wWf/DXYbsD5wOPHHcgM5hFv1B/EefPSPRxeP7ytiMQRTT0fOLtQLJpb9iAq1t2HKOMO4FvAD4k52LcSo4u3JBJK7AQ8DHgksNcQx3nphjK7Yw8kaShHM1yz2hocGKJN7QRcQbNragXwAeJtt84D9C7AnxIj2Zv27TqOINgsLA3p8wzfb/XakUetSbaQZgPklgMv2bD/sB4B/BfNKtkXFTj+bGflKg3h/kQWm2Er1yuxv0q/8UHqXT93EnMmS1SqvQ4ALqkZz91EGsbNmZXrZs4+1+GcAGxRoJylRBPeBQXKatNuwIOJeHclkhksIJJn3Elk8bmSSAC/cjwhpi0gRnkvJZLab0v0Qa4HfkX0TV5F9FVeueHfR+EYov8y63LgGcCydsLhYuAg4CQiZ3Hmel8AfIJ4+13VUly97k30He9DXKf3ArYhKvpVwE+Jv+My4JcFj7s98Kw+/75fYt89gBf2+febiVaDNmwFPIT4nvYmvqdFxKjv24Bb+M11/yNGd91L95gCrqb66fR84mZd9bnTRxt+yhbA7xI5Ua8h/+ayjrgpv4vcTWZUdgVeDXyZeBjIns/NwFnEw9R2Lca3GLipRlxnExXIqBxJDJDKxveeluN5JPBu4FLimsvG9UOideAQhm8xemCN42a3S4aMqdd9gVcQeaLr/P1WAP8JPBdzoWuEDiN3gT4T+OfE5+6g3Rt3HTsCbyKWHytxs7gM+GPGN6f3EOBzlGnCX0U8bCxtIc4P1YjjDMbT8vQo4u0mE+Nayj9cbUXk5f5BMoaq7Rrgz4mWiyYmuXJ9DPBpYtDksDHdAXwYcyJrBD5K9QV5M9FEdlDisx1ima9xWkA0/d1G+RtGhxhwc/TIziZu7OcXPofuto6o4HYpFOsB5N++zqJMd0RTB5NfLOALBY97LNH10Mbf80bgZdT/Xiexcn0Q8Zbaxve0FjgNlyNUSxaRa1Z8/7R9vpf4/DdHEn1/jyP6pNr4QfZu5wK/1eK5LAD+jjJP7FXbSvr3m9V1VvJ4F9HOwKW6jiE/kvjgIY+1O9GUP4pr87tEX3zWJFWu84FTGM2CDrfgyl5qwUvIXYD7Tdvnlcl9HjyC+KebAl7DaCqi6dtNRBL60vYibpCjPJcOscD49g1jfgi5t9ZfMVnNctlm7GGSpPwB0fc3yr/lKvIVx6RUrrsR85NHfd3/G/bHqqALqb7ovtuzz07EyMWq/d7dfvj3mE8MpBr1D7K7raXsnMhHEc174zqfS2jWTJzpk+8QCR4myXZEU39V3OuIkal1vZx6A5VKb++gesDTJFSuD6Xc+Igm24XYTKwCHkHugus3neJTif1uYDQDf7YEPpOIZxRbiSQahwC3T8C5XE3Mf85aSG6A0KWMt591Jg8imoirtrqpFU9i/H/LDvF2PqiCHXfleiD5AWZtbj/CTHMa0t9TfaHdRYy47fW7iX07wB+1egZxszgzGcsotvXAC4Y4n/2Ivs9xn0d3W0bMu8w4Jllm29fEJMl2u4xqe+eAWMdZuS5lvC01vdtlxHgUYVaguhYQzS+LKz73ceDZff59HtGMVpWI/b+Jvqa2nAy8teG+1wNfIvLeriCG6O9IzCF9KDF4pUkT0TrgScDXau63M3Ez2rXBMdcA/0sMErqOqKDnE+ezlBjlfQDN3hi/CjyZOK9BzgSeU/GZK4m++M1hQv+TiRHGTVbsWk0kYvk+0QJ0K7ADcB/iDftx5B96ep0IfKTPvy+m/5J7S4ksTYP8mP7JIn5BPMQPsgNx3TZZbGE1kV7zm0RCjRXENb4TkdjiccQDa5Pr/lxipa/N4VpVQc8g9wT3xAFlvDWx/1raG017GPXne94OvJ2oaKpMAYcSTeB189L+nJjwnjWPZlMOvk5M61iUOMZ9iAn41zc4TuYBJlPu5pJ7eleiUqzzHa8nujeOpnpgzTyi++BM6v8G7iQyQGW1nf7wP2rG3wG+ARxHbrT5jsCf0WzxiJOGOC9tpjI38msY/NS9J7lBGm9oIf5tgGsTx+5uvyZWV2k6WOFA6k+h+FSN8l9cs+xlRJahJrYmRlXfWuN4a4H9B5S5d6KM9cRI0M3B2dT7e55HJEpo4iFE5VbneBeRf5trs3I9tmbcVxNdUk1MEW/tdfp111DvQUSbud3JVYonJ8r6UqKcqyjfbP/2xHG7203EG+iwpoDXUW/UZ+ZGsDP1fvBnUmZ+6BKi2TF73G8y88NWpr/18gIxzwZPJf+drqPc2/wJ5Ebxd7fsiO22KtftiRaebLz/SpkUmfclulCyx70Aux2VdDK5H31mYevsk2eJyq1rV/JZdZYBDyh4bIib56rk8S+m+of5nmRZHeKNs6TtiHSK2ePPNBjpjYl9/6lw7JNoHvEQkfkubweOKHz8x5Jvjl5Bbl5nW5XrW5Jxdoh7VskKbgHw7zWO/7SCx9Yc1R2IVHUxfTFZ3kIiNWJVeWcUO4PIWJT5QfyS3ANCE0eT74cddAO9D/kE5H/TwnlANBNn11y9iP43uUwKzZe1FP8kOYrc97iO9gb6HUT+4fNVifLaqFy3I3ff6BC/9zbMJ+5zmRgubCkGzSFPJHcxPaNGmR9IlLeKGBU4rG3IrcxzF/EU36ZMC0CHwQ8qr0uW8WmajTrNuh+xlFkmlt/us3/mJvWkFuOfFNnmxle3HMdx5B7+rqX6umqjcn1poswOMdq6zTnROxDzWpte99I9Pk71RbSCaDbJ2i9RZocyGYyOSx7rrwocq8o8otm3Kpa1zDy9JtOEuJKYWtC2pyVi6QD/0mffbyT2GzQgai5YQq5CO39E8XwsEUuHGHU/SBuV67cSZa4iptO07fBELB0i+5jU147kmouq5qX1c1Gi3G8PFz6Qy8R0I81z49aV/WH2axJ9WHLf17d6Bhu7IBHPCjZ927kssd8k5RJuw2up/g7WA48eUTwPIDfAqaovvHTlumeivA7w5hplDiuz2ES/636zMI71IGeb7Lyw0xqU/RGq544eRCRn+EGD8iGahw5NfO5dxFJzo/BlIllE1dP/E4lFrXv/rcpNwPvqh9XYSUTT5iCLidSZl0z7t05rEeU9jJj0PyqfZeMR0Jm/5zmUecjMWE6kPKwaFZyJu6TfSXzm18A/th3INO+lOlHGYqL15aL2w9Fsk3m7bNpxv4jc0nXvbRx9VN6ZN4O2BjHN5IWJuFb02S/ztHxqy7H3miLX9/rKnv0yb7xtNwt/IhFDye0Ppx17PrkR5HXGMpTw6ERMHQYnein95npGorw6c8RL+WEirr8YQ1xjt1m+rtewP7msRE3eWiH6Bc9KfO54YKuGx3hI4jMXAz9pWH5T51CdIm0xm64yk1lrc5glzproJI/Z+7e4PbHPfeqHk7aY0U+XuHHa/15C9RzM1eRH4ZdyITGXtEqddV+HlTlWNk91yW3fQrHPOVaug2XWdLyLmPvVVL98pb12onlmoX0Snzm3YdnD+CXR51hlevxbUT3/dh3R7Dxqme+w92/xiwb7lHQ89QbhlXDDtP+dObdvMLruiq71NPt7tmWKyFU8W2Uq4DnHynVmC4n+1ipnEW+gTZ1HpEyskl28uVdmGagfNix7WJnsQ9PfXHeiepzAtcQDz6hlvsPet/ArE/u0+dTf9Jpqai2x8EVXZrGFcWWoWpb4TJPFIprYntm9IPmovqeJ4oCmmT2d3Aoa05uE9yRW9ahrOdFENsiTiXVCf1qz7MyP8qaaZZZyY/VHNhrBvF2hMttwQ/VHNon/isQ+T6gfSsqjgIe3VPZMriCaebsy1+YvW4qlxHFHNbo+c91PstkefyNWrjPLPNVfw8ZLpL2GWIuyDVsQeVDrzkXN5BW9u3Y0ZWTeMKeP1M6cy+rqj7Qi8x1u3fPfFyf2WUo0hS+vHdFgzy9cXkZvN0Dv99HPuK7NOxOf2bb1KELme5pkJXIbzzo2C/e3J7mh76cTnfoQP4Bj2wpogz+hfq7QzOdHdZPolXlzWTXtf2fOZVw/5Mx3eEfPf/+U3Ntrv7WBh7EN8KzCZWZ8o+e/MxXYuCqWzN9zVInpM9/TJJvt8Tdi5drfCVR/N+vYOPfvUeTWBx3GEtppJmxr7dgq9098pu5glkyZbWh6Ll9J7HcCZdPZHU2ZtJp1faHnv3sfNvoZV3/dJPUTZkaVT7Jbxx3AONgsvKl5xM2sypeIha67RtXM9nw2boouYdR9b3WOW3eK0P2IgU/95si2KXMu1/f5t89QnZx/L2Ku5zCj0qdbSeRnLmE+8CaqRx1fTgw2m67f99FrXOuCTtJ6pLcRucHH8UBUQukujVnBynVTh5PLzTl9INMDKbs83CB/RLwhryxY5hHk16ksZR9yqf0yI2qnmyLOp+SKQhmZ1Vr6nctXiQeIqiQeJwP/RWThGdY5NF+ou9fLyU3n6fdgkPnbPoYYWHhLnaCGtAXNFxdvy5VEtrZB7mY8I+WrfH/cAWgyZDLW3MTGN5S/TuxTcqszaCq77ugjapRZQianbO8TbybbVIdcYo6StiIedqrimql145TEvh3KLRBeyr3JLYG2hv5dD1uQW63pOW2eRB8HJ2LqAGcOKKN0hqZTE+WNOtmGlLaYXNLu903bZz4xd2+UlWuddIvZyvU9Ncoc1jwiV3JVTKf37JetXO9k0zmlbXpGMq6Zplvdj9ziEKuYrGw32YWzPz2gjM8m9h91kpMPJWIadeV6fKK8dVQnWZHG4k/J/aim98f8QXKf0tsjkueUrVzvYjRLVUH0aWdi6k3ika1cO1SvWlLKluTWtry6opz3J8roEMkqJmHe4CvIxbseOHBAOa9MlpMZvV/CPsSbdiamUVauuxKVZ1WZLvE2Iexz3VhmUNKFbNyHsCXwzsJxvIzqaSrPI25wpSwk5tC23QS3DfC2xOdWMVy/4InEMoCZqS7DeBGwd+JzVYOR3kVcf1VTifYl3gSPYHxzep8E/G3ys2cD3x3w/38KeDfVo6HfSSTUr8pHPay3U+a+uDbxmTqpJ39OrLxUtZLUC4iUqk0XE5GKeyS5p9UXjyCWjyTiyC7Onn1z7W7PLXgevabILTzfAT7aZ/86b64dImlBm2nj9iemk2Te3jJ5aDP90N3tbHJLIZb2++SasDtEF8uDEmV+MVneKQXPo58Tk3Fk3lwPS+z/vZrxnZCM6/tMRuuGBMS6oVUX7Z2MZjj84xOxdMgtxVW3cr0beGy5U9nI65MxrKf/akR1K9cO8ZbXxnzu+wLXJWP4XLLMLYkbY/bcziemHY3KccTbcja+NyfLfXKyvPXAM8ucyiYOpt65VVWueyf2XwvsXCPGhcQbbCa2/6bs3Oiu7Ym34xcmtlE15WuCbU1MdK66YPu9TbVhihh6XxVPZqBH3cq1Q4wALfnDmCLmVWb6jLo3hn6aVK4d4m25ZKafJeQGZHW3Og8r+5N/M+wQc0UPHvaEKmwDfLhGTB3iIaFOs+d3kuXeSfkK9jByo57rVK7zya3V/Iaasb6qRnxnUTZj2b2JReuzx2+SZ11zzLPJXSxV/R0lvS4Rzzqq50c2qVw7xHzKlxY4j62Bj9U87kxr0DatXDvEzbtEJqrDiCb57HE/2eAYmYXke6+Dfya30ERdR5BbEHv69ivqLzN2MPFmmil/PdFvXyL94EuIa67JNTWocoVY+rCqjJXUG+G7EPhxjRi/VbP8mexPDMrLHvc/CxxTc8BXqL5YfszocolCjA7MjFo8uaKcppVrdzuPGEhS1zxicNS1NY83aKDMMJVr96Z/Es2e5vcgbqbZt+8OkVmnaYWemdfYu91K9EsOu8D6FNFycX6DGNYTiU6aOKPmsb5D83Sg+wP/U/N4vVtV5fqKZDk/oF66xafUjHMV0SXTpPVmR2IwWZ0HkNuB3RocS3PMEnJPzCeNIbZMxbicwX2Kw1au3RvmOcRcux0rYt6LaLq6rMFxLmXwIJ1hK9fu9jNiZPSBDH5gWkgM4DmVek213e34AWVXmU+kRmxyfqs37Pss8n1684nv9xTimmr63f55w/OFyDx2TYNjfoHoD15UUf42xBSZT1LvIWmmrapy3ZncvPnuNflM8g/w/9Qg3hVERflwBt8z5hHZoN5HLjlK7/ai5DnMaaN8E5tUbyNyow6yjlgpp+5aqsM6ilzzypOIJqh+Pkc07ZWylhjmfznxY72TGJG7O/GjzYwO7ec24gc9KCXeAcBFDcufyc+J87maGPk7n7hJLyVS7zUdbXwqMfBjGAuJJAuHD1FGh/hOLyfO8Wbiu96GaEbeifibPZLh++feCrxlyDIOIt6Y6/TXdq0hVt75AfFbvYP4++1MJN84mLJ97x+lenT9vxDN/FnXEg8Ly4mWlq5T2Xga0kLg/4g38CZuJpqMbyDWrp1HDFbam/idLW5Y7oepd76ao7Yg8rpWPYl9fkzxbUUs/l0V38cHlFHizbXt7W5yA6hKvbm2vZ1L/O1KWEAuJec4t/XEWsalHE08xI37vKq2qjdXiG6B2wocq9/1tCvDtTKU3r4+Q5zaDP0euYvm6HEFCLx3QFzd7S5mbq6d9Mp1NfGGnjEbKtcLKD+3dh7RF50d8DPK7S7amR5zIpNfwWYqV4iBgcMea6ZKaykxYnzc38X5zN5Ve9SCT1F90dzEeJ/GHjZDXL3bTMuWTXLlejvRpJ016ZXrObS7uPcf0mzKSFvbMtpdrvBo8n2W49iylSsM3/ow6B60O9HsP67v4fOUnfKjWW4ncpPGR5nQfiYXUh3nxTPsm6lc30ezgQvDbJcz85SbmWQq10uISm6U57KOGAjUxqT9XruP4fx6t7XAB2j3QaLrIEbf9HkruSxpdSrXheRmJcy0VT3gLyLmtY76un8nkfxEuscryV1Ak7AKyUvIxdpvcEOmcj2EGDX91eRxhv1BfhDYtsH3kKlczyMG6r2M3HJmw25XM9yAo6aOpN68w1Lb+cB+7Z/eRnYkKrJRNIufSwxePDLx2TqVK0T/+WkN48q0nk0R94qVhb+Tftv1mIFJM/ge1RfQt8cW3cYWkcv28oE++2YrV4gf57NpNh0ie2MetEJKlWzl2rUrMXeyjb67XxHp/Ubx9jaTLYl8s5lsXsNuXyPGKIzTocQiAG2c3xXAMdOO1Ubl2vUX1E+1WKdrahdiucbs6j51tpXE3HpzF6uvR5G7kCZpvlYmy9HNbDpPtE7l2rUl8CfkmqOrtrUbYnjCkOcP9SvXrqXEvMASozavJyrVqvm+o7QFMR/3EzSbjzvTdgPxwDbMA1EbnkIkgCgxV/UC4Fg2bdLPLCXZtHKFyGB1Dvm38SbjPpYA/0iZN9lrialWbWQB0xySmYC9iska/XY4uR/BsT37Nalcp3s4UZl8k/zT9m0bjvtnlF20vGnl2nUvYrGDjxHzILM3lmVEJXM47SwCUNIORIakfyD6teu8td9FVDZvI9I8TvqSlPcn3gI/TwyOy5zjKuIaeS2DVyqaIgaQDUqGMkzl2vVwYsxD1ZTAYQZVLiSu+38lv9jEGiKpyweJ+4M5EWraXL+w11Ndcf6I6B+ZFPOICfpVP7JLiTeYrkwSiUOJJtsqC4k+6CVEerNtiVGCK4mb20+I5rXl5NazrCuTROJ/yb8l70a8QTyAeBPdgUjzdgcxSvxHRJPrLQ1inRQLiDf3fYi3jkXEQ8ZqoqK5g/i7XUXceNteL7Ut84m/475Epbs98fe8jXhouI7o7ug+cGRNEaOW38ymA/AySSTq2IuobB9ANLtO73I4iXhTL2EXfnPdLyauhzXEdX4LcT1cRnRFSZrBsG+uk2TYN1epqXlEn+wVlH1z1Rw16U1ckjQJ1gP/ATyYaGK9arzhaNJNep+KJE2SbiX7GerP09ZmxDdXSaqvO+BH6svKVZKkwqxcJUkqzMpVkqTCrFwlSSrMylWSpMKsXCVJKszKVZKkwqxcJUkqzMpVkqTCrFwlSSrMylWSpMKsXCVJKszKVZKkwqxc5767xx1AQauJJb8kaaJZuc59xwF/DFw+7kAKWAYsBd7P3HpokCTNUvOApwL/B3R6tkPGGFdT9wXeAtzKxudy3vhCkiRtzh4PfJZoYp2tlWvX9sArgJ9h5SpJmgD7Af8OPG7McZSwNfBS4LRxByJJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiS17f8B39C5qj6jPb0AAAAASUVORK5CYII=", "href": "#" }, "contact": { "name": "AppGate SDP Support", "url": "https://support.appgate.com/docs", "email": "appgatesdp.support@appgate.com" } }, "servers": [ { "url": "https://appgate.company.com:8443/admin" } ], "security": [ { "BearerAuth": [] } ], "x-tagGroups": [ { "name": "Authentication & Authorization", "tags": [ "Version", "Login" ] }, { "name": "Dashboard", "tags": [ "Top Entitlements", "User Logins Per Hour", "Devices On-Boarded Per Hour" ] }, { "name": "Admin Messages", "tags": [ "Admin Messages" ] }, { "name": "Access", "tags": [ "Policies", "Conditions", "Entitlements", "Risk Model", "Ringfence Rules", "Admin Roles", "Criteria Scripts", "Entitlement Scripts" ] }, { "name": "Identity", "tags": [ "Client Profiles", "Identity Providers", "IP Pools", "MFA Providers", "Device Claim Scripts", "User Claim Scripts", "Local Users", "Service Users" ] }, { "name": "System", "tags": [ "Appliances", "Replication Targets", "Sites", "Tags", "Appliance Customizations", "Trusted Certificates", "Secrets Manager", "Client Auto-Update", "Certificate Authority", "Appliance Change", "Appliance Upgrade", "Appliance Backup", "Appliance Metrics" ] }, { "name": "Usage", "tags": [ "Active Sessions", "Client Logs", "Discovered Apps", "Health", "Registered Devices", "Blacklisted Users", "Licensed Users", "Default Time-Based OTP Provider Seeds", "FIDO2 Devices", "Issued Certificates" ] }, { "name": "Settings", "tags": [ "Global Settings", "MFA for Admins", "License", "ZTP", "Replication Source" ] }, { "name": "Other", "tags": [ "Admin Preferences" ] } ], "paths": { "/sites/{id}": { "put": { "summary": "Update an existing Site.", "description": "Update an existing Site.", "tags": [ "Sites" ], "parameters": [ { "$ref": "#/components/parameters/id" } ], "responses": { "200": { "description": "Updated Site.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Site" } } } }, "400": { "$ref": "#/components/responses/JsonError" }, "401": { "$ref": "#/components/responses/TokenError" }, "403": { "$ref": "#/components/responses/PermissionError" }, "404": { "$ref": "#/components/responses/NotFoundError" }, "406": { "$ref": "#/components/responses/responses-NotAcceptableError" }, "422": { "$ref": "#/components/responses/ValidationError" }, "500": { "$ref": "#/components/responses/UnexpectedError" } }, "requestBody": { "$ref": "#/components/requestBodies/Site" } } } }, "components": { "parameters": { "id": { "name": "id", "in": "path", "description": "ID of the object.", "required": true, "schema": { "type": "string", "format": "uuid", "example": "12699e27-b584-464a-81ee-5b4784b6d425" } } }, "schemas": { "Site": { "allOf": [ { "$ref": "#/components/schemas/BaseEntity" }, { "type": "object", "description": "Represents a Site.", "properties": { "description": { "type": "string", "description": "Description of the Site to be displayed on the Client.", "example": "Gives access to Azure endpoints." }, "geolocation": { "type": "object", "description": "Geolocation of the Site.", "properties": { "latitude": { "type": "number" }, "longitude": { "type": "number" } } }, "networkSubnets": { "type": "array", "description": "Network subnets in CIDR format to define the Site's boundaries. They are added as routes by the Client. Comments are supported with \"#\" delimiter.", "items": { "type": "string", "example": "10.0.0.0/16#comment" } }, "fallbackSite": { "type": "string", "format": "uuid", "x-uuid-ref": "Site", "description": "When the Client fails to connect to the Site for a certain period of time, configured Entitlements (see Policy) will be moved to this \"Fallback\" Site.", "example": "4c07bc67-57ea-42dd-b702-c2d6c45419fc" }, "localSiteDetection": { "type": "object", "description": "Local Site Detection feature settings.", "properties": { "enabled": { "type": "boolean", "description": "Enables the Local Site Detection feature.", "default": false }, "publicIps": { "type": "array", "description": "The public IPs or the CIDRs of the clients that will be considered local to this Site. Those clients will connect to Gateways with the configured local hostname and local weights in Appliance configuration.", "items": { "type": "string", "example": "200.200.200.200" } } } }, "useForNearestSiteSelection": { "type": "boolean", "description": "If enabled, this Site will be included in the nearest Site override selection in Policies." }, "ipPoolMappings": { "type": "array", "description": "List of IP Pool mappings for this specific Site. When IPs are allocated this Site, they will be mapped to a new one using this setting.", "items": { "type": "object", "properties": { "from": { "type": "string", "format": "uuid", "x-uuid-ref": "IpPool", "description": "IP Pool ID to map from. If a user is authorizing with this IP Pool via Identity Provider assignment and has access to this Site, mapping will occur for that user.", "example": "4c07bc67-57ea-42dd-b702-c2d6c45419fc" }, "to": { "type": "string", "format": "uuid", "x-uuid-ref": "IpPool", "description": "IP Pool ID to map to.", "example": "8c07bc67-5711-42dd-b702-c2d6c45419f8" }, "type": { "type": "string", "description": "Mapping type.", "default": "Translation", "enum": [ "Translation", "Allocation" ] } } } }, "defaultGateway": { "type": "object", "description": "Default Gateway configuration.", "properties": { "enabledV4": { "type": "boolean", "description": "When enabled, the Client uses this Site as the Default Default for all IPV4 traffic.", "default": false }, "enabledV6": { "type": "boolean", "description": "When enabled, the Client uses this Site as the Default Default for all IPv6 traffic.", "default": false }, "excludedSubnets": { "type": "array", "description": "Network subnets to exclude when Default Gateway is enabled. The traffic for these subnets will not go through the Gateway in this Site. Comments are supported with \"#\" delimiter.", "items": { "type": "string", "example": "10.0.10.0/24#comment" } } } }, "entitlementBasedRouting": { "type": "boolean", "description": "When enabled, the routes are sent to the Client by the Gateways according to the user's Entitlements \"networkSubnets\" should be left be empty if it's enabled.", "default": false }, "vpn": { "type": "object", "description": "VPN configuration for this Site.", "properties": { "snat": { "type": "boolean", "description": "Source NAT.", "default": false }, "tls": { "type": "object", "description": "VPN over TLS protocol configuration.", "properties": { "enabled": { "type": "boolean", "default": true }, "version": { "type": "string", "description": "TLS version.", "default": "TLSv1.3", "enum": [ "TLSv1.2", "TLSv1.3", "TLSv23" ] } } }, "dtls": { "type": "object", "deprecated": true, "description": "Deprecated as of 6.6. VPN over DTLS protocol configuration.", "properties": { "enabled": { "type": "boolean", "default": false } } }, "quic": { "type": "object", "description": "VPN over QUIC protocol configuration.", "properties": { "enabled": { "type": "boolean", "default": false } } }, "routeVia": { "type": "object", "description": "Override routing for tunnel traffic.", "properties": { "ipv4": { "type": "string", "description": "IPv4 address for routing tunnel traffic.", "example": "10.0.0.2" }, "ipv6": { "type": "string", "description": "IPv6 address for routing tunnel traffic.", "example": "2001:db8:0:0:0:ff00:42:8329" } } }, "urlAccessEnabled": { "type": "boolean", "description": "Whether to enable URL Access feature or not." }, "urlAccessP12s": { "type": "array", "description": "P12 files for proxying traffic for URL Access feature.", "items": { "allOf": [ { "$ref": "#/components/schemas/P12" }, { "type": "object", "properties": { "verifyUpstream": { "type": "boolean", "description": "Gateway will verify upstream certificate of the endpoints.", "default": true } } } ] } }, "ipAccessLogIntervalSeconds": { "type": "number", "description": "Frequency configuration for generating IP Access audit logs for a connection.", "default": 120 }, "logNatIpAndNatPort": { "type": "boolean", "description": "Whether to log NAT traffic or not.", "default": false } } }, "nameResolution": { "type": "object", "description": "Settings for asset name resolution.", "properties": { "useHostsFile": { "type": "boolean", "description": "Name resolution to use Appliance's /etc/hosts file.", "default": false }, "dnsResolvers": { "type": "array", "description": "Resolver to resolve hostnames using DNS servers. If there are no DNS Resolvers with empty match domains, one will be added automatically.", "items": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Identifier name. Has no functional effect.", "example": "DNS Resolver 1" }, "updateInterval": { "type": "integer", "description": "How often will the resolver poll the server. In seconds.", "default": 60 }, "queryAAAA": { "type": "boolean", "description": "Perform AAAA lookups.", "default": false }, "zonesTransfers": { "type": "boolean", "description": "Perform zones transfer.", "default": false }, "defaultTtlSeconds": { "type": "integer", "deprecated": true, "description": "Deprecated as of 6.4. This will apply whenever Gateway gets a DNS response which has no TTL set.", "default": 300 }, "servers": { "type": "array", "description": "DNS Server addresses that will be used to resolve hostnames within the Site. Leave it empty to use the Gateways' own DNS configuration.", "items": { "type": "string", "example": "10.0.0.2" } }, "matchDomains": { "type": "array", "description": "The DNS resolver will only attempt to resolve names matching the match domains. If match domains are not specified the DNS resolver will attempt to resolve all hostnames.", "items": { "type": "string", "example": "company.com" } }, "autoClientDns": { "type": "boolean", "description": "This will configure Client machines' DNS according to this resolver if the Client connects to this Site." } } } }, "awsResolvers": { "type": "array", "description": "Resolvers to resolve Amazon machines by querying Amazon Web Services.", "items": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Identifier name. Has no functional effect.", "example": "AWS Resolver 1" }, "updateInterval": { "type": "integer", "description": "How often will the resolver poll the server. In seconds.", "default": 60 }, "vpcs": { "type": "array", "description": "VPC IDs to resolve names.", "items": { "type": "string" } }, "vpcAutoDiscovery": { "type": "boolean", "description": "Use VPC auto discovery." }, "regions": { "type": "array", "description": "Amazon regions.", "items": { "type": "string", "example": "eu-west-2" } }, "useIAMRole": { "type": "boolean", "description": "Uses the built-in IAM role in AWS instances to authenticate against the API." }, "accessKeyId": { "type": "string", "description": "ID of the access key." }, "secretAccessKey": { "type": "string", "description": "Secret access key for accessKeyId.", "writeOnly": true }, "httpsProxy": { "type": "string", "description": "Proxy address to use while communicating with AWS. format: https://username:password@ip/hostname:port" }, "resolveWithMasterCredentials": { "type": "boolean", "description": "Use master credentials to resolve names in addition to any assumed roles." }, "partition": { "type": "string", "description": "What AWS partition to use such as 'aws-cn' or 'aws-us-gov'", "default": "aws" }, "ec2": { "type": "boolean", "description": "Resolve EC2 resources.", "default": true }, "apiGateway": { "type": "boolean", "description": "Resolve API Gateway resources.", "default": false }, "eks": { "type": "boolean", "description": "Resolve EKS resources.", "default": false }, "rds": { "type": "boolean", "description": "Resolve RDS resources.", "default": false }, "assumedRoles": { "type": "array", "description": "Roles to be assumed to perform AWS name resolution.", "items": { "type": "object", "properties": { "accountId": { "type": "string", "description": "AWS account ID." }, "roleName": { "type": "string", "description": "AWS role name" }, "externalId": { "type": "string", "description": "AWS role external id." }, "regions": { "type": "array", "description": "AWS regions.", "items": { "type": "string" } } } } } } } }, "azureResolvers": { "type": "array", "description": "Resolvers to resolve Azure machines by querying Azure App Service.", "items": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Identifier name. Has no functional effect." }, "updateInterval": { "type": "integer", "description": "How often will the resolver poll the server. In seconds.", "default": 60 }, "useManagedIdentities": { "type": "boolean", "description": "Uses the built-in Managed Identities in Azure instances to authenticate against the API.", "default": false }, "tenantId": { "type": "string", "description": "Azure tenant id, visible with the azure cli command `azure account show`." }, "clientId": { "type": "string", "description": "Azure client id, also called app id. Visible for a given application using the azure cli command `azure ad app show`." }, "secret": { "type": "string", "description": "Azure client secret. For Azure AD Apps this is done by creating a key for the app.", "writeOnly": true }, "subscriptionIds": { "type": "array", "description": "Subscription IDs to resolve names for.", "items": { "type": "string" } }, "subscriptionIdAutoDiscovery": { "type": "boolean", "description": "Use subscription auto discovery." } } } }, "esxResolvers": { "type": "array", "description": "Resolvers to resolve VMware vSphere machines by querying the vCenter.", "items": { "type": "object", "required": [ "name", "hostname", "username" ], "properties": { "name": { "type": "string", "description": "Identifier name. Has no functional effect." }, "updateInterval": { "type": "integer", "description": "How often will the resolver poll the server. In seconds.", "default": 60 }, "hostname": { "type": "string", "description": "Hostname of the vCenter." }, "username": { "type": "string", "description": "Username with admin access to the vCenter." }, "password": { "type": "string", "description": "Password for the username.", "writeOnly": true } } } }, "gcpResolvers": { "type": "array", "description": "Resolvers to resolve GCP machine by querying Google web services.", "items": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Identifier name. Has no functional effect." }, "updateInterval": { "type": "integer", "description": "How often will the resolver poll the server. In seconds.", "default": 60 }, "projectFilter": { "type": "string", "description": "GCP project filter." }, "instanceFilter": { "type": "string", "description": "GCP instance filter." }, "forwardingRulesFilter": { "type": "string", "description": "GCP forwarding rules filter." } } } }, "illumioResolvers": { "type": "array", "description": "Resolvers to resolve names by querying Appgate Illumio Resolver.", "items": { "type": "object", "required": [ "name", "orgId", "hostname", "port", "username" ], "properties": { "name": { "type": "string", "description": "Identifier name. Has no functional effect." }, "updateInterval": { "type": "integer", "description": "How often will the resolver poll the server. In seconds.", "default": 60 }, "orgId": { "type": "string", "description": "Organization ID of the Illumio Resolver." }, "hostname": { "type": "string", "description": "Hostname of the Illumio Resolver." }, "port": { "type": "integer", "description": "Port number of the Illumio Resolver." }, "username": { "type": "string", "description": "Username with access to the Illumio Resolver." }, "password": { "type": "string", "description": "Password for the username.", "writeOnly": true } } } }, "dnsForwarding": { "type": "object", "description": "DNS Forwarding feature. Always enabled and will be filled if there is no object is passed.", "required": [ "allowDestinations" ], "properties": { "siteIpv4": { "type": "string", "description": "DNS Forwarder Site IPv4 address.", "example": "100.110.0.0" }, "siteIpv6": { "type": "string", "description": "DNS Forwarder Site IPv6 address.", "example": "2001:db8:0:0:0:ff00:42:8329" }, "dnsServers": { "type": "array", "description": "DNS Servers to use for resolving endpoints. Leave it empty to use the Gateways' own DNS configuration.", "items": { "type": "string" }, "example": [ "172.17.18.19", "192.100.111.31" ] }, "allowDestinations": { "$ref": "#/components/schemas/AllowResources" }, "matchDomains": { "type": "array", "description": "The match domains to use for automatic Client DNS configuration.", "items": { "type": "string", "example": "company.com" } }, "autoClientDns": { "type": "boolean", "description": "This will configure Client machines' DNS according to this forwarder if the Client connects to this Site." } } } } } } } ] }, "BaseEntity": { "type": "object", "required": [ "name" ], "properties": { "id": { "type": "string", "format": "uuid", "description": "ID of the object.", "example": "4c07bc67-57ea-42dd-b702-c2d6c45419fc" }, "name": { "type": "string", "description": "Name of the object.", "example": "object" }, "notes": { "type": "string", "description": "Notes for the object. Used for documentation purposes.", "example": "This object has been created for test purposes." }, "created": { "type": "string", "format": "date-time", "description": "Create date.", "readOnly": true }, "updated": { "type": "string", "format": "date-time", "description": "Last update date.", "readOnly": true }, "readOnly": { "type": "boolean", "description": "Whether the entity is protected from manual updates and deletes.", "example": false, "readOnly": true }, "tags": { "type": "array", "description": "Array of tags.", "items": { "type": "string" }, "example": [ "developer", "api-created" ] } } }, "P12": { "type": "object", "description": "PKCS12 object with X.509 certificate and private key.", "properties": { "id": { "type": "string", "format": "uuid", "description": "Identifier to track the object on update since all the other fields are write-only. A random one will be assigned if left empty." }, "content": { "type": "string", "format": "byte", "writeOnly": true, "description": "Contents of the P12 file in Base64 format." }, "password": { "type": "string", "writeOnly": true, "description": "Password for the P12 file." }, "subjectName": { "type": "string", "readOnly": true, "description": "Subject name of the certificate in the file." } } }, "AllowResources": { "type": "array", "description": "A list of subnets to allow access.", "items": { "type": "object", "required": [ "address", "netmask" ], "properties": { "address": { "type": "string", "description": "IP address", "example": "0.0.0.0" }, "netmask": { "type": "integer", "description": "netmask", "example": 32 } } } }, "Error": { "type": "object", "description": "Generic HTTP error.", "properties": { "id": { "type": "string", "description": "Machine readable error code." }, "message": { "type": "string", "description": "Human readable error details." } } }, "ValidationError": { "type": "object", "description": "Http 422 error for object validation.", "properties": { "id": { "type": "string", "description": "Machine readable error code." }, "message": { "type": "string", "description": "Human readable error details." }, "errors": { "type": "array", "description": "List of fields with validation errors.", "items": { "type": "object", "properties": { "field": { "type": "string", "description": "Name of the field that failed validation.", "example": "name" }, "message": { "type": "string", "description": "Failure reason.", "example": "may not be null" }, "displayField": { "type": "string", "description": "Name of the field that should be displayed in the UI. It's an internal field to be used by the local replication service.", "example": "Name" }, "replicationMessage": { "type": "string", "description": "Message to be displayed in the replication UI. It's an internal field to be used by the local replication service.", "example": "Name is required." } } } } } } }, "responses": { "JsonError": { "description": "JSON error. Check the JSON format.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "TokenError": { "description": "Token error. Login again.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "PermissionError": { "description": "Insufficient permissions to access this resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "NotFoundError": { "description": "The requested resource can not be found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "responses-NotAcceptableError": { "description": "Invalid 'Accept' header.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "ValidationError": { "description": "Request validation error. Check \"errors\" array for details.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationError" } } } }, "UnexpectedError": { "description": "Unexpected server side error.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "requestBodies": { "Site": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Site" } } }, "description": "Site object.", "required": true } }, "securitySchemes": { "BearerAuth": { "type": "http", "scheme": "bearer" } } } } ````