Đăng nhập Đặt lịch demo

Nhà phát triển

API cho ngành ô tô

Nền tảng B.U.S. cung cấp các API cho kiểm định xe, định giá xe, đảm bảo chất lượng và phân tích xe dựa trên AI. Sandbox mở với dữ liệu thử nghiệm và tài liệu OpenAPI cho các endpoint REST. Liên hệ với chúng tôi, chúng tôi sẽ gửi thông tin đăng nhập.

Phát triển tại B.U.S.

Cách bắt đầu

  1. Xem những gì có sẵn

    Danh mục API hiển thị các endpoint khả dụng cùng tài liệu và ví dụ.

  2. Xây dựng trong sandbox

    Môi trường sandbox mở với dữ liệu thử nghiệm thực tế. Liên hệ với chúng tôi, chúng tôi sẽ gửi tên đăng nhập, mật khẩu và khóa API để bạn thử nghiệm. Miễn phí.

  3. Chuyển sang production

    Khi bạn đã sẵn sàng, hãy gửi email tới support@bus.no kèm thông tin công ty, mục đích sử dụng API và khối lượng dự kiến. Việc phê duyệt mất hai ngày làm việc. Chúng tôi xác thực cấu hình và cấp khóa production cho bạn.

Danh mục API

GraphQL. Predikerte feil for et kjøretøy

Oscar Inspector. Thông tin chi tiết về xe nhờ AI

Dự đoán các lỗi và nhu cầu bảo dưỡng dựa trên hãng, mẫu xe và số km đã đi. Được xây dựng trên hơn 20 triệu đợt kiểm định thực tế. API-first, khả dụng ở mọi thị trường, và là API nhanh nhất để bắt đầu. Được sử dụng bởi các công ty bảo hiểm, sàn giao dịch, công ty cho thuê tài chính và hệ thống xưởng dịch vụ.

PKK. Kiểm định xe định kỳ

Kết quả kiểm định, mã lỗi, lịch sử và trạng thái tái kiểm định. Nền tảng dữ liệu bao phủ 75 % thị trường Na Uy.

Test. Dữ liệu định giá và tình trạng xe

Đánh giá hư hỏng, chi phí sửa chữa, giá phụ tùng và báo cáo tình trạng xe. Được sử dụng để hỗ trợ bán hàng, đánh giá bảo hành và mô hình định giá.

Xem tất cả các phương thức trong API Test

Đảm bảo chất lượng

Kiểm soát nội bộ, xử lý sai lệch, kiểm soát thiết bị và hiệu chuẩn. Phù hợp cho tuân thủ và kiểm toán.

Thêm API

Danh mục được mở rộng liên tục.

Oscar Inspector API

Dự đoán lỗi do AI hỗ trợ cho một xe. Dùng cùng cách xác thực như Test API: dùng applicationId 5 khi lấy token bằng token_ApplyToken2. Oscar Inspector có endpoint và schema riêng, tách biệt với Test API. Các ví dụ thể hiện truy vấn; câu trả lời phụ thuộc vào xe.

Xác thực

Mỗi lần gọi gửi hai header: Authorization: Bearer <accessToken> và x-api-key: <apiKey>. Khóa API là một khóa riêng, tồn tại lâu dài do chúng tôi cấp. Khóa sandbox có được khi bạn liên hệ với chúng tôi. Đây là nơi bạn lấy và gia hạn token.

Sandbox yêu cầu đăng nhập. Hãy liên hệ để nhận nội dung kiểm thử.

Loại API GraphQL
Staging https://test.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1
Môi trường sản xuất https://bus2.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1
Query token_ApplyToken2 Lấy ID token, access token và refresh token cho một người dùng và một ứng dụng.

Tham số

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

Phản hồi

idToken: String
accessToken: String
refreshToken: String

Ghi chú

  • Oscar Inspector yêu cầu applicationId 5. Test API dùng applicationId khác.
  • accessToken có hiệu lực 60 phút. refreshToken có hiệu lực 90 ngày.
  • Để gia hạn: dùng token_RefreshToken với refreshToken. Không gọi lại token_ApplyToken2 mỗi lần hết hạn.
  • Nếu refreshToken đã hết hạn, bạn phải lấy một bộ hoàn toàn mới bằng token_ApplyToken2.

Ví dụ

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

Phản hồi ví dụ

{
  "data": {
    "token_ApplyToken2": {
      "idToken": "",
      "accessToken": "",
      "refreshToken": ""
    }
  }
}
Query token_RefreshToken Làm mới token bằng refresh token, không cần đăng nhập lại.

Tham số

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

Phản hồi

idToken: String
accessToken: String
refreshToken: String

