adjust-icon

App endpoint

Use the /app endpoint to create new apps, update existing apps, and retrieve app information. This is the primary endpoint for automating app management at scale.

The retrieve operations—get app by token, get app by store ID, and list all apps—return only apps that were created or updated via this API. To work with any app in your account (including those created in the dashboard), use the App Settings endpoint.

Create or update app via template

This endpoint creates a new app or updates an existing app using settings from your template app. It’s the main entry point for automating app setup.

How it works

  1. The API looks for an existing app matching the store_id and platform.
  2. If no app exists, a new app is created with the provided details.
  3. A background job is queued to copy settings from your template app.
  4. The response includes a ticket_token to track the migration progress.

A background job is triggered when any of the following conditions are met:

  • The app is newly created
  • channel_setup, override_settings, editors, or ios_pv_shared_secrets fields are updated
  • force_update is set to true

API protocol

Endpoint: https://automate.adjust.com/app-automation/app

Method: POST

Request body: Create/Update App Payload

Response: App Migration Response

Parameters

ParameterData typeRequiredDescription
store_idStringYesiOS apps: iTunes Store ID (numeric). Android apps: Bundle ID (e.g., com.example.app).
platformStringYesTarget platform. One of: android, ios.
bundle_idStringYesBundle ID of the app (e.g., com.example.app).
nameStringYesDisplay name of the app.
template_app_tokenStringNoApp token to copy settings from. If not provided, uses the token configured in your account.
sectionsArray[String]NoList of app sections to migrate. If empty, all sections are migrated.
force_updateBooleanNoSet to true to force a migration job even if the app hasn’t changed. Default: false.
channel_setupObjectNoPartner-specific configuration. See Channel setup for details.
override_settingsObjectNoSettings to override from the template app. See Override settings for details.
currencyStringNoCurrency code for the app (e.g., EUR, GBP). If not provided, the currency from the template app is used. Currency can only be set during app creation and can’t be changed afterwards.
editorsArray[String]NoEmail addresses of custom users who should have access to the app. Admin, editor, and reader role users get access automatically.
ios_pv_shared_secretStringNoiOS Purchase Verification shared secret for this app.
verificationBooleanNoSet to true to verify an iOS app. Only applies to iOS apps with verification enabled for your account. Default: false.

Sections

Use the sections parameter to migrate only specific settings:

{
"sections": ["partners", "events", "fraud_prevention_settings"]
}

For a complete list of available sections, see App sections.

Override settings

Use override_settings to customize specific settings for an app instead of using the template app values. Override settings are saved and applied to subsequent migrations automatically.

There are three operations you can perform with override settings:

OperationHow
ViewUse GET /app/{app_token}/settings to view current app settings. Use GET /app/{app_token} to view saved override payload in additional_info.overrides.
Create / UpdateSend override_settings to either POST /app or POST /app/{app_token}. New values are merged into saved overrides, so you can send only fields you want to change.
ClearCall POST /app/{app_token} with "override_settings": null to remove all saved overrides for the app.

For partners overrides:

  • Use the partners array shape from GET /app/{app_token}/settings.
  • Partners are matched by name.
  • Supported forwarding flags: revenue_forwarding, session_forwarding, parameter_forwarding, cost_forwarding, attributed_only, uninstall_forwarding, ad_revenue_forwarding, limited_data_use, inactive_user_definition.
  • channel_setup is a flat key-value map of partner-specific fields. Keys not supported by the partner may be ignored by Dashboard API.
  • events_linking is a map from app event name to partner event name.
  • app_info is a read-only section and is not supported in override_settings.
  • channel_setup values from the request-level channel_setup field have highest priority.
  • If a key is missing in request-level channel_setup, App Automation falls back to stored app channel_setup.
  • override_settings.partners[].channel_setup is used as an additional fallback source.
Override settings example
{
"override_settings": {
"partners": [
{
"name": "facebook",
"revenue_forwarding": false,
"session_forwarding": false,
"parameter_forwarding": false,
"cost_forwarding": false,
"attributed_only": false,
"uninstall_forwarding": false,
"ad_revenue_forwarding": false,
"limited_data_use": true,
"inactive_user_definition": false,
"channel_setup": {
"app_id": "651107451918933"
},
"events_linking": {
"purchase_inapp": "fb_mobile_purchase"
}
},
{
"name": "snapchat",
"limited_data_use": false,
"channel_setup": {
"app_id": "1404426295"
}
}
]
}
}

