Skip to main content

Official Python SDK for the Nxus QuickBooks Desktop API

Project description

nxus-qbd

Official Python SDK for the Nxus QuickBooks Desktop API.

Installation

pip install nxus-qbd

Quick Start

from nxus_qbd import NxusClient, NxusEnvironment

client = NxusClient(
    api_key="sk_live_…",
    environment=NxusEnvironment.PRODUCTION,  # default
)

# List vendors (with connection scoping)
vendors = client.vendors.list(connection_id="conn_abc123", limit=50)

# Retrieve a single customer
customer = client.customers.retrieve("cust_123", connection_id="conn_abc123")

# Create an invoice
invoice = client.invoices.create(
    customer_ref_list_id="cust_123",
    connection_id="conn_abc123",
)

Async Support

from nxus_qbd import AsyncNxusClient

async with AsyncNxusClient(api_key="sk_live_…") as client:
    vendors = await client.vendors.list(connection_id="conn_abc123")

The SDK defaults to a 100s client timeout so normal callers can receive the API's structured timeout responses for heavier QuickBooks operations. Advanced callers can still override this globally or per request:

client = NxusClient(api_key="sk_live_…", timeout=120)
vendors = client.vendors.list(connection_id="conn_abc123", timeout=30)
customer = client.customers.retrieve("cust_123", connection_id="conn_abc123", timeout=30)

For cursor-paginated list endpoints, the per-request timeout still controls the local client timeout and is also sent to the API as the X-Nxus-Timeout-Seconds request header so cursor continuation reuses the same backend timeout hint automatically. CRUD-style requests keep treating timeout as a client-side override only.

Environments

Production is the default and uses https://api.nx-us.net/.

from nxus_qbd import NxusClient

# Production (default)
client = NxusClient(api_key="sk_live_…")

# Local development convenience
client = NxusClient(api_key="sk_test_…", environment="development")

# Explicit override still wins
client = NxusClient(api_key="sk_test_…", base_url="https://staging.example.com/")

If you point base_url at localhost explicitly, the SDK also relaxes TLS verification by default so local dev stays frictionless.

Connection Scoping

Every request requires a connection_id to identify which QuickBooks Desktop company file to target:

# Per-request
client.vendors.list(connection_id="conn_abc123")

# Global default via headers
client = NxusClient(
    api_key="sk_live_…",
    headers={"X-Connection-Id": "conn_abc123"},
)

Pagination

All list methods return a paginated response that supports both manual page navigation and auto-iteration:

# Auto-paginate through all records (sync)
for vendor in client.vendors.list(limit=100):
    print(vendor.name)

# Auto-paginate through all records (async)
async for vendor in await async_client.vendors.list(limit=100):
    print(vendor.name)

Manual continuation also replays the original filters, connection scoping, and list timeout hint:

page = client.vendors.list(connection_id="conn_abc123", limit=100, timeout=45)
page_2 = page.get_next_page()

[!IMPORTANT] Processing Constraints: Each paginated request must either complete or be cancelled before the subsequent request for that connection can be processed by the backend.

  • Async API (Primary): The Async API is the recommended way to handle these requests as it allows for better lifecycle management.
  • Sync Wrappers: While sync wrappers are provided for convenience, you may need to increase your client-side timeouts to ensure large paginated sets complete successfully.

Examples

Runnable examples live in examples/ and cover both sync and async usage:

Example Description
basic_crud.py Create, retrieve, update, list, and delete a vendor
auth_setup.py Create a connection, generate a hosted QWC auth flow URL, and check auth status
auto_pagination.py Sync and async auto-iteration across pages
error_handling.py Error categorization, retry with backoff, validation errors
connection_scoped.py Multi-company isolation with connection_id
timeout_tuning.py Client timeout defaults, paginated list timeout hints, and CRUD timeout overrides
reports.py Aging, general detail, and general summary reports
async_basic_crud.py Async CRUD lifecycle
async_error_handling.py Async error handling and retry patterns
async_connection_scoped.py Async multi-company data isolation
async_reports.py Async report retrieval

