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.
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
- The API looks for an existing app matching the
store_idandplatform. - If no app exists, a new app is created with the provided details.
- A background job is queued to copy settings from your template app.
- The response includes a
ticket_tokento 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, orios_pv_shared_secretsfields are updatedforce_updateis set totrue
API protocol
Endpoint: https://automate.adjust.com/app-automation/app
Method: POST
Request body: Create/Update App Payload
Response: App Migration Response
Parameters
| Parameter | Data type | Required | Description |
|---|---|---|---|
store_id | String | Yes | iOS apps: iTunes Store ID (numeric). Android apps: Bundle ID (e.g., com.example.app). |
platform | String | Yes | Target platform. One of: android, ios. |
bundle_id | String | Yes | Bundle ID of the app (e.g., com.example.app). |
name | String | Yes | Display name of the app. |
template_app_token | String | No | App token to copy settings from. If not provided, uses the token configured in your account. |
sections | Array[String] | No | List of app sections to migrate. If empty, all sections are migrated. |
force_update | Boolean | No | Set to true to force a migration job even if the app hasn’t changed. Default: false. |
channel_setup | Object | No | Partner-specific configuration. See Channel setup for details. |
override_settings | Object | No | Settings to override from the template app. See Override settings for details. |
editors | Array[String] | No | Email addresses of custom users who should have access to the app. Admin, editor, and reader role users get access automatically. |
ios_pv_shared_secret | String | No | iOS Purchase Verification shared secret for this app. |
verification | Boolean | No | Set 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.
{ "override_settings": { "signature": { "android_signature_hash": [ "AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD" ], "enforce_signature": true } }}Examples
Create a new Android app
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"}'{ "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
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" } }}'{ "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
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
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 configuration is handled via the template app method:
- All active certificate fingerprints (
android_signature_hash) from your template app are copied to the target apps. - The
enforce_signaturesetting from your template app is also applied. - No action from an Account Manager is required—this 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
You can use the override_settings field to override the android_signature_hash, enforce_signature, or both for your target app:
- To override only the Android signature hashes, specify
android_signature_hashinoverride_settings. - To override only the enforcement setting, specify
enforce_signatureinoverride_settings. - To override both, include both fields in
override_settings.
Examples
Migrate signatures from the template app
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
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
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
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. This endpoint is useful when app identifiers change after initial setup.
API protocol
Endpoint: https://automate.adjust.com/app-automation/app/{app_token}
Method: POST
Response: Update App Response
Parameters
| Parameter | Data type | In | Required | Description |
|---|---|---|---|---|
app_token | String | Path | Yes | The Adjust app token. |
name | String | Body | Yes | New display name for the app. |
store_id | String | Body | No | New store ID. iOS: iTunes Store ID. Android: Bundle ID. |
bundle_id | String | Body | No | New bundle ID. |
Example
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"}'{ "store_id": "com.example.newapp", "name": "My Renamed App", "ticket_token": "f1e2d3c4-b5a6-7890-1234-567890abcdef"}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
| Parameter | Data type | In | Required | Description |
|---|---|---|---|---|
store_id | String | Query | Yes | iOS: iTunes Store ID. Android: Bundle ID. |
platform | String | Query | Yes | Target platform. One of: android, ios. |
Example
curl --location 'https://automate.adjust.com/app-automation/app?store_id=com.example.myapp&platform=android' \--header 'Authorization: Bearer {your-adjust-api-token}'{ "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
| Parameter | Data type | In | Required | Description |
|---|---|---|---|---|
app_token | String | Path | Yes | The Adjust app token. |
Example
curl --location 'https://automate.adjust.com/app-automation/app/abc123xyz' \--header 'Authorization: Bearer {your-adjust-api-token}'{ "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
| Parameter | Data type | In | Required | Description |
|---|---|---|---|---|
start_date | String | Query | No | Filter apps created on or after this date. ISO 8601 format (e.g., 2024-01-01T00:00:00Z). |
end_date | String | Query | No | Filter apps created on or before this date. ISO 8601 format. |
Example
curl --location 'https://automate.adjust.com/app-automation/apps/list' \--header 'Authorization: Bearer {your-adjust-api-token}'[ { "name": "My Android App", "token": "abc123xyz" }, { "name": "My iOS App", "token": "xyz789abc" }, { "name": "Another App", "token": "def456uvw" }]Filter by date range
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
| Parameter | Data type | Description |
|---|---|---|
store_id* | String | iOS apps: iTunes Store ID. Android apps: Bundle ID. |
platform* | String | Target platform. One of: android, ios. |
bundle_id* | String | Bundle ID of the app. |
name* | String | Display name of the app. |
template_app_token | String | App token to copy settings from. Uses configured default if not provided. |
sections | Array[String] | App sections to migrate. Migrates all sections if not provided. |
force_update | Boolean | Force migration even if the app hasn’t changed. Default: false. |
channel_setup | Object | Partner-specific configuration. See Channel setup. |
override_settings | Object | Settings to override from the template app. |
editors | Array[String] | Email addresses of users who should have access to the app. |
ios_pv_shared_secret | String | iOS Purchase Verification shared secret. |
verification | Boolean | Whether to verify the iOS app. Default: false. |
App Migration Response
| Parameter | Data type | Description |
|---|---|---|
adjust_app_token* | String | The Adjust app token for the created/updated app. |
name* | String | Display name of the app. |
bundle_id* | String | Bundle ID of the app. |
store_id* | String | Store ID of the app. |
ticket_token* | String | UUID to track the migration job status. Use with the status endpoint. |
sk_app_id | String | StoreKit app ID for verified iOS apps. null if not applicable. |
Get App Response
| Parameter | Data type | Description |
|---|---|---|
name* | String | Display name of the app. |
store_id* | String | Store ID of the app. |
platform* | String | Target platform: android or ios. |
adjust_app_token* | String | The Adjust app token. |
additional_info* | Object | Additional app information including override settings. |
channel_setup | Object | Partner-specific configuration. |
cross_promo_token | String | Cross-promotion link token. |
Update App Response
| Parameter | Data type | Description |
|---|---|---|
store_id* | String | Updated store ID. |
name* | String | Updated display name. |
ticket_token* | String | UUID to track the update job status. |
App Name Token
| Parameter | Data type | Description |
|---|---|---|
name* | String | Display name of the app. |
token* | String | Adjust app token. |