Buy or sell UAS at the best price across every UAS market with one call. Built for wallets, bots and apps.
KeylessNo custodySigned reserve dataCORS open
https://launch.sparkpulse.net/api
Machine-readable spec (OpenAPI 3): /api/router/openapi.json. Bot frameworks, SDK generators and AI agents can load it directly.
GET /router/quote?side=buy&asset=USD&amount=25 GET /router/quote?side=buy&asset=SOL&amount=0.5 GET /router/quote?side=sell&asset=UAS&amount=2000000&slippageBps=100
| Parameter | Values |
|---|---|
side | buy or sell |
asset | buy: SOL, BNB, USDT or USD (compare all markets); sell: UAS |
amount | amount of asset to spend (buy) or UAS to sell |
venue | optional: solana-meteora, bnb-pancakeswap or exchange |
slippageBps | optional, 10 to 1000 (default 100 = 1%) |
The response lists routes, best first, each with input, output, minimum output, price impact and USD values; best names the top venue; goldFloor gives the live redemption terms; venues that cannot fill appear in unavailable with the reason.
POST /router/build
{"venue":"solana-meteora","side":"buy","amount":0.5,"wallet":"<your Solana address>"}
{"venue":"bnb-pancakeswap","side":"sell","amount":2000000,"wallet":"0x<your BNB address>","slippageBps":100}
{ id, tx }: a base64 v0 transaction, already simulated, valid for 120 seconds. Your wallet is the fee payer and the only signer.{ tx: { to, data, value } } for the PancakeSwap v3 router (chain id 56). Sells may include an approval to send first. Buys receive UAS in your wallet; sells receive native BNB."acceptImpact": true. Sells moving it more than 50% are refused.Solana: sign tx and either broadcast it yourself, or send it back unchanged:
POST /router/submit
{"id":"<id from build>","tx":"<signed base64 tx>"} → {"signature":"..."}
BNB Chain: sign and send tx from your wallet.
import { Connection, Keypair, VersionedTransaction } from "@solana/web3.js";
const API = "https://launch.sparkpulse.net/api";
const me = Keypair.fromSecretKey(/* your key */);
const q = await (await fetch(`${API}/router/quote?side=buy&asset=SOL&amount=0.2`)).json();
console.log(q.best, q.routes[0].output);
const b = await (await fetch(`${API}/router/build`, { method: "POST", headers: { "content-type": "application/json" },
body: JSON.stringify({ venue: "solana-meteora", side: "buy", amount: 0.2, wallet: me.publicKey.toBase58() }) })).json();
const tx = VersionedTransaction.deserialize(Buffer.from(b.tx, "base64"));
// check it yourself before signing: payer = you, programs = Meteora DLMM / DAMM v2, SPL Token, Associated Token, System, Compute Budget
tx.sign([me]);
const r = await (await fetch(`${API}/router/submit`, { method: "POST", headers: { "content-type": "application/json" },
body: JSON.stringify({ id: b.id, tx: Buffer.from(tx.serialize()).toString("base64") }) })).json();
console.log(r.signature);
Trade any token on SparkPulse Launch. Every Launch token is priced in UAS, so a SOL buy first buys UAS on the open market, then the token, in one transaction.
GET /router/launch/tokens list: mint, price, liquidity, volume, holders, trust
GET /router/launch/quote?mint=<mint>&side=buy&asset=SOL&amount=0.05&wallet=<you>
POST /router/launch/build {"mint":"<mint>","side":"buy","asset":"SOL","amount":0.05,"wallet":"<you>"}
POST /router/launch/submit {"id":<id>,"tx":"<signed base64 tx>"} → {"signature":"..."}
SOL or UAS. Sell for UAS; to get SOL, sell that UAS with /router/build.GET /statement
One machine-readable view of UAS: gold reserve, gold released, UAS retired by redemption, the redemption rule and rate, supply on each chain, circulating supply, market venues and prices. It is signed so nobody can pass off a copy as ours:
{ "data": { ... }, "signature": "<base58>", "signer": "<base58 Ed25519 public key>", "alg": "ed25519" }
Verify: rebuild the JSON of data with object keys sorted and no whitespace, then check the Ed25519 signature against signer. The signer key is published at /api/router/info and on unitedafricashilling.com/official. It holds no funds and cannot sign transactions.
import crypto from "crypto"; import bs58 from "bs58";
const canonical = (v) => Array.isArray(v) ? `[${v.map(canonical).join(",")}]` : v && typeof v === "object"
? `{${Object.keys(v).sort().filter((k) => v[k] !== undefined).map((k) => `${JSON.stringify(k)}:${canonical(v[k])}`).join(",")}}` : JSON.stringify(v);
const s = await (await fetch("https://launch.sparkpulse.net/api/statement")).json();
const key = crypto.createPublicKey({ key: Buffer.concat([Buffer.from("302a300506032b6570032100", "hex"), Buffer.from(bs58.decode(s.signer))]), format: "der", type: "spki" });
console.log(crypto.verify(null, Buffer.from(canonical(s.data)), key, Buffer.from(bs58.decode(s.signature))));
| Call | Per IP |
|---|---|
| quote | 60 a minute |
| build / submit | 20 a minute |
| statement | 30 a minute (cached 2 min) |
Over a limit you get 429 with retryAfter; at peak load 503 busy. Back off and retry. Quotes are cached for 5 seconds, so polling faster gains nothing.
Solana buys 0.001–500 SOL; BNB buys 0.0001–100 BNB. Need more? Write to support@unitedafricashilling.com.
| UAS on Solana (mint) | 3F48CMewXmhAr8nWnhTrb9EPBv7UhAW2rWs5AM5D4o1o |
| UAS on BNB Chain | 0xCD79140C466cf2AACaff5cf7a98c11f19DCa01cf (1:1 backed) |
| Solana pools | B48mPRtu7vKAwCedumQ4cpSt4NikPDjcUn4wQQgHa4x7, tail 6ehhooYziejucMnY4tCDkGHLfJjcDFVVSWYAgcmqQdZc |
| BNB pool | 0x62Bf2bC9a75073DC50dD22c0C56c639D0a366462 (UAS/WBNB 0.25%) |
Prices move. Quotes are not a promise; the minimum output in each transaction protects you. Operated by QUANTORA NETWORK LTD, Uganda (Reg. 80034660609201).