Retrieve a change feed subscription
Try itGET /v1/change-feed-subscriptions/{id}
Sends a real request to the API from your browser. A test key (sk_test_) is recommended.
curl https://api.desktopaccountingapi.com/v1/change-feed-subscriptions/cfs_01j9x4m6v4c8k2t7q0r5s3w1zk \ -H "Authorization: Bearer $DAAPI_SECRET_KEY"import { DesktopAccountingApi } from "@desktopaccountingapi/quickbooks-desktop";
// Reads DAAPI_SECRET_KEY from the environment.const client = new DesktopAccountingApi();
const changeFeedSubscription = await client.changeFeedSubscriptions.retrieve( "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.retrieve( "cfs_01j9x4m6v4c8k2t7q0r5s3w1zk",)print(change_feed_subscription.id)using DesktopAccountingApi.QuickBooksDesktop;
// Reads DAAPI_SECRET_KEY from the environment.using var client = new DesktopAccountingApiClient();
var changeFeedSubscription = await client.ChangeFeedSubscriptions.RetrieveAsync( "cfs_01j9x4m6v4c8k2t7q0r5s3w1zk");Console.WriteLine(changeFeedSubscription.Id);import com.desktopaccountingapi.quickbooksdesktop.DesktopAccountingApiClient;import com.desktopaccountingapi.quickbooksdesktop.models.ChangeFeedSubscription;
// Reads DAAPI_SECRET_KEY from the environment.DesktopAccountingApiClient client = DesktopAccountingApiClient.fromEnv();
ChangeFeedSubscription changeFeedSubscription = client.changeFeedSubscriptions().retrieve( "cfs_01j9x4m6v4c8k2t7q0r5s3w1zk");System.out.println(changeFeedSubscription.id());Returns a change feed subscription.
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.
Responses
Section titled “Responses”The 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_PARAMETER.
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_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": {} }}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 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.
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.