Skip to content
Desktop Accounting API

Create a change feed subscription

Try itPOST /v1/change-feed-subscriptions

This request changes data. It runs for real against the QuickBooks Desktop company file of the end user you choose. Use a test key (sk_test_) and a test company file.

Generated for you. Resending with the same key replays the original result instead of writing twice; a new key is generated after each response unless the API says the request is safe to retry.
Prefilled with the required fields only. See the request body section below for every field.
POST
/v1/change-feed-subscriptions
curl -X POST https://api.desktopaccountingapi.com/v1/change-feed-subscriptions \
-H "Authorization: Bearer $DAAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"resources":["customers","invoices"]}'

Starts polling every connected end user of this project for changes to the listed resources. Each poll reads the watched resources changed since the previous poll (with a 2-minute overlap for the QuickBooks computer’s clock) and the deleted ones, and sends one or more data.changed events with their IDs only. Subscribe a webhook endpoint to data.changed to receive them. Polls never run ahead of your own requests, and a connection that is offline, disabled or holding a write whose outcome is unknown is skipped and caught up later. A successful poll of a production company file counts as a data request for billing, like your own reads; sample company files, exempt files and test projects are free. See Change feed. Changes made before the subscription (or a resource) was added are not included. A project can have up to 10 subscriptions.

Idempotency-Key
string
>= 1 characters <= 255 characters /^[\x20-\x7e]+$/

Makes a write safe to retry. Repeating a key with the same request attaches to or replays the original instead of creating a second one. 1–255 printable ASCII characters, retained 7 days. Reusing a key with a different request returns 422 IDEMPOTENCY_KEY_REUSED.

Example
6f1c2a0e-1f7e-4c55-9a7a-0b2d2c9e3a10
Media typeapplication/json
object
resources
required

Resources to watch, each listed once. Every poll reads each of them on every subscribed connection.

Array<string>
>= 1 items <= 62 items
Allowed values: accounts billCheckPayments billCreditCardPayments billingRates bills buildAssemblies checks classes creditCardCharges creditCardCredits creditCardRefunds creditMemos currencies customerMessages customerTypes customers dateDrivenTerms deposits discountItems employees estimates fixedAssetItems inventoryAdjustments inventoryAssemblyItems inventoryItems inventoryTransfers invoices itemGroups itemReceipts jobTypes journalEntries nonInventoryItems otherChargeItems otherNames paymentItems paymentMethods payrollNonWageItems payrollWageItems priceLevels purchaseOrders receivePayments salesOrders salesReceipts salesRepresentatives salesTaxCodes salesTaxGroupItems salesTaxItems salesTaxPaymentChecks serviceItems shippingMethods standardTerms statementCharges subtotalItems timeTrackingActivities toDos unitOfMeasureSets vehicleMileage vehicles vendorCredits vendorTypes vendors workersCompCodes
Example
[
"customers",
"invoices"
]
intervalMinutes

Minutes between polls of each connection, 15 to 1440. Polls run on a 15-minute schedule, so a connection is polled at the first run after its interval has passed; when several subscriptions watch the same resource, the shortest interval applies.

integer
default: 15 >= 15 <= 1440
Example
15
enabled

Poll connections. Default true.

boolean
default: true

The created subscription.

Media typeapplication/json
object
id
required

Unique identifier for the change feed subscription.

string
/^cfs_[0-9a-hjkmnp-tv-z]{26}$/
objectType
required

Always change_feed_subscription.

string
Allowed values: change_feed_subscription
createdAt
required

When the subscription was created. UTC, ISO 8601 with milliseconds.

string format: date-time
updatedAt
required

When the subscription was last changed. UTC, ISO 8601 with milliseconds.

string format: date-time
projectId
required

Unique identifier for the project.

string
/^proj_[0-9a-hjkmnp-tv-z]{26}$/
resources
required

Watched resources, in alphabetical order.

Array<string>
Allowed values: accounts billCheckPayments billCreditCardPayments billingRates bills buildAssemblies checks classes creditCardCharges creditCardCredits creditCardRefunds creditMemos currencies customerMessages customerTypes customers dateDrivenTerms deposits discountItems employees estimates fixedAssetItems inventoryAdjustments inventoryAssemblyItems inventoryItems inventoryTransfers invoices itemGroups itemReceipts jobTypes journalEntries nonInventoryItems otherChargeItems otherNames paymentItems paymentMethods payrollNonWageItems payrollWageItems priceLevels purchaseOrders receivePayments salesOrders salesReceipts salesRepresentatives salesTaxCodes salesTaxGroupItems salesTaxItems salesTaxPaymentChecks serviceItems shippingMethods standardTerms statementCharges subtotalItems timeTrackingActivities toDos unitOfMeasureSets vehicleMileage vehicles vendorCredits vendorTypes vendors workersCompCodes
intervalMinutes
required

Minutes between polls of each connection.

integer
enabled
required

Whether connections are polled. A disabled subscription keeps its settings.

boolean
Example
{
"id": "cfs_01j9x4m6v4c8k2t7q0r5s3w1zk",
"objectType": "change_feed_subscription",
"createdAt": "2026-10-05T16:03:59.002Z",
"updatedAt": "2026-10-05T16:03:59.002Z",
"projectId": "proj_01j9x4m6v4c8k2t7q0r5s3w1zf",
"resources": [
"accounts"
],
"intervalMinutes": 15
}
Daapi-Request-Id
string

Unique ID of this API call (req_...). Present on every response.

RateLimit-Limit
integer

Requests allowed per window for the project (all keys together).

RateLimit-Remaining
integer

Requests left in the current window, as counted by the edge location that served this call.

RateLimit-Reset
integer

Seconds until the current window resets.

The request is invalid. Codes: UNKNOWN_HEADER, INVALID_JSON, INVALID_PARAMETER, UNKNOWN_PARAMETER, IDEMPOTENCY_KEY_INVALID.

Media typeapplication/json
object
error
required
object
type
required

Error category. Use it to choose between retrying, fixing the request and asking the end user to act.

string
Allowed values: INVALID_REQUEST_ERROR AUTHENTICATION_ERROR PERMISSION_ERROR BILLING_ERROR RATE_LIMIT_ERROR INTEGRATION_CONNECTION_ERROR INTEGRATION_ERROR OUTCOME_UNKNOWN_ERROR INTERNAL_ERROR
code
required

Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.

