Our field service mobile app is experiencing consistent API timeout failures when technicians try to sync data after working offline. The app collects inspection data throughout the day, then pushes everything via API when connectivity returns. Since enabling the offline sync feature, these pushes fail with 30-second timeouts.
The mobile app queues up around 150-200 records during a typical shift (inspection results, photos, signatures). When the tech gets back to the service center and connects to WiFi, the sync operation times out before completing. We’re losing critical inspection data because the queue gets cleared on timeout.
POST /api/data/v9.2/inspections/batch
Error: Request timeout after 30000ms
Pending queue: 187 records
Is there a way to configure the API batch size or timeout threshold for offline sync scenarios? The default settings don’t seem appropriate for field workers who accumulate large datasets.
The offline sync queue management needs tuning. By default, the mobile SDK tries to push everything in one massive batch operation, which is why you’re hitting timeouts. You need to configure chunked processing with smaller batch sizes. Also verify your API throttling limits aren’t being exceeded - large batches can trigger rate limiting which compounds the timeout problem.
Don’t forget about the API timeout settings on the server side too. Even if you chunk the batches properly, the default Dataverse API timeout might still be too short. You may need to request an increase from Microsoft support for your environment, especially if inspection records include large photo attachments.
I’ve implemented offline sync for multiple field service deployments and here’s the complete solution for your timeout issues:
1. Offline Sync Queue Management
The root problem is the default queue processing strategy. Configure your offline profile to use progressive sync instead of bulk batch:
// In offline profile config
SyncBatchSize: 30,
MaxConcurrentBatches: 2,
EnableProgressiveSync: true
This processes records in 30-record chunks with up to 2 parallel batches, preventing massive payloads that timeout. Find this in Power Apps > Settings > Mobile > Offline Profiles > [Your Profile] > Advanced Settings.
2. API Batch Size Configuration
The mobile SDK’s default batch size (unlimited) causes problems. Set explicit limits in your API connector configuration:
Navigate to your Dataverse environment settings > Integration > API Management. Set:
- Batch Request Limit: 50 records maximum
- Batch Timeout: 120 seconds (instead of default 30)
- Enable Batch Continuation: Yes (allows resuming failed batches)
This ensures each API call stays within manageable limits while giving enough time for processing.
3. Incremental Sync Support
Enable incremental sync to avoid re-sending successfully synced records if a batch fails partway through:
In your mobile app code, implement checkpoint tracking:
offlineSync.setCheckpointMode('incremental');
offlineSync.onBatchComplete(updateCheckpoint);
This saves progress after each successful batch. If sync fails at batch 4 of 7, it resumes from batch 5 on retry instead of starting over.
Additional Optimizations
- Compress photo attachments before queuing (target 500KB max per image)
- Use delta sync for inspection records - only send changed fields, not full records
- Configure retry logic with exponential backoff (3 retries with 5s, 15s, 45s delays)
- Set queue expiration to 7 days to prevent indefinite accumulation
After implementing these changes, our field techs successfully sync 200+ records without timeouts. The progressive batching and incremental sync are the critical pieces - they prevent data loss and handle poor connectivity scenarios gracefully.
The batch size configuration is in the mobile app’s offline profile settings, not the API connector. Navigate to Settings > Mobile > Offline Profiles, select your profile, and look for “Sync Configuration” section. You can set max records per batch there. I typically recommend 25-50 records per batch for field service scenarios to balance sync speed with reliability.
We had similar issues with our technician mobile app. The 30-second timeout is way too aggressive for batch operations. Check if your offline sync is configured to use incremental sync instead of full batch push - that helped reduce our payload sizes significantly.