Logga in Boka demo

Utvecklare

API:er för bilbranschen

B.U.S.-plattformen exponerar API:er för värdering, tillståndsrapport och AI-driven fordonsanalys. Öppen sandbox med testdata och OpenAPI-dokumentation för REST-ändpunkterna. Kontakta oss så skickar vi inloggningsuppgifter.

Utveckling hos B.U.S.

Så kommer du igång

  1. Se vad som finns

    API-katalogen visar tillgängliga endpoints med dokumentation och exempel.

  2. Bygg i sandbox

    Öppet sandboxmiljö med testdata. Kontakta oss så skickar vi användarnamn, lösenord och API-nyckel du kan testa med. Det kostar ingenting.

  3. Gå i produktion

    När du är redo mejlar du support@bus.no med företagsuppgifter, hur du tänker använda API:et och förväntad volym. Godkännande tar två arbetsdagar. Vi validerar uppsättningen och ger dig produktionsnycklarna.

API-katalog

GraphQL. Predikterade fel för ett fordon

Oscar Inspector. AI-driven fordonsanalys

Predikterade fel och underhållsbehov baserat på märke, modell och mätarställning. Byggt på över 20 miljoner verkliga kontroller. API-first, tillgängligt i alla marknader, och det snabbaste API:et att komma igång med.

Se metoderna i Oscar Inspector API

Test. Värdering och tillståndsdata

Skadebedömning, reparationskostnader, reservdelspriser och tillståndsrapporter. Används för säljstöd, garantibedömning och prismodeller.

Se alla metoder i Test-API:et

Fler API:er

Katalogen utökas löpande. [PKK och Kvalitetssäkring-API:er visas inte för svenska besökare. Dessa moduler är inte tillgängliga i Sverige.]

Oscar Inspector API

AI-drivna felprediktioner för ett fordon. Samma autentisering som Test-API:et - använd applicationId 5 när du hämtar token med token_ApplyToken2. Oscar Inspector har egen slutpunkt och eget schema, separat från Test-API:et. Exemplen visar frågan; svaret beror på fordonet.

Autentisering

Alla anrop skickar två huvuden: Authorization: Bearer <accessToken> och x-api-key: <apiKey>. API-nyckeln är en separat, långlivad nyckel du får från oss. Sandboxnycklar får du genom att kontakta oss. Här hämtar och förnyar du tokens.

Sandbox kräver inloggning. Kontakta oss så får du testuppgifter.

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 Hämtar id-token, access-token och refresh-token för en användare och en applikation.

Parametrar

username: String!
password: String!
apiKey: String!
applicationId: Int!

Svar

idToken: String
accessToken: String
refreshToken: String

Anmärkningar

  • Oscar Inspector kräver applicationId 5. Test-API:et använder en annan applicationId.
  • accessToken är giltig i 60 minuter. refreshToken är giltig i 90 dagar.
  • För att förnya: använd token_RefreshToken med refreshToken. Anropa inte token_ApplyToken2 igen vid varje utgång.
  • Är refreshToken utgången måste du hämta ett helt nytt set med token_ApplyToken2.

Exempel

query {
  token_ApplyToken2(
    username: ""
    password: ""
    apiKey: ""
    applicationId: 5
  ) {
    idToken
    accessToken
    refreshToken
  }
}

Exempelsvar

{
  "data": {
    "token_ApplyToken2": {
      "idToken": "",
      "accessToken": "",
      "refreshToken": ""
    }
  }
}
Query token_RefreshToken Förnyar tokens med refresh-token, utan ny inloggning.

Parametrar

apiKey: String!
applicationId: Int!
refreshToken: String!

Svar

idToken: String
accessToken: String
refreshToken: String

Anmärkningar

  • accessToken är giltig i 60 minuter. refreshToken är giltig i 90 dagar.
  • Är refreshToken utgången måste du hämta ett helt nytt set med token_ApplyToken2.

Exempel

query {
  token_RefreshToken(
    apiKey: "",
    applicationId: 5,
    refreshToken: ""
    ){
      idToken
      accessToken
      refreshToken
    }
}

Exempelsvar

{
  "data": {
    "token_RefreshToken": {
      "idToken": "",
      "accessToken": "",
      "refreshToken": ""
    }
  }
}

Felprediktion

Predikterade fel och underhållsbehov baserat på registreringsnummer och mätarställning.

Sandbox kräver inloggning. Kontakta oss så får du testuppgifter.

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 Returnerar predikterade fel för ett fordon, med sannolikhet och förklaring per fel.

Parametrar

requestId: String?
regNo: String
mileage: Int!
valuationId: Int?
inspectionId: Int?
language: String?
isMileageSuggestion: Boolean!
windowSize: Int!
refNo: String?

Svar

result: DefectPredictionOutput

Anmärkningar

  • requestId från svaret används som originalRequestId i busData_RecordUserFeedback.

Exempel