string
Allowed values: INVALID_JSON INVALID_PARAMETER UNKNOWN_PARAMETER UNKNOWN_HEADER DECIMAL_PRECISION_EXCEEDED STRING_TOO_LONG UNSUPPORTED_CHARACTER FIELD_NOT_CLEARABLE END_USER_ID_MISSING PAYLOAD_TOO_LARGE IDEMPOTENCY_KEY_INVALID IDEMPOTENCY_KEY_REUSED CURSOR_INVALID CURSOR_PARAMS_MISMATCH CURSOR_EXPIRED RESOURCE_MISSING ROUTE_NOT_FOUND REQUEST_NOT_CANCELABLE COMPANY_FILE_RESET_BUSY PASSTHROUGH_INVALID_QBXML QBD_FIELD_UNSUPPORTED_BY_VERSION QBD_REGION_UNSUPPORTED API_KEY_MISSING API_KEY_INVALID PUBLISHABLE_KEY_INVALID PUBLISHABLE_KEY_PROJECT_MISMATCH TEST_COMPANY_FILE_LIMIT_REACHED API_KEY_READ_ONLY PERMISSION_DENIED BILLING_REQUIRED PAYMENT_FAILED RATE_LIMITED CONNECTION_QUEUE_FULL WEBHOOK_ENDPOINT_LIMIT_REACHED CHANGE_FEED_SUBSCRIPTION_LIMIT_REACHED INTEGRATION_CONNECTION_NOT_SET_UP INTEGRATION_CONNECTION_NOT_ACTIVE INTEGRATION_CONNECTION_DISABLED QBD_CONNECTION_ERROR QBD_CANNOT_START QBD_STARTING QBD_MODAL_DIALOG_OPEN QBD_QUICKBOOKS_NOT_RESPONDING QBD_WRONG_COMPANY_FILE_OPEN QBD_COMPANY_FILE_MISMATCH QBD_COMPANY_FILE_NOT_FOUND QBD_FILE_MODE_CONFLICT QBD_ADMIN_REQUIRED QBD_ACCESS_NOT_GRANTED QBD_VERSION_UNSUPPORTED QBD_REQUEST_ERROR QBD_OBJECT_NOT_FOUND QBD_REFERENCE_NOT_FOUND QBD_SALES_TAX_THROUGH_DATE_TOO_EARLY QBD_DUPLICATE_NAME QBD_REVISION_NUMBER_STALE QBD_OBJECT_IN_USE QBD_TRANSIENT_ERROR QBD_FEATURE_NOT_ENABLED QBD_INSUFFICIENT_PERMISSION QBD_RESPONSE_TOO_LARGE QBD_OPERATION_UNSUPPORTED QBD_RESPONSE_UNAVAILABLE QBD_RESPONSE_UNREADABLE REQUEST_TIMEOUT_NOT_SENT REQUEST_EXPIRED REQUEST_CANCELED QBD_REQUEST_TIMEOUT QBD_WRITE_OUTCOME_UNKNOWN QBD_REQUEST_NOT_PROCESSED QBD_READ_INTERRUPTED INTERNAL_ERROR SERVICE_UNAVAILABLE
message
required

Developer-facing explanation. May include IDs and field paths; never includes secrets.

string
userFacingMessage
required

A message that is safe to show to the end user.

string
httpStatusCode
required

HTTP status of the response. Every code defines one; on a request resource it is the status a synchronous call returns for the same error (for example 409 for REQUEST_CANCELED, 504 for REQUEST_EXPIRED). Nullable for compatibility only.

integer | null
integrationCode
required

Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.

string | null
requestId
required

The Daapi-Request-Id of this response. Include it when contacting support.

string
cause
required

Why this error happens.

string
fixes
required

Ordered actions that resolve the error, each with the responsible actor.

Array<object>
object
actor
required

Who can apply the fix.

string
Allowed values: developer end_user support
action
required

What to do.

string
docsUrl
required

Documentation section for this code.

string format: uri
retryable
required

Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.

boolean
outcome
required

Whether a write took effect: applied (QuickBooks confirmed it), not_applied (it certainly did not happen), pending (sent, still processing), unknown (sent, result could not be confirmed) or not_applicable (a read).

string
Allowed values: applied not_applied pending unknown not_applicable
param
required

Request field, query parameter or header the error refers to, when known.

string | null
details
required

Code-specific details, documented per code in the error catalog.

object
key
additional properties
Examples

400 UNKNOWN_HEADER

{
"error": {
"type": "INVALID_REQUEST_ERROR",
"code": "UNKNOWN_HEADER",
"message": "The request contains an unknown Daapi-* header.",
"userFacingMessage": "This action could not be completed. Please contact the application provider.",
"httpStatusCode": 400,
"integrationCode": null,
"requestId": "req_01j9x4m6v4c8k2t7q0r5s3w1zd",
"cause": "Unknown Daapi-* headers are rejected so that a typo does not silently fall back to a default.",
"fixes": [
{
"actor": "developer",
"action": "Check the header name named in `param` against the header reference."
}
],
"docsUrl": "https://www.desktopaccountingapi.com/docs/errors/#unknown_header",
"retryable": false,
"outcome": "not_applied",
"param": null,
"details": {}
}
}
Daapi-Request-Id
string

Unique ID of this API call (req_...). Present on every response.

RateLimit-Limit
integer

Requests allowed per window for the project (all keys together).

RateLimit-Remaining
integer

Requests left in the current window, as counted by the edge location that served this call.

RateLimit-Reset
integer

Seconds until the current window resets.

Daapi-Should-Retry
string
Allowed values: true false

true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.

Retry-After
integer

Seconds to wait before retrying, on 429 and on retryable 503 responses when a wait is known.

The API key is missing or invalid. Codes: API_KEY_MISSING, API_KEY_INVALID.

Media typeapplication/json
object
error
required
object
type
required

Error category. Use it to choose between retrying, fixing the request and asking the end user to act.

string
Allowed values: INVALID_REQUEST_ERROR AUTHENTICATION_ERROR PERMISSION_ERROR BILLING_ERROR RATE_LIMIT_ERROR INTEGRATION_CONNECTION_ERROR INTEGRATION_ERROR OUTCOME_UNKNOWN_ERROR INTERNAL_ERROR
code
required

Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.