Ghi chú

  • accessToken có hiệu lực 60 phút. refreshToken có hiệu lực 90 ngày.
  • Nếu refreshToken đã hết hạn, bạn phải lấy một bộ hoàn toàn mới bằng token_ApplyToken2.

Ví dụ

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

Phản hồi ví dụ

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

Dự đoán lỗi

Lỗi và nhu cầu bảo dưỡng được dự đoán dựa trên biển số và số km đã đi.

Sandbox yêu cầu đăng nhập. Hãy liên hệ để nhận nội dung kiểm thử.

Loại API GraphQL
Staging https://test.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1
Môi trường sản xuất https://bus2.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1
Query busData_GetDefectPredictions Trả về các lỗi được dự đoán cho một xe, kèm xác suất và giải thích cho từng lỗi.

Tham số

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

Phản hồi

result: DefectPredictionOutput

Ghi chú

  • requestId trong câu trả lời được dùng làm originalRequestId trong busData_RecordUserFeedback.

Ví dụ

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

Phản hồi ví dụ

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

Phản hồi

Ghi nhận dự đoán có đúng hay không và lấy các lý do có thể nêu.

Sandbox yêu cầu đăng nhập. Hãy liên hệ để nhận nội dung kiểm thử.

Loại API GraphQL
Staging https://test.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1
Môi trường sản xuất https://bus2.bus.no/BUSPlatform3/BUSDataPortal/BUS.APIs.GraphQLServer.P3.BUSDataPortal.ExternalEndpoint1
Query busData_GetUserFeedbackReasons Liệt kê các lý do người dùng có thể nêu khi dự đoán không đúng.

Tham số

requestId: String?

Phản hồi

result: UserFeedbackReasonOutput

Ghi chú

  • userFeedbackReasonId được dùng làm giá trị trong userFeedbackReasons ở busData_RecordUserFeedback.

Ví dụ

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

Phản hồi ví dụ

{
  "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 Ghi nhận phản hồi về một dự đoán trước đó.

Tham số

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

Phản hồi

result: RecordUserFeedbackOutput

Ví dụ

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

Phản hồi ví dụ

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

Mô hình dữ liệu

Các kiểu được sử dụng trong tham số và phản hồi.

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]

Tài liệu tham khảo API. Test, định giá xe và báo cáo tình trạng xe

Tất cả các phương thức trong API Test, được nhóm theo mục đích sử dụng. Mở một phương thức để xem tham số, phản hồi và một ví dụ bạn có thể chạy.

Xác thực

Mỗi lần gọi gửi hai header: Authorization: Bearer <accessToken> và x-api-key: <apiKey>. Khóa API là một khóa riêng, tồn tại lâu dài do chúng tôi cấp. Khóa sandbox có được khi bạn liên hệ với chúng tôi. Đây là nơi bạn lấy và gia hạn token.

Sandbox yêu cầu đăng nhập. Hãy liên hệ để nhận nội dung kiểm thử.

Loại API GraphQL
Staging https://test.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1
Môi trường sản xuất https://bus2.bus.no/BUSPlatform3/SecurityPortal/BUS.APIs.GraphQLServer.P3.SecurityPortal.Endpoint1
Query token_ApplyToken2 Lấy ID token, access token và refresh token cho một người dùng và một ứng dụng.

Tham số

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

Phản hồi

idToken: String
accessToken: String
refreshToken: String

Ghi chú

  • accessToken có hiệu lực 60 phút. refreshToken có hiệu lực 90 ngày.
  • Để gia hạn: dùng token_RefreshToken với refreshToken. Không gọi lại token_ApplyToken2 mỗi lần hết hạn.
  • Nếu refreshToken đã hết hạn, bạn phải lấy một bộ hoàn toàn mới bằng token_ApplyToken2.

Ví dụ

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

Phản hồi ví dụ

{
  "data": {
    "token_ApplyToken2": {
      "idToken": "",
      "accessToken": "",
      "refreshToken": ""
    }
  }
}
Query token_RefreshToken Làm mới token bằng refresh token, không cần đăng nhập lại.

Tham số

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

Phản hồi

idToken: String
accessToken: String
refreshToken: String

Ghi chú

  • accessToken có hiệu lực 60 phút. refreshToken có hiệu lực 90 ngày.
  • Nếu refreshToken đã hết hạn, bạn phải lấy một bộ hoàn toàn mới bằng token_ApplyToken2.

Ví dụ

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

Phản hồi ví dụ

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

Bản định giá xe

Tạo, đọc, cập nhật và liệt kê các đợt định giá, kèm dữ liệu xe, dữ liệu cho thuê và báo cáo. Các ví dụ bên dưới dùng biển số và ID có trong môi trường kiểm thử. Hãy liên hệ khi bạn yêu cầu quyền truy cập kiểm thử, bạn sẽ nhận được dữ liệu kiểm thử phù hợp với tài khoản của mình.