query {
  busData_GetDefectPredictions(
    requestId: "8ef2a2d7-4373-4f93-b57e-d151a192edad"
    regNo: "CF66983"
    mileage: 50000
  ) {
    requestId
    noOfPredictions
    defectPredictions {
      checkpointTypeGroupId
      checkpointTypeGroup
      probability
    }
    errorCodes
  }
}

Exempelsvar

{
  "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
    }
  }
}

Återkoppling

Registrera om prediktionen stämde, och hämta orsakerna som kan anges.

Sandbox kräver inloggning. Kontakta oss så får du testuppgifter.

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 Listar orsakerna en användare kan ange nar en prediktion inte stämde.

Parametrar

requestId: String?

Anmärkningar

  • userFeedbackReasonId används som värde i userFeedbackReasons på busData_RecordUserFeedback.

Exempel

query {
  busData_GetUserFeedbackReasons(requestId: "4c84c8db-3f1f-427c-b2ad-f00725f430b9") {
    requestId
    userFeedbackReasons {
      userFeedbackReasonId
      displayString
      userFeedbackReasonType
    }
    errorCodes
  }
}

Exempelsvar

{
  "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 Registrerar aterkoppling på en tidigare prediktion.

Parametrar

requestId: String?
originalRequestId: String?
isSatisfied: Boolean!
timeTakenForFeedback: Int!
userId: Int!
username: String?
organizationId: Int!
organizationName: String?
userFeedbackReasons: [Int]
time: DateTime?

Exempel

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
  }
}

Exempelsvar

{
  "data": {
    "busData_RecordUserFeedback": {
      "requestId": "1e692aa0-5a9b-400f-beef-7a53e27d26a2",
      "errorCodes": null
    }
  }
}

Datamodeller

Typerna som används i parametrar och svar.

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-referens. Test, värdering och tillståndsrapport

Alla metoder i Test-API:et, grupperade efter användning. Öppna en metod för att se parametrar, svar och ett exempel du kan köra.

Autentisering

Alla anrop skickar två huvuden: Authorization: Bearer <accessToken> och x-api-key: <apiKey>. API-nyckeln är en separat, långlivad nyckel du får från oss. Sandboxnycklar får du genom att kontakta oss. Här hämtar och förnyar du tokens.

Sandbox kräver inloggning. Kontakta oss så får du testuppgifter.

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 Hämtar id-token, access-token och refresh-token för en användare och en applikation.

Parametrar

username: String!
password: String!
apiKey: String!
applicationId: Int!

Svar

idToken: String
accessToken: String
refreshToken: String

Anmärkningar

  • accessToken är giltig i 60 minuter. refreshToken är giltig i 90 dagar.
  • För att förnya: använd token_RefreshToken med refreshToken. Anropa inte token_ApplyToken2 igen vid varje utgång.
  • Är refreshToken utgången måste du hämta ett helt nytt set med token_ApplyToken2.

Exempel

query {
  token_ApplyToken2(
    username: ""
    password: ""
    apiKey: ""
    applicationId: 13
  ) {
    idToken
    accessToken
    refreshToken
  }
}

Exempelsvar

{
  "data": {
    "token_ApplyToken2": {
      "idToken": "",
      "accessToken": "",
      "refreshToken": ""
    }
  }
}
Query token_RefreshToken Förnyar tokens med refresh-token, utan ny inloggning.

Parametrar

apiKey: String!
applicationId: Int!
refreshToken: String!

Svar

idToken: String
accessToken: String
refreshToken: String

Anmärkningar

  • accessToken är giltig i 60 minuter. refreshToken är giltig i 90 dagar.
  • Är refreshToken utgången måste du hämta ett helt nytt set med token_ApplyToken2.

Exempel

query {
  token_RefreshToken(
    apiKey: "",
    applicationId: 13,
    refreshToken: ""
    ){
      idToken
      accessToken
      refreshToken
    }
}

Exempelsvar

{
  "data": {
    "token_RefreshToken": {
      "idToken": "",
      "accessToken": "",
      "refreshToken": ""
    }
  }
}

Värderingar

Skapa, hämta, uppdatera och lista värderingar, med fordonsdata, leasingdata och rapporter. Exemplen nedan använder registreringsnummer och ID:n som finns i testmiljön. Kontakta oss när du begär testinloggning, så får du testdata som passar ditt konto.

Sandbox kräver inloggning. Kontakta oss så får du testuppgifter.

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 Skapar en ny värdering för ett fordon. Returnerar värderings-ID.

Parametrar

vehicleDataModel: VehicleDataModel!
testDataModel: TestDataModel!

Obligatoriskt

  • testTypeIds
  • unitId
  • regNo / vin

Svar

result: Int

Exempel

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"
    }]
  }
  )
}

Exempelsvar

{
  "data": {
    "test_CreateTest": 54
  }
}
Mutation testData_CreateLeaseData Lägger till leasingdata på en värdering: produkttyp, inköpspris, avtalsreferens och mer.

Parametrar

testId: Int!
leaseDataModel: LeaseDataModel!

Svar

result: Boolean

