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

# Request supply chain CSV export

POST https://api.hiddenlayer.ai/scan/v3/reports/supply-chain/csv

Asynchronously initiates generation of a supply chain CSV report containing scan results matching the specified filters.
Returns an ephemeral report ID that can be used to check the status of the export and download the file.
File is stored for 30 days once generated.

**Row Limit**: Returns up to 10,000 most recent scan results.

**Filtering**: Supports the same filtering parameters as the Query endpoint (GET /scan/v3/results).

**Sorting**: Supports sorting via the `sort` parameter. Results can be ordered by any CSV column.

**Columns**: The CSV columns can be customized using the optional `column_list` query parameter.
If not specified, defaults to: name, detections, scanned_on, policy_status, origin, threat_level.


Reference: https://hiddenlayer.ferndocs.com/api-reference/llm-proxy-api/reports/export-supply-chain-csv

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Servers

- `https://api.hiddenlayer.ai` (ProdUs, default)
- `https://api.eu.hiddenlayer.ai` (ProdEu)

## Request

### Query parameters

- `column_list` (string, optional) — Comma-separated list of columns to include in the CSV export. Allowed values: name, detections, scanned_on, policy_status, origin, region, provider, threat_level. If not specified, defaults to: name, detections, scanned_on, policy_status, origin, threat_level.
- `model_version_ids` (list of string, optional) — Filter by model version IDs (comma-separated)
- `model_ids` (list of string, optional) — Filter by model IDs (comma-separated)
- `start_time` (datetime, optional) — Filter scans with start time greater than or equal to this value
- `end_time` (datetime, optional) — Filter scans with start time less than or equal to this value
- `severity` (ScanV3ReportsSupplyChainCsvPostParametersSeverity, optional) — Filter by severity levels (comma-separated)
- `status` (list of string, optional) — Filter by scan status (comma-separated)
- `compliance_status` (list of enum, optional) — Filter by compliance status (comma-separated)
  - Allowed values: `COMPLIANT`, `NONCOMPLIANT`
- `request_source` (list of enum, optional) — Filter by request source (comma-separated)
  - Allowed values: `Hybrid Upload`, `API Upload`, `Integration`, `UI Upload`, `AI Asset Discovery`
- `scanner_version` (string, optional) — Filter by scanner version
- `detection_category` (string, optional) — Filter by detection category
- `model_name` (ScanV3ReportsSupplyChainCsvPostParametersModelName, optional) — Filter by model name (supports exact match or contains)
- `source` (ScanV3ReportsSupplyChainCsvPostParametersSource, optional) — Filter by model source
- `latest_per_model_version_only` (boolean, optional, default: false) — Only return latest scan result per model version
- `region` (string, optional) — Filter by asset region
- `provider` (string, optional) — Filter by model provider
- `limit` (integer, optional) — Maximum number of results to return
- `offset` (integer, optional) — Number of results to skip for pagination
- `sort` (list of string, optional, default: ["-start_time"]) — Sort results by specified field. Prefix with `-` for descending order, `+` or no prefix for ascending. Supported fields: name, detections, scanned_on, policy_status, origin, region, provider, threat_level, start_time, model_name, severity, status. Note: If multiple sort parameters are provided, only the first one will be applied.

## Response

### 202

CSV export initiated

- `report_id` (string, optional)

## Errors

### 400 Bad Request Error

Bad request - invalid parameters (columns, filters, or sort)

- `error` (string, optional)

### 422 Unprocessable Entity Error

Validation Error

- `loc` (list of ValidationErrorModelLocItems, required)
- `msg` (string, required)
- `type` (string, required)

## Types

### ScanV3ReportsSupplyChainCsvPostParametersSeverity

### ScanV3ReportsSupplyChainCsvPostParametersModelName

- `eq` (string, optional) — Exact match
- `contains` (string, optional) — Case-insensitive partial match

### ScanV3ReportsSupplyChainCsvPostParametersSource

- `eq` (enum, optional)
  - Allowed values: `adhoc`

### ValidationErrorModelLocItems

## Examples