string
Allowed values: INVALID_JSON INVALID_PARAMETER UNKNOWN_PARAMETER UNKNOWN_HEADER DECIMAL_PRECISION_EXCEEDED STRING_TOO_LONG UNSUPPORTED_CHARACTER FIELD_NOT_CLEARABLE END_USER_ID_MISSING PAYLOAD_TOO_LARGE IDEMPOTENCY_KEY_INVALID IDEMPOTENCY_KEY_REUSED CURSOR_INVALID CURSOR_PARAMS_MISMATCH CURSOR_EXPIRED RESOURCE_MISSING ROUTE_NOT_FOUND REQUEST_NOT_CANCELABLE COMPANY_FILE_RESET_BUSY PASSTHROUGH_INVALID_QBXML QBD_FIELD_UNSUPPORTED_BY_VERSION QBD_REGION_UNSUPPORTED API_KEY_MISSING API_KEY_INVALID PUBLISHABLE_KEY_INVALID PUBLISHABLE_KEY_PROJECT_MISMATCH TEST_COMPANY_FILE_LIMIT_REACHED API_KEY_READ_ONLY PERMISSION_DENIED BILLING_REQUIRED PAYMENT_FAILED RATE_LIMITED CONNECTION_QUEUE_FULL WEBHOOK_ENDPOINT_LIMIT_REACHED CHANGE_FEED_SUBSCRIPTION_LIMIT_REACHED INTEGRATION_CONNECTION_NOT_SET_UP INTEGRATION_CONNECTION_NOT_ACTIVE INTEGRATION_CONNECTION_DISABLED QBD_CONNECTION_ERROR QBD_CANNOT_START QBD_STARTING QBD_MODAL_DIALOG_OPEN QBD_QUICKBOOKS_NOT_RESPONDING QBD_WRONG_COMPANY_FILE_OPEN QBD_COMPANY_FILE_MISMATCH QBD_COMPANY_FILE_NOT_FOUND QBD_FILE_MODE_CONFLICT QBD_ADMIN_REQUIRED QBD_ACCESS_NOT_GRANTED QBD_VERSION_UNSUPPORTED QBD_REQUEST_ERROR QBD_OBJECT_NOT_FOUND QBD_REFERENCE_NOT_FOUND QBD_SALES_TAX_THROUGH_DATE_TOO_EARLY QBD_DUPLICATE_NAME QBD_REVISION_NUMBER_STALE QBD_OBJECT_IN_USE QBD_TRANSIENT_ERROR QBD_FEATURE_NOT_ENABLED QBD_INSUFFICIENT_PERMISSION QBD_RESPONSE_TOO_LARGE QBD_OPERATION_UNSUPPORTED QBD_RESPONSE_UNAVAILABLE QBD_RESPONSE_UNREADABLE REQUEST_TIMEOUT_NOT_SENT REQUEST_EXPIRED REQUEST_CANCELED QBD_REQUEST_TIMEOUT QBD_WRITE_OUTCOME_UNKNOWN QBD_REQUEST_NOT_PROCESSED QBD_READ_INTERRUPTED INTERNAL_ERROR SERVICE_UNAVAILABLE
message
required

Developer-facing explanation. May include IDs and field paths; never includes secrets.

string
userFacingMessage
required

A message that is safe to show to the end user.

string
httpStatusCode
required

HTTP status of the response. Every code defines one; on a request resource it is the status a synchronous call returns for the same error (for example 409 for REQUEST_CANCELED, 504 for REQUEST_EXPIRED). Nullable for compatibility only.

integer | null
integrationCode
required

Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.

string | null
requestId
required

The Daapi-Request-Id of this response. Include it when contacting support.

string
cause
required

Why this error happens.

string
fixes
required

Ordered actions that resolve the error, each with the responsible actor.

Array<object>
object
actor
required

Who can apply the fix.

string
Allowed values: developer end_user support
action
required

What to do.

string
docsUrl
required

Documentation section for this code.

string format: uri
retryable
required

Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.

boolean
outcome
required

Whether a write took effect: applied (QuickBooks confirmed it), not_applied (it certainly did not happen), pending (sent, still processing), unknown (sent, result could not be confirmed) or not_applicable (a read).

string
Allowed values: applied not_applied pending unknown not_applicable
param
required

Request field, query parameter or header the error refers to, when known.

string | null
details
required

Code-specific details, documented per code in the error catalog.

object
key
additional properties
Examples

401 API_KEY_MISSING

{
"error": {
"type": "AUTHENTICATION_ERROR",
"code": "API_KEY_MISSING",
"message": "No API key was provided. Send Authorization: Bearer <secret key>.",
"userFacingMessage": "This action is not available right now. Please contact the application provider.",
"httpStatusCode": 401,
"integrationCode": null,
"requestId": "req_01j9x4m6v4c8k2t7q0r5s3w1zd",
"cause": "The Authorization header is missing or is not a Bearer token.",
"fixes": [
{
"actor": "developer",
"action": "Send Authorization: Bearer sk_live_... (or sk_test_...) from your server."
}
],
"docsUrl": "https://www.desktopaccountingapi.com/docs/errors/#api_key_missing",
"retryable": false,
"outcome": "not_applied",
"param": null,
"details": {}
}
}
Daapi-Request-Id
string

Unique ID of this API call (req_...). Present on every response.

RateLimit-Limit
integer

Requests allowed per window for the project (all keys together).

RateLimit-Remaining
integer

Requests left in the current window, as counted by the edge location that served this call.

RateLimit-Reset
integer

Seconds until the current window resets.

Daapi-Should-Retry
string
Allowed values: true false

true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.

Retry-After
integer

Seconds to wait before retrying, on 429 and on retryable 503 responses when a wait is known.

The operation is not permitted. Codes: API_KEY_READ_ONLY.

Media typeapplication/json
object
error
required
object
type
required

Error category. Use it to choose between retrying, fixing the request and asking the end user to act.

string
Allowed values: INVALID_REQUEST_ERROR AUTHENTICATION_ERROR PERMISSION_ERROR BILLING_ERROR RATE_LIMIT_ERROR INTEGRATION_CONNECTION_ERROR INTEGRATION_ERROR OUTCOME_UNKNOWN_ERROR INTERNAL_ERROR
code
required

Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.

