Anmelden Demo buchen

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.

Entwicklung bei B.U.S.

In drei Schritten starten

  1. Verfügbares entdecken

    Der API-Katalog zeigt die verfügbaren Endpunkte mit Dokumentation, Schemas und funktionierenden Beispielen.

  2. 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.

  3. 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 ansehen

Qualitä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.

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.

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.

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.

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.

Parameter

testDataModel: TestDataModel!

Erforderlich

  • testDataModel.testId

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

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!

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
SalesReportShareMetaDataModel
ShortenedSalesReportLinkURL: String
ShortenedVDNReportLinkURL: String
ShortenedSalesReportPdfURL: String
SalesReportPdfDownloadSasUrl: 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
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
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

AuthentifizierungBearer-Token. Sandbox-Zugangsdaten auf Anfrage, Produktion nach Freigabe.
FormatGraphQL.
Rate LimitsIn 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.
WebhooksEchtzeit-Ereignisse. Neue Inspektion, aktualisierte Bewertung, Statuswechsel. Sie wählen, welche Ereignisse Sie abonnieren.
ÄnderungenWir 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.
SchemaDie 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.