> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.pixalate.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.pixalate.com/_mcp/server.

# Batch risk ratings for thousands of CTV apps

POST https://api.pixalate.com/api/v2/mrt/ctv

\<p>The purpose of this API is to provide risk ratings and reputational data across thousands of CTV applications in a batch mode.\</p> \<p>Posted data should be in CSV format where each line consists of a single field which is the App ID.  The request MIME type should be \<code>text/plain\</code>.\</p> \<p>Once request data is submitted, a URL to a newline-delimited JSON formatted report is provided as a response. While the resulting resource is public, the URL contains a randomly generated identifier that ensures the data is relatively secure unless the URL itself is made public by the user.\</p> \<p>The report will not be available for download at the returned URL location until processing has been completed. While creating the report, a request to retrieve the report using the response URL will return an HTTP status code Not Found (404). Once asynchronous processing has completed, the report is returned as normal. If asynchronous processing of a report fails because of an invalid query the request to retrieve the report using the response URL will return an HTTP status code Bad Request (400). Or, if the submitted file contained more than 5000 App IDs, then an HTTP status code Request Entity Too Large (413) is returned. Or, if the account's quota limit has been exceeded, then an HTTP status code Forbidden (403) is returned. For all other errors, a request to retrieve the report using the response URL will return an HTTP status code Internal Service Error (500). Client systems should poll the response URL until the report is available, or a non 404 HTTP status code is returned.\</p> \<p>\<b>This operation requires an Enterprise subscription. Please reach out to us at \<a href="mailto:[support@pixalate.com](mailto:support@pixalate.com)">[support@pixalate.com](mailto:support@pixalate.com)\</a> for details on how to enable this for your account.\</n>\</p>

Reference: https://docs.pixalate.com/api-reference/enrichment-ctv/batch-get-ctv-apps-data

## Authentication

- `x-api-key` header (required) — Authentication and authorization is achieved by supplying your Pixalate provided API key in the header of the request. An API key may be obtained by signing up for an account on the [Pixalate developer website](https://developer.pixalate.com).

## Request

### Query parameters

- `pretty` (boolean, optional) — If true, return pretty JSON. Default is false.

## Response

### 200

OK

- `string`

## Errors

### 400 Bad Request Error

Bad Request - Invalid parameters in request.

- `any`

### 401 Unauthorized Error

Unauthorized - Invalid API Key.

- `any`

### 403 Forbidden Error

Forbidden - Quota has been exhausted, Subscription expired or needs upgrade.

- `any`

### 500 Server Error

Server Error - The API experienced an internal error. Contact support.

- `any`

## Examples

**Response**

```json
"https://dashboardcdn.pixalate.com/www/exported/Client/2022-04-12/qprdbkr9dfeoostip8ltqgmecd/apps_2022-04-12"
```

**SDK Code**

```python
import requests

url = "https://api.pixalate.com/api/v2/mrt/ctv"

headers = {"x-api-key": "<apiKey>"}

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

print(response.json())
```

```javascript
const url = 'https://api.pixalate.com/api/v2/mrt/ctv';
const options = {method: 'POST', 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://api.pixalate.com/api/v2/mrt/ctv"

	req, _ := http.NewRequest("POST", 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://api.pixalate.com/api/v2/mrt/ctv")

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

request = Net::HTTP::Post.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.post("https://api.pixalate.com/api/v2/mrt/ctv")
  .header("x-api-key", "<apiKey>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.pixalate.com/api/v2/mrt/ctv', [
  'headers' => [
    'x-api-key' => '<apiKey>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.pixalate.com/api/v2/mrt/ctv");
var request = new RestRequest(Method.POST);
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://api.pixalate.com/api/v2/mrt/ctv")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
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()
```