As explained on Architecture page, getint.io is using REST Api to communicate with apps (Jira, ServiceNow, etc) and by using REST Api we are fetching data that should be synced.
For each integration, every specified interval, following logic is performed
1) for app A, send REST Api request to fetch data that should be synced
2) for app B, send REST Api request to fetch data that should be synced
3) For each found item returned by 1 and 2, check if item was already synced in some previous runs for given integration.
if yes, fetch its counterpart, and check which one was modified later. The later one, will be treat as trigger and the counterpart will be updated using the trigger data
if no, create new item in the app on the other side (e.g. if B item has no counterpart, item in A app will be created)
Example of sent requests to Jira and GitHub
[INFO ] 2021-08-11 09:17:30,707 - [t9a73d948-0-1486397-8] Fetching changes since 2021-08-11T09:17:12.330Z[INFO ] 2021-08-11 09:17:31,015 - [t9a73d948-0-1486397-8] Prepared Jira jql: project = "STAGGITHUB" AND issuetype IN (10002) AND updated >= '2021/08/11 11:17'[DEBUG] 2021-08-11 09:17:31,146 - [t9a73d948-0-1486397-8] Found 0 artifacts forced to resync[INFO ] 2021-08-11 09:17:31,146 - [t9a73d948-0-1486397-8] Found 0 left candidates[INFO ] 2021-08-11 09:17:31,146 - [t9a73d948-0-1486397-8] Searching GitHub items: /repos/demogetintio/staginggithub/issues?since=2021-08-11T09:17:12.330Z
As you can see on 2nd and 5h lines, we requests for fetching items to sync contains more parameters specific to the created integration like time since which items were modified (this is a time of last integration) and e.g. project keys