All examples auto-load a .env file from the project root. Copy .env.example to .env and fill in your values:

cp .env.example .env
NXUS_API_KEY=sk_test_your_key_here
NXUS_ENVIRONMENT=development
NXUS_CONNECTION_ID=your_connection_id_here

Optional overrides:

NXUS_BASE_URL=https://localhost:7242/
NXUS_DEV_MODE=true

Then run any example:

python examples/basic_crud.py

Tests

The test suite includes focused unit coverage plus optional live integration tests:

File What it covers
tests/conftest.py Shared fixtures — loads .env, provides client and async_client fixtures, auto-skips when NXUS_API_KEY is not set
tests/unit/test_config.py Environment/base URL resolution behavior
tests/unit/test_vendor_pydantic_wiring.py Typed response parsing and snake_case request serialization
tests/integration/test_smoke.py Sync tests — list vendors/accounts, pagination with limits, cursor metadata, auto-pagination iteration, 404 error handling
tests/integration/test_async_smoke.py Async tests — list vendors, async auto-pagination

Run the full suite:

# Install dev dependencies
pip install nxus-qbd[dev]
# — or with uv —
uv sync

# Run tests (skipped automatically if NXUS_API_KEY is not set)
pytest

# Run only unit tests
pytest tests/unit -q

# Run with verbose output
pytest -v

# Run only async tests
pytest tests/integration/test_async_smoke.py -v

Resources

All QuickBooks Desktop resources are available as properties:

Category Resources
Transactions invoices, bills, checks, deposits, estimates, credit_memos, purchase_orders, sales_receipts, journal_entries, receive_payments, vendor_credits, credit_card_charges, credit_card_bills, credit_card_credits, charges, build_assemblies, ar_refund_credit_cards, sales_tax_payment_checks, item_receipts, check_bills, time_trackings, transactions
Lists accounts, customers, vendors, employees, other_names, currencies, terms, date_driven_terms, payment_methods, ship_methods, sales_tax_codes, price_levels, qbd_classes, customer_types, vendor_types, billing_rates, inventory_sites, bar_codes, account_tax_line_infos, bill_to_pay, unit_of_measure_sets, special_items
Items items, inventory_items, item_discounts, item_fixed_assets, item_groups, item_inventory_assemblies, item_non_inventory, item_other_charges, item_payments, item_sales_tax, item_sales_tax_groups, service_items, item_subtotals
Payroll payroll_item_non_wages, payroll_item_wages, workers_comp_codes
Reports reports.retrieve_general_detail(), reports.retrieve_aging(), etc.
Platform auth_sessions, connections

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nxus_qbd-0.3.3.tar.gz (91.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nxus_qbd-0.3.3-py3-none-any.whl (145.5 kB view details)

Uploaded Python 3

File details

Details for the file nxus_qbd-0.3.3.tar.gz.

File metadata

  • Download URL: nxus_qbd-0.3.3.tar.gz
  • Upload date:
  • Size: 91.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.5

File hashes

Hashes for nxus_qbd-0.3.3.tar.gz
Algorithm Hash digest
SHA256 28cd6e4cc3f623ad292d1fae82d00ac626b6a808c2cf74b38ff2262681358d46
MD5 af6d88f3cf5590cbebd2393f4e4c770f
BLAKE2b-256 654ed0a55a91547ee8164337e2ecd1a34832273b3fd4567b12aea3b6dfe215c3

See more details on using hashes here.

File details

Details for the file nxus_qbd-0.3.3-py3-none-any.whl.

File metadata

  • Download URL: nxus_qbd-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 145.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.5

File hashes

Hashes for nxus_qbd-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 06d12e17804ed6bd95770e85c18dc3dc299bc323cfd16e83a3da24f6a20755b1
MD5 c065073dc29dd63c7b05a49a0b78c044
BLAKE2b-256 b37307617ac2601851d942a847151bf65dff7e7850640ddc88da689d36f7ff54

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page