Examples

Create a new Android app

Request - cURL
curl --location 'https://automate.adjust.com/app-automation/app' \
--header 'Authorization: Bearer {your-adjust-api-token}' \
--header 'Content-Type: application/json' \
--data '{
"name": "My Android App",
"bundle_id": "com.example.myapp",
"store_id": "com.example.myapp",
"platform": "android"
}'
Response
{
"adjust_app_token": "abc123xyz",
"name": "My Android App",
"bundle_id": "com.example.myapp",
"store_id": "com.example.myapp",
"ticket_token": "e5b07bb3-b5f3-40a8-8a2d-197d30b6beff",
"sk_app_id": null
}

Create an iOS app with channel setup

Request - cURL
curl --location 'https://automate.adjust.com/app-automation/app' \
--header 'Authorization: Bearer {your-adjust-api-token}' \
--header 'Content-Type: application/json' \
--data '{
"name": "My iOS App",
"bundle_id": "com.example.myiosapp",
"store_id": "123456789",
"platform": "ios",
"channel_setup": {
"facebook": { "app_id": "987654321" },
"google": { "link_id": "google_link_123" }
}
}'
Response
{
"adjust_app_token": "xyz789abc",
"name": "My iOS App",
"bundle_id": "com.example.myiosapp",
"store_id": "123456789",
"ticket_token": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"sk_app_id": "86372991152"
}

Migrate only specific sections

Request - cURL
curl --location 'https://automate.adjust.com/app-automation/app' \
--header 'Authorization: Bearer {your-adjust-api-token}' \
--header 'Content-Type: application/json' \
--data '{
"name": "My App",
"bundle_id": "com.example.app",
"store_id": "com.example.app",
"platform": "android",
"sections": ["events", "partners", "callbacks"]
}'

Force update an existing app

Request - cURL
curl --location 'https://automate.adjust.com/app-automation/app' \
--header 'Authorization: Bearer {your-adjust-api-token}' \
--header 'Content-Type: application/json' \
--data '{
"name": "My App",
"bundle_id": "com.example.app",
"store_id": "com.example.app",
"platform": "android",
"force_update": true
}'

SDK signature configuration

If you use the Adjust Signature library to secure your Android app traffic, you can use the App Automation API to enforce signature validation and manage your app’s certificate fingerprints (android_signature_hash).

How it works

Signature-related settings can be managed in two ways:

  • Template app migration via POST /app. Use this flow to migrate Android certificate fingerprints (android_signature_hash) from the template app and to apply saved override_settings.signature during migration.
  • Direct app-level updates via PATCH /app/{app_token}/signature. Use this flow to update the app-level signature settings enforce_signature, enforce_signature_post_install_activities, and enforce_signature_post_install_activities_mode for a single app without running a migration.

When you use template app migration:

  • All active certificate fingerprints (android_signature_hash) from your template app are copied to the target app.
  • Both signature toggles are inherited from your template app: enforce_signature and post-install signature validation.
  • Saved override_settings.signature values are applied on top of the migrated template settings.
  • No action from an Account Manager is required. This workflow is available immediately.

For instructions on adding certificate fingerprints to your template app and enabling signature validation, see the SDK signature setup guide.

Override signature settings

Use override_settings.signature to override signature-related settings for template app migration:

  • To override only the Android certificate fingerprints, specify android_signature_hash.
  • To override only the install-signing enforcement setting, specify enforce_signature.
  • To control post-install signature validation, specify strict_signature_checking_enabled and strict_signing.
  • To override multiple signature settings, include them together in override_settings.signature.

If you do not provide signature overrides, both toggles are inherited from the template app.

If you need to update signature settings for a single app without running a template migration, use the Signature endpoint.

Update signature settings

Use the PATCH /app/{app_token}/signature endpoint to update signature settings for a single app without running a template migration.

Examples

Migrate signatures from the template app

