Webhooks /vismanetapi/webhooks section Learn how to subscribe to and configure ERP webhooks via the Visma Developer Portal for real-time updates and notifications. 2026-01-28T13:55:10+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/webhooks/setup-webhooks-for-your-application section Learn how to setup webhooks for your application in Developer Portal 2026-02-05T13:28:34+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] > The first time you set up a webhook, the tenantId field will be empty, even though there are Visma Net companies connected to the Application in the Developer Portal. This happens because the company has not yet accepted the specific webhook scopes in the App Store. > >When you configure your webhook subscription, do not select a specific tenantID at first. If you leave the tenant field at default, 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/webhooks/event-and-entities section This document provides an overview of the different events and entities which support webhooks. 2026-01-28T13:55:10+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 |