WideOrbit · AsyncAPI Specification
Wideorbit Webhooks
Version
View Spec
View on GitHub
CompanyAdvertisingAdTechMediaBroadcastingRadioTelevisionAd ManagementProgrammaticMedia SalesAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-12'
method: searched
source: >-
https://www.wideorbit.com/wp-content/uploads/2022/07/WO-DATA-API-Guide-Version-421_New.pdf
(WO Data API Guide 4.2.1, "Request Data" / "Data Response" / "Callback
Request" / "Callback Response" sections) + https://www.wideorbit.com/io/
docs: https://www.wideorbit.com/io/
asyncapi_published: false
summary: >-
WideOrbit ships no AsyncAPI document, but it does publish a real
server-to-client push surface, and it is the defining shape of the WO Data
API: every export is asynchronous, and the payload is POSTed OUT to an
endpoint the integrator stands up, not pulled by the integrator. The
WideOrbit.io product page separately advertises an events capability —
"timely notifications of source data changes from WideOrbit systems" — but
that event catalog lives inside the authenticated Dev Portal and no channel,
topic or payload for it is public, so none is recorded here.
delivery_model: server-initiated push to a caller-nominated destination
subscription_model: >-
Per-request, not per-topic. There is no webhook registration endpoint and no
subscription object; the destination is supplied on each individual export
request. There is no replay, no retry policy and no signature/HMAC scheme
documented.
webhooks:
- name: Data Response (chunked export delivery)
direction: WideOrbit -> integrator
transport: HTTP POST
target: >-
TargetUrl, supplied by the caller on the GetData request (guide example:
https://yoursite.com/ProcessData). Optional TargetHeaders[] {Key, Value}
pairs are echoed on the outbound call, which is the only mechanism available
for authenticating WideOrbit to the receiver.
trigger: An accepted export request completes a chunk of rows.
payload:
envelope: JSON-RPC style packet the receiver must unpack
fields:
- name: requestId
type: string
note: The RequestId returned by the GetData method; correlates the packet to the job.
- name: chunkId
type: int
note: >-
Identifies the block of rows. The LAST chunk is signalled by a negative
value equal to the total chunk count — the end-of-stream marker.
- name: resultSet
type: int
note: Which result set the rows came from; always 1 for single-result queries.
body_format: JSON | XML | CSV | RAW, chosen by DataExportFormat on the request
compression: 'Accept-Encoding: gzip on the original request makes the delivery gzipped;
the receiver must decompress it'
routing:
UseProxy_true: Data is sent to the client FROM the Data API server.
UseProxy_false: >-
Data is sent DIRECTLY from the Broadcaster Agent Service (BAS). Default is
false. This choice decides which WideOrbit egress the integrator must
allow through its firewall — the guide notes that if the Broadcaster has
rules preventing outbound communication, the HTTP endpoint has to be
whitelisted.
receiver_obligation: >-
Implement a handler that unpacks the packet and stitches chunks back into one
continuous dataset, keyed on requestId + chunkId.
- name: Callback Response (acknowledgement)
direction: integrator -> WideOrbit
transport: HTTP POST
target: '{root}/api/Requests/Update/{requestId}'
headers:
- partner-id
- api-key
- 'Content-Type: application/json'
payload:
fields:
- name: IsValidated
type: bool
note: Whether the request was successfully handled by the receiver.
- name: TrackingFieldValue
type: var
note: >-
Tracking field value; empty when no tracking field is used. Paired with
the TrackingField / TrackingEnabled request options, this is how an
integrator watermarks an incremental export so the next run can resume.
response: Empty body, status code OK.
note: >-
The closing half of the loop: WideOrbit expects the integrator to confirm
receipt, which makes delivery at-least-once with an application-level ack
rather than fire-and-forget. Note the ack uses only partner-id and api-key —
the agreement-key is not required here.
streaming_destinations:
note: >-
Alongside the HTTP push, an export can be routed to Kafka
({root}/api/RequestData/GetDataKafka, which takes a comma-separated list of
broker endpoints), AWS S3, GCP, FTP, e-mail or local storage. The Kafka
destination is the only true event-stream target, but it is the INTEGRATOR's
broker, not a WideOrbit-hosted stream — WideOrbit publishes no broker of its
own for subscribers to connect to.
security:
signature: null
hmac: null
mtls: null
ip_allowlist: >-
Not published as addresses, but required in practice — the guide says the
WideOrbit DAPI Server endpoint must be whitelisted for FTP delivery, and the
integrator's HTTP endpoint must be whitelisted where the Broadcaster
firewalls outbound traffic.
note: >-
There is NO documented request-signing or replay-protection scheme on the
outbound delivery. The only authentication the receiver gets is whatever it
put into TargetHeaders[] itself. The guide's only transport guidance is
"always use HTTPS secure endpoint."
gaps:
- No AsyncAPI document.
- No webhook registration/subscription API; destination is per-request.
- No event catalog for the WideOrbit.io "source data change notifications" — it is Dev
Portal-only.
- No signing secret, no timestamp/nonce, no replay protection on delivery.
- No documented retry or dead-letter behaviour; a failed delivery surfaces only as a
Failed / PartiallyCompleted / Abandoned RequestStatus.