QuickBooks Online API デバッグ:MinorVersion パラメータが原因の売上税カテゴリー欠損
By manhnv, at: 2025年3月5日14:01
Estimated Reading Time: __READING_TIME__ minutes


QuickBooks Online APIデバッグ:売上税区分がMinorVersionパラメータが原因で不足している
はじめに
QuickBooks Online (QBO) APIを使用中に、請求書と品目データを取得する際に、UAT環境と本番環境で不整合が発生しました。問題は何でしょうか?品目の売上税区分を決定するのに役立つTaxClassificationRef
フィールドが、本番環境では存在せず、UAT環境では存在していました。
デバッグの後、APIリクエストのminorversion
パラメータが根本原因であることがわかりました。このブログ記事では、私の調査結果、デバッグプロセス、そして最終的な解決策について説明します。
問題:本番環境でTaxClassificationRefが不足している
UATと本番環境の両方で、Invoice
とItem
について、次のPython QuickBooksクエリを実行しました。
本番APIレスポンス(TaxClassificationRefが不足している)
請求書クエリレスポンス
Invoice.get(9999, qb=qb).to_dict()
関連する出力スニペット
{'Id': '9999',
'SyncToken': '1',
'sparse': False,
'domain': 'QBO',
'Deposit': 0,
'Balance': 455.73,
'AllowIPNPayment': False,
'AllowOnlineCreditCardPayment': True,
'AllowOnlineACHPayment': True,
'DocNumber': '1927',
'PrivateNote': '',
'DueDate': '2025-04-04',
'ShipDate': '',
'TrackingNum': '',
'TotalAmt': 455.73,
'TxnDate': '2025-03-05',
'ApplyTaxAfterDiscount': False,
'PrintStatus': 'NeedToPrint',
'EmailStatus': 'NotSet',
'ExchangeRate': 1,
'GlobalTaxCalculation': 'TaxExcluded',
'InvoiceLink': '',
'HomeBalance': 0,
'HomeTotalAmt': 0,
'FreeFormAddress': False,
'EInvoiceStatus': None,
'BillAddr': {'Id': '715',
'Line1': 'Glinteco',
'Line2': '132 My Street',
'Line3': 'Kingston, New York 12401 US',
'Line4': '',
'Line5': '',
'City': '',
'CountrySubDivisionCode': '',
'Country': '',
'PostalCode': '',
'Lat': '',
'Long': '',
'Note': ''},
'ShipAddr': {'Id': '716',
'Line1': 'Glinteco',
'Line2': '132 My Street',
'Line3': 'Kingston, New York 12401 US',
'Line4': '',
'Line5': '',
'City': '',
'CountrySubDivisionCode': '',
'Country': '',
'PostalCode': '',
'Lat': '',
'Long': '',
'Note': ''},
'BillEmail': {'Address': '[email protected]'},
'BillEmailCc': None,
'BillEmailBcc': None,
'CustomerRef': {'value': '145', 'name': 'Glinteco', 'type': ''},
'CurrencyRef': {'value': 'USD', 'name': 'United States Dollar', 'type': ''},
'CustomerMemo': None,
'DepartmentRef': None,
'TxnTaxDetail': {'TotalTax': 34.73,
'TxnTaxCodeRef': {'value': '3', 'name': '', 'type': ''},
'TaxLine': [{'Amount': 26.31,
'DetailType': 'TaxLineDetail',
'TaxLineDetail': {'PercentBased': True,
'TaxPercent': 6.25,
'NetAmountTaxable': 0,
'TaxRateRef': {'value': '3', 'name': '', 'type': ''}}},
{'Amount': 0,
'DetailType': 'TaxLineDetail',
'TaxLineDetail': {'PercentBased': True,
'TaxPercent': 0,
'NetAmountTaxable': 0,
'TaxRateRef': {'value': '4', 'name': '', 'type': ''}}},
{'Amount': 5.26,
'DetailType': 'TaxLineDetail',
'TaxLineDetail': {'PercentBased': True,
'TaxPercent': 1.25,
'NetAmountTaxable': 0,
'TaxRateRef': {'value': '5', 'name': '', 'type': ''}}},
{'Amount': 3.16,
'DetailType': 'TaxLineDetail',
'TaxLineDetail': {'PercentBased': True,
'TaxPercent': 0.75,
'NetAmountTaxable': 0,
'TaxRateRef': {'value': '6', 'name': '', 'type': ''}}}]},
'DeliveryInfo': None,
'RecurDataRef': None,
'TaxExemptionRef': None,
'MetaData': {'CreateTime': '2025-03-04T20:02:58-08:00',
'LastUpdatedTime': '2025-03-04T20:03:02-08:00'},
'CustomField': [{'DefinitionId': '1',
'Type': 'StringType',
'Name': 'PO Number',
'StringValue': ''}],
'Line': [{'Id': '1',
'LineNum': 1,
'Description': None,
'Amount': 421.0,
'DetailType': 'SalesItemLineDetail',
'LinkedTxn': [],
'CustomField': [],
'SalesItemLineDetail': {'UnitPrice': 421,
'Qty': 1,
'ServiceDate': '9999-12-31',
'TaxInclusiveAmt': 0,
'MarkupInfo': None,
'ItemRef': {'value': '1010000001',
'name': 'Services:glinteco',
'type': ''},
'ClassRef': None,
'TaxCodeRef': {'value': 'TAX', 'name': '', 'type': ''},
'PriceLevelRef': None}},
{'Id': None,
'LineNum': 0,
'Description': None,
'Amount': 421.0,
'DetailType': 'SubTotalLineDetail',
'LinkedTxn': [],
'CustomField': [],
'SubtotalLineDetail': None,
'SubTotalLineDetail': {}}],
'LinkedTxn': [],
'AllowOnlinePayment': False,
'SalesTermRef': {'value': '3', 'name': 'Net 30', 'type': ''}}
品目クエリレスポンス
Item.get(20812, qb=qb).to_dict()
関連する出力スニペット
{'Id': '20812',
'SyncToken': '0',
'sparse': False,
'domain': 'QBO',
'Name': 'glinteco',
'Description': '',
'Active': True,
'SubItem': True,
'FullyQualifiedName': 'Services:glinteco',
'Taxable': True,
'SalesTaxIncluded': None,
'UnitPrice': 0,
'Type': 'Service',
'Level': 1,
'PurchaseDesc': None,
'PurchaseTaxIncluded': None,
'PurchaseCost': 0,
'TrackQtyOnHand': False,
'QtyOnHand': None,
'InvStartDate': None,
'AssetAccountRef': None,
'ExpenseAccountRef': None,
'IncomeAccountRef': {'value': '1', 'name': 'Services', 'type': ''},
'SalesTaxCodeRef': None,
'ParentRef': {'value': '15', 'name': 'Services', 'type': ''},
'PurchaseTaxCodeRef': None,
'AbatementRate': None,
'ReverseChargeRate': None,
'ServiceType': None,
'ItemCategoryType': None,
'Sku': None,
'MetaData': {'CreateTime': '2025-03-04T20:02:29-08:00',
'LastUpdatedTime': '2025-03-04T20:02:29-08:00'}}
UAT APIレスポンス(TaxClassificationRefが含まれている)
UATでは、同じクエリによってTaxClassificationRef
を含む完全なデータセットが返されました。
{'Id': '152',
'SyncToken': '0',
'sparse': False,
'domain': 'QBO',
'Deposit': 0,
'Balance': 35.0,
'AllowIPNPayment': False,
'AllowOnlineCreditCardPayment': False,
'AllowOnlineACHPayment': False,
'DocNumber': '1045',
'PrivateNote': '',
'DueDate': '2025-04-04',
'ShipDate': '',
'TrackingNum': '',
'TotalAmt': 35.0,
'TxnDate': '2025-03-05',
'ApplyTaxAfterDiscount': False,
'PrintStatus': 'NeedToPrint',
'EmailStatus': 'NotSet',
'ExchangeRate': 1,
'GlobalTaxCalculation': 'TaxExcluded',
'InvoiceLink': 'https://developer.intuit.com/comingSoonview/scs-v1-12312?locale=en_US&cta=v3invoicelink',
'HomeBalance': 0,
'HomeTotalAmt': 0,
'FreeFormAddress': True,
'EInvoiceStatus': None,
'BillAddr': {'Id': '2',
'Line1': '4581 Finch St.',
'Line2': '',
'Line3': '',
'Line4': '',
'Line5': '',
'City': 'Bayshore',
'CountrySubDivisionCode': 'CA',
'Country': '',
'PostalCode': '94326',
'Lat': 'INVALID',
'Long': 'INVALID',
'Note': ''},
'ShipAddr': {'Id': '2',
'Line1': '4581 Finch St.',
'Line2': '',
'Line3': '',
'Line4': '',
'Line5': '',
'City': 'Bayshore',
'CountrySubDivisionCode': 'CA',
'Country': '',
'PostalCode': '94326',
'Lat': 'INVALID',
'Long': 'INVALID',
'Note': ''},
'BillEmail': {'Address': '[email protected]'},
'BillEmailCc': None,
'BillEmailBcc': None,
'CustomerRef': {'value': '1', 'name': "Amy's Bird Sanctuary", 'type': ''},
'CurrencyRef': {'value': 'USD', 'name': 'United States Dollar', 'type': ''},
'CustomerMemo': {'value': 'Thank you for your business and have a great day!'},
'DepartmentRef': None,
'TxnTaxDetail': {'TotalTax': 0,
'TxnTaxCodeRef': {'value': '4', 'name': '', 'type': ''},
'TaxLine': [{'Amount': 0,
'DetailType': 'TaxLineDetail',
'TaxLineDetail': {'PercentBased': True,
'TaxPercent': 0,
'NetAmountTaxable': 35.0,
'TaxRateRef': {'value': '6', 'name': '', 'type': ''}}}]},
'DeliveryInfo': None,
'RecurDataRef': None,
'TaxExemptionRef': {'value': '', 'name': '', 'type': ''},
'MetaData': {'CreateTime': '2025-03-04T18:50:26-08:00',
'LastUpdatedTime': '2025-03-04T18:50:26-08:00',
'LastModifiedByRef': {'value': '9341454203477221'}},
'CustomField': [],
'Line': [{'Id': '1',
'LineNum': 1,
'Description': 'Tree and Shrub Trimming',
'Amount': 35.0,
'DetailType': 'SalesItemLineDetail',