Exempel

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"
  }
  )
}

Exempelsvar

{
  "data": {
    "testData_CreateLeaseData": true
  }
}
Mutation testData_CreateLeaseUserData Lägger till leasingkund och kontaktpersoner på en värdering: flottansvarig, förare och mer.

Parametrar

testId: Int!
leaseUserDataModel: LeaseUserDataModel!

Svar

result: Boolean

Exempel

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"
  }
  )
}

Exempelsvar

{
  "data": {
    "testData_CreateLeaseUserData": true
  }
}
Query Test_GetTest Hämtar en värdering med status, mätarställning och servicehistorik.

Parametrar

testId: Int!

Svar

result: TestDataModel

Anmärkningar

  • Lokaliserade textfält som testStatus och kontrollpunktsnamn returneras på anroparens kultur. Kulturen hämtas från tokens culture-claim och faller tillbaka på Accept-Language. Exemplet är hämtat med svensk kultur.

Exempel

query{
  test_GetTest(testId: 32685)
  {
    testId,
    externalReferenceId,
    mileage,
    serviceData {
      date,
      mileage,
      comment
    },
    unitId,
    testTypeIds,
    testStatus,
    testComments
  }
}

Exempelsvar

{
  "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 Hämtar bilder och filer som hör till en värdering.

Parametrar

testId: Int!

Svar

result: [TestFileModel]

Exempel

query{
  test_GetTestFiles(testId: 32685)
  {
    fileUrl,
    fileName,
    testSectionId,
    mediaId
  }
}

Exempelsvar

{
  "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 Hämtar fordonsdata: registreringsnummer, chassinummer, utrustning och paket.

Parametrar

testId: Int!

Svar

result: VehicleDataModel

Exempel

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
  }
}

Exempelsvar

{
  "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 Hämtar leasingdata för en värdering.

Parametrar

testId: Int!

Svar

result: LeaseDataModel

Exempel

query{
  testData_GetLeaseData(testId: 21) {
     productType
     purchasePrice
     quotationTemplate
     repairMaintenance
     transportDate
     winterTyres
  }
}

Exempelsvar

{
  "data": {
    "testData_GetLeaseData": {
      "productType": null,
      "purchasePrice": null,
      "quotationTemplate": null,
      "repairMaintenance": null,
      "transportDate": null,
      "winterTires": null
    }
  }
}
Query testData_GetLeaseUserData Hämtar leasingkund och kontaktpersoner för en värdering.

Parametrar

testId: Int!

Svar

result: LeaseUserDataModel

Exempel

query{
  testData_GetLeaseUserData(testId: 21) {
    customerId
    customerName
    fleetManagerName
    fleetManagerEmail
    installationRecipientEmail
    kamName
    kamEmail
    driverName
    driverPhone
    driverEmail
  }
}

Exempelsvar

{
  "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 Listar de enheter du har åtkomst till.

Svar

result: [UnitModel]

Exempel

query{
  unit_GetAccessibleUnits
  {
    unitId
    unitName
  }
}

Exempelsvar

{
  "data": {
    "unit_GetAccessibleUnits": [
      {
        "unitId": 1,
        "unitName": "Test unit"
      }
    ]
  }
}
Query TestType_GetTestTypes Listar tillgängliga värderingstyper för en enhet.

Parametrar

unitId: Int!
vin: String

Svar

result: [TestTypeModel]

Exempel

query{
  testType_GetTestTypes(unitId: 1)
  {
    testTypeId,
    testTypeName,
    isActive
  }
}

Exempelsvar

{
  "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 Uppdaterar en befintlig värdering.

Parametrar

testDataModel: TestDataModel!

Obligatoriskt

  • testDataModel.testId

Svar

result: TestDataModel

Exempel

mutation {
  test_UpdateTest(testDataModel:  {
    testId: 625,
    mileage: 60000
  }) {
    testId,
    mileage
  }
}

Exempelsvar

SalesReport_CreateSalesReportFromSource
Query Test_GetAllTests Sökbar och sorterbar lista över alla värderingar, med filter och paginering.

Parametrar

searchTerm: String
sortBy: GridSort
filters: TestFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int?

Svar

result: TestListModel

Anmärkningar

  • Sidan pagineras med skip och take. Standard take är 50, och standard skip är 0. Det finns ingen övre gräns.
  • Sorterbara fält: regno, vehicleMake, vehicleModel, vin, completedDate, createdDate, performedDate, performedBy, testTypes, isObdPerformed, testStatus, testAnnotations.
  • searchTerm matchar bara när texten börjar med RegNo eller TestAnnotations.
  • timeZoneOffset skickas som minuter och är skillnaden mellan UTC-tid och klienttid (UTC − klienttid). Är svensk tid +1 GMT, skicka -1 för att träffa rätt dag.

Exempel

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 Samma som ovan, men bara pågående värderingar.

Parametrar

searchTerm: String
sortBy: GridSort
filters: TestFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int?

Svar

result: TestListModel

Anmärkningar

  • Sidan pagineras med skip och take. Standard take är 50, och standard skip är 0. Det finns ingen övre gräns.
  • Sorterbara fält: regno, vehicleMake, vehicleModel, vin, completedDate, createdDate, performedDate, performedBy, testTypes, isObdPerformed, testStatus, testAnnotations.
  • searchTerm matchar bara när texten börjar med RegNo eller TestAnnotations.
  • timeZoneOffset skickas som minuter och är skillnaden mellan UTC-tid och klienttid (UTC − klienttid). Är svensk tid +1 GMT, skicka -1 för att träffa rätt dag.

Exempel

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 Hämtar länkar till tillståndsrapporterna för en värdering, även som PDF.

Parametrar

testId: Int!

Obligatoriskt

  • int testId

Svar

result: [ReportModel]

Exempel

query {
        test_GetTestReports(testId: 33081) {
            testTypeId
            testType
            shortenedReportURL
            shortenedPdfReportURL
        }
    }

Exempelsvar

{
  "data": {
    "test_GetTestReports": [
      {
        "testTypeId": 2,
        "testType": "Test utan kostnader",
        "shortenedReportURL": "https://lnkt.bus.no/8049d5ll2"
        "shortenedPdfReportURL": "https://lnkt.bus.no/41181Ruhpp"
      }
    ]
  }
}
Query test_GetGeneralInfo Hämtar allmän information om fordonet: nycklar, laddkabel, tidigare användning och mer.

Parametrar

testId: Int!

Svar

result: GeneralInfoModel

Anmärkningar

  • Läs gällande värden innan du uppdaterar. test_GetGeneralInfoMetaData ger de fördefinierade nyckelvärdena.

Exempel

query {
  test_GetGeneralInfo(testId: 46324) {
    masterKeyCount
    chargingCableCount
    previousUseId
    hasPreviousDamage
    vehicleKeyTypes { key value }
    chargingCableTypes { key value }
  }
}

Exempelsvar

{ "data": { "test_GetGeneralInfo": { "masterKeyCount": 2, "chargingCableCount": 1, "previousUseId": 3, "hasPreviousDamage": false, "vehicleKeyTypes": [ { "key": 1, "value": "Remote key" } ], "chargingCableTypes": [] } } }
Mutation test_UpdateGeneralInfo Uppdaterar den allmänna informationen om fordonet.

Parametrar

testId: Int!
generalInfoModel: GeneralInfoModel!

Svar

result: Boolean

Anmärkningar

  • Läs–ändra–skriv: skicka hela modellen. Null-listor för vehicleKeyTypes eller chargingCableTypes avvisas; en tom lista rensar de befintliga typerna.

Exempel

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" }]
  })
}

