pixellint

Blog · Yahoo CAPI

Yahoo DSP CAPI takes eventTs in seconds or milliseconds. LINE Yahoo truncates 13 digits.

Yahoo DSP CAPI takes eventTs in seconds or milliseconds. LINE Yahoo truncates 13 digits. Yahoo Inc DSP posts to batch.datax.yahoo.com/v1/events/{pixelId}. LY Corporation Conversion API treats a 13-digit event_time as seconds by dropping the last three digits. One worker cannot serve both Yahoo stacks.

The first integration most stacks will ship is one Yahoo worker. The brand says Yahoo. The field looks like a Unix time. The host gets rewritten from a config table. Yahoo Inc DSP is batch.datax.yahoo.com with a JSON array, OAuth 2.0, and eventTs. LY Corporation (LINE Yahoo Japan) is conversion-api.yahooapis.jp/v1 with tag_id, data[], X-TagAccessToken, and event_time. They are not two regions of one API. Mixing them is how a purchase lands on the wrong clock, or on the wrong company.

DSP documents eventTs as an integer in either seconds or milliseconds, example 1746558464. LY documents event_time as 10-digit UNIX time from 90 days before the request through now, and says if 13 digits are entered, ignore the last three digits and treat it as 10-digit UNIX time. That truncation is the opposite of vendors that append 000 to pad seconds into milliseconds. A shared Date.now() helper is not a Yahoo helper.

Yahoo Inc DSP: eventTs on datax, seconds or milliseconds

Standard Yahoo Conversion API is the default batch endpoint: POST https://batch.datax.yahoo.com/v1/events/<pixelId> with Content-Type application/json and Authorization Bearer <access_token>. The pixel id is created under Tracking in the DSP. Do not reuse a Dot pixel that is already firing on a site. OAuth is 2.0 with a JWT against id.b2b.yahooincapis.com. Yahoo does not support OAuth 1.0 static tokens. The access token lasts 60 minutes.

eventTs is required. Invalid values are future timestamps or older than 30 days (DXOL400_INVALID_EVENT_TS_FIELD). Missing eventTs is DXOL400_MISSING_EVENT_TS_IN_REQUEST. eventName is required. actionSource is required: web, app, phone, email, online, physical_store. userData is required and needs at least one id, or clickData. Emails are SHA-256, lowercased before hash, lowercase hex. Phones are SHA-256 lists. ip_address and userAgent are not hashed. clickData accepts vmcid (Yahoo Click ID) or tblci (Taboola), not both. Product CAPI uses the same host and the same eventTs rule. eventName there includes purchase; eventId should be unique or duplicates drop.

eventData.price is a number. By default the value is assumed to be USD. Normalize values to lowercase to match DSP rules. isTestEvent lives under eventData.customKeyValues and drops the event from production when true. privacy.privacy_type is GPP, GDPR, or OPTOUT. That object is not an LY field.

LY Corporation: event_time, 10 digits, drop the last three

The LY Conversion API server is https://conversion-api.yahooapis.jp/v1. Auth is X-TagAccessToken from the Campaign Management Tool, not a Yahoo Inc DSP Bearer token. tag_id is required. data is an array capped at 1,000 items. Each item has event, user, optional web, optional custom. event.event_type is page_view, purchase, generate_lead, sign_up, and the rest of the LY list, not DSP's eventName string. event.action_source can only be web. event.event_time is required, long, 10-digit UNIX time, from 90 days before the request date to now. If the request is close to current time, the API may adjust it.

If 13 digits are entered, LY ignores the last three digits and treats the value as 10-digit UNIX time. Date.now() of 1733508168123 becomes 1733508168. That happens to be floor(ms / 1000) when the input is Unix milliseconds. It is also how a 13-digit value that is not milliseconds gets silently shortened.

Success is HTTP 202. Invalid JSON or values are 400. At least one user parameter is required. Email is SHA-256 of lowercase. Phone is SHA-256 of E.164. custom.currency may be JPY or USD, and is required if you send a monetary value. Do not send eventTs to this host. Do not send event_time to datax.

