Get project forensic analysis (v2)
curl --request GET \
--url https://vcm-fyi-api.fly.dev/v1/forensics/v2/{project_id} \
--header 'X-API-KEY: <api-key>'import requests
url = "https://vcm-fyi-api.fly.dev/v1/forensics/v2/{project_id}"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://vcm-fyi-api.fly.dev/v1/forensics/v2/{project_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://vcm-fyi-api.fly.dev/v1/forensics/v2/{project_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://vcm-fyi-api.fly.dev/v1/forensics/v2/{project_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://vcm-fyi-api.fly.dev/v1/forensics/v2/{project_id}")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://vcm-fyi-api.fly.dev/v1/forensics/v2/{project_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"project_id": "<string>",
"entries": [
{
"id": 123,
"project_id": "<string>",
"entry_hash": "<string>",
"date": "<string>",
"category": "<string>",
"source": "<string>",
"key_event": "<string>",
"market_impact": "<string>",
"url": "<string>",
"first_seen_date": "2023-12-25",
"first_seen_week": 123,
"first_seen_year": 123,
"is_new_this_week": false,
"project_name": "<string>",
"project_country": "<string>",
"project_proponent": "<string>",
"project_registry": "<string>"
}
],
"memo": {
"project_id": "<string>",
"price_narrative": "<string>",
"primary_risk": "<string>",
"value_proposition": "<string>",
"last_updated": "2023-12-25",
"total_entries": 123,
"future_issuance_assessment": "<string>",
"project_operational_status": "<string>",
"development_status": "<string>",
"estimated_issuance_timeline": "<string>",
"methodology_risk": "<string>",
"quality_tier_estimate": "<string>",
"proponent_assessment": "<string>",
"deal_flow_signals": "<string>",
"investment_thesis": "<string>",
"scan_type": "<string>"
},
"stats": {
"total_entries": 123,
"new_this_week": 123,
"last_scan_date": "2023-12-25",
"week_number": 123,
"year": 123
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Forensics
Get project forensic analysis (v2)
Retrieve the full AI forensic analysis for a specific project, including all detected news entries, the current risk memo, and scan statistics.
Response structure:
- entries: All news events detected for this project, sorted by first seen date (most recent first). Each entry includes category, source, key event summary, market impact, URL, and whether it was new this week.
- memo: The current AI-generated risk assessment including price narrative, primary risk, value proposition, operational status, methodology risk, quality tier estimate, deal flow signals, and investment thesis.
- stats: Total entry count, new entries this week, last scan date, week/year.
Falls back to the v1 legacy table if no v2 data exists for the project. Returns 404 if no forensic data exists at all.
GET
/
v1
/
forensics
/
v2
/
{project_id}
Get project forensic analysis (v2)
curl --request GET \
--url https://vcm-fyi-api.fly.dev/v1/forensics/v2/{project_id} \
--header 'X-API-KEY: <api-key>'import requests
url = "https://vcm-fyi-api.fly.dev/v1/forensics/v2/{project_id}"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://vcm-fyi-api.fly.dev/v1/forensics/v2/{project_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://vcm-fyi-api.fly.dev/v1/forensics/v2/{project_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://vcm-fyi-api.fly.dev/v1/forensics/v2/{project_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://vcm-fyi-api.fly.dev/v1/forensics/v2/{project_id}")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://vcm-fyi-api.fly.dev/v1/forensics/v2/{project_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"project_id": "<string>",
"entries": [
{
"id": 123,
"project_id": "<string>",
"entry_hash": "<string>",
"date": "<string>",
"category": "<string>",
"source": "<string>",
"key_event": "<string>",
"market_impact": "<string>",
"url": "<string>",
"first_seen_date": "2023-12-25",
"first_seen_week": 123,
"first_seen_year": 123,
"is_new_this_week": false,
"project_name": "<string>",
"project_country": "<string>",
"project_proponent": "<string>",
"project_registry": "<string>"
}
],
"memo": {
"project_id": "<string>",
"price_narrative": "<string>",
"primary_risk": "<string>",
"value_proposition": "<string>",
"last_updated": "2023-12-25",
"total_entries": 123,
"future_issuance_assessment": "<string>",
"project_operational_status": "<string>",
"development_status": "<string>",
"estimated_issuance_timeline": "<string>",
"methodology_risk": "<string>",
"quality_tier_estimate": "<string>",
"proponent_assessment": "<string>",
"deal_flow_signals": "<string>",
"investment_thesis": "<string>",
"scan_type": "<string>"
},
"stats": {
"total_entries": 123,
"new_this_week": 123,
"last_scan_date": "2023-12-25",
"week_number": 123,
"year": 123
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Path Parameters
Response
Complete forensic analysis with entries, memo, and scan statistics
Full forensic news response with entries, memo, and stats.
Show child attributes
Show child attributes
Response model for project memo.
Show child attributes
Show child attributes
Stats about forensic news for a project.
Show child attributes
Show child attributes