Resolve many lookups in one call
An array of lookup requests in; an array of lookup responses out, same order,
one-to-one. Each item carries its own timestamp, so an impression log enriches
against the schedule as of each impression, and its own verbose. An invalid
item gets an error entry in its slot while the other items resolve normally.
Exceeding the documented item cap fails the whole batch with 400. Each item counts
as one unit against your rate limit and your usage. No latency SLA on batch.
Authentication
Your Pixalate-provided API key, in the request header on every route. Credentials are never accepted in query parameters. An API key may be obtained by signing up for an account on the Pixalate developer website.
Username/password alternative to the API-key header. Headers only — credentials are never accepted in query parameters.
Request
Required. App store bundle/ID. Alone it fully resolves single-channel apps; on an aggregator (multi-channel) app with no channel or show identifier alongside it, the result is a structured CHANNEL_UNRESOLVED miss, never a guess.
Native/platform channel identifier, matched exactly against known identifiers (substring containment as a fallback). Strictly supersedes channelName — when present, the name is not consulted.
Channel display name (fuzzy name match). Consulted only when channelId is absent. Capped at 256 characters; longer values are truncated.
Show/program title. Fuzzy match, scoped to the declared app’s catalog; a resolved show always carries its channel association. When the channel path and the show path disagree, the channel + timestamp result wins and this input is marked CONFLICT in verbose debug. Capped at 256 characters; longer values are truncated.
Platform/OS, from a fixed enumerated vocabulary. An out-of-vocabulary value, including a different letter case, → 400 — never silently degraded. Omit the field for a platform not listed; resolution then runs against all platforms.
Optional OpenRTB device type. Accepted and retained for forward compatibility; not consulted by resolution during the beta.
ISO 8601 UTC lookup instant; absent means now. Per item in batch, so an impression log enriches against the schedule as of each impression. Up to 5 minutes in the future clamps to now (TIMESTAMP_CLAMPED notice); further in the future, older than the 7-day window, or unparseable → 400.
Ask for the debug object in the response. Whether the request is answered with one is a property of the environment: an environment that does not offer the debug object returns the ordinary envelope without it, and with nothing on the wire to say so. The sandbox at dev-epg-api.pixalate.com offers it.
Response
Batch processed; inspect each slot for the per-item outcome.
The best match on a hit; empty on a miss.
Present when candidates is empty or degraded. Single-valued — the earliest resolution stage that failed; a stage that never ran doesn’t count. Finer-grained internal subcategories are never serialized in any response.
Present on the parameterized lookup route when verbose=true and the environment offers the debug object. It is an integration aid the sandbox at dev-epg-api.pixalate.com offers, not a guarantee of every environment: an environment that does not offer it answers a verbose request with the ordinary envelope and no debug object, and with no notice, reason code, or error to say so. Identifier-level disclosures (supersession, ignored-empty, unsupported, conflicts) live here and only here. Use it during integration: it shows exactly how each input was read.
Batch only — populated in a slot whose item was invalid (echoes what the single-request 400 would have said).