Skip to content
Browse documentation

Error and reason codes reference

Every refusal, status reason and result code — tracking links, conversion postbacks, pixels, /lp, the inbound log, template checks, the simulator and the API.

Last updated 13 min read

On this page

Every refusal and decision in TrackCrown has a short, stable code. This page lists them by where you meet them. If a code does not explain what you see, contact Web Cue LLC at https://www.trackcrown.com/contact with the click ID, conversion ID or request time.

The reason is stored on the click (Reports → Clicks, transaction lookup) and in the Fraud & fail traffic report.

HTTPStatus reasonMeaningFix
302—Redirected to exactly the url value.—
400missing_url/c/ link without a url parameter.End the template with url={lpurl}.
403emptyurl= is present but empty.Google could not insert the landing page; check the template.
403invalidNot a valid absolute URL (or contains spaces, control characters or \).Use {lpurl}, not a hand-written URL.
403schemeNot http or https.—
403too_longLonger than 4,096 characters after decoding.Shorten the final URL or suffix.
403credentialsContains user:password@.Remove the credentials.
403ip_hostThe host is an IP address.Use a domain name.
403local_host / bad_hostlocalhost, an intranet name or an invalid hostname.Use a public domain.
403not_allowedThe host is not on the allowlist.Add it under Settings → Workspace (allowed destinations) or the offer's Allowed transparent destinations.
403duplicate_urlSeveral url= parameters with different values.Keep exactly one url=.
403unsafe_targetThe target is on a list of known malicious sites.Contact support if this is your site.
302 / 404unknown_linkThe link key does not exist (deleted, renamed, mistyped). With an allowlisted url= (or Google's parallel-tracking endpoint) the click still redirects (302) but belongs to no workspace and cannot convert; otherwise 404.Fix the key in the template.
405—Method other than GET, HEAD or POST.—

Recorded but never changing the redirect: paused (also for a paused or inactive advertiser), not_approved, targeting, cap_over, workspace_inactive. The same holds for /r, /click and /s requests that carry url=.

Status reasonMeaning
pausedThe offer is not active or outside its schedule, or its advertiser is Paused or Inactive. Also a paused smart link.
not_approvedThe partner is not approved for the offer, or required offer terms are not accepted. On a smart link: the aff= code matches no partner (the click is recorded without offer and partner).
targetingCountry, device, OS or extended targeting excluded the click.
capA click cap is reached (partner on offer, offer, hourly).
workspace_inactiveThe workspace is suspended or pending.
traffic_source/r and /click only: the click contradicts the partner's forced traffic-source template.
no_matchNo smart-link rule has an eligible offer for the visitor.
bad_destinationThe destination URL is invalid after macro expansion.
duplicate, traffic_controlDuplicate-click or traffic-control rules sent the click to the fallback.
forwarded, fail_routeForwarding or fail-over rules sent the click to another offer.

Fallback order: the offer's Fallback URL → the workspace Default fallback URL → a neutral page (HTTP 200). A smart link in Priority waterfall mode whose candidates all fail records the reason of the first offer tried and no offer.

Clicks created without a redirect carry lp (direct visit via the SDK), organic (organic visit) or coupon (synthetic click of a coupon conversion).

Server-side clicks (/clk)#

error_code: 0 ok · 1 invalid token · 2 unknown offer · 3 unknown affiliate · 4 offer not active (offer or advertiser paused, outside the schedule) · 5 affiliate not approved (or offer terms not accepted) · 6 targeting · 7 click cap reached · 8 workspace not active · 9 blocked by a traffic control · 10 duplicate click. Codes 4–10 are logged as fallback clicks with the matching reason (paused, not_approved, targeting, cap, workspace_inactive, traffic_control, duplicate). Details: Server-side clicks.

Conversion postbacks (/pb, /postback, /conversion)#

Postbacks answer JSON. Business errors use 200 with {"ok":false,"error":"…"} because advertiser systems retry anything else.

HTTPerrorMeaning
200unknown click_idNo click with this ID in the token's workspace (and no migration postback).
200no click found for gclid (gbraid, wbraid, msclkid)No click with that ad click ID, and no offer_id, coupon_code or email to store it without a click.
200offer_id required for a conversion without clickNo click and no offer_id.
200offer_id required: the click is not tied to an offerThe click came from a workspace-level link; name the offer.
200offer_id does not match the clickoffer_id names another offer than the click's.
200unknown offer_id / unknown aff_idNot found in this workspace.
200offer of this click no longer existsThe offer was deleted.
200offer has no default eventNo event sent and the offer has no default event.
200offer does not accept server-to-server conversionsOffer Conversion tracking is Pixel only.
200workspace not activeThe workspace is suspended or pending.
200this tracking domain does not serve the offer's workspaceSent to another brand's or workspace's tracking domain.
200unknown conversion_idNo such conversion in the workspace (or not for this token's offers).
200advertiser postbacks may not change existing conversions in this workspaceAdvertiser reversals are turned off.
200unknown coupon_code, coupon_code not active, coupon_code not valid for this offer, coupon partner not found, offer_id required with coupon_code, offer_id required: the coupon is valid on every offerCoupon attribution problems.
200event of this conversion no longer existsA conversion_id update for a deleted event.
400invalid click_id (expected 32 hex characters)Malformed or unexpanded click ID.
400click_id (or gclid, gbraid, wbraid, msclkid, coupon_code, or offer_id for a conversion without click) requiredNothing identifies the conversion.
400invalid amount (plain decimal expected), … must not be negative, … out of rangeAlso for revenue, payout.
400invalid status "x" (approved|pending|rejected), invalid currency (ISO 4217 code expected)Bad value.
400invalid txid, invalid email, invalid coupon_code, invalid conversion_id (expected a UUID), event code too long, gclid too long, click identifier too longBad value.
400unknown event "x" for this offerEvent code not defined on the offer.
400malformed query string, malformed JSON body: …, malformed form body, malformed multipart body, cannot read request bodyUnreadable request.
401token requiredNo token.
401invalid tokenNot a workspace or advertiser postback token (or shared by several owners).
401token not valid for this offerAdvertiser token used for another advertiser's offer.
401advertiser_inactiveThe token belongs to an advertiser that is Paused or Inactive. Nothing is recorded; the workspace token still works.
403postback IP not allowed for this offerconversion_id update or migration forward from an IP outside the allowlist.
405method not allowedNot GET or POST.
413request body too largeOver 64 KiB.
503click lookup unavailable, retry later, temporarily unavailable, retry later, token store unavailable, configuration not loaded, conversion store unavailable, click store unavailable, conversion is being changed concurrently, retry laterTemporary. Retry-After: 30. Retry.

Successful answers: status (approved, pending, rejected, or forwarded), plus reason, duplicate, updated, forwarded, test and details when they apply.

Pixels (/px, /px.gif, /px.js)#

Pixels always answer 200 (GIF, HTML or script). The outcome is in the X-ArcTrack-Conversion header: a status, <status>; <reason>, or error: <message>. Pixel-specific messages: click_id required (no click ID, no pixel cookie, no coupon), offer does not accept pixel conversions, conversion_id updates need a server-to-server postback.

Landing-page endpoint (POST /lp)#

HTTPerror
400invalid body, JSON object expected, invalid click_id, unknown offer, offer required, workspace not active, this tracking domain does not serve the offer, gclid too long, offer not active, unknown affiliate, affiliate not active, affiliate not approved for this offer
405method not allowed
503click store unavailable, configuration not loaded

Details: The /lp endpoint.

Conversion status reasons#

Stored on the conversion (Reports → Conversions, partner and advertiser portals, Conversion quality → Status reasons).

Status reasonStatusMeaningFix
(empty)approved / pendingNormal conversion.—
duplicaterejectedSame click and event, or the same txid on the offer.Send each order once, or allow multiple conversions on the event.
multipleanyAn extra conversion of an event that allows several per click (a marker; a rejection cause is shown instead when rejected).—
postbackrejectedThe advertiser sent status=rejected on a new conversion.—
postback_reversalrejected / approved / pendingA later advertiser postback rejected the conversion or changed its amount.—
postback_updateapproved / pendingA later advertiser postback approved it or set it pending.—
outside_windowrejectedThe click is older than the offer's Attribution window (days).Raise the window.
click_blockedrejectedThe attributed click was refused by transparent-link validation.See the click's reason.
too_fastrejectedBelow the minimum click-to-conversion time.Lower the minimum CTIT.
ip_not_allowedrejectedS2S postback from outside the advertiser's IP allowlist.Add the IP on the advertiser's Postback security tab.
cap_exceededrejectedA conversion, payout, revenue, hourly, offer-group or advertiser-budget cap is reached.Raise the cap. (Alert-only caps keep the conversion and flag it instead.)
holdpendingHeld until the hold period ends, then approved automatically.—
throttledpendingMoved to review by the partner's throttle percentage.Review it, or lower the throttle.
rule:<name>rejected / pendingA postback rule rejected it, or held it for manual review.Review the rule (Settings → Conversion rules).
fraud:<check>rejectedA fraud rule rejected it: bot, datacenter, proxy_hint, headless, missing_ua, duplicate_click_ip, duplicate_conv_ip, duplicate_conv_subnet24.Review the traffic, or set the rule to Flag only.
manual (or your text)anyChanged by a team member in the panel or API.—

Inbound postback log result codes#

approved, pending, rejected, duplicate, updated, forwarded, test, invalid_token, token_required, advertiser_inactive, unknown_click, unknown_conversion, unknown_offer, coupon_error, ip_not_allowed, malformed, method_not_allowed, unavailable, error, and for landing-page SDK calls (/lp) param, gclid, gbraid, wbraid, organic, direct — see Inbound postback log.

Outgoing postback errors (Delivery log)#

ErrorMeaning
HTTP 4xx/5xx …The partner's endpoint answered a non-2xx status. Retried.
timeout, connection refused, DNS errorsEndpoint unreachable. Retried.
invalid postback URLNot an absolute http(s) URL after expansion. Permanent.
destination address not allowed (private, loopback or link-local)Points to a non-public address. Permanent.
stopped after 3 redirects, redirect to a non-http(s) URLRedirect problems.
conversion rejectedThe conversion was rejected or marked duplicate before delivery. Not sent.
html postback not delivered: …HTML postbacks need an iframe or JavaScript conversion pixel.
conversion API delivery is not configuredConversion-API destination without a configured integration.

Template checks#

Returned by the template builder, the transparency tester and POST /api/v1/google-ads/lint. Errors make Google reject the template or break the redirect; warnings do not.

CodeSeverityMeaning
emptyerrorNothing to check.
length_over_2048errorLonger than 2,048 characters.
space_or_control_charerrorSpaces, tabs, line breaks or control characters.
stray_braceerror{ or } outside a tag.
unknown_tagerror (warning for Microsoft)Not a supported ValueTrack / Microsoft parameter, e.g. {gbraid}.
ignore_in_templateerror{ignore} is only valid in final URLs.
non_httpserrorThe tracker must be an https:// URL.
templated_hosterrorA tag inside the hostname.
ip_hosterrorThe tracker host is an IP address.
unknown_hosterrorNot one of your active tracking domains.
host_not_certifiederror / warningThe domain is not certified by Google (warning when the account predates 28 Aug 2023).
non_click_patherror/i/, /px, /pb, /lp or /sdk.js instead of a click path.
unexpected_pathwarningNot /c/, /r/, /s/ or /click.
missing_lpurlerrorNo {lpurl}.
lpurl_not_in_url_paramerror{lpurl} is not the value of url=.
static_url_paramerrorurl= carries a fixed address.
duplicate_url_paramerrorMore than one url=.
text_joined_to_lpurlerrorText glued to {lpurl}.
lpurl_not_lastwarning (error for {unescapedlpurl})url= is not the last parameter.
force_transparent_after_urlwarningThe secondary parameter should come before url=.
fragment_in_trackerwarning# in the tracker URL.
duplicate_paramwarningA parameter appears twice.
missing_gclid / missing_msclkidwarningThe platform click ID is not passed.
final_url_invaliderrorThe final URL is not a full URL.
final_url_on_tracker_domainerrorThe final URL points at a tracking domain.
final_url_has_lpurlerror{lpurl} inside a final URL.
final_url_has_fragmentwarningUse {ignore} and {unescapedlpurl}.
final_url_not_httpswarningPlain-HTTP landing page.
suffix_leading_separatorerrorThe Final URL suffix starts with ?, & or #.
suffix_has_lpurl / suffix_has_ignoreerrorNot allowed in a suffix.
suffix_has_url_paramwarningurl= in a suffix reaches the landing page, not the tracker.
too_many_custom_paramswarning / errorWarning: the template or suffix uses more than 8 different custom parameters ({_name}) — Google Ads and Microsoft Advertising hold at most 8 per campaign, ad group, ad or keyword. Error: more than 3 custom parameters on a Microsoft ad extension (more than 8 on another Microsoft entity).
not_a_click_trackerinfoThe template starts with {lpurl}: no tracker is called.
StatusModeMeaning
Page foundsequentialThe chain ended at the final URL.
Chain reaches google.com/asncparallelThe tracker redirected to Google's background endpoint.
Tracking chain terminatesbothThe tracker answered 4xx or a page instead of redirecting.
HTTP redirect in tracking chainbothInformational: the number of server-side redirects.
JavaScript redirect in tracking chainbothA page in the chain redirects with JavaScript or meta refresh.
Final URL mismatchbothThe chain ended on another host, path or URL.
Landing page has additional parameterssequentialParameters were added to the final URL.
UnreachablebothNo answer within 5 seconds, DNS or TLS failure.
Page not foundsequentialThe landing page returned 4xx/5xx.
Not HTTPS / Too many redirectsbothA plain-HTTP hop, or more than 10 hops.
Slow tracking chainbothWarning: the chain took more than 1 second.

REST API#

Errors are {"error":{"code":"…","message":"…"}}. Codes: missing_api_key, invalid_api_key, ip_not_allowed, rate_limited, invalid_request, invalid_parameter, invalid_cursor, invalid_json, validation_failed, unsupported_media_type, payload_too_large, method_not_allowed, forbidden, read_only_key, workspace_inactive, advertiser_inactive, affiliate_inactive, not_found, conflict, in_use, unavailable, internal_error. HTTP statuses and details are in the REST API reference.

Something unclear or missing in this article?Tell us