> This page is for Advertising Protection.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.humansecurity.com/llms.txt.

# Single creative result

GET https://{HUMAN-API-URL}/api-v2/creative/{creative_id}

We recommend using the [Push Result API](/advertising/reference/push-result-api-overview) to let HUMAN push results to your webhook endpoint instead of the Pulling API whenever possible. This is because the Push Result API:

* Lets HUMAN send you results in close to real time
* Lets you receive both Ad Quality results as soon as they are ready
* Lets you receive Malvertising threats as soon as HUMAN flags them

However, if your organization cannot use the Push Result API, you can use the Pulling API as an alternative to receive analysis results.
HUMAN will provide the `HUMAN-API-URL` and `X-API-KEY` during the integration process.

Checks whether HUMAN has finished scanning a creative and, if so, returns the results of HUMAN’s analysis for a specific creative ID.

* If we've finished analyzing: The response will include the full results of our analysis.
* If we haven't finished analyzing: The response will only include basic information about the creative's status.

This endpoint returns a single creative result object.

Reference: https://docs.humansecurity.com/advertising/reference/get-creative-by-id

## Authentication

- `X-API-KEY` header (required) — Your unique Ad Quality API key.

## Request

### Path parameters

- `creative_id` (string, required) — The creative ID which is equal to the ID submitted for creative analysis.

## Response

### 200

Request submitted properly

- `status` (enum, optional) — Creative processing status - the creative's status in HUMAN’s processing queue. Hover over each status for details.
  - Allowed values: `in_progress`, `processed`
- `ad` (PullCreativeResponseAd, optional) — An IAB-compliant object that follows the structure outlined in the IAB’s AdCom specification. If HUMAN discovers this creative through the HUMAN Security Network, values in the `ad` and `ad.ext` objects may be populated from their standard OpenRTB representation (used in bid requests and Prebid Server) and from their native mapping in the Prebid.js response object.

## Errors

### 400 Bad Request Error

There were one or more issues with the request

- `any`

### 401 Unauthorized Error

Authorization denied

- `any`

## Types

### PullCreativeResponseAd

An IAB-compliant object that follows the structure outlined in the IAB’s AdCom specification. If HUMAN discovers this creative through the HUMAN Security Network, values in the `ad` and `ad.ext` objects may be populated from their standard OpenRTB representation (used in bid requests and Prebid Server) and from their native mapping in the Prebid.js response object.

