Unsubscribe tracked campaigns
curl --request DELETE \
--url https://api.interchange.io/api/v2/api/v2/buyer/storefront-connections/{connectionId}/accounts/{accountId}/directed-campaigns/subscription \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/api/v2/buyer/storefront-connections/{connectionId}/accounts/{accountId}/directed-campaigns/subscription"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.interchange.io/api/v2/api/v2/buyer/storefront-connections/{connectionId}/accounts/{accountId}/directed-campaigns/subscription', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Task Reference
Unsubscribe tracked campaigns
Stop account mirroring and retire local campaign mirrors
DELETE
/
api
/
v2
/
buyer
/
storefront-connections
/
{connectionId}
/
accounts
/
{accountId}
/
directed-campaigns
/
subscription
Unsubscribe tracked campaigns
curl --request DELETE \
--url https://api.interchange.io/api/v2/api/v2/buyer/storefront-connections/{connectionId}/accounts/{accountId}/directed-campaigns/subscription \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/api/v2/buyer/storefront-connections/{connectionId}/accounts/{accountId}/directed-campaigns/subscription"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.interchange.io/api/v2/api/v2/buyer/storefront-connections/{connectionId}/accounts/{accountId}/directed-campaigns/subscription', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Unsubscribe does not delete or change upstream campaigns.
unsubscribe_directed_campaigns
| Field | Location | Type | Required | Description |
|---|---|---|---|---|
connectionId | path | integer | Yes | Adapter connection ID |
accountId | path | integer | Yes | Connected ad-account row ID |
Response
{
"subscription": {
"id": "17",
"customerId": 100,
"advertiserId": "12345",
"connectionId": "42",
"accountId": "81",
"sourceId": "tiktok",
"providerType": "tiktok",
"status": "PAUSED",
"backfillStart": "2025-07-12T10:00:00.000Z",
"lastSyncedAt": "2026-07-12T10:15:03.000Z",
"lastSyncStatus": "SUCCESS",
"lastSyncError": null,
"errorCode": null,
"errorField": null,
"errorReason": null,
"upstreamCode": null,
"createdAt": "2026-07-12T10:00:00.000Z",
"updatedAt": "2026-07-12T11:00:00.000Z",
"archivedAt": "2026-07-12T11:00:00.000Z"
},
"retired": 12
}
NOT_FOUND means no subscription exists for that connection/account in the
authenticated scope. An access error means the caller cannot operate the
mapped advertiser. Re-list mappings and subscription health rather than
guessing different IDs. Unsubscribe never changes the upstream campaigns.
See Campaigns on connected provider accounts.