The RootFi Platform offers robust webhook functionality, ensuring that your systems remain up-to-date with real-time synchronization of the data your app needs. With webhooks, as soon as data is synchronized from the accounting platform, a corresponding webhook is instantly activated. This guide will walk you through the steps to set up a webhook on the RootFi platform.

How to Configure?

  1. Accessing Webhooks Settings
    • Navigate to the Webhooks page.
    • Click the Create Webhook button.

  1. Entering Webhook Details

    • Provide a suitable name for the webhook.
    • Input the desired URL for the webhook.
    • Determine the type of webhook you need:
      • Data Model Changes
      • Connection Changed
      • Sync Completed
    • For added security, you can integrate an authorization token in the headers.

Webhook Types

Connection Changed Webhook:

This webhook is activated when a new connection is made via an invite link or if there’s a change in connection status, such as when a connection is disconnected or expired.

Use this webhook to receive notifications when a connection has been expired to prompt your customer to reconnect.

Sync Completed Webhook:

This webhook is activated upon the completion of an asynchronous data sync. It can be triggered by either a data sync for a specific connection or when asynchronous data is written.

Use this webhook to receive notifications when data has completed syncing. You can also use this webhook to check which data models were synced successfully and which ones failed.

Data Model Changes Webhook:

We support 3 Event Types for this webhook:

  • CREATE: Triggered when data is initially synced or when a new record is imported from the Accounting Platform.
  • UPDATE: Only triggered when data undergoes changes, not during every RootFi sync operation. For instance, even if RootFi performs daily syncs, but no changes are detected on the Accounting platform, no webhook notifications will be sent.
  • DELETE: Activated if data is removed from the Accounting platform. Can only be triggered after a Full Sync operation.

Futhermore you can configure this type of webhook for specific or all data models.

Use this webhook to receive notifications when data is created, updated, or deleted to keep your systems up-to-date.

Developer Notes

  • Webhook Retry Mechanism: In the event of server congestion or high request volumes, webhooks will be retried three times with exponentially increasing delays. This ensures you never miss out on vital data.

  • Webhook Request Type: All webhooks will be dispatched using a POST request with a structured body.

Sample JSON Payloads

  • Data Model Changes:

        "company_id": 285,
        "integration_type": "ZOHO_BOOKS",
        "data_model": "ACCOUNTS",
        "webhook_type": "DATA_MODEL_CHANGES",
        "type": "CREATE", // UPDATE, DELETE
        "created_at": "2023-01-01T00:00:00.000Z"
        "data": [
                "platform_id": "3124930487",
                "name": "Cost of Good sold",
                "platform_id": "3147384833",
                "name": "Revenue Account",
  • Sync Completed:

      "webhook_type": "SYNC_COMPLETED",
      "company_id": 1244,
      "integration_type": "MS_DYNAMICS_365",
      "data": {
        "id": "ZqpzbJNs4MvzrFz",
        "status": "SUCCESS",
        "total_jobs_count": 1,
        "type": "PULL",
        "success_jobs_count": 1,
        "failed_jobs_count": 0,
        "running_jobs_count": 0,
        "created_jobs_count": 0,
        "start_time": "2023-10-18T03:01:08.576Z",
        "end_time": "2023-10-18T03:01:16.512Z",
        "jobs": [
            "rootfi_id": "V6KXGlvt13sd81G",
            "status": "SUCCESS",
            "error": {},
            "data_model": "INVOICES",
            "job_type": "PULL",
            "start_time": "2023-10-18T03:01:08.576Z",
            "end_time": "2023-10-18T03:01:16.512Z",
            "upload_job_id": "ZqpzbJNs4MvzrFz"
  • Connection Changed:

      "webhook_type": "CONNECTION_CHANGED",
      "company_id": 285,
      "integration_type": "ZOHO_BOOKS",
      "connection_status": "HEALTHY", // EXPIRED, DISCONNECTED
      "created_at": "2023-01-01T00:00:00.000Z"