**Response**

```json
{
  "report_id": "123e4567-e89b-12d3-a456-426614174000"
}
```

**SDK Code**

```python Export initiated successfully
import requests

url = "https://api.hiddenlayer.ai/scan/v3/reports/supply-chain/csv"

querystring = {"column_list":"","model_version_ids":"00fb9505-b9ac-4703-91a7-9d4859315a4b,0278fa73-4b08-47ca-bc23-33bc244719be","model_ids":"00fb9505-b9ac-4703-91a7-9d4859315a4b,2df09dc6-a0eb-4f67-9fe9-139ac3b75d11","start_time":"2025-05-27T00:00:00Z","end_time":"2025-05-27T23:59:59Z","severity":"critical","status":"done,failed","compliance_status":"COMPLIANT","request_source":"Hybrid Upload","scanner_version":"1.0.0","detection_category":"Embedded Payloads","model_name":"{\"eq\":\"tensorflow-model\"}","source":"{\"eq\":\"adhoc\"}","region":"us-east-1","provider":"aws","sort":"[\"name\"]"}

headers = {"Authorization": "Bearer <token>"}

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

print(response.json())
```

```javascript Export initiated successfully
const url = 'https://api.hiddenlayer.ai/scan/v3/reports/supply-chain/csv?column_list=&model_version_ids=00fb9505-b9ac-4703-91a7-9d4859315a4b%2C0278fa73-4b08-47ca-bc23-33bc244719be&model_ids=00fb9505-b9ac-4703-91a7-9d4859315a4b%2C2df09dc6-a0eb-4f67-9fe9-139ac3b75d11&start_time=2025-05-27T00%3A00%3A00Z&end_time=2025-05-27T23%3A59%3A59Z&severity=critical&status=done%2Cfailed&compliance_status=COMPLIANT&request_source=Hybrid+Upload&scanner_version=1.0.0&detection_category=Embedded+Payloads&model_name=%7B%22eq%22%3A%22tensorflow-model%22%7D&source=%7B%22eq%22%3A%22adhoc%22%7D&region=us-east-1&provider=aws&sort=%5B%22name%22%5D';
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};

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

```go Export initiated successfully
package main

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

func main() {

	url := "https://api.hiddenlayer.ai/scan/v3/reports/supply-chain/csv?column_list=&model_version_ids=00fb9505-b9ac-4703-91a7-9d4859315a4b%2C0278fa73-4b08-47ca-bc23-33bc244719be&model_ids=00fb9505-b9ac-4703-91a7-9d4859315a4b%2C2df09dc6-a0eb-4f67-9fe9-139ac3b75d11&start_time=2025-05-27T00%3A00%3A00Z&end_time=2025-05-27T23%3A59%3A59Z&severity=critical&status=done%2Cfailed&compliance_status=COMPLIANT&request_source=Hybrid+Upload&scanner_version=1.0.0&detection_category=Embedded+Payloads&model_name=%7B%22eq%22%3A%22tensorflow-model%22%7D&source=%7B%22eq%22%3A%22adhoc%22%7D&region=us-east-1&provider=aws&sort=%5B%22name%22%5D"

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

	req.Header.Add("Authorization", "Bearer <token>")

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

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

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

}
```

```ruby Export initiated successfully
require 'uri'
require 'net/http'

url = URI("https://api.hiddenlayer.ai/scan/v3/reports/supply-chain/csv?column_list=&model_version_ids=00fb9505-b9ac-4703-91a7-9d4859315a4b%2C0278fa73-4b08-47ca-bc23-33bc244719be&model_ids=00fb9505-b9ac-4703-91a7-9d4859315a4b%2C2df09dc6-a0eb-4f67-9fe9-139ac3b75d11&start_time=2025-05-27T00%3A00%3A00Z&end_time=2025-05-27T23%3A59%3A59Z&severity=critical&status=done%2Cfailed&compliance_status=COMPLIANT&request_source=Hybrid+Upload&scanner_version=1.0.0&detection_category=Embedded+Payloads&model_name=%7B%22eq%22%3A%22tensorflow-model%22%7D&source=%7B%22eq%22%3A%22adhoc%22%7D&region=us-east-1&provider=aws&sort=%5B%22name%22%5D")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'

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

