Steps to Reproduce
Step 1: Fetch Initial Device List
Called the device list endpoint to retrieve all devices and saved the cursor:
GET https://mdmenrollment.apple.com/server/devices
Step 2: Modify Devices
Added and deleted several devices via https://business.apple.com/
Step 3: Sync Without Pagination
Called the sync endpoint using the cursor from Step 1 (no limit):
GET https://mdmenrollment.apple.com/devices/sync?cursor={step1_cursor}
Result: Returned 3 device records as expected:
{
"devices": [
{
"serial_number": "F70JJ4C16L",
"op_type": "added",
"op_date": "2025-12-11T07:05:05Z"
},
{
"serial_number": "F70JJ4C16L",
"op_type": "deleted",
"op_date": "2025-12-11T07:04:36Z"
},
{
"serial_number": "C8RWGXZXJWF5",
"op_type": "deleted",
"op_date": "2025-12-11T07:04:52Z"
}
],
"more_to_follow": false
}
Step 4: Sync With Pagination (First Page)
Called the sync endpoint using the same cursor from Step 1 with limit=1:
GET https://mdmenrollment.apple.com/devices/sync?cursor={step1_cursor}&limit=1
Result: Returned 1 record with more_to_follow: true — indicating more data exists:
{
"devices": [
{
"serial_number": "F70JJ4C16L",
"op_type": "added",
"op_date": "2025-12-11T07:05:05Z"
}
],
"more_to_follow": true,
"cursor": "MTowOjE3NjU0MzgyNDI5ODc6..."
}
Step 5: Sync With Pagination (Second Page)
Called the sync endpoint using the cursor from Step 4 with limit=1:
{
"devices": [],
"more_to_follow": false
}
Expected Behavior
When paginating with limit=1, the API should return all 3 records across 3 sequential requests.
Actual Behavior
Without pagination: Returns 3 records ✓
With pagination (limit=1): Returns only 1 record, then empty array ✗
2 records are missing when using pagination.
Impact
This inconsistency makes the sync API unreliable for incremental device synchronization workflows.
Topic:
Business & Education
SubTopic:
Device Management