The cause was found to be that Visma.net API servers provided between approximately September 7 and September 11 a different Swagger metadata-specification that was automatically picked up. Although a correct metadata-specification, it missed a lot of APIs leading to tables being gone.
On approximately September 11, Visma.net reverted the Swagger metadata-specification and replaced it by the (logical next) version 10.17.02.1004.
History was (approximately):
Date |
Version |
Size (bytes) |
August 28 05:00 |
10.15.01.1001 |
2050531 |
September 4 12:54 (Wednesday) |
10.16.01.1001 |
2050805 |
September 7 05:00 (Saturday) |
2.0 |
6822 |
September 11 09:53 (Tuesday) |
10.17.02.1004 |
2050805 |
The problem was resolved for the user by clicking on “Reset cache” in the top-right menu in Invantive Bridge Online.
Contents Weird 2.0 Swagger specification
The weird 2.0 Swagger specification listed on the fixed URL seems to be another API specification for Visma.net targeting partners that want to register new subscriptions.
As said before, the Visma.net team corrected the deployment within a few days. It was probably an automatic deployment during the weekend running havoc, similar to the CrowdStrike deployment issue.
Some Visma.net users on Invantive Cloud might still be affected by the issue due to caching so all copies have been purged safetywise to force a reload.
{
"swagger":"2.0",
"info":{
"version":"2.0",
"title":"Visma.net API"
},
"basePath":"/API",
"schemes":[
"https"
],
"paths":{
"/resources/v1/event":{
"get":{
"tags":[
"Event"
],
"summary":"Get all events",
"description":"Lists the events from Visma.net for which users can subscribe.",
"operationId":"getAllEvents",
"produces":[
"application/json"
],
"parameters":[
],
"responses":{
"200":{
"description":"successful operation",
"schema":{
"type":"array",
"items":{
"$ref":"#/definitions/EventDto"
}
}
}
}
}
},
"/resources/v1/subscription":{
"get":{
"tags":[
"Subscription"
],
"summary":"Get all subscriptions made by the current user",
"description":"",
"operationId":"getAllSubscriptions",
"produces":[
"application/json"
],
"parameters":[
],
"responses":{
"200":{
"description":"Success",
"schema":{
"type":"array",
"items":{
"$ref":"#/definitions/SubscriptionDto"
}
}
},
"default":{
"description":"successful operation"
}
},
"security":[
{
"oauth2":[
"vismanet_erp_interactive_api:read"
]
}
]
},
"post":{
"tags":[
"Subscription"
],
"summary":"Create a new subscription for the current user",
"description":"",
"operationId":"createSubscription",
"consumes":[
"application/json"
],
"produces":[
"application/json"
],
"parameters":[
{
"in":"body",
"name":"subscription",
"required":true,
"schema":{
"$ref":"#/definitions/SubscriptionDto"
}
}
],
"responses":{
"201":{
"description":"Success",
"headers":{
"Location":{
"description":"URL of the new Subscription.",
"type":"string"
}
},
"schema":{
"$ref":"#/definitions/SubscriptionDto"
}
},
"default":{
"description":"successful operation"
}
},
"security":[
{
"oauth2":[
"vismanet_erp_interactive_api:create"
]
}
]
}
},
"/resources/v1/subscription/{id}":{
"get":{
"tags":[
"Subscription"
],
"operationId":"findSubscriptionById",
"summary":"Get a specific subscription",
"description":"",
"produces":[
"application/json"
],
"parameters":[
{
"name":"id",
"in":"path",
"required":true,
"type":"integer",
"format":"int64"
}
],
"responses":{
"200":{
"description":"Success",
"schema":{
"$ref":"#/definitions/SubscriptionDto"
}
},
"default":{
"description":"successful operation"
}
},
"security":[
{
"oauth2":[
"vismanet_erp_interactive_api:read"
]
}
]
},
"put":{
"tags":[
"Subscription"
],
"operationId":"updateSubscription",
"summary":"Update a specific subscription",
"description":"",
"consumes":[
"application/json"
],
"produces":[
"application/json"
],
"parameters":[
{
"name":"id",
"in":"path",
"required":true,
"type":"integer",
"format":"int64"
},
{
"in":"body",
"name":"subscription",
"required":true,
"schema":{
"$ref":"#/definitions/SubscriptionDto"
}
}
],
"responses":{
"204":{
"description":"Success"
},
"default":{
"description":"successful operation"
}
},
"security":[
{
"oauth2":[
"vismanet_erp_interactive_api:update"
]
}
]
},
"delete":{
"tags":[
"Subscription"
],
"summary":"Delete a specific subscription",
"description":"",
"operationId":"deleteSubscription",
"produces":[
"application/json"
],
"parameters":[
{
"name":"id",
"in":"path",
"required":true,
"type":"integer",
"format":"int64"
}
],
"responses":{
"204":{
"description":"Success"
},
"default":{
"description":"successful operation"
}
},
"security":[
{
"oauth2":[
"vismanet_erp_interactive_api:delete"
]
}
]
}
},
"/resources/v1/serviceStatus":{
"get":{
"tags":[
"ServiceStatus"
],
"operationId":"allServiceStatus",
"summary":"Get the list of all available services",
"description":"",
"produces":[
"application/json"
],
"responses":{
"200":{
"description":"successful operation",
"schema":{
"type":"array",
"items":{
"$ref":"#/definitions/StatusPageComponentDto"
}
}
}
}
}
},
"/resources/v1/notification/{notificationId}":{
"get":{
"tags":[
"Notification"
],
"summary":"Get notification details by notification ID.",
"description":"",
"operationId":"getNotificationInfo",
"produces":[
"application/json"
],
"parameters":[
{
"name":"notificationId",
"in":"path",
"required":true,
"type":"string"
}
],
"responses":{
"200":{
"description":"successful operation",
"schema":{
"$ref":"#/definitions/NotificationReceivedDto"
}
}
}
}
},
"/resources/v1/notification":{
"get":{
"tags":[
"Notification"
],
"summary":"Get notifications filtered by event type and/or date.",
"description":"",
"operationId":"findByNotificationDateOrEventType",
"produces":[
"application/json"
],
"parameters":[
{
"name":"eventType",
"in":"query",
"required":false,
"type":"string"
},
{
"name":"dateFrom",
"in":"query",
"required":false,
"type":"string",
"format":"date-time",
"description":"Use format: YYYY-MM-DD HH:mm:ss"
},
{
"name":"dateTo",
"in":"query",
"required":false,
"type":"string",
"format":"date-time",
"description":"Use format: YYYY-MM-DD HH:mm:ss"
},
{
"name":"pageNumber",
"in":"query",
"required":false,
"type":"integer"
},
{
"name":"pageSize",
"in":"query",
"required":false,
"type":"integer"
}
],
"responses":{
"200":{
"description":"successful operation",
"schema":{
"$ref":"#/definitions/NotificationDto"
}
}
},
"security":[
{
"oauth2":[
"vismanet_erp_interactive_api:read"
]
}
]
}
},
"/resources/v1/notification/failed":{
"get":{
"tags":[
"Notification"
],
"summary":"Get failed notifications filtered by event type and/or date.",
"description":"",
"operationId":"getRetryNotificationList",
"produces":[
"application/json"
],
"parameters":[
{
"name":"eventType",
"in":"query",
"required":true,
"type":"string"
},
{
"name":"dateFrom",
"in":"query",
"required":false,
"type":"string",
"format":"date-time",
"description":"Use format: YYYY-MM-DD HH:mm:ss"
},
{
"name":"dateTo",
"in":"query",
"required":false,
"type":"string",
"format":"date-time",
"description":"Use format: YYYY-MM-DD HH:mm:ss"
},
{
"name":"pageNumber",
"in":"query",
"required":false,
"type":"integer"
},
{
"name":"pageSize",
"in":"query",
"required":false,
"type":"integer"
}
],
"responses":{
"200":{
"description":"successful operation",
"schema":{
"$ref":"#/definitions/NotificationDto"
}
}
},
"security":[
{
"oauth2":[
"vismanet_erp_interactive_api:read"
]
}
]
}
}
},
"definitions":{
"EventDto":{
"type":"object",
"required":[
"eventType",
"name"
],
"properties":{
"eventType":{
"type":"string"
},
"name":{
"type":"string"
},
"description":{
"type":"string"
}
}
},
"SubscriptionDto":{
"type":"object",
"required":[
"event",
"hookUri"
],
"properties":{
"id":{
"type":"integer",
"format":"int64",
"description":"The identifier of a subscription. Will be populated only on successful POST operation"
},
"event":{
"type":"string",
"description":"The event type for which the subscription is made"
},
"hookUri":{
"type":"string",
"description":"The URL where notifications will be sent"
}
}
},
"StatusPageComponentDto":{
"type":"object",
"properties":{
"status":{
"type":"string"
},
"name":{
"type":"string"
},
"created_at":{
"type":"string"
},
"updated_at":{
"type":"string"
},
"position":{
"type":"integer",
"format":"int64"
},
"description":{
"type":"string"
},
"showcase":{
"type":"boolean"
},
"id":{
"type":"string"
},
"page_id":{
"type":"string"
},
"group_id":{
"type":"string"
}
}
},
"NotificationReceivedDto":{
"type":"object",
"properties":{
"entityId":{
"type":"string"
},
"notificationId":{
"type":"string"
},
"source":{
"type":"string"
},
"status":{
"type":"string"
}
}
},
"NotificationDto":{
"type":"object",
"properties":{
"contextId":{
"type":"string"
},
"eventId":{
"type":"string"
},
"action":{
"type":"string"
},
"resourceUri":{
"type":"string"
}
}
}
}
}