Request - cURL
curl --location 'https://automate.adjust.com/app-automation/app' \
--header 'Authorization: Bearer {your-adjust-api-token}' \
--header 'Content-Type: application/json' \
--data '{
"name": "My Android App",
"bundle_id": "com.example.myapp",
"store_id": "com.example.myapp",
"platform": "android",
"sections": ["signature"],
"force_update": true
}'

Override only android_signature_hash

Request - cURL
curl --location 'https://automate.adjust.com/app-automation/app' \
--header 'Authorization: Bearer {your-adjust-api-token}' \
--header 'Content-Type: application/json' \
--data '{
"name": "My Android App",
"bundle_id": "com.example.myapp",
"store_id": "com.example.myapp",
"platform": "android",
"sections": ["signature"],
"override_settings": {
"signature": {
"android_signature_hash": [
"AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AB"
]
}
}
}'

Override only enforce_signature

Request - cURL
curl --location 'https://automate.adjust.com/app-automation/app' \
--header 'Authorization: Bearer {your-adjust-api-token}' \
--header 'Content-Type: application/json' \
--data '{
"name": "My Android App",
"bundle_id": "com.example.myapp",
"store_id": "com.example.myapp",
"platform": "android",
"sections": ["signature"],
"override_settings": {
"signature": {
"enforce_signature": true
}
},
"force_update": true
}'

Override both android_signature_hash and enforce_signature

Request - cURL
curl --location 'https://automate.adjust.com/app-automation/app' \
--header 'Authorization: Bearer {your-adjust-api-token}' \
--header 'Content-Type: application/json' \
--data '{
"name": "My Android App",
"bundle_id": "com.example.myapp",
"store_id": "com.example.myapp",
"platform": "android",
"sections": ["signature"],
"override_settings": {
"signature": {
"android_signature_hash": [
"AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AB",
"BB:BB:BB:BB:BB:BB:BB:BB:BB:BB:BB:BB:BB:BB:BB:BB:BB:BB:BB:BC"
],
"enforce_signature": true
}
},
"force_update": true
}'

Update app settings

Update the name, store ID, or bundle ID of an existing app. You can also manage saved override_settings for future migrations.

API protocol

Endpoint: https://automate.adjust.com/app-automation/app/{app_token}

Method: POST

Response: Update App Response

Parameters

ParameterData typeInRequiredDescription
app_tokenStringPathYesThe Adjust app token.
nameStringBodyYesNew display name for the app.
store_idStringBodyNoNew store ID. iOS: iTunes Store ID. Android: Bundle ID.
bundle_idStringBodyNoNew bundle ID.
override_settingsObjectBodyNoUpdates saved override settings for future migrations. Set to null to clear all saved overrides.

Example

Request - cURL
curl --location 'https://automate.adjust.com/app-automation/app/abc123xyz' \
--header 'Authorization: Bearer {your-adjust-api-token}' \
--header 'Content-Type: application/json' \
--data '{
"name": "My Renamed App",
"store_id": "com.example.newapp"
}'
Response
{
"store_id": "com.example.newapp",
"name": "My Renamed App",
"ticket_token": "f1e2d3c4-b5a6-7890-1234-567890abcdef"
}

Clear saved override settings

Request - cURL
curl --location 'https://automate.adjust.com/app-automation/app/abc123xyz' \
--header 'Authorization: Bearer {your-adjust-api-token}' \
--header 'Content-Type: application/json' \
--data '{
"name": "My Renamed App",
"store_id": "com.example.newapp",
"override_settings": null
}'

Get app by store ID

Retrieve app details using the store ID and platform.

API protocol

Endpoint: https://automate.adjust.com/app-automation/app

Method: GET

Response: Get App Response

Parameters

ParameterData typeInRequiredDescription
store_idStringQueryYesiOS: iTunes Store ID. Android: Bundle ID.
platformStringQueryYesTarget platform. One of: android, ios.

Example

Request - cURL
curl --location 'https://automate.adjust.com/app-automation/app?store_id=com.example.myapp&platform=android' \
--header 'Authorization: Bearer {your-adjust-api-token}'
Response
{
"name": "My Android App",
"store_id": "com.example.myapp",
"platform": "android",
"adjust_app_token": "abc123xyz",
"additional_info": { "overrides": {} },
"channel_setup": {
"facebook": { "app_id": "123456789" },
"google": { "link_id": "adwords_link_id" }
},
"cross_promo_token": "hgj3li1"
}

