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.
Så kommer du igång
-
Se vad som finns
API-katalogen visar tillgängliga endpoints med dokumentation och exempel.
-
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.
-
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 APITest. 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:etFler 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 | https://test.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Tool |
|---|
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 | https://test.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.Tool/ |
|---|
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 | https://test.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.Tool/ |
|---|
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? Svar
result: UserFeedbackReasonOutput 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? Svar
result: RecordUserFeedbackOutput 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 | https://test.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Tool |
|---|
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.
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
Svar
result: SalesReportShareMetaDataModel 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]! Svar
result: [SalesReportImageResultModel] 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! Svar
result: WorkOrderStatusUpdateResult 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! Svar
result: WorkOrderCreationTestRunListModel 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 SalesReportFilterModel
CompletedDate: KeyValueModel
Status: [KeyValueModel]
PerformedBy: [KeyValueModel]
CreatedDate: KeyValueModel WorkOrderFilterModel
CreatedDate: KeyValueModel
CompletedDate: KeyValueModel
SharedStatus: KeyValueModel
Status: [KeyValueModel]
WorkOrderUnit: [KeyValueModel]
Unit: [Int] SalesReportListModel
SalesReports: [SalesReportGridInformationModel]
TotalSalesReports: Int SalesReportGridInformationModel
SalesReportId: Int
SalesReportStatus: String
SalesReportStatusId: Int?
Regno: String
VehicleMake: String
VehicleModel: String
Vin: String
CreatedDate: DateTime
CompletedDate: DateTime? WorkOrderJobModel
WorkOrderJobId
WorkOrderId
WorkOrderJobTypeId
JobName
WorkOrderJobStatus: WorkOrderJobStatusModel
IsShared
IsSentToSupplier
ExternalCost
RepairCost
Supplier
TestDefect
Comment
StandardJob
StartDate
CompletionDate WorkOrderJobListModel
Count
WorkOrderJobs: [WorkOrderJobModel] WorkOrderStatusUpdateResult
WorkOrderStatusId
WorkOrderStatusName
UpdatedJobs: [WorkOrderJobStatusModel] WorkOrderJobStatusModel
WorkOrderJobId
WorkOrderJobStatusId
IsSentToSupplier
WorkOrderJobStatusName GeneralInfoModel
MasterKeyCount
ChargingCableCount
PreviousUseId
HasPreviousDamage
IsLuggageCoverAvailable
IsTemperatureMeasured
TemperatureInside
TemperatureOutside
ACTestSkipReasonId
LocknutsAvailabilityStatusId
NextServiceDate
VehicleKeyTypes
ChargingCableTypes SalesReportConcludeModel
SalesReportId
SendSalesReportEmailSMSModel SendSalesReportEmailSMSModel
SalesReportId
SalesReportTypes
Emails
Numbers
Description
ShortenedSalesReportLinkURL
ShortenedVDNReportLinkURL
ShortenedSalesReportPdfURL
SalesReportPdfDownloadSasUrl StandardJobModel
StandardJobId: Int
StandardJobStatusId: Int
ParentStandardJobId: Int?
JobName: String
Cost: Decimal?
IsTaxInclude: Boolean
IsIncludedInCycle: Boolean
SupplierName: String WorkOrderCreationTestRunListModel
Items: [WorkOrderCreationTestRunModel] WorkOrderCreationTestRunModel
TestId: Int?
TestRunId: Int
WorkOrderId: Int?
TestTypeNames: [String]
TestRunStatuses: TestRunStatusesModel
Mileage: Int
Date: DateTime
UnitName: String TestRunStatusesModel
TestStatus: KeyValuePair<Int, String>?
WorkOrderStatus: KeyValuePair<Int, String>?
SalesReportStatus: KeyValuePair<Int, String>?
PreTestStatus: KeyValuePair<Int, String>? WorkOrderListModel
WorkOrders: [WorkOrderGridInformationModel]
TotalWorkOrders: Int WorkOrderGridInformationModel
TestId: Int
WorkOrderId: Int
WorkOrderStatus: String
Regno: String
VehicleMake: String
VehicleModel: String
Vin: String
CreatedDate: DateTime
CompletedDate: DateTime?
UnitId: Int
UnitName: String SalesReportImageResultModel
FileName: String
IsSuccess: Boolean
Reason: String
AttachmentOrder: Int? SalesReportImageInputModel
Url: String
FileName: String
IsCover: Boolean WorkOrderDataModel
WorkOrderId: Int
TestId: Int
TestRunId: Int?
UnitId: Int
Mileage: Int?
JobsStartDate: DateTime?
JobsCompletionDate: DateTime?
WorkOrderStatusId: Int?
RegNo: String? StandardJobsGridModel
StandardJobs: [StandardJobModel]
TotalStandardJobs: Int 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
| Autentisering | Bearer token. Sandbox-credentials på begäran, produktion efter godkännande. |
|---|---|
| Format | GraphQL. |
| Rate limits | Obegrä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). |
| Webhooks | Realtidshändelser. Ny värdering, uppdaterad tillståndsrapport, statusändring. |
| Ändringar | Vi 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. |
| Schema | Introspektion ä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.