Exempelsvar

{ 
"data": 
    { 
        "test_UpdateGeneralInfo": true
    }
 }

Säljrapporter

Säljrapporter byggda på värderingarna, med delningslänkar och avslut.

Sandbox kräver inloggning. Kontakta oss så får du testuppgifter.

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 Skapar en säljrapport från en befintlig värdering eller ett fordon.

Parametrar

regNo: String!
testRunId: Int?
unitId: Int?

Obligatoriskt

  • string regNo
  • int testRunId or int unitId

Svar

result: Int

Exempel

mutation {
      salesReport_CreateSalesReportFromSource(regNo: "ØSXXR01", unitId: 5147)
  }

Exempelsvar

{
  "data": {
    "salesReport_CreateSalesReportFromSource": 764
  }
}
Query SalesReport_GetSalesReportShareMetaData Hämtar delningslänkar till säljrapport och VDN-rapport, samt PDF-nedladdning.

Parametrar

salesReportId: Int!

Obligatoriskt

  • int salesReportId

Anmärkningar

  • salesReportPdfDownloadSasUrl är endast tillgänglig för externa partner.

Exempel

query {
  salesReport_GetSalesReportShareMetaData(salesReportId: 764) {
    shortenedSalesReportLinkURL
    shortenedVDNReportLinkURL
    shortenedSalesReportPdfURL
    salesReportPdfDownloadSasUrl
  }
}

Exempelsvar