string
Allowed values: INVALID_JSON INVALID_PARAMETER UNKNOWN_PARAMETER UNKNOWN_HEADER DECIMAL_PRECISION_EXCEEDED STRING_TOO_LONG UNSUPPORTED_CHARACTER FIELD_NOT_CLEARABLE END_USER_ID_MISSING PAYLOAD_TOO_LARGE IDEMPOTENCY_KEY_INVALID IDEMPOTENCY_KEY_REUSED CURSOR_INVALID CURSOR_PARAMS_MISMATCH CURSOR_EXPIRED RESOURCE_MISSING ROUTE_NOT_FOUND REQUEST_NOT_CANCELABLE COMPANY_FILE_RESET_BUSY PASSTHROUGH_INVALID_QBXML QBD_FIELD_UNSUPPORTED_BY_VERSION QBD_REGION_UNSUPPORTED API_KEY_MISSING API_KEY_INVALID PUBLISHABLE_KEY_INVALID PUBLISHABLE_KEY_PROJECT_MISMATCH TEST_COMPANY_FILE_LIMIT_REACHED API_KEY_READ_ONLY PERMISSION_DENIED BILLING_REQUIRED PAYMENT_FAILED RATE_LIMITED CONNECTION_QUEUE_FULL WEBHOOK_ENDPOINT_LIMIT_REACHED CHANGE_FEED_SUBSCRIPTION_LIMIT_REACHED INTEGRATION_CONNECTION_NOT_SET_UP INTEGRATION_CONNECTION_NOT_ACTIVE INTEGRATION_CONNECTION_DISABLED QBD_CONNECTION_ERROR QBD_CANNOT_START QBD_STARTING QBD_MODAL_DIALOG_OPEN QBD_QUICKBOOKS_NOT_RESPONDING QBD_WRONG_COMPANY_FILE_OPEN QBD_COMPANY_FILE_MISMATCH QBD_COMPANY_FILE_NOT_FOUND QBD_FILE_MODE_CONFLICT QBD_ADMIN_REQUIRED QBD_ACCESS_NOT_GRANTED QBD_VERSION_UNSUPPORTED QBD_REQUEST_ERROR QBD_OBJECT_NOT_FOUND QBD_REFERENCE_NOT_FOUND QBD_SALES_TAX_THROUGH_DATE_TOO_EARLY QBD_DUPLICATE_NAME QBD_REVISION_NUMBER_STALE QBD_OBJECT_IN_USE QBD_TRANSIENT_ERROR QBD_FEATURE_NOT_ENABLED QBD_INSUFFICIENT_PERMISSION QBD_RESPONSE_TOO_LARGE QBD_OPERATION_UNSUPPORTED QBD_RESPONSE_UNAVAILABLE QBD_RESPONSE_UNREADABLE REQUEST_TIMEOUT_NOT_SENT REQUEST_EXPIRED REQUEST_CANCELED QBD_REQUEST_TIMEOUT QBD_WRITE_OUTCOME_UNKNOWN QBD_REQUEST_NOT_PROCESSED QBD_READ_INTERRUPTED INTERNAL_ERROR SERVICE_UNAVAILABLE
message
required

Developer-facing explanation. May include IDs and field paths; never includes secrets.

string
userFacingMessage
required

A message that is safe to show to the end user.

string
httpStatusCode
required

HTTP status of the response. Every code defines one; on a request resource it is the status a synchronous call returns for the same error (for example 409 for REQUEST_CANCELED, 504 for REQUEST_EXPIRED). Nullable for compatibility only.

integer | null
integrationCode
required

Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.

string | null
requestId
required

The Daapi-Request-Id of this response. Include it when contacting support.

string
cause
required

Why this error happens.

string
fixes
required

Ordered actions that resolve the error, each with the responsible actor.

Array<object>
object
actor
required

Who can apply the fix.

string
Allowed values: developer end_user support
action
required

What to do.

string
docsUrl
required

Documentation section for this code.

string format: uri
retryable
required

Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.

boolean
outcome
required

Whether a write took effect: applied (QuickBooks confirmed it), not_applied (it certainly did not happen), pending (sent, still processing), unknown (sent, result could not be confirmed) or not_applicable (a read).

string
Allowed values: applied not_applied pending unknown not_applicable
param
required

Request field, query parameter or header the error refers to, when known.

string | null
details
required

Code-specific details, documented per code in the error catalog.

object
key
additional properties
Examples
ExampleAPI_KEY_READ_ONLY

403 API_KEY_READ_ONLY

{
"error": {
"type": "PERMISSION_ERROR",
"code": "API_KEY_READ_ONLY",
"message": "This secret key is read-only and cannot change data.",
"userFacingMessage": "This action is not available right now. Please contact the application provider.",
"httpStatusCode": 403,
"integrationCode": null,
"requestId": "req_01j9x4m6v4c8k2t7q0r5s3w1zd",
"cause": "The request was made with a read-only secret key. Read-only keys can call GET operations and passthrough requests that contain only queries (`...QueryRq`). Creating, updating, deleting or voiding objects, writes through passthrough, auth sessions, end-user changes, request cancellation and webhook endpoint changes need a full-access key. The API rejects the request before anything is queued or sent to QuickBooks.",
"fixes": [
{
"actor": "developer",
"action": "Use a full-access secret key for writes, or keep this key for read-only tools such as an MCP connection for AI agents."
}
],
"docsUrl": "https://www.desktopaccountingapi.com/docs/errors/#api_key_read_only",
"retryable": false,
"outcome": "not_applied",
"param": null,
"details": {}
}
}
Daapi-Request-Id
string

Unique ID of this API call (req_...). Present on every response.

RateLimit-Limit
integer

Requests allowed per window for the project (all keys together).

RateLimit-Remaining
integer

Requests left in the current window, as counted by the edge location that served this call.

RateLimit-Reset
integer

Seconds until the current window resets.

Daapi-Should-Retry
string
Allowed values: true false

true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.

Retry-After
integer

Seconds to wait before retrying, on 429 and on retryable 503 responses when a wait is known.

The request is well formed but cannot be processed. Codes: IDEMPOTENCY_KEY_REUSED, CHANGE_FEED_SUBSCRIPTION_LIMIT_REACHED.

Media typeapplication/json
object
error
required
object
type
required

