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 receving a POST request from Visma Connect. The request will contain a signature that can be verified by your application using a shared key.

The payload contains the following fields

Field Data type Explanation
tableIdentifier string Table that has been modified, corresponds to the table name in GraphQL.
customerNo int The customer number the table belongs to, can be 0 if companyNo is non-zero.
companyNo int The 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.
event string [INSERT|UPDATE|DELETE] The performed row action, three possible values INSERT, UPDATE, and DELETE.
primaryKeys array [[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 corresponds to its name in GraphQL. Note that integral values are signed and can be 64 bit.
timestamp string UTC 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 perfered value. This field is no longer neccessary for INSERT and UPDATE events after the introduction of the changedTimestamp and createdTimestamp column.
changedByUser string The user name of the user performing the action, the information can also be found in changedColumns for INSERT and UPDATE events.
changedColumns array [[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. 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",
    "customerNo":4801958,
    "companyNo":5199768,
    "event":"INSERT",
    "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}
    ]
}

Visma Development Portal

Guide on subscribing to BNXT webhooks via the Visma Development Portal, including setup steps, retry configurations, and securing the signature key.

Business NXT configuration

Guide to configuring Business NXT - Create and link User, WebhookTarget, and Webhook Subscription tables. Support outlined for multiple targets and subscriptions per application.

Samples

Integration samples are available on GitHub, including contributions by Ole Melhus. Visit the links for examples and layouts.

Last modified February 7, 2025