Overview
An incremental sync copies newly received and changed Results into your reporting system. Use it after the initial export so each run processes a smaller period.
This guide describes a pattern for your integration to implement. Mobaro provides the API; your service owns the schedule, saved checkpoints and destination records. Start with pulling Results via the API for authentication and the response format.
At a glance |
|
Who can do this | Integration developers; Organization › Administrate is required to create the API key. |
Where | Configuration › API › API Keys; your integration service |
Works on | Public API |
Availability | Contact your CSM |
💡 Why this matters: A repeatable sync keeps late uploads and later edits visible without creating a second reporting record for the same Result.
Prepare the destination
1. Use a dedicated read-only key
Store the key in your integration’s server-side secret storage and send it in the X-Api-Key header. Keys have organization-wide access. See API access scope.
2. Choose the record identity
Use the Mobaro Result id as your destination key. Update an existing record when that ID appears again. Store the original response or the fields you need, including checklistId, checklistRevision, received and updated.
3. Backfill existing Results
Read the required history through GET /api/customers/results. Use explicit filters and ordering, page through the results and confirm that records reached the destination before recording your first checkpoint.
Use two time windows
For recurring runs, process new arrivals and later changes separately. Keep the same scope filters across runs.
Feed | Filters and order |
New arrivals, including late uploads | ReceivedAfter, ReceivedBefore; OrderBy=received |
Changes to existing Results | UpdatedAfter, UpdatedBefore; OrderBy=updated |
Do not use completion time alone for arrival detection: a device can upload work after it was answered. Do not assume every newly received Result already has an updated timestamp. Merge both feeds by Result ID.
Choose a fixed upper time boundary for each run. Start the next window slightly before its saved checkpoint so boundary records are read again. The API’s Before and After comparisons are exclusive. Overlap and ID-based updates are deliberate parts of this design. Use ISO 8601 timestamps with a time zone.
Page and save reliably
1. Read the whole window
Set Limit=20 and start at Offset=0. Increase the offset by the returned amount. Stop when the page is empty or the accumulated offset reaches total. Results requests allow at most 20 records per page.
2. Persist before advancing
Save each page durably. Only advance that feed’s checkpoint after the entire window succeeds. If a run fails, retry its window and update records by ID again. Use backoff for rate limits and temporary failures.
3. Reconcile periodically
Offset paging is not a frozen snapshot. Records can change while a run is in progress, and equal timestamps are not a unique sort key. Add periodic overlapping re-reads or a broader reconciliation appropriate to your reporting needs. Do not treat one successful page loop as proof that an active dataset was copied exactly once.
Keep meaning and deletions current
To label answers, request the Checklist revision recorded on that Result, with includeContent=true. Match answer question IDs to element IDs, including elements inside groups. Cache content by both Checklist ID and revision; using today’s Checklist can mislabel old answers. See question text and Checklist revisions.
A filtered Results list is not a deletion feed. If your destination must remove deleted records, design a separate deletion process using webhook events and reconciliation. Handle duplicate events and the possibility that a deleted record can no longer be fetched.
Best practices
Keep separate checkpoints for received and updated feeds.
Log window boundaries, page counts and failures without logging API keys.
Test retries, equal timestamps, a late upload and a changed Result before relying on the feed.
Frequently asked questions
How do I get Mobaro data into our reporting tools automatically?
Run an API integration on your side or use an appropriate connector workflow. See pulling Results for the starting options; this guide adds the repeatable sync design.
How do I turn the question IDs into question text?
Fetch the Checklist with includeContent=true and the Result’s checklistRevision, then match element IDs. See the question mapping example.
How do I get a test environment for API development?
Ask your CSM or Support to confirm an appropriate test organization. An API key connects to its organization; creating a key does not itself create a sandbox.
