Save TestFlight page configuration
PUT
/api/apps/{appId}/testflight-page
Saves the TestFlight page configuration. The `testFlightUrl` must match
`https://testflight.apple.com/join/
`.Parameters
Name
Type
Description
appIdrequired
string
The app's unique identifier
Example:
-NtestApp123
Request Body
Name
Type
Description
enabledrequired
boolean
Whether the TestFlight page is active
testFlightUrlrequired
string
TestFlight invite URL (https://testflight.apple.com/join/XXXXXX)
Pattern: TestFlight invite URL
betaDescription
string
What testers should test
Max 2000 characters
requirements
string
Device/OS requirements (e.g., iOS 17.0+, iPhone only)
Max 500 characters
feedbackEmailrequired
string (email)
Contact email for tester feedback
Max 320 characters
Responses
200
Saved TestFlight page
Name
Type
Description
enabledrequired
boolean
Whether the TestFlight page is active
testFlightUrlrequired
string
TestFlight invite URL (https://testflight.apple.com/join/XXXXXX)
Pattern: TestFlight invite URL
betaDescription
string
What testers should test
Max 2000 characters
requirements
string
Device/OS requirements (e.g., iOS 17.0+, iPhone only)
Max 500 characters
feedbackEmailrequired
string (email)
Contact email for tester feedback
Max 320 characters
updatedAt
integer
Unix timestamp (ms) of last update
400
Validation failed
Name
Type
Description
errorrequired
object
coderequired
string
Machine-readable error code
UNAUTHORIZEDFORBIDDENNOT_FOUNDVALIDATION_FAILEDRATE_LIMITEDSLUG_TAKENSLUG_RESERVEDDOMAIN_IN_USEAPP_LIMIT_REACHEDSUBSCRIPTION_REQUIREDSUBSCRIPTION_EXISTSNO_PAYMENT_METHODNO_ACTIVE_SUBSCRIPTIONNOT_CANCELINGALREADY_CANCELINGSUBSCRIPTION_CANCELINGSAME_PLANCARD_ERRORPAYMENT_ERRORNO_STRIPE_CUSTOMERCERT_CREATION_FAILEDDEPLOY_FAILEDAPI_KEY_LIMIT_REACHEDINVALID_IDEMPOTENCY_KEYIDEMPOTENCY_KEY_REUSEINTERNAL_ERROR
messagerequired
string
Human-readable error description
docUrl
string (uri)
Link to relevant API documentation for this error
Example:
https://orbitkit.io/api/errors/#unauthorized
details
object[]
Additional validation details (Zod errors)
401
Missing, invalid, or expired authentication token
Name
Type
Description
errorrequired
object
coderequired
string
Machine-readable error code
UNAUTHORIZEDFORBIDDENNOT_FOUNDVALIDATION_FAILEDRATE_LIMITEDSLUG_TAKENSLUG_RESERVEDDOMAIN_IN_USEAPP_LIMIT_REACHEDSUBSCRIPTION_REQUIREDSUBSCRIPTION_EXISTSNO_PAYMENT_METHODNO_ACTIVE_SUBSCRIPTIONNOT_CANCELINGALREADY_CANCELINGSUBSCRIPTION_CANCELINGSAME_PLANCARD_ERRORPAYMENT_ERRORNO_STRIPE_CUSTOMERCERT_CREATION_FAILEDDEPLOY_FAILEDAPI_KEY_LIMIT_REACHEDINVALID_IDEMPOTENCY_KEYIDEMPOTENCY_KEY_REUSEINTERNAL_ERROR
messagerequired
string
Human-readable error description
docUrl
string (uri)
Link to relevant API documentation for this error
Example:
https://orbitkit.io/api/errors/#unauthorized
details
object[]
Additional validation details (Zod errors)
Language
URL
PUT
https://api.orbitkit.io/api/apps/{appId}/testflight-page
curl -X PUT "https://api.orbitkit.io/api/apps/-NtestApp123/testflight-page" \
-H "Authorization: Bearer $ORBITKIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled":true,"testFlightUrl":"https://example.com","betaDescription":"string","requirements":"string","feedbackEmail":"user@example.com"}'
const response = await fetch(`https://api.orbitkit.io/api/apps/-NtestApp123/testflight-page`, {
method: "PUT",
headers: {
"Authorization": "Bearer " + apiKey,
"Content-Type": "application/json",
},
body: JSON.stringify({
"enabled": true,
"testFlightUrl": "https://example.com",
"betaDescription": "string",
"requirements": "string",
"feedbackEmail": "user@example.com"
}),
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://api.orbitkit.io/api/apps/-NtestApp123/testflight-page")!)
request.httpMethod = "PUT"
request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let body: [String: Any] = ["enabled": true, "testFlightUrl": "https://example.com", "betaDescription": "string", "requirements": "string", "feedbackEmail": "user@example.com"]
request.httpBody = try JSONSerialization.data(withJSONObject: body)
let (data, _) = try await URLSession.shared.data(for: request)
let json = try JSONSerialization.jsonObject(with: data)
print(json)
200
{
"enabled": true,
"testFlightUrl": "https://example.com",
"betaDescription": "string",
"requirements": "string",
"feedbackEmail": "user@example.com",
"updatedAt": 0
}
400
{
"error": {
"code": "VALIDATION_FAILED",
"message": "Validation failed",
"docUrl": "https://orbitkit.io/api/errors/#validation-failed",
"details": [
{
"field": "appName",
"message": "Required"
}
]
}
}
401
{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or expired token",
"docUrl": "https://orbitkit.io/api/errors/#unauthorized"
}
}