import Conductor from 'conductor-node';
const conductor = new Conductor({
apiKey: process.env['CONDUCTOR_SECRET_KEY'], // This is the default and can be omitted
});
const bill = await conductor.qbd.bills.retrieve('123ABC-1234567890', {
conductorEndUserId: 'end_usr_1234567abcdefg',
});
console.log(bill.id);import os
from conductor import Conductor
conductor = Conductor(
api_key=os.environ.get("CONDUCTOR_SECRET_KEY"), # This is the default and can be omitted
)
bill = conductor.qbd.bills.retrieve(
id="123ABC-1234567890",
conductor_end_user_id="end_usr_1234567abcdefg",
)
print(bill.id)curl --request GET \
--url https://api.conductor.is/v1/quickbooks-desktop/bills/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Conductor-End-User-Id: <conductor-end-user-id>'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.conductor.is/v1/quickbooks-desktop/bills/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Conductor-End-User-Id: <conductor-end-user-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.conductor.is/v1/quickbooks-desktop/bills/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Conductor-End-User-Id", "<conductor-end-user-id>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.conductor.is/v1/quickbooks-desktop/bills/{id}")
.header("Conductor-End-User-Id", "<conductor-end-user-id>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.conductor.is/v1/quickbooks-desktop/bills/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Conductor-End-User-Id"] = '<conductor-end-user-id>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "123ABC-1234567890",
"objectType": "qbd_bill",
"createdAt": "2025-01-01T12:34:56.000Z",
"updatedAt": "2025-02-01T12:34:56.000Z",
"revisionNumber": "1721172183",
"vendor": {
"id": "80000001-1234567890",
"fullName": "Acme Supplies Ltd."
},
"vendorAddress": {
"line1": "Conductor Labs Inc.",
"line2": "540 Market St.",
"line3": "Suite 100",
"line4": "",
"line5": "",
"city": "San Francisco",
"state": "CA",
"postalCode": "94110",
"country": "United States",
"note": "Conductor HQ"
},
"payablesAccount": {
"id": "80000001-1234567890",
"fullName": "Accounts-Payable"
},
"transactionDate": "2024-10-01",
"dueDate": "2024-10-31T00:00:00.000Z",
"amountDue": "1000.00",
"currency": {
"id": "80000001-1234567890",
"fullName": "USD"
},
"exchangeRate": 1.2345,
"amountDueInHomeCurrency": "1234.56",
"refNumber": "BILL-1234",
"isPending": false,
"terms": {
"id": "80000001-1234567890",
"fullName": "Net 30"
},
"memo": "Office supplies for September",
"salesTaxCode": {
"id": "80000001-1234567890",
"fullName": "Non"
},
"isPaid": false,
"externalId": "12345678-abcd-1234-abcd-1234567890ab",
"linkedTransactions": [
{
"id": "123ABC-1234567890",
"objectType": "qbd_linked_transaction",
"transactionType": "invoice",
"transactionDate": "2024-10-01",
"refNumber": "LINK-1234",
"linkType": "amount",
"amount": "1000.00"
}
],
"expenseLines": [
{
"id": "456DEF-1234567890",
"objectType": "qbd_expense_line",
"account": {
"id": "80000001-1234567890",
"fullName": "Expenses:Office Supplies"
},
"amount": "1000.00",
"memo": "New office chair",
"payee": {
"id": "80000001-1234567890",
"fullName": "Acme Corporation"
},
"class": {
"id": "80000001-1234567890",
"fullName": "Office Supplies"
},
"salesTaxCode": {
"id": "80000001-1234567890",
"fullName": "Non"
},
"billingStatus": "billable",
"salesRepresentative": {
"id": "80000001-1234567890",
"fullName": "Jane Doe"
},
"customFields": [
{
"ownerId": "0",
"name": "Customer Rating",
"type": "string_1024_type",
"value": "Premium"
}
]
}
],
"itemLines": [
{
"id": "456DEF-1234567890",
"objectType": "qbd_item_line",
"item": {
"id": "80000001-1234567890",
"fullName": "Widget A"
},
"inventorySite": {
"id": "80000001-1234567890",
"fullName": "Main Warehouse"
},
"inventorySiteLocation": {
"id": "80000001-1234567890",
"fullName": "Aisle 3, Shelf B"
},
"serialNumber": "SN1234567890",
"lotNumber": "LOT2023-001",
"expirationDate": "2025-12-31T00:00:00.000Z",
"description": "High-quality widget with custom engraving",
"quantity": 5,
"unitOfMeasure": "Each",
"overrideUnitOfMeasureSet": {
"id": "80000001-1234567890",
"fullName": "Volume Units"
},
"cost": "1000.00",
"amount": "1000.00",
"customer": {
"id": "80000001-1234567890",
"fullName": "Acme Corporation"
},
"class": {
"id": "80000001-1234567890",
"fullName": "Installation:Residential"
},
"salesTaxCode": {
"id": "80000001-1234567890",
"fullName": "Non"
},
"billingStatus": "billable",
"salesRepresentative": {
"id": "80000001-1234567890",
"fullName": "Jane Doe"
},
"customFields": [
{
"ownerId": "0",
"name": "Customer Rating",
"type": "string_1024_type",
"value": "Premium"
}
]
}
],
"itemGroupLines": [
{
"id": "456DEF-1234567890",
"objectType": "qbd_item_group_line",
"itemGroup": {
"id": "80000001-1234567890",
"fullName": "Office Supplies Bundle"
},
"description": "Standard widget bulk package",
"quantity": 5,
"unitOfMeasure": "Each",
"overrideUnitOfMeasureSet": {
"id": "80000001-1234567890",
"fullName": "Volume Units"
},
"totalAmount": "1000.00",
"itemLines": [
{
"id": "456DEF-1234567890",
"objectType": "qbd_item_line",
"item": {
"id": "80000001-1234567890",
"fullName": "Widget A"
},
"inventorySite": {
"id": "80000001-1234567890",
"fullName": "Main Warehouse"
},
"inventorySiteLocation": {
"id": "80000001-1234567890",
"fullName": "Aisle 3, Shelf B"
},
"serialNumber": "SN1234567890",
"lotNumber": "LOT2023-001",
"expirationDate": "2025-12-31T00:00:00.000Z",
"description": "High-quality widget with custom engraving",
"quantity": 5,
"unitOfMeasure": "Each",
"overrideUnitOfMeasureSet": {
"id": "80000001-1234567890",
"fullName": "Volume Units"
},
"cost": "1000.00",
"amount": "1000.00",
"customer": {
"id": "80000001-1234567890",
"fullName": "Acme Corporation"
},
"class": {
"id": "80000001-1234567890",
"fullName": "Installation:Residential"
},
"salesTaxCode": {
"id": "80000001-1234567890",
"fullName": "Non"
},
"billingStatus": "billable",
"salesRepresentative": {
"id": "80000001-1234567890",
"fullName": "Jane Doe"
},
"customFields": [
{
"ownerId": "0",
"name": "Customer Rating",
"type": "string_1024_type",
"value": "Premium"
}
]
}
],
"customFields": [
{
"ownerId": "0",
"name": "Customer Rating",
"type": "string_1024_type",
"value": "Premium"
}
]
}
],
"openAmount": "500.00",
"customFields": [
{
"ownerId": "0",
"name": "Customer Rating",
"type": "string_1024_type",
"value": "Premium"
}
]
}Retrieve a bill
Retrieves a bill by ID.
IMPORTANT: If you need to fetch multiple specific bills by ID, use the list endpoint instead with the ids parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.
NOTE: The response automatically includes any linked transactions.
import Conductor from 'conductor-node';
const conductor = new Conductor({
apiKey: process.env['CONDUCTOR_SECRET_KEY'], // This is the default and can be omitted
});
const bill = await conductor.qbd.bills.retrieve('123ABC-1234567890', {
conductorEndUserId: 'end_usr_1234567abcdefg',
});
console.log(bill.id);import os
from conductor import Conductor
conductor = Conductor(
api_key=os.environ.get("CONDUCTOR_SECRET_KEY"), # This is the default and can be omitted
)
bill = conductor.qbd.bills.retrieve(
id="123ABC-1234567890",
conductor_end_user_id="end_usr_1234567abcdefg",
)
print(bill.id)curl --request GET \
--url https://api.conductor.is/v1/quickbooks-desktop/bills/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Conductor-End-User-Id: <conductor-end-user-id>'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.conductor.is/v1/quickbooks-desktop/bills/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Conductor-End-User-Id: <conductor-end-user-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.conductor.is/v1/quickbooks-desktop/bills/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Conductor-End-User-Id", "<conductor-end-user-id>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.conductor.is/v1/quickbooks-desktop/bills/{id}")
.header("Conductor-End-User-Id", "<conductor-end-user-id>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.conductor.is/v1/quickbooks-desktop/bills/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Conductor-End-User-Id"] = '<conductor-end-user-id>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "123ABC-1234567890",
"objectType": "qbd_bill",
"createdAt": "2025-01-01T12:34:56.000Z",
"updatedAt": "2025-02-01T12:34:56.000Z",
"revisionNumber": "1721172183",
"vendor": {
"id": "80000001-1234567890",
"fullName": "Acme Supplies Ltd."
},
"vendorAddress": {
"line1": "Conductor Labs Inc.",
"line2": "540 Market St.",
"line3": "Suite 100",
"line4": "",
"line5": "",
"city": "San Francisco",
"state": "CA",
"postalCode": "94110",
"country": "United States",
"note": "Conductor HQ"
},
"payablesAccount": {
"id": "80000001-1234567890",
"fullName": "Accounts-Payable"
},
"transactionDate": "2024-10-01",
"dueDate": "2024-10-31T00:00:00.000Z",
"amountDue": "1000.00",
"currency": {
"id": "80000001-1234567890",
"fullName": "USD"
},
"exchangeRate": 1.2345,
"amountDueInHomeCurrency": "1234.56",
"refNumber": "BILL-1234",
"isPending": false,
"terms": {
"id": "80000001-1234567890",
"fullName": "Net 30"
},
"memo": "Office supplies for September",
"salesTaxCode": {
"id": "80000001-1234567890",
"fullName": "Non"
},
"isPaid": false,
"externalId": "12345678-abcd-1234-abcd-1234567890ab",
"linkedTransactions": [
{
"id": "123ABC-1234567890",
"objectType": "qbd_linked_transaction",
"transactionType": "invoice",
"transactionDate": "2024-10-01",
"refNumber": "LINK-1234",
"linkType": "amount",
"amount": "1000.00"
}
],
"expenseLines": [
{
"id": "456DEF-1234567890",
"objectType": "qbd_expense_line",
"account": {
"id": "80000001-1234567890",
"fullName": "Expenses:Office Supplies"
},
"amount": "1000.00",
"memo": "New office chair",
"payee": {
"id": "80000001-1234567890",
"fullName": "Acme Corporation"
},
"class": {
"id": "80000001-1234567890",
"fullName": "Office Supplies"
},
"salesTaxCode": {
"id": "80000001-1234567890",
"fullName": "Non"
},
"billingStatus": "billable",
"salesRepresentative": {
"id": "80000001-1234567890",
"fullName": "Jane Doe"
},
"customFields": [
{
"ownerId": "0",
"name": "Customer Rating",
"type": "string_1024_type",
"value": "Premium"
}
]
}
],
"itemLines": [
{
"id": "456DEF-1234567890",
"objectType": "qbd_item_line",
"item": {
"id": "80000001-1234567890",
"fullName": "Widget A"
},
"inventorySite": {
"id": "80000001-1234567890",
"fullName": "Main Warehouse"
},
"inventorySiteLocation": {
"id": "80000001-1234567890",
"fullName": "Aisle 3, Shelf B"
},
"serialNumber": "SN1234567890",
"lotNumber": "LOT2023-001",
"expirationDate": "2025-12-31T00:00:00.000Z",
"description": "High-quality widget with custom engraving",
"quantity": 5,
"unitOfMeasure": "Each",
"overrideUnitOfMeasureSet": {
"id": "80000001-1234567890",
"fullName": "Volume Units"
},
"cost": "1000.00",
"amount": "1000.00",
"customer": {
"id": "80000001-1234567890",
"fullName": "Acme Corporation"
},
"class": {
"id": "80000001-1234567890",
"fullName": "Installation:Residential"
},
"salesTaxCode": {
"id": "80000001-1234567890",
"fullName": "Non"
},
"billingStatus": "billable",
"salesRepresentative": {
"id": "80000001-1234567890",
"fullName": "Jane Doe"
},
"customFields": [
{
"ownerId": "0",
"name": "Customer Rating",
"type": "string_1024_type",
"value": "Premium"
}
]
}
],
"itemGroupLines": [
{
"id": "456DEF-1234567890",
"objectType": "qbd_item_group_line",
"itemGroup": {
"id": "80000001-1234567890",
"fullName": "Office Supplies Bundle"
},
"description": "Standard widget bulk package",
"quantity": 5,
"unitOfMeasure": "Each",
"overrideUnitOfMeasureSet": {
"id": "80000001-1234567890",
"fullName": "Volume Units"
},
"totalAmount": "1000.00",
"itemLines": [
{
"id": "456DEF-1234567890",
"objectType": "qbd_item_line",
"item": {
"id": "80000001-1234567890",
"fullName": "Widget A"
},
"inventorySite": {
"id": "80000001-1234567890",
"fullName": "Main Warehouse"
},
"inventorySiteLocation": {
"id": "80000001-1234567890",
"fullName": "Aisle 3, Shelf B"
},
"serialNumber": "SN1234567890",
"lotNumber": "LOT2023-001",
"expirationDate": "2025-12-31T00:00:00.000Z",
"description": "High-quality widget with custom engraving",
"quantity": 5,
"unitOfMeasure": "Each",
"overrideUnitOfMeasureSet": {
"id": "80000001-1234567890",
"fullName": "Volume Units"
},
"cost": "1000.00",
"amount": "1000.00",
"customer": {
"id": "80000001-1234567890",
"fullName": "Acme Corporation"
},
"class": {
"id": "80000001-1234567890",
"fullName": "Installation:Residential"
},
"salesTaxCode": {
"id": "80000001-1234567890",
"fullName": "Non"
},
"billingStatus": "billable",
"salesRepresentative": {
"id": "80000001-1234567890",
"fullName": "Jane Doe"
},
"customFields": [
{
"ownerId": "0",
"name": "Customer Rating",
"type": "string_1024_type",
"value": "Premium"
}
]
}
],
"customFields": [
{
"ownerId": "0",
"name": "Customer Rating",
"type": "string_1024_type",
"value": "Premium"
}
]
}
],
"openAmount": "500.00",
"customFields": [
{
"ownerId": "0",
"name": "Customer Rating",
"type": "string_1024_type",
"value": "Premium"
}
]
}Authorizations
Your Conductor secret key using Bearer auth (e.g., "Authorization: Bearer {{YOUR_SECRET_KEY}}").
Headers
The ID of the End-User to receive this request.
"end_usr_1234567abcdefg"
Path Parameters
The QuickBooks-assigned unique identifier of the bill to retrieve.
36"123ABC-1234567890"
Response
Returns the specified bill.
The unique identifier assigned by QuickBooks to this bill. This ID is unique across all transaction types.
"123ABC-1234567890"
The type of object. This value is always "qbd_bill".
"qbd_bill""qbd_bill"
The date and time when this bill was created, in ISO 8601 format (YYYY-MM-DDThh:mm:ss±hh:mm), which QuickBooks Desktop interprets in the local timezone of the end-user's computer.
"2025-01-01T12:34:56.000Z"
The date and time when this bill was last updated, in ISO 8601 format (YYYY-MM-DDThh:mm:ss±hh:mm), which QuickBooks Desktop interprets in the local timezone of the end-user's computer.
"2025-02-01T12:34:56.000Z"
The current QuickBooks-assigned revision number of this bill object, which changes each time the object is modified. When updating this object, you must provide the most recent revisionNumber to ensure you're working with the latest data; otherwise, the update will return an error.
"1721172183"
The vendor who sent this bill for goods or services purchased.
Show child attributes
Show child attributes
{
"id": "80000001-1234567890",
"fullName": "Acme Supplies Ltd."
}
The address of the vendor who sent this bill.
Show child attributes
Show child attributes
The Accounts-Payable (A/P) account to which this bill is assigned, used for accounts-payable tracking.
IMPORTANT: If this bill is linked to other transactions, this A/P account must match the payablesAccount used in those other transactions.
Show child attributes
Show child attributes
{
"id": "80000001-1234567890",
"fullName": "Accounts-Payable"
}
The date of this bill, in ISO 8601 format (YYYY-MM-DD).
"2024-10-01"
The date by which this bill must be paid, in ISO 8601 format (YYYY-MM-DD).
"2024-10-31T00:00:00.000Z"
The total monetary amount due for this bill, represented as a decimal string. This equals the sum of the amounts in the bill's expense lines, item lines, and item group lines. The amount due minus any credits or discounts equals the open amount.
"1000.00"
The bill's currency. For built-in currencies, the name and code are standard ISO 4217 international values. For user-defined currencies, all values are editable.
Show child attributes
Show child attributes
{
"id": "80000001-1234567890",
"fullName": "USD"
}
The market exchange rate between this bill's currency and the home currency in QuickBooks at the time of this transaction. Represented as a decimal value (e.g., 1.2345 for 1 EUR = 1.2345 USD if USD is the home currency).
1.2345
The monetary amount due for this bill converted to the home currency of the QuickBooks company file. Represented as a decimal string.
"1234.56"
The case-sensitive user-defined reference number for this bill, which can be used to identify the transaction in QuickBooks. This value is not required to be unique and can be arbitrarily changed by the QuickBooks user.
"BILL-1234"
Indicates whether this bill has not been completed or is in a draft version.
false
The bill's payment terms, defining when payment is due and any applicable discounts.
Show child attributes
Show child attributes
{
"id": "80000001-1234567890",
"fullName": "Net 30"
}
A memo or note for this bill that appears in the Accounts-Payable register and in reports that include this bill.
"Office supplies for September"
The sales-tax code for this bill, determining whether it is taxable or non-taxable. If set, this overrides any sales-tax codes defined on the vendor. This can be overridden on the bill's individual lines.
Default codes include "Non" (non-taxable) and "Tax" (taxable), but custom codes can also be created in QuickBooks Desktop. If QuickBooks Desktop is not set up to charge sales tax (via the "Do You Charge Sales Tax?" preference), it assigns the default non-taxable sales-tax code configured in the company file to all sales.
Show child attributes
Show child attributes
{
"id": "80000001-1234567890",
"fullName": "Non"
}
Indicates whether this bill has been paid in full. When true, openAmount will be 0.
false
A globally unique identifier (GUID) you, the developer, can provide for tracking this object in your external system. This field is immutable and can only be set during object creation.
"12345678-abcd-1234-abcd-1234567890ab"
The bill's linked transactions, such as payments applied, credits used, or associated purchase orders.
IMPORTANT: You must specify the parameter includeLinkedTransactions when fetching a list of bills to receive this field because it is not returned by default.
Show child attributes
Show child attributes
The bill's expense lines, each representing one line in this expense.
Show child attributes
Show child attributes
The bill's item lines, each representing the purchase of a specific item or service.
Show child attributes
Show child attributes
The bill's item group lines, each representing a predefined set of items bundled together because they are commonly purchased together or grouped for faster entry.
Show child attributes
Show child attributes
The remaining amount still owed on this bill, represented as a decimal string. This equals the bill's amount minus any credits or discounts.
NOTE: Two rare QuickBooks Desktop behaviors can make openAmount unreliable on bills:
openAmountcan be omitted from bill query responses.- A known QuickBooks Desktop bug can cause
openAmountto reflect the vendor's aggregate open accounts-payable balance rather than the documented remaining balance for that individual bill.
If you need the amount currently payable on each open bill, use Conductor's /quickbooks-desktop/bills-to-pay endpoint and read bill.amountDue instead of relying on openAmount from the Conductor bills endpoint. The bills-to-pay endpoint is not a general replacement for the Conductor bills endpoint, because it is scoped to open bills and available credits for a vendor and returns bill-payment data rather than full bill records.
If you cannot use /quickbooks-desktop/bills-to-pay and must derive a fallback from Conductor bills endpoint results, re-query the bills with includeLinkedTransactions=true and compute a best-effort open amount as amountDue plus the sum of signed linkedTransactions[].amount values for all entries where linkedTransactions[].linkType is "amount".
"500.00"
The custom fields for the bill object, added as user-defined data extensions, not included in the standard QuickBooks object.
Show child attributes
Show child attributes

