Skip to content

Commit fcba6ec

Browse files
committed
Release 0.7.0: regenerate from contract sha256:f4cd9b5c733e
Generated by packages/sdk-generator 1.0.0 from the Desktop Accounting API OpenAPI contract (sha256:f4cd9b5c733eeada3d1a452ca3a11144f0d4b560ed58a595281cf54780b20691, API 1.0.0, 439 operations).
1 parent 3d9d7ec commit fcba6ec

102 files changed

Lines changed: 41825 additions & 435 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.daapi-sdk.json‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
{
22
"repository": "DesktopAccountingAPI/quickbooks-desktop-python",
3-
"sdkVersion": "0.6.0",
3+
"sdkVersion": "0.7.0",
44
"generator": {
55
"name": "packages/sdk-generator",
66
"version": "1.0.0"
77
},
88
"contract": {
99
"path": "packages/api-contract/generated/openapi.json",
10-
"sha256": "45acc3e65d061637d822de0a61f91477480397e20e2ed48fd6bdf937333b1a3f",
10+
"sha256": "f4cd9b5c733eeada3d1a452ca3a11144f0d4b560ed58a595281cf54780b20691",
1111
"openapi": "3.1.0",
1212
"apiVersion": "1.0.0"
1313
},
14-
"operations": 433,
15-
"models": 674,
16-
"enums": 242,
14+
"operations": 439,
15+
"models": 1669,
16+
"enums": 252,
1717
"generatedFiles": [
1818
"api.md",
1919
"conformance/fixtures/api-keys.json",
@@ -24,6 +24,7 @@
2424
"src/desktopaccountingapi/_error_codes.py",
2525
"src/desktopaccountingapi/resources/__init__.py",
2626
"src/desktopaccountingapi/resources/auth_sessions.py",
27+
"src/desktopaccountingapi/resources/change_feed_subscriptions.py",
2728
"src/desktopaccountingapi/resources/end_users.py",
2829
"src/desktopaccountingapi/resources/qbd/__init__.py",
2930
"src/desktopaccountingapi/resources/qbd/account_tax_lines.py",

‎CHANGELOG.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
## Unreleased
44

5+
## 0.7.0 (2026-10-12)
6+
7+
- New `client.qbd.batch()`: up to 25 typed QuickBooks Desktop operations in one Web Connector round trip. Each member is the member class of its operation (`BatchCustomerCreateInput(body=CustomerCreateInput(...))`, which sets `operation_id` itself), and each result is an instance of its operation's result class (`BatchCustomerCreateResult`, whose `data` is a `Customer`), or `UnknownBatchResult` for an operation added later. One idempotency key covers the batch; a lost response raises `OutcomeUnknownError` with `details["members"]` and is never retried.
8+
- A batch whose response was lost and whose create members the API later found in QuickBooks by their `external_id` returns each such member with `data` `None` and the record's QuickBooks ID in `recovered_object_id` (on every batch result: `str | None`), on `client.requests.retrieve()` and on an idempotent replay.
9+
- New error code `QBD_REQUEST_NOT_PROCESSED` (`ErrorCode.QBD_REQUEST_NOT_PROCESSED`): `409`, not retryable. QuickBooks skipped a batch member because an earlier member failed under `stopOnError` (status 3231).
10+
- **Breaking (types only):** the credit card request info of receive payments is the model `QbdRequest`. It was parsed as the request resource model `Request` by mistake, so its fields read as None.
11+
- Change feed subscriptions: `client.change_feed_subscriptions.create()`, `.list()`, `.retrieve()`, `.update()` and `.delete()` (`/v1/change-feed-subscriptions`). A subscription polls every connected end user of the project for changed and deleted records of the listed resources and sends `data.changed` webhooks with their IDs. New webhook event type `EventType.DATA_CHANGED` (`data.changed`). New error code `CHANGE_FEED_SUBSCRIPTION_LIMIT_REACHED` (`422`, not retryable).
12+
513
## 0.6.0 (2026-10-12)
614

715
- **Breaking:** the list parameters type of `qbd.classes.list` is renamed from `ClasseListParams` to `ClassListParams` (the generator dropped only the final "s" of "classes"). Rename the type in your code; nothing else changes. No other type name was affected.

‎CONTRIBUTING.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Because of this, we usually cannot merge pull requests as they are. Open an issu
1616

1717
Open an issue with:
1818

19-
- the SDK version (for example `0.6.0`) and your Python version,
19+
- the SDK version (for example `0.7.0`) and your Python version,
2020
- the operation you called, for example `qbd.invoices.create`,
2121
- the `Daapi-Request-Id` of the failing call (every error exposes it as its request ID),
2222
- what you expected and what happened.

‎README.md‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
The Python client for [Desktop Accounting API](https://www.desktopaccountingapi.com/), a REST API for QuickBooks Desktop and QuickBooks Enterprise. Your server makes typed calls such as `client.qbd.invoices.create(...)`, and Desktop Accounting API delivers them to your customer's company file through the QuickBooks Web Connector.
44

5-
- Covers all 433 operations of API 1.0.0: QuickBooks objects and reports (`client.qbd`), end users, auth sessions, request tracking, qbXML passthrough and webhook verification.
5+
- Covers all 439 operations of API 1.0.0: QuickBooks objects and reports (`client.qbd`), end users, auth sessions, request tracking, qbXML passthrough and webhook verification.
66
- Frozen dataclass models, keyword-only arguments, `Literal` enums, `mypy --strict` clean, a synchronous and an asyncio client.
77
- Amounts are `decimal.Decimal`, never `float`.
88
- Every write carries an idempotency key, retries happen only where they cannot duplicate data, and an expired QuickBooks cursor never restarts a list silently.
@@ -15,12 +15,12 @@ The Python client for [Desktop Accounting API](https://www.desktopaccountingapi.
1515
pip install desktopaccountingapi-quickbooks-desktop
1616
```
1717

18-
The current version is **0.6.0**. To pin it exactly:
18+
The current version is **0.7.0**. To pin it exactly:
1919

2020
```sh
21-
pip install "desktopaccountingapi-quickbooks-desktop==0.6.0"
22-
uv add "desktopaccountingapi-quickbooks-desktop==0.6.0"
23-
poetry add "desktopaccountingapi-quickbooks-desktop==0.6.0"
21+
pip install "desktopaccountingapi-quickbooks-desktop==0.7.0"
22+
uv add "desktopaccountingapi-quickbooks-desktop==0.7.0"
23+
poetry add "desktopaccountingapi-quickbooks-desktop==0.7.0"
2424
```
2525

2626
The distribution is `desktopaccountingapi-quickbooks-desktop`; the import package is `desktopaccountingapi`.
@@ -511,7 +511,7 @@ The [migration guide](https://www.desktopaccountingapi.com/docs/get-started/migr
511511
- The Python, Node.js, .NET and Java SDKs and the [MCP server](https://github.com/DesktopAccountingAPI/quickbooks-desktop-mcp) are released together with the same version number, generated from the same API contract.
512512
- Every release is listed in [CHANGELOG.md](https://github.com/DesktopAccountingAPI/quickbooks-desktop-python/blob/main/CHANGELOG.md) and tagged `v<version>` on GitHub.
513513
- The API is versioned in its path (`/v1`). Within `v1` the API only adds operations, fields, enum values and error codes, and the SDK tolerates all of them, so older SDK versions keep working.
514-
- Each release is generated from one version of the API contract; `.daapi-sdk.json` and `desktopaccountingapi.CONTRACT_SHA256` record its digest (`sha256:45acc3e65d06...` for this release), `desktopaccountingapi.API_VERSION` the API version and `desktopaccountingapi.__version__` the package version.
514+
- Each release is generated from one version of the API contract; `.daapi-sdk.json` and `desktopaccountingapi.CONTRACT_SHA256` record its digest (`sha256:f4cd9b5c733e...` for this release), `desktopaccountingapi.API_VERSION` the API version and `desktopaccountingapi.__version__` the package version.
515515

516516
## Support
517517

@@ -525,7 +525,7 @@ The [migration guide](https://www.desktopaccountingapi.com/docs/get-started/migr
525525

526526
The toolchain is pinned in `mise.toml`. `mise run check` installs the pinned dev tools with uv and runs ruff, `mypy --strict`, the unit tests, the cross-language conformance suite (against `conformance/mock-server.mjs`), the example type checks, the README samples (`mypy --strict` on every Python block of this file, and the quickstart against the mock server) and a build plus clean install of the wheel. Set `UV_PYTHON=3.9` (or any supported version) to run it on another interpreter.
527527

528-
To install from source: `pip install "git+https://github.com/DesktopAccountingAPI/quickbooks-desktop-python.git@v0.6.0"`. The code under `src/desktopaccountingapi/types` and `src/desktopaccountingapi/resources`, `api.md`, `conformance/fixtures` and this README are generated; see [CONTRIBUTING.md](https://github.com/DesktopAccountingAPI/quickbooks-desktop-python/blob/main/CONTRIBUTING.md).
528+
To install from source: `pip install "git+https://github.com/DesktopAccountingAPI/quickbooks-desktop-python.git@v0.7.0"`. The code under `src/desktopaccountingapi/types` and `src/desktopaccountingapi/resources`, `api.md`, `conformance/fixtures` and this README are generated; see [CONTRIBUTING.md](https://github.com/DesktopAccountingAPI/quickbooks-desktop-python/blob/main/CONTRIBUTING.md).
529529

530530
## License
531531

‎api.md‎

Lines changed: 13 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎conformance/README.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ Operations and parameter shapes used by the fixtures:
8585
| `endUsers.list` | | `limit` |
8686
| `endUsers.passthrough` | `id` | free-form JSON body |
8787
| `requests.retrieve` | `id` | |
88+
| `qbd.batch` | | `onError`, `requests[]` of typed members `{ operationId, pathParams?, query?, body? }`: build each member as the SDK's member class for its `operationId` (Node.js: the object as is) |
8889

8990
Convert params to the SDK's native types. Decimal strings become the native decimal type and dates become the native date type. A key present with `null` is an explicit null, and an absent key is not set. The runner fails if a decimal is sent as anything other than the expected string.
9091

@@ -123,6 +124,7 @@ The runner compares only the keys that are present.
123124
- `text`: the exact text returned by an `xml` call.
124125
- `items`: the `id`s of the items yielded by `iterate`, in order.
125126
- `variant`: the SDK class of the result of an operation that returns a discriminated union (`qbd.items.retrieve` returns `Item`): the model of its `objectType` (`ServiceItem`), or the union's fallback for a kind the SDK does not know (`UnknownItem`). `itemVariants` is the same for each item yielded by `iterate`. The Node.js SDK returns plain JSON typed as a TypeScript union, so it has no class to check.
127+
- `resultVariants`: the SDK class of each element of a batch result's `results` (`qbd.batch`): the result class of its `operationId` (`BatchCustomerCreateResult`), or the result union's fallback (`UnknownBatchResult`) for an operation the SDK does not know. Node.js returns plain JSON typed per member, so it has no class to check.
126128
- `page`: `ids`, `nextCursor`, `hasMore`, `remainingCount` of the first page.
127129
- `handle`: `id` and `status` of the request handle returned by `enqueue`.
128130
- `response`: `status`, `requestId` (the SDK's reported request ID: `Daapi-Request-Id`, or after a long poll the timed-out request's `details.requestId`) and `headers` (lowercase name to value).

‎conformance/fixtures/consumer.json‎

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)