Disconnect provider
curl --request DELETE \
--url https://api.entendre.finance/v1/connections/{connection_id} \
--header 'If-Match: <if-match>' \
--header 'X-API-Key: <api-key>'const options = {
method: 'DELETE',
headers: {'If-Match': '<if-match>', 'X-API-Key': '<api-key>'}
};
fetch('https://api.entendre.finance/v1/connections/{connection_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.entendre.finance/v1/connections/{connection_id}"
headers = {
"If-Match": "<if-match>",
"X-API-Key": "<api-key>"
}
response = requests.delete(url, headers=headers)
print(response.text){
"data": {
"id": "con_507f1f77bcf86cd799439011",
"organization_id": "org_507f1f77bcf86cd799439011",
"provider": "quickbooks",
"auth_method": "oauth",
"name": "Operating bank connection",
"status": "disconnected",
"external_account_id": null,
"legal_entity_ids": [
"le_507f1f77bcf86cd799439011"
],
"source_ids": [],
"capabilities": [
"import_transactions"
],
"created_at": "2026-08-31T12:00:00Z",
"guidance": {
"allowed_actions": [],
"warnings": [],
"version": "v_example"
},
"revocation_error": null,
"retained_resources": [
"transactions"
],
"authorization_attempt": {
"id": "auth_507f1f77bcf86cd799439011",
"status": "succeeded",
"setup_url": null,
"expires_at": null,
"error": null
},
"etag": "\"v_example\""
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid path, query or request body.",
"request_id": "req_example"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication is required.",
"request_id": "req_example"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "Insufficient access to organization",
"request_id": "req_example"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Resource not found",
"request_id": "req_example"
}
}{
"error": {
"code": "CONFLICT",
"message": "The resource state does not allow this operation.",
"request_id": "req_example"
}
}{
"error": {
"code": "PRECONDITION_FAILED",
"message": "The resource changed. Read it again before you update it.",
"request_id": "req_example"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Retry after 30s.",
"request_id": "req_example"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error",
"request_id": "req_example"
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "Service unavailable.",
"request_id": "req_example"
}
}Connections
Disconnect connection
Disconnects a provider account.
DELETE
/
v1
/
connections
/
{connection_id}
Disconnect provider
curl --request DELETE \
--url https://api.entendre.finance/v1/connections/{connection_id} \
--header 'If-Match: <if-match>' \
--header 'X-API-Key: <api-key>'const options = {
method: 'DELETE',
headers: {'If-Match': '<if-match>', 'X-API-Key': '<api-key>'}
};
fetch('https://api.entendre.finance/v1/connections/{connection_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.entendre.finance/v1/connections/{connection_id}"
headers = {
"If-Match": "<if-match>",
"X-API-Key": "<api-key>"
}
response = requests.delete(url, headers=headers)
print(response.text){
"data": {
"id": "con_507f1f77bcf86cd799439011",
"organization_id": "org_507f1f77bcf86cd799439011",
"provider": "quickbooks",
"auth_method": "oauth",
"name": "Operating bank connection",
"status": "disconnected",
"external_account_id": null,
"legal_entity_ids": [
"le_507f1f77bcf86cd799439011"
],
"source_ids": [],
"capabilities": [
"import_transactions"
],
"created_at": "2026-08-31T12:00:00Z",
"guidance": {
"allowed_actions": [],
"warnings": [],
"version": "v_example"
},
"revocation_error": null,
"retained_resources": [
"transactions"
],
"authorization_attempt": {
"id": "auth_507f1f77bcf86cd799439011",
"status": "succeeded",
"setup_url": null,
"expires_at": null,
"error": null
},
"etag": "\"v_example\""
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid path, query or request body.",
"request_id": "req_example"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication is required.",
"request_id": "req_example"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "Insufficient access to organization",
"request_id": "req_example"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Resource not found",
"request_id": "req_example"
}
}{
"error": {
"code": "CONFLICT",
"message": "The resource state does not allow this operation.",
"request_id": "req_example"
}
}{
"error": {
"code": "PRECONDITION_FAILED",
"message": "The resource changed. Read it again before you update it.",
"request_id": "req_example"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Retry after 30s.",
"request_id": "req_example"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error",
"request_id": "req_example"
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "Service unavailable.",
"request_id": "req_example"
}
}Requires a user-scoped API key, and
write:gl for a general-ledger connection or write:connections for other connections.
Cleanup and retained data depend on the provider. Imported accounting data is cleaned up in the same way as a disconnect in the Entendre app. If remote revocation fails after the local cleanup, the response shows the state and the revocation error. NetSuite rejects an ambiguous credential configuration with HTTP 409.
Exchange, bank and card connections accept the optional If-Match check that Update connection describes.Authorizations
Your organization API key. Some operations also need a key that is associated with a user; their pages say so.
Headers
Optional. The etag from List connections. A stale value returns HTTP 412.
Path Parameters
ID of the connection.
Minimum string length:
1Response
The connection is disconnected. The response shows its state, the cleanup and any revocation error.
Show child attributes
Show child attributes