Webhooks /vismanetapi/setting-up-your-integration/webhooks section Learn how to subscribe to and configure ERP webhooks via the Visma Developer Portal for real-time updates and notifications. 2025-12-03T12:39:59+01:00 # Webhooks Learn how to subscribe to and configure ERP webhooks via the Visma Developer Portal for real-time updates and notifications. The following API´s support webhooks - [Visma Net Financial API](https://api.finance.visma.net/API-index/index.html) - [Visma Net Sales Order API](https://salesorder.visma.net/swagger/index.html) - [Visma Net Journal Transaction API](https://journaltx.visma.net/swagger/index.html) Webhooks in Visma Net allow you to receive real-time updates directly to your endpoint. By subscribing to a webhook, you can easily integrate these updates into your systems. >[!TIP] > **Visma Webhook Dispatcher** uses the following Public IPs when sending webhooks to registered subscriptions. If needed, these IPs can be configured in a whitelist setup of your infrastructure. > > - 18.202.121.26 > - 34.242.104.102 > - 54.220.26.45 Setup webhooks for your application /vismanetapi/setting-up-your-integration/webhooks/setup-webhooks-for-your-application section Learn how to setup webhooks for your application in Developer Portal 2025-12-03T12:39:59+01:00 # Setup webhooks for your application Learn how to setup webhooks for your application in Developer Portal > [!TIP] > [Additional guide can also be found on the the webhook course at Visma Learning Universe](https://www.vismalearninguniverse.com/learn/courses/1535/vismanet-erp-webhooks?hash=16e8c684557cdcb32685a9aa20551ad2241ed4ac&generated_by=37643) ## Subscribing to Webhooks To begin using webhooks in Visma Net ERP, we need to create a subscription to webhook events for your application in the Developer Portal. Follow the steps below to get started. 1. **Log in to the [Visma Developer Portal](https://oauth.developers.visma.com/service-registry)** - Navigate to **My Applications**. 2. **Find Your Application** - Locate the application that is integrated with the ERP API. 3. **Create a New Subscription** - Go to **My Subscriptions** and click the **New Subscription** button. ![New subscription](dev_portal_3.png) - Publisher will list all the API´s in the Developer Portal with webhook support. Choose the correct publisher for your application. ![Select publisher](erp_webhook_1.png) - Select the event type you want to subscribe to. ![Select event type](erp_webhook_2.png) - Add the webhook URL, which is the endpoint in your system that will receive the notifications. > [!TIP] > When configuring your webhook subscription, avoid selecting a specific tenantID initially. Leaving the tenant field at default ensures your webhook can receive events from all tenants your application has access to. ![Config](erp_webhook_3.png) 4. **Finalizing Subscription** - Once you've set your **webhook URL** and left the **tenant field as default**, click **Next** to create your subscription and generate your webhook secret. ![Summary](erp_webhook_4.png) 5. **Storing Your Secret** - A signature key will be generated. Store this securely in a key vault or an environment variable. - You'll need it to validate messages from the ERP webhook service by hashing the utf-8 message with the HMAC SHA-256 algorithm, and encoding it with base64 to compare with the signature sent in the header. ![Secret](erp_webhook_5.png) 6. **Tenant Approval** - Tenants that have granted access to your application need to approve webhook scopes for the subscription to receive webhooks. - This can be done by navigating to the Visma App Store and granting permission at the bottom of the application page. ![App Store](erp_webhook_appStore.png) ## Testing Your Webhook After setting up your webhook, you can test it´s functionality. In this example we have created a subscription for the event `Customer_changed` 1. **Make a change on a Customer** - Update a customer's name in the system. > [!IMPORTANT] > Ensure the webhook notification checkbox is selected in the UI. ![Visma Net](erp_webhook_UI.png) 1. **Verify the Webhook Trigger** - Once the change is made, the webhook is triggered and the data is sent to Webhook.site. - The webhook should capture all relevant information, confirming that the integration works correctly by delivering real-time updates from Visma Net ERP. - This confirms that the webhook integration is working correctly, capturing and delivering real-time updates from Visma net ERP to your desired endpoint. ![Webhook Site](erp_webhook_webhooksite.png) Supported events and entitites /vismanetapi/setting-up-your-integration/webhooks/event-and-entities section This document provides an overview of the different events and entities which support webhooks. 2025-12-03T12:39:59+01:00 # Supported events and entitites This document provides an overview of the different events and entities which support webhooks. ## Publisher: Visma Net Financial | Event details | Events | Description | |------------------------------|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Account** | `Changed` | Fires when account is created or updated | | **Account** | `Created` | Fires when account is created | | **Account** | `Deleted` | Fires when account is deleted | | **Account** | `Identity Changed` | Fires when account number (accountCd) is updated | | **Account** | `Updated` | Fires when account is updated | | **AP Invoice** | `Status Changed` | Fires when the document status changed | | **AR Invoice** | `Action Triggered` | Fires when the action button in the document is used | | **AR Invoice** | `Changed` | Fires when AR Invoice is created or updated | | **AR Invoice** | `Status Changed` | Fires when the document status changed | | **Customer** | `Action Triggered` | Fires when the action button in the document is used | | **Customer** | `Changed` | Fires when Customer is created or updated | | **Customer** | `Created` | Fires when Customer is created | | **Customer** | `Updated` | Fires when Customer is updated | | **Dimension** | `Changed` | Fires when Dimension is created or updated | | **Employee** | `Changed` | Fires when Employee is created or updated | | **EP Employee** | `Created` | Fires when EP Employee is created | | **EP Employee** | `Updated` | Fires when EP Employee is updated | | **First Time Startup** | `Completed` | Fires when startup is completed | | **Inventory Item** | `Action Triggered` | Fires when the action button in the document is used | | **Inventory Item** | `Changed` | Fires when Inventory item is created or updated | | **Inventory Item** | `Created` | Fires when Inventory item is created | | **Inventory Item** | `Updated` | Fires when Inventory Item is updated | | **PM Project** | `Action Triggered` | Fires when the action button in the document is used | | **PM Project** | `Created` | Fires when Project Management Project is created | | **PM Project** | `PMTask Updated` | Fires when Project Management Task is updated | | **PM Project** | `Updated` | Fires when Project Management Project is updated | | **Project** | `Changed` | Fires when Project is created or updated | | **Purchase Order** | `Action Triggered` | Fires when the action button in the document is used | | **Purchase Order** | `Changed` | Fires when Purchase Order is created or updated | | **Purchase Order** | `Status Changed` | Fires when the document status changed | | **Sales Order** | `Action Triggered` | Fires when the action button in the document is used SalesOrder endpoint id approaching end-of-life. Use dedicated Sales Order endpoints and events from publisher Visma.net ERP SalesOrderService | | **Sales Order** | `Changed` | Fires when SalesOrder is created or updated. SalesOrder endpoint id approaching end-of-life. Use dedicated Sales Order endpoints and events from publisher Visma.net ERP SalesOrderService | | **Sales Order** | `Status Changed` | Fires when the document status changed. SalesOrder endpoint id approaching end-of-life. Use dedicated Sales Order endpoints and events from publisher Visma.net ERP SalesOrderService | | **Segment** | `Changed` | Fires when segment key is updated | | **Segment** | `Value Changed` | Fires when segment value is updated | | **Shipment** | `Action Triggered` | Fires when the action button in the document is used | | **Shipment** | `Changed` | Fires when Shipment is created or updated | | **Shipment** | `Deleted` | Fires when shipment is deleted | | **Shipment** | `Status Changed` | Fires when the document status changed | | **Supplier** | `Action Triggered` | Fires when the action button in the document is used | | **Supplier** | `Changed` | Fires when Supplier is created or updated | | **Supplier** | `Created` | Fires when Supplier is created | | **Supplier** | `Updated` | Fires when Supplier is updated | | **Background API Operation** | `Response Ready` | Triggered by Visma Net application when a background API request finished in the background and has a response. This API request must have the header `erp-api-background` with the value subscription |

