document_scanner
Ad Tag Tester
CPU/RAM usage, Dimensions, SSL...
document_scanner
HTML5 Ad Validator
Initial Load, Click Tags, Meta ad.size...
document_scanner
VAST Validator
Audio Loudness, Video Codecs, Dimensions...
document_scanner
Video Validator
MOOV Atoms, Audio Loudness, Bit Rates...
headset
Live Chat Online
Get instant answers to your questions
email
Contact Support
Reach out to see how AdValify can help
cloud
Network Status
See live network status updates
emoji_events
Customer Testimonials
Read what others have to say about AdValify
auto_stories
User Guide
Get started with AdValify in seconds
document_scanner
Creative QA Tests
CPU/RAM usage, Initial Load, SSL, etc.
emoji_events
Customer Testimonials
Read what others have to say about AdValify
api
API: Ad Tag Tester
API docs to validate ad tags
api
API: HTML5 Ad Validator
API docs to validate HTML5 ads
api
API: VAST Validator
API docs to validate VAST ads
open_in_new
GitHub PHP Class
PHP Ad Validator Class
public
Network Status
Live infrastructure status
AdValify.io Logo
AdValify.io
Automated
ad validation
 

HTML5 Ad Validator

API DOCUMENTATION

Authentication

API Keys are used to authenticate requests. Add your key to each request as a header with the name X-ApiKey. Keep your API key private as much as you do with passwords.

You need to sign up to create an API key.
Add your API Key
curl https://{your_name}.api.advalify.io
  -H "X-ApiKey: TCm2Hd_rT4pRNvSZ2cGYCJ6... (example)"

Endpoint

post
/v2/scanZip

Parameters

data
string, required
The binary Zip file in base64-encoded format.
targeting
array
An array with targeting settings that will be applied before loading the creative. It can contain these key/values:
  • device either desktop or mobile
  • language the HTTP accept-header, like en-US

Response
200
400
401
429

3pas
string
The name of the third-party ad server, if detected successfully. Remains blank otherwise.
blocked_by_adblock
boolean
Whether or not the tag will likely be blocked by ad blockers.
click_tag_found
boolean
Whether or not a click tag was found in the index.html file.
console
array
All errors and warnings generated while loading the creative.
cookies
array
All cookies that were dropped by the creative, either set via JavaScript or via an HTTP header.
cpu_usage
int
The CPU usage, in milliseconds.
creative_rendered
boolean
Equals true in case something was painted on the screen, false otherwise.
dialogs
array
Any dialog message the creative shows as a pop-up. Generally created by alert() and confirm().
dimensions
array
The detected width and height of the creative.
dom_content_loaded
int
The time it took for the DOMContentLoaded event to fire, in milliseconds.
file_structure
array
Contains the file structure of the Zip, including the name, type and file size.
has_border
boolean
Whether or not the creative has a contrasting border.
has_external_assets
boolean
Whether or not the creative loads assets from outside the Zip. Keep this at a minimum to reduce additional DNS lookups, connections, etc.
has_video
boolean
Whether or not the creative plays video content.
iframes
int
The number of iframes added to the DOM. This should be kept at a minimum to reduce memory usage.
local_storage
array
All key/value pairs stored in window.localStorage.
memory_usage
int
The amount of RAM memory used, in bytes.
meta
array
Meta-data about the scan, like the CPU used, the time it took to complete the scan, the server location, etc.
meta_ad_size
boolean
Whether or not the index file has a <meta name="ad.size" content="width=X,height=X"> line, as per IAB standards.
minified
boolean
Whether or not all CSS and JavaScript files were minified. Returns false if at least one file was found where more than 5% savings were possible, true otherwise.
mobile_friendly
boolean
Whether or not the creative will display fine on a mobile device. Equals true if the creative is either responsive or less than 300 pixels wide.
network
array
All network requests and their responses, including a full echo of the HTTP headers. Provides SSL certificate information too.
job_id
string
A unique ID assigned to the scan. Store this ID on your own backend to re-fetch result data at a later moment.
screenshot
array
A screenshot of the creative. The url points to a PNG image. The background_color is in hex-format. It generally goes well with the main colors of the screenshot.
ssl
boolean
Whether or not the creative is SSL-compliant. If the creative tries to load assets over http, it will equal false.
uses_document_write
boolean
Whether or not the creative uses the JS document.write() function. Synchronous code should be avoided.
visual_artifacts
boolean
If visual artifacts have been detected. For example, a 300x250 creative that is actualy 301x251 in size.
cURL
curl "https://{your_name}.api.advalify.io/v2/scanZip"
  -H "X-ApiKey: {api_key}"
  -X POST
  -d '{
    "data": "QmFzZTY0IG9mIHppcCBmaWxlIGhlcmU=...",
    "targeting": {
        "device": "desktop",
        "language": "en-US"
      }
  }'