Two windows, two names, two companies

DSP rejects eventTs older than 30 days. LY accepts event_time back 90 days. A shared retry queue applying one window to both is the miss. DSP samples use 10-digit eventTs and say milliseconds are also allowed. LY samples use 1700000000 and tell you 13 digits lose the last three. A helper that always sends 13-digit milliseconds is legal on DSP and truncated on LY.

Yahoo Inc is the DSP CAPI on datax.yahoo.com. LY Corporation is Yahoo Japan ads on yahooapis.jp. A seat in one is not a pixel in the other. Standard versus Product CAPI on the DSP side is already two specs. Adding LY makes three envelopes. One internal event still fans out to three bodies.

The body people will send to the wrong Yahoo

A Yahoo Inc DSP-shaped event with 13-digit eventTs. This is not an LY Conversion API body.

[
  {
    "eventTs": 1733508168123,
    "actionSource": "web",
    "eventName": "Purchase",
    "userData": {
      "email": ["64ec88ca..."]
    }
  }
]

Posted to batch.datax.yahoo.com that object is in the DSP dialect. Posted to conversion-api.yahooapis.jp it is missing tag_id and data[].event.event_time. LY will 400 if it cannot read the JSON as its schema. DSP will 400 DXOL400_INVALID_EVENT_TS_FIELD if that millisecond clock is in the future or older than 30 days.

The LY shape is tag_id, data[{ event: { event_type, event_time, action_source web }, user: { hashed_email } }]. If you pass 1733508168123 there, LY drops 123 and keeps 1733508168. DSP would have kept the milliseconds. That is the dialect.

Names that do not translate

Do not mix Yahoo Inc DSP with LINE Yahoo Japan

Help on help.yahooinc.com is the DSP CAPI. ads-developers.yahoo.co.jp is LY. DSP clickData.vmcid is Yahoo Click ID. LY user.ly_c is the _ly_c cookie or query, with a timestamp prefixed because the URL parameter has none. Copying vmcid onto ly_c is a join that never happens.

DSP assumes USD on eventData.price unless your DSP rules say otherwise. LY requires custom.currency JPY or USD when you send value. A shared minor-units integer is wrong on both if they want 12.99 and 1000 respectively.

DSP eventId, if present, must be unique or duplicates drop. LY transaction_id is optional. If it is missing, LY falls back to account id plus event_time. Truncating milliseconds can collapse two events that differed only in the millisecond digits into one dedup key.

If 13 digits are entered, ignore the last three digits and treat it as 10-digit UNIX time.

LY Corporation Conversion API reference

What to do

Keep one internal event: UTC instant, order id, hashed email, landing URL, click references. At the edge, pick the company. Yahoo Inc DSP: POST the array to batch.datax.yahoo.com/v1/events/{pixelId} with Bearer token, eventTs as either 10 or 13 digits you actually mean, eventName, actionSource, userData. LY: POST tag_id and data[] to conversion-api.yahooapis.jp/v1 with X-TagAccessToken, event_time as 10-digit seconds, event_type, action_source web. Do not share the JSON.

Convert the clock at that edge. If you store milliseconds, floor to seconds for LY. If you send milliseconds to DSP, send them only as eventTs and accept the 30-day window. Do not pad seconds with 000 to satisfy a third vendor and then reuse that 13-digit value on LY. Persist vmcid and ly_c as different columns.

The contract for field lists is the DSP Standard CAPI page and the LY reference page. This post is the market fact: two Yahoo conversion APIs, two clocks, two hosts. Pixellint is not affiliated with Yahoo Inc or LY Corporation. Passing a linter means the artifact matches the published envelope. It does not mean the DSP or LY attributed the order, and it does not detect fraud.

Checklist

Sources

Contract pages

The dated argument is above. These pages are the field lists.

Open the Yahoo CAPI pack Docs