Documentation

TestFlight Page

Configure the TestFlight beta testing page for your app via the OrbitKit API.

Configure a hosted TestFlight page that links testers directly to your beta. The page is included in your deployed site and accessible at https://your-site/testflight.

Note: An active subscription is required to deploy and publish the TestFlight page.

Endpoints

Method Path Description
GET /api/apps/:appId/testflight-page Get TestFlight page configuration
PUT /api/apps/:appId/testflight-page Save TestFlight page configuration

Get TestFlight page

GET /api/apps/:appId/testflight-page

Response

{
  "enabled": true,
  "testFlightUrl": "https://testflight.apple.com/join/AbCdEf",
  "betaDescription": "Test the new photo filters before release",
  "requirements": "iOS 17.0+, iPhone only",
  "feedbackEmail": "beta@myapp.com",
  "updatedAt": 1712345678000
}

Returns 404 NOT_FOUND if no TestFlight page is configured.


Save TestFlight page

PUT /api/apps/:appId/testflight-page

Request body

Field Type Required Description
enabled boolean Yes Whether the TestFlight page is active
testFlightUrl string Yes TestFlight invite link (https://testflight.apple.com/join/XXXXXX)
betaDescription string No What testers should test (max 2000)
requirements string No Device/OS requirements (max 500)
feedbackEmail string Yes Contact email for tester feedback (max 320)

The testFlightUrl must match the format https://testflight.apple.com/join/<code>. You can find this URL in App Store Connect under your app’s TestFlight tab.

Full example

curl -X PUT https://api.orbitkit.io/api/apps/-NtestApp123/testflight-page \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "enabled": true,
    "testFlightUrl": "https://testflight.apple.com/join/AbCdEf",
    "betaDescription": "Test the new photo filters before release",
    "requirements": "iOS 17.0+, iPhone only",
    "feedbackEmail": "beta@myapp.com"
  }'
struct TestFlightPage: Codable {
    let enabled: Bool
    let testFlightUrl: String
    var betaDescription: String?
    var requirements: String?
    let feedbackEmail: String
}

let page = TestFlightPage(
    enabled: true,
    testFlightUrl: "https://testflight.apple.com/join/AbCdEf",
    betaDescription: "Test the new photo filters before release",
    requirements: "iOS 17.0+, iPhone only",
    feedbackEmail: "beta@myapp.com"
)

var request = URLRequest(url: URL(string: "https://api.orbitkit.io/api/apps/\(appId)/testflight-page")!)
request.httpMethod = "PUT"
request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try JSONEncoder().encode(page)

let (data, _) = try await URLSession.shared.data(for: request)
let saved = try JSONDecoder().decode(TestFlightPage.self, from: data)
const res = await fetch(`https://api.orbitkit.io/api/apps/${appId}/testflight-page`, {
  method: "PUT",
  headers: {
    Authorization: `Bearer ${token}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    enabled: true,
    testFlightUrl: "https://testflight.apple.com/join/AbCdEf",
    betaDescription: "Test the new photo filters before release",
    requirements: "iOS 17.0+, iPhone only",
    feedbackEmail: "beta@myapp.com",
  }),
});
const saved = await res.json();

Response

Returns the saved TestFlight page object (same shape as GET response).

Errors

Code Status When
VALIDATION_FAILED 400 Invalid TestFlight URL format or missing required fields

See also