AdColony · AsyncAPI Specification
Adcolony V4Vc Webhooks
Version
View Spec
View on GitHub
CompanyAdvertisingMobile AdvertisingAdTechSDKMonetizationMobileAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-12'
method: searched
source: >-
https://github.com/AdColony/AdColony-Android-SDK/wiki/Showing-Rewarded-Interstitial-Ads
notes: >-
AdColony publishes no AsyncAPI document and no event-streaming surface. It does
publish one real, fully specified server-to-server callback: the V4VC
(Virtual Currency) server-side reward callback. AdColony calls a publisher-hosted
URL when a user completes a rewarded ad, so the publisher can credit virtual
currency from a trusted source rather than from the client. This artifact captures
that callback contract verbatim from the provider's own SDK wiki, which is the
only AdColony developer documentation still served (adcolony.com and
support.adcolony.com are gone — see x-coverage in apis.yml). No AsyncAPI is
fabricated for it.
asyncapi_published: false
asyncapi_reason: >-
Provider never published an AsyncAPI (or any event schema). The webhook is
documented in prose plus a PHP receiver sample; the transport is an HTTP GET with
query-string parameters, which predates the modern webhook conventions AsyncAPI
models.
transport: http-get-query-string
direction: provider-to-publisher
delivery: at-least-once
webhooks:
- name: v4vc-reward-callback
title: V4VC server-side virtual currency reward callback
docs: >-
https://github.com/AdColony/AdColony-Android-SDK/wiki/Showing-Rewarded-Interstitial-Ads
trigger: >-
A user completes a rewarded ad in a zone configured for V4VC with client-side
virtual currency disabled in the AdColony control panel.
method: GET
endpoint_owner: publisher
endpoint_configuration: >-
The publisher enters the callback URL in the video zone configuration page of
the AdColony Control Panel.
endpoint_requirements:
- >-
The callback URL must not require any authentication to reach the publisher's
server (no login, no auth header). HTTPS is permitted and encouraged; what is
forbidden is an authentication challenge.
parameters:
- name: id
in: query
description: >-
AdColony transaction id. Unique per transaction and the key the publisher must
record to detect duplicates.
role: transaction-id
- name: uid
in: query
description: AdColony-internal device/user id.
- name: zone
in: query
description: AdColony zone id the reward was earned in.
- name: amount
in: query
description: Amount of virtual currency to credit.
- name: currency
in: query
description: Virtual currency type/name configured for the zone.
- name: verifier
in: query
description: >-
MD5 hash used to authenticate the callback. See security.hash_construction.
role: signature
- name: custom_id
in: query
required: false
description: >-
The publisher-supplied user id passed via AdColonyAppOptions. Only sent when
the publisher appends `&custom_id=[CUSTOM_ID]` to the zone's configured
callback URL; it is not appended automatically.
- name: open_udid
in: query
description: Legacy iOS device identifier. Always empty on Android.
- name: udid
in: query
description: Legacy iOS device identifier. Always empty on Android.
- name: odin1
in: query
description: Legacy iOS device identifier. Always empty on Android.
- name: mac_sha1
in: query
description: Legacy iOS device identifier. Always empty on Android.
security:
scheme: shared-secret-md5-hash
secret_source: >-
A per-account secret key issued by AdColony and shown in the AdColony control
panel. Never transmitted in the callback.
hash_construction: >-
md5(id + uid + amount + currency + SECRET_KEY + custom_id) — concatenated in
that order, with custom_id appended only when the publisher has configured it.
Compare the result against the `verifier` parameter and reject on mismatch.
weaknesses:
- >-
MD5 with a concatenated (unseparated) shared secret. Not an HMAC; no
per-message nonce beyond the transaction id and no timestamp, so the callback
carries no replay window of its own.
- >-
Parameters travel in the query string, so identifiers and amounts land in any
intermediary access log.
responses:
- body: vc_success
meaning: >-
Transaction finished. Return this when the callback was received and the user
was credited, AND when the transaction id is a duplicate that was already
rewarded.
terminal: true
- body: vc_decline
meaning: >-
Transaction finished, not rewarded. Return when the uid is not valid or the
hash check failed.
terminal: true
- body: vc_noreward
meaning: Equivalent to vc_decline. Transaction finished, not rewarded.
terminal: true
- body: anything else
meaning: >-
Treated as an error. AdColony will periodically retry the transaction against
the publisher's server.
terminal: false
idempotency:
model: receiver-side-dedupe
key: id
requirement: >-
"To prevent duplicate transactions, you must make a record of the id of every
transaction received, and check each incoming transaction id against that
record after verifying the parameters."
on_duplicate: Return vc_success without crediting the user again.
note: >-
Idempotency here is the PUBLISHER's obligation on an inbound callback, not a
guarantee AdColony offers to callers of an AdColony API. It is recorded as a
documented convention, not as consumer-facing idempotency support.
provider_rules:
- >-
The only acceptable reasons to not reward a transaction are an invalid uid, a
failed security check, or a duplicate transaction already rewarded.
- >-
Client-side virtual currency handling exists as a zone option but the provider
documents it as not advised, stating a secure client-side virtual currency
system is not achievable.