Privacy Policy
Get and save privacy policy wizard data via the OrbitKit API.
The privacy policy endpoints manage the wizard data that drives OrbitKit’s Apple-compliant privacy policy generator. Policy data is organized into sections that mirror the wizard steps: app info, data collection, third-party sharing, data retention, and children/tracking.
See Apple’s App Store Review Guidelines §5.1.1 and App privacy details on the App Store for privacy policy requirements.
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /api/apps/:appId/policy |
Get policy data |
| PUT | /api/apps/:appId/policy |
Save policy data |
| GET | /api/apps/:appId/policy-versions |
List policy version snapshots |
| GET | /api/apps/:appId/policy-versions/:versionId |
Get a policy version |
Get policy data
GET /api/apps/:appId/policy
Returns the current privacy policy wizard data for the app.
Response
{
"app-info": {
"app_name": "My Weather App",
"developer_name": "Weather Co",
"email": "privacy@weather.co"
},
"data-collection": {
"collects_data": "yes",
"data_types": ["location", "usage-data"],
"purposes": ["app-functionality", "analytics"]
},
"third-party": {
"shares_data": ["analytics"],
"third_party_list": "Google Analytics"
},
"data-retention": {
"retains_data": "yes",
"retention_period": "12 months"
},
"children-tracking": {
"children_or_tracking": "no",
"collects_from_children": [],
"uses_tracking": []
},
"_seenSections": {
"app-info": true,
"data-collection": true
}
}
Returns 404 NOT_FOUND if the wizard has not been started.
Save policy data
PUT /api/apps/:appId/policy
Saves the privacy policy wizard data. The API applies server-side sanitization and cross-field validation, returning any warnings.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
data |
object | Yes | Section-keyed policy data |
Full example
curl -X PUT https://api.orbitkit.io/api/apps/-NtestApp123/policy \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"data": {
"app-info": {
"app_name": "My Weather App",
"developer_name": "Weather Co",
"email": "privacy@weather.co"
},
"data-collection": {
"collects_data": "yes",
"data_types": ["location"],
"purposes": ["app-functionality"]
}
}
}'
let policyData: [String: Any] = [
"data": [
"app-info": [
"app_name": "My Weather App",
"developer_name": "Weather Co",
"email": "privacy@weather.co"
],
"data-collection": [
"collects_data": "yes",
"data_types": ["location"],
"purposes": ["app-functionality"]
]
]
]
var request = URLRequest(url: URL(string: "https://api.orbitkit.io/api/apps/\(appId)/policy")!)
request.httpMethod = "PUT"
request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try JSONSerialization.data(withJSONObject: policyData)
let (data, _) = try await URLSession.shared.data(for: request)
const res = await fetch(`https://api.orbitkit.io/api/apps/${appId}/policy`, {
method: "PUT",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
data: {
"app-info": { app_name: "My Weather App", developer_name: "Weather Co" },
"data-collection": { collects_data: "yes", data_types: ["location"], purposes: ["app-functionality"] },
},
}),
});
const { warnings } = await res.json();
Response
{
"warnings": []
}
Warnings are advisory — the data is always saved regardless of warnings. Example warning:
{
"warnings": [
"At least one purpose is required when data collection types are selected."
]
}
Policy sections
| Section key | Fields |
|---|---|
app-info |
app_name, developer_name, email |
data-collection |
collects_data, data_types[], purposes[] |
third-party |
shares_data[], third_party_list |
data-retention |
retains_data, retention_period |
children-tracking |
children_or_tracking, collects_from_children[], uses_tracking[] |
List policy version snapshots
GET /api/apps/:appId/policy-versions
Returns lightweight metadata for policy snapshots, newest first (max 20). Snapshots are created automatically on each deploy.
Response
[
{
"id": "-NabcVersionKey123",
"snapshotAt": 1712345678000,
"trigger": "deploy",
"appName": "My Weather App"
}
]
Get a policy version
GET /api/apps/:appId/policy-versions/:versionId
Returns the full policy data snapshot for a specific version.
Response
{
"snapshotAt": 1712345678000,
"trigger": "deploy",
"appName": "My Weather App",
"policyData": {
"app-info": { "app_name": "My Weather App" },
"data-collection": { "collects_data": "yes", "data_types": ["location"] }
}
}
Errors
| Code | Status | When |
|---|---|---|
VALIDATION_FAILED |
400 | Invalid version ID format |
NOT_FOUND |
404 | Version not found |