Ontwikkelaars
API’s voor voertuigdata. Gebouwd op 35 jaar autoinspecties.
Het B.U.S.-platform biedt API’s voor taxaties, conditierapporten en AI-gestuurde voertuigintelligentie. Open sandbox met testdata en OpenAPI-documentatie voor de REST-endpoints. Neem contact op, dan sturen we je inloggegevens. Begin binnen minuten met bouwen, niet na weken.
Begin in drie stappen
-
Bekijk wat er beschikbaar is
De API-catalogus toont de beschikbare endpoints met documentatie, schema’s en werkende voorbeelden.
-
Bouw in de sandbox
Open sandbox-omgeving met echte testdata. Neem contact op, dan sturen we je een gebruikersnaam, wachtwoord en API-sleutel om mee te testen. Het kost niets.
-
Ga naar productie
Als je er klaar voor bent, mail je support@bus.no met je bedrijfsgegevens, waarvoor je de API gaat gebruiken en het verwachte volume. Goedkeuring duurt twee werkdagen. Wij valideren de opzet en overhandigen de productiesleutels.
API-catalogus
GraphQL. Voorspelde gebreken voor een voertuig
Oscar Inspector, de snelste manier om te starten
Voorspelde gebreken en onderhoudsbehoeften op basis van merk, model en kilometerstand. Gebouwd op meer dan 20 miljoen echte inspecties. Eén query, één antwoord, en je hebt AI-gestuurde voertuigintelligentie in je product. Dit is de API waarmee de meeste partners beginnen. Gebruikt door verzekeraars voor risicobeoordeling, marktplaatsen voor het verrijken van advertenties, leasemaatschappijen voor onderhoud van het wagenpark en garagesystemen voor informatie vóór het bezoek.
PKK. Periodieke voertuigkeuring
Keuringsresultaten, foutcodes, historie en status van de herkeuring. De dataset dekt 75 % van de Noorse markt.
Test. Taxatie- en conditiedata
Schadebeoordelingen, reparatiekosten, prijzen van onderdelen en volledige conditierapporten. Gebruik het voor integratie met verkoopondersteuning, garantiebeoordeling, prijsmodellen of overal waar je gestructureerde data over de staat van een voertuig nodig hebt.
Bekijk alle methoden in de Test-APIKwaliteitsborging
Interne controle, afhandeling van afwijkingen, apparatuurcontrole en kalibraties. Relevant voor compliance en audit.
Meer API’s
De catalogus groeit.
Oscar Inspector API
AI-gestuurde foutvoorspellingen voor een voertuig. Dezelfde authenticatie als de Test-API: gebruik applicationId 5 wanneer je een token ophaalt met token_ApplyToken2. Oscar Inspector heeft een eigen endpoint en een eigen schema, los van de Test-API. De voorbeelden tonen de query; het antwoord hangt af van het voertuig.
Authenticatie
Elke aanroep stuurt twee headers: Authorization: Bearer <accessToken> en x-api-key: <apiKey>. De API-sleutel is een aparte, langlevende sleutel die je van ons krijgt. Sandbox-sleutels krijg je door contact op te nemen. Hier haal je tokens op en vernieuw je ze.
| Sandbox | https://test.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Tool |
|---|
De sandbox vereist inloggen. Neem contact op voor testinhoud.
| API-type | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1 |
| Productie | https://bus2.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1 |
Query token_ApplyToken2 Haalt een id-token, access-token en refresh-token op voor een gebruiker en een applicatie.
Parameters
username: String!
password: String!
apiKey: String!
applicationId: Int! Antwoord
idToken: String
accessToken: String
refreshToken: String Opmerkingen
- Oscar Inspector vereist applicationId 5. De Test-API gebruikt een andere applicationId.
- accessToken is 60 minuten geldig. refreshToken is 90 dagen geldig.
- Om te vernieuwen: gebruik token_RefreshToken met refreshToken. Roep token_ApplyToken2 niet opnieuw aan bij elke afloop.
- Is refreshToken verlopen, dan moet je een volledig nieuwe set ophalen met token_ApplyToken2.
Voorbeeld
query {
token_ApplyToken2(
username: ""
password: ""
apiKey: ""
applicationId: 5
) {
idToken
accessToken
refreshToken
}
} Voorbeeldantwoord
{
"data": {
"token_ApplyToken2": {
"idToken": "",
"accessToken": "",
"refreshToken": ""
}
}
} Query token_RefreshToken Vernieuwt de tokens met een refresh-token, zonder opnieuw in te loggen.
Parameters
apiKey: String!
applicationId: Int!
refreshToken: String! Antwoord
idToken: String
accessToken: String
refreshToken: String Opmerkingen
- accessToken is 60 minuten geldig. refreshToken is 90 dagen geldig.
- Is refreshToken verlopen, dan moet je een volledig nieuwe set ophalen met token_ApplyToken2.
Voorbeeld
query {
token_RefreshToken(
apiKey: "",
applicationId: 5,
refreshToken: ""
){
idToken
accessToken
refreshToken
}
} Voorbeeldantwoord
{
"data": {
"token_RefreshToken": {
"idToken": "",
"accessToken": "",
"refreshToken": ""
}
}
} Foutvoorspelling
Voorspelde fouten en onderhoudsbehoefte op basis van kenteken en kilometerstand.
| Sandbox | https://test.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.Tool/ |
|---|
De sandbox vereist inloggen. Neem contact op voor testinhoud.
| API-type | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1 |
| Productie | https://bus2.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1 |
Query busData_GetDefectPredictions Geeft voorspelde fouten voor een voertuig, met waarschijnlijkheid en uitleg per fout.
Parameters
requestId: String?
regNo: String
mileage: Int!
valuationId: Int?
inspectionId: Int?
language: String?
isMileageSuggestion: Boolean!
windowSize: Int!
refNo: String? Antwoord
result: DefectPredictionOutput Opmerkingen
- De requestId uit het antwoord wordt gebruikt als originalRequestId in busData_RecordUserFeedback.
Voorbeeld
query {
busData_GetDefectPredictions(
requestId: "8ef2a2d7-4373-4f93-b57e-d151a192edad"
regNo: "CF66983"
mileage: 50000
) {
requestId
noOfPredictions
defectPredictions {
checkpointTypeGroupId
checkpointTypeGroup
probability
}
errorCodes
}
} Voorbeeldantwoord
{
"data": {
"busData_GetDefectPredictions": {
"requestId": "8ef2a2d7-4373-4f93-b57e-d151a192edad",
"noOfPredictions": 10,
"defectPredictions": [
{
"checkpointTypeGroupId": 1061,
"checkpointTypeGroup": "Bremsetromler, bremseskiver: Trommel eller skive har for stor slitasje, med synlige-/for store riper eller sprekker, ikke tilstrekkelig festet eller brukket",
"probability": 11.320754716981131
}
],
"errorCodes": null
}
}
} Terugkoppeling
Geef aan of de voorspelling klopte en haal de beschikbare redenen op.
| Sandbox | https://test.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.Tool/ |
|---|
De sandbox vereist inloggen. Neem contact op voor testinhoud.
| API-type | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1 |
| Productie | https://bus2.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1 |
Query busData_GetUserFeedbackReasons Geeft de redenen die een gebruiker kan opgeven wanneer een voorspelling niet klopte.
Parameters
requestId: String? Antwoord
result: UserFeedbackReasonOutput Opmerkingen
- userFeedbackReasonId wordt gebruikt als waarde in userFeedbackReasons bij busData_RecordUserFeedback.
Voorbeeld
query {
busData_GetUserFeedbackReasons(requestId: "4c84c8db-3f1f-427c-b2ad-f00725f430b9") {
requestId
userFeedbackReasons {
userFeedbackReasonId
displayString
userFeedbackReasonType
}
errorCodes
}
} Voorbeeldantwoord
{
"data": {
"busData_GetUserFeedbackReasons": {
"requestId": "4c84c8db-3f1f-427c-b2ad-f00725f430b9",
"userFeedbackReasons": [
{
"userFeedbackReasonId": 2000,
"displayString": "Tidsbesparende",
"userFeedbackReasonType": 1
},
{
"userFeedbackReasonId": 2001,
"displayString": "Høy treffsikkerhet",
"userFeedbackReasonType": 1
}
],
"errorCodes": null
}
}
} Mutation busData_RecordUserFeedback Registreert terugkoppeling op een eerdere voorspelling.
Parameters
requestId: String?
originalRequestId: String?
isSatisfied: Boolean!
timeTakenForFeedback: Int!
userId: Int!
username: String?
organizationId: Int!
organizationName: String?
userFeedbackReasons: [Int]
time: DateTime? Antwoord
result: RecordUserFeedbackOutput Voorbeeld
mutation {
busData_RecordUserFeedback(
requestId: "1e692aa0-5a9b-400f-beef-7a53e27d26a2"
originalRequestId: "8ef2a2d7-4373-4f93-b57e-d151a192edad"
isSatisfied: true
organizationId: 1
organizationName: "unit 1"
timeTakenForFeedback: 3000
userId: 2
username: "Nuwan"
userFeedbackReasons: [2, 3]
) {
requestId
errorCodes
}
} Voorbeeldantwoord
{
"data": {
"busData_RecordUserFeedback": {
"requestId": "1e692aa0-5a9b-400f-beef-7a53e27d26a2",
"errorCodes": null
}
}
} Datamodellen
De typen die in parameters en antwoorden worden gebruikt.
DefectPredictionOutput
RequestId: String
NoOfPredictions: Int
DefectPredictions: [DefectPrediction]
MileageSuggestions: [Int]
ErrorCodes: [Int]
TimeElapsed: Decimal DefectPrediction
CheckpointTypeGroupId: Int
CheckpointTypeGroup: String?
CheckPointTypeGroupDescription: String?
Probability: Decimal
Explanation: String?
ConfidenceThreshold: Decimal
Function: String?
WindowSize: Int UserFeedbackReasonOutput
RequestId: String
UserFeedbackReasons: [UserFeedbackReason]
ErrorCodes: [Int] UserFeedbackReason
UserFeedbackReasonId: Int
DisplayString: String?
UserFeedbackReasonType: Int RecordUserFeedbackOutput
RequestId: String
ErrorCodes: [Int] API-referentie. Test, taxatie en conditierapport
Alle methoden in de Test-API, gegroepeerd per gebruiksdoel. Open een methode om de parameters, het antwoord en een voorbeeld te zien dat je kunt uitvoeren.
Authenticatie
Elke aanroep stuurt twee headers: Authorization: Bearer <accessToken> en x-api-key: <apiKey>. De API-sleutel is een aparte, langlevende sleutel die je van ons krijgt. Sandbox-sleutels krijg je door contact op te nemen. Hier haal je tokens op en vernieuw je ze.
| Sandbox | https://test.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Tool |
|---|
De sandbox vereist inloggen. Neem contact op voor testinhoud.
| API-type | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1 |
| Productie | https://bus2.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1 |
Query token_ApplyToken2 Haalt een id-token, access-token en refresh-token op voor een gebruiker en een applicatie.
Parameters
username: String!
password: String!
apiKey: String!
applicationId: Int! Antwoord
idToken: String
accessToken: String
refreshToken: String Opmerkingen
- accessToken is 60 minuten geldig. refreshToken is 90 dagen geldig.
- Om te vernieuwen: gebruik token_RefreshToken met refreshToken. Roep token_ApplyToken2 niet opnieuw aan bij elke afloop.
- Is refreshToken verlopen, dan moet je een volledig nieuwe set ophalen met token_ApplyToken2.
Voorbeeld
query {
token_ApplyToken2(
username: ""
password: ""
apiKey: ""
applicationId: 13
) {
idToken
accessToken
refreshToken
}
} Voorbeeldantwoord
{
"data": {
"token_ApplyToken2": {
"idToken": "",
"accessToken": "",
"refreshToken": ""
}
}
} Query token_RefreshToken Vernieuwt de tokens met een refresh-token, zonder opnieuw in te loggen.
Parameters
apiKey: String!
applicationId: Int!
refreshToken: String! Antwoord
idToken: String
accessToken: String
refreshToken: String Opmerkingen
- accessToken is 60 minuten geldig. refreshToken is 90 dagen geldig.
- Is refreshToken verlopen, dan moet je een volledig nieuwe set ophalen met token_ApplyToken2.
Voorbeeld
query {
token_RefreshToken(
apiKey: "",
applicationId: 13,
refreshToken: ""
){
idToken
accessToken
refreshToken
}
} Voorbeeldantwoord
{
"data": {
"token_RefreshToken": {
"idToken": "",
"accessToken": "",
"refreshToken": ""
}
}
} Taxaties
Maak, lees, werk bij en toon taxaties, met voertuiggegevens, leasegegevens en rapporten. De voorbeelden hieronder gebruiken kentekens en ID's die in de testomgeving bestaan. Neem contact op wanneer je testtoegang aanvraagt en je krijgt testgegevens die bij je account passen.
De sandbox vereist inloggen. Neem contact op voor testinhoud.
| API-type | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
| Productie | https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
Mutation Test_CreateTest Maakt een nieuwe taxatie aan voor een voertuig. Geeft de taxatie-id terug.
Parameters
vehicleDataModel: VehicleDataModel!
testDataModel: TestDataModel! Vereist
-
testTypeIds -
unitId -
regNo / vin
Antwoord
result: Int Voorbeeld
mutation{
test_CreateTest(testDataModel: {
testTypeIds: [ 3 ],
unitId: 1,
externalReferenceId: "454532",
mileage: 45000,
testAnnotations: ["Fleet"]
serviceData: [ {
mileage: 2000,
date: "2022-04-05"
},
{
mileage: 10000,
date: "2023-06-23"
}],
testComments: ["This is comment 1", "This is comment 2"],
testOrderedBy: "FirstName LastName"
},
vehicleDataModel: {
regNo: "",
vin: "YV1DZARCDH2231635",
trimLevel: "M Sport",
vehiclePackages: [ {
packageName: "Comfort package",
vehicleOptions: [ {
optionName: "Dragkrok, elektrisk",
includedItems: "Stabilitetsprogram släp\nVikter: totalvikt (kg): 3 500"
}]
}],
vehicleOptions: [ {
optionName: "Adaptiva LED strålkastare",
includedItems: "Kurvljus\nLED-detaljljus"
}]
}
)
} Voorbeeldantwoord
{
"data": {
"test_CreateTest": 54
}
} Mutation testData_CreateLeaseData Voegt leasedata toe aan een taxatie: producttype, aankoopprijs, contractreferentie en meer.
Parameters
testId: Int!
leaseDataModel: LeaseDataModel! Antwoord
result: Boolean Voorbeeld
mutation{
testData_CreateLeaseData(testId: 21, leaseDataModel: {
productType: "Full Service Leasing (FSL-SE)",
purchasePrice: 23.50,
quotationTemplate: "Release plus commercial",
repairMaintenance: "Included",
transportDate: "2025-01-21",
winterTyres: "Not Included",
contractReference: "777777"
}
)
} Voorbeeldantwoord
{
"data": {
"testData_CreateLeaseData": true
}
} Mutation testData_CreateLeaseUserData Voegt de leaseklant en contactpersonen toe aan een taxatie: wagenparkbeheerder, bestuurder en meer.
Parameters
testId: Int!
leaseUserDataModel: LeaseUserDataModel! Antwoord
result: Boolean Voorbeeld
mutation{
testData_CreateLeaseUserData(testId: 21, leaseUserDataModel: {
customerId: "500000",
customerName: "customer",
fleetManagerName: "fleet manager",
fleetManagerEmail: "fleetManager@test.com",
installationRecipientEmail: "installationRecipient@test.com",
kamName: "KAM Name",
kamEmail: "kam@test.com",
driverName: "driver",
driverPhone: "944998989",
driverEmail: "driver@test.com"
}
)
} Voorbeeldantwoord
{
"data": {
"testData_CreateLeaseUserData": true
}
} Query Test_GetTest Haalt een taxatie op met status, kilometerstand en onderhoudshistorie.
Parameters
testId: Int! Antwoord
result: TestDataModel Opmerkingen
- Gelokaliseerde tekstvelden zoals testStatus en namen van controlepunten worden teruggegeven in de cultuur van de aanroeper. De cultuur komt uit de culture-claim van het token, met terugval op Accept-Language. Het voorbeeld is vastgelegd met de Zweedse cultuur.
Voorbeeld
query{
test_GetTest(testId: 32685)
{
testId,
externalReferenceId,
mileage,
serviceData {
date,
mileage,
comment
},
unitId,
testTypeIds,
testStatus,
testComments
}
} Voorbeeldantwoord
{
"data": {
"test_GetTest": {
"testId": 59,
"externalReferenceId": "45678",
"mileage": 45000,
"serviceData": [
{
"date": "2022-04-04T18:30:00.000Z",
"mileage": 2000,
"comment": null
},
{
"date": "2023-06-22T18:30:00.000Z",
"mileage": 10000,
"comment": null
}
],
"unitId": 1,
"testTypeIds": [
2
],
"testStatus": "Test påbörjad",
"testComments": []
}
}
} Query Test_GetTestFiles Haalt de afbeeldingen en bestanden op die bij een taxatie horen.
Parameters
testId: Int! Antwoord
result: [TestFileModel] Voorbeeld
query{
test_GetTestFiles(testId: 32685)
{
fileUrl,
fileName,
testSectionId,
mediaId
}
} Voorbeeldantwoord
{
"data": {
"test_GetTestFiles": [
{
"fileUrl": "https://…/fil.jpg?sv=…&sig=…",
"fileName": "image (9).jpg",
"testSectionId": 6,
"mediaId": "CD......"
},
{
"fileUrl": "https://…/fil.jpg?sv=…&sig=…",
"fileName": "image (10).jpg",
"testSectionId": 6,
"mediaId": "CD......"
},
{
"fileUrl": "https://…/fil.jpg?sv=…&sig=…",
"fileName": "image (17).jpg",
"testSectionId": 1,
"mediaId": "CD......"
}
]
}
} Query TestData_GetVehicleData Haalt de voertuigdata op: kenteken, VIN, opties en pakketten.
Parameters
testId: Int! Antwoord
result: VehicleDataModel Voorbeeld
query{
testData_GetVehicleData(testId: 59)
{
regNo,
vin,
trimLevel,
vehicleOptions {
optionName,
includedItems,
isSelected
},
vehiclePackages {
packageName,
isSelected,
vehicleOptions {
optionName,
includedItems,
isSelected
}
}
color,
model,
make,
gearBox,
engine,
inspectionDueDate,
lastInspectedDate
}
} Voorbeeldantwoord
{
"data": {
"testData_GetVehicleData": {
"regNo": "YSA053",
"vin": "YV1DZARCDH2231635",
"trimLevel": "M Sport",
"vehicleOptions": [
{
"optionName": "Adaptiva LED strålkastare",
"includedItems": "Kurvljus\nLED-detaljljus",
"isSelected": false
}
],
"vehiclePackages": [
{
"packageName": "Comfort package",
"isSelected": false,
"vehicleOptions": [
{
"optionName": "Dragkrok, elektrisk",
"includedItems": "Stabilitetsprogram släp\nVikter: totalvikt (kg): 3 500",
"isSelected": false
}
]
}
],
"color": "Svart",
"model": "XC60",
"make": "Volvo",
"gearBox": "Automat",
"engine": "2.0 D3 D4204T9 (110 kW)",
"inspectionDueDate": "2027-07-30T22:00:00.000Z",
"lastInspectedDate": "2025-07-21T22:00:00.000Z"
}
}
} Query testData_GetLeaseData Haalt de leasedata voor een taxatie op.
Parameters
testId: Int! Antwoord
result: LeaseDataModel Voorbeeld
query{
testData_GetLeaseData(testId: 21) {
productType
purchasePrice
quotationTemplate
repairMaintenance
transportDate
winterTyres
}
} Voorbeeldantwoord
{
"data": {
"testData_GetLeaseData": {
"productType": null,
"purchasePrice": null,
"quotationTemplate": null,
"repairMaintenance": null,
"transportDate": null,
"winterTires": null
}
}
} Query testData_GetLeaseUserData Haalt de leaseklant en contactpersonen voor een taxatie op.
Parameters
testId: Int! Antwoord
result: LeaseUserDataModel Voorbeeld
query{
testData_GetLeaseUserData(testId: 21) {
customerId
customerName
fleetManagerName
fleetManagerEmail
installationRecipientEmail
kamName
kamEmail
driverName
driverPhone
driverEmail
}
} Voorbeeldantwoord
{
"data": {
"testData_GetLeaseUserData": {
"customerId": null,
"customerName": null,
"fleetManagerName": null,
"fleetManagerEmail": null,
"installationRecipientEmail": null,
"kamName": null,
"kamEmail": null,
"driverName": null,
"driverPhone": null,
"driverEmail": null
}
}
} Query Unit_GetAccessibleUnits Toont de units waartoe je toegang hebt.
Antwoord
result: [UnitModel] Voorbeeld
query{
unit_GetAccessibleUnits
{
unitId
unitName
}
} Voorbeeldantwoord
{
"data": {
"unit_GetAccessibleUnits": [
{
"unitId": 1,
"unitName": "Test unit"
}
]
}
} Query TestType_GetTestTypes Toont de taxatietypen die beschikbaar zijn voor een unit.
Parameters
unitId: Int!
vin: String Antwoord
result: [TestTypeModel] Voorbeeld
query{
testType_GetTestTypes(unitId: 1)
{
testTypeId,
testTypeName,
isActive
}
} Voorbeeldantwoord
{
"data": {
"testType_GetTestTypes": [
{
"testTypeId": 1,
"testTypeName": "Test med kostnader",
"isActive": true
},
{
"testTypeId": 2,
"testTypeName": "Test utan kostnader",
"isActive": true
},
{
"testTypeId": 3,
"testTypeName": "Värdering av onormal slitage",
"isActive": true
},
{
"testTypeId": 770,
"testTypeName": "Custom 1",
"isActive": false
}
]
}
} Mutation test_UpdateTest Werkt een bestaande taxatie bij.
Antwoord
result: TestDataModel Voorbeeld
mutation {
test_UpdateTest(testDataModel: {
testId: 625,
mileage: 60000
}) {
testId,
mileage
}
} Voorbeeldantwoord
SalesReport_CreateSalesReportFromSource Query Test_GetAllTests Een doorzoekbare, sorteerbare lijst van alle taxaties, met filters en paginering.
Parameters
searchTerm: String
sortBy: GridSort
filters: TestFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int? Antwoord
result: TestListModel Opmerkingen
- De pagina wordt gepagineerd met skip en take. De standaard take is 50 en de standaard skip is 0. Er is geen bovengrens.
- Sorteerbare velden: regno, vehicleMake, vehicleModel, vin, completedDate, createdDate, performedDate, performedBy, testTypes, isObdPerformed, testStatus, testAnnotations.
- searchTerm komt alleen overeen als de tekst begint met RegNo of TestAnnotations.
- timeZoneOffset wordt in minuten verstuurd en is het verschil tussen UTC-tijd en clienttijd (UTC − clienttijd). Is de Zweedse tijd +1 GMT, stuur dan -1 om de juiste dag te raken.
Voorbeeld
query {
test_GetAllTests(searchTerm: "YSA053") {
tests {
testId
regno
vehicleMake
vehicleModel
vin
createdDate
performedDate
completedDate
performedBy
testTypes
isObdPerformed
testStatus
testAnnotations
unitId
unitName
}
totalTests
}
} Query Test_GetActiveTests Hetzelfde als hierboven, maar alleen taxaties die in behandeling zijn.
Parameters
searchTerm: String
sortBy: GridSort
filters: TestFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int? Antwoord
result: TestListModel Opmerkingen
- De pagina wordt gepagineerd met skip en take. De standaard take is 50 en de standaard skip is 0. Er is geen bovengrens.
- Sorteerbare velden: regno, vehicleMake, vehicleModel, vin, completedDate, createdDate, performedDate, performedBy, testTypes, isObdPerformed, testStatus, testAnnotations.
- searchTerm komt alleen overeen als de tekst begint met RegNo of TestAnnotations.
- timeZoneOffset wordt in minuten verstuurd en is het verschil tussen UTC-tijd en clienttijd (UTC − clienttijd). Is de Zweedse tijd +1 GMT, stuur dan -1 om de juiste dag te raken.
Voorbeeld
query {
test_GetActiveTests(searchTerm: "YSA053") {
tests {
testId
regno
vehicleMake
vehicleModel
vin
createdDate
performedDate
completedDate
performedBy
testTypes
isObdPerformed
testStatus
testAnnotations
unitId
unitName
}
totalTests
}
} Query Test_GetTestReports Haalt de links naar de conditierapporten van een taxatie op, inclusief pdf.
Parameters
testId: Int! Vereist
-
int testId
Antwoord
result: [ReportModel] Voorbeeld
query {
test_GetTestReports(testId: 33081) {
testTypeId
testType
shortenedReportURL
shortenedPdfReportURL
}
} Voorbeeldantwoord
{
"data": {
"test_GetTestReports": [
{
"testTypeId": 2,
"testType": "Test utan kostnader",
"shortenedReportURL": "https://lnkt.bus.no/8049d5ll2"
"shortenedPdfReportURL": "https://lnkt.bus.no/41181Ruhpp"
}
]
}
} Query test_GetGeneralInfo Haalt algemene informatie over het voertuig op: sleutels, laadkabel, eerder gebruik en meer.
Parameters
testId: Int! Antwoord
result: GeneralInfoModel Opmerkingen
- Lees de huidige waarden voordat je bijwerkt. test_GetGeneralInfoMetaData geeft de vooraf gedefinieerde sleutelwaarden.
Voorbeeld
query {
test_GetGeneralInfo(testId: 46324) {
masterKeyCount
chargingCableCount
previousUseId
hasPreviousDamage
vehicleKeyTypes { key value }
chargingCableTypes { key value }
}
} Voorbeeldantwoord
{ "data": { "test_GetGeneralInfo": { "masterKeyCount": 2, "chargingCableCount": 1, "previousUseId": 3, "hasPreviousDamage": false, "vehicleKeyTypes": [ { "key": 1, "value": "Remote key" } ], "chargingCableTypes": [] } } } Mutation test_UpdateGeneralInfo Werkt de algemene informatie over het voertuig bij.
Parameters
testId: Int!
generalInfoModel: GeneralInfoModel! Antwoord
result: Boolean Opmerkingen
- Lezen, wijzigen, schrijven: stuur het volledige model. Lege lijsten voor vehicleKeyTypes of chargingCableTypes worden geweigerd; een lege lijst verwijdert de bestaande typen.
Voorbeeld
mutation {
test_UpdateGeneralInfo(testId: 46324, generalInfoModel: {
masterKeyCount: 2,
chargingCableCount: 1,
previousUseId: 3,
hasPreviousDamage: false,
vehicleKeyTypes: [{ key: 1, value: "Remote key" }],
chargingCableTypes: [{ key: 1, value: "Type 2" }]
})
} Voorbeeldantwoord
{
"data":
{
"test_UpdateGeneralInfo": true
}
} Verkooprapporten
Verkooprapporten op basis van de taxaties, met deellinks en afronding.
De sandbox vereist inloggen. Neem contact op voor testinhoud.
| API-type | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
| Productie | https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
Mutation SalesReport_CreateSalesReportFromSource Maakt een verkooprapport aan op basis van een bestaande taxatie of een voertuig.
Parameters
regNo: String!
testRunId: Int?
unitId: Int? Vereist
-
string regNo -
int testRunId or int unitId
Antwoord
result: Int Voorbeeld
mutation {
salesReport_CreateSalesReportFromSource(regNo: "ØSXXR01", unitId: 5147)
} Voorbeeldantwoord
{
"data": {
"salesReport_CreateSalesReportFromSource": 764
}
} Query SalesReport_GetSalesReportShareMetaData Haalt de deellinks voor het verkooprapport en het VDN-rapport op, plus de pdf-download.
Parameters
salesReportId: Int! Vereist
-
int salesReportId
Antwoord
result: SalesReportShareMetaDataModel Opmerkingen
- salesReportPdfDownloadSasUrl is alleen beschikbaar voor externe partners.
Voorbeeld
query {
salesReport_GetSalesReportShareMetaData(salesReportId: 764) {
shortenedSalesReportLinkURL
shortenedVDNReportLinkURL
shortenedSalesReportPdfURL
salesReportPdfDownloadSasUrl
}
} Voorbeeldantwoord
{
"data": {
"salesReport_GetSalesReportShareMetaData": {
"shortenedSalesReportLinkURL": "https://lnkt.bus.no/47430y13WA",
"shortenedVDNReportLinkURL": "https://lnkt.bus.no/47431z3f1_",
"shortenedSalesReportPdfURL": "https://lnkt.bus.no/47432iCS5k",
"salesReportPdfDownloadSasUrl": "https://…/fil.jpg?sv=…&sig=…"
}
}
} Query SalesReport_GetAllSalesReports Een doorzoekbare, sorteerbare lijst van alle verkooprapporten.
Parameters
searchTerm: String
sortBy: GridSort
filters: SalesReportFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int? Antwoord
result: SalesReportListModel Opmerkingen
- De pagina wordt gepagineerd met skip en take. De standaard take is 50 en de standaard skip is 0. Er is geen bovengrens.
- Sorteerbare velden: regno, vehicleMake, vehicleModel, vin, completedDate, salesReportStatus, createdDate, performedBy
- searchTerm komt alleen overeen als de tekst begint met RegNo.
- timeZoneOffset wordt in minuten verstuurd en is het verschil tussen UTC-tijd en clienttijd (UTC − clienttijd). Is de Zweedse tijd +1 GMT, stuur dan -1 om de juiste dag te raken.
Voorbeeld
query {
salesReport_GetAllSalesReports(searchTerm: "WBS99A") {
salesReports {
salesReportId
salesReportStatus
salesReportStatusId
regno
vehicleMake
vehicleModel
vin
createdDate
completedDate
}
totalSalesReports
}
} Query SalesReport_GetActiveSalesReports Hetzelfde als hierboven, maar alleen actieve verkooprapporten.
Parameters
searchTerm: String
sortBy: GridSort
filters: SalesReportFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int? Antwoord
result: SalesReportListModel Opmerkingen
- De pagina wordt gepagineerd met skip en take. De standaard take is 50 en de standaard skip is 0. Er is geen bovengrens.
- Sorteerbare velden: regno, vehicleMake, vehicleModel, vin, completedDate, salesReportStatus, createdDate, performedBy
- searchTerm komt alleen overeen als de tekst begint met RegNo.
- timeZoneOffset wordt in minuten verstuurd en is het verschil tussen UTC-tijd en clienttijd (UTC − clienttijd). Is de Zweedse tijd +1 GMT, stuur dan -1 om de juiste dag te raken.
Voorbeeld
query {
salesReport_GetActiveSalesReports(searchTerm: "WBS99A") {
salesReports {
salesReportId
salesReportStatus
salesReportStatusId
regno
vehicleMake
vehicleModel
vin
createdDate
completedDate
}
totalSalesReports
}
} Mutation SalesReport_UpdateSalesReport Werkt een verkooprapport bij.
Parameters
salesReportData: SalesReportDataModel! Vereist
-
salesReportData.SalesReportId -
salesReportData.TestId -
salesReportData.UnitId
Antwoord
result: SalesReportDataModel Voorbeeld
mutation UpdateSalesReport($salesReportData: SalesReportDataModelInput!) {
updatedSalesReport: salesReport_UpdateSalesReport(
salesReportData: $salesReportData
) {
testId
mileage
createdDate
completedDate
salesReportTypeIds
deviationNotes
hasBatteryReading
testStatusId
unitId
__typename
}
} Voorbeeldantwoord
{
"data": {
"updatedSalesReport": {
"testId": 45068,
"mileage": 12345,
"createdDate": "2026-07-08T07:55:42.303Z",
"completedDate": null,
"salesReportTypeIds": [
1,
2,
3
],
"deviationNotes": null,
"hasBatteryReading": false,
"testStatusId": 8,
"unitId": 5161,
"__typename": "SalesReportDataModel"
}
}
} Mutation salesReport_ConcludeSalesReport Rondt een verkooprapport af en verstuurt het per e-mail of sms.
Parameters
salesReportConcludeModel: SalesReportConcludeModel! Vereist
-
salesReportConcludeModel.salesReportId -
salesReportConcludeModel.sendSalesReportEmailSMSModel
Antwoord
result: Boolean Opmerkingen
- sendSalesReportEmailSMSModel is verplicht en de gegenereerde deellinks worden daarop opgeslagen. Lege lijsten voor e-mail, nummers en rapporttypen versturen niets. Op eenheid geconfigureerde ontvangers worden bij het afsluiten toegevoegd. Open afwijkingen blokkeren het afsluiten niet.
Voorbeeld
mutation {
salesReport_ConcludeSalesReport(salesReportConcludeModel: {
salesReportId: 3180,
sendSalesReportEmailSMSModel: {
salesReportId: 3180,
emails: [],
numbers: [],
salesReportTypes: []
}
})
} Voorbeeldantwoord
{
"data":
{
"salesReport_ConcludeSalesReport": true
}
} Mutation salesReport_AddSalesReportImages Voegt afbeeldingen toe aan een verkooprapport, met een optionele omslagafbeelding.
Parameters
salesReportId: Int!
images: [SalesReportImageInputModel]! Antwoord
result: [SalesReportImageResultModel] Voorbeeld
mutation {
salesReport_AddSalesReportImages (salesReportId: 3416,
images: [ {
isCover: false
fileName: "354.jpg"
url: "https://fastly.picsum.photos/id/471/536/354.jpg?hmac=ep1BMOqUf1L7RJA-pgAlrJFeXxAbxj7srUVwGoTiJGE"
}])
{
fileName
isSuccess
reason
}
} Gebreken en schade
Gebreken en schade die bij een taxatie zijn vastgelegd, met afbeeldingen.
De sandbox vereist inloggen. Neem contact op voor testinhoud.
| API-type | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
| Productie | https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
Query Defect_GetTestDefects Haalt de gebreken en schade op die bij een taxatie zijn vastgelegd.
Parameters
testId: Int! Antwoord
result: [TestDefectModel] Opmerkingen
- TotalCost is exclusief btw. De interface kan het bedrag inclusief btw tonen.
Voorbeeld
query{
defect_GetTestDefects(testId: 54)
{
testDefectId,
checkpoint {
key
value
}
checkpointComment {
key
value
}
commonCost,
workCost,
partsCost,
totalCost
}
} Voorbeeldantwoord
{
"data": {
"defect_GetTestDefects": [
{
"testDefectId": 3444,
"checkpoint": {
"key": 2,
"value": "Dokumentation utrustning - SW"
},
"checkpointComment": {
"key": 9,
"value": "testpunkten"
},
"commonCost": 100,
"workCost": 60,
"partsCost": 40,
"totalCost": 200
},
{
"checkpoint": {
"key": 5,
"value": "Registreringsskylt - SW"
},
"checkpointComment": {
"key": 6,
"value": "oläsbar"
},
"commonCost": 300,
"workCost": 40,
"partsCost": 30,
"totalCost": 370
}
]
}
} Query Defect_GetTestDefectFiles Haalt de afbeeldingen en bestanden op die aan de gebreken van een taxatie zijn gekoppeld.
Parameters
testId: Int! Antwoord
result: [TestDefectFileModel] Voorbeeld
query{
defect_GetTestDefectFiles(testId: 54)
{
testDefectId,
testDefectFiles
{
fileUrl,
fileName,
mediaId
}
}
} Voorbeeldantwoord
{
"data": {
"defect_GetTestDefectFiles": [
{
"testDefectId": 320,
"testDefectFiles": [
{
"fileUrl": https://dev.bus.no/busplatform3/RestAPIServers.FileServerCustom2/api/v1/File/GetFile?fileReference=CfDJ8EsheyHuiV5NuNJhGGxi8IXoncPhEgkimEBPt93Wv0WX_3ToA1zBeCaMvNsEJzD2-3CvE_hVeiyHpI4xg6ptP1jhDuKXHfBLQLcshyiaCEAJurCO5Grs5aCGN9RoQR38vX4jMsALbkHdcBWNhAaMKP1h7-I0l3pdRBmxOdrqYqdoQUyqExcUkS3z-vUsGTYqRH0 ,
"fileName": "pexels_mike_bird_100653.jpg",
"mediaId": "CD......"
},
{
"fileUrl": https://dev.bus.no/busplatform3/RestAPIServers.FileServerCustom2/api/v1/File/GetFile?fileReference=CfDJ8EsheyHuiV5NuNJhGGxi8IVhMC9lQU7CYN_0177q1-fn1HgYQJnGAMqkLl9hBQurMaT4Ej6W45btBdwW0z-QEMIupfHvwSbixIiNJInMS4g4PmtVpvGw0MYIoH-hS_PRgcwUV6dEE1HmSFcNkydDbAKzgueyxbwBMMFnV6y0TG4tW2JGvK-fV1mvWQu7xdHaXx8 ,
"fileName": "pexels_joshua_koller_757185.jpg",
"mediaId": "CD......"
}
]
},
{
"testDefectId": 321,
"testDefectFiles": []
}
]
}
} Mutation Defect_UpdateTestDefect Werkt een gebrek bij op een taxatie en op het bijbehorende verkooprapport.
Parameters
testId: Int!
defectFormData: TestDefectModel! Antwoord
result: TestDefectModel Voorbeeld
mutation updateTestDefect($testId: Int!, $defectFormData: TestDefectModelInput!) {
updatedDefect: defect_UpdateTestDefect(
testId: $testId
defectFormData: $defectFormData
) {
testDefectId
checkpointInstanceId
checkpointGroup {
key
value
__typename
}
checkpoint {
key
value
__typename
}
checkpointComment {
key
value
__typename
}
actionsList {
actionId
name
__typename
}
positionsList {
positionId
name
__typename
}
totalCost
isTaxIncluded
testDefectComment
salesReportDefectId
swedishStateReportLetterReferenceId
stateGradeId
__typename
}
} Voorbeeldantwoord
{
"data": {
"updatedDefect": {
"testDefectId": 14276,
"checkpointInstanceId": 285,
"checkpointGroup": {
"key": 1,
"value": "Identifikation",
"__typename": "KeyValueWithAdditionalItemOfNullableOfInt32"
},
"checkpoint": {
"key": 59,
"value": "Registreringsskylt",
"__typename": "KeyValueModel"
},
"checkpointComment": {
"key": 1,
"value": "Skyltfäste",
"__typename": "KeyValueModel"
},
"actionsList": [
{
"actionId": 6,
"name": "Kontrollera",
"__typename": "ActionModel"
}
],
"positionsList": [
{
"positionId": 2,
"name": "Bak",
"__typename": "PositionModel"
}
],
"totalCost": 66,
"isTaxIncluded": true,
"testDefectComment": "TEessserer",
"salesReportDefectId": null,
"swedishStateReportLetterReferenceId": null,
"stateGradeId": 3,
"__typename": "TestDefectModel"
}
}
} Werkorders
Werkorders en taken voor het garageproces.
De sandbox vereist inloggen. Neem contact op voor testinhoud.
| API-type | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
| Productie | https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
Mutation workOrder_CreateWorkOrder Maakt een werkorder aan voor een voertuig, met of zonder gekoppelde taxatie.
Parameters
regNo: String!
testRunId: Int?!
unitId: Int! Vereist
-
testRunId (optional for standalone work order)
Antwoord
result: Int Opmerkingen
- Met testRunId moet de taxatie zijn afgesloten en wordt er één taak per afwijking gemaakt. Zonder testRunId wordt een zelfstandige werkorder gemaakt.
Voorbeeld
mutation {
workOrder_CreateWorkOrder(regNo: "PHP526", testRunId: 45988, unitId: 5147)
} Voorbeeldantwoord
{
"data":
{
"workOrder_CreateWorkOrder": 1773
}
} Mutation workOrder_CreateWorkOrderJob Voegt een taak toe aan een werkorder.
Parameters
workOrderJobModel: WorkOrderJobModel! Vereist
-
workOrderJobModel (workOrderId and job details)
Antwoord
result: WorkOrderJobModel Voorbeeld
mutation {
workOrder_CreateWorkOrderJob(workOrderJobModel: {
workOrderId: 1773,
jobName: "Replace wiper blades",
comment: "Added by partner"
}) {
workOrderJobId
jobName
}
} Voorbeeldantwoord
{
"data":
{ "workOrder_CreateWorkOrderJob": {
"workOrderJobId": 28584, "jobName": "Replace wiper blades"
}
}
} Mutation workOrder_AddStandardJobsToWorkOrderCycle Voegt standaardtaken toe aan een werkorder.
Parameters
workOrderId: Int!
standardJobIds: [Int]! Antwoord
result: [WorkOrderJobModel] Voorbeeld
mutation {
workOrder_AddStandardJobsToWorkOrderCycle(workOrderId: 1773, standardJobIds: [101, 205]) {
workOrderJobId
jobName
}
} Voorbeeldantwoord
{
"data":
{ "workOrder_AddStandardJobsToWorkOrderCycle":
[ { "workOrderJobId": 28585, "jobName": "Standard service" } ]
}
} Query workOrder_GetWorkOrderJobList Haalt alle taken van een werkorder op.
Parameters
workOrderId: Int! Antwoord
result: WorkOrderJobListModel Opmerkingen
- workOrderJobStatus is een genest object. Gebruik de taak-ID's die je hier krijgt bij het instellen van de status.
Voorbeeld
query {
workOrder_GetWorkOrderJobList(workOrderId: 1773) {
count
workOrderJobs {
workOrderJobId
jobName
workOrderJobStatus {
workOrderJobStatusId
workOrderJobStatusName
}
testDefect {
testDefectId
}
}
}
} Voorbeeldantwoord
{
"data":
{ "workOrder_GetWorkOrderJobList":
{ "count": 2, "workOrderJobs": [
{ "workOrderJobId": 28581, "jobName": "Defect job", "workOrderJobStatus": { "workOrderJobStatusId": 3, "workOrderJobStatusName": "Done" }, "testDefect": { "testDefectId": 3444 } }
]
}
}
} Mutation workOrder_UpdateWorkOrderJobStatus Zet een nieuwe status op een of meer taken.
Parameters
workOrderId: Int!
workOrderJobIds: [Int]!
workOrderJobStatusId: Int! Antwoord
result: WorkOrderStatusUpdateResult Opmerkingen
- Done verschijnt als hersteld op het verkooprapport, Open als nog open afwijking. De status van de werkorder blijft synchroon.
Voorbeeld
mutation {
workOrder_UpdateWorkOrderJobStatus(
workOrderId: 1773,
workOrderJobIds: [28581, 28582],
workOrderJobStatusId: 3
) {
workOrderStatusId
workOrderStatusName
updatedJobs {
workOrderJobId
workOrderJobStatusId
workOrderJobStatusName
}
}
} Voorbeeldantwoord
{ "data": { "workOrder_UpdateWorkOrderJobStatus": { "workOrderStatusId": 2, "workOrderStatusName": "InProgress", "updatedJobs": [ { "workOrderJobId": 28581, "workOrderJobStatusId": 3, "workOrderJobStatusName": "Done" } ] } } } Query workOrder_GetStandardJobsForWorkOrder Toont de standaardtaken die aan een werkorder kunnen worden gekoppeld.
Parameters
workOrderId: Int! Antwoord
result: [StandardJobModel] Voorbeeld
query{
workOrder_GetStandardJobsForWorkOrder(
workOrderId: 1832)
{
standardJobId
jobName
cost
isTaxInclude
}
} Voorbeeldantwoord
{
"data": {
"workOrder_GetStandardJobsForWorkOrder": [
{
"standardJobId": 723,
"jobName": "Shenal standard - job",
"cost": 800,
"isTaxInclude": false
}
]
}
} Query workOrderSettings_GetStandardJobsListForUnit Toont de eigen standaardtaken van de unit, met kosten.
Parameters
unitId: Int! Antwoord
result: StandardJobsGridModel Voorbeeld
query{
workOrderSettings_GetStandardJobsListForUnit(unitId: 5208)
{
totalStandardJobs
standardJobs {
standardJobId
jobName
cost
}
}
} Voorbeeldantwoord
{
"data": {
"workOrderSettings_GetStandardJobsListForUnit": {
"totalStandardJobs": 6,
"standardJobs": [
{
"standardJobId": 775,
"jobName": "DT",
"cost": 434
},
{
"standardJobId": 737,
"jobName": "Group 2 only LT",
"cost": 0
},
{
"standardJobId": 736,
"jobName": "Group 1,2 only LT",
"cost": 0
},
{
"standardJobId": 734,
"jobName": "Group 2 only CT",
"cost": 0
},
{
"standardJobId": 732,
"jobName": "Group 1,2 CT",
"cost": 0
},
{
"standardJobId": 456,
"jobName": "Group 1,2,3",
"cost": 0
}
]
}
}
} Query workOrder_GetTestRunsForWorkOrderCreation Toont de testruns die in aanmerking komen om een werkorder voor een kenteken te worden.
Parameters
regNo: String!
unitId: Int! Antwoord
result: WorkOrderCreationTestRunListModel Voorbeeld
query{
workOrder_GetTestRunsForWorkOrderCreation(
regNo: "AOL449"
, unitId: 5147
)
{
isRegNoValid
items {
testId
testRunId
mileage
}
}
} Voorbeeldantwoord
{
"data": {
"workOrder_GetTestRunsForWorkOrderCreation": {
"isRegNoValid": true,
"items": [
{
"testId": 3456,
"testRunId": 46664,
"mileage": 45000
},
{
"testId": 3457,
"testRunId": 46663,
"mileage": 45000
},
{
"testId": 3458,
"testRunId": 39591,
"mileage": 45000
},
{
"testId": 3459,
"testRunId": 41191,
"mileage": 45000
},
{
"testId": 3460,
"testRunId": 41223,
"mileage": 66666
},
{
"testId": 3461,
"testRunId": 2358,
"mileage": 100001
},
{
"testId": 3462,
"testRunId": 39356,
"mileage": 1500
},
{
"testId": 3463,
"testRunId": 39363,
"mileage": 33000
},
{
"testId": 3464,
"testRunId": 39264,
"mileage": 45009
},
{
"testId": 3465,
"testRunId": 2887,
"mileage": 222222
}
]
}
}
} Query workOrder_GetAllWorkOrders Toont alle werkorders. Doorzoekbaar, sorteerbaar en gepagineerd.
Parameters
searchTerm: String
sortBy: GridSort
filters: WorkOrderFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int Antwoord
result: WorkOrderListModel Opmerkingen
- De pagina wordt gepagineerd met skip en take. De standaard take is 50 en de standaard skip is 0. Er is geen bovengrens.
- timeZoneOffset wordt in minuten verstuurd en is het verschil tussen UTC-tijd en clienttijd (UTC − clienttijd). Is de Zweedse tijd +1 GMT, stuur dan -1 om de juiste dag te raken.
Voorbeeld
query{
workOrder_GetAllWorkOrders(
searchTerm: "AOL449"
timeZoneOffset: 0
)
{
totalWorkOrders
workOrders
{
testId
workOrderId
vehicleMake
vehicleModel
}
}
}
} Voorbeeldantwoord
{
"data": {
"workOrder_GetAllWorkOrders": {
"totalWorkOrders": 8,
"workOrders": [
{
"testId": 47186,
"workOrderId": 1832,
"vehicleMake": "Ford",
"vehicleModel": "Transit Connect 230 LWB"
},
{
"testId": 45523,
"workOrderId": 1698,
"vehicleMake": "",
"vehicleModel": ""
},
{
"testId": 41141,
"workOrderId": 1419,
"vehicleMake": "Ford",
"vehicleModel": "Transit Connect 230 LWB"
},
{
"testId": 40793,
"workOrderId": 1376,
"vehicleMake": "Ford",
"vehicleModel": "Transit Connect 230 LWB"
},
{
"testId": 40709,
"workOrderId": 1362,
"vehicleMake": "Ford",
"vehicleModel": "Transit Connect 230 LWB"
},
{
"testId": 38984,
"workOrderId": 1016,
"vehicleMake": "Ford",
"vehicleModel": "Transit Connect 230 LWB"
},
{
"testId": 38976,
"workOrderId": 1015,
"vehicleMake": "Ford",
"vehicleModel": "Transit Connect 230 LWB"
},
{
"testId": 38904,
"workOrderId": 994,
"vehicleMake": "Ford",
"vehicleModel": "Transit Connect 230 LWB"
}
]
}
}
} Query workOrder_GetActiveWorkOrders Toont werkorders die nog niet zijn afgerond.
Parameters
searchTerm: String
sortBy: GridSort
filters: WorkOrderFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int Antwoord
result: WorkOrderListModel Opmerkingen
- De pagina wordt gepagineerd met skip en take. De standaard take is 50 en de standaard skip is 0. Er is geen bovengrens.
- timeZoneOffset wordt in minuten verstuurd en is het verschil tussen UTC-tijd en clienttijd (UTC − clienttijd). Is de Zweedse tijd +1 GMT, stuur dan -1 om de juiste dag te raken.
Voorbeeld
query{
workOrder_GetActiveWorkOrders(
searchTerm: "AOL449"
timeZoneOffset: 0
)
{
totalWorkOrders
workOrders
{
testId
workOrderId
vehicleMake
vehicleModel
}
}
}
} Voorbeeldantwoord
{
"data": {
"workOrder_GetActiveWorkOrders": {
"totalWorkOrders": 7,
"workOrders": [
{
"testId": 47186,
"workOrderId": 1832,
"vehicleMake": "Ford",
"vehicleModel": "Transit Connect 230 LWB"
},
{
"testId": 45523,
"workOrderId": 1698,
"vehicleMake": "",
"vehicleModel": ""
},
{
"testId": 41141,
"workOrderId": 1419,
"vehicleMake": "Ford",
"vehicleModel": "Transit Connect 230 LWB"
},
{
"testId": 40793,
"workOrderId": 1376,
"vehicleMake": "Ford",
"vehicleModel": "Transit Connect 230 LWB"
},
{
"testId": 40709,
"workOrderId": 1362,
"vehicleMake": "Ford",
"vehicleModel": "Transit Connect 230 LWB"
},
{
"testId": 38984,
"workOrderId": 1016,
"vehicleMake": "Ford",
"vehicleModel": "Transit Connect 230 LWB"
},
{
"testId": 38904,
"workOrderId": 994,
"vehicleMake": "Ford",
"vehicleModel": "Transit Connect 230 LWB"
}
]
}
}
} Mutation workOrder_ConcludeWorkOrder Rondt een werkorder af.
Parameters
workOrderId: Int! Antwoord
result: Boolean Voorbeeld
mutation{
workOrder_ConcludeWorkOrder(workOrderId: 1832)
} Voorbeeldantwoord
{
"data": {
"workOrder_ConcludeWorkOrder": true
}
} Mutation workOrder_ReopenWorkOrder Heropent een afgeronde werkorder.
Parameters
workOrderId: Int! Antwoord
result: Boolean Voorbeeld
mutation{
workOrder_ReopenWorkOrder(workOrderId: 1832)
} Voorbeeldantwoord
{
"data": {
"workOrder_ReopenWorkOrder": true
}
} Mutation workOrder_DeleteWorkOrder Verwijdert een werkorder.
Parameters
workOrderId: Int! Antwoord
result: Boolean Voorbeeld
mutation{
workOrder_DeleteWorkOrder(workOrderId: 1824)
} Voorbeeldantwoord
{
"data": {
"workOrder_DeleteWorkOrder": true
}
} Query workOrder_GetWorkOrder Haalt één werkorder op.
Parameters
workOrderId: Int! Antwoord
result: WorkOrderDataModel Voorbeeld
query{
workOrder_GetWorkOrder(workOrderId: 1832)
{
workOrderId
regNo
mileage
workOrderStatusId
}
} Voorbeeldantwoord
{
"data": {
"workOrder_GetWorkOrder": {
"workOrderId": 1832,
"regNo": "AOL449",
"mileage": 45000,
"workOrderStatusId": 5
}
}
} Bestanden
REST-endpoints voor het ophalen van afbeeldingen en documenten.
De sandbox vereist inloggen. Neem contact op voor testinhoud.
| API-type | REST |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/RestAPIServers.FileServer/api |
| Productie | https://bus2.bus.no/busplatform3/RestAPIServers.FileServer/api |
REST Media/GetMedia Henter selve filen fra en media-ID. Med useRedirect hentes filen direkte fra lagring, som er raskest.
Parameters
mediaId: String!
useRedirect: Boolean Antwoord
Actual file Voorbeeld
curl -X 'GET' \
'https://test.bus.no/BUSPlatform3/RestAPIServers.FileServer/api/Media/GetMedia?api-version=1&mediaId=xxxx' \
-H 'accept: */*' \
-H 'x-api-version: 1' \
-H 'x-access-token: eyJhb...' REST Media/GetMediaSas Henter en midlertidig nedlastingslenke (SAS) for en media-ID, med utløpstidspunkt.
Parameters
mediaId: String! Antwoord
sasUrl expiresOn Voorbeeld
curl -X 'GET' \
'https://test.bus.no/BUSPlatform3/RestAPIServers.FileServer/api/Media/GetMediaSas?api-version=1&mediaId=xxxx' \
-H 'accept: application/json' \
-H 'x-api-version: 1' \
-H 'x-access-token: eyJhb...' Realtime
Abonneer je op realtime gebeurtenissen wanneer een taxatie wordt afgesloten.
De sandbox vereist inloggen. Neem contact op voor testinhoud.
| API-type | GraphQL |
|---|---|
| Staging | wss://test.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.ExternalEndpoint1 |
| Productie | wss://bus2.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.ExternalEndpoint1 |
Subscription Test_OnTestConclude Meldt je in realtime wanneer een taxatie is afgerond.
Parameters
testId: Int! Antwoord
result: TestDataModel Opmerkingen
- Gelokaliseerde tekstvelden zoals testStatus en namen van controlepunten worden teruggegeven in de cultuur van de aanroeper. De cultuur komt uit de culture-claim van het token, met terugval op Accept-Language. Het voorbeeld is vastgelegd met de Zweedse cultuur.
Voorbeeld
subscription{
test_OnTestConclude(testId: 54)
{
testId,
mileage,
serviceData {
date,
mileage,
comment
},
unitId,
testTypeIds,
testStatus
}
} Voorbeeldantwoord
{
"data": {
"test_GetTest": {
"testId": 54,
"mileage": 45000,
"serviceData": [
{
"date": "2022-04-04T18:30:00.000Z",
"mileage": 2000,
"comment": null
},
{
"date": "2023-06-22T18:30:00.000Z",
"mileage": 10000,
"comment": null
}
],
"unitId": 1,
"testTypeIds": [
2
],
"testStatus": "Test färdigställd"
}
}
} Webhooks
Registreer een webhook en ontvang gebeurtenissen op je eigen URL. B.U.S. stuurt één JSON-POST per gebeurtenis en accepteert elke 2xx als bevestiging.
De sandbox vereist inloggen. Neem contact op voor testinhoud.
| API-type | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.InternalApp |
| Productie | https://bus2.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.InternalApp |
Mutation notification_SubscribeWebhook Registreert een webhook, algemeen of voor één eenheid. Geeft een secret terug dat B.U.S. in elke notificatiepayload plaatst, zodat je kunt bevestigen dat de notificatie van ons komt.
Parameters
webhookRegisterModel: WebhookRegisterModel (url, eventTypeId, unitId?) Vereist
-
url -
eventTypeId
Antwoord
secret: String Opmerkingen
- Elke levering is één JSON-POST. Bij 2xx geldt de melding als geleverd; elk ander antwoord wordt als fout gelogd en niet opnieuw verstuurd.
Voorbeeld
mutation{
notification_SubscribeWebhook(webhookRegisterModel: {
url: "https://example.com/webhook",
eventTypeId: 1,
unitId: null
}
){
secret
}
} Voorbeeldantwoord
{
"data": {
"notification_SubscribeWebhook": {
"secret": "…"
}
}
} Mutation notification_UnsubscribeWebhook Verwijdert een geregistreerde webhook.
Parameters
eventTypeId: Int!
unitId: Int? Antwoord
result: Boolean Voorbeeld
mutation{
notification_UnsubscribeWebhook(eventTypeId: 1, unitId: 5147)
} Webhook TestConcluded De melding die B.U.S. naar je webhook stuurt wanneer een taxatie is afgerond.
Antwoord
EventName, Data (TestDataModel), Secret Opmerkingen
- Elke levering is één JSON-POST. Bij 2xx geldt de melding als geleverd; elk ander antwoord wordt als fout gelogd en niet opnieuw verstuurd.
Voorbeeld
{
"EventName": "TestConcluded",
"Data": { "TestId": 34626, "UnitId": 5147, "Mileage": 3234, "…": "…" },
"Secret": "…"
} Webhook TestDeleted De melding die B.U.S. naar je webhook stuurt wanneer een taxatie wordt verwijderd.
Antwoord
EventName, Data (TestDataModel), Secret Opmerkingen
- Elke levering is één JSON-POST. Bij 2xx geldt de melding als geleverd; elk ander antwoord wordt als fout gelogd en niet opnieuw verstuurd.
Voorbeeld
{
"EventName": "TestDeleted",
"Data": {
"TestId": 34626,
"TestRunId": 34927,
"UnitId": 5147,
"UnitName": null,
"Mileage": 3234,
"ExpectedArrivalDate": null,
"ExpectedArrivalKM": null,
"RequestedCompletionDate": null,
"ParkingLocation": null,
"KeyLocation": null,
"IsMVASelected": false,
"TestStatus": "Test: Klar",
"PerformedUserId": null,
"PerformedBy": "",
"PerformedDate": "2025-10-24T09:36:46.217Z",
"TestTypeIds": [
2133
],
"IsPublic": false,
"TestTypeEmails": null,
"TestTypeDescription": null,
"ServiceData": [],
"TestPersonId": 163,
"TestComments": [],
"TestOrderedBy": null,
"TestCoverImage": null,
"ExternalReferenceId": null,
"TestAnnotations": [],
"TestStatusId": 3,
"IsDeleted": false,
"CreatedDate": "2025-10-24T09:36:46.217Z",
"HasValidBatteryReading": null,
"IsValidTestDrive": null,
"IsTestTypeVersionUpdated": null,
"LastUpdatedeDate": "2025-10-24T09:36:46.217Z",
"CompletedDate": "2025-10-24T09:39:37.877Z",
"TestDefects": null
},
"Secret": null
} Webhook WorkOrderConcluded De melding die B.U.S. naar je webhook stuurt wanneer een werkorder is afgerond.
Antwoord
EventName, Data (WorkOrderDataModel), Secret Opmerkingen
- Elke levering is één JSON-POST. Bij 2xx geldt de melding als geleverd; elk ander antwoord wordt als fout gelogd en niet opnieuw verstuurd.
Voorbeeld
{
"EventName": "WorkOrderConcluded",
"Data": {
"WorkOrderId": 1832,
"TestId": 47186,
"TestRunId": 46664,
"UnitId": 5147,
"IsShared": false,
"Mileage": 45000,
"JobsStartDate": null,
"JobsCompletionDate": null,
"WorkOrderStatusId": 6,
"IsDeleted": false,
"RegNo": "AOL449",
"IsSalesReportCreated": true,
"CreatedSalesReportId": 3416,
"IsCreatedFromTest": true,
"HasAllAccess": false
},
"Secret": null
} Datamodellen
De typen die in parameters en antwoorden worden gebruikt.
TestDataModel
UnitId: Int?
Mileage: Int?
ParkingLocation: String?
KeyLocation: String
TestStatus: String
TestTypeIds: [Int]
ServiceData: [ServiceMileageModel]
TestComments: [String]
ExternalReferenceId: String
TestAnnotations: [String]
testOrderedBy: String VehicleDataModel
RegNo: String
Vin: String
VehicleType: String
TrimLevel: String
VehicleOptions: [VehicleOptionModel]
VehiclePackages: [VehiclePackageModel]
Color: String
Model: String
Make: String
GearBox: String
Engine: String
ManufacturedYear: Int?
ManufacturedMonth: Int?
Co2Emissions: Decimal? ServiceMileageModel
Date: DateTime?
Mileage: Int?
Comment: String? TestDefectModel
TestDefectId: Int
Checkpoint: KeyValueModel
CheckpointComment: KeyValueModel
CommonCost: Decimal
WorkCost: Decimal
PartsCost: Decimal
TotalCost: Decimal TestTypeModel
TestTypeId: Int
TestTypeName: String TestFileModel
FileUrl: String
FileName: String
FileReference: String
mediaId: String
testSectionId: Int TestDefectFileModel
TestDefectFiles: [TestFileModel]
TestDefectId: Int KeyValueModel
Key: Int
Value: String VehicleOptionModel
OptionName: String
IncludedItems: String
IsSelected: Boolean? VehiclePackageModel
PackageName: String
VehicleOptions: [VehicleOptionModel]
IsSelected: Boolean? LeaseDataModel
PurchasePrice: Decimal?
ProductType: String
RepairMaintenance: String
WinterTires: String
TransportDate: DateTime?
QuotationTemplate: String LeaseUserDataModel
CustomerId: String
CustomerName: String
FleetManagerName: String
FleetManagerEmail: String
InstallationRecipientEmail: String
KamName: String
KamEmail: String
DriverName: String
DriverPhone: String
DriverEmail: String UnitModel
unitId: Int
unitName: String TestListModel
tests: [TestGridInformationModel]
totalTests: Int TestGridInformationModel
TestId: Int?
TestStatus: String
Regno: String
VehicleMake: String
VehicleModel: String
Vin: String
TestTypes: String
TestPersonId: Int?
IsActiveTest: Boolean
IsTestConcluded: Boolean
IsObdPerformed: Boolean
PerformedBy: String
PerformedDate: DateTime?
CreatedDate: DateTime
CompletedDate: DateTime?
TestAnnotations: String GridSort
Field: String
Dir: SortDirection SortDirection
enum SortDirection{
Asc
Desc
} TestFilterModel
OrderedBy: [KeyValueModel]
TestDate: KeyValueModel
TestType: [KeyValueModel]
Status: [KeyValueModel]
CompletedDate: KeyValueModel ReportModel
TestTypeId: Int
TestType: String
ReportURL: String
ShortenedReportURL: String
ShortenedPdfReportURL: String
DownloadUrl: String SalesReportFilterModel
CompletedDate: KeyValueModel
Status: [KeyValueModel]
PerformedBy: [KeyValueModel]
CreatedDate: KeyValueModel WorkOrderFilterModel
CreatedDate: KeyValueModel
CompletedDate: KeyValueModel
SharedStatus: KeyValueModel
Status: [KeyValueModel]
WorkOrderUnit: [KeyValueModel]
Unit: [Int] SalesReportListModel
SalesReports: [SalesReportGridInformationModel]
TotalSalesReports: Int SalesReportGridInformationModel
SalesReportId: Int
SalesReportStatus: String
SalesReportStatusId: Int?
Regno: String
VehicleMake: String
VehicleModel: String
Vin: String
CreatedDate: DateTime
CompletedDate: DateTime? WorkOrderJobModel
WorkOrderJobId
WorkOrderId
WorkOrderJobTypeId
JobName
WorkOrderJobStatus: WorkOrderJobStatusModel
IsShared
IsSentToSupplier
ExternalCost
RepairCost
Supplier
TestDefect
Comment
StandardJob
StartDate
CompletionDate WorkOrderJobListModel
Count
WorkOrderJobs: [WorkOrderJobModel] WorkOrderStatusUpdateResult
WorkOrderStatusId
WorkOrderStatusName
UpdatedJobs: [WorkOrderJobStatusModel] WorkOrderJobStatusModel
WorkOrderJobId
WorkOrderJobStatusId
IsSentToSupplier
WorkOrderJobStatusName GeneralInfoModel
MasterKeyCount
ChargingCableCount
PreviousUseId
HasPreviousDamage
IsLuggageCoverAvailable
IsTemperatureMeasured
TemperatureInside
TemperatureOutside
ACTestSkipReasonId
LocknutsAvailabilityStatusId
NextServiceDate
VehicleKeyTypes
ChargingCableTypes SalesReportConcludeModel
SalesReportId
SendSalesReportEmailSMSModel SendSalesReportEmailSMSModel
SalesReportId
SalesReportTypes
Emails
Numbers
Description
ShortenedSalesReportLinkURL
ShortenedVDNReportLinkURL
ShortenedSalesReportPdfURL
SalesReportPdfDownloadSasUrl StandardJobModel
StandardJobId: Int
StandardJobStatusId: Int
ParentStandardJobId: Int?
JobName: String
Cost: Decimal?
IsTaxInclude: Boolean
IsIncludedInCycle: Boolean
SupplierName: String WorkOrderCreationTestRunListModel
Items: [WorkOrderCreationTestRunModel] WorkOrderCreationTestRunModel
TestId: Int?
TestRunId: Int
WorkOrderId: Int?
TestTypeNames: [String]
TestRunStatuses: TestRunStatusesModel
Mileage: Int
Date: DateTime
UnitName: String TestRunStatusesModel
TestStatus: KeyValuePair<Int, String>?
WorkOrderStatus: KeyValuePair<Int, String>?
SalesReportStatus: KeyValuePair<Int, String>?
PreTestStatus: KeyValuePair<Int, String>? WorkOrderListModel
WorkOrders: [WorkOrderGridInformationModel]
TotalWorkOrders: Int WorkOrderGridInformationModel
TestId: Int
WorkOrderId: Int
WorkOrderStatus: String
Regno: String
VehicleMake: String
VehicleModel: String
Vin: String
CreatedDate: DateTime
CompletedDate: DateTime?
UnitId: Int
UnitName: String SalesReportImageResultModel
FileName: String
IsSuccess: Boolean
Reason: String
AttachmentOrder: Int? SalesReportImageInputModel
Url: String
FileName: String
IsCover: Boolean WorkOrderDataModel
WorkOrderId: Int
TestId: Int
TestRunId: Int?
UnitId: Int
Mileage: Int?
JobsStartDate: DateTime?
JobsCompletionDate: DateTime?
WorkOrderStatusId: Int?
RegNo: String? StandardJobsGridModel
StandardJobs: [StandardJobModel]
TotalStandardJobs: Int De B.U.S. Shop
Een integratie gebouwd die nuttig is voor garages of dealers? Maak hem beschikbaar in de B.U.S. Shop, de marktplaats waar B.U.S.-klanten integraties vinden en activeren. Je integratie bereikt drie van de vier garages in Noorwegen, zonder eigen verkooporganisatie.
Technisch
| Authenticatie | Bearer-token. Sandbox-inloggegevens op aanvraag, productie na goedkeuring. |
|---|---|
| Formaat | GraphQL. |
| Snelheidslimieten | Onbeperkt in sandbox. Vandaag geen vaste limiet in productie. Bij misbruik kan het account worden geblokkeerd en kan de dienst antwoorden met 429 (Too Many Requests). |
| Webhooks | Realtime gebeurtenissen. Nieuwe inspectie, bijgewerkte taxatie, statuswijziging. Kies op welke gebeurtenissen je je abonneert. |
| Wijzigingen | Wij introduceren geen breekbare wijzigingen. Nieuwe behoeften worden gedekt door nieuwe methoden, en bestaande methoden en velden worden niet gewijzigd zolang ze in gebruik zijn. Nieuwe methoden en optionele velden kunnen gaandeweg bijkomen. Wijzigingen worden per e-mail aan het technische contact gemeld. |
| Schema | Introspectie staat aan. Je kunt het volledige schema ophalen met de introspectiequery op het endpoint, of het lezen in de GraphQL-sandbox. Elke API heeft een eigen schema: de Test-API en Oscar Inspector zijn aparte endpoints. Het schema wordt tijdens de build gegenereerd en loopt dus altijd synchroon met de dienst. |
Veelgestelde vragen
Welke talen/SDK’s worden ondersteund?
Gebaseerd op GraphQL. Werkt met elke taal die HTTP-verzoeken kan versturen. Kies zelf welke velden je terugkrijgt.
Wat kost het?
De sandbox is gratis. De prijs voor productietoegang hangt af van het gebruik.
Klaar om te bouwen?
Bekijk de API-catalogus, of praat met een ontwikkelaar bij B.U.S.