Error category. Use it to choose between retrying, fixing the request and asking the end user to act.

string
Allowed values: INVALID_REQUEST_ERROR AUTHENTICATION_ERROR PERMISSION_ERROR BILLING_ERROR RATE_LIMIT_ERROR INTEGRATION_CONNECTION_ERROR INTEGRATION_ERROR OUTCOME_UNKNOWN_ERROR INTERNAL_ERROR
code
required

Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.

string
Allowed values: INVALID_JSON INVALID_PARAMETER UNKNOWN_PARAMETER UNKNOWN_HEADER DECIMAL_PRECISION_EXCEEDED STRING_TOO_LONG UNSUPPORTED_CHARACTER FIELD_NOT_CLEARABLE END_USER_ID_MISSING PAYLOAD_TOO_LARGE IDEMPOTENCY_KEY_INVALID IDEMPOTENCY_KEY_REUSED CURSOR_INVALID CURSOR_PARAMS_MISMATCH CURSOR_EXPIRED RESOURCE_MISSING ROUTE_NOT_FOUND REQUEST_NOT_CANCELABLE COMPANY_FILE_RESET_BUSY PASSTHROUGH_INVALID_QBXML QBD_FIELD_UNSUPPORTED_BY_VERSION QBD_REGION_UNSUPPORTED API_KEY_MISSING API_KEY_INVALID PUBLISHABLE_KEY_INVALID PUBLISHABLE_KEY_PROJECT_MISMATCH TEST_COMPANY_FILE_LIMIT_REACHED API_KEY_READ_ONLY PERMISSION_DENIED BILLING_REQUIRED PAYMENT_FAILED RATE_LIMITED CONNECTION_QUEUE_FULL WEBHOOK_ENDPOINT_LIMIT_REACHED CHANGE_FEED_SUBSCRIPTION_LIMIT_REACHED INTEGRATION_CONNECTION_NOT_SET_UP INTEGRATION_CONNECTION_NOT_ACTIVE INTEGRATION_CONNECTION_DISABLED QBD_CONNECTION_ERROR QBD_CANNOT_START QBD_STARTING QBD_MODAL_DIALOG_OPEN QBD_QUICKBOOKS_NOT_RESPONDING QBD_WRONG_COMPANY_FILE_OPEN QBD_COMPANY_FILE_MISMATCH QBD_COMPANY_FILE_NOT_FOUND QBD_FILE_MODE_CONFLICT QBD_ADMIN_REQUIRED QBD_ACCESS_NOT_GRANTED QBD_VERSION_UNSUPPORTED QBD_REQUEST_ERROR QBD_OBJECT_NOT_FOUND QBD_REFERENCE_NOT_FOUND QBD_SALES_TAX_THROUGH_DATE_TOO_EARLY QBD_DUPLICATE_NAME QBD_REVISION_NUMBER_STALE QBD_OBJECT_IN_USE QBD_TRANSIENT_ERROR QBD_FEATURE_NOT_ENABLED QBD_INSUFFICIENT_PERMISSION QBD_RESPONSE_TOO_LARGE QBD_OPERATION_UNSUPPORTED QBD_RESPONSE_UNAVAILABLE QBD_RESPONSE_UNREADABLE REQUEST_TIMEOUT_NOT_SENT REQUEST_EXPIRED REQUEST_CANCELED QBD_REQUEST_TIMEOUT QBD_WRITE_OUTCOME_UNKNOWN QBD_REQUEST_NOT_PROCESSED QBD_READ_INTERRUPTED INTERNAL_ERROR SERVICE_UNAVAILABLE
message
required

Developer-facing explanation. May include IDs and field paths; never includes secrets.

string
userFacingMessage
required

A message that is safe to show to the end user.

string
httpStatusCode
required

HTTP status of the response. Every code defines one; on a request resource it is the status a synchronous call returns for the same error (for example 409 for REQUEST_CANCELED, 504 for REQUEST_EXPIRED). Nullable for compatibility only.

integer | null
integrationCode
required

Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.

string | null
requestId
required

The Daapi-Request-Id of this response. Include it when contacting support.

string
cause
required

Why this error happens.

string
fixes
required

Ordered actions that resolve the error, each with the responsible actor.

Array<object>
object
actor
required

Who can apply the fix.

string
Allowed values: developer end_user support
action
required

What to do.

string
docsUrl
required

Documentation section for this code.

string format: uri
retryable
required

Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.

boolean
outcome
required

Whether a write took effect: applied (QuickBooks confirmed it), not_applied (it certainly did not happen), pending (sent, still processing), unknown (sent, result could not be confirmed) or not_applicable (a read).

string
Allowed values: applied not_applied pending unknown not_applicable
param
required

Request field, query parameter or header the error refers to, when known.

string | null
details
required

Code-specific details, documented per code in the error catalog.

object
key
additional properties
Examples

422 IDEMPOTENCY_KEY_REUSED

{
"error": {
"type": "INVALID_REQUEST_ERROR",
"code": "IDEMPOTENCY_KEY_REUSED",
"message": "This Idempotency-Key was already used with a different request.",
"userFacingMessage": "This action could not be completed. Please contact the application provider.",
"httpStatusCode": 422,
"integrationCode": null,
"requestId": "req_01j9x4m6v4c8k2t7q0r5s3w1zd",
"cause": "A key identifies one logical request. The method, path, end user or body differs from the first use of this key.",
"fixes": [
{
"actor": "developer",
"action": "Generate a new key for each logical request and reuse it only for retries of that request."
}
],
"docsUrl": "https://www.desktopaccountingapi.com/docs/errors/#idempotency_key_reused",
"retryable": false,
"outcome": "not_applied",
"param": null,
"details": {}
}
}
Daapi-Request-Id
string

Unique ID of this API call (req_...). Present on every response.

RateLimit-Limit
integer

Requests allowed per window for the project (all keys together).

RateLimit-Remaining
integer

Requests left in the current window, as counted by the edge location that served this call.

RateLimit-Reset
integer

Seconds until the current window resets.

Daapi-Should-Retry
string
Allowed values: true false

true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.

Retry-After
integer

Seconds to wait before retrying, on 429 and on retryable 503 responses when a wait is known.

Too many requests. Codes: RATE_LIMITED.

Media typeapplication/json
object
error
required
object
type
required