{
  "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 Sökbar och sorterbar lista över alla säljrapporter.

Parametrar

searchTerm: String
sortBy: GridSort
filters: SalesReportFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int?

Svar

result: SalesReportListModel

Anmärkningar

  • Sidan pagineras med skip och take. Standard take är 50, och standard skip är 0. Det finns ingen övre gräns.
  • Sorterbara fält: regno, vehicleMake, vehicleModel, vin, completedDate, salesReportStatus, createdDate, performedBy
  • searchTerm matchar bara när texten börjar med RegNo.
  • timeZoneOffset skickas som minuter och är skillnaden mellan UTC-tid och klienttid (UTC − klienttid). Är svensk tid +1 GMT, skicka -1 för att träffa rätt dag.

Exempel

query {
  salesReport_GetAllSalesReports(searchTerm: "WBS99A") {
            salesReports {
                salesReportId
                salesReportStatus
                salesReportStatusId
                regno
                vehicleMake
                vehicleModel
                vin
                createdDate
                completedDate
            }
            totalSalesReports
        }
    }
Query SalesReport_GetActiveSalesReports Samma som ovan, men bara aktiva säljrapporter.

Parametrar

searchTerm: String
sortBy: GridSort
filters: SalesReportFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int?

Svar

result: SalesReportListModel

Anmärkningar

  • Sidan pagineras med skip och take. Standard take är 50, och standard skip är 0. Det finns ingen övre gräns.
  • Sorterbara fält: regno, vehicleMake, vehicleModel, vin, completedDate, salesReportStatus, createdDate, performedBy
  • searchTerm matchar bara när texten börjar med RegNo.
  • timeZoneOffset skickas som minuter och är skillnaden mellan UTC-tid och klienttid (UTC − klienttid). Är svensk tid +1 GMT, skicka -1 för att träffa rätt dag.

Exempel

query {
  salesReport_GetActiveSalesReports(searchTerm: "WBS99A") {
            salesReports {
                salesReportId
                salesReportStatus
                salesReportStatusId
                regno
                vehicleMake
                vehicleModel
                vin
                createdDate
                completedDate
            }
            totalSalesReports
        }
    }
Mutation SalesReport_UpdateSalesReport Uppdaterar en säljrapport.

Parametrar

salesReportData: SalesReportDataModel!

Obligatoriskt

  • salesReportData.SalesReportId
  • salesReportData.TestId
  • salesReportData.UnitId

Svar

result: SalesReportDataModel

Exempel

mutation UpdateSalesReport($salesReportData: SalesReportDataModelInput!) {
  updatedSalesReport: salesReport_UpdateSalesReport(
    salesReportData: $salesReportData
  ) {
    testId
    mileage
    createdDate
    completedDate
    salesReportTypeIds
    deviationNotes
    hasBatteryReading
    testStatusId
    unitId
    __typename
  }
}

Exempelsvar

{
  "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 Avslutar en säljrapport och skickar den via e-post eller SMS.

Parametrar

salesReportConcludeModel: SalesReportConcludeModel!

Obligatoriskt

  • salesReportConcludeModel.salesReportId
  • salesReportConcludeModel.sendSalesReportEmailSMSModel

Svar

result: Boolean

Anmärkningar

  • sendSalesReportEmailSMSModel är obligatorisk, och de genererade dellänkarna lagras på den. Tomma listor för e-post, nummer och rapporttyper skickar ingenting. Enhetskonfigurerade mottagare läggs till vid avslut. Öppna avvikelser blockerar inte avslut.

Exempel

mutation {
  salesReport_ConcludeSalesReport(salesReportConcludeModel: {
    salesReportId: 3180,
    sendSalesReportEmailSMSModel: {
      salesReportId: 3180,
      emails: [],
      numbers: [],
      salesReportTypes: []
    }
  })
}

Exempelsvar

{ 
"data": 
           { 
                "salesReport_ConcludeSalesReport": true 
           }
 }
Mutation salesReport_AddSalesReportImages Lägger bilder till en säljrapport, med valfri omslagsbild.

Parametrar

salesReportId: Int!
images: [SalesReportImageInputModel]!

Exempel

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
  }
}

Skador och avvikelser

Skador och avvikelser registrerade på en värdering, med bilder.

Sandbox kräver inloggning. Kontakta oss så får du testuppgifter.

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 Hämtar registrerade avvikelser och skador på en värdering.

Parametrar

testId: Int!

Svar

result: [TestDefectModel]

Anmärkningar

  • TotalCost är exklusive moms. Gränssnittet kan visa beloppet inklusive moms.

Exempel

query{
  defect_GetTestDefects(testId: 54)
  {
    testDefectId,
    checkpoint {
      key
      value
    }
    checkpointComment {
      key
      value
    }
    commonCost,
    workCost,
    partsCost,
    totalCost
  }
}

Exempelsvar

{
  "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 Hämtar bilder och filer kopplade till avvikelserna på en värdering.

Parametrar

testId: Int!

Svar

result: [TestDefectFileModel]

Exempel

query{
  defect_GetTestDefectFiles(testId: 54)
  {
    testDefectId,
    testDefectFiles
    {
      fileUrl,
      fileName,
      mediaId
    }
  }
}

Exempelsvar

{
  "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 Uppdaterar en avvikelse på en värdering och dess säljrapport.

Parametrar

testId: Int!
defectFormData: TestDefectModel!

Svar

result: TestDefectModel

Exempel

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
  }
}

Exempelsvar

{
  "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"
    }
  }
}

Arbetsorder

Arbetsorder och jobb för verkstadsflödet.

Sandbox kräver inloggning. Kontakta oss så får du testuppgifter.

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 Skapar en arbetsorder för ett fordon, med eller utan kopplad värdering.

Parametrar

regNo: String!
testRunId: Int?!
unitId: Int!