Response Differences

The Changed events differ in format and information compared to Created, Updated, and Deleted events.

Changed response

{
    "NotificationId": "E1694xxxxxxxx907ff",
    "contextId": "5xxxxx",
    "event": "customer_changed",
    "action": "UPDATED",
    "resourceId": "55555",
    "resourceUri": "https://api.finance.visma.net/v1/customer/55555",
    "relativeResourceUri": "v1/customer/55555",
    "timeStamp": 638974335577900000,
    "ApiClientId": null,
    "TenantId": "f6cd9xxxxxxxxxxxxx6183",
    "IsScheduler": false,
    "ConnectId": "18eb1xxxxxxxxxxxx40666"
}

Created, updated and deleted response

{
    "event": "Customer_Updated",
    "companyId": "5xxxxx",
    "entityId": "567xxxxxxxxxxxxxxxxxxxxxxxxxff2",
    "notificationId": "e1691481xxxxxxxxxxxxxxxxxxxx07ff",
    "entityLocation": "api/v1/customer/55555",
    "erpEvent": "1",
    "erpDocumentStatus": null,
    "documentStatus": null,
    "UserId": "3363881",
    "timeStamp": "638974335577900000",
    "apiClientId": null,
    "TenantId": "f6cd9xxxxxxxxxxxxx6183",
    "ConnectId": "18eb1xxxxxxxxxxxx40666",
    "ischeduler": false
}
## Publisher: Visma Net ERP SalesOrderService | Event details | Event | Description | |-------------------------------|------------------------------|-------------------------------------------------------| | **Sales Order is created** | `SALESORDER_CREATED` | This fires as soon as a sales order is created. | | **Sales Order is updated** | `SALESORDER_UPDATED` | This fires as sonn as a sales order is updated. | | **Sales Order is deleted** | `SALESORDER_DELETED` | This fires as sonn as a sales order is deleted. | | **Custom Action from the UI** | `SALESORDER_UI_CUSTOMACTION` | This fires when a custom action is clicked in the UI. | ## Visma Net Journal Transaction | Event details | Events | Description | |------------------------------------------------------|-------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Voucher import failed** | `IMPORT_VOUCHER_FAILED` | An import operation has failed to start due to failed validation or some other error | | **Voucher import successfully started** | `IMPORT_VOUCHER_SUCCESSFUL` | A voucher import is validated and import has started | | **Voucher document failed to synchronize** | `VOUCHER_DOCUMENT_SYNCHRONIZATION_FAILED` | One document in the voucher failed to be synchronized completely (in particular the operation to release failed). Document corresponds to unique `refNumber` | | **Voucher document is synchronized successfully** | `VOUCHER_DOCUMENT_SYNCHRONIZED` | One document in the voucher has been synchronized successfully. Document corresponds to unique `refNumber` | | **Voucher is processed into transactions** | `VOUCHER_PROCESSED` | Event raised when a voucher has been processed into batches and transactions | | **Voucher failed to be processed into transactions** | `VOUCHER_PROCESSING_FAILED` | Event raised when an attempt to transform a voucher into transactions has failed | | **Voucher is received** | `VOUCHER_RECEIVED` | Event raised when a voucher is received and has passed validation | | **Synchronizing a voucher failed** | `VOUCHER_SYNCHRONIZATION_FAILED` | Event raised when an attempt to synchronize a voucher failed in part or as a whole | | **All documents in a voucher has been created** | `VOUCHER_SYNCHRONIZATION_STARTED` | All documents in a voucher has been created successfully, but is not yet released. Document corresponds to unique `refNumber` | | **Voucher is synchronized to Visma Net** | `VOUCHER_SYNCHRONIZED` | Event raised when a voucher has been synchronized with VismaNet |