Logg inn Book demo

Utviklere

API-er for bilbransjen

B.U.S.-plattformen eksponerer API-er for kjøretøykontroll, takst, kvalitetssikring og AI-basert bilanalyse. Åpen sandbox med testdata og OpenAPI-dokumentasjon for REST-endepunktene. Ta kontakt, så sender vi deg innloggingsdetaljer.

Utvikling i B.U.S.

Slik kommer du i gang

  1. Se hva som finnes

    API-katalogen viser tilgjengelige endepunkter med dokumentasjon og eksempler.

  2. Bygg i sandbox

    Åpent sandbox-miljø med testdata. Ta kontakt, så sender vi deg brukernavn, passord og API-nøkkel du kan teste med. Det koster ingenting.

  3. Gå i produksjon

    Når du er klar, sender du en e-post til support@bus.no med bedriftsopplysninger, hva du skal bruke API-et til og forventet volum. Godkjenning tar to virkedager. Vi validerer oppsettet og gir deg produksjonsnøklene.

API-katalog

GraphQL. Predikerte feil for et kjøretøy

Oscar Inspector. AI-drevet kjøretøyinnsikt

Predikerte feil og vedlikeholdsbehov basert på merke, modell og kilometerstand. Bygget på over 20 millioner reelle kontroller. API-first, tilgjengelig i alle markeder, og det raskeste API-et å komme i gang med. Brukes av forsikringsselskaper, markedsplasser, leasingselskaper og verkstedsystemer.

Se metodene i Oscar Inspector API

PKK. Periodisk kjøretøykontroll

Kontrollresultater, feilkoder, historikk og etterkontrollstatus. Datagrunnlaget dekker 75 % av det norske markedet.

Test. Takst og tilstandsdata

Skadevurdering, reparasjonskostnader, reservedelspriser og tilstandsrapporter. Brukes til salgsstøtte, garantivurdering og prismodeller.

Se alle metodene i Test-API-et

Kvalitetssikring

Internkontroll, avvikshåndtering, utstyrskontroll og kalibreringer. Relevant for compliance og revisjon.

Flere API-er

Katalogen utvides løpende.

Oscar Inspector API

AI-drevne feilprediksjoner for et kjøretøy. Samme autentisering som Test-API-et - bruk applicationId 5 når du henter token med token_ApplyToken2. Oscar Inspector har eget endepunkt og eget skjema, separat fra Test-API-et. Eksemplene viser spørringen; svaret avhenger av kjøretøyet.

Autentisering

Alle kall sender to headere: Authorization: Bearer <accessToken> og x-api-key: <apiKey>. API-nøkkelen er en egen, lengelevd nøkkel du får fra oss. Sandbox-nøkler får du ved å ta kontakt. Her henter og fornyer du tokens.

Sandbox krever innlogging. Ta kontakt, så får du testinnhold.

API-type GraphQL
Staging https://test.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1
Produksjon https://bus2.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1
Query token_ApplyToken2 Henter id-, access- og refresh-token for en bruker og en applikasjon.

Parametre

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

Svar

idToken: String
accessToken: String
refreshToken: String

Merknader

  • Oscar Inspector krever applicationId 5. Test-API-et bruker en annen applicationId.
  • accessToken er gyldig i 60 minutter. refreshToken er gyldig i 90 dager.
  • For å fornye: bruk token_RefreshToken med refreshToken. Ikke kall token_ApplyToken2 på nytt for hver utløpning.
  • Er refreshToken utløpt, må du hente et helt nytt sett med token_ApplyToken2.

Eksempel

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

Eksempelsvar

{
  "data": {
    "token_ApplyToken2": {
      "idToken": "",
      "accessToken": "",
      "refreshToken": ""
    }
  }
}
Query token_RefreshToken Fornyer tokens med refresh-token, uten ny innlogging.

Parametre

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

Svar

idToken: String
accessToken: String
refreshToken: String

Merknader

  • accessToken er gyldig i 60 minutter. refreshToken er gyldig i 90 dager.
  • Er refreshToken utløpt, må du hente et helt nytt sett med token_ApplyToken2.

Eksempel

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

Eksempelsvar

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

Feilprediksjon

Predikerte feil og vedlikeholdsbehov basert på registreringsnummer og kilometerstand.

Sandbox krever innlogging. Ta kontakt, så får du testinnhold.

