Get token
curl --request GET \
--url https://public-api-v2.bags.fm/api/v1/evm/rh/token \
--header 'x-api-key: <api-key>'import requests
url = "https://public-api-v2.bags.fm/api/v1/evm/rh/token"
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://public-api-v2.bags.fm/api/v1/evm/rh/token', 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://public-api-v2.bags.fm/api/v1/evm/rh/token",
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://public-api-v2.bags.fm/api/v1/evm/rh/token"
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://public-api-v2.bags.fm/api/v1/evm/rh/token")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api-v2.bags.fm/api/v1/evm/rh/token")
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{
"success": true,
"response": {
"token": {
"address": "<string>",
"name": "<string>",
"symbol": "<string>",
"metadataURI": "<string>",
"metadata": {
"image": "<string>",
"description": "<string>"
},
"curve": "<string>",
"feeShare": "<string>",
"poolId": "<string>",
"creator": "<string>",
"partner": "<string>",
"partnerFeeBps": 123,
"createdAtBlock": 123,
"createdAtTimestamp": 123,
"txHash": "<string>",
"migrated": true,
"migratedAtBlock": 123,
"migratedAtTimestamp": 123
},
"state": {
"exists": true,
"migrated": true,
"curve": "<string>",
"feeShare": "<string>",
"poolId": "<string>",
"thresholdQuoteWei": "<string>",
"realQuoteReservesWei": "<string>",
"realTokenReservesWei": "<string>",
"virtualTokenReservesWei": "<string>",
"virtualQuoteReservesWei": "<string>",
"priceEthPerToken": "<string>",
"bondingProgressPct": 123,
"totalRaisedWei": "<string>"
}
}
}{
"success": false,
"response": "<string>"
}{
"success": false,
"error": "<string>"
}{
"success": false,
"response": "<string>"
}{
"success": false,
"response": "<string>"
}Robinhood Chain
Get Robinhood Token
Get a single Bags V2 token on Robinhood Chain: indexed data plus live on-chain state.
Returns 404 when the address is not a V2 token — use this as the V1-vs-V2 routing signal. Freshly launched tokens can 404 for a few seconds while the subgraph indexes, so launch flows should route explicitly rather than relying on this endpoint immediately after launch.
GET
/
evm
/
rh
/
token
Get token
curl --request GET \
--url https://public-api-v2.bags.fm/api/v1/evm/rh/token \
--header 'x-api-key: <api-key>'import requests
url = "https://public-api-v2.bags.fm/api/v1/evm/rh/token"
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://public-api-v2.bags.fm/api/v1/evm/rh/token', 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://public-api-v2.bags.fm/api/v1/evm/rh/token",
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://public-api-v2.bags.fm/api/v1/evm/rh/token"
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://public-api-v2.bags.fm/api/v1/evm/rh/token")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api-v2.bags.fm/api/v1/evm/rh/token")
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{
"success": true,
"response": {
"token": {
"address": "<string>",
"name": "<string>",
"symbol": "<string>",
"metadataURI": "<string>",
"metadata": {
"image": "<string>",
"description": "<string>"
},
"curve": "<string>",
"feeShare": "<string>",
"poolId": "<string>",
"creator": "<string>",
"partner": "<string>",
"partnerFeeBps": 123,
"createdAtBlock": 123,
"createdAtTimestamp": 123,
"txHash": "<string>",
"migrated": true,
"migratedAtBlock": 123,
"migratedAtTimestamp": 123
},
"state": {
"exists": true,
"migrated": true,
"curve": "<string>",
"feeShare": "<string>",
"poolId": "<string>",
"thresholdQuoteWei": "<string>",
"realQuoteReservesWei": "<string>",
"realTokenReservesWei": "<string>",
"virtualTokenReservesWei": "<string>",
"virtualQuoteReservesWei": "<string>",
"priceEthPerToken": "<string>",
"bondingProgressPct": 123,
"totalRaisedWei": "<string>"
}
}
}{
"success": false,
"response": "<string>"
}{
"success": false,
"error": "<string>"
}{
"success": false,
"response": "<string>"
}{
"success": false,
"response": "<string>"
}A
404 means the address is not a Bags V2 token — use this as the V1-vs-V2 routing signal. Freshly launched tokens can 404 for a few seconds while the subgraph indexes, so route launch flows explicitly instead of relying on this endpoint immediately after launch.Authorizations
API key authentication. Provide your API key as the header value.
Query Parameters
Token address. Accepts any casing; normalized to EIP-55 checksum form.
⌘I