Error category. Use it to choose between retrying, fixing the request and asking the end user to act.

string
Allowed values: INVALID_REQUEST_ERROR AUTHENTICATION_ERROR PERMISSION_ERROR BILLING_ERROR RATE_LIMIT_ERROR INTEGRATION_CONNECTION_ERROR INTEGRATION_ERROR OUTCOME_UNKNOWN_ERROR INTERNAL_ERROR
code
required

Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.

string
Allowed values: INVALID_JSON INVALID_PARAMETER UNKNOWN_PARAMETER UNKNOWN_HEADER DECIMAL_PRECISION_EXCEEDED STRING_TOO_LONG UNSUPPORTED_CHARACTER FIELD_NOT_CLEARABLE END_USER_ID_MISSING PAYLOAD_TOO_LARGE IDEMPOTENCY_KEY_INVALID IDEMPOTENCY_KEY_REUSED CURSOR_INVALID CURSOR_PARAMS_MISMATCH CURSOR_EXPIRED RESOURCE_MISSING ROUTE_NOT_FOUND REQUEST_NOT_CANCELABLE COMPANY_FILE_RESET_BUSY PASSTHROUGH_INVALID_QBXML QBD_FIELD_UNSUPPORTED_BY_VERSION QBD_REGION_UNSUPPORTED API_KEY_MISSING API_KEY_INVALID PUBLISHABLE_KEY_INVALID PUBLISHABLE_KEY_PROJECT_MISMATCH TEST_COMPANY_FILE_LIMIT_REACHED API_KEY_READ_ONLY PERMISSION_DENIED BILLING_REQUIRED PAYMENT_FAILED RATE_LIMITED CONNECTION_QUEUE_FULL WEBHOOK_ENDPOINT_LIMIT_REACHED CHANGE_FEED_SUBSCRIPTION_LIMIT_REACHED INTEGRATION_CONNECTION_NOT_SET_UP INTEGRATION_CONNECTION_NOT_ACTIVE INTEGRATION_CONNECTION_DISABLED QBD_CONNECTION_ERROR QBD_CANNOT_START QBD_STARTING QBD_MODAL_DIALOG_OPEN QBD_QUICKBOOKS_NOT_RESPONDING QBD_WRONG_COMPANY_FILE_OPEN QBD_COMPANY_FILE_MISMATCH QBD_COMPANY_FILE_NOT_FOUND QBD_FILE_MODE_CONFLICT QBD_ADMIN_REQUIRED QBD_ACCESS_NOT_GRANTED QBD_VERSION_UNSUPPORTED QBD_REQUEST_ERROR QBD_OBJECT_NOT_FOUND QBD_REFERENCE_NOT_FOUND QBD_SALES_TAX_THROUGH_DATE_TOO_EARLY QBD_DUPLICATE_NAME QBD_REVISION_NUMBER_STALE QBD_OBJECT_IN_USE QBD_TRANSIENT_ERROR QBD_FEATURE_NOT_ENABLED QBD_INSUFFICIENT_PERMISSION QBD_RESPONSE_TOO_LARGE QBD_OPERATION_UNSUPPORTED QBD_RESPONSE_UNAVAILABLE QBD_RESPONSE_UNREADABLE REQUEST_TIMEOUT_NOT_SENT REQUEST_EXPIRED REQUEST_CANCELED QBD_REQUEST_TIMEOUT QBD_WRITE_OUTCOME_UNKNOWN QBD_REQUEST_NOT_PROCESSED QBD_READ_INTERRUPTED INTERNAL_ERROR SERVICE_UNAVAILABLE
message
required

Developer-facing explanation. May include IDs and field paths; never includes secrets.

string
userFacingMessage
required

A message that is safe to show to the end user.

string
httpStatusCode
required

HTTP status of the response. Every code defines one; on a request resource it is the status a synchronous call returns for the same error (for example 409 for REQUEST_CANCELED, 504 for REQUEST_EXPIRED). Nullable for compatibility only.

integer | null
integrationCode
required

Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.

string | null
requestId
required

The Daapi-Request-Id of this response. Include it when contacting support.

string
cause
required

Why this error happens.

string
fixes
required

Ordered actions that resolve the error, each with the responsible actor.

Array<object>
object
actor
required

Who can apply the fix.

string
Allowed values: developer end_user support
action
required

What to do.

string
docsUrl
required

Documentation section for this code.

string format: uri
retryable
required

Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.

boolean
outcome
required

Whether a write took effect: applied (QuickBooks confirmed it), not_applied (it certainly did not happen), pending (sent, still processing), unknown (sent, result could not be confirmed) or not_applicable (a read).

string
Allowed values: applied not_applied pending unknown not_applicable
param
required

Request field, query parameter or header the error refers to, when known.

string | null
details
required

Code-specific details, documented per code in the error catalog.

object
key
additional properties
Examples
ExampleRATE_LIMITED

429 RATE_LIMITED

{
"error": {
"type": "RATE_LIMIT_ERROR",
"code": "RATE_LIMITED",
"message": "Too many requests for this project. Retry after the time in Retry-After.",
"userFacingMessage": "Too many actions are in progress. Please try again in a moment.",
"httpStatusCode": 429,
"integrationCode": null,
"requestId": "req_01j9x4m6v4c8k2t7q0r5s3w1zd",
"cause": "The project exceeded its request rate across all keys, or too many requests (including ones with invalid keys) came from one IP address. `details.scope` says which limit applied.",
"fixes": [
{
"actor": "developer",
"action": "Retry after the Retry-After interval and spread requests over time. Read the RateLimit-* headers to stay under the limit."
}
],
"docsUrl": "https://www.desktopaccountingapi.com/docs/errors/#rate_limited",
"retryable": true,
"outcome": "not_applied",
"param": null,
"details": {}
}
}
Daapi-Request-Id
string

Unique ID of this API call (req_...). Present on every response.

RateLimit-Limit
integer

Requests allowed per window for the project (all keys together).

RateLimit-Remaining
integer

Requests left in the current window, as counted by the edge location that served this call.

RateLimit-Reset
integer

Seconds until the current window resets.

Daapi-Should-Retry
string
Allowed values: true false

true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.

Retry-After
integer

Seconds to wait before retrying, on 429 and on retryable 503 responses when a wait is known.

Unexpected server error. Codes: INTERNAL_ERROR.

