Entwickler
Fahrzeugdaten-APIs. Entstanden aus 35 Jahren Fahrzeuginspektion.
Die B.U.S. Plattform stellt APIs für Fahrzeugbewertungen, Zustandsberichte und KI-gestützte Fahrzeugintelligenz bereit. Offene Sandbox mit Testdaten und OpenAPI-Dokumentation für die REST-Endpunkte. Kontaktieren Sie uns, wir senden Ihnen die Zugangsdaten. Legen Sie in Minuten los, nicht in Wochen.
In drei Schritten starten
-
Verfügbares entdecken
Der API-Katalog zeigt die verfügbaren Endpunkte mit Dokumentation, Schemas und funktionierenden Beispielen.
-
In der Sandbox entwickeln
Offene Sandbox-Umgebung mit echten Testdaten. Kontaktieren Sie uns, wir senden Ihnen Benutzername, Passwort und API-Schlüssel zum Testen. Das kostet nichts.
-
In die Produktion gehen
Sobald Sie bereit sind, schreiben Sie an support@bus.no mit Ihren Unternehmensangaben, dem geplanten Einsatzzweck der API und dem erwarteten Volumen. Die Freigabe dauert zwei Werktage. Wir prüfen das Setup und übergeben Ihnen die Produktionsschlüssel.
API-Katalog
GraphQL. Prognostizierte Mängel für ein Fahrzeug
Oscar Inspector, der schnellste Einstieg
Prognostizierte Mängel und Wartungsbedarf auf Basis von Marke, Modell und Laufleistung. Aufgebaut auf über 20 Millionen echten Inspektionen. Eine Abfrage, eine Antwort, und Sie haben KI-gestützte Fahrzeugintelligenz in Ihrem Produkt. Diese API ist der Startpunkt der meisten Partner. Genutzt von Versicherern zur Risikobewertung, von Marktplätzen zur Anreicherung von Inseraten, von Leasinggesellschaften für die Flottenwartung und von Werkstattsystemen für Informationen vor dem Werkstatttermin.
PKK. Periodische Fahrzeugprüfung
Prüfergebnisse, Fehlercodes, Historie und Nachprüfungsstatus. Die Datenbasis deckt 75 % des norwegischen Marktes ab.
Test. Bewertungs- und Zustandsdaten
Schadensbewertungen, Reparaturkosten, Ersatzteilpreise und vollständige Zustandsberichte. Nutzen Sie sie für die Anbindung von Verkaufsunterstützung, für Garantiebewertungen, Preismodelle oder überall dort, wo Sie strukturierte Fahrzeugzustandsdaten benötigen.
Alle Methoden der Test API ansehenQualitätssicherung
Interne Kontrolle, Abweichungsbearbeitung, Gerätekontrolle und Kalibrierungen. Relevant für Compliance und Audits.
Weitere APIs
Der Katalog wächst.
Oscar Inspector API
KI-gestützte Fehlerprognosen für ein Fahrzeug. Dieselbe Authentifizierung wie bei der Test-API: Verwenden Sie applicationId 5, wenn Sie ein Token mit token_ApplyToken2 abrufen. Oscar Inspector hat einen eigenen Endpunkt und ein eigenes Schema, getrennt von der Test-API. Die Beispiele zeigen die Abfrage; die Antwort hängt vom Fahrzeug ab.
Authentifizierung
Jeder Aufruf sendet zwei Header: Authorization: Bearer <accessToken> und x-api-key: <apiKey>. Der API-Schlüssel ist ein eigener, langlebiger Schlüssel, den Sie von uns erhalten. Sandbox-Schlüssel erhalten Sie auf Anfrage. Hier rufen Sie Tokens ab und erneuern sie.
| Sandbox | https://test.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Tool |
|---|
Die Sandbox erfordert eine Anmeldung. Kontaktieren Sie uns, um Testinhalte zu erhalten.
| API-Typ | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1 |
| Produktion | https://bus2.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1 |
Query token_ApplyToken2 Liefert ein ID-Token, ein Zugriffstoken und ein Refresh-Token für einen Benutzer und eine Anwendung.
Parameter
username: String!
password: String!
apiKey: String!
applicationId: Int! Antwort
idToken: String
accessToken: String
refreshToken: String Hinweise
- Oscar Inspector erfordert applicationId 5. Die Test-API verwendet eine andere applicationId.
- accessToken ist 60 Minuten gültig. refreshToken ist 90 Tage gültig.
- Zum Erneuern: Verwenden Sie token_RefreshToken mit refreshToken. Rufen Sie token_ApplyToken2 nicht bei jedem Ablauf erneut auf.
- Ist refreshToken abgelaufen, müssen Sie einen ganz neuen Satz mit token_ApplyToken2 abrufen.
Beispiel
query {
token_ApplyToken2(
username: ""
password: ""
apiKey: ""
applicationId: 5
) {
idToken
accessToken
refreshToken
}
} Beispielantwort
{
"data": {
"token_ApplyToken2": {
"idToken": "",
"accessToken": "",
"refreshToken": ""
}
}
} Query token_RefreshToken Erneuert die Tokens mit einem Refresh-Token, ohne sich erneut anzumelden.
Parameter
apiKey: String!
applicationId: Int!
refreshToken: String! Antwort
idToken: String
accessToken: String
refreshToken: String Hinweise
- accessToken ist 60 Minuten gültig. refreshToken ist 90 Tage gültig.
- Ist refreshToken abgelaufen, müssen Sie einen ganz neuen Satz mit token_ApplyToken2 abrufen.
Beispiel
query {
token_RefreshToken(
apiKey: "",
applicationId: 5,
refreshToken: ""
){
idToken
accessToken
refreshToken
}
} Beispielantwort
{
"data": {
"token_RefreshToken": {
"idToken": "",
"accessToken": "",
"refreshToken": ""
}
}
} Fehlerprognose
Prognostizierte Fehler und Wartungsbedarf auf Basis von Kennzeichen und Kilometerstand.
| Sandbox | https://test.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.Tool/ |
|---|
Die Sandbox erfordert eine Anmeldung. Kontaktieren Sie uns, um Testinhalte zu erhalten.
| API-Typ | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1 |
| Produktion | https://bus2.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1 |
Query busData_GetDefectPredictions Liefert prognostizierte Fehler für ein Fahrzeug, mit Wahrscheinlichkeit und Erklärung je Fehler.
Parameter
requestId: String?
regNo: String
mileage: Int!
valuationId: Int?
inspectionId: Int?
language: String?
isMileageSuggestion: Boolean!
windowSize: Int!
refNo: String? Antwort
result: DefectPredictionOutput Hinweise
- Die requestId aus der Antwort wird als originalRequestId in busData_RecordUserFeedback verwendet.
Beispiel
query {
busData_GetDefectPredictions(
requestId: "8ef2a2d7-4373-4f93-b57e-d151a192edad"
regNo: "CF66983"
mileage: 50000
) {
requestId
noOfPredictions
defectPredictions {
checkpointTypeGroupId
checkpointTypeGroup
probability
}
errorCodes
}
} Beispielantwort
{
"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
}
}
} Rückmeldung
Geben Sie an, ob die Prognose zutraf, und rufen Sie die möglichen Gründe ab.
| Sandbox | https://test.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.Tool/ |
|---|
Die Sandbox erfordert eine Anmeldung. Kontaktieren Sie uns, um Testinhalte zu erhalten.
| API-Typ | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1 |
| Produktion | https://bus2.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1 |
Query busData_GetUserFeedbackReasons Listet die Gründe auf, die ein Benutzer angeben kann, wenn eine Prognose nicht zutraf.
Parameter
requestId: String? Antwort
result: UserFeedbackReasonOutput Hinweise
- userFeedbackReasonId wird als Wert in userFeedbackReasons bei busData_RecordUserFeedback verwendet.
Beispiel
query {
busData_GetUserFeedbackReasons(requestId: "4c84c8db-3f1f-427c-b2ad-f00725f430b9") {
requestId
userFeedbackReasons {
userFeedbackReasonId
displayString
userFeedbackReasonType
}
errorCodes
}
} Beispielantwort
{
"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 Erfasst eine Rückmeldung zu einer früheren Prognose.
Parameter
requestId: String?
originalRequestId: String?
isSatisfied: Boolean!
timeTakenForFeedback: Int!
userId: Int!
username: String?
organizationId: Int!
organizationName: String?
userFeedbackReasons: [Int]
time: DateTime? Antwort
result: RecordUserFeedbackOutput Beispiel
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
}
} Beispielantwort
{
"data": {
"busData_RecordUserFeedback": {
"requestId": "1e692aa0-5a9b-400f-beef-7a53e27d26a2",
"errorCodes": null
}
}
} Datenmodelle
Die in Parametern und Antworten verwendeten Typen.
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-Referenz. Test, Bewertung und Zustandsbericht
Alle Methoden der Test API, nach Verwendung gruppiert. Öffnen Sie eine Methode, um ihre Parameter, ihre Antwort und ein Beispiel zum Ausführen zu sehen.
Authentifizierung
Jeder Aufruf sendet zwei Header: Authorization: Bearer <accessToken> und x-api-key: <apiKey>. Der API-Schlüssel ist ein eigener, langlebiger Schlüssel, den Sie von uns erhalten. Sandbox-Schlüssel erhalten Sie auf Anfrage. Hier rufen Sie Tokens ab und erneuern sie.
| Sandbox | https://test.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Tool |
|---|
Die Sandbox erfordert eine Anmeldung. Kontaktieren Sie uns, um Testinhalte zu erhalten.
| API-Typ | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1 |
| Produktion | https://bus2.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1 |
Query token_ApplyToken2 Liefert ein ID-Token, ein Zugriffstoken und ein Refresh-Token für einen Benutzer und eine Anwendung.
Parameter
username: String!
password: String!
apiKey: String!
applicationId: Int! Antwort
idToken: String
accessToken: String
refreshToken: String Hinweise
- accessToken ist 60 Minuten gültig. refreshToken ist 90 Tage gültig.
- Zum Erneuern: Verwenden Sie token_RefreshToken mit refreshToken. Rufen Sie token_ApplyToken2 nicht bei jedem Ablauf erneut auf.
- Ist refreshToken abgelaufen, müssen Sie einen ganz neuen Satz mit token_ApplyToken2 abrufen.
Beispiel
query {
token_ApplyToken2(
username: ""
password: ""
apiKey: ""
applicationId: 13
) {
idToken
accessToken
refreshToken
}
} Beispielantwort
{
"data": {
"token_ApplyToken2": {
"idToken": "",
"accessToken": "",
"refreshToken": ""
}
}
} Query token_RefreshToken Erneuert die Tokens mit einem Refresh-Token, ohne sich erneut anzumelden.
Parameter
apiKey: String!
applicationId: Int!
refreshToken: String! Antwort
idToken: String
accessToken: String
refreshToken: String Hinweise
- accessToken ist 60 Minuten gültig. refreshToken ist 90 Tage gültig.
- Ist refreshToken abgelaufen, müssen Sie einen ganz neuen Satz mit token_ApplyToken2 abrufen.
Beispiel
query {
token_RefreshToken(
apiKey: "",
applicationId: 13,
refreshToken: ""
){
idToken
accessToken
refreshToken
}
} Beispielantwort
{
"data": {
"token_RefreshToken": {
"idToken": "",
"accessToken": "",
"refreshToken": ""
}
}
} Bewertungen
Bewertungen erstellen, lesen, aktualisieren und auflisten, mit Fahrzeugdaten, Leasingdaten und Berichten. Die Beispiele unten verwenden Kennzeichen und IDs aus der Testumgebung. Wenn Sie den Testzugang anfordern und uns kontaktieren, erhalten Sie Testdaten, die zu Ihrem Konto passen.
Die Sandbox erfordert eine Anmeldung. Kontaktieren Sie uns, um Testinhalte zu erhalten.
| API-Typ | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
| Produktion | https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
Mutation Test_CreateTest Erstellt eine neue Bewertung für ein Fahrzeug. Gibt die Bewertungs-ID zurück.
Parameter
vehicleDataModel: VehicleDataModel!
testDataModel: TestDataModel! Erforderlich
-
testTypeIds -
unitId -
regNo / vin
Antwort
result: Int Beispiel
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"
}]
}
)
} Beispielantwort
{
"data": {
"test_CreateTest": 54
}
} Mutation testData_CreateLeaseData Fügt einer Bewertung Leasingdaten hinzu: Produkttyp, Kaufpreis, Vertragsreferenz und mehr.
Parameter
testId: Int!
leaseDataModel: LeaseDataModel! Antwort
result: Boolean Beispiel
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"
}
)
} Beispielantwort
{
"data": {
"testData_CreateLeaseData": true
}
} Mutation testData_CreateLeaseUserData Fügt einer Bewertung den Leasingkunden und die Kontakte hinzu: Flottenmanager, Fahrer und mehr.
Parameter
testId: Int!
leaseUserDataModel: LeaseUserDataModel! Antwort
result: Boolean Beispiel
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"
}
)
} Beispielantwort
{
"data": {
"testData_CreateLeaseUserData": true
}
} Query Test_GetTest Liefert eine Bewertung mit Status, Laufleistung und Servicehistorie.
Parameter
testId: Int! Antwort
result: TestDataModel Hinweise
- Lokalisierte Textfelder wie testStatus und Prüfpunktnamen werden in der Kultur des Aufrufers zurückgegeben. Die Kultur stammt aus dem culture-Claim des Tokens, mit Rückfall auf Accept-Language. Das Beispiel wurde mit schwedischer Kultur erfasst.
Beispiel
query{
test_GetTest(testId: 32685)
{
testId,
externalReferenceId,
mileage,
serviceData {
date,
mileage,
comment
},
unitId,
testTypeIds,
testStatus,
testComments
}
} Beispielantwort
{
"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 Liefert die Bilder und Dateien, die zu einer Bewertung gehören.
Parameter
testId: Int! Antwort
result: [TestFileModel] Beispiel
query{
test_GetTestFiles(testId: 32685)
{
fileUrl,
fileName,
testSectionId,
mediaId
}
} Beispielantwort
{
"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 Liefert die Fahrzeugdaten: Kennzeichen, VIN, Optionen und Pakete.
Parameter
testId: Int! Antwort
result: VehicleDataModel Beispiel
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
}
} Beispielantwort
{
"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 Liefert die Leasingdaten einer Bewertung.
Parameter
testId: Int! Antwort
result: LeaseDataModel Beispiel
query{
testData_GetLeaseData(testId: 21) {
productType
purchasePrice
quotationTemplate
repairMaintenance
transportDate
winterTyres
}
} Beispielantwort
{
"data": {
"testData_GetLeaseData": {
"productType": null,
"purchasePrice": null,
"quotationTemplate": null,
"repairMaintenance": null,
"transportDate": null,
"winterTires": null
}
}
} Query testData_GetLeaseUserData Liefert den Leasingkunden und die Kontakte einer Bewertung.
Parameter
testId: Int! Antwort
result: LeaseUserDataModel Beispiel
query{
testData_GetLeaseUserData(testId: 21) {
customerId
customerName
fleetManagerName
fleetManagerEmail
installationRecipientEmail
kamName
kamEmail
driverName
driverPhone
driverEmail
}
} Beispielantwort
{
"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 Listet die Einheiten auf, auf die Sie Zugriff haben.
Antwort
result: [UnitModel] Beispiel
query{
unit_GetAccessibleUnits
{
unitId
unitName
}
} Beispielantwort
{
"data": {
"unit_GetAccessibleUnits": [
{
"unitId": 1,
"unitName": "Test unit"
}
]
}
} Query TestType_GetTestTypes Listet die für eine Einheit verfügbaren Bewertungstypen auf.
Parameter
unitId: Int!
vin: String Antwort
result: [TestTypeModel] Beispiel
query{
testType_GetTestTypes(unitId: 1)
{
testTypeId,
testTypeName,
isActive
}
} Beispielantwort
{
"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 Aktualisiert eine bestehende Bewertung.
Antwort
result: TestDataModel Beispiel
mutation {
test_UpdateTest(testDataModel: {
testId: 625,
mileage: 60000
}) {
testId,
mileage
}
} Beispielantwort
SalesReport_CreateSalesReportFromSource Query Test_GetAllTests Eine durchsuchbare, sortierbare Liste aller Bewertungen, mit Filtern und Seitennavigation.
Parameter
searchTerm: String
sortBy: GridSort
filters: TestFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int? Antwort
result: TestListModel Hinweise
- Die Seite wird mit skip und take paginiert. Der Standardwert für take ist 50, für skip 0. Es gibt keine Obergrenze.
- Sortierbare Felder: regno, vehicleMake, vehicleModel, vin, completedDate, createdDate, performedDate, performedBy, testTypes, isObdPerformed, testStatus, testAnnotations.
- searchTerm trifft nur, wenn der Text mit RegNo oder TestAnnotations beginnt.
- timeZoneOffset wird in Minuten übergeben und ist die Differenz zwischen UTC-Zeit und Clientzeit (UTC − Clientzeit). Ist die schwedische Zeit +1 GMT, senden Sie -1, um den richtigen Tag zu treffen.
Beispiel
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 Wie oben, aber nur laufende Bewertungen.
Parameter
searchTerm: String
sortBy: GridSort
filters: TestFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int? Antwort
result: TestListModel Hinweise
- Die Seite wird mit skip und take paginiert. Der Standardwert für take ist 50, für skip 0. Es gibt keine Obergrenze.
- Sortierbare Felder: regno, vehicleMake, vehicleModel, vin, completedDate, createdDate, performedDate, performedBy, testTypes, isObdPerformed, testStatus, testAnnotations.
- searchTerm trifft nur, wenn der Text mit RegNo oder TestAnnotations beginnt.
- timeZoneOffset wird in Minuten übergeben und ist die Differenz zwischen UTC-Zeit und Clientzeit (UTC − Clientzeit). Ist die schwedische Zeit +1 GMT, senden Sie -1, um den richtigen Tag zu treffen.
Beispiel
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 Liefert die Links zu den Zustandsberichten einer Bewertung, einschließlich PDF.
Parameter
testId: Int! Erforderlich
-
int testId
Antwort
result: [ReportModel] Beispiel
query {
test_GetTestReports(testId: 33081) {
testTypeId
testType
shortenedReportURL
shortenedPdfReportURL
}
} Beispielantwort
{
"data": {
"test_GetTestReports": [
{
"testTypeId": 2,
"testType": "Test utan kostnader",
"shortenedReportURL": "https://lnkt.bus.no/8049d5ll2"
"shortenedPdfReportURL": "https://lnkt.bus.no/41181Ruhpp"
}
]
}
} Query test_GetGeneralInfo Liefert allgemeine Informationen zum Fahrzeug: Schlüssel, Ladekabel, Vornutzung und mehr.
Parameter
testId: Int! Antwort
result: GeneralInfoModel Hinweise
- Lesen Sie die aktuellen Werte, bevor Sie aktualisieren. test_GetGeneralInfoMetaData liefert die vordefinierten Schlüsselwerte.
Beispiel
query {
test_GetGeneralInfo(testId: 46324) {
masterKeyCount
chargingCableCount
previousUseId
hasPreviousDamage
vehicleKeyTypes { key value }
chargingCableTypes { key value }
}
} Beispielantwort
{ "data": { "test_GetGeneralInfo": { "masterKeyCount": 2, "chargingCableCount": 1, "previousUseId": 3, "hasPreviousDamage": false, "vehicleKeyTypes": [ { "key": 1, "value": "Remote key" } ], "chargingCableTypes": [] } } } Mutation test_UpdateGeneralInfo Aktualisiert die allgemeinen Informationen zum Fahrzeug.
Parameter
testId: Int!
generalInfoModel: GeneralInfoModel! Antwort
result: Boolean Hinweise
- Lesen, ändern, schreiben: Senden Sie das vollständige Modell. Leere Listen für vehicleKeyTypes oder chargingCableTypes werden abgelehnt; eine leere Liste löscht die vorhandenen Typen.
Beispiel
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" }]
})
} Beispielantwort
{
"data":
{
"test_UpdateGeneralInfo": true
}
} Verkaufsberichte
Verkaufsberichte auf Basis der Bewertungen, mit Freigabelinks und Abschluss.
Die Sandbox erfordert eine Anmeldung. Kontaktieren Sie uns, um Testinhalte zu erhalten.
| API-Typ | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
| Produktion | https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
Mutation SalesReport_CreateSalesReportFromSource Erstellt einen Verkaufsbericht aus einer bestehenden Bewertung oder einem Fahrzeug.
Parameter
regNo: String!
testRunId: Int?
unitId: Int? Erforderlich
-
string regNo -
int testRunId or int unitId
Antwort
result: Int Beispiel
mutation {
salesReport_CreateSalesReportFromSource(regNo: "ØSXXR01", unitId: 5147)
} Beispielantwort
{
"data": {
"salesReport_CreateSalesReportFromSource": 764
}
} Query SalesReport_GetSalesReportShareMetaData Liefert die Freigabelinks für den Verkaufsbericht und den VDN-Bericht sowie den PDF-Download.
Parameter
salesReportId: Int! Erforderlich
-
int salesReportId
Antwort
result: SalesReportShareMetaDataModel Hinweise
- salesReportPdfDownloadSasUrl ist nur für externe Partner verfügbar.
Beispiel
query {
salesReport_GetSalesReportShareMetaData(salesReportId: 764) {
shortenedSalesReportLinkURL
shortenedVDNReportLinkURL
shortenedSalesReportPdfURL
salesReportPdfDownloadSasUrl
}
} Beispielantwort
{
"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 Eine durchsuchbare, sortierbare Liste aller Verkaufsberichte.
Parameter
searchTerm: String
sortBy: GridSort
filters: SalesReportFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int? Antwort
result: SalesReportListModel Hinweise
- Die Seite wird mit skip und take paginiert. Der Standardwert für take ist 50, für skip 0. Es gibt keine Obergrenze.
- Sortierbare Felder: regno, vehicleMake, vehicleModel, vin, completedDate, salesReportStatus, createdDate, performedBy
- searchTerm trifft nur, wenn der Text mit RegNo beginnt.
- timeZoneOffset wird in Minuten übergeben und ist die Differenz zwischen UTC-Zeit und Clientzeit (UTC − Clientzeit). Ist die schwedische Zeit +1 GMT, senden Sie -1, um den richtigen Tag zu treffen.
Beispiel
query {
salesReport_GetAllSalesReports(searchTerm: "WBS99A") {
salesReports {
salesReportId
salesReportStatus
salesReportStatusId
regno
vehicleMake
vehicleModel
vin
createdDate
completedDate
}
totalSalesReports
}
} Query SalesReport_GetActiveSalesReports Wie oben, aber nur aktive Verkaufsberichte.
Parameter
searchTerm: String
sortBy: GridSort
filters: SalesReportFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int? Antwort
result: SalesReportListModel Hinweise
- Die Seite wird mit skip und take paginiert. Der Standardwert für take ist 50, für skip 0. Es gibt keine Obergrenze.
- Sortierbare Felder: regno, vehicleMake, vehicleModel, vin, completedDate, salesReportStatus, createdDate, performedBy
- searchTerm trifft nur, wenn der Text mit RegNo beginnt.
- timeZoneOffset wird in Minuten übergeben und ist die Differenz zwischen UTC-Zeit und Clientzeit (UTC − Clientzeit). Ist die schwedische Zeit +1 GMT, senden Sie -1, um den richtigen Tag zu treffen.
Beispiel
query {
salesReport_GetActiveSalesReports(searchTerm: "WBS99A") {
salesReports {
salesReportId
salesReportStatus
salesReportStatusId
regno
vehicleMake
vehicleModel
vin
createdDate
completedDate
}
totalSalesReports
}
} Mutation SalesReport_UpdateSalesReport Aktualisiert einen Verkaufsbericht.
Parameter
salesReportData: SalesReportDataModel! Erforderlich
-
salesReportData.SalesReportId -
salesReportData.TestId -
salesReportData.UnitId
Antwort
result: SalesReportDataModel Beispiel
mutation UpdateSalesReport($salesReportData: SalesReportDataModelInput!) {
updatedSalesReport: salesReport_UpdateSalesReport(
salesReportData: $salesReportData
) {
testId
mileage
createdDate
completedDate
salesReportTypeIds
deviationNotes
hasBatteryReading
testStatusId
unitId
__typename
}
} Beispielantwort
{
"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 Schließt einen Verkaufsbericht ab und versendet ihn per E-Mail oder SMS.
Parameter
salesReportConcludeModel: SalesReportConcludeModel! Erforderlich
-
salesReportConcludeModel.salesReportId -
salesReportConcludeModel.sendSalesReportEmailSMSModel
Antwort
result: Boolean Hinweise
- sendSalesReportEmailSMSModel ist erforderlich, und die erzeugten Freigabelinks werden darauf gespeichert. Leere Listen für E-Mail, Nummern und Berichtstypen senden nichts. Auf Einheitenebene konfigurierte Empfänger werden beim Abschluss hinzugefügt. Offene Mängel blockieren den Abschluss nicht.
Beispiel
mutation {
salesReport_ConcludeSalesReport(salesReportConcludeModel: {
salesReportId: 3180,
sendSalesReportEmailSMSModel: {
salesReportId: 3180,
emails: [],
numbers: [],
salesReportTypes: []
}
})
} Beispielantwort
{
"data":
{
"salesReport_ConcludeSalesReport": true
}
} Mutation salesReport_AddSalesReportImages Fügt einem Verkaufsbericht Bilder hinzu, optional mit Titelbild.
Parameter
salesReportId: Int!
images: [SalesReportImageInputModel]! Antwort
result: [SalesReportImageResultModel] Beispiel
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
}
} Mängel und Schäden
Mängel und Schäden, die bei einer Bewertung erfasst wurden, mit Bildern.
Die Sandbox erfordert eine Anmeldung. Kontaktieren Sie uns, um Testinhalte zu erhalten.
| API-Typ | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
| Produktion | https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
Query Defect_GetTestDefects Liefert die Mängel und Schäden, die bei einer Bewertung erfasst wurden.
Parameter
testId: Int! Antwort
result: [TestDefectModel] Hinweise
- TotalCost ist ohne MwSt. Die Oberfläche kann den Betrag inklusive MwSt. anzeigen.
Beispiel
query{
defect_GetTestDefects(testId: 54)
{
testDefectId,
checkpoint {
key
value
}
checkpointComment {
key
value
}
commonCost,
workCost,
partsCost,
totalCost
}
} Beispielantwort
{
"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 Liefert die Bilder und Dateien, die den Mängeln einer Bewertung zugeordnet sind.
Parameter
testId: Int! Antwort
result: [TestDefectFileModel] Beispiel
query{
defect_GetTestDefectFiles(testId: 54)
{
testDefectId,
testDefectFiles
{
fileUrl,
fileName,
mediaId
}
}
} Beispielantwort
{
"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 Aktualisiert einen Mangel bei einer Bewertung und in deren Verkaufsbericht.
Parameter
testId: Int!
defectFormData: TestDefectModel! Antwort
result: TestDefectModel Beispiel
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
}
} Beispielantwort
{
"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"
}
}
} Arbeitsaufträge
Arbeitsaufträge und Arbeitspositionen für den Werkstattprozess.
Die Sandbox erfordert eine Anmeldung. Kontaktieren Sie uns, um Testinhalte zu erhalten.
| API-Typ | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
| Produktion | https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1 |
Mutation workOrder_CreateWorkOrder Erstellt einen Arbeitsauftrag für ein Fahrzeug, mit oder ohne verknüpfte Bewertung.
Parameter
regNo: String!
testRunId: Int?!
unitId: Int! Erforderlich
-
testRunId (optional for standalone work order)
Antwort
result: Int Hinweise
- Mit testRunId muss die Bewertung abgeschlossen sein, und es wird eine Aufgabe pro Mangel erstellt. Ohne testRunId wird ein eigenständiger Arbeitsauftrag erstellt.
Beispiel
mutation {
workOrder_CreateWorkOrder(regNo: "PHP526", testRunId: 45988, unitId: 5147)
} Beispielantwort
{
"data":
{
"workOrder_CreateWorkOrder": 1773
}
} Mutation workOrder_CreateWorkOrderJob Fügt einem Arbeitsauftrag eine Arbeitsposition hinzu.
Parameter
workOrderJobModel: WorkOrderJobModel! Erforderlich
-
workOrderJobModel (workOrderId and job details)
Antwort
result: WorkOrderJobModel Beispiel
mutation {
workOrder_CreateWorkOrderJob(workOrderJobModel: {
workOrderId: 1773,
jobName: "Replace wiper blades",
comment: "Added by partner"
}) {
workOrderJobId
jobName
}
} Beispielantwort
{
"data":
{ "workOrder_CreateWorkOrderJob": {
"workOrderJobId": 28584, "jobName": "Replace wiper blades"
}
}
} Mutation workOrder_AddStandardJobsToWorkOrderCycle Fügt einem Arbeitsauftrag Standardpositionen hinzu.
Parameter
workOrderId: Int!
standardJobIds: [Int]! Antwort
result: [WorkOrderJobModel] Beispiel
mutation {
workOrder_AddStandardJobsToWorkOrderCycle(workOrderId: 1773, standardJobIds: [101, 205]) {
workOrderJobId
jobName
}
} Beispielantwort
{
"data":
{ "workOrder_AddStandardJobsToWorkOrderCycle":
[ { "workOrderJobId": 28585, "jobName": "Standard service" } ]
}
} Query workOrder_GetWorkOrderJobList Liefert alle Arbeitspositionen eines Arbeitsauftrags.
Parameter
workOrderId: Int! Antwort
result: WorkOrderJobListModel Hinweise
- workOrderJobStatus ist ein verschachteltes Objekt. Verwenden Sie die hier erhaltenen Aufgaben-IDs, wenn Sie den Status setzen.
Beispiel
query {
workOrder_GetWorkOrderJobList(workOrderId: 1773) {
count
workOrderJobs {
workOrderJobId
jobName
workOrderJobStatus {
workOrderJobStatusId
workOrderJobStatusName
}
testDefect {
testDefectId
}
}
}
} Beispielantwort
{
"data":
{ "workOrder_GetWorkOrderJobList":
{ "count": 2, "workOrderJobs": [
{ "workOrderJobId": 28581, "jobName": "Defect job", "workOrderJobStatus": { "workOrderJobStatusId": 3, "workOrderJobStatusName": "Done" }, "testDefect": { "testDefectId": 3444 } }
]
}
}
} Mutation workOrder_UpdateWorkOrderJobStatus Setzt einen neuen Status für eine oder mehrere Arbeitspositionen.
Parameter
workOrderId: Int!
workOrderJobIds: [Int]!
workOrderJobStatusId: Int! Antwort
result: WorkOrderStatusUpdateResult Hinweise
- Done erscheint als behoben im Verkaufsbericht, Open als weiterhin offener Mangel. Der Status des Arbeitsauftrags bleibt synchron.
Beispiel
mutation {
workOrder_UpdateWorkOrderJobStatus(
workOrderId: 1773,
workOrderJobIds: [28581, 28582],
workOrderJobStatusId: 3
) {
workOrderStatusId
workOrderStatusName
updatedJobs {
workOrderJobId
workOrderJobStatusId
workOrderJobStatusName
}
}
} Beispielantwort
{ "data": { "workOrder_UpdateWorkOrderJobStatus": { "workOrderStatusId": 2, "workOrderStatusName": "InProgress", "updatedJobs": [ { "workOrderJobId": 28581, "workOrderJobStatusId": 3, "workOrderJobStatusName": "Done" } ] } } } Query workOrder_GetStandardJobsForWorkOrder Listet die Standardpositionen auf, die einem Arbeitsauftrag zugeordnet werden können.
Parameter
workOrderId: Int! Antwort
result: [StandardJobModel] Beispiel
query{
workOrder_GetStandardJobsForWorkOrder(
workOrderId: 1832)
{
standardJobId
jobName
cost
isTaxInclude
}
} Beispielantwort
{
"data": {
"workOrder_GetStandardJobsForWorkOrder": [
{
"standardJobId": 723,
"jobName": "Shenal standard - job",
"cost": 800,
"isTaxInclude": false
}
]
}
} Query workOrderSettings_GetStandardJobsListForUnit Listet die eigenen Standardpositionen der Einheit mit Kosten auf.
Parameter
unitId: Int! Antwort
result: StandardJobsGridModel Beispiel
query{
workOrderSettings_GetStandardJobsListForUnit(unitId: 5208)
{
totalStandardJobs
standardJobs {
standardJobId
jobName
cost
}
}
} Beispielantwort
{
"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 Listet die Testläufe auf, die für ein Kennzeichen zu einem Arbeitsauftrag werden können.
Parameter
regNo: String!
unitId: Int! Antwort
result: WorkOrderCreationTestRunListModel Beispiel
query{
workOrder_GetTestRunsForWorkOrderCreation(
regNo: "AOL449"
, unitId: 5147
)
{
isRegNoValid
items {
testId
testRunId
mileage
}
}
} Beispielantwort
{
"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 Listet alle Arbeitsaufträge auf. Durchsuchbar, sortierbar und seitenweise.
Parameter
searchTerm: String
sortBy: GridSort
filters: WorkOrderFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int Antwort
result: WorkOrderListModel Hinweise
- Die Seite wird mit skip und take paginiert. Der Standardwert für take ist 50, für skip 0. Es gibt keine Obergrenze.
- timeZoneOffset wird in Minuten übergeben und ist die Differenz zwischen UTC-Zeit und Clientzeit (UTC − Clientzeit). Ist die schwedische Zeit +1 GMT, senden Sie -1, um den richtigen Tag zu treffen.
Beispiel
query{
workOrder_GetAllWorkOrders(
searchTerm: "AOL449"
timeZoneOffset: 0
)
{
totalWorkOrders
workOrders
{
testId
workOrderId
vehicleMake
vehicleModel
}
}
}
} Beispielantwort
{
"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 Listet Arbeitsaufträge auf, die nicht abgeschlossen sind.
Parameter
searchTerm: String
sortBy: GridSort
filters: WorkOrderFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int Antwort
result: WorkOrderListModel Hinweise
- Die Seite wird mit skip und take paginiert. Der Standardwert für take ist 50, für skip 0. Es gibt keine Obergrenze.
- timeZoneOffset wird in Minuten übergeben und ist die Differenz zwischen UTC-Zeit und Clientzeit (UTC − Clientzeit). Ist die schwedische Zeit +1 GMT, senden Sie -1, um den richtigen Tag zu treffen.
Beispiel
query{
workOrder_GetActiveWorkOrders(
searchTerm: "AOL449"
timeZoneOffset: 0
)
{
totalWorkOrders
workOrders
{
testId
workOrderId
vehicleMake
vehicleModel
}
}
}
} Beispielantwort
{
"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 Schließt einen Arbeitsauftrag ab.
Parameter
workOrderId: Int! Antwort
result: Boolean Beispiel
mutation{
workOrder_ConcludeWorkOrder(workOrderId: 1832)
} Beispielantwort
{
"data": {
"workOrder_ConcludeWorkOrder": true
}
} Mutation workOrder_ReopenWorkOrder Öffnet einen abgeschlossenen Arbeitsauftrag erneut.
Parameter
workOrderId: Int! Antwort
result: Boolean Beispiel
mutation{
workOrder_ReopenWorkOrder(workOrderId: 1832)
} Beispielantwort
{
"data": {
"workOrder_ReopenWorkOrder": true
}
} Mutation workOrder_DeleteWorkOrder Löscht einen Arbeitsauftrag.
Parameter
workOrderId: Int! Antwort
result: Boolean Beispiel
mutation{
workOrder_DeleteWorkOrder(workOrderId: 1824)
} Beispielantwort
{
"data": {
"workOrder_DeleteWorkOrder": true
}
} Query workOrder_GetWorkOrder Ruft einen einzelnen Arbeitsauftrag ab.
Parameter
workOrderId: Int! Antwort
result: WorkOrderDataModel Beispiel
query{
workOrder_GetWorkOrder(workOrderId: 1832)
{
workOrderId
regNo
mileage
workOrderStatusId
}
} Beispielantwort
{
"data": {
"workOrder_GetWorkOrder": {
"workOrderId": 1832,
"regNo": "AOL449",
"mileage": 45000,
"workOrderStatusId": 5
}
}
} Dateien
REST-Endpunkte zum Abrufen von Bildern und Dokumenten.
Die Sandbox erfordert eine Anmeldung. Kontaktieren Sie uns, um Testinhalte zu erhalten.
| API-Typ | REST |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/RestAPIServers.FileServer/api |
| Produktion | 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.
Parameter
mediaId: String!
useRedirect: Boolean Antwort
Actual file Beispiel
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.
Parameter
mediaId: String! Antwort
sasUrl expiresOn Beispiel
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...' Echtzeit
Abonnieren Sie Echtzeit-Ereignisse, wenn eine Bewertung abgeschlossen wird.
Die Sandbox erfordert eine Anmeldung. Kontaktieren Sie uns, um Testinhalte zu erhalten.
| API-Typ | GraphQL |
|---|---|
| Staging | wss://test.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.ExternalEndpoint1 |
| Produktion | wss://bus2.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.ExternalEndpoint1 |
Subscription Test_OnTestConclude Informiert Sie in Echtzeit, wenn eine Bewertung abgeschlossen wurde.
Parameter
testId: Int! Antwort
result: TestDataModel Hinweise
- Lokalisierte Textfelder wie testStatus und Prüfpunktnamen werden in der Kultur des Aufrufers zurückgegeben. Die Kultur stammt aus dem culture-Claim des Tokens, mit Rückfall auf Accept-Language. Das Beispiel wurde mit schwedischer Kultur erfasst.
Beispiel
subscription{
test_OnTestConclude(testId: 54)
{
testId,
mileage,
serviceData {
date,
mileage,
comment
},
unitId,
testTypeIds,
testStatus
}
} Beispielantwort
{
"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
Registrieren Sie einen Webhook und empfangen Sie Ereignisse unter Ihrer eigenen URL. B.U.S. sendet ein JSON-POST pro Ereignis und akzeptiert jeden 2xx-Code als Bestätigung.
Die Sandbox erfordert eine Anmeldung. Kontaktieren Sie uns, um Testinhalte zu erhalten.
| API-Typ | GraphQL |
|---|---|
| Staging | https://test.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.InternalApp |
| Produktion | https://bus2.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.InternalApp |
Mutation notification_SubscribeWebhook Registriert einen Webhook, allgemein oder für eine Einheit. Liefert ein Secret, das B.U.S. in jede Benachrichtigungsnutzlast legt, damit Sie bestätigen können, dass die Benachrichtigung von uns stammt.
Parameter
webhookRegisterModel: WebhookRegisterModel (url, eventTypeId, unitId?) Erforderlich
-
url -
eventTypeId
Antwort
secret: String Hinweise
- Jede Zustellung ist ein JSON-POST. Bei 2xx gilt die Benachrichtigung als zugestellt; jede andere Antwort wird als Fehler protokolliert und nicht erneut gesendet.
Beispiel
mutation{
notification_SubscribeWebhook(webhookRegisterModel: {
url: "https://example.com/webhook",
eventTypeId: 1,
unitId: null
}
){
secret
}
} Beispielantwort
{
"data": {
"notification_SubscribeWebhook": {
"secret": "…"
}
}
} Mutation notification_UnsubscribeWebhook Entfernt einen registrierten Webhook.
Parameter
eventTypeId: Int!
unitId: Int? Antwort
result: Boolean Beispiel
mutation{
notification_UnsubscribeWebhook(eventTypeId: 1, unitId: 5147)
} Webhook TestConcluded Die Benachrichtigung, die B.U.S. an Ihren Webhook sendet, wenn eine Bewertung abgeschlossen wurde.
Antwort
EventName, Data (TestDataModel), Secret Hinweise
- Jede Zustellung ist ein JSON-POST. Bei 2xx gilt die Benachrichtigung als zugestellt; jede andere Antwort wird als Fehler protokolliert und nicht erneut gesendet.
Beispiel
{
"EventName": "TestConcluded",
"Data": { "TestId": 34626, "UnitId": 5147, "Mileage": 3234, "…": "…" },
"Secret": "…"
} Webhook TestDeleted Die Benachrichtigung, die B.U.S. an Ihren Webhook sendet, wenn eine Bewertung gelöscht wird.
Antwort
EventName, Data (TestDataModel), Secret Hinweise
- Jede Zustellung ist ein JSON-POST. Bei 2xx gilt die Benachrichtigung als zugestellt; jede andere Antwort wird als Fehler protokolliert und nicht erneut gesendet.
Beispiel
{
"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 Die Benachrichtigung, die B.U.S. an Ihren Webhook sendet, wenn ein Arbeitsauftrag abgeschlossen wird.
Antwort
EventName, Data (WorkOrderDataModel), Secret Hinweise
- Jede Zustellung ist ein JSON-POST. Bei 2xx gilt die Benachrichtigung als zugestellt; jede andere Antwort wird als Fehler protokolliert und nicht erneut gesendet.
Beispiel
{
"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
} Datenmodelle
Die in Parametern und Antworten verwendeten Typen.
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 Der B.U.S. Shop
Sie haben eine Integration gebaut, die für Werkstätten oder Händler nützlich ist? Machen Sie sie im B.U.S. Shop verfügbar, dem Marktplatz, auf dem B.U.S. Kunden Integrationen finden und aktivieren. Ihre Integration erreicht drei von vier Werkstätten in Norwegen, ohne eigene Vertriebsorganisation.
Technik
| Authentifizierung | Bearer-Token. Sandbox-Zugangsdaten auf Anfrage, Produktion nach Freigabe. |
|---|---|
| Format | GraphQL. |
| Rate Limits | In der Sandbox unbegrenzt. Derzeit kein festes Limit in der Produktion. Bei Missbrauch kann das Konto gesperrt werden und der Dienst kann mit 429 (Too Many Requests) antworten. |
| Webhooks | Echtzeit-Ereignisse. Neue Inspektion, aktualisierte Bewertung, Statuswechsel. Sie wählen, welche Ereignisse Sie abonnieren. |
| Änderungen | Wir führen keine inkompatiblen Änderungen ein. Neuer Bedarf wird durch neue Methoden abgedeckt, und bestehende Methoden und Felder werden nicht geändert, solange sie verwendet werden. Neue Methoden und optionale Felder können laufend hinzukommen. Änderungen werden per E-Mail an den technischen Kontakt angekündigt. |
| Schema | Die Introspektion ist aktiviert. Sie können das gesamte Schema mit der Introspektionsabfrage am Endpunkt abrufen oder in der GraphQL-Sandbox lesen. Jede API hat ihr eigenes Schema: Test-API und Oscar Inspector sind getrennte Endpunkte. Das Schema wird beim Build erzeugt und ist daher immer mit dem Dienst abgeglichen. |
FAQ
Welche Sprachen/SDKs werden unterstützt?
Auf Basis von GraphQL. Funktioniert mit jeder Sprache, die HTTP-Anfragen senden kann. Sie wählen, welche Felder Sie zurückerhalten.
Was kostet es?
Die Sandbox ist kostenlos. Die Preise für den Produktionszugang hängen von der Nutzung ab.
Bereit zum Loslegen?
Entdecken Sie den API-Katalog oder sprechen Sie mit einem B.U.S. Entwickler.