Sandbox yêu cầu đăng nhập. Hãy liên hệ để nhận nội dung kiểm thử.

Loại API GraphQL
Staging https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Môi trường sản xuất https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Mutation Test_CreateTest Tạo một bản định giá xe mới cho một phương tiện. Trả về ID của bản định giá.

Tham số

vehicleDataModel: VehicleDataModel!
testDataModel: TestDataModel!

Bắt buộc

  • testTypeIds
  • unitId
  • regNo / vin

Phản hồi

result: Int

Ví dụ

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

Phản hồi ví dụ

{
  "data": {
    "test_CreateTest": 54
  }
}
Mutation testData_CreateLeaseData Thêm dữ liệu cho thuê tài chính vào một bản định giá: loại sản phẩm, giá mua, mã tham chiếu hợp đồng và nhiều hơn nữa.

Tham số

testId: Int!
leaseDataModel: LeaseDataModel!

Phản hồi

result: Boolean

Ví dụ

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

Phản hồi ví dụ

{
  "data": {
    "testData_CreateLeaseData": true
  }
}
Mutation testData_CreateLeaseUserData Thêm khách hàng thuê tài chính và người liên hệ vào một bản định giá: người phụ trách đội xe, tài xế và nhiều hơn nữa.

Tham số

testId: Int!
leaseUserDataModel: LeaseUserDataModel!

Phản hồi

result: Boolean

Ví dụ

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

Phản hồi ví dụ

{
  "data": {
    "testData_CreateLeaseUserData": true
  }
}
Query Test_GetTest Lấy một bản định giá cùng trạng thái, số km đã đi và lịch sử bảo dưỡng.

Tham số

testId: Int!

Phản hồi

result: TestDataModel

Ghi chú

  • Các trường văn bản bản địa hóa như testStatus và tên điểm kiểm tra được trả về theo culture của bên gọi. Culture lấy từ claim culture của token, dự phòng bằng Accept-Language. Ví dụ được ghi lại với culture Thụy Điển.

Ví dụ

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

Phản hồi ví dụ