Example Response
{
     "blocked_by_adblock": false,
     "click_tag_found": true,
     "console": {
         "errors": ["Error: ReferenceError: somefunction is not defined"],
         "warnings": []
    },
     "cookies": [{
         "domain": ".advalify.io",
         "expires": 1646483649,
         "httpOnly": false,
         "name": "__gads",
         "path": "/",
         "priority": "Medium",
         "secure": false,
         "session": false,
         "size": 92,
         "value": "ID=1a98edadd0995906-22cd64eb62ba0089:T=1612787649:S=ALNI_MYy4JVsyP7DbDydn73L6WR0-fHnKA"
    },
     {
         "domain": ".doubleclick.net",
         "expires": 1646483650.085365,
         "httpOnly": true,
         "name": "IDE",
         "path": "/",
         "priority": "Medium",
         "sameSite": "None",
         "secure": true,
         "session": false,
         "size": 70,
         "value": "AHWqTUlqh0OPFbGUeGXQqkXebE_Tf9xEs0i7fspXWBfoQHL0p3ooP5Iv-vx7JYmWKsA"
    }],
     "cpu_usage": 66,
     "creative_rendered": true,
     "dialogs": [],
     "dimensions": {
         "height": 90,
         "width": 728,
         "text": "90x728"
    },
     "dom_content_loaded": 162,
     "file_structure": [{
         "bytes": 3922,
         "name": "front_city.png",
         "type": "image"
    },
     {
         "bytes": 11860,
         "name": "index.html",
         "type": "html"
    },
     {
         "bytes": 6510,
         "name": "google_logo.png",
         "type": "image"
    }],
     "has_border": false,
     "has_external_assets": false,
     "has_video": false,
     "html5_library": "GreenSock",
     "iframes": 1,
     "local_storage": [],
     "memory_usage": 2400256,
     "meta": {
         "api_version": "v2",
         "cpu": "AMD 16-Core EPYC 7302P",
         "creative_type": "zip",
         "device": "Desktop",
         "language": "en-US",
         "ram": "128GB",
         "scan_duration": "1.871964",
         "server_location": "ams",
         "timestamp": 1612789956,
         "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
    },
     "meta_ad_size": false,
     "minified": true,
     "missing_assets": [],
     "mobile_friendly": false,
     "network": {
         "load_size": {
             "host_initiated_subload": 0,
             "initial_load": 35690,
             "total": 35690
        },
         "measurement_pixels": 0,
         "responses": [{
             "bytes": 11860,
             "headers": {
                 "content-encoding": "br",
                 "content-type": "text/html",
                 "date": "Mon, 08 Feb 2021 13:12:34 GMT",
                 "last-modified": "Sat, 18 Apr 2020 18:08:16 GMT"
            },
             "is_pixel": false,
             "method": "GET",
             "resource_type": "document",
             "server_ip": "127.0.0.1",
             "ssl": true,
             "ssl_info": {
                 "protocol": "TLS 1.3",
                 "validFrom": 1607455037,
                 "validTo": 1922815037
            },
             "status": 200,
             "status_text": "",
             "timing": 169,
             "url": "https://www.advalify.io/tmp/7febf-e5693-1b71c-78616.zip/index.html"
        },
         {
             "bytes": 6510,
             "headers": {
                 "accept-ranges": "bytes",
                 "content-length": "6510",
                 "content-type": "image/png",
                 "date": "Mon, 08 Feb 2021 13:12:34 GMT",
                 "last-modified": "Sat, 18 Apr 2020 18:08:16 GMT"
            },
             "is_pixel": false,
             "method": "GET",
             "resource_type": "image",
             "server_ip": "127.0.0.1",
             "ssl": true,
             "ssl_info": {
                 "protocol": "TLS 1.3",
                 "validFrom": 1607455037,
                 "validTo": 1922815037
            },
             "status": 200,
             "status_text": "",
             "timing": 201,
             "url": "https://www.advalify.io/tmp/7febf-e5693-1b71c-78616.zip/google_logo.png"
        },
        {
             "..."
        }]
    },
     "job_id": "7febf-e5693-1b71c-78616",
     "screenshot": {
         "highres": {
             "bytes": 132,
             "color": "#d8ecfe",
             "mime_type": "image/png",
             "url": "https://try.cdn.advalify.io/img/qa-report-983243-29cbfuzn4mhk.png"
        },
         "thumbnail": {
             "bytes": 538,
             "color": "#d8ecfe",
             "mime_type": "image/jpg",
             "url": "https://try.cdn.advalify.io/img/qa-report-983243-xz5rs8mc3yuk.jpg"
        }
    },
     "ssl": {
         "compliant": true,
         "insecure_urls": []
    },
     "uses_document_write": false,
     "visual_artifacts": false,
    
}
format_quote
Robert Konior
starstarstarstarstar
Software Developer, Agora

Rate Limits

Rate limits are calculated dynamically based on the load of the worker nodes. If no resources are available, the API will respond with a 400 HTTP code and an error message. It's recommended to wait for a response before sending a new one. To process batches, submit them one by one instead of all at the same time.

Error Handling

Conventional HTTP response codes are used to indicate if a request failed or was successful. Codes in the 2xx range indicate success. Codes in the 4xx range indicate that the request failed. In that case, the JSON response will hold an error code and human-readable error message.
authentication_error
string, solvable
The X-ApiKey header was not added or the key was incorrect. Contact support if you need help.
invalid_endpoint
string, solvable
An incorrect endpoint URL was used. Check for typos and make sure to use the endpoints from this documentation.
payload_error
string, solvable
The payload contained missing parameters or had an incorrect format. See the error message for details.
quota_error
string, solvable
Your monthly quota limit has been reached. Get in touch if you need a higher quota.
processing_error
string, not solvable
The worker nodes weren't able to process your request. Please drop us a note to see if we could troubleshoot.
Example of an error
{
    "error_type": "payload_error",
    "message": "There was an error."
}