Update a change feed subscription
Try itPOST /v1/change-feed-subscriptions/{id}
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.
curl -X POST https://api.desktopaccountingapi.com/v1/change-feed-subscriptions/cfs_01j9x4m6v4c8k2t7q0r5s3w1zk \ -H "Authorization: Bearer $DAAPI_SECRET_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{}'import { DesktopAccountingApi } from "@desktopaccountingapi/quickbooks-desktop";
// Reads DAAPI_SECRET_KEY from the environment.const client = new DesktopAccountingApi();
const changeFeedSubscription = await client.changeFeedSubscriptions.update( "cfs_01j9x4m6v4c8k2t7q0r5s3w1zk", {},);console.log(changeFeedSubscription.id);from desktopaccountingapi import DesktopAccountingApi
# Reads DAAPI_SECRET_KEY from the environment.client = DesktopAccountingApi()
change_feed_subscription = client.change_feed_subscriptions.update("cfs_01j9x4m6v4c8k2t7q0r5s3w1zk")print(change_feed_subscription.id)using DesktopAccountingApi.QuickBooksDesktop;using DesktopAccountingApi.QuickBooksDesktop.Models;
// Reads DAAPI_SECRET_KEY from the environment.using var client = new DesktopAccountingApiClient();
var changeFeedSubscription = await client.ChangeFeedSubscriptions.UpdateAsync( "cfs_01j9x4m6v4c8k2t7q0r5s3w1zk", new ChangeFeedSubscriptionUpdateInput());Console.WriteLine(changeFeedSubscription.Id);import com.desktopaccountingapi.quickbooksdesktop.DesktopAccountingApiClient;import com.desktopaccountingapi.quickbooksdesktop.models.ChangeFeedSubscription;import com.desktopaccountingapi.quickbooksdesktop.models.ChangeFeedSubscriptionUpdateInput;
// Reads DAAPI_SECRET_KEY from the environment.DesktopAccountingApiClient client = DesktopAccountingApiClient.fromEnv();
ChangeFeedSubscription changeFeedSubscription = client.changeFeedSubscriptions().update( "cfs_01j9x4m6v4c8k2t7q0r5s3w1zk", new ChangeFeedSubscriptionUpdateInput());System.out.println(changeFeedSubscription.id());Changes the resources, the interval or enabled. Omitted fields are unchanged. A resource added here is watched from now on; a removed resource stops being polled, and adding it again later starts over from that time.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Unique identifier for the change feed subscription.
Example
cfs_01j9x4m6v4c8k2t7q0r5s3w1zkUnique identifier for the change feed subscription.
Header Parameters
Section titled “Header Parameters”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-0b2d2c9e3a10Request Bodyrequired
Section titled “Request Bodyrequired”object
Resources to watch, each listed once. Every poll reads each of them on every subscribed connection.
Example
[ "customers", "invoices"]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.
Example
15Turn polling on or off.
Responses
Section titled “Responses”The updated subscription.
object
Unique identifier for the change feed subscription.
Always change_feed_subscription.
When the subscription was created. UTC, ISO 8601 with milliseconds.
When the subscription was last changed. UTC, ISO 8601 with milliseconds.
Unique identifier for the project.
Watched resources, in alphabetical order.
Minutes between polls of each connection.
Whether connections are polled. A disabled subscription keeps its settings.
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}Headers
Section titled “Headers”Unique ID of this API call (req_...). Present on every response.
Requests allowed per window for the project (all keys together).
Requests left in the current window, as counted by the edge location that served this call.
Seconds until the current window resets.
The request is invalid. Codes: UNKNOWN_HEADER, INVALID_JSON, INVALID_PARAMETER, UNKNOWN_PARAMETER, IDEMPOTENCY_KEY_INVALID.
object
object
Error category. Use it to choose between retrying, fixing the request and asking the end user to act.
Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.
Developer-facing explanation. May include IDs and field paths; never includes secrets.
A message that is safe to show to the end user.
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.
Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.
The Daapi-Request-Id of this response. Include it when contacting support.
Why this error happens.
Ordered actions that resolve the error, each with the responsible actor.
object
Who can apply the fix.
What to do.
Documentation section for this code.
Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.
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).
Request field, query parameter or header the error refers to, when known.
Code-specific details, documented per code in the error catalog.
object
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": {} }}400 INVALID_JSON
{ "error": { "type": "INVALID_REQUEST_ERROR", "code": "INVALID_JSON", "message": "The request body is not valid JSON.", "userFacingMessage": "This action could not be completed. Please contact the application provider.", "httpStatusCode": 400, "integrationCode": null, "requestId": "req_01j9x4m6v4c8k2t7q0r5s3w1zd", "cause": "The body could not be parsed as JSON, or the Content-Type header does not match the body.", "fixes": [ { "actor": "developer", "action": "Send a UTF-8 JSON body with Content-Type: application/json." } ], "docsUrl": "https://www.desktopaccountingapi.com/docs/errors/#invalid_json", "retryable": false, "outcome": "not_applied", "param": null, "details": {} }}400 INVALID_PARAMETER
{ "error": { "type": "INVALID_REQUEST_ERROR", "code": "INVALID_PARAMETER", "message": "A request parameter is invalid.", "userFacingMessage": "This action could not be completed. Please contact the application provider.", "httpStatusCode": 400, "integrationCode": null, "requestId": "req_01j9x4m6v4c8k2t7q0r5s3w1zd", "cause": "A field, query parameter or header failed validation. `param` names the field.", "fixes": [ { "actor": "developer", "action": "Correct the field named in `param` using the constraints in the API reference." } ], "docsUrl": "https://www.desktopaccountingapi.com/docs/errors/#invalid_parameter", "retryable": false, "outcome": "not_applied", "param": null, "details": {} }}400 UNKNOWN_PARAMETER
{ "error": { "type": "INVALID_REQUEST_ERROR", "code": "UNKNOWN_PARAMETER", "message": "The request contains a field this operation does not accept.", "userFacingMessage": "This action could not be completed. Please contact the application provider.", "httpStatusCode": 400, "integrationCode": null, "requestId": "req_01j9x4m6v4c8k2t7q0r5s3w1zd", "cause": "Request bodies are strict. A misspelled or unsupported field is rejected instead of being ignored.", "fixes": [ { "actor": "developer", "action": "Remove or rename the field named in `param`." } ], "docsUrl": "https://www.desktopaccountingapi.com/docs/errors/#unknown_parameter", "retryable": false, "outcome": "not_applied", "param": null, "details": {} }}400 IDEMPOTENCY_KEY_INVALID
{ "error": { "type": "INVALID_REQUEST_ERROR", "code": "IDEMPOTENCY_KEY_INVALID", "message": "The Idempotency-Key header must be 1–255 printable ASCII characters.", "userFacingMessage": "This action could not be completed. Please contact the application provider.", "httpStatusCode": 400, "integrationCode": null, "requestId": "req_01j9x4m6v4c8k2t7q0r5s3w1zd", "cause": "The Idempotency-Key value is empty, too long or contains characters outside printable ASCII.", "fixes": [ { "actor": "developer", "action": "Use a UUID or another value of 1–255 printable ASCII characters." } ], "docsUrl": "https://www.desktopaccountingapi.com/docs/errors/#idempotency_key_invalid", "retryable": false, "outcome": "not_applied", "param": null, "details": {} }}Headers
Section titled “Headers”Unique ID of this API call (req_...). Present on every response.
Requests allowed per window for the project (all keys together).
Requests left in the current window, as counted by the edge location that served this call.
Seconds until the current window resets.
true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.
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.
object
object
Error category. Use it to choose between retrying, fixing the request and asking the end user to act.
Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.
Developer-facing explanation. May include IDs and field paths; never includes secrets.
A message that is safe to show to the end user.
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.
Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.
The Daapi-Request-Id of this response. Include it when contacting support.
Why this error happens.
Ordered actions that resolve the error, each with the responsible actor.
object
Who can apply the fix.
What to do.
Documentation section for this code.
Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.
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).
Request field, query parameter or header the error refers to, when known.
Code-specific details, documented per code in the error catalog.
object
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": {} }}401 API_KEY_INVALID
{ "error": { "type": "AUTHENTICATION_ERROR", "code": "API_KEY_INVALID", "message": "The API key is invalid or has been revoked.", "userFacingMessage": "This action is not available right now. Please contact the application provider.", "httpStatusCode": 401, "integrationCode": null, "requestId": "req_01j9x4m6v4c8k2t7q0r5s3w1zd", "cause": "The key is malformed, unknown, or was revoked. Revocation takes effect within 30 seconds.", "fixes": [ { "actor": "developer", "action": "Create a new secret key in the dashboard and update your server configuration." } ], "docsUrl": "https://www.desktopaccountingapi.com/docs/errors/#api_key_invalid", "retryable": false, "outcome": "not_applied", "param": null, "details": {} }}Headers
Section titled “Headers”Unique ID of this API call (req_...). Present on every response.
Requests allowed per window for the project (all keys together).
Requests left in the current window, as counted by the edge location that served this call.
Seconds until the current window resets.
true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.
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.
object
object
Error category. Use it to choose between retrying, fixing the request and asking the end user to act.
Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.
Developer-facing explanation. May include IDs and field paths; never includes secrets.
A message that is safe to show to the end user.
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.
Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.
The Daapi-Request-Id of this response. Include it when contacting support.
Why this error happens.
Ordered actions that resolve the error, each with the responsible actor.
object
Who can apply the fix.
What to do.
Documentation section for this code.
Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.
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).
Request field, query parameter or header the error refers to, when known.
Code-specific details, documented per code in the error catalog.
object
Examples
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": {} }}Headers
Section titled “Headers”Unique ID of this API call (req_...). Present on every response.
Requests allowed per window for the project (all keys together).
Requests left in the current window, as counted by the edge location that served this call.
Seconds until the current window resets.
true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.
Seconds to wait before retrying, on 429 and on retryable 503 responses when a wait is known.
The object does not exist in this project. Codes: RESOURCE_MISSING.
object
object
Error category. Use it to choose between retrying, fixing the request and asking the end user to act.
Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.
Developer-facing explanation. May include IDs and field paths; never includes secrets.
A message that is safe to show to the end user.
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.
Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.
The Daapi-Request-Id of this response. Include it when contacting support.
Why this error happens.
Ordered actions that resolve the error, each with the responsible actor.
object
Who can apply the fix.
What to do.
Documentation section for this code.
Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.
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).
Request field, query parameter or header the error refers to, when known.
Code-specific details, documented per code in the error catalog.
object
Examples
404 RESOURCE_MISSING
{ "error": { "type": "INVALID_REQUEST_ERROR", "code": "RESOURCE_MISSING", "message": "No such object exists in this project.", "userFacingMessage": "This action could not be completed. Please contact the application provider.", "httpStatusCode": 404, "integrationCode": null, "requestId": "req_01j9x4m6v4c8k2t7q0r5s3w1zd", "cause": "The ID does not exist, was deleted, or belongs to another project.", "fixes": [ { "actor": "developer", "action": "Check the ID and that the secret key belongs to the project that owns the object." } ], "docsUrl": "https://www.desktopaccountingapi.com/docs/errors/#resource_missing", "retryable": false, "outcome": "not_applied", "param": null, "details": {} }}Headers
Section titled “Headers”Unique ID of this API call (req_...). Present on every response.
Requests allowed per window for the project (all keys together).
Requests left in the current window, as counted by the edge location that served this call.
Seconds until the current window resets.
true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.
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.
object
object
Error category. Use it to choose between retrying, fixing the request and asking the end user to act.
Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.
Developer-facing explanation. May include IDs and field paths; never includes secrets.
A message that is safe to show to the end user.
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.
Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.
The Daapi-Request-Id of this response. Include it when contacting support.
Why this error happens.
Ordered actions that resolve the error, each with the responsible actor.
object
Who can apply the fix.
What to do.
Documentation section for this code.
Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.
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).
Request field, query parameter or header the error refers to, when known.
Code-specific details, documented per code in the error catalog.
object
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": {} }}Headers
Section titled “Headers”Unique ID of this API call (req_...). Present on every response.
Requests allowed per window for the project (all keys together).
Requests left in the current window, as counted by the edge location that served this call.
Seconds until the current window resets.
true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.
Seconds to wait before retrying, on 429 and on retryable 503 responses when a wait is known.
Too many requests. Codes: RATE_LIMITED.
object
object
Error category. Use it to choose between retrying, fixing the request and asking the end user to act.
Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.
Developer-facing explanation. May include IDs and field paths; never includes secrets.
A message that is safe to show to the end user.
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.
Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.
The Daapi-Request-Id of this response. Include it when contacting support.
Why this error happens.
Ordered actions that resolve the error, each with the responsible actor.
object
Who can apply the fix.
What to do.
Documentation section for this code.
Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.
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).
Request field, query parameter or header the error refers to, when known.
Code-specific details, documented per code in the error catalog.
object
Examples
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": {} }}Headers
Section titled “Headers”Unique ID of this API call (req_...). Present on every response.
Requests allowed per window for the project (all keys together).
Requests left in the current window, as counted by the edge location that served this call.
Seconds until the current window resets.
true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.
Seconds to wait before retrying, on 429 and on retryable 503 responses when a wait is known.
Unexpected server error. Codes: INTERNAL_ERROR.
object
object
Error category. Use it to choose between retrying, fixing the request and asking the end user to act.
Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.
Developer-facing explanation. May include IDs and field paths; never includes secrets.
A message that is safe to show to the end user.
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.
Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.
The Daapi-Request-Id of this response. Include it when contacting support.
Why this error happens.
Ordered actions that resolve the error, each with the responsible actor.
object
Who can apply the fix.
What to do.
Documentation section for this code.
Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.
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).
Request field, query parameter or header the error refers to, when known.
Code-specific details, documented per code in the error catalog.
object
Examples
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": {} }}Headers
Section titled “Headers”Unique ID of this API call (req_...). Present on every response.
Requests allowed per window for the project (all keys together).
Requests left in the current window, as counted by the edge location that served this call.
Seconds until the current window resets.
true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.
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.
object
object
Error category. Use it to choose between retrying, fixing the request and asking the end user to act.
Stable error code from the error catalog. New codes may be added; a code’s meaning never changes.
Developer-facing explanation. May include IDs and field paths; never includes secrets.
A message that is safe to show to the end user.
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.
Native QuickBooks code when one exists: a qbXML statusCode ("3200"), an HRESULT ("0x80040414") or a Web Connector code.
The Daapi-Request-Id of this response. Include it when contacting support.
Why this error happens.
Ordered actions that resolve the error, each with the responsible actor.
object
Who can apply the fix.
What to do.
Documentation section for this code.
Repeating the identical request (with the same Idempotency-Key for writes) can succeed without changes. Also sent as the Daapi-Should-Retry header.
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).
Request field, query parameter or header the error refers to, when known.
Code-specific details, documented per code in the error catalog.
object
Examples
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": {} }}Headers
Section titled “Headers”Unique ID of this API call (req_...). Present on every response.
Requests allowed per window for the project (all keys together).
Requests left in the current window, as counted by the edge location that served this call.
Seconds until the current window resets.
true when repeating the identical request can succeed. SDKs follow it instead of status-code heuristics.
Seconds to wait before retrying, on 429 and on retryable 503 responses when a wait is known.