Material Supplier Integration API
Introduction
This page describes the Scalepoint Material Supplier Integration API. This API can be used to retrieve information about the claim and assigned Service Partner as well as to integrate information about materials requested by the Service Partner and invoices for the materials provided to Service Partner.
Overview
The process of Material Supplier Integration can be done using the following api:
- Event-api (for receving information about new claims)
- Integrate material order
- Integrate material invoice
The whole flow is shown on the diagram below:

Unified events
When a service on a claim is requested with material provider usage, we send a message to unified events queue.
To recieve these please refer to Events API.
Message structure
{
"eventType": "repair_updated",
"payloadVersion": "1.0.0",
"correlationId": "cafdfac8-f472-4eef-a231-2a3fe9f42028",
"timestamp": "2020-10-21T08:45:53.3406753+02:00",
"case": {
"id": "2f29eca7-bec3-4061-8817-6b29cf13464d",
"damageCause": "Brand",
"damageCategory": "Brandskade",
"policy": {
"insuranceCompany": {
"alias": "insurance1",
"subcompanyAlias": "insurance1",
"subcompanyName": "insurance one"
}
},
"number": "20200826-01"
},
"service": {
"referenceNumber": "20200826-01-8",
"id": "25875a6d-5c7b-48e3-8cb9-e620378d99bc",
"startDate": "2020-12-10T08:12:14.2170965Z",
"endDate": "2020-12-10T08:41:46.4739975Z"
},
"servicePartner": {
"id": "30574be6-fe0c-45f3-8c3d-016211c166bb",
"displayName": "Aage and Søn",
"companyTaxId": "23345622",
"phoneNumber": "+4512345678",
"faxNumber": "",
"responsibleUser": "craftsman_name Last"
}
}
Material order integration
Authentication
You need an access_token with the scope material-supplier:write to call the material order Endpoint.
Please refer to the documentation about details of authentication process.
Calling the api
To integrate a material order you send a request with an order payload to the dedicated endpoint. Endpoint URL has the following format:
https://<hostname>/host/api/integration/<version>/materialorder/materialsuppliersubmit
Example of the endpoint URL for production environment:
https://entry.scalepoint.com/ecx/host/api/integration/v1/materialorder/materialsuppliersubmit
Optional
Service order number is optional. If provided, it will attach the material order to specific service on a claim.
Request
POST https://entry.scalepoint.com/ecx/host/api/integration/v1/materialorder/materialsuppliersubmit
Authorization: Bearer <access_token>
Accept-charset: utf-8
Accept: application/json
Content-Type: application/json
{
"timestamp": "2020-12-04T13:16:50Z",
"payload": {
"claim": {
"id": "8976EADF-3805-4E96-8F0D-F0F57F798503",
"policy": {
"insuranceCompany": {
"alias": "companyname"
}
}
},
"service": {
"orderNumber": "20200826-01-8",
},
"servicePartner": {
"id": "1AC3EADF-3805-4E96-8F0D-F0F57F798503"
},
"order": {
"number": "123456789",
"subtotal": 100500.42,
"vat": 256,
"total": 12122.21,
"items": [
{
"lineNumber": 1,
"id1": "ITEM1_ID1",
"id2": "ITEM1_ID2",
"title": "ITEM1_TITLE",
"unit": "Sum",
"quantity": 7,
"unitPrice": 22.3,
"discount": 99.9,
"subtotal": 212.32,
"status": "Invoiced"
}
]
}
}
}
Response
200 OK
{
"success": true
}
Error handling
400 Bad Request - when the server could not understand the request due to invalid syntax (e.g. payload doesn't have required data etc...). Client needs to fix the request payload
401 Unauthorized - when client is not authorized (e.g. expired or no Bearer, expired certificate etc...)
404 Not Found - when claim is not found or Service Partner is not found. Status description will provide more details about what exactly caused this error
500 Internal Server Error - unexpected error in Scalepoint system
Error response examples
{
"success": false,
"errorDescription": "payload.claim.id with value 'CLAIM_GUID' is not ok. Reason: Provided value is invalid",
"errorType": "InvalidFormat"
}
{
"success": false,
"errorDescription": "Missing materialSupplierId data from the OAuth system",
"errorType": "GenericError"
}
Duplicate requests handling
If Scalepoint already has a material order with the same claim id claim.id, the same Service Partner id servicePartner.id and the same material order number data.order.number then the existing material order will be overwritten if timestamp of the new one is bigger than the timestamp of the existing one. In case if timestamp of the new material order is less than or equal to timestamp of the existing material order then the new material order will be ignored and 200 OK will be returned.
Material invoice integration
For expense intregration the following endpoint should be used:
https://<hostname>.scalepoint.com/ecx/host/api/integration/v1/expense/materialsuppliersubmit
access token should be optiain with scope: material-supplier:write
Field $.payload.expense.items[].rewardPercent will override default value defined in HUB Property. Please omit this field in request if no override is needed.
Without any rewardPercent defined in items, reward calculation is based on $.payload.expense.subTotal property, so there is no need to provide subtotals for every item.
If there is at least one rewardPercent defined in items then reward is based on subtotals in each item $.payload.expense.items[].subTotal. Remember to provide all subtotals.
Required fields are:
$.payload.claim.idtaken fromrepair_updatedevent$.payload.expense.externalSupplier.relatedCraftsmanIdtaken fromrepair_updatedevent$.payload.expense.expenseType= "Invoice"$.payload.expense.invoiceType= "ExternalSupplier"
Optional fields are:
$.payload.service.orderNumber= "Order number of a service that the invoice is related to"
Request example
POST https://<hostname>.scalepoint.com/ecx/host/api/integration/v1/expense/materialsuppliersubmit
Authorization: Bearer <access_token>
Accept-charset: utf-8
Accept: application/json
Content-Type: application/json
{
"timestamp": "2021-01-28T08:21:35Z",
"payload": {
"claim": {
"id": "416BAE39-972A-47C7-A2B8-B0CB57D60AD3",
"policy": {
"insuranceCompany": {
"alias": "companyname"
}
}
},
"service": {
"orderNumber": "20200826-01-8"
},
"expense": {
"number": "invoice1/2021",
"invoiceIdentifier": {
"kid": "829378273182937189273"
},
"date": "2021-01-28T08:21:35Z",
"dueDate": "2021-02-04T08:21:35Z",
"expenseType": "Invoice",
"invoiceType": "ExternalSupplier",
"isDraft": false,
"issuer": {
"name": "Aage and Son",
"email": "mail@example.com",
"faxNumber": "+4512345678",
"phoneNumber": "+4512345679",
"address": {
"street": "Ingemansvej 9",
"postalCode": "1964",
"city": "Frederiksberg C",
"country": "DK"
},
"cvrNumber": "18476542",
"giro": "12581145",
"bankBranchNumber": "1111",
"accountNumber": "12345678"
},
"items": [
{
"title": "Brick",
"id1": "ITEM1_ID1",
"id2": "ITEM1_ID2",
"category": "Materials",
"unit": "Sum",
"quantity": 10,
"unitPrice": 10,
"subtotal": 100,
"vat": 25,
"rewardPercent": 5
},
{
"title": "Door",
"category": "Materials",
"unit": "Sum",
"quantity": 2,
"unitPrice": 50,
"subtotal": 100,
"vat": 25
}
],
"subtotal": 200,
"vat": 50,
"total": 250,
"description": "description",
"invoiceRemark": "Invoice remark",
"externalSupplier": {
"relatedCraftsmanId": "618A6DA6-0931-4765-A9E8-1B24A98A543F"
},
"files": [
{
"name": "damagedesc.txt",
"mimeType": "text/plain",
"size": 541,
"description": "Sent by claimant",
"content": "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gUGVsbGVudGVzcXVlIGRpYW0gbWF1cmlzLCBwZWxsZW50ZXNxdWUgc2VkIG1ldHVzIHF1aXMsIHBlbGxlbnRlc3F1ZSBzYWdpdHRpcyBvZGlvLiBNb3JiaSBsZW8gbmliaCwgbGFjaW5pYSBhdCBsb3JlbSB2aXRhZSwgZWxlaWZlbmQgc29kYWxlcyBlc3QuIFNlZCBhdCB0dXJwaXMgbGVvLiBGdXNjZSBwZWxsZW50ZXNxdWUgbG9yZW0gdmVsIGxlbyBsYW9yZWV0IG1vbGxpcy4gUGVsbGVudGVzcXVlIHZlbCBuaWJoIGZlbGlzLiBQZWxsZW50ZXNxdWUgdm9sdXRwYXQgaGVuZHJlcml0IHVybmEgdXQgc2VtcGVyLiBTZWQgaWQgcXVhbSByaG9uY3VzLCBpYWN1bGlzIGxlY3R1cyBldSwgZmlzc2ltIGxhY3VzLiBOdWxsYSBmYWNpbGlzaS4gRnVzY2UgbG9yZW0gZXJhdCwgdGVtcG9yIGluIG9yY2kgaWQsIHZlbmVuYXRpcyByaG9uY3VzIHF1YW0uIEludGVnZXIgbW9sbGlzIG9ybmFyZSBiaWJlbmR1bS4gVmVzdGlidWx1bSBub24gYWxpcXVldCBhcmN1Lg=="
}
]
}
}
}Last updated on