curl --request GET \
--url https://api.coinversa.ai/api/public/v1/builders/{builder}/lifecycle \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.coinversa.ai/api/public/v1/builders/{builder}/lifecycle"
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://api.coinversa.ai/api/public/v1/builders/{builder}/lifecycle', 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.coinversa.ai/api/public/v1/builders/{builder}/lifecycle",
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://api.coinversa.ai/api/public/v1/builders/{builder}/lifecycle"
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://api.coinversa.ai/api/public/v1/builders/{builder}/lifecycle")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coinversa.ai/api/public/v1/builders/{builder}/lifecycle")
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{
"active": {
"share": 123,
"users": 123
},
"builder": "<string>",
"churn": 123,
"competitiveLoss": 123,
"competitiveLossFeesUsd": 123,
"cooling": {
"share": 123,
"users": 123
},
"dataNotes": "<string>",
"dormant": {
"share": 123,
"users": 123
},
"movedOn": {
"share": 123,
"users": 123
},
"switched": {
"share": 123,
"users": 123
},
"totalUsers": 123,
"trueRetention": 123,
"$schema": "https://api.coinversa.ai/schemas/BuilderLifecycleBody.json",
"builderName": "<string>",
"verified": {
"coverage": {
"attributed_fees_usd": 123,
"computed_at": "<string>",
"ledger_fees_usd": 123,
"ratio": 123,
"window_end": "<string>",
"window_start": "<string>"
},
"ledger_block": 123,
"ledger_chain_time": "<string>"
}
}{
"$schema": "https://api.coinversa.ai/schemas/APIError.json",
"code": "<string>",
"current_tier": "<string>",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"required_tier": "<string>",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example",
"upgrade_url": "<string>"
}{
"$schema": "https://api.coinversa.ai/schemas/APIError.json",
"code": "<string>",
"current_tier": "<string>",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"required_tier": "<string>",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example",
"upgrade_url": "<string>"
}{
"$schema": "https://api.coinversa.ai/schemas/APIError.json",
"code": "<string>",
"current_tier": "<string>",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"required_tier": "<string>",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example",
"upgrade_url": "<string>"
}{
"$schema": "https://api.coinversa.ai/schemas/APIError.json",
"code": "<string>",
"current_tier": "<string>",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"required_tier": "<string>",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example",
"upgrade_url": "<string>"
}{
"$schema": "https://api.coinversa.ai/schemas/APIError.json",
"code": "<string>",
"current_tier": "<string>",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"required_tier": "<string>",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example",
"upgrade_url": "<string>"
}{
"$schema": "https://api.coinversa.ai/schemas/APIError.json",
"code": "<string>",
"current_tier": "<string>",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"required_tier": "<string>",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example",
"upgrade_url": "<string>"
}Builder user lifecycle
Every wallet that ever traded via this builder, partitioned into mutually exclusive stages by recent activity: active (attributed fill within 7d), cooling (30d), switched (no fill via this builder in 30d but at least one via a DIFFERENT builder — detectable only with all-builder attribution), dormant (90d), and movedOn. Headline ratios: trueRetention, churn, and competitiveLoss (switched share) with competitiveLossFeesUsd — builder fees those switched wallets paid to other builders in the last 30d (null, meaning unknown and never zero, when the fee probe exceeds its budget — the buckets and ratios always serve; see the response’s dataNotes).
curl --request GET \
--url https://api.coinversa.ai/api/public/v1/builders/{builder}/lifecycle \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.coinversa.ai/api/public/v1/builders/{builder}/lifecycle"
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://api.coinversa.ai/api/public/v1/builders/{builder}/lifecycle', 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.coinversa.ai/api/public/v1/builders/{builder}/lifecycle",
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://api.coinversa.ai/api/public/v1/builders/{builder}/lifecycle"
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://api.coinversa.ai/api/public/v1/builders/{builder}/lifecycle")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coinversa.ai/api/public/v1/builders/{builder}/lifecycle")
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{
"active": {
"share": 123,
"users": 123
},
"builder": "<string>",
"churn": 123,
"competitiveLoss": 123,
"competitiveLossFeesUsd": 123,
"cooling": {
"share": 123,
"users": 123
},
"dataNotes": "<string>",
"dormant": {
"share": 123,
"users": 123
},
"movedOn": {
"share": 123,
"users": 123
},
"switched": {
"share": 123,
"users": 123
},
"totalUsers": 123,
"trueRetention": 123,
"$schema": "https://api.coinversa.ai/schemas/BuilderLifecycleBody.json",
"builderName": "<string>",
"verified": {
"coverage": {
"attributed_fees_usd": 123,
"computed_at": "<string>",
"ledger_fees_usd": 123,
"ratio": 123,
"window_end": "<string>",
"window_start": "<string>"
},
"ledger_block": 123,
"ledger_chain_time": "<string>"
}
}{
"$schema": "https://api.coinversa.ai/schemas/APIError.json",
"code": "<string>",
"current_tier": "<string>",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"required_tier": "<string>",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example",
"upgrade_url": "<string>"
}{
"$schema": "https://api.coinversa.ai/schemas/APIError.json",
"code": "<string>",
"current_tier": "<string>",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"required_tier": "<string>",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example",
"upgrade_url": "<string>"
}{
"$schema": "https://api.coinversa.ai/schemas/APIError.json",
"code": "<string>",
"current_tier": "<string>",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"required_tier": "<string>",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example",
"upgrade_url": "<string>"
}{
"$schema": "https://api.coinversa.ai/schemas/APIError.json",
"code": "<string>",
"current_tier": "<string>",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"required_tier": "<string>",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example",
"upgrade_url": "<string>"
}{
"$schema": "https://api.coinversa.ai/schemas/APIError.json",
"code": "<string>",
"current_tier": "<string>",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"required_tier": "<string>",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example",
"upgrade_url": "<string>"
}{
"$schema": "https://api.coinversa.ai/schemas/APIError.json",
"code": "<string>",
"current_tier": "<string>",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"required_tier": "<string>",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example",
"upgrade_url": "<string>"
}Authorizations
Get one at https://coinversa.ai/developers
Path Parameters
Builder address (0x-hex)
Response
OK
Definition: last attributed fill via THIS builder within 7 days
Show child attributes
Show child attributes
Definition: (dormant + movedOn) / totalUsers — the share that stopped filling via this builder AND shows no attributed fill via any other builder in the last 30 days (left the attributed builder ecosystem, not poached)
Definition: switched / totalUsers — the share that stopped filling via this builder within the last 30 days while filling via a DIFFERENT builder in those same 30 days. Requires cross-builder fill attribution; interfaces without it necessarily report 0 here
Builder fees the switched wallets paid to OTHER builders over the last 30 days — revenue measurably lost to competitors; null when the fee probe exceeded its budget (see dataNotes) — null means unknown, never zero
Definition: last attributed fill via THIS builder within 30 days, but more than 7 days ago
Show child attributes
Show child attributes
Definition: no attributed fill via ANY builder within 30 days, and the last fill via this builder was within 90 days
Show child attributes
Show child attributes
Definition: no attributed fill via any builder within 30 days, and no attributed fill via this builder within 90 days (wallets whose orders never filled at all land here too)
Show child attributes
Show child attributes
Definition: NO attributed fill via this builder within 30 days BUT >= 1 attributed fill via a DIFFERENT builder within 30 days — wallets demonstrably still trading builder flow, just not here. The other-builder fill's order is recovered up to 90 days before the 30-day window; fills of orders resting longer are missed (see dataNotes)
Show child attributes
Show child attributes
Every wallet that ever placed a builder-fee order via this builder, over its entire history (orders plane — includes wallets whose orders never filled; see dataNotes)
Definition: (active + cooling) / totalUsers — the share of all historical order-placing users that still filled via this builder within the last 30 days
A URL to the JSON Schema for this object.
"https://api.coinversa.ai/schemas/BuilderLifecycleBody.json"
Known display name for the builder; omitted if unknown
Show child attributes
Show child attributes

