curl --request GET \
--url https://explorer-explorer.up.railway.app/tx/{hash}import requests
url = "https://explorer-explorer.up.railway.app/tx/{hash}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://explorer-explorer.up.railway.app/tx/{hash}', 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://explorer-explorer.up.railway.app/tx/{hash}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://explorer-explorer.up.railway.app/tx/{hash}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://explorer-explorer.up.railway.app/tx/{hash}")
.asString();require 'uri'
require 'net/http'
url = URI("https://explorer-explorer.up.railway.app/tx/{hash}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"network": "stellar:testnet",
"epoch": "<string>",
"ledger": 123,
"txHash": "c827992c48bfe911a9b68abcef62e135b2b9555e5211f5c0ea0cdecb3aa8d558",
"buyer": "<string>",
"seller": "<string>",
"amount": "3500000",
"amountDecimal": "0.35",
"assetContract": "CBIELTK6YBZJU5UP2WWQEUCYKLPU6AUNZ2BQ4WWFEIE3USCIHMXQDAMA",
"txSource": "<string>",
"facilitator": {
"id": "rail402",
"displayName": "Rail402"
},
"closedAt": "2023-11-07T05:31:56Z",
"payments": [
{
"network": "stellar:testnet",
"epoch": "<string>",
"ledger": 123,
"txHash": "c827992c48bfe911a9b68abcef62e135b2b9555e5211f5c0ea0cdecb3aa8d558",
"buyer": "<string>",
"seller": "<string>",
"amount": "3500000",
"amountDecimal": "0.35",
"assetContract": "CBIELTK6YBZJU5UP2WWQEUCYKLPU6AUNZ2BQ4WWFEIE3USCIHMXQDAMA",
"txSource": "<string>",
"facilitator": {
"id": "rail402",
"displayName": "Rail402"
},
"closedAt": "2023-11-07T05:31:56Z",
"ceiling": "10000000",
"ceilingDecimal": "1",
"asset": "USDC:GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5",
"assetCode": "USDC",
"feeSource": "<string>",
"feeChargedStroops": "23086",
"sigExpirationLedger": 123,
"memo": "<string>",
"muxedId": "<string>",
"serviceName": "<string>",
"resource": "<string>"
}
],
"raw": {},
"ceiling": "10000000",
"ceilingDecimal": "1",
"asset": "USDC:GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5",
"assetCode": "USDC",
"feeSource": "<string>",
"feeChargedStroops": "23086",
"sigExpirationLedger": 123,
"memo": "<string>",
"muxedId": "<string>",
"serviceName": "<string>",
"resource": "<string>"
}{
"code": "explorer_invalid_query",
"reason": "Query parameter \"scheme\" must be one of exact, upto.",
"retryable": false,
"details": {
"parameter": "scheme",
"value": "bogus"
}
}{
"code": "explorer_tx_not_found",
"reason": "No ingested payment matches this transaction hash. Either it is not an x402-shaped settlement, it predates ingestion, or it has not been observed yet.",
"retryable": true,
"details": {
"hash": "0000000000000000000000000000000000000000000000000000000000000000"
}
}One payment with its raw on-chain transaction
The same projection as /feed plus raw — the complete Soroban getTransaction JSON
(envelope, auth entries, events) the classification was made from, so every claim is
independently checkable against the ledger.
curl --request GET \
--url https://explorer-explorer.up.railway.app/tx/{hash}import requests
url = "https://explorer-explorer.up.railway.app/tx/{hash}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://explorer-explorer.up.railway.app/tx/{hash}', 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://explorer-explorer.up.railway.app/tx/{hash}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://explorer-explorer.up.railway.app/tx/{hash}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://explorer-explorer.up.railway.app/tx/{hash}")
.asString();require 'uri'
require 'net/http'
url = URI("https://explorer-explorer.up.railway.app/tx/{hash}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"network": "stellar:testnet",
"epoch": "<string>",
"ledger": 123,
"txHash": "c827992c48bfe911a9b68abcef62e135b2b9555e5211f5c0ea0cdecb3aa8d558",
"buyer": "<string>",
"seller": "<string>",
"amount": "3500000",
"amountDecimal": "0.35",
"assetContract": "CBIELTK6YBZJU5UP2WWQEUCYKLPU6AUNZ2BQ4WWFEIE3USCIHMXQDAMA",
"txSource": "<string>",
"facilitator": {
"id": "rail402",
"displayName": "Rail402"
},
"closedAt": "2023-11-07T05:31:56Z",
"payments": [
{
"network": "stellar:testnet",
"epoch": "<string>",
"ledger": 123,
"txHash": "c827992c48bfe911a9b68abcef62e135b2b9555e5211f5c0ea0cdecb3aa8d558",
"buyer": "<string>",
"seller": "<string>",
"amount": "3500000",
"amountDecimal": "0.35",
"assetContract": "CBIELTK6YBZJU5UP2WWQEUCYKLPU6AUNZ2BQ4WWFEIE3USCIHMXQDAMA",
"txSource": "<string>",
"facilitator": {
"id": "rail402",
"displayName": "Rail402"
},
"closedAt": "2023-11-07T05:31:56Z",
"ceiling": "10000000",
"ceilingDecimal": "1",
"asset": "USDC:GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5",
"assetCode": "USDC",
"feeSource": "<string>",
"feeChargedStroops": "23086",
"sigExpirationLedger": 123,
"memo": "<string>",
"muxedId": "<string>",
"serviceName": "<string>",
"resource": "<string>"
}
],
"raw": {},
"ceiling": "10000000",
"ceilingDecimal": "1",
"asset": "USDC:GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5",
"assetCode": "USDC",
"feeSource": "<string>",
"feeChargedStroops": "23086",
"sigExpirationLedger": 123,
"memo": "<string>",
"muxedId": "<string>",
"serviceName": "<string>",
"resource": "<string>"
}{
"code": "explorer_invalid_query",
"reason": "Query parameter \"scheme\" must be one of exact, upto.",
"retryable": false,
"details": {
"parameter": "scheme",
"value": "bogus"
}
}{
"code": "explorer_tx_not_found",
"reason": "No ingested payment matches this transaction hash. Either it is not an x402-shaped settlement, it predates ingestion, or it has not been observed yet.",
"retryable": true,
"details": {
"hash": "0000000000000000000000000000000000000000000000000000000000000000"
}
}Path Parameters
^[0-9a-fA-F]{64}$Query Parameters
Disambiguates when the same hash exists on several observed networks
Response
Payment detail
CAIP-2 network id
"stellar:testnet"
Chain-epoch discriminator. Testnet resets restart ledger numbering; rows never join across epochs. Treat (network, epoch, txHash) as the unique key.
"c827992c48bfe911a9b68abcef62e135b2b9555e5211f5c0ea0cdecb3aa8d558"
exact, upto The paying account (G… classic or C… smart contract account)
The payTo address that received the payment
Stroop-scale integer string of what actually moved. "0" is legal (upto nonce burn).
"3500000"
7-decimal display form. Never do arithmetic on this.
"0.35"
The SAC (token contract) the transfer happened on
"CBIELTK6YBZJU5UP2WWQEUCYKLPU6AUNZ2BQ4WWFEIE3USCIHMXQDAMA"
The account that submitted the transaction (facilitator signer/channel)
The attributed facilitator, or null when unknown (confidence x402-shaped)
Show child attributes
Show child attributes
rail402, verified-facilitator, x402-shaped Ledger close time
Every payment settled in this transaction. A transaction can settle several ops; the top-level fields mirror the first op (so a single-payment tx reads as one Payment), and this array holds them all.
Show child attributes
Show child attributes
The complete Soroban getTransaction JSON (envelope, auth entries, events) this classification was made from — every claim is independently checkable.
upto only — the client-authorized maximum
"10000000"
"1"
SEP-11 asset string ("native" or "CODE:ISSUER"). Absent on Horizon-backfilled rows.
"USDC:GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5"
Display code derived from asset (native → XLM). Absent when asset is.
"USDC"
Fee-bump fee source, when the envelope was fee-bumped
Net fee the submitter actually paid (charge minus refund)
"23086"
The buyer authorization's signatureExpirationLedger
Destination muxed id when the transfer used a muxed account
Bazaar enrichment — WHAT was bought, when the seller is cataloged
Bazaar enrichment — the resource URL