Media typeapplication/json
object
error
required
object
type
required

Error category. Use it to choose between retrying, fixing the request and asking the end user to act.

string
Allowed values: INVALID_REQUEST_ERROR AUTHENTICATION_ERROR PERMISSION_ERROR BILLING_ERROR RATE_LIMIT_ERROR INTEGRATION_CONNECTION_ERROR INTEGRATION_ERROR OUTCOME_UNKNOWN_ERROR INTERNAL_ERROR
code
required

Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.

string
Allowed values: INVALID_JSON INVALID_PARAMETER UNKNOWN_PARAMETER UNKNOWN_HEADER DECIMAL_PRECISION_EXCEEDED STRING_TOO_LONG UNSUPPORTED_CHARACTER FIELD_NOT_CLEARABLE END_USER_ID_MISSING PAYLOAD_TOO_LARGE IDEMPOTENCY_KEY_INVALID IDEMPOTENCY_KEY_REUSED CURSOR_INVALID CURSOR_PARAMS_MISMATCH CURSOR_EXPIRED RESOURCE_MISSING ROUTE_NOT_FOUND REQUEST_NOT_CANCELABLE COMPANY_FILE_RESET_BUSY PASSTHROUGH_INVALID_QBXML QBD_FIELD_UNSUPPORTED_BY_VERSION QBD_REGION_UNSUPPORTED API_KEY_MISSING API_KEY_INVALID PUBLISHABLE_KEY_INVALID PUBLISHABLE_KEY_PROJECT_MISMATCH TEST_COMPANY_FILE_LIMIT_REACHED API_KEY_READ_ONLY PERMISSION_DENIED BILLING_REQUIRED PAYMENT_FAILED RATE_LIMITED CONNECTION_QUEUE_FULL WEBHOOK_ENDPOINT_LIMIT_REACHED CHANGE_FEED_SUBSCRIPTION_LIMIT_REACHED INTEGRATION_CONNECTION_NOT_SET_UP INTEGRATION_CONNECTION_NOT_ACTIVE INTEGRATION_CONNECTION_DISABLED QBD_CONNECTION_ERROR QBD_CANNOT_START QBD_STARTING QBD_MODAL_DIALOG_OPEN QBD_QUICKBOOKS_NOT_RESPONDING QBD_WRONG_COMPANY_FILE_OPEN QBD_COMPANY_FILE_MISMATCH QBD_COMPANY_FILE_NOT_FOUND QBD_FILE_MODE_CONFLICT QBD_ADMIN_REQUIRED QBD_ACCESS_NOT_GRANTED QBD_VERSION_UNSUPPORTED QBD_REQUEST_ERROR QBD_OBJECT_NOT_FOUND QBD_REFERENCE_NOT_FOUND QBD_SALES_TAX_THROUGH_DATE_TOO_EARLY QBD_DUPLICATE_NAME QBD_REVISION_NUMBER_STALE QBD_OBJECT_IN_USE QBD_TRANSIENT_ERROR QBD_FEATURE_NOT_ENABLED QBD_INSUFFICIENT_PERMISSION QBD_RESPONSE_TOO_LARGE QBD_OPERATION_UNSUPPORTED QBD_RESPONSE_UNAVAILABLE QBD_RESPONSE_UNREADABLE REQUEST_TIMEOUT_NOT_SENT REQUEST_EXPIRED REQUEST_CANCELED QBD_REQUEST_TIMEOUT QBD_WRITE_OUTCOME_UNKNOWN QBD_REQUEST_NOT_PROCESSED QBD_READ_INTERRUPTED INTERNAL_ERROR SERVICE_UNAVAILABLE
message
required

Developer-facing explanation. May include IDs and field paths; never includes secrets.

string
userFacingMessage
required

A message that is safe to show to the end user.

string
httpStatusCode
required

HTTP status of the response. Every code defines one; on a request resource it is the status a synchronous call returns for the same error (for example 409 for REQUEST_CANCELED, 504 for REQUEST_EXPIRED). Nullable for compatibility only.

integer | null
integrationCode
required

Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.

string | null
requestId
required

The Daapi-Request-Id of this response. Include it when contacting support.

string
cause
required

Why this error happens.

string
fixes
required

Ordered actions that resolve the error, each with the responsible actor.

Array<object>
object
actor
required

Who can apply the fix.

string
Allowed values: developer end_user support
action
required

What to do.

string
docsUrl
required

Documentation section for this code.

string format: uri
retryable
required

Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.

boolean
outcome
required

Whether a write took effect: applied (QuickBooks confirmed it), not_applied (it certainly did not happen), pending (sent, still processing), unknown (sent, result could not be confirmed) or not_applicable (a read).

string
Allowed values: applied not_applied pending unknown not_applicable
param
required

Request field, query parameter or header the error refers to, when known.

string | null
details
required

Code-specific details, documented per code in the error catalog.

object
key
additional properties
Examples
ExampleINTERNAL_ERROR

500 INTERNAL_ERROR

{
"error": {
"type": "INTERNAL_ERROR",
"code": "INTERNAL_ERROR",
"message": "An unexpected error occurred on our side.",
"userFacingMessage": "Something went wrong. Please try again in a moment.",
"httpStatusCode": 500,
"integrationCode": null,
"requestId": "req_01j9x4m6v4c8k2t7q0r5s3w1zd",
"cause": "An unexpected server error. `outcome` says whether a write may have reached QuickBooks.",
"fixes": [
{
"actor": "developer",
"action": "Retry reads. For writes, check `outcome` first and never resend when it is unknown."
},
{
"actor": "support",
"action": "Contact support with the requestId."
}
],
"docsUrl": "https://www.desktopaccountingapi.com/docs/errors/#internal_error",
"retryable": false,
"outcome": "not_applied",
"param": null,
"details": {}
}
}
Daapi-Request-Id
string

Unique ID of this API call (req_...). Present on every response.

RateLimit-Limit
integer

Requests allowed per window for the project (all keys together).

RateLimit-Remaining
integer

Requests left in the current window, as counted by the edge location that served this call.

RateLimit-Reset
integer

Seconds until the current window resets.

Daapi-Should-Retry
string
Allowed values: true false

true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.

Retry-After
integer

Seconds to wait before retrying, on 429 and on retryable 503 responses when a wait is known.