Obligatoriskt

  • testRunId (optional for standalone work order)

Svar

result: Int

Anmärkningar

  • Med testRunId måste testen vara avslutad, och en jobb skapas per avvikelse. Utan testRunId skapas en fristående arbetsorder.

Exempel

mutation {
  workOrder_CreateWorkOrder(regNo: "PHP526", testRunId: 45988, unitId: 5147)
}

Exempelsvar

{ 
"data": 
     {
          "workOrder_CreateWorkOrder": 1773
     }
 }
Mutation workOrder_CreateWorkOrderJob Lägger till ett jobb på en arbetsorder.

Parametrar

workOrderJobModel: WorkOrderJobModel!

Obligatoriskt

  • workOrderJobModel (workOrderId and job details)

Svar

result: WorkOrderJobModel

Exempel

mutation {
  workOrder_CreateWorkOrderJob(workOrderJobModel: {
    workOrderId: 1773,
    jobName: "Replace wiper blades",
    comment: "Added by partner"
  }) {
    workOrderJobId
    jobName
  }
}

Exempelsvar

{ 
"data":
         { "workOrder_CreateWorkOrderJob": { 
                           "workOrderJobId": 28584, "jobName": "Replace wiper blades"
                   }
          }
 }
Mutation workOrder_AddStandardJobsToWorkOrderCycle Lägger till standardjobb på en arbetsorder.

Parametrar

workOrderId: Int!
standardJobIds: [Int]!

Svar

result: [WorkOrderJobModel]

Exempel

mutation {
  workOrder_AddStandardJobsToWorkOrderCycle(workOrderId: 1773, standardJobIds: [101, 205]) {
    workOrderJobId
    jobName
  }
}

Exempelsvar

{ 
"data": 
            { "workOrder_AddStandardJobsToWorkOrderCycle":
                            [ { "workOrderJobId": 28585, "jobName": "Standard service" } ] 
            }
 }
Query workOrder_GetWorkOrderJobList Hämtar alla jobb på en arbetsorder.

Parametrar

workOrderId: Int!

Svar

result: WorkOrderJobListModel

Anmärkningar

  • workOrderJobStatus är ett nästlat objekt. Använd jobbidentiteterna du får här när du sätter status.

Exempel

query {
  workOrder_GetWorkOrderJobList(workOrderId: 1773) {
    count
    workOrderJobs {
      workOrderJobId
      jobName
      workOrderJobStatus {
        workOrderJobStatusId
        workOrderJobStatusName
      }
      testDefect {
        testDefectId
      }
    }
  }
}

Exempelsvar

{ 
"data":
                { "workOrder_GetWorkOrderJobList":
                                              { "count": 2, "workOrderJobs": [ 
                                                                  { "workOrderJobId": 28581, "jobName": "Defect job", "workOrderJobStatus": { "workOrderJobStatusId": 3,                             "workOrderJobStatusName": "Done" }, "testDefect": { "testDefectId": 3444 } } 
                                                             ]
                                                }
                  }
 }
Mutation workOrder_UpdateWorkOrderJobStatus Sätter ny status på ett eller flera jobb.

Parametrar

workOrderId: Int!
workOrderJobIds: [Int]!
workOrderJobStatusId: Int!

Anmärkningar

  • Done visas som åtgärdad på säljrapporten, Open som kvarstående avvikelse. Arbetsorderstatusen hålls i synk.

Exempel

mutation {
  workOrder_UpdateWorkOrderJobStatus(
    workOrderId: 1773,
    workOrderJobIds: [28581, 28582],
    workOrderJobStatusId: 3
  ) {
    workOrderStatusId
    workOrderStatusName
    updatedJobs {
      workOrderJobId
      workOrderJobStatusId
      workOrderJobStatusName
    }
  }
}

Exempelsvar

{ "data": { "workOrder_UpdateWorkOrderJobStatus": { "workOrderStatusId": 2, "workOrderStatusName": "InProgress", "updatedJobs": [ { "workOrderJobId": 28581, "workOrderJobStatusId": 3, "workOrderJobStatusName": "Done" } ] } } }
Query workOrder_GetStandardJobsForWorkOrder Listar standardjobb som kan knytas till en arbetsorder.

Parametrar

workOrderId: Int!

Svar

result: [StandardJobModel]

Exempel

query{
  workOrder_GetStandardJobsForWorkOrder(
    workOrderId: 1832)
  {
    standardJobId
    jobName
    cost
    isTaxInclude
  }
}

Exempelsvar

{
  "data": {
    "workOrder_GetStandardJobsForWorkOrder": [
      {
        "standardJobId": 723,
        "jobName": "Shenal standard - job",
        "cost": 800,
        "isTaxInclude": false
      }
    ]
  }
}
Query workOrderSettings_GetStandardJobsListForUnit Listar enhetens egna standardjobb med kostnad.

Parametrar

unitId: Int!

Svar

result: StandardJobsGridModel

Exempel

