pixellint

Partnerize conversion URLs need campaign, clickref, and currency

The conversion path is /conversion, and campaign, clickref, and currency live as colon-delimited segments. Basket items are repeating [category/sku/value/quantity] groups, country is a two-letter ISO code, and a raw email in any segment is unhashed PII. cdn.performancehorizon.com is not this pack.

What this pack matches

Hosts
prf.hn
Paths
/conversion
Vendor docs
help.phgsupport.com/hc/en-us/articles/360020395238-Tracking-Partnerize-Server-to-Server-S2S-Integration

Rules

Codes are stable. A finding in CI, MCP, or the playground lands on the same id.

Field Required What it checks Rule ids Source
campaign required It is the Partnerize campaign id, written as campaign:{CAMPAIGNID} on the conversion path. Fix: Put the campaign id from Partnerize in the path as campaign:{id}. vendor.partnerize.param.campaign.missing
vendor.partnerize.param.campaign.empty
docs
clickref required The most recent captured click reference is required as a path key. Partnerize explicitly permits a blank clickref for clickless exclusive-code tracking. Fix: Replay the stored clickref in the path as clickref:{value}. vendor.partnerize.param.clickref.missing docs
currency optional It is the ISO 4217 currency of the conversion. Partnerize documents it as required when the event has a monetary value. Fix: Put a three-letter currency code in the path as currency:GBP. vendor.partnerize.param.currency.empty
vendor.partnerize.param.currency.invalid
docs
conversionref optional It is the brand's unique conversion reference. Partnerize documents it as required for validation, and says omit it when the brand cannot generate one. Fix: Put a stable order id in the path as conversionref:{id}, or omit the pair and let Partnerize mint one. vendor.partnerize.param.conversionref.empty docs
tmethod optional It is the tracking method. Partnerize documents `tmethod:2` on S2S conversion URLs. Fix: Send `tmethod:2` on a server-to-server conversion. vendor.partnerize.param.tmethod.empty
vendor.partnerize.param.tmethod.invalid
docs
tplatform optional It is the tracking platform. Partnerize documents `tplatform:2` on S2S conversion URLs. Fix: Send `tplatform:2` on a server-to-server conversion. vendor.partnerize.param.tplatform.empty
vendor.partnerize.param.tplatform.invalid
docs
tracking_mode optional It is the tracking mode. Partnerize S2S samples send `tracking_mode:api`. Fix: Send `tracking_mode:api` on a server-to-server conversion. vendor.partnerize.param.tracking_mode.empty docs
country optional It is the site country of the purchase. Partnerize documents ISO 3166 letter country codes. Fix: Send a two-letter ISO 3166-1 code, such as `GB`. vendor.partnerize.param.country.empty
vendor.partnerize.param.country.invalid
docs
customertype optional It is whether the buyer is a first-time or repeat customer. Partnerize documents `new` or `existing`, and says leave the pair blank when the value is unknown. Fix: Send `customertype:new` or `customertype:existing`, or leave the value blank. vendor.partnerize.param.customertype.empty
vendor.partnerize.param.customertype.invalid
docs
voucher optional It is the voucher used at purchase. Partnerize documents that the item `value` must already reflect the discount. Fix: Send the voucher code, or leave the pair blank. vendor.partnerize.param.voucher.empty docs
fulfilment_date optional It is the service delivery date. Partnerize documents `YYYY-MM-DD`. Fix: Send `fulfilment_date` as `YYYY-MM-DD`, such as `2026-05-01`. vendor.partnerize.param.fulfilment_date.empty
vendor.partnerize.param.fulfilment_date.invalid
docs
fulfilment_start_date optional It is the start of the fulfilment period. Partnerize documents `YYYY-MM-DD`. Fix: Send `fulfilment_start_date` as `YYYY-MM-DD`. vendor.partnerize.param.fulfilment_start_date.empty
vendor.partnerize.param.fulfilment_start_date.invalid
docs
conversion_time optional An optional UTC timestamp in YYYY-MM-DD HH:MM:SS form must sit outside the item block. Calendar and time ranges are checked. UTC provenance without an offset cannot be verified from the string. Fix: Send `conversion_time` as `2021-10-01+18:33:03`. vendor.partnerize.param.conversion_time.empty
vendor.partnerize.param.conversion_time.invalid
docs
device optional It is the converting device. Partnerize documents `bot`, `desktop`, `mobile`, `tablet`, and `Other`. Fix: Send `device:mobile` or another documented device value. vendor.partnerize.param.device.empty
vendor.partnerize.param.device.invalid
docs
context optional It is the converting context. Partnerize documents `web`, `m_web`, `m_app`, `in_app`, `cd_d`, `cd_p`, `other`, and `offline`. Fix: Send `context:m_web` or another documented context value. vendor.partnerize.param.context.empty
vendor.partnerize.param.context.invalid
docs
custref optional Optional brand customer identifier at basket level. Personal data is prohibited. docs
metadata_outside_items… forbidden Custom metadata must be inside an item block. Declared basket parameters take precedence. vendor.partnerize.param.metadata_outside_items.forbidden docs
category required It is the item category inside a basket container. Partnerize documents `category` as required on each `[...]` item. Path item scope, starting at index 0. Fix: Put `category:{name}` inside each basket container. vendor.partnerize.path_items.category.missing
vendor.partnerize.path_items.category.empty
docs
sku optional It is the item product code inside a basket container. Path item scope, starting at index 0. Fix: Put `sku:{code}` inside the basket container, or drop the empty pair. vendor.partnerize.path_items.sku.empty docs
value optional It is the individual item value, excluding tax, delivery, and currency symbols. Partnerize multiplies it by `quantity`. Path item scope, starting at index 0. Fix: Send a number such as `19.99`, with no currency symbol or comma. vendor.partnerize.path_items.value.empty
vendor.partnerize.path_items.value.invalid
docs
quantity required It is the item quantity inside a basket container. Partnerize documents a positive number. Path item scope, starting at index 0. Fix: Send a positive number, such as 1 or 0.5. vendor.partnerize.path_items.quantity.missing
vendor.partnerize.path_items.quantity.empty
vendor.partnerize.path_items.quantity.invalid
docs
fulfilment_date optional It is the service delivery date. Partnerize documents `YYYY-MM-DD`. Path item scope, starting at index 0. Fix: Send `fulfilment_date` as `YYYY-MM-DD`, such as `2026-05-01`. vendor.partnerize.path_items.fulfilment_date.empty
vendor.partnerize.path_items.fulfilment_date.invalid
docs
fulfilment_start_date optional It is the start of the fulfilment period. Partnerize documents `YYYY-MM-DD`. Path item scope, starting at index 0. Fix: Send `fulfilment_start_date` as `YYYY-MM-DD`. vendor.partnerize.path_items.fulfilment_start_date.empty
vendor.partnerize.path_items.fulfilment_start_date.invalid
docs
currency optional The actual basket currency is imported from the root path for item-value requirements. A currency hidden in an item cannot satisfy this contract. Path item scope, starting at index 0. docs
product_name optional Optional retail metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
product_brand optional Optional retail metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
product_type optional Optional retail metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
product_size optional Optional retail metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
product_colour optional Optional retail metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
product_gender optional Optional retail metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
check_in_date optional Optional travel metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. vendor.partnerize.path_items.check_in_date.empty
vendor.partnerize.path_items.check_in_date.invalid
docs
check_out_date optional Optional travel metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. vendor.partnerize.path_items.check_out_date.empty
vendor.partnerize.path_items.check_out_date.invalid
docs
hotel_id optional Optional travel metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
hotel_location optional Optional travel metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
refundable optional Optional travel metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
number_of_guests optional Optional travel metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
number_of_nights optional Optional travel metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
origin optional Optional travel metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
dest optional Optional travel metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
passengers optional Optional travel metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
haul optional Optional travel metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
return optional Optional travel metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
flight_class optional Optional travel metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
net_value optional Optional travel metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
cover_type optional Optional finance metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
policy_start_date optional Optional finance metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. vendor.partnerize.path_items.policy_start_date.empty
vendor.partnerize.path_items.policy_start_date.invalid
docs
policy_end_date optional Optional finance metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. vendor.partnerize.path_items.policy_end_date.empty
vendor.partnerize.path_items.policy_end_date.invalid
docs
monthly_payment optional Optional finance metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
application_status optional Optional finance metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
credit_limit optional Optional finance metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
loan_amount optional Optional finance metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
loan_term optional Optional finance metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
contract_length optional Optional telecoms metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
download_limit optional Optional telecoms metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
speed optional Optional telecoms metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
activation_fee optional Optional telecoms metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
manufacturer optional Optional telecoms metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
handset optional Optional telecoms metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
minutes optional Optional telecoms metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
texts optional Optional telecoms metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
data optional Optional telecoms metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
operating_system optional Optional telecoms metadata. The guide permits omitting unavailable fields and custom item metadata. Path item scope, starting at index 0. docs
destination forbidden Partnerize recommends avoiding destination as a metadata name. Use dest for the flight destination. Path item scope, starting at index 0. Presence diagnostic severity: warning. vendor.partnerize.path_items.destination.forbidden docs
item_value_requires_currency required Monetary item values require an actual root-level ISO currency. Path item scope, starting at index 0. vendor.partnerize.item_value_requires_currency docs
item_pii.unhashed_email required A path segment carries what looks like a raw email address. Partnerize forbids personal data that could identify the end user in conversion parameters. Path item scope, starting at index 0. Fix: Drop the email from the conversion path. Use `conversionref` for the order id. vendor.partnerize.item_pii.unhashed_email docs
campaign forbidden This basket field must be outside individual item brackets. Path item scope, starting at index 0. vendor.partnerize.path_items.campaign.forbidden docs
clickref forbidden This basket field must be outside individual item brackets. Path item scope, starting at index 0. vendor.partnerize.path_items.clickref.forbidden docs
conversionref forbidden This basket field must be outside individual item brackets. Path item scope, starting at index 0. vendor.partnerize.path_items.conversionref.forbidden docs
currency forbidden This basket field must be outside individual item brackets. Path item scope, starting at index 0. vendor.partnerize.path_items.currency.forbidden docs
country forbidden This basket field must be outside individual item brackets. Path item scope, starting at index 0. vendor.partnerize.path_items.country.forbidden docs
customertype forbidden This basket field must be outside individual item brackets. Path item scope, starting at index 0. vendor.partnerize.path_items.customertype.forbidden docs
voucher forbidden This basket field must be outside individual item brackets. Path item scope, starting at index 0. vendor.partnerize.path_items.voucher.forbidden docs
custref forbidden This basket field must be outside individual item brackets. Path item scope, starting at index 0. vendor.partnerize.path_items.custref.forbidden docs
tmethod forbidden This basket field must be outside individual item brackets. Path item scope, starting at index 0. vendor.partnerize.path_items.tmethod.forbidden docs
tplatform forbidden This basket field must be outside individual item brackets. Path item scope, starting at index 0. vendor.partnerize.path_items.tplatform.forbidden docs
tracking_mode forbidden This basket field must be outside individual item brackets. Path item scope, starting at index 0. vendor.partnerize.path_items.tracking_mode.forbidden docs
device forbidden This basket field must be outside individual item brackets. Path item scope, starting at index 0. vendor.partnerize.path_items.device.forbidden docs
context forbidden This basket field must be outside individual item brackets. Path item scope, starting at index 0. vendor.partnerize.path_items.context.forbidden docs
conversion_time forbidden This basket field must be outside individual item brackets. Path item scope, starting at index 0. vendor.partnerize.path_items.conversion_time.forbidden docs
pii.unhashed_email required A path segment carries what looks like a raw email address. Partnerize forbids personal data that could identify the end user in conversion parameters. Fix: Drop the email from the conversion path. Use `conversionref` for the order id. vendor.partnerize.pii.unhashed_email docs
device_requires_context required Device and context must both be supplied to override device reporting. vendor.partnerize.device_requires_context docs
context_requires_device required Device and context must both be supplied to override device reporting. vendor.partnerize.context_requires_device docs

Validate a payload

pixellint validate url "$ARTIFACT" --rulepack vendor/partnerize

Try this failing payload in the playground. Partnerize conversion missing campaign.

https://prf.hn/conversion/tracking_mode:api/clickref:def456/currency:GBP

cargo install pixellint · npm install pixellint