Skip to content
FlightStack Docs
Sign in Start free

Code Signing API | FlightStack

Code-signing material lives in a single vault, scoped to an organization (or a single repository). Builds reference credentials by ID — the agent fetches the actual material at execution time via the agent credentials endpoint.

All endpoints under /codesigning.

MethodPathPurpose
GET/codesigning/credentialsList credentials. Filters: orgId=, repoId=, type=.
GET/codesigning/credentials/{id}Get a credential’s metadata (never the raw material).
PUT/codesigning/credentials/{id}Update metadata: name, description, isActive, expiresAt, teamId, projectId, makeOrgLevel.
DELETE/codesigning/credentials/{id}Delete a credential.

The type filter accepts: androidKeystore, iosCertificate, iosProvisioningProfile, appStoreConnectKey, playStoreServiceAccount, firebaseAndroidConfig, firebaseIosConfig, firebaseServiceAccount.

Every upload endpoint is multipart/form-data — the file goes in the part named after the material type. Metadata fields are sent as form fields alongside.

MethodPathMaterial
POST/codesigning/android/keystoreAndroid .jks / .keystore
POST/codesigning/ios/certificateiOS .p12
POST/codesigning/ios/provisioning-profileiOS .mobileprovision
POST/codesigning/appstore/api-keyApp Store Connect API key .p8
POST/codesigning/playstore/service-accountGoogle Play service-account .json
POST/codesigning/firebase/android-configgoogle-services.json
POST/codesigning/firebase/ios-configGoogleService-Info.plist
POST/codesigning/firebase/service-accountFirebase service-account .json
Terminal window
curl -X POST https://api.flightstack.voostack.com/codesigning/android/keystore \
-H "Authorization: Bearer $TOKEN" \
-H "X-Organization-Id: $ORG_ID" \
-F "name=Acme Release Keystore" \
-F "keystorePassword=supersecret" \
-F "keyAlias=upload" \
-F "keyPassword=supersecret" \
-F "keystore=@release.keystore"
Terminal window
curl -X POST https://api.flightstack.voostack.com/codesigning/appstore/api-key \
-H "Authorization: Bearer $TOKEN" \
-H "X-Organization-Id: $ORG_ID" \
-F "name=Acme App Store Connect" \
-F "apiKeyId=AB12CD34EF" \
-F "issuerId=1234abcd-..." \
-F "privateKey=@AuthKey_AB12CD34EF.p8"

Reference the credential by ID in the signing block on POST /build:

{
"platform": "ios",
"signing": {
"iosCredentialId": "...",
"appStoreConnectKeyId": "..."
}
}

The agent fetches the material via GET /buildagent/{id}/jobs/{jobId}/credentials over Agent-Token auth. Raw material never leaves the agent disk, and is wiped after the job completes.

FieldEffect
repoIdCredential is scoped to one repository.
orgIdCredential is scoped to one organization (any repo in that org).
makeOrgLevelWhen true, promotes a repo-scoped credential to the org level.
isActiveDisable without deleting. Builds that reference it fail fast.
expiresAtServer warns when within 30 days; rejects when past.