> ## 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. # Simplified Login > First step for any API call is retrieving AuthToken using Login API. All other calls require the AuthToken. Client is advised to **securely store** the AuthToken and reuse until it expires. Multi-Factor Authentication is not supported by Login call, API user must be exempt from Admin MFA requirement. It is important to restrict API user's permissions strictly as-needed basis and restrict IP access to API port to trusted networks. ## OpenAPI ````json POST /login { "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,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", "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": { "/login": { "post": { "summary": "Simplified Login", "description": "First step for any API call is retrieving AuthToken using Login API. All other calls require the AuthToken. Client is advised to **securely store** the AuthToken and reuse until it expires. Multi-Factor Authentication is not supported by Login call, API user must be exempt from Admin MFA requirement. It is important to restrict API user's permissions strictly as-needed basis and restrict IP access to API port to trusted networks.", "security": [], "tags": [ "Login" ], "responses": { "200": { "description": "Login Response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LoginAuthorizationResponse" } } } }, "400": { "$ref": "#/components/responses/JsonError" }, "401": { "$ref": "#/components/responses/AuthenticationError" }, "406": { "$ref": "#/components/responses/NotAcceptableError" }, "422": { "$ref": "#/components/responses/ValidationError" }, "500": { "$ref": "#/components/responses/UnexpectedError" } }, "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LoginRequest" } } }, "description": "Login Credentials.", "required": true } } } }, "components": { "schemas": { "LoginAuthorizationResponse": { "type": "object", "properties": { "user": { "type": "object", "description": "Information about logged in user, such as username and email address, if exists.", "properties": { "name": { "type": "string", "description": "Username.", "example": "admin" }, "needTwoFactorAuth": { "type": "boolean", "description": "If true, it is not possible to complete login process without providing MFA.", "example": false }, "canAccessAuditLogs": { "type": "boolean", "description": "Whether there is a LogServer deployed and the user has privileges to access to it." }, "privileges": { "type": "array", "description": "The privileges the user has.", "items": { "$ref": "#/components/schemas/AdministrativePrivilege" } } } }, "token": { "type": "string", "description": "The AuthToken required for subsequent API calls." }, "expires": { "type": "string", "format": "date-time", "description": "Token expiration time." }, "messageOfTheDay": { "type": "string", "description": "Message of the day configured by an admin.", "example": "Welcome to Appgate SDP." }, "ztpCollectiveType": { "type": "string", "description": "ZTP type of the collective.", "enum": [ "hosted", "connected" ] }, "ztpAccountType": { "type": "string", "description": "ZTP account type.", "enum": [ "standard", "demo" ] }, "crlEnabled": { "type": "boolean", "description": "Whether X509 CRL is enabled for the system or not. Issued Certificates is disabled if it's not enabled." }, "ppModeEnabled": { "type": "boolean", "description": "Whether Protection Profile mode is enabled or not. Limits certain functionalities." }, "inactivityTimeoutEnabled": { "type": "boolean", "description": "Whether user session inactivity timeout is enabled or not.", "default": true }, "inactivityTimeoutMinutes": { "type": "number", "description": "Number of minutes of inactivity before a user session is terminated. Minimum value is 1 minute. Not applicable if inactivity timeout is disabled.", "example": 15, "default": 60, "minimum": 1 } } }, "LoginRequest": { "type": "object", "required": [ "providerName", "deviceId" ], "properties": { "providerName": { "type": "string", "description": "Display name of the Identity Provider name.", "example": "ldap" }, "username": { "type": "string", "description": "Username. Required if a credentials based Identity Provider is used.", "example": "user" }, "password": { "type": "string", "description": "Password. Required if a credentials based Identity Provider is used.", "example": "tSW3!QBv(rj{UuLY" }, "deviceId": { "type": "string", "format": "uuid", "description": "UUID to distinguish the Client device making the request. It is supposed to be same for every login request from the same server.", "example": "4c07bc67-57ea-42dd-b702-c2d6c45419fc" }, "samlResponse": { "type": "string", "description": "SAMLResponse received from SAML provider. Required if a SAML based Identity Provider is used." }, "idToken": { "type": "string", "description": "ID Token received from OIDC provider. Required if an OIDC based Identity Provider is used and the provider does not have a client secret (public client flow)." }, "accessToken": { "type": "string", "description": "Access Token received from OIDC provider. Optional for OIDC authentication." }, "oidcCodeExchange": { "type": "object", "description": "OIDC authorization code exchange parameters. Required if an OIDC based Identity Provider is used and the provider has a client secret configured (backend token exchange flow).", "required": [ "authCode", "redirectUri", "codeVerifier" ], "properties": { "authCode": { "type": "string", "description": "Authorization code received from OIDC provider after user authentication." }, "redirectUri": { "type": "string", "description": "Redirect URI used in authorization request. Must match exactly for OAuth security." }, "codeVerifier": { "type": "string", "description": "PKCE code verifier generated by client." } } } } }, "AdministrativePrivilege": { "type": "object", "description": "Administrative Privilege item. Use type-target-map API to get the details on which types are valid for which targets and their scopes.", "required": [ "type", "target" ], "properties": { "type": { "type": "string", "description": "The type of the Privilege defines the possible administrator actions.", "enum": [ "All", "View", "Create", "Edit", "Tag", "Delete", "Revoke", "Export", "Upgrade", "RenewCertificate", "DownloadLogs", "Test", "GetUserAttributes", "Backup", "CheckStatus", "Reevaluate", "Reboot", "AssignFunction" ] }, "target": { "type": "string", "description": "The target of the Privilege defines the possible target objects for that type.", "enum": [ "All", "Appliance", "Condition", "CriteriaScript", "Entitlement", "AdministrativeRole", "IdentityProvider", "MfaProvider", "IpPool", "LocalUser", "ServiceUser", "Policy", "Site", "DeviceClaimScript", "EntitlementScript", "RingfenceRule", "ApplianceCustomization", "TrustedCertificate", "UserClaimScript", "OtpSeed", "Fido2Device", "Blacklist", "License", "UserLicense", "RegisteredDevice", "AllocatedIp", "SessionInfo", "AuditLog", "AdminMessage", "GlobalSetting", "CaCertificate", "File", "AutoUpdate", "RiskModel", "Ztp", "ClientProfile", "Secret", "DiscoveredApp", "ReplicationSource", "ReplicationTarget" ] }, "scope": { "type": "object", "description": "The scope of the Privilege. Only applicable to certain type-target combinations. Some types depend on the IdP/MFA type, such as GetUserAttributes. This field must be omitted if not applicable.", "properties": { "all": { "type": "boolean", "description": "'If \"true\", all objects are accessible. For example, \"type: Edit - target: Condition - scope.all: true\" means the administrator can edit all Conditions in the system.'" }, "ids": { "type": "array", "description": "Specific object IDs this Privilege would have access to.", "items": { "type": "string", "format": "uuid", "example": "4c07bc67-57ea-42dd-b702-c2d6c45419fc" } }, "tags": { "type": "array", "description": "Object tags this privilege would have access to.", "items": { "type": "string", "example": "tag" } } } }, "defaultTags": { "type": "array", "description": "The items in this list would be added automatically to the newly created objects' tags. Only applicable on \"Create\" type and targets with tagging capability. This field must be omitted if not applicable.", "items": { "type": "string", "example": "api-created" } }, "functions": { "type": "array", "description": "Privilege for changing Appliance Functions. Only applicable on \"AssignFunction\" type with Appliance or All target. This field must be omitted if not applicable.", "items": { "$ref": "#/components/schemas/ApplianceFunction" } } } }, "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." } } } } } }, "ApplianceFunction": { "type": "string", "enum": [ "Controller", "Gateway", "LogServer", "LogForwarder", "Connector", "Portal", "Metrics Aggregator", "Connection Broker" ] } }, "responses": { "JsonError": { "description": "JSON error. Check the JSON format.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "AuthenticationError": { "description": "Login Failed.", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/Error" }, { "type": "object", "properties": { "reason": { "type": "string", "description": "The authentication failure reason.", "example": "Invalid username or password." } } } ] } } } }, "NotAcceptableError": { "description": "Invalid Accept header.", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "description": "N/A" }, "message": { "type": "string", "description": "Human readable error details." }, "minSupportedVersion": { "type": "integer", "description": "Minimum supported version." }, "maxSupportedVersion": { "type": "integer", "description": "Maximum supported version." } } } } } }, "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" } } } } } } } ````