X-API-Key header. See API Reference for authentication details.
- Mobile (iOS/Android)
- Web
- Chrome Extension
Endpoints Overview
Start Upload
Initiate an app build upload and get a presigned URL for uploading your build file.POST
/api/ci/start-upload — Returns 200 OKRequest Body
string
required
Your app’s bundle identifier (e.g.,
com.company.app)string
required
Target platform:
ios or androidstring
required
Name of the build file (e.g.,
app-release.apk or MyApp.zip)string
Environment name to associate this app with (e.g.,
staging, production). Apps with the same bundle ID but different environments are treated as separate apps. Must match an existing environment in your organization. If omitted, the app is assigned to your default environment.Example Request
Response Fields
string
Presigned URL for uploading your build file via PUT request. Valid for 1 hour.
string
Storage path of the uploaded file. Pass this to the confirm-upload endpoint.
Example Response
upload_url using a PUT request:Confirm Upload
After uploading your build file, call this endpoint to finalize the upload and trigger any configured automations.POST
/api/ci/confirm-upload — Returns 200 OKRequest Body
string
required
Your app’s bundle identifier (must match the one used in start-upload)
string
required
Target platform:
ios or androidstring
required
The
file_path returned from the start-upload responsestring
Display name for your app (e.g., “My Android App”). If the app already exists and the name differs, it will be updated.
string
Environment name (must match the value used in start-upload). Used to look up the correct app when multiple apps share the same bundle ID.
string
Git commit SHA for tracking which commit this build came from.
string
Git branch name. Displayed in the Autosana UI for build identification.
string
Repository name in
org/repo format (e.g., myorg/myrepo). Required for GitHub Bot integration — links this build to your repository so the bot can find it when processing PRs.string | object
Key-value variables to attach to this build. Available in flow instructions via
${env:KEY}. Accepts a string ("KEY1=VALUE1,KEY2=VALUE2") or a JSON object ({"KEY1": "VALUE1"}). See Build Variables.boolean
iOS
.ipa only. Persists the app preference and instruments the IPA so Team-ID-prefixed keychain access groups keep working after cloud device re-signing. When omitted, the app’s saved preference is used.Example Request
enable_ios_keychain_access_group_remapping:Response Fields
string
Result status:
success or errorstring
Human-readable description of the result
integer
Number of automations triggered by this upload (based on your Automations configuration).
Example Response
Upload Workflow
Here’s the complete workflow for uploading a build via the API:1
Start Upload
Call
/api/ci/start-upload with your app details to get a presigned upload URL.2
Upload File
PUT your build file (
.apk for Android, .zip for iOS) to the presigned URL.3
Confirm Upload
Call
/api/ci/confirm-upload to finalize the upload and trigger automations.Build Requirements
iOS Builds
Upload a
.zip file containing a simulator-compatible .app bundle. See App Build Guide for details.Android Builds
Upload a universal
.apk file (not AAB). The APK must be compatible with x86_64 emulators.Example: Upload from EAS Build Hooks
If you use Expo EAS, you can upload to Autosana directly from an EAS build hook instead of using the GitHub Action. This avoids keeping a GitHub Actions runner idle while waiting for the EAS build to finish, saving CI minutes.EAS build hook script and setup
EAS build hook script and setup
Create an Make the script executable and commit it to your repo:Then add your API key as an EAS secret:When you trigger a build (
eas-build-on-success.sh file in your project root (next to package.json). EAS automatically runs this script when a build completes successfully.eas-build-on-success.sh
eas build --platform ios --profile preview-simulator --non-interactive), EAS runs the hook automatically after the build succeeds — no --wait flag or GitHub runner required.