QuickBooks Desktop or the service is not available. Codes: SERVICE_UNAVAILABLE.

Media typeapplication/json
object
error
required
object
type
required

Error category. Use it to choose between retrying, fixing the request and asking the end user to act.

string
Allowed values: INVALID_REQUEST_ERROR AUTHENTICATION_ERROR PERMISSION_ERROR BILLING_ERROR RATE_LIMIT_ERROR INTEGRATION_CONNECTION_ERROR INTEGRATION_ERROR OUTCOME_UNKNOWN_ERROR INTERNAL_ERROR
code
required

Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.

string
Allowed values: INVALID_JSON INVALID_PARAMETER UNKNOWN_PARAMETER UNKNOWN_HEADER DECIMAL_PRECISION_EXCEEDED STRING_TOO_LONG UNSUPPORTED_CHARACTER FIELD_NOT_CLEARABLE END_USER_ID_MISSING PAYLOAD_TOO_LARGE IDEMPOTENCY_KEY_INVALID IDEMPOTENCY_KEY_REUSED CURSOR_INVALID CURSOR_PARAMS_MISMATCH CURSOR_EXPIRED RESOURCE_MISSING ROUTE_NOT_FOUND REQUEST_NOT_CANCELABLE COMPANY_FILE_RESET_BUSY PASSTHROUGH_INVALID_QBXML QBD_FIELD_UNSUPPORTED_BY_VERSION QBD_REGION_UNSUPPORTED API_KEY_MISSING API_KEY_INVALID PUBLISHABLE_KEY_INVALID PUBLISHABLE_KEY_PROJECT_MISMATCH TEST_COMPANY_FILE_LIMIT_REACHED API_KEY_READ_ONLY PERMISSION_DENIED BILLING_REQUIRED PAYMENT_FAILED RATE_LIMITED CONNECTION_QUEUE_FULL WEBHOOK_ENDPOINT_LIMIT_REACHED CHANGE_FEED_SUBSCRIPTION_LIMIT_REACHED INTEGRATION_CONNECTION_NOT_SET_UP INTEGRATION_CONNECTION_NOT_ACTIVE INTEGRATION_CONNECTION_DISABLED QBD_CONNECTION_ERROR QBD_CANNOT_START QBD_STARTING QBD_MODAL_DIALOG_OPEN QBD_QUICKBOOKS_NOT_RESPONDING QBD_WRONG_COMPANY_FILE_OPEN QBD_COMPANY_FILE_MISMATCH QBD_COMPANY_FILE_NOT_FOUND QBD_FILE_MODE_CONFLICT QBD_ADMIN_REQUIRED QBD_ACCESS_NOT_GRANTED QBD_VERSION_UNSUPPORTED QBD_REQUEST_ERROR QBD_OBJECT_NOT_FOUND QBD_REFERENCE_NOT_FOUND QBD_SALES_TAX_THROUGH_DATE_TOO_EARLY QBD_DUPLICATE_NAME QBD_REVISION_NUMBER_STALE QBD_OBJECT_IN_USE QBD_TRANSIENT_ERROR QBD_FEATURE_NOT_ENABLED QBD_INSUFFICIENT_PERMISSION QBD_RESPONSE_TOO_LARGE QBD_OPERATION_UNSUPPORTED QBD_RESPONSE_UNAVAILABLE QBD_RESPONSE_UNREADABLE REQUEST_TIMEOUT_NOT_SENT REQUEST_EXPIRED REQUEST_CANCELED QBD_REQUEST_TIMEOUT QBD_WRITE_OUTCOME_UNKNOWN QBD_REQUEST_NOT_PROCESSED QBD_READ_INTERRUPTED INTERNAL_ERROR SERVICE_UNAVAILABLE
message
required

Developer-facing explanation. May include IDs and field paths; never includes secrets.

string
userFacingMessage
required

A message that is safe to show to the end user.

string
httpStatusCode
required

HTTP status of the response. Every code defines one; on a request resource it is the status a synchronous call returns for the same error (for example 409 for REQUEST_CANCELED, 504 for REQUEST_EXPIRED). Nullable for compatibility only.

integer | null
integrationCode
required

Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.

string | null
requestId
required

The Daapi-Request-Id of this response. Include it when contacting support.

string
cause
required

Why this error happens.

string
fixes
required

Ordered actions that resolve the error, each with the responsible actor.

Array<object>
object
actor
required

Who can apply the fix.

string
Allowed values: developer end_user support
action
required

What to do.

string
docsUrl
required

Documentation section for this code.

string format: uri
retryable
required

Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.

boolean
outcome
required

Whether a write took effect: applied (QuickBooks confirmed it), not_applied (it certainly did not happen), pending (sent, still processing), unknown (sent, result could not be confirmed) or not_applicable (a read).

string
Allowed values: applied not_applied pending unknown not_applicable
param
required

Request field, query parameter or header the error refers to, when known.

string | null
details
required

Code-specific details, documented per code in the error catalog.

object
key
additional properties
Examples
ExampleSERVICE_UNAVAILABLE

503 SERVICE_UNAVAILABLE

{
"error": {
"type": "INTERNAL_ERROR",
"code": "SERVICE_UNAVAILABLE",
"message": "The service is temporarily unavailable. The request was not queued.",
"userFacingMessage": "Something went wrong. Please try again in a moment.",
"httpStatusCode": 503,
"integrationCode": null,
"requestId": "req_01j9x4m6v4c8k2t7q0r5s3w1zd",
"cause": "A dependency was unavailable before the request was accepted. Nothing reached QuickBooks.",
"fixes": [
{
"actor": "developer",
"action": "Retry with backoff."
}
],
"docsUrl": "https://www.desktopaccountingapi.com/docs/errors/#service_unavailable",
"retryable": true,
"outcome": "not_applied",
"param": null,
"details": {}
}
}
Daapi-Request-Id
string

Unique ID of this API call (req_...). Present on every response.

RateLimit-Limit
integer

Requests allowed per window for the project (all keys together).

RateLimit-Remaining
integer

Requests left in the current window, as counted by the edge location that served this call.

RateLimit-Reset
integer

Seconds until the current window resets.

Daapi-Should-Retry
string
Allowed values: true false

true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.

Retry-After
integer

Seconds to wait before retrying, on 429 and on retryable 503 responses when a wait is known.