{"openapi":"3.1.0","info":{"title":"Apple Device Policy Explorer API","version":"1.0.0","description":"Read-only API over an hourly-refreshed mirror of Apple's device-management\nrepository: MDM Configuration Profile payloads and Declarative Device\nManagement (DDM) declarations, with per-OS version availability.\nIntended for AI agents and tools: call /api/search for a compact, filtered\nlist, then GET /api/policy/{payloadType} for the authoritative full record.\nSee /llms.txt for an agent-oriented overview and worked examples.\nData cache schema version: 1.4.0.\nData last updated: 2026-06-12T20:54:04.341Z.","contact":{"url":"https://appledevicepolicy.tools/llms.txt"}},"servers":[{"url":"https://appledevicepolicy.tools"}],"paths":{"/api/search":{"get":{"operationId":"searchPolicies","summary":"Search Apple MDM/DDM policies (compact, filtered, paginated)","description":"Returns small result rows plus a detailUrl. Drill into a payloadType with GET /api/policy/{payloadType} for full keys.","parameters":[{"name":"q","in":"query","required":false,"description":"Free-text, case-insensitive substring over title, description, payloadType, and keys.","schema":{"type":"string"}},{"name":"os","in":"query","required":false,"description":"Filter to a platform.","schema":{"type":"string","enum":["iOS","macOS","tvOS","watchOS","visionOS"]}},{"name":"category","in":"query","required":false,"description":"mdm = Configuration Profile; ddm = Declarative declarations.","schema":{"type":"string","enum":["mdm","ddm"]}},{"name":"status","in":"query","required":false,"description":"Filter to newly introduced or deprecated policies.","schema":{"type":"string","enum":["new","deprecated"]}},{"name":"branch","in":"query","required":false,"description":"Source branch; defaults to 'release'.","schema":{"type":"string","default":"release"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"minimum":1,"maximum":100}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"minimum":0}}],"responses":{"200":{"description":"Matching policies.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"500":{"description":"Server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/policy/{payloadType}":{"get":{"operationId":"getPolicy","summary":"Full definition for one payload","description":"The authoritative record: every key with type, default, description, and per-OS introduced/deprecated versions. Use this when generating a policy.","parameters":[{"name":"payloadType","in":"path","required":true,"description":"e.g. 'com.apple.mobiledevice.passwordpolicy' or a DDM type like 'passcode.settings'.","schema":{"type":"string"}},{"name":"branch","in":"query","required":false,"schema":{"type":"string","default":"release"}}],"responses":{"200":{"description":"The full policy definition.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyDetail"}}}},"404":{"description":"No such payloadType on this branch.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/policies":{"get":{"operationId":"listPolicies","summary":"All policies for a branch (heavy — includes all keys)","description":"Prefer /api/search for normal use; this returns the entire dataset with full keys.","parameters":[{"name":"branch","in":"query","required":false,"schema":{"type":"string","default":"release"}}],"responses":{"200":{"description":"Full policy list.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}}},"components":{"schemas":{"SearchResponse":{"type":"object","properties":{"query":{"type":"object","properties":{"q":{"type":["string","null"]},"os":{"type":["string","null"]},"category":{"type":["string","null"]},"status":{"type":"string"}}},"branch":{"type":"string"},"availableBranches":{"type":"array","items":{"type":"string"}},"total":{"type":"integer","description":"Total matches before pagination."},"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Results in this page."},"results":{"type":"array","items":{"$ref":"#/components/schemas/SearchResultItem"}}}},"SearchResultItem":{"type":"object","properties":{"payloadType":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"supportedOS":{"type":"array","items":{"type":"string"}},"keyCount":{"type":"integer"},"isNew":{"type":"boolean"},"isDeprecated":{"type":"boolean"},"newOSInfo":{"type":"string"},"deprecatedOSInfo":{"type":"string"},"detailUrl":{"type":"string","format":"uri","description":"GET this for the full record."},"matchedKeyCount":{"type":"integer","description":"Present only when q is set: total keys matching the query."},"matchedKeys":{"type":"array","description":"Present only when q is set: top matching keys (capped).","items":{"type":"object","properties":{"key":{"type":"string"},"title":{"type":"string"}}}}},"required":["payloadType","title","category","supportedOS","keyCount","detailUrl"]},"PolicyDetail":{"type":"object","description":"Full payload definition. Keys can nest recursively, so the shape is open.","additionalProperties":true},"Error":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}