Get app by token

Retrieve app details using the Adjust app token.

API protocol

Endpoint: https://automate.adjust.com/app-automation/app/{app_token}

Method: GET

Response: Get App Response

Parameters

ParameterData typeInRequiredDescription
app_tokenStringPathYesThe Adjust app token.

Example

Request - cURL
curl --location 'https://automate.adjust.com/app-automation/app/abc123xyz' \
--header 'Authorization: Bearer {your-adjust-api-token}'
Response
{
"name": "My Android App",
"store_id": "com.example.myapp",
"platform": "android",
"adjust_app_token": "abc123xyz",
"additional_info": { "overrides": {} },
"channel_setup": {
"facebook": { "app_id": "123456789" }
},
"cross_promo_token": "hgj3li1"
}

List all apps

Retrieve a list of all apps in your account. You can optionally filter by creation date.

API protocol

Endpoint: https://automate.adjust.com/app-automation/apps/list

Method: GET

Response: Array of App Name Token objects

Parameters

ParameterData typeInRequiredDescription
start_dateStringQueryNoFilter apps created on or after this date. ISO 8601 format (e.g., 2024-01-01T00:00:00Z).
end_dateStringQueryNoFilter apps created on or before this date. ISO 8601 format.

Example

Request - cURL
curl --location 'https://automate.adjust.com/app-automation/apps/list' \
--header 'Authorization: Bearer {your-adjust-api-token}'
Response
[
{
"name": "My Android App",
"token": "abc123xyz"
},
{
"name": "My iOS App",
"token": "xyz789abc"
},
{
"name": "Another App",
"token": "def456uvw"
}
]

Filter by date range

Request - cURL
curl --location 'https://automate.adjust.com/app-automation/apps/list?start_date=2024-01-01T00:00:00Z&end_date=2024-06-30T23:59:59Z' \
--header 'Authorization: Bearer {your-adjust-api-token}'

Data models

Create/Update App Payload

ParameterData typeDescription
store_id*StringiOS apps: iTunes Store ID. Android apps: Bundle ID.
platform*StringTarget platform. One of: android, ios.
bundle_id*StringBundle ID of the app.
name*StringDisplay name of the app.
template_app_tokenStringApp token to copy settings from. Uses configured default if not provided.
sectionsArray[String]App sections to migrate. Migrates all sections if not provided.
force_updateBooleanForce migration even if the app hasn’t changed. Default: false.
channel_setupObjectPartner-specific configuration. See Channel setup.
override_settingsObjectSettings to override from the template app.
currencyStringCurrency code for the app (e.g., EUR, GBP). If not provided, the currency from the template app is used. Currency can only be set during app creation and can’t be changed afterwards.
editorsArray[String]Email addresses of users who should have access to the app.
ios_pv_shared_secretStringiOS Purchase Verification shared secret.
verificationBooleanWhether to verify the iOS app. Default: false.

App Migration Response

ParameterData typeDescription
adjust_app_token*StringThe Adjust app token for the created/updated app.
name*StringDisplay name of the app.
bundle_id*StringBundle ID of the app.
store_id*StringStore ID of the app.
ticket_token*StringUUID to track the migration job status. Use with the status endpoint.
sk_app_idStringStoreKit app ID for verified iOS apps. null if not applicable.

Get App Response

ParameterData typeDescription
name*StringDisplay name of the app.
store_id*StringStore ID of the app.
platform*StringTarget platform: android or ios.
adjust_app_token*StringThe Adjust app token.
additional_info*ObjectAdditional app information including override settings.
channel_setupObjectPartner-specific configuration.
cross_promo_tokenStringCross-promotion link token.

Update App Response

ParameterData typeDescription
store_id*StringUpdated store ID.
name*StringUpdated display name.
ticket_token*StringUUID to track the update job status.

App Name Token

ParameterData typeDescription
name*StringDisplay name of the app.
token*StringAdjust app token.