API-type GraphQL
Staging https://test.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1
Produksjon https://bus2.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1
Query busData_GetDefectPredictions Returnerer predikerte feil for et kjøretøy, med sannsynlighet og forklaring per feil.

Parametre

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

Svar

result: DefectPredictionOutput

Merknader

  • requestId fra svaret brukes som originalRequestId i busData_RecordUserFeedback.

Eksempel

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

Eksempelsvar

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

Tilbakemelding

Registrer om prediksjonen traff, og hent årsakene som kan oppgis.

Sandbox krever innlogging. Ta kontakt, så får du testinnhold.

API-type GraphQL
Staging https://test.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1
Produksjon https://bus2.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1
Query busData_GetUserFeedbackReasons Lister årsakene en bruker kan oppgi når en prediksjon ikke stemte.

Parametre

requestId: String?

Merknader

  • userFeedbackReasonId brukes som verdi i userFeedbackReasons på busData_RecordUserFeedback.

Eksempel

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

Eksempelsvar

{
  "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 Registrerer tilbakemelding på en tidligere prediksjon.

Parametre

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

Eksempel

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

Eksempelsvar

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

Datamodeller

Typene som brukes i parametre og 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-referanse. Test, takst og tilstandsrapport

Alle metoder i Test-API-et, gruppert etter bruk. Åpne en metode for å se parametre, svar og et eksempel du kan kjøre.

Autentisering

Alle kall sender to headere: Authorization: Bearer <accessToken> og x-api-key: <apiKey>. API-nøkkelen er en egen, lengelevd nøkkel du får fra oss. Sandbox-nøkler får du ved å ta kontakt. Her henter og fornyer du tokens.

Sandbox krever innlogging. Ta kontakt, så får du testinnhold.

API-type GraphQL
Staging https://test.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1
Produksjon https://bus2.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1
Query token_ApplyToken2 Henter id-, access- og refresh-token for en bruker og en applikasjon.

Parametre

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

Svar

idToken: String
accessToken: String
refreshToken: String

Merknader

  • accessToken er gyldig i 60 minutter. refreshToken er gyldig i 90 dager.
  • For å fornye: bruk token_RefreshToken med refreshToken. Ikke kall token_ApplyToken2 på nytt for hver utløpning.
  • Er refreshToken utløpt, må du hente et helt nytt sett med token_ApplyToken2.

Eksempel

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

Eksempelsvar

{
  "data": {
    "token_ApplyToken2": {
      "idToken": "",
      "accessToken": "",
      "refreshToken": ""
    }
  }
}
Query token_RefreshToken Fornyer tokens med refresh-token, uten ny innlogging.

Parametre

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

Svar

idToken: String
accessToken: String
refreshToken: String

Merknader

  • accessToken er gyldig i 60 minutter. refreshToken er gyldig i 90 dager.
  • Er refreshToken utløpt, må du hente et helt nytt sett med token_ApplyToken2.

Eksempel

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

Eksempelsvar

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

Takster

Opprett, hent, oppdater og list takster, med kjøretøydata, leasingdata og rapporter. Eksemplene under bruker registreringsnummer og ID-er som finnes i testmiljøet. Ta kontakt når du ber om testinnlogging, så får du testdata som passer til din konto.

Sandbox krever innlogging. Ta kontakt, så får du testinnhold.

API-type GraphQL
Staging https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Produksjon https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Mutation Test_CreateTest Oppretter en ny takst for et kjøretøy. Returnerer takst-ID.

Parametre

vehicleDataModel: VehicleDataModel!
testDataModel: TestDataModel!

Påkrevd

  • testTypeIds
  • unitId
  • regNo / vin

Svar

result: Int

Eksempel

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

Eksempelsvar

{
  "data": {
    "test_CreateTest": 54
  }
}
Mutation testData_CreateLeaseData Legger leasingdata på en takst: produkttype, innkjøpspris, avtalereferanse og mer.

Parametre

testId: Int!
leaseDataModel: LeaseDataModel!

Svar

result: Boolean

Eksempel

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

Eksempelsvar

{
  "data": {
    "testData_CreateLeaseData": true
  }
}
Mutation testData_CreateLeaseUserData Legger leasingkunde og kontaktpersoner på en takst: flåteansvarlig, sjåfør og mer.

Parametre

testId: Int!
leaseUserDataModel: LeaseUserDataModel!

Svar

result: Boolean

Eksempel

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

Eksempelsvar

{
  "data": {
    "testData_CreateLeaseUserData": true
  }
}
Query Test_GetTest Henter en takst med status, kilometerstand og servicehistorikk.

Parametre

testId: Int!

Svar

result: TestDataModel

Merknader

  • Lokaliserte tekstfelt som testStatus og sjekkpunktnavn returneres på kalleren sin kultur. Kulturen hentes fra tokenets culture-claim, og faller tilbake på Accept-Language. Eksempelet er hentet med svensk kultur.

Eksempel

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

Eksempelsvar

{
  "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 Henter bilder og filer som hører til en takst.

Parametre

testId: Int!

Svar

result: [TestFileModel]

Eksempel

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

Eksempelsvar

{
  "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 Henter kjøretøydata: registreringsnummer, understellsnummer, utstyr og pakker.

Parametre

testId: Int!

Svar

result: VehicleDataModel

Eksempel

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

Eksempelsvar

{
  "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 Henter leasingdata for en takst.

Parametre

testId: Int!

Svar

result: LeaseDataModel

Eksempel

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

Eksempelsvar

{
  "data": {
    "testData_GetLeaseData": {
      "productType": null,
      "purchasePrice": null,
      "quotationTemplate": null,
      "repairMaintenance": null,
      "transportDate": null,
      "winterTires": null
    }
  }
}
Query testData_GetLeaseUserData Henter leasingkunde og kontaktpersoner for en takst.

Parametre

testId: Int!

Svar

result: LeaseUserDataModel

Eksempel

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

Eksempelsvar

{
  "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 Lister enhetene du har tilgang til.

Svar

result: [UnitModel]

Eksempel

query{
  unit_GetAccessibleUnits
  {
    unitId
    unitName
  }
}

Eksempelsvar

{
  "data": {
    "unit_GetAccessibleUnits": [
      {
        "unitId": 1,
        "unitName": "Test unit"
      }
    ]
  }
}
Query TestType_GetTestTypes Lister tilgjengelige taksttyper for en enhet.

Parametre

unitId: Int!
vin: String

Svar

result: [TestTypeModel]

Eksempel

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

Eksempelsvar

{
  "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 Oppdaterer en eksisterende takst.

Parametre

testDataModel: TestDataModel!

Påkrevd

  • testDataModel.testId

Svar

result: TestDataModel

Eksempel

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

Eksempelsvar

SalesReport_CreateSalesReportFromSource
Query Test_GetAllTests Søkbar og sorterbar liste over alle takster, med filtre og paginering.

Parametre

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

Svar

result: TestListModel

Merknader

  • Siden pagineres med skip og take. Standard take er 50, og standard skip er 0. Det er ingen øvre grense.
  • Sorterbare felt: regno, vehicleMake, vehicleModel, vin, completedDate, createdDate, performedDate, performedBy, testTypes, isObdPerformed, testStatus, testAnnotations.
  • searchTerm treffer bare når teksten starter med RegNo eller TestAnnotations.
  • timeZoneOffset sendes som minutter og er differansen mellom UTC-tid og klienttid (UTC − klienttid). Er svensk tid +1 GMT, send -1 for å treffe riktig dag.

Eksempel

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 Samme som over, men bare pågående takster.

Parametre

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

Svar

result: TestListModel

Merknader

  • Siden pagineres med skip og take. Standard take er 50, og standard skip er 0. Det er ingen øvre grense.
  • Sorterbare felt: regno, vehicleMake, vehicleModel, vin, completedDate, createdDate, performedDate, performedBy, testTypes, isObdPerformed, testStatus, testAnnotations.
  • searchTerm treffer bare når teksten starter med RegNo eller TestAnnotations.
  • timeZoneOffset sendes som minutter og er differansen mellom UTC-tid og klienttid (UTC − klienttid). Er svensk tid +1 GMT, send -1 for å treffe riktig dag.

Eksempel

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 Henter lenker til tilstandsrapportene for en takst, også som PDF.

Parametre

testId: Int!

Påkrevd

  • int testId

Svar

result: [ReportModel]

Eksempel

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

Eksempelsvar

{
  "data": {
    "test_GetTestReports": [
      {
        "testTypeId": 2,
        "testType": "Test utan kostnader",
        "shortenedReportURL": "https://lnkt.bus.no/8049d5ll2"
        "shortenedPdfReportURL": "https://lnkt.bus.no/41181Ruhpp"
      }
    ]
  }
}
Query test_GetGeneralInfo Henter generell informasjon om kjøretøyet: nøkler, ladekabel, tidligere bruk og mer.

Parametre

testId: Int!

Svar

result: GeneralInfoModel

Merknader

  • Les gjeldende verdier før du oppdaterer. test_GetGeneralInfoMetaData gir de forhåndsdefinerte nøkkelverdiene.

Eksempel

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

Eksempelsvar

{ "data": { "test_GetGeneralInfo": { "masterKeyCount": 2, "chargingCableCount": 1, "previousUseId": 3, "hasPreviousDamage": false, "vehicleKeyTypes": [ { "key": 1, "value": "Remote key" } ], "chargingCableTypes": [] } } }
Mutation test_UpdateGeneralInfo Oppdaterer den generelle informasjonen om kjøretøyet.

Parametre

testId: Int!
generalInfoModel: GeneralInfoModel!

Svar

result: Boolean

Merknader

  • Les–endre–skriv: send hele modellen. Tomme lister for vehicleKeyTypes eller chargingCableTypes avvises; en tom liste sletter de eksisterende typene.

Eksempel

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

Eksempelsvar

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

Salgsrapporter

Salgsrapporter bygget på takstene, med delingslenker og avslutning.

Sandbox krever innlogging. Ta kontakt, så får du testinnhold.

API-type GraphQL
Staging https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Produksjon https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Mutation SalesReport_CreateSalesReportFromSource Oppretter en salgsrapport fra en eksisterende takst eller et kjøretøy.

Parametre

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

Påkrevd

  • string regNo
  • int testRunId or int unitId

Svar

result: Int

Eksempel

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

Eksempelsvar

{
  "data": {
    "salesReport_CreateSalesReportFromSource": 764
  }
}
Query SalesReport_GetSalesReportShareMetaData Henter delingslenker til salgsrapport og VDN-rapport, og PDF-nedlasting.

Parametre

salesReportId: Int!

Påkrevd

  • int salesReportId

Merknader

  • salesReportPdfDownloadSasUrl er bare tilgjengelig for eksterne partnere.

Eksempel

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

Eksempelsvar

{
  "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 og sorterbar liste over alle salgsrapporter.

Parametre

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

Svar

result: SalesReportListModel

Merknader

  • Siden pagineres med skip og take. Standard take er 50, og standard skip er 0. Det er ingen øvre grense.
  • Sorterbare felt: regno, vehicleMake, vehicleModel, vin, completedDate, salesReportStatus, createdDate, performedBy
  • searchTerm treffer bare når teksten starter med RegNo.
  • timeZoneOffset sendes som minutter og er differansen mellom UTC-tid og klienttid (UTC − klienttid). Er svensk tid +1 GMT, send -1 for å treffe riktig dag.

Eksempel

query {
  salesReport_GetAllSalesReports(searchTerm: "WBS99A") {
            salesReports {
                salesReportId
                salesReportStatus
                salesReportStatusId
                regno
                vehicleMake
                vehicleModel
                vin
                createdDate
                completedDate
            }
            totalSalesReports
        }
    }
Query SalesReport_GetActiveSalesReports Samme som over, men bare aktive salgsrapporter.

Parametre

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

Svar

result: SalesReportListModel

Merknader

  • Siden pagineres med skip og take. Standard take er 50, og standard skip er 0. Det er ingen øvre grense.
  • Sorterbare felt: regno, vehicleMake, vehicleModel, vin, completedDate, salesReportStatus, createdDate, performedBy
  • searchTerm treffer bare når teksten starter med RegNo.
  • timeZoneOffset sendes som minutter og er differansen mellom UTC-tid og klienttid (UTC − klienttid). Er svensk tid +1 GMT, send -1 for å treffe riktig dag.

Eksempel

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

Parametre

salesReportData: SalesReportDataModel!

Påkrevd

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

Svar

result: SalesReportDataModel

Eksempel

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

Eksempelsvar

{
  "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 Avslutter en salgsrapport og sender den på e-post eller SMS.

Parametre

salesReportConcludeModel: SalesReportConcludeModel!

Påkrevd

  • salesReportConcludeModel.salesReportId
  • salesReportConcludeModel.sendSalesReportEmailSMSModel

Svar

result: Boolean

Merknader

  • sendSalesReportEmailSMSModel er påkrevd, og de genererte delelenkene lagres på den. Tomme lister for e-post, nummer og rapporttyper sender ingenting. Enhetskonfigurerte mottakere legges til ved avslutning. Åpne avvik blokkerer ikke avslutning.

Eksempel

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

Eksempelsvar

{ 
"data": 
           { 
                "salesReport_ConcludeSalesReport": true 
           }
 }
Mutation salesReport_AddSalesReportImages Legger bilder til en salgsrapport, med valgfritt forsidebilde.

Parametre

salesReportId: Int!
images: [SalesReportImageInputModel]!

Eksempel

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

Avvik og skader

Avvik og skader registrert på en takst, med bilder.

Sandbox krever innlogging. Ta kontakt, så får du testinnhold.

API-type GraphQL
Staging https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Produksjon https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Query Defect_GetTestDefects Henter registrerte avvik og skader på en takst.

Parametre

testId: Int!

Svar

result: [TestDefectModel]

Merknader

  • TotalCost er eksklusiv mva. Grensesnittet kan vise beløpet inklusiv mva.

Eksempel

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

Eksempelsvar

{
  "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 Henter bilder og filer knyttet til avvikene på en takst.

Parametre

testId: Int!

Svar

result: [TestDefectFileModel]

Eksempel

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

Eksempelsvar

{
  "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 Oppdaterer et avvik på en takst og dets salgsrapport.

Parametre

testId: Int!
defectFormData: TestDefectModel!

Svar

result: TestDefectModel

Eksempel

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

Eksempelsvar

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

Arbeidsordre

Arbeidsordre og jobber for verkstedflyten.

Sandbox krever innlogging. Ta kontakt, så får du testinnhold.

API-type GraphQL
Staging https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Produksjon https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Mutation workOrder_CreateWorkOrder Oppretter en arbeidsordre for et kjøretøy, med eller uten tilknyttet takst.

Parametre

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

Påkrevd

  • testRunId (optional for standalone work order)

Svar

result: Int

Merknader

  • Med testRunId må testen være avsluttet, og det lages én jobb per avvik. Uten testRunId opprettes en frittstående arbeidsordre.

Eksempel

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

Eksempelsvar

{ 
"data": 
     {
          "workOrder_CreateWorkOrder": 1773
     }
 }
Mutation workOrder_CreateWorkOrderJob Legger en jobb til en arbeidsordre.

Parametre

workOrderJobModel: WorkOrderJobModel!

Påkrevd

  • workOrderJobModel (workOrderId and job details)

Svar

result: WorkOrderJobModel

Eksempel

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

Eksempelsvar

{ 
"data":
         { "workOrder_CreateWorkOrderJob": { 
                           "workOrderJobId": 28584, "jobName": "Replace wiper blades"
                   }
          }
 }
Mutation workOrder_AddStandardJobsToWorkOrderCycle Legger standardjobber til en arbeidsordre.

Parametre

workOrderId: Int!
standardJobIds: [Int]!

Svar

result: [WorkOrderJobModel]

Eksempel

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

Eksempelsvar

{ 
"data": 
            { "workOrder_AddStandardJobsToWorkOrderCycle":
                            [ { "workOrderJobId": 28585, "jobName": "Standard service" } ] 
            }
 }
Query workOrder_GetWorkOrderJobList Henter alle jobbene på en arbeidsordre.

Parametre

workOrderId: Int!

Svar

result: WorkOrderJobListModel

Merknader

  • workOrderJobStatus er et nestet objekt. Bruk jobbidentitetene du får her når du setter status.

Eksempel

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

Eksempelsvar

{ 
"data":
                { "workOrder_GetWorkOrderJobList":
                                              { "count": 2, "workOrderJobs": [ 
                                                                  { "workOrderJobId": 28581, "jobName": "Defect job", "workOrderJobStatus": { "workOrderJobStatusId": 3,                             "workOrderJobStatusName": "Done" }, "testDefect": { "testDefectId": 3444 } } 
                                                             ]
                                                }
                  }
 }
Mutation workOrder_UpdateWorkOrderJobStatus Setter ny status på en eller flere jobber.

Parametre

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

Merknader

  • Done vises som rettet på salgsrapporten, Open som fortsatt avvik. Arbeidsordrestatusen holdes i synk.

Eksempel

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

Eksempelsvar

{ "data": { "workOrder_UpdateWorkOrderJobStatus": { "workOrderStatusId": 2, "workOrderStatusName": "InProgress", "updatedJobs": [ { "workOrderJobId": 28581, "workOrderJobStatusId": 3, "workOrderJobStatusName": "Done" } ] } } }
Query workOrder_GetStandardJobsForWorkOrder Lister standardjobber som kan knyttes til en arbeidsordre.

Parametre

workOrderId: Int!

Svar

result: [StandardJobModel]

Eksempel

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

Eksempelsvar

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

Parametre

unitId: Int!

Svar

result: StandardJobsGridModel

Eksempel

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

Eksempelsvar

{
  "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 Lister testkjøringer som kvalifiserer til å bli en arbeidsordre for et registreringsnummer.

Parametre

regNo: String!
unitId: Int!

Eksempel

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

Eksempelsvar

{
  "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 Lister alle arbeidsordrer. Søkbar, sorterbar og sideinndelt.

Parametre

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

Svar

result: WorkOrderListModel

Merknader

  • Siden pagineres med skip og take. Standard take er 50, og standard skip er 0. Det er ingen øvre grense.
  • timeZoneOffset sendes som minutter og er differansen mellom UTC-tid og klienttid (UTC − klienttid). Er svensk tid +1 GMT, send -1 for å treffe riktig dag.

Eksempel

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

Eksempelsvar

{
  "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 Lister arbeidsordrer som ikke er avsluttet.

Parametre

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

Svar

result: WorkOrderListModel

Merknader

  • Siden pagineres med skip og take. Standard take er 50, og standard skip er 0. Det er ingen øvre grense.
  • timeZoneOffset sendes som minutter og er differansen mellom UTC-tid og klienttid (UTC − klienttid). Er svensk tid +1 GMT, send -1 for å treffe riktig dag.

Eksempel

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

Eksempelsvar

{
  "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 Avslutter en arbeidsordre.

Parametre

workOrderId: Int!

Svar

result: Boolean

Eksempel

mutation{
  workOrder_ConcludeWorkOrder(workOrderId: 1832)
}

Eksempelsvar

{
  "data": {
    "workOrder_ConcludeWorkOrder": true
  }
}
Mutation workOrder_ReopenWorkOrder Gjenåpner en avsluttet arbeidsordre.

Parametre

workOrderId: Int!

Svar

result: Boolean

Eksempel

mutation{
  workOrder_ReopenWorkOrder(workOrderId: 1832)
}

Eksempelsvar

{
  "data": {
    "workOrder_ReopenWorkOrder": true
  }
}
Mutation workOrder_DeleteWorkOrder Sletter en arbeidsordre.

Parametre

workOrderId: Int!

Svar

result: Boolean

Eksempel

mutation{
  workOrder_DeleteWorkOrder(workOrderId: 1824)
}

Eksempelsvar

{
  "data": {
    "workOrder_DeleteWorkOrder": true
  }
}
Query workOrder_GetWorkOrder Henter én arbeidsordre.

Parametre

workOrderId: Int!

Svar

result: WorkOrderDataModel

Eksempel

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

Eksempelsvar

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

Filer

REST-endepunkter for å hente bilder og dokumenter.

Sandbox krever innlogging. Ta kontakt, så får du testinnhold.

API-type REST
Staging https://test.bus.no/BUSPlatform3/RestAPIServers.FileServer/api
Produksjon 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.

Parametre

mediaId: String!
useRedirect: Boolean

Svar

Actual file

Eksempel

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.

Parametre

mediaId: String!

Svar

sasUrl expiresOn

Eksempel

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

Sanntid

Abonner på hendelser i sanntid når en takst avsluttes.

Sandbox krever innlogging. Ta kontakt, så får du testinnhold.

API-type GraphQL
Staging wss://test.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.ExternalEndpoint1
Produksjon wss://bus2.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.ExternalEndpoint1
Subscription Test_OnTestConclude Gir beskjed i sanntid når en takst er avsluttet.

Parametre

testId: Int!

Svar

result: TestDataModel

Merknader

  • Lokaliserte tekstfelt som testStatus og sjekkpunktnavn returneres på kalleren sin kultur. Kulturen hentes fra tokenets culture-claim, og faller tilbake på Accept-Language. Eksempelet er hentet med svensk kultur.

Eksempel

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

Eksempelsvar

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

Registrer en webhook og motta hendelser på din egen URL. B.U.S. sender ett POST-kall med JSON per hendelse, og godtar enhver 2xx som kvittering.

Sandbox krever innlogging. Ta kontakt, så får du testinnhold.

API-type GraphQL
Staging https://test.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.InternalApp
Produksjon https://bus2.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.InternalApp
Mutation notification_SubscribeWebhook Registrerer en webhook, generelt eller for én enhet. Returnerer et secret som B.U.S. legger i hver varselpayload, slik at du kan bekrefte at varselet kommer fra oss.

Parametre

webhookRegisterModel: WebhookRegisterModel (url, eventTypeId, unitId?)

Påkrevd

  • url
  • eventTypeId

Svar

secret: String

Merknader

  • Hver levering er ett POST-kall med JSON. På 2xx regnes varselet som levert; andre svar logges som feil og sendes ikke på nytt.

Eksempel

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

Eksempelsvar

{
  "data": {
    "notification_SubscribeWebhook": {
      "secret": "…"
    }
  }
}
Mutation notification_UnsubscribeWebhook Fjerner en registrert webhook.

Parametre

eventTypeId: Int!
unitId: Int?

Svar

result: Boolean

Eksempel

mutation{
  notification_UnsubscribeWebhook(eventTypeId:  1, unitId: 5147)
}
Webhook TestConcluded Varselet B.U.S. sender til webhooken din når en takst er avsluttet.

Svar

EventName, Data (TestDataModel), Secret

Merknader

  • Hver levering er ett POST-kall med JSON. På 2xx regnes varselet som levert; andre svar logges som feil og sendes ikke på nytt.

Eksempel

{
  "EventName": "TestConcluded",
  "Data": { "TestId": 34626, "UnitId": 5147, "Mileage": 3234, "…": "…" },
  "Secret": "…"
}
Webhook TestDeleted Varselet B.U.S. sender til webhooken din når en takst slettes.

Svar

EventName, Data (TestDataModel), Secret

Merknader

  • Hver levering er ett POST-kall med JSON. På 2xx regnes varselet som levert; andre svar logges som feil og sendes ikke på nytt.

Eksempel

{
  "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 Varselet B.U.S. sender til webhooken din når en arbeidsordre avsluttes.

Svar

EventName, Data (WorkOrderDataModel), Secret

Merknader

  • Hver levering er ett POST-kall med JSON. På 2xx regnes varselet som levert; andre svar logges som feil og sendes ikke på nytt.

Eksempel

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

Typene som brukes i parametre og 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.-shoppen

Bygget en integrasjon som er nyttig for verksteder eller forhandlere? Gjør den tilgjengelig i B.U.S.-shoppen. Markedsplassen der B.U.S.-kunder finner og aktiverer integrasjoner. Din integrasjon når tre av fire verksteder i Norge, uten egen salgsorganisasjon.

Teknisk

AutentiseringBearer token. Sandbox-credentials på forespørsel, produksjon etter godkjenning.
FormatGraphQL.
Rate limitsUbegrenset i sandbox. Ingen fast grense i produksjon i dag. Ved misbruk kan kontoen bli stengt, og tjenesten kan svare med 429 (Too Many Requests).
WebhooksSanntidshendelser. Ny kontroll, oppdatert takst, statusendring. Velg hvilke events du abonnerer på.
EndringerVi innfører ikke brytende endringer. Nye behov dekkes med nye metoder, og eksisterende metoder og felt endres ikke så lenge de er i bruk. Nye metoder og valgfrie felt kan komme til underveis. Endringer varsles på e-post til teknisk kontakt.
SkjemaIntrospeksjon er slått på. Du kan hente hele skjemaet med introspeksjonsspørringen mot endepunktet, eller lese det i GraphQL-sandboxen. Hvert API har sitt eget skjema - Test-API-et og Oscar Inspector er separate endepunkter. Skjemaet genereres ved bygg, så det er alltid i takt med tjenesten.

FAQ

Hvilke språk/SDK-er støttes?

GraphQL-basert. Fungerer med alle språk som kan sende HTTP-requests. Velg selv hvilke felter du vil ha tilbake.

Hva koster det?

Sandbox er gratis. Prising for produksjonstilgang avhenger av bruk.

Klar til å bygge?

Utforsk API-katalogen, eller snakk med en utvikler hos oss.