---
title: "Adjust uploaded conversions"
method: POST
path: "/v1/ads/conversions/adjustments"
tags: ["Conversions"]
---

# Adjust uploaded conversions

`POST /v1/ads/conversions/adjustments`

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 in `restatementValue` (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 as `eventId` on the original conversion. Recommended, and **required** for `ENHANCEMENT`.
- or `gclid` + `conversionTime` — the click ID and the original conversion's time (unix seconds). Not available for `ENHANCEMENT`.

`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[]`).

## Request body

- object
  - `accountId` string, required — SocialAccount ID. Must be a `googleads` account.
  - `destinationId` string, required — Conversion action resource name, e.g. `customers/1234567890/conversionActions/987654321`.
  - `adjustments` object[], required
    - `adjustmentType` 'RETRACTION' | 'RESTATEMENT' | 'ENHANCEMENT', required
    - `adjustmentTime` number, required — When the adjustment occurred, unix seconds.
    - `orderId` string — Transaction ID of the original conversion (the `eventId` you sent). Recommended; required for ENHANCEMENT.
    - `gclid` string — Alternative key — the original click ID. Pair with `conversionTime`. Not valid for ENHANCEMENT.
    - `conversionTime` number — The original conversion's time, unix seconds. Required when identifying by `gclid`.
    - `restatementValue` number — RESTATEMENT only — the corrected TOTAL conversion value.
    - `currency` string — RESTATEMENT only — ISO 4217 currency for `restatementValue`.
    - `user` object — ENHANCEMENT only — first-party identifiers (hashed server-side). At least one of email/phone required.
      - `email` string
      - `phone` string
    - `userAgent` string — ENHANCEMENT only — the original conversion's user agent (improves match quality).

## Response `200`

Adjustments processed. Inspect `adjustmentsFailed` and `failures[]` for
partial failure (Google reports per-row errors via partial failure).

- object
  - `platform` 'googleads'
  - `adjustmentsReceived` integer — Adjustments accepted by Google.
  - `adjustmentsFailed` integer — Adjustments rejected (see failures).
  - `failures` object[]
    - `adjustmentIndex` integer — Index into the submitted adjustments array.
    - `message` string
    - `code` union
      - string
      - integer
  - `traceId` string

## Other responses

- `400` — Invalid body, or a malformed adjustment (missing key, missing restatementValue for RESTATEMENT, missing identifiers for ENHANCEMENT).
- `401` — Unauthorized
- `403` — Ads access required (Ads add-on on legacy plans, included on usage-based plans).
- `404` — Account not found or not accessible.
- `405` — Conversion adjustments are only available for Google Ads (the account's platform is not `googleads`).

---

[API](https://skmtc.net/zernio/apis/zernio-api.md) · [All operations](https://skmtc.net/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zernio/zernio-api/versions/51932b099b2f/schema)
