Get a project's Etherscan card
curl --request GET \
--url https://api.trustblock.run/v1/project/etherscan-card \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.trustblock.run/v1/project/etherscan-card"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.trustblock.run/v1/project/etherscan-card', 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://api.trustblock.run/v1/project/etherscan-card",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://api.trustblock.run/v1/project/etherscan-card"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.trustblock.run/v1/project/etherscan-card")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.trustblock.run/v1/project/etherscan-card")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"isFound": true,
"imageUrl": "<string>",
"centerText": "<string>",
"statusColor": "#F08D3C",
"extra": {
"requestId": "<string>"
},
"status": true,
"contractLine": "<string>",
"topLeftText": "<string>",
"topRightText": "<string>",
"centerText2": "<string>",
"centerText3": "<string>",
"iconUrl": "<string>",
"url": "<string>",
"isAIScan": true
}{
"message": "Not found.",
"extra": {
"requestId": "<string>"
},
"code": "<string>",
"diagnoses": [
{}
]
}{
"message": "Not found.",
"extra": {
"requestId": "<string>"
},
"code": "<string>",
"diagnoses": [
{}
]
}{
"message": "Not found.",
"extra": {
"requestId": "<string>"
},
"code": "<string>",
"diagnoses": [
{}
]
}Endpoints
Get a project's Etherscan card
Trustblock API route to get a project’s Etherscan card
GET
/
v1
/
project
/
etherscan-card
Get a project's Etherscan card
curl --request GET \
--url https://api.trustblock.run/v1/project/etherscan-card \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.trustblock.run/v1/project/etherscan-card"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.trustblock.run/v1/project/etherscan-card', 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://api.trustblock.run/v1/project/etherscan-card",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://api.trustblock.run/v1/project/etherscan-card"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.trustblock.run/v1/project/etherscan-card")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.trustblock.run/v1/project/etherscan-card")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"isFound": true,
"imageUrl": "<string>",
"centerText": "<string>",
"statusColor": "#F08D3C",
"extra": {
"requestId": "<string>"
},
"status": true,
"contractLine": "<string>",
"topLeftText": "<string>",
"topRightText": "<string>",
"centerText2": "<string>",
"centerText3": "<string>",
"iconUrl": "<string>",
"url": "<string>",
"isAIScan": true
}{
"message": "Not found.",
"extra": {
"requestId": "<string>"
},
"code": "<string>",
"diagnoses": [
{}
]
}{
"message": "Not found.",
"extra": {
"requestId": "<string>"
},
"code": "<string>",
"diagnoses": [
{}
]
}{
"message": "Not found.",
"extra": {
"requestId": "<string>"
},
"code": "<string>",
"diagnoses": [
{}
]
}Authorizations
Authorization: Bearer <key>.
For the project and card routes, the key is an API key belonging to an onboarded integrator or
to an active audit provider. The publishing routes accept only an audit provider's credential.
Sending no Authorization header produces 401; sending one that is not recognised produces
403.
Query Parameters
Response
A card, found or not found.
Present only when the request named a contract (chain + address) and an audit's own scope names that address: "This address was in the scope of the Hacken audit of 9 Sep 2026", or "This address was in the scope of 2 audits; latest: Hacken, 8 May 2026". Absent otherwise, never null.