Webhooks

Webhooks notify changes in table rows, enabling your app to retrieve updates via GraphQL. Notifications include table ID, primary key, change type, and can be verified using a shared key.

The Business NXT webhooks will notify when a change has been made in a table row. Your application will need an endpoint capable of receiving an HTTP POST request from Visma Connect. The request carries an HMAC SHA-256 signature of the body in the X-Vwd-Signature-V1 header, which your application verifies with the shared key from the Developer Portal (see Visma Developer Portal).

The payload contains the following fields:

FieldData typeExplanation
tableIdentifierstringTable that has been modified, corresponds to the table name in GraphQL.
tableNoint64Numeric table number of the modified table. Use tableIdentifier to identify the table; tableNo is mainly useful for data model extension tables.
customerNointThe customer number the table belongs to, can be 0 if companyNo is non-zero.
companyNointThe company number of the company the table belongs to, can be 0 if the table is a customer level table. As general advice rely on companyNofirst to identify the tenant, and only if it’s 0 check customerNo.
eventstring [INSERT|UPDATE|DELETE]The performed row action, three possible values INSERT, UPDATE, and DELETE.
primaryKeysarray [[string: int64|string]]The primary key represented as an array of key value pairs between the primary key column name and its value. Can contain multiple elements if the table has a composite primary key. The column name is PascalCase: the GraphQL name with an uppercase first letter (OrderNo here, orderNo in GraphQL). Note that integral values are signed and can be 64 bit.
timestampstringUTC timestamp of when the webhook was created, should only be used for DELETE events. It’s usually stamped slightly later than the changedTimestamp/createdTimestamp found in changedColumns and through GraphQL queries. The changedTimestamp value is the preferred value. This field is no longer necessary for INSERT and UPDATE events after the introduction of the changedTimestamp and createdTimestamp column.
changedByUserstringThe user name of the user performing the action, the information can also be found in changedColumns for INSERT and UPDATE events.
changedColumnsarray [[string: int64|decimal|string]]Array with key value pairs of all changed/inserted column names and values in UPDATE and INSERT events, similar to the primary key field. Column names are PascalCase as in primaryKeys. Binary columns’ values are their length and not the binary content. The field is not present for DELETE events.

Below is an example payload for updating an order line, some elements have been omitted from changedColumns for brevity.

Update order line example
{
    "tableIdentifier":"OrderLine",
    "tableNo":128,
    "customerNo":4801958,
    "companyNo":5199768,
    "event":"UPDATE",
    "primaryKeys": [
        {"OrderNo":3},
        {"LineNo":1}
    ],
    "timestamp":"2025-02-06T21:15:28.3971469Z",
    "changedByUser":"ola.normann",
    "changedColumns":[
        {"Description":"Hello webhook"},
        {"ChangedDate":20250206},
        {"ChangedTime":2215},
        {"ChangedByUser":"ola.normann"},
        {"ChangeTimeInMs":80128366},
        {"ChangedTimestamp":20250206211528366}
    ]
}
Last modified September 22, 2026