- `creative_id` (string, optional) — The creative ID equal to the [`id`](/advertising/reference/submit-request#request.body.ad.id) submitted for creative analysis.
- `adomain` (list of string, optional) — The top-level domain of the advertiser who owns the creative. This matches the value of the [`adomain`](/advertising/reference/submit-request#request.body.ad.adomain) field that you provided to HUMAN when you submitted the creative for analysis.
- `cat` (list of string, optional) — A list of IAB categories associated with the creative. This matches the value of the [`cat`](/advertising/reference/submit-request#request.body.ad.cat) field that you provided to HUMAN when you submitted the creative for analysis.
- `cattax` (integer, optional) — The [IAB taxonomy](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/main/AdCOM%20v1.0%20FINAL.md#list_categorytaxonomies) used to define the creative’s categories. This matches the value of the [`cattax`](/advertising/reference/submit-request#request.body.ad.cattax) field that you provided to HUMAN when you submitted the creative for analysis.
- `iurl` (string, optional) — A direct link to an image of the ad creative. This matches the value of the [`iurl`](/advertising/reference/submit-request#request.body.ad.iurl) field that you provided to HUMAN when you submitted the creative for analysis.
- `ext` (PullCreativeResponseAdExt, optional) — Additional information about the creative in HUMAN’s platform.
- `categories_and_brands` (PullCreativeResponseAdCategoriesAndBrands, optional) — An object containing information about the categories and brands detected by HUMAN during analysis.
- `destinations` (list of PullCreativeResponseAdDestinationsItems, optional) — An array containing information about HUMAN’s analysis of the creative’s landing page(s).
- `network_load` (PullCreativeResponseAdNetworkLoad, optional) — Information about HUMAN’s analysis of the creative’s network load.
- `security` (PullCreativeResponseAdSecurity, optional) — Information about HUMAN's analysis of the creative's security.
- `audit` (PullCreativeResponseAdAudit, optional) — An object containing the outcome of HUMAN's analysis of the creative.

### PullCreativeResponseAdExt

Additional information about the creative in HUMAN’s platform.

- `hs_aqp_ad_id` (string, optional) — The unique ID that HUMAN assigned to the creative. Note that this does **not** match the value of the `id` field that you provided when you submitted the creative for analysis.
- `landing_page` (string, optional) — The landing page that the creative links to. This matches the value of the [`landing_page`](/advertising/reference/submit-request#request.body.ad.landing_page) field that you provided to HUMAN when you submitted the creative.
- `brand` (string, optional) — The name of the advertiser who owns the creative. This matches the value of the [`brand`](/advertising/reference/submit-request#request.body.ad.brand) field that you provided to HUMAN when you submitted the creative for analysis.
- `ad_format` (enum, optional) — The detected media type of the creative. Possible values are `HTML5_DISPLAY`, `VAST`, `MRAID`, and `NATIVE`.
  - Allowed values: `HTML5_DISPLAY`, `VAST`, `MRAID`, `NATIVE`
- `custom_account_ids` (custom_account_ids, optional) — An object that contains a list of IDs that correspond to the creative. The items in this object match the value of any items in the [`custom_account_ids`](/advertising/reference/submit-request#request.body.ad.custom_account_ids) object that you provided to HUMAN when you submitted the creative for analysis.
- `screenshot` (string, optional) — A direct link to a screenshot of the creative. Taken by HUMAN during the analysis.

### PullCreativeResponseAdCategoriesAndBrands

An object containing information about the categories and brands detected by HUMAN during analysis.

- `detected_brands` (list of string, optional) — A list of all probable brands associated with the creative, as detected by HUMAN.
- `detected_content_categories` (list of PullCreativeResponseAdCategoriesAndBrandsDetectedContentCategoriesItems, optional) — An array of all probable categories associated with the creative as detected by HUMAN.
- `domain` (string, optional) — The top-level domain of the advertiser who owns the creative. This value is extracted from the [`adomain`](/advertising/reference/submit-request#request.body.ad.adomain) array that you provided to HUMAN when you submitted the creative for analysis.
- `general_brand` (string, optional) — The primary brand associated with the creative as detected by HUMAN.
- `general_category` (string, optional) — The primary IAB category associated with the creative as detected by HUMAN.

### PullCreativeResponseAdDestinationsItems

- `landing_page_url` (string, optional) — The landing page associated with the creative as detected by HUMAN.
- `general_category` (string, optional) — General category associated with the ad’s landing page as detected by HUMAN.
- `general_brand` (string, optional) — General brand associated with the ad’s landing page as detected by HUMAN.
- `http_redirects` (list of string, optional) — A list of redirects that the user will be routed through before reaching the final landing page. The last item array is the destination landing page as detected by HUMAN.
- `renderer` (enum, optional) — How the landing page was discovered. A single creative can have one crawler destination and multiple QR code destinations.
  - Allowed values: `crawler`, `qr_code`
- `detected_content_categories` (list of string, optional) — Probable categories associated with the ad’s landing page as detected by HUMAN
- `detected_brands` (list of string, optional) — Probable brands associated with the ad’s landing page as detected by HUMAN.

### PullCreativeResponseAdNetworkLoad

Information about HUMAN’s analysis of the creative’s network load.

- `html` (integer, optional) — The size of the creative's HTML assets in bytes.
- `image` (integer, optional) — The size of the creative's image assets in bytes.
- `javascript` (integer, optional) — The size of the creative's JavaScript assets in bytes.
- `load_time_fcp` (integer, optional) — The time it took the creative to fully load during HUMAN's testing in milliseconds.
- `total_size` (integer, optional) — The size of the creative's combined assets in bytes.

### PullCreativeResponseAdSecurity

Information about HUMAN's analysis of the creative's security.

- `is_ssl` (boolean, optional) — Indicates whether the creative is SSL compliant.
- `ssl_error` (boolean, optional) — Indicates whether the creative displayed one or more SSL-related errors.
- `cookies` (boolean, optional) — Indicates whether the creative used cookies.
- `flash_content` (boolean, optional) — Indicates whether the creative used Adobe Flash content.

### PullCreativeResponseAdAudit

An object containing the outcome of HUMAN's analysis of the creative.

- `status` (enum, optional) — The outcome of HUMAN's analysis of the creative. Hover over each status for details.
  - Allowed values: `passed`, `failed`, `warning`, `unknown`
- `feedback` (list of PullCreativeResponseAdAuditFeedbackItems, optional) — An array that contains one or more reasons for the ad’s rejection or warnings. In case of `"passed"` creative, this array will be empty.

### custom_account_ids

- `seat_id` (string, optional) — An identifier for the buying seat.
- `organization_id` (string, optional) — An identifier for the owning organization.
- `agency_id` (string, optional) — The ID of the ad agency who represents the advertiser associated with the creative.
- `advertiser_id` (string, optional) — The ID of the advertiser associated with the creative.
- `publisher_id` (string, optional) — The ID of the publisher where the creative is intended to be displayed.
- `site_id` (string, optional) — The ID of the website where the creative is intended to be displayed.
- `campaign_id` (string, optional) — The ID of the campaign associated with the creative.
- `bidder_id` (string, optional) — The ID of the bidder associated with the creative.

### PullCreativeResponseAdCategoriesAndBrandsDetectedContentCategoriesItems

- `cat_type` (string, optional) — The content categorization system associated with the category.
- `id` (string, optional) — The ID of the category associated with the creative.
- `name` (string, optional) — The name of the category.

### PullCreativeResponseAdAuditFeedbackItems

- `detected` (string, optional) — The name of the rule that the creative did not comply with.
- `status` (enum, optional) — The status of the issue detected. Malvertising check if present. Can only be in case of `"failed"` creatives. Hover over each status for details.
  - Allowed values: `failed`, `warning`
- `reason` (string, optional) — A reason for the ad's rejection or warning.
- `geo` (list of string, optional) — The geographic region(s) associated with the reason. This field is optional and, in case it was not present in the response, it means that the location is the default region US.
- `device` (string, optional) — Device type where violation was detected. This is only present for Malvertising check.
- `user_agent` (string, optional) — User agent and browser of device where violation was detected. This is only present for Malvertising check.
- `user_agent_os` (string, optional) — Operating system of device where violation was detected. This is only present for Malvertising check.
- `time` (integer, optional) — A Unix timestamp for when the issue was detected.

## Examples

**Response**

```json
{
  "status": "in_progress",
  "ad": {
    "creative_id": "506584300",
    "adomain": [
      "adomain.com"
    ],
    "cat": [
      "IAB-1"
    ],
    "cattax": 5,
    "iurl": "http://iurl.com",
    "ext": {
      "hs_aqp_ad_id": "672cde741783bebd1cb6a1ad",
      "landing_page": "https://example.com/landing-page",
      "brand": "ExampleBrand",
      "ad_format": "HTML5_DISPLAY",
      "custom_account_ids": {
        "seat_id": "seat42",
        "organization_id": "org123",
        "agency_id": "agency123",
        "advertiser_id": "adv456",
        "publisher_id": "pub789",
        "site_id": "site101",
        "campaign_id": "camp112",
        "bidder_id": "testbidder"
      },
      "screenshot": "https://storage.googleapis.com/..."
    },
    "categories_and_brands": {
      "detected_brands": [
        "Boiron"
      ],
      "detected_content_categories": [
        {
          "cat_type": "HS Category",
          "id": "1",
          "name": "/Health/Health Conditions/Infectious Diseases/Other"
        }
      ],
      "domain": "igtb.com",
      "general_brand": "Boiron",
      "general_category": "IAB Tier 2 287 Diseases and Conditions"
    },
    "destinations": [
      {
        "landing_page_url": "https://us.budweiser.com/",
        "general_category": "IAB Tier 2 211 Alcoholic Beverages",
        "general_brand": "Budweiser",
        "http_redirects": [
          "https://ad.doubleclick.net/pcs/click?xai=AKAOjsuplIwhu640",
          "https://shop.mikmak.ai/social/click?ct=665334455"
        ],
        "renderer": "crawler",
        "detected_content_categories": [
          "/Food & Drink/Beverages/Alcoholic Beverages",
          "Food & Drink/Cooking & Recipes/Desserts"
        ],
        "detected_brands": [
          "Budweiser",
          "NBC",
          "Olympus Corporation"
        ]
      }
    ],
    "network_load": {
      "html": 555815,
      "image": 101206,
      "javascript": 82880,
      "load_time_fcp": 1450,
      "total_size": 739901
    },
    "security": {
      "is_ssl": false,
      "ssl_error": true,
      "cookies": false,
      "flash_content": false
    },
    "audit": {
      "status": "passed",
      "feedback": [
        {
          "detected": "malvertising",
          "status": "failed",
          "reason": "TI-35",
          "geo": [
            "UK"
          ],
          "device": "Samsung SM-S918U",
          "user_agent": "Chrome Mobile In-App",
          "user_agent_os": "Android",
          "time": 1743849600
        }
      ]
    }
  }
}
```

**SDK Code**

```python
import requests

url = "https://{human-api-url}/api-v2/creative/creative_id"

headers = {"X-API-KEY": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://{human-api-url}/api-v2/creative/creative_id';
const options = {method: 'GET', headers: {'X-API-KEY': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://{human-api-url}/api-v2/creative/creative_id"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("X-API-KEY", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://{human-api-url}/api-v2/creative/creative_id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://{human-api-url}/api-v2/creative/creative_id")
  .header("X-API-KEY", "<apiKey>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://{human-api-url}/api-v2/creative/creative_id', [
  'headers' => [
    'X-API-KEY' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://{human-api-url}/api-v2/creative/creative_id");
var request = new RestRequest(Method.GET);
request.AddHeader("X-API-KEY", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["X-API-KEY": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://{human-api-url}/api-v2/creative/creative_id")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```