{
  "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 Lấy hình ảnh và tệp thuộc về một bản định giá.

Tham số

testId: Int!

Phản hồi

result: [TestFileModel]

Ví dụ

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

Phản hồi ví dụ

{
  "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 Lấy dữ liệu xe: biển số đăng ký, số khung, trang bị và gói tùy chọn.

Tham số

testId: Int!

Phản hồi

result: VehicleDataModel

Ví dụ

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

Phản hồi ví dụ

{
  "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 Lấy dữ liệu cho thuê tài chính của một bản định giá.

Tham số

testId: Int!

Phản hồi

result: LeaseDataModel

Ví dụ

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

Phản hồi ví dụ

{
  "data": {
    "testData_GetLeaseData": {
      "productType": null,
      "purchasePrice": null,
      "quotationTemplate": null,
      "repairMaintenance": null,
      "transportDate": null,
      "winterTires": null
    }
  }
}
Query testData_GetLeaseUserData Lấy khách hàng thuê tài chính và người liên hệ của một bản định giá.

Tham số

testId: Int!

Phản hồi

result: LeaseUserDataModel

Ví dụ

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

Phản hồi ví dụ

{
  "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 Liệt kê các đơn vị mà bạn có quyền truy cập.

Phản hồi

result: [UnitModel]

Ví dụ

query{
  unit_GetAccessibleUnits
  {
    unitId
    unitName
  }
}

Phản hồi ví dụ

{
  "data": {
    "unit_GetAccessibleUnits": [
      {
        "unitId": 1,
        "unitName": "Test unit"
      }
    ]
  }
}
Query TestType_GetTestTypes Liệt kê các loại định giá khả dụng cho một đơn vị.

Tham số

unitId: Int!
vin: String

Phản hồi

result: [TestTypeModel]

Ví dụ

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

Phản hồi ví dụ

{
  "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 Cập nhật một bản định giá hiện có.

Tham số

testDataModel: TestDataModel!

Bắt buộc

  • testDataModel.testId

Phản hồi

result: TestDataModel

Ví dụ

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

Phản hồi ví dụ

SalesReport_CreateSalesReportFromSource
Query Test_GetAllTests Danh sách tất cả các bản định giá có thể tìm kiếm và sắp xếp, với bộ lọc và phân trang.

Tham số

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

Phản hồi

result: TestListModel

Ghi chú

  • Trang được phân trang bằng skip và take. take mặc định là 50 và skip mặc định là 0. Không có giới hạn trên.
  • Các trường sắp xếp được: regno, vehicleMake, vehicleModel, vin, completedDate, createdDate, performedDate, performedBy, testTypes, isObdPerformed, testStatus, testAnnotations.
  • searchTerm chỉ khớp khi văn bản bắt đầu bằng RegNo hoặc TestAnnotations.
  • timeZoneOffset được gửi theo phút và là chênh lệch giữa giờ UTC và giờ của máy khách (UTC − giờ máy khách). Nếu giờ Thụy Điển là +1 GMT, hãy gửi -1 để đúng ngày.

Ví dụ

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 Giống như trên, nhưng chỉ các bản định giá đang thực hiện.

Tham số

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

Phản hồi

result: TestListModel

Ghi chú

  • Trang được phân trang bằng skip và take. take mặc định là 50 và skip mặc định là 0. Không có giới hạn trên.
  • Các trường sắp xếp được: regno, vehicleMake, vehicleModel, vin, completedDate, createdDate, performedDate, performedBy, testTypes, isObdPerformed, testStatus, testAnnotations.
  • searchTerm chỉ khớp khi văn bản bắt đầu bằng RegNo hoặc TestAnnotations.
  • timeZoneOffset được gửi theo phút và là chênh lệch giữa giờ UTC và giờ của máy khách (UTC − giờ máy khách). Nếu giờ Thụy Điển là +1 GMT, hãy gửi -1 để đúng ngày.

Ví dụ

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 Lấy liên kết đến các báo cáo tình trạng xe của một bản định giá, cả dưới dạng PDF.

Tham số

testId: Int!

Bắt buộc

  • int testId

Phản hồi

result: [ReportModel]

Ví dụ

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

Phản hồi ví dụ

{
  "data": {
    "test_GetTestReports": [
      {
        "testTypeId": 2,
        "testType": "Test utan kostnader",
        "shortenedReportURL": "https://lnkt.bus.no/8049d5ll2"
        "shortenedPdfReportURL": "https://lnkt.bus.no/41181Ruhpp"
      }
    ]
  }
}
Query test_GetGeneralInfo Lấy thông tin chung về xe: chìa khóa, cáp sạc, mục đích sử dụng trước đây và nhiều hơn nữa.

Tham số

testId: Int!

Phản hồi

result: GeneralInfoModel

Ghi chú

  • Đọc giá trị hiện tại trước khi cập nhật. test_GetGeneralInfoMetaData cung cấp các giá trị khóa được định nghĩa trước.

Ví dụ

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

Phản hồi ví dụ

{ "data": { "test_GetGeneralInfo": { "masterKeyCount": 2, "chargingCableCount": 1, "previousUseId": 3, "hasPreviousDamage": false, "vehicleKeyTypes": [ { "key": 1, "value": "Remote key" } ], "chargingCableTypes": [] } } }
Mutation test_UpdateGeneralInfo Cập nhật thông tin chung về xe.

Tham số

testId: Int!
generalInfoModel: GeneralInfoModel!

Phản hồi

result: Boolean

Ghi chú

  • Đọc, sửa, ghi: gửi toàn bộ model. Danh sách rỗng cho vehicleKeyTypes hoặc chargingCableTypes sẽ bị từ chối; danh sách rỗng sẽ xóa các loại hiện có.

Ví dụ

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

Phản hồi ví dụ

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

Báo cáo bán hàng

Báo cáo bán hàng được xây dựng trên các bản định giá, với liên kết chia sẻ và hoàn tất.

Sandbox yêu cầu đăng nhập. Hãy liên hệ để nhận nội dung kiểm thử.

Loại API GraphQL
Staging https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Môi trường sản xuất https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Mutation SalesReport_CreateSalesReportFromSource Tạo một báo cáo bán hàng từ một bản định giá hoặc một phương tiện hiện có.

Tham số

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

Bắt buộc

  • string regNo
  • int testRunId or int unitId

Phản hồi

result: Int

Ví dụ

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

Phản hồi ví dụ

{
  "data": {
    "salesReport_CreateSalesReportFromSource": 764
  }
}
Query SalesReport_GetSalesReportShareMetaData Lấy liên kết chia sẻ cho báo cáo bán hàng và báo cáo VDN, cùng liên kết tải PDF.

Tham số

salesReportId: Int!

Bắt buộc

  • int salesReportId

Phản hồi

result: SalesReportShareMetaDataModel

Ghi chú

  • salesReportPdfDownloadSasUrl chỉ khả dụng cho đối tác bên ngoài.

Ví dụ

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

Phản hồi ví dụ

{
  "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 Danh sách tất cả các báo cáo bán hàng có thể tìm kiếm và sắp xếp.

Tham số

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

Phản hồi

result: SalesReportListModel

Ghi chú

  • Trang được phân trang bằng skip và take. take mặc định là 50 và skip mặc định là 0. Không có giới hạn trên.
  • Các trường sắp xếp được: regno, vehicleMake, vehicleModel, vin, completedDate, salesReportStatus, createdDate, performedBy
  • searchTerm chỉ khớp khi văn bản bắt đầu bằng RegNo.
  • timeZoneOffset được gửi theo phút và là chênh lệch giữa giờ UTC và giờ của máy khách (UTC − giờ máy khách). Nếu giờ Thụy Điển là +1 GMT, hãy gửi -1 để đúng ngày.

Ví dụ

query {
  salesReport_GetAllSalesReports(searchTerm: "WBS99A") {
            salesReports {
                salesReportId
                salesReportStatus
                salesReportStatusId
                regno
                vehicleMake
                vehicleModel
                vin
                createdDate
                completedDate
            }
            totalSalesReports
        }
    }
Query SalesReport_GetActiveSalesReports Giống như trên, nhưng chỉ các báo cáo bán hàng đang hoạt động.

Tham số

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

Phản hồi

result: SalesReportListModel

Ghi chú

  • Trang được phân trang bằng skip và take. take mặc định là 50 và skip mặc định là 0. Không có giới hạn trên.
  • Các trường sắp xếp được: regno, vehicleMake, vehicleModel, vin, completedDate, salesReportStatus, createdDate, performedBy
  • searchTerm chỉ khớp khi văn bản bắt đầu bằng RegNo.
  • timeZoneOffset được gửi theo phút và là chênh lệch giữa giờ UTC và giờ của máy khách (UTC − giờ máy khách). Nếu giờ Thụy Điển là +1 GMT, hãy gửi -1 để đúng ngày.

Ví dụ

query {
  salesReport_GetActiveSalesReports(searchTerm: "WBS99A") {
            salesReports {
                salesReportId
                salesReportStatus
                salesReportStatusId
                regno
                vehicleMake
                vehicleModel
                vin
                createdDate
                completedDate
            }
            totalSalesReports
        }
    }
Mutation SalesReport_UpdateSalesReport Cập nhật một báo cáo bán hàng.

Tham số

salesReportData: SalesReportDataModel!

Bắt buộc

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

Phản hồi

result: SalesReportDataModel

Ví dụ

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

Phản hồi ví dụ

{
  "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 Hoàn tất một báo cáo bán hàng và gửi qua email hoặc SMS.

Tham số

salesReportConcludeModel: SalesReportConcludeModel!

Bắt buộc

  • salesReportConcludeModel.salesReportId
  • salesReportConcludeModel.sendSalesReportEmailSMSModel

Phản hồi

result: Boolean

Ghi chú

  • sendSalesReportEmailSMSModel là bắt buộc và các liên kết chia sẻ được tạo sẽ lưu trên đó. Danh sách rỗng cho email, số điện thoại và loại báo cáo sẽ không gửi gì. Người nhận được cấu hình theo đơn vị sẽ được thêm vào khi kết thúc. Các sai lệch đang mở không chặn việc kết thúc.

Ví dụ

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

Phản hồi ví dụ

{ 
"data": 
           { 
                "salesReport_ConcludeSalesReport": true 
           }
 }
Mutation salesReport_AddSalesReportImages Thêm hình ảnh vào một báo cáo bán hàng, với ảnh bìa tùy chọn.

Tham số

salesReportId: Int!
images: [SalesReportImageInputModel]!

Phản hồi

result: [SalesReportImageResultModel]

Ví dụ

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

Sai lệch và hư hỏng

Các sai lệch và hư hỏng được ghi nhận trên một bản định giá, kèm hình ảnh.

Sandbox yêu cầu đăng nhập. Hãy liên hệ để nhận nội dung kiểm thử.

Loại API GraphQL
Staging https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Môi trường sản xuất https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Query Defect_GetTestDefects Lấy các sai lệch và hư hỏng đã ghi nhận trên một bản định giá.

Tham số

testId: Int!

Phản hồi

result: [TestDefectModel]

Ghi chú

  • TotalCost chưa gồm VAT. Giao diện có thể hiển thị số tiền đã gồm VAT.

Ví dụ

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

Phản hồi ví dụ

{
  "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 Lấy hình ảnh và tệp liên quan đến các sai lệch trên một bản định giá.

Tham số

testId: Int!

Phản hồi

result: [TestDefectFileModel]

Ví dụ

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

Phản hồi ví dụ

{
  "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 Cập nhật một sai lệch trên một bản định giá và báo cáo bán hàng của nó.

Tham số

testId: Int!
defectFormData: TestDefectModel!

Phản hồi

result: TestDefectModel

Ví dụ

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

Phản hồi ví dụ

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

Lệnh công việc

Lệnh công việc và các công việc cho quy trình của xưởng dịch vụ.

Sandbox yêu cầu đăng nhập. Hãy liên hệ để nhận nội dung kiểm thử.

Loại API GraphQL
Staging https://test.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Môi trường sản xuất https://bus2.bus.no/BUSPlatform3/BUSTest.Server/BUS.APIs.GraphQLServer.P3.BUSTest.ExternalEndpoint1
Mutation workOrder_CreateWorkOrder Tạo một lệnh công việc cho một phương tiện, có hoặc không có bản định giá liên kết.

Tham số

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

Bắt buộc

  • testRunId (optional for standalone work order)

Phản hồi

result: Int

Ghi chú

  • Với testRunId, đợt kiểm định phải đã kết thúc và mỗi sai lệch tạo ra một công việc. Không có testRunId sẽ tạo một lệnh công việc độc lập.

Ví dụ

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

Phản hồi ví dụ

{ 
"data": 
     {
          "workOrder_CreateWorkOrder": 1773
     }
 }
Mutation workOrder_CreateWorkOrderJob Thêm một công việc vào một lệnh công việc.

Tham số

workOrderJobModel: WorkOrderJobModel!

Bắt buộc

  • workOrderJobModel (workOrderId and job details)

Phản hồi

result: WorkOrderJobModel

Ví dụ

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

Phản hồi ví dụ

{ 
"data":
         { "workOrder_CreateWorkOrderJob": { 
                           "workOrderJobId": 28584, "jobName": "Replace wiper blades"
                   }
          }
 }
Mutation workOrder_AddStandardJobsToWorkOrderCycle Thêm các công việc tiêu chuẩn vào một lệnh công việc.

Tham số

workOrderId: Int!
standardJobIds: [Int]!

Phản hồi

result: [WorkOrderJobModel]

Ví dụ

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

Phản hồi ví dụ

{ 
"data": 
            { "workOrder_AddStandardJobsToWorkOrderCycle":
                            [ { "workOrderJobId": 28585, "jobName": "Standard service" } ] 
            }
 }
Query workOrder_GetWorkOrderJobList Lấy tất cả các công việc trong một lệnh công việc.

Tham số

workOrderId: Int!

Phản hồi

result: WorkOrderJobListModel

Ghi chú

  • workOrderJobStatus là một đối tượng lồng nhau. Dùng các ID công việc nhận được ở đây khi đặt trạng thái.

Ví dụ

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

Phản hồi ví dụ

{ 
"data":
                { "workOrder_GetWorkOrderJobList":
                                              { "count": 2, "workOrderJobs": [ 
                                                                  { "workOrderJobId": 28581, "jobName": "Defect job", "workOrderJobStatus": { "workOrderJobStatusId": 3,                             "workOrderJobStatusName": "Done" }, "testDefect": { "testDefectId": 3444 } } 
                                                             ]
                                                }
                  }
 }
Mutation workOrder_UpdateWorkOrderJobStatus Đặt trạng thái mới cho một hoặc nhiều công việc.

Tham số

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

Phản hồi

result: WorkOrderStatusUpdateResult

Ghi chú

  • Done hiển thị là đã khắc phục trên báo cáo bán hàng, Open là sai lệch còn mở. Trạng thái lệnh công việc được giữ đồng bộ.

Ví dụ

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

Phản hồi ví dụ

{ "data": { "workOrder_UpdateWorkOrderJobStatus": { "workOrderStatusId": 2, "workOrderStatusName": "InProgress", "updatedJobs": [ { "workOrderJobId": 28581, "workOrderJobStatusId": 3, "workOrderJobStatusName": "Done" } ] } } }
Query workOrder_GetStandardJobsForWorkOrder Liệt kê các công việc tiêu chuẩn có thể liên kết với một lệnh công việc.

Tham số

workOrderId: Int!

Phản hồi

result: [StandardJobModel]

Ví dụ

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

Phản hồi ví dụ

{
  "data": {
    "workOrder_GetStandardJobsForWorkOrder": [
      {
        "standardJobId": 723,
        "jobName": "Shenal standard - job",
        "cost": 800,
        "isTaxInclude": false
      }
    ]
  }
}
Query workOrderSettings_GetStandardJobsListForUnit Liệt kê các công việc tiêu chuẩn riêng của đơn vị, kèm chi phí.

Tham số

unitId: Int!

Phản hồi

result: StandardJobsGridModel

Ví dụ

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

Phản hồi ví dụ

{
  "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 Liệt kê các lượt chạy thử đủ điều kiện để trở thành một lệnh công việc cho một biển số đăng ký.

Tham số

regNo: String!
unitId: Int!

Phản hồi

result: WorkOrderCreationTestRunListModel

Ví dụ

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

Phản hồi ví dụ

{
  "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 Liệt kê tất cả các lệnh công việc. Có thể tìm kiếm, sắp xếp và phân trang.

Tham số

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

Phản hồi

result: WorkOrderListModel

Ghi chú

  • Trang được phân trang bằng skip và take. take mặc định là 50 và skip mặc định là 0. Không có giới hạn trên.
  • timeZoneOffset được gửi theo phút và là chênh lệch giữa giờ UTC và giờ của máy khách (UTC − giờ máy khách). Nếu giờ Thụy Điển là +1 GMT, hãy gửi -1 để đúng ngày.

Ví dụ

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

Phản hồi ví dụ

{
  "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 Liệt kê các lệnh công việc chưa kết thúc.

Tham số

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

Phản hồi

result: WorkOrderListModel

Ghi chú

  • Trang được phân trang bằng skip và take. take mặc định là 50 và skip mặc định là 0. Không có giới hạn trên.
  • timeZoneOffset được gửi theo phút và là chênh lệch giữa giờ UTC và giờ của máy khách (UTC − giờ máy khách). Nếu giờ Thụy Điển là +1 GMT, hãy gửi -1 để đúng ngày.

Ví dụ

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

Phản hồi ví dụ

{
  "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 Kết thúc một lệnh công việc.

Tham số

workOrderId: Int!

Phản hồi

result: Boolean

Ví dụ

mutation{
  workOrder_ConcludeWorkOrder(workOrderId: 1832)
}

Phản hồi ví dụ

{
  "data": {
    "workOrder_ConcludeWorkOrder": true
  }
}
Mutation workOrder_ReopenWorkOrder Mở lại một lệnh công việc đã kết thúc.

Tham số

workOrderId: Int!

Phản hồi

result: Boolean

Ví dụ

mutation{
  workOrder_ReopenWorkOrder(workOrderId: 1832)
}

Phản hồi ví dụ

{
  "data": {
    "workOrder_ReopenWorkOrder": true
  }
}
Mutation workOrder_DeleteWorkOrder Xóa một lệnh công việc.

Tham số

workOrderId: Int!

Phản hồi

result: Boolean

Ví dụ

mutation{
  workOrder_DeleteWorkOrder(workOrderId: 1824)
}

Phản hồi ví dụ

{
  "data": {
    "workOrder_DeleteWorkOrder": true
  }
}
Query workOrder_GetWorkOrder Lấy một lệnh công việc.

Tham số

workOrderId: Int!

Phản hồi

result: WorkOrderDataModel

Ví dụ

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

Phản hồi ví dụ

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

Tệp

Các endpoint REST để lấy hình ảnh và tài liệu.

Sandbox yêu cầu đăng nhập. Hãy liên hệ để nhận nội dung kiểm thử.

Loại API REST
Staging https://test.bus.no/BUSPlatform3/RestAPIServers.FileServer/api
Môi trường sản xuất 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.

Tham số

mediaId: String!
useRedirect: Boolean

Phản hồi

Actual file

Ví dụ

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.

Tham số

mediaId: String!

Phản hồi

sasUrl expiresOn

Ví dụ

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

Thời gian thực

Đăng ký nhận sự kiện thời gian thực khi một đợt định giá kết thúc.

Sandbox yêu cầu đăng nhập. Hãy liên hệ để nhận nội dung kiểm thử.

Loại API GraphQL
Staging wss://test.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.ExternalEndpoint1
Môi trường sản xuất wss://bus2.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.ExternalEndpoint1
Subscription Test_OnTestConclude Thông báo theo thời gian thực khi một bản định giá kết thúc.

Tham số

testId: Int!

Phản hồi

result: TestDataModel

Ghi chú

  • Các trường văn bản bản địa hóa như testStatus và tên điểm kiểm tra được trả về theo culture của bên gọi. Culture lấy từ claim culture của token, dự phòng bằng Accept-Language. Ví dụ được ghi lại với culture Thụy Điển.

Ví dụ

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

Phản hồi ví dụ

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

Đăng ký webhook và nhận sự kiện tại URL của bạn. B.U.S. gửi một POST JSON cho mỗi sự kiện và chấp nhận mọi mã 2xx là xác nhận.

Sandbox yêu cầu đăng nhập. Hãy liên hệ để nhận nội dung kiểm thử.

Loại API GraphQL
Staging https://test.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.InternalApp
Môi trường sản xuất https://bus2.bus.no/BUSPlatform3/MessagingPortal/BUS.APIs.GraphQLServer.P3.MessagingPortal.InternalApp
Mutation notification_SubscribeWebhook Đăng ký webhook, chung hoặc cho một đơn vị. Trả về một secret mà B.U.S. đặt trong mỗi payload thông báo để bạn có thể xác nhận thông báo đến từ chúng tôi.

Tham số

webhookRegisterModel: WebhookRegisterModel (url, eventTypeId, unitId?)

Bắt buộc

  • url
  • eventTypeId

Phản hồi

secret: String

Ghi chú

  • Mỗi lần giao là một POST JSON. Với 2xx, thông báo được coi là đã giao; mọi phản hồi khác được ghi log là lỗi và không gửi lại.

Ví dụ

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

Phản hồi ví dụ

{
  "data": {
    "notification_SubscribeWebhook": {
      "secret": "…"
    }
  }
}
Mutation notification_UnsubscribeWebhook Gỡ một webhook đã đăng ký.

Tham số

eventTypeId: Int!
unitId: Int?

Phản hồi

result: Boolean

Ví dụ

mutation{
  notification_UnsubscribeWebhook(eventTypeId:  1, unitId: 5147)
}
Webhook TestConcluded Thông báo mà B.U.S. gửi đến webhook của bạn khi một bản định giá kết thúc.

Phản hồi

EventName, Data (TestDataModel), Secret

Ghi chú

  • Mỗi lần giao là một POST JSON. Với 2xx, thông báo được coi là đã giao; mọi phản hồi khác được ghi log là lỗi và không gửi lại.

Ví dụ

{
  "EventName": "TestConcluded",
  "Data": { "TestId": 34626, "UnitId": 5147, "Mileage": 3234, "…": "…" },
  "Secret": "…"
}
Webhook TestDeleted Thông báo mà B.U.S. gửi đến webhook của bạn khi một bản định giá bị xóa.

Phản hồi

EventName, Data (TestDataModel), Secret

Ghi chú

  • Mỗi lần giao là một POST JSON. Với 2xx, thông báo được coi là đã giao; mọi phản hồi khác được ghi log là lỗi và không gửi lại.

Ví dụ

{
  "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 Thông báo mà B.U.S. gửi đến webhook của bạn khi một lệnh công việc kết thúc.

Phản hồi

EventName, Data (WorkOrderDataModel), Secret

Ghi chú

  • Mỗi lần giao là một POST JSON. Với 2xx, thông báo được coi là đã giao; mọi phản hồi khác được ghi log là lỗi và không gửi lại.

Ví dụ

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

Mô hình dữ liệu

Các kiểu được sử dụng trong tham số và phản hồi.

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

Bạn đã xây dựng một tích hợp hữu ích cho xưởng dịch vụ hoặc đại lý? Hãy cung cấp nó trong B.U.S. Shop. Đây là chợ ứng dụng nơi khách hàng B.U.S. tìm và kích hoạt các tích hợp. Tích hợp của bạn tiếp cận ba trong bốn xưởng dịch vụ tại Na Uy, mà không cần tổ chức bán hàng riêng.

Kỹ thuật

Xác thựcToken Bearer. Thông tin đăng nhập sandbox theo yêu cầu, môi trường sản xuất sau khi được phê duyệt.
Định dạngGraphQL.
Giới hạn tần suấtKhông giới hạn trong sandbox. Hiện chưa có giới hạn cố định ở môi trường sản xuất. Nếu lạm dụng, tài khoản có thể bị khóa và dịch vụ có thể trả về 429 (Too Many Requests).
WebhookSự kiện thời gian thực. Lần kiểm định mới, định giá được cập nhật, thay đổi trạng thái. Chọn sự kiện bạn muốn đăng ký.
Thay đổiChúng tôi không đưa vào các thay đổi phá vỡ tương thích. Nhu cầu mới được đáp ứng bằng các phương thức mới, và các phương thức cùng trường hiện có không bị thay đổi chừng nào còn được sử dụng. Các phương thức mới và trường tùy chọn có thể được bổ sung dần. Các thay đổi được thông báo qua email tới đầu mối kỹ thuật.
SchemaIntrospection được bật. Bạn có thể lấy toàn bộ schema bằng truy vấn introspection tại endpoint, hoặc đọc trong sandbox GraphQL. Mỗi API có schema riêng: Test API và Oscar Inspector là các endpoint tách biệt. Schema được tạo khi build nên luôn khớp với dịch vụ.

FAQ

Hỗ trợ những ngôn ngữ/SDK nào?

Dựa trên GraphQL. Hoạt động với mọi ngôn ngữ có thể gửi HTTP request. Bạn tự chọn những trường muốn nhận về.

Chi phí là bao nhiêu?

Sandbox miễn phí. Giá cho quyền truy cập production phụ thuộc vào mức sử dụng.

Sẵn sàng xây dựng?

Khám phá danh mục API, hoặc trao đổi với một lập trình viên của chúng tôi.