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)

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)

[!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 Default timeout behavior, client-wide overrides, and per-request timeout tuning
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.1.0.tar.gz (339.4 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.1.0-py3-none-any.whl (23.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for nxus_qbd-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9142ef311f3519d34bbd393bcf78a1fde8130ec8407fbe5eda9d91e6a311051c
MD5 6d7de18abf0f40b339613bc7785d9127
BLAKE2b-256 0c4107c493f8cee4413ab06ab1e3b9d6c5273b3f724015ce21d15e14327b5b58

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for nxus_qbd-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1b85089a5a5bf709d1de821b6aacf4b8016159153987b371c08270401921eee6
MD5 54364233a0042518047d426c2cb9d1a3
BLAKE2b-256 7bfbdc722c7c261f361c113335489c939801c163840e701617ce820f6870231c

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