curl --request GET \
--url https://scienter.xyz/api/v1/evm/deployer/{chain}/{address} \
--header 'Authorization: Bearer <token>'import requests
url = "https://scienter.xyz/api/v1/evm/deployer/{chain}/{address}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://scienter.xyz/api/v1/evm/deployer/{chain}/{address}', 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://scienter.xyz/api/v1/evm/deployer/{chain}/{address}",
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://scienter.xyz/api/v1/evm/deployer/{chain}/{address}"
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://scienter.xyz/api/v1/evm/deployer/{chain}/{address}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scienter.xyz/api/v1/evm/deployer/{chain}/{address}")
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{
"state": "ok",
"subject": "<string>",
"data": {
"address": "<string>",
"chain": "<string>",
"state": "all_died",
"calibrated": true,
"listed_launches": 123,
"died": 123,
"survived": 123,
"never_listed": 123,
"death_rate": 123,
"launches": [
{
"address": "<string>",
"outcome": "live",
"created_at": 123,
"observed_age_days": 123,
"liquidity_usd": 123,
"volume_usd_24h": 123,
"transfers_observed": 123,
"transfers_truncated": true,
"via": "<string>"
}
],
"finding": "<string>",
"coverage": {
"captured_at": 123,
"direct_creations": 123,
"factories_walked": 123,
"factory_depth": 123,
"truncated": true,
"truncated_factories": [
"<string>"
],
"contracts_examined": 123,
"skipped": [
{
"address": "<string>",
"reason": "not_an_erc20"
}
],
"unchecked": 123,
"providers": [
"<string>"
]
},
"caveat": "<string>"
},
"reason": "<string>",
"sources": [
{}
],
"as_of": 123
}What the wallet that deployed an EVM token did before
The ERC-20s this address deployed, and what a venue says about each of them now.
This is not the Solana deployer screen for EVM. That route returns flagged, backed by a rule scored on a held-out window and again prospectively. Nothing here has been scored: there is no EVM holdout and no EVM prospective arm, so there is no flagged field and every payload carries calibrated: false. A record saying every listed launch is illiquid is a statement about those contracts, not a prediction about the next one.
Four answers. all_died means every listed launch is below the liquidity a buyer could exit through. mixed means at least one is above it. no_listed_launch means it deployed ERC-20s that no venue has ever listed. no_record is returned as insufficient_evidence and is not clean — it means this walk found nothing, and a wallet launching through a factory it did not itself deploy reads that way.
never_listed tokens are reported separately and are not counted as deaths. Without a birth observation, a token no venue lists is ambiguous between one that died and one that never traded at all; each launch carries its observed transfer count so a reader can tell which.
Only ethereum is served. Etherscan v2 refuses six of the engine’s ten chains on a free key, including Base; those answer not_supported naming the refusal rather than returning an empty record.
Method and limits: https://docs.scienter.xyz/methodology/evm-deployer-records
curl --request GET \
--url https://scienter.xyz/api/v1/evm/deployer/{chain}/{address} \
--header 'Authorization: Bearer <token>'import requests
url = "https://scienter.xyz/api/v1/evm/deployer/{chain}/{address}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://scienter.xyz/api/v1/evm/deployer/{chain}/{address}', 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://scienter.xyz/api/v1/evm/deployer/{chain}/{address}",
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://scienter.xyz/api/v1/evm/deployer/{chain}/{address}"
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://scienter.xyz/api/v1/evm/deployer/{chain}/{address}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scienter.xyz/api/v1/evm/deployer/{chain}/{address}")
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{
"state": "ok",
"subject": "<string>",
"data": {
"address": "<string>",
"chain": "<string>",
"state": "all_died",
"calibrated": true,
"listed_launches": 123,
"died": 123,
"survived": 123,
"never_listed": 123,
"death_rate": 123,
"launches": [
{
"address": "<string>",
"outcome": "live",
"created_at": 123,
"observed_age_days": 123,
"liquidity_usd": 123,
"volume_usd_24h": 123,
"transfers_observed": 123,
"transfers_truncated": true,
"via": "<string>"
}
],
"finding": "<string>",
"coverage": {
"captured_at": 123,
"direct_creations": 123,
"factories_walked": 123,
"factory_depth": 123,
"truncated": true,
"truncated_factories": [
"<string>"
],
"contracts_examined": 123,
"skipped": [
{
"address": "<string>",
"reason": "not_an_erc20"
}
],
"unchecked": 123,
"providers": [
"<string>"
]
},
"caveat": "<string>"
},
"reason": "<string>",
"sources": [
{}
],
"as_of": 123
}Authorizations
An sc_ key from https://scienter.xyz/settings/api, sent as Authorization: Bearer sc_.... The same key is accepted in the x-scienter-membership header. Prefer the header over any query form: a credential in a URL reaches access logs, proxies and browser history.
Path Parameters
The chain to walk. Only ethereum is served; every other value answers not_supported with the reason.
ethereum A 20-byte hex EVM address, 0x-prefixed. Case is not significant and is normalised.
^0x[0-9a-fA-F]{40}$Response
ok with the deployer record; insufficient_evidence when nothing was found; not_supported for a chain we cannot read; not_deployed when the chain walk could not run.