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.ads.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"
}Send conversion events POST
Relay one or more conversion events to the target ad platform's native Conversions API. Platform is inferred from the provided `accountId`. Requires the Ads add-on. Supported platforms: - Meta (`metaads`) via Graph API - Google Ads (`googleads`) via Data Manager API `ingestEvents` - LinkedIn (`linkedinads`) via `/rest/conversionEvents` - TikTok (`tiktokads`) via the Offline Events API `/offline/batch/` — OFFLINE conversions only `destinationId` semantics differ per platform: - Meta: pixel (dataset) ID, e.g. `123456789012345` - Google: conversion action resource name, e.g. `customers/1234567890/conversionActions/987654321` - LinkedIn: conversion rule ID or URN, e.g. `104012` or `urn:lla:llaPartnerConversion:104012` - TikTok: Offline Event Set ID, e.g. `7057103914977558530` TikTok notes: this path sends OFFLINE conversions (in-store / CRM / call-center), not web-pixel events. Each event must carry an email or phone (TikTok requires at least one). The connected TikTok ads account must have granted the Offline Events permission; older grants must reconnect. Callers can list valid destinations via `GET /v1/accounts/{accountId}/conversion-destinations`. All PII (email, phone, names, external IDs) is hashed with SHA-256 server-side per each platform's normalization spec, including Google's Gmail-specific dot/plus-suffix stripping. Send plaintext. LinkedIn `externalIds` are passed through as plaintext per LinkedIn's spec; only emails and phones are hashed. For LinkedIn, the connected account must have been authorized after the Conversions API rollout (i.e. the OAuth grant must include `rw_conversions`). Older accounts must reconnect. Batching is handled automatically. Meta caps at 1000 events per request and rejects the entire batch if any event is malformed. Google caps at 2000. LinkedIn caps at 5000 and is also all-or-nothing per chunk. Dedup: pass a stable `eventId` on every event. Meta and LinkedIn use it to dedupe against browser-side pixel/Insight Tag events; Google maps it to `transactionId`. Per-platform `eventName` semantics: - Meta: free-form. Standard names (Purchase, Lead, ...) match Meta's built-in events; custom strings are accepted. - Google: ignored. The conversion action's category determines the event type. Send the standard name closest to your action for documentation, but the platform will not branch on it. - LinkedIn: ignored. The conversion rule's `type` (LEAD, PURCHASE, etc.) is locked to the destination at rule-creation time. Send the standard name for documentation; LinkedIn does not branch on it.
Get Event Match Quality GET
Reads Meta Event Match Quality (EMQ) and pixel↔CAPI event coverage for a pixel/dataset, live from Meta's Dataset Quality API. Web events only (a Meta limitation). Meta-only; other platforms return 405. Requires the Ads add-on.