pixellint

Quora conversions include checks for captured API requests.

Captured Quora CAPI requests receive advice for POST, a populated Bearer authorization header, JSON content type and body presence. These checks follow the pinned official server template and respect unavailable capture fields.

Empty user objects and events without click attribution remain permitted. Token validity, account ownership and complete receiver schema need external evidence. A bare pixel URL cannot establish its request body or headers.

What this pack matches

Hosts
api.quora.com
Paths
/ads/v0/conversion
Vendor docs
quoraadsupport.zendesk.com/hc/en-us/articles/23065751885069-Conversion-API-Overview

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
account_id required It is the Quora Ads account id. Quora documents it as required on the Conversion API request. Evidence: vendor template. Native JSON type: number. Fix: Set `account_id` to the Ads account id from Quora Ads Manager. vendor.quora-conversions-api.body.account_id.missing
vendor.quora-conversions-api.body.account_id.empty
vendor.quora-conversions-api.body.account_id.invalid
docs
conversion.event_name required It is the conversion event name. Quora documents a fixed PixelCategory set on the Conversion API. Native JSON type: string. Fix: Use a documented name such as `Purchase` or `Generic`. vendor.quora-conversions-api.body.conversion.event_name.missing
vendor.quora-conversions-api.body.conversion.event_name.empty
vendor.quora-conversions-api.body.conversion.event_name.invalid
docs
conversion.click_id recommended The official server-side template documents that events without qclid are accepted but cannot be attributed to an ad click. Native JSON type: string. Fix: Send `conversion.click_id` as the `qclid` from the landing-page URL or `quora_qclid` cookie. vendor.quora-conversions-api.body.conversion.click_id.missing
vendor.quora-conversions-api.body.conversion.click_id.empty
vendor.quora-conversions-api.body.conversion.click_id.invalid
docs
conversion.event_id optional It identifies the event so Pixel and CAPI can deduplicate. Quora documents sharing the same `event_id` across both. Native JSON type: string. Fix: Send a stable `conversion.event_id` on both the pixel and the Conversion API call. vendor.quora-conversions-api.body.conversion.event_id.empty
vendor.quora-conversions-api.body.conversion.event_id.invalid
docs
conversion.value optional It is the conversion value. Quora's Conversion API tag sends it as a number. Evidence: vendor template. Native JSON type: number. Fix: Send a number such as `129.99`, with no currency symbol. vendor.quora-conversions-api.body.conversion.value.invalid docs
conversion.timestamp optional It is the event time. Quora's Conversion API tag sends microseconds since epoch. Native JSON type: integer. Fix: Send an integer timestamp. The official tag uses microseconds. vendor.quora-conversions-api.body.conversion.timestamp.empty
vendor.quora-conversions-api.body.conversion.timestamp.invalid
docs
device.user_agent optional It is the device user agent. Quora's Conversion API tag sends it unhashed when the client provides it. Native JSON type: string. Fix: Send `device.user_agent`, or drop the empty pair. vendor.quora-conversions-api.body.device.user_agent.empty
vendor.quora-conversions-api.body.device.user_agent.invalid
docs
device.referer optional It is the page referrer. Quora's Conversion API tag uses the `referer` spelling. Native JSON type: string. Fix: Send `device.referer`, or drop the empty pair. vendor.quora-conversions-api.body.device.referer.empty
vendor.quora-conversions-api.body.device.referer.invalid
docs
device.language optional It is the device language. Quora's Conversion API tag sends it when the client provides it. Native JSON type: string. Fix: Send `device.language`, or drop the empty pair. vendor.quora-conversions-api.body.device.language.empty
vendor.quora-conversions-api.body.device.language.invalid
docs
device.mobile_device_id optional It is the mobile advertising id. Quora's Conversion API tag sends it when the client provides it. Native JSON type: string. Fix: Send `device.mobile_device_id`, or drop the empty pair. vendor.quora-conversions-api.body.device.mobile_device_id.empty
vendor.quora-conversions-api.body.device.mobile_device_id.invalid
docs
root optional Each event is a JSON object, rather than a scalar or list. Native JSON type: object. vendor.quora-conversions-api.body.root.invalid docs
conversion optional The current official vendor reference documents this field. Evidence: vendor template. Native JSON type: object. vendor.quora-conversions-api.body.conversion.invalid docs
device optional The current official vendor reference documents this field. Evidence: vendor template. Native JSON type: object. vendor.quora-conversions-api.body.device.invalid docs
user required The official Quora server-side template identifies user as a required object and sends an empty object when no user data is mapped. Evidence: vendor template. Native JSON type: object. vendor.quora-conversions-api.body.user.missing
vendor.quora-conversions-api.body.user.invalid
docs
method required The pinned official server template sends POST. This is transport advice, not a complete receiver method specification. Complete HTTP capture contract. Presence diagnostic severity: warning. Evidence: vendor template. vendor.quora-conversions-api.http.method.missing
vendor.quora-conversions-api.http.method.empty
vendor.quora-conversions-api.http.method.invalid
docs
headers.authorization recommended The official template sends an opaque access token in Authorization: Bearer. Token contents, ownership and expiration remain external. Complete HTTP capture contract. Presence diagnostic severity: warning. Evidence: vendor template. Fix: Send Authorization: Bearer followed by your CAPI access token. Keep tokens out of browser code. vendor.quora-conversions-api.http.headers.authorization.missing
vendor.quora-conversions-api.http.headers.authorization.empty
vendor.quora-conversions-api.http.headers.authorization.invalid
docs
content_type recommended The official server template serializes a JSON object and sets application/json. Complete HTTP capture contract. Presence diagnostic severity: warning. Evidence: vendor template. vendor.quora-conversions-api.http.content_type.missing
vendor.quora-conversions-api.http.content_type.empty
vendor.quora-conversions-api.http.content_type.invalid
docs
body required The server template always includes a request body. Unavailable or unsupported captured bodies retain the engine capture-state rules. Complete HTTP capture contract. Presence diagnostic severity: warning. Evidence: vendor template. vendor.quora-conversions-api.http.body.missing docs
body_encoding required Known decoded entities must be JSON for the reviewed producer. Unsupported compressed or multipart representations remain explicitly unvalidated. Complete HTTP capture contract. Applies when {"kind":"all","conditions":[{"kind":"not","condition":{"kind":"value_in","param":"body_encoding","values":["unsupported"]}},{"kind":"any","conditions":[{"kind":"value_in","param":"body_encoding","values":["none"]},{"kind":"value_in","param":"content_type","values":["application/json"]}]}]}. Presence diagnostic severity: warning. Evidence: vendor template. vendor.quora-conversions-api.http.body_encoding.missing
vendor.quora-conversions-api.http.body_encoding.empty
vendor.quora-conversions-api.http.body_encoding.invalid
docs

Validate a payload

pixellint validate request @request.json --rulepack vendor/quora-conversions-api

Try this failing payload in the playground. A Quora CAPI request without its authorization header.

{
  "url": "https://api.quora.com/ads/v0/conversion",
  "method": "POST",
  "headers": {
    "Content-Type": "application/json"
  },
  "body": "{\"account_id\": 123456, \"conversion\": {\"event_name\": \"Purchase\", \"click_id\": \"synthetic\"}, \"user\": {}}"
}

cargo install pixellint · npm install pixellint