```java Export initiated successfully
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.hiddenlayer.ai/scan/v3/reports/supply-chain/csv?column_list=&model_version_ids=00fb9505-b9ac-4703-91a7-9d4859315a4b%2C0278fa73-4b08-47ca-bc23-33bc244719be&model_ids=00fb9505-b9ac-4703-91a7-9d4859315a4b%2C2df09dc6-a0eb-4f67-9fe9-139ac3b75d11&start_time=2025-05-27T00%3A00%3A00Z&end_time=2025-05-27T23%3A59%3A59Z&severity=critical&status=done%2Cfailed&compliance_status=COMPLIANT&request_source=Hybrid+Upload&scanner_version=1.0.0&detection_category=Embedded+Payloads&model_name=%7B%22eq%22%3A%22tensorflow-model%22%7D&source=%7B%22eq%22%3A%22adhoc%22%7D&region=us-east-1&provider=aws&sort=%5B%22name%22%5D")
  .header("Authorization", "Bearer <token>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.hiddenlayer.ai/scan/v3/reports/supply-chain/csv?column_list=&model_version_ids=00fb9505-b9ac-4703-91a7-9d4859315a4b%2C0278fa73-4b08-47ca-bc23-33bc244719be&model_ids=00fb9505-b9ac-4703-91a7-9d4859315a4b%2C2df09dc6-a0eb-4f67-9fe9-139ac3b75d11&start_time=2025-05-27T00%3A00%3A00Z&end_time=2025-05-27T23%3A59%3A59Z&severity=critical&status=done%2Cfailed&compliance_status=COMPLIANT&request_source=Hybrid+Upload&scanner_version=1.0.0&detection_category=Embedded+Payloads&model_name=%7B%22eq%22%3A%22tensorflow-model%22%7D&source=%7B%22eq%22%3A%22adhoc%22%7D&region=us-east-1&provider=aws&sort=%5B%22name%22%5D', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp Export initiated successfully
using RestSharp;

var client = new RestClient("https://api.hiddenlayer.ai/scan/v3/reports/supply-chain/csv?column_list=&model_version_ids=00fb9505-b9ac-4703-91a7-9d4859315a4b%2C0278fa73-4b08-47ca-bc23-33bc244719be&model_ids=00fb9505-b9ac-4703-91a7-9d4859315a4b%2C2df09dc6-a0eb-4f67-9fe9-139ac3b75d11&start_time=2025-05-27T00%3A00%3A00Z&end_time=2025-05-27T23%3A59%3A59Z&severity=critical&status=done%2Cfailed&compliance_status=COMPLIANT&request_source=Hybrid+Upload&scanner_version=1.0.0&detection_category=Embedded+Payloads&model_name=%7B%22eq%22%3A%22tensorflow-model%22%7D&source=%7B%22eq%22%3A%22adhoc%22%7D&region=us-east-1&provider=aws&sort=%5B%22name%22%5D");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift Export initiated successfully
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.hiddenlayer.ai/scan/v3/reports/supply-chain/csv?column_list=&model_version_ids=00fb9505-b9ac-4703-91a7-9d4859315a4b%2C0278fa73-4b08-47ca-bc23-33bc244719be&model_ids=00fb9505-b9ac-4703-91a7-9d4859315a4b%2C2df09dc6-a0eb-4f67-9fe9-139ac3b75d11&start_time=2025-05-27T00%3A00%3A00Z&end_time=2025-05-27T23%3A59%3A59Z&severity=critical&status=done%2Cfailed&compliance_status=COMPLIANT&request_source=Hybrid+Upload&scanner_version=1.0.0&detection_category=Embedded+Payloads&model_name=%7B%22eq%22%3A%22tensorflow-model%22%7D&source=%7B%22eq%22%3A%22adhoc%22%7D&region=us-east-1&provider=aws&sort=%5B%22name%22%5D")! 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()
```