query{
  workOrderSettings_GetStandardJobsListForUnit(unitId: 5208)
  {
    totalStandardJobs
    standardJobs {
      standardJobId
      jobName
      cost
    }
  }
}

Exempelsvar

{
  "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 Listar testkörningar som kvalificerar för att bli en arbetsorder för ett registreringsnummer.

Parametrar

regNo: String!
unitId: Int!

Exempel

query{
  workOrder_GetTestRunsForWorkOrderCreation(
    regNo: "AOL449"
    , unitId: 5147
    )
  {
    isRegNoValid
    items {
      testId
      testRunId
      mileage
    }
  }
}

Exempelsvar

{
  "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 Listar alla arbetsordrar. Sökbar, sorterbar och sidindelad.

Parametrar

searchTerm: String
sortBy: GridSort
filters: WorkOrderFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int

Svar

result: WorkOrderListModel

Anmärkningar

  • Sidan pagineras med skip och take. Standard take är 50, och standard skip är 0. Det finns ingen övre gräns.
  • timeZoneOffset skickas som minuter och är skillnaden mellan UTC-tid och klienttid (UTC − klienttid). Är svensk tid +1 GMT, skicka -1 för att träffa rätt dag.

Exempel

query{
  workOrder_GetAllWorkOrders(
    searchTerm: "AOL449"
    timeZoneOffset: 0
    )
    {
      totalWorkOrders
      workOrders
      {
        testId
        workOrderId
        vehicleMake
        vehicleModel
      }
    }
  }
}

Exempelsvar

{
  "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 Listar arbetsordrar som inte är avslutade.

Parametrar

searchTerm: String
sortBy: GridSort
filters: WorkOrderFilterModel
skip: Int?
take: Int?
timeZoneOffset: Int

Svar

result: WorkOrderListModel

Anmärkningar

  • Sidan pagineras med skip och take. Standard take är 50, och standard skip är 0. Det finns ingen övre gräns.
  • timeZoneOffset skickas som minuter och är skillnaden mellan UTC-tid och klienttid (UTC − klienttid). Är svensk tid +1 GMT, skicka -1 för att träffa rätt dag.

Exempel

query{
  workOrder_GetActiveWorkOrders(
    searchTerm: "AOL449"
    timeZoneOffset: 0
    )
    {
      totalWorkOrders
      workOrders
      {
        testId
        workOrderId
        vehicleMake
        vehicleModel
      }
    }
  }
}

Exempelsvar

{
  "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 Avslutar en arbetsorder.

Parametrar

workOrderId: Int!

Svar

result: Boolean

Exempel

mutation{
  workOrder_ConcludeWorkOrder(workOrderId: 1832)
}

Exempelsvar

{
  "data": {
    "workOrder_ConcludeWorkOrder": true
  }
}
Mutation workOrder_ReopenWorkOrder Återöppnar en avslutad arbetsorder.

Parametrar

workOrderId: Int!

Svar

result: Boolean

Exempel

mutation{
  workOrder_ReopenWorkOrder(workOrderId: 1832)
}

Exempelsvar

{
  "data": {
    "workOrder_ReopenWorkOrder": true
  }
}
Mutation workOrder_DeleteWorkOrder Tar bort en arbetsorder.

Parametrar

workOrderId: Int!

Svar

result: Boolean

Exempel

mutation{
  workOrder_DeleteWorkOrder(workOrderId: 1824)
}

Exempelsvar

{
  "data": {
    "workOrder_DeleteWorkOrder": true
  }
}
Query workOrder_GetWorkOrder Hämtar en arbetsorder.

Parametrar

workOrderId: Int!

Svar

result: WorkOrderDataModel

Exempel

query{
  workOrder_GetWorkOrder(workOrderId: 1832)
  {
    workOrderId
    regNo
    mileage
    workOrderStatusId
  }
}

Exempelsvar

{
  "data": {
    "workOrder_GetWorkOrder": {
      "workOrderId": 1832,
      "regNo": "AOL449",
      "mileage": 45000,
      "workOrderStatusId": 5
    }
  }
}

Filer

REST-endpoints för att hämta bilder och dokument.

Sandbox kräver inloggning. Kontakta oss så får du testuppgifter.

API-typ REST
Staging https://test.bus.no/BUSPlatform3/RestAPIServers.FileServer/api
Produktion https://bus2.bus.no/busplatform3/RestAPIServers.FileServer/api
REST Media/GetMedia Hämtar själva filen från ett media-ID. Med useRedirect hämtas filen direkt från lagringen, vilket är snabbast.

Parametrar

mediaId: String!
useRedirect: Boolean

Svar

Actual file

Exempel

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 Hämtar en tillfällig nedladdningslänk (SAS) för ett media-ID, med utgångstid.

Parametrar

mediaId: String!

Svar

sasUrl expiresOn

Exempel

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

Realtid

Prenumerera på händelser i realtid när en värdering avslutas.

Sandbox kräver inloggning. Kontakta oss så får du testuppgifter.

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 Meddelar i realtid när en värdering har avslutats.

Parametrar

testId: Int!

Svar

result: TestDataModel

Anmärkningar

  • Lokaliserade textfält som testStatus och kontrollpunktsnamn returneras på anroparens kultur. Kulturen hämtas från tokens culture-claim och faller tillbaka på Accept-Language. Exemplet är hämtat med svensk kultur.

Exempel

subscription{
  test_OnTestConclude(testId: 54)
  {
    testId,
    mileage,
    serviceData {
      date,
      mileage,
      comment
    },
    unitId,
    testTypeIds,
    testStatus
  }
}

Exempelsvar

{
  "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

Registrera en webhook och ta emot händelser på din egen URL. B.U.S. skickar ett POST-anrop med JSON per händelse, och accepterar alla 2xx som kvittens.

Sandbox kräver inloggning. Kontakta oss så får du testuppgifter.

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 Registrerar en webhook, generellt eller för en enhet. Returnerar ett secret som B.U.S. lägger i varje aviseringspayload, så att du kan bekräfta att aviseringen kommer från oss.

Parametrar

webhookRegisterModel: WebhookRegisterModel (url, eventTypeId, unitId?)

Obligatoriskt

  • url
  • eventTypeId

Svar

secret: String

Anmärkningar

  • Varje leverans är ett POST-anrop med JSON. Vid 2xx anses aviseringen som levererad; andra svar loggas som fel och skickas inte igen.

Exempel

mutation{
  notification_SubscribeWebhook(webhookRegisterModel:  {
    url: "https://example.com/webhook",
    eventTypeId: 1,
    unitId: null
  }
  ){
    secret
  }
}

Exempelsvar

{
  "data": {
    "notification_SubscribeWebhook": {
      "secret": "…"
    }
  }
}
Mutation notification_UnsubscribeWebhook Tar bort en registrerad webhook.

Parametrar

eventTypeId: Int!
unitId: Int?

Svar

result: Boolean

Exempel

mutation{
  notification_UnsubscribeWebhook(eventTypeId:  1, unitId: 5147)
}
Webhook TestConcluded Notisen B.U.S. skickar till din webhook när en värdering har avslutats.

Svar

EventName, Data (TestDataModel), Secret

Anmärkningar

  • Varje leverans är ett POST-anrop med JSON. Vid 2xx anses aviseringen som levererad; andra svar loggas som fel och skickas inte igen.

Exempel

{
  "EventName": "TestConcluded",
  "Data": { "TestId": 34626, "UnitId": 5147, "Mileage": 3234, "…": "…" },
  "Secret": "…"
}
Webhook TestDeleted Aviseringen B.U.S. skickar till din webhook när en värdering tas bort.

Svar

EventName, Data (TestDataModel), Secret

Anmärkningar

  • Varje leverans är ett POST-anrop med JSON. Vid 2xx anses aviseringen som levererad; andra svar loggas som fel och skickas inte igen.

Exempel

{
  "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 Aviseringen B.U.S. skickar till din webhook när en arbetsorder avslutas.

Svar

EventName, Data (WorkOrderDataModel), Secret

Anmärkningar

  • Varje leverans är ett POST-anrop med JSON. Vid 2xx anses aviseringen som levererad; andra svar loggas som fel och skickas inte igen.

Exempel

{
  "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
}

Datamodeller

Typerna som används i parametrar och svar.

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

B.U.S.-shopen

Byggt en integration som är användbar för handlare? Gör den tillgänglig i B.U.S.-shopen. Marknadsplatsen där B.U.S.-kunder hittar och aktiverar integrationer.

Tekniskt

AutentiseringBearer token. Sandbox-credentials på begäran, produktion efter godkännande.
FormatGraphQL.
Rate limitsObegränsat i sandbox. Ingen fast gräns i produktion i dag. Vid missbruk kan kontot stängas, och tjänsten kan svara med 429 (Too Many Requests).
WebhooksRealtidshändelser. Ny värdering, uppdaterad tillståndsrapport, statusändring.
ÄndringarVi inför inga brytande ändringar. Nya behov löses med nya metoder, och befintliga metoder och fält ändras inte så länge de används. Nya metoder och valfria fält kan tillkomma under tiden. Ändringar aviseras via e-post till teknisk kontakt.
SchemaIntrospektion är påslagen. Du kan hämta hela schemat med introspektionsfrågan mot slutpunkten, eller läsa det i GraphQL-sandlådan. Varje API har sitt eget schema - Test-API:et och Oscar Inspector är separata slutpunkter. Schemat genereras vid bygget, så det är alltid i takt med tjänsten.

FAQ

Vilka språk/SDK:er stöds?

GraphQL-baserat. Fungerar med alla språk som kan skicka HTTP-requests. Välj själv vilka fält du vill ha tillbaka.

Vad kostar det?

Sandbox är gratis. Prissättning för produktionstillgång beror på användning.

Redo att bygga?

Utforska API-katalogen, eller prata med en utvecklare hos oss.