Adjust uploaded conversions
Adjust conversions that were previously uploaded via POST /v1/ads/conversions —
retract them, restate their value, or enhance them with first-party data. Requires
the Ads add-on.
Google Ads only. Google handles adjustments through the classic Google Ads API
(ConversionAdjustmentUploadService); the Data Manager ingestEvents path used for
sending conversions is ingest-only. Meta and LinkedIn have no equivalent, so this
endpoint returns 405 for those platforms.
Adjustment types:
RETRACTION— remove the conversion entirely (refund, chargeback, cancelled order, churn).RESTATEMENT— change the conversion's value (upgrade / downgrade / partial refund). Send the corrected total value inrestatementValue(not a delta).ENHANCEMENT— attach first-party identifiers (hashed email / phone) to an existing conversion (enhanced conversions applied after the fact).
Identifying the original conversion (per adjustment):
orderId— the transaction ID you sent aseventIdon the original conversion. Recommended, and required forENHANCEMENT.- or
gclid+conversionTime— the click ID and the original conversion's time (unix seconds). Not available forENHANCEMENT.
destinationId is the conversion action resource name, e.g.
customers/1234567890/conversionActions/987654321 (same value you send to
POST /v1/ads/conversions). PII in user is hashed with SHA-256 server-side
(Gmail-specific normalization included). Send plaintext.
Times are unix seconds; we convert to Google's required
yyyy-MM-dd HH:mm:ss+00:00 format. Up to 2000 adjustments per request; partial
failure is supported (inspect adjustmentsFailed / failures[]).
API key authentication - use your Zernio API key as a Bearer token
In: header
SocialAccount ID. Must be a googleads account.
Conversion action resource name, e.g. customers/1234567890/conversionActions/987654321.
1 <= items <= 2000Response Body
application/json
application/json
import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.conversions.adjustConversions({ body: { accountId: 'account_abc123', destinationId: 'destination_abc123', adjustments: [ { adjustmentType: 'RETRACTION', adjustmentTime: 0, }, ], },});console.log(data);{
"platform": "googleads",
"adjustmentsReceived": 0,
"adjustmentsFailed": 0,
"failures": [
{
"adjustmentIndex": 0,
"message": "string",
"code": "string"
}
],
"traceId": "string"
}{
"error": "Unauthorized"
}Associate campaigns POST
Associate one or more campaigns with this conversion rule. Returns a per-campaign success/failure result so callers can retry only the rows that failed (e.g. wrong campaign type for the rule's objective).
Remove associated campaigns DELETE
Remove one or more campaign associations from this conversion rule. Pass `adAccountId` and `campaignIds` as query parameters (`campaignIds` is comma-separated). The route also accepts a JSON body with the same fields for clients that prefer DELETE-with-body, but the documented surface is query-only because some SDK code generators (e.g. Python) collapse query + body parameters with the same name into a single kwarg.