Documentation

Go to Portal Website

Management API - Configuration

Use these endpoints to read and update tenant security configuration, inspect available controls, promote configuration between deployment versions, and publish live configuration for supported protected apps.

Use the same rollout discipline you use in the portal: edit Development first, validate protected builds, promote to Staging, and move to Production only after approval.

Integration Notes

NeedRecommendation
Change controlRecord who or what changed configuration, the version, control name, and reason.
Environment safetyAvoid writing directly to Production from automation unless an approval process exists.
Control discoveryRead the relevant config_options_* endpoint before writing controls. Control names and minimum plans come from those responses.
Partial updatesconfig_update updates one control per request. Read back /frontend/config after updates.
Build validationBuild and test a protected artifact after changing build-time controls.

Configuration Model

Configuration is stored per version:

Each saved control is stored as an object whose key is the control value from the options endpoints. Binary controls use protection; response controls use detection plus an action.

[
  {
    "OverlayPrevention": {
      "protection": true,
      "platform": "android"
    }
  },
  {
    "RootDetectionResponse": {
      "detection": true,
      "action": "die",
      "platform": "both"
    }
  }
]

platform is optional. When present, it must be android, ios, or both.


Get Current Configuration

Retrieve the full saved configuration for a version.

POST /frontend/config

Permission: None (read-only)

Request Body:

{
  "version": "production"
}
FieldTypeRequiredDescription
versionStringYesdevelopment, staging, or production.

Response:

{
  "config": [
    {
      "RootDetectionResponse": {
        "detection": true,
        "action": "die",
        "platform": "android"
      }
    },
    {
      "OverlayPrevention": {
        "protection": true,
        "platform": "android"
      }
    }
  ]
}

If the version has no saved controls, config is an empty array.


Update One Control

Create, update, or remove one control in one version.

POST /frontend/config_update

Permission: Configuration

Request Body:

{
  "version": "production",
  "name": "RootDetectionResponse",
  "config": {
    "detection": true,
    "action": "die",
    "platform": "android"
  }
}
FieldTypeRequiredDescription
versionStringYesdevelopment, staging, or production.
nameStringYesControl value from one of the options endpoints, such as RootDetectionResponse or OverlayPrevention.
configObjectYesControl settings. Shape depends on whether the option is binary or response.

Response:

{
  "success": true
}

Binary Controls

Options with type: "binary" use protection.

{
  "version": "production",
  "name": "OverlayPrevention",
  "config": {
    "protection": true,
    "platform": "android"
  }
}

Set protection to false to remove that control from the saved configuration.

Response Controls

Options with type: "response" use detection.

{
  "version": "production",
  "name": "RootDetectionResponse",
  "config": {
    "detection": true,
    "action": "die",
    "platform": "android"
  }
}

Set detection to false to remove that control from the saved configuration.

ActionRequired FieldsBehavior
logdetection, actionRecord/report the event and allow the app to continue.
diedetection, actionStop the protected app flow when the control triggers.
redirectdetection, action, redirectsRedirect to the single URL in redirects.
messagedetection, action, title, message, buttons, actions, redirectsShow a custom message. buttons and actions must have matching lengths; redirects must contain one URL for each redirect action.

Payload Limits

Configuration limits are measured in UTF-8 bytes. For aggregate JSON limits, the compact JSON payload counts, including field names, punctuation, arrays, URLs, and configured text.

PayloadLimit
Message title8 KB (8,192 bytes)
Message message body16 KB (16,384 bytes)
Each message buttons value8 KB (8,192 bytes)
Saved message response configuration9 MB (9,437,184 bytes)
Complete saved version configuration9 MB (9,437,184 bytes)

Requests over these limits return 400 with a validation error. Very large HTTP request bodies can also be rejected by the API edge before application validation runs.

Redirect example:

{
  "version": "production",
  "name": "RootDetectionResponse",
  "config": {
    "detection": true,
    "action": "redirect",
    "redirects": ["https://example.com/security"],
    "platform": "android"
  }
}

Message example:

{
  "version": "production",
  "name": "RootDetectionResponse",
  "config": {
    "detection": true,
    "action": "message",
    "title": "Security check failed",
    "message": "This device does not meet your organization's security requirements.",
    "buttons": ["Close", "Learn more"],
    "actions": ["die", "redirect"],
    "redirects": ["https://example.com/security"],
    "platform": "android"
  }
}

Validation is based on the current control options and tenant plan. If a control's minimum_plan is higher than the tenant plan, the update is rejected.


Promote Configuration

Copy the full configuration from one version to the next approved version. App Integrity configurations for the source version are copied with the same promotion.

POST /frontend/promote_config

Permission: Configuration Plan: Team+

Request Body:

{
  "source_version": "staging",
  "target_version": "production"
}

Only these promotion directions are valid:

SourceTarget
developmentstaging
stagingproduction

Response:

{
  "success": true
}

Push Live Configuration

Publish the selected version's live configuration package for already-protected apps that were built with live configuration support.

POST /frontend/push_live_config

Permission: Configuration Plan: Enterprise

Request Body:

{
  "version": "production"
}

Response:

{
  "success": true
}

Build-time-only changes, such as adding new controls or changing obfuscation/build settings, still require a new protected build. When Certificate Pinning is configured to use built-in trusted CAs, the live package merges the current global trusted CA list at publish time.


Get Available Control Options

These read-only endpoints return the controls currently available to the tenant. Use the value field as the name in config_update.

EndpointDescription
GET /frontend/config_options_detectionDetection and response controls.
GET /frontend/config_options_preventionBinary prevention controls.
GET /frontend/config_options_connection_controlsTransport, certificate, and network controls.
GET /frontend/config_options_additional_featuresTelemetry, lifecycle, and additional feature controls.
GET /frontend/config_options_obfuscationObfuscation controls.
GET /frontend/config_options_build_settingsBuild settings such as architecture inclusion controls.

Response Pattern:

{
  "config_options_detection": [
    {
      "name": "Device Integrity",
      "description": "Detect compromised or non-standard runtime environments.",
      "details": [
        {
          "title": "Root Detection",
          "description": "Detect rooted Android devices or jailbroken iOS devices.",
          "value": "RootDetectionResponse",
          "type": "response",
          "support": [
            { "android": { "supported": true, "version": "all" } },
            { "apple": { "supported": true, "version": "all" } }
          ],
          "minimum_plan": "FREE"
        }
      ]
    }
  ]
}

Each options endpoint uses a response key matching the endpoint name, for example config_options_prevention or config_options_build_settings.

Build Settings Options

GET /frontend/config_options_build_settings returns build-settings toggles available in the current tenant configuration. Current options include:

ValuePlatformDescription
IncludeX86ArchitecturesAndroidKeep x86 and x86_64 slices in the protected APK or AAB for emulators, Chromebooks, and x86 Android devices.
IncludeSimulatorArchitecturesiOSBuild the simulator variant of MobileDefender so protected apps can run in the iOS Simulator.

The endpoint returns an empty array when no build settings are available.


Trusted Root CAs

Return the global trusted root CA entries available for Certificate Pinning built-in CA configuration.

GET /frontend/trusted_root_cas

Permission: None (read-only)

Response:

{
  "trusted_root_cas": [
    {
      "name": "DigiCert Global Root G2",
      "thumbprint": "CB3CCBB76031E5E0138F8DD39A23F9DE47FFC35E43C1144CEA27D46A5AB1CB5F",
      "algorithm": "sha256",
      "expires": 2147483647,
      "domains": ["*"],
      "isca": true,
      "isdefault": true
    }
  ]
}

The trusted root CA list is managed by AppTego and consumed by Certificate Pinning when use_builtin_cas is enabled for that control.