← SparkPulse Launch

UAS Router API

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

Why use it

Base URL

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.

1. Quote

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
ParameterValues
sidebuy or sell
assetbuy: SOL, BNB, USDT or USD (compare all markets); sell: UAS
amountamount of asset to spend (buy) or UAS to sell
venueoptional: solana-meteora, bnb-pancakeswap or exchange
slippageBpsoptional, 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.

2. Build

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}

3. Send

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.

Example (Node, Solana buy)

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);

Launch tokens (for bots)

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":"..."}

Signed reserve statement

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))));

Limits

CallPer IP
quote60 a minute
build / submit20 a minute
statement30 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.

Contracts

UAS on Solana (mint)3F48CMewXmhAr8nWnhTrb9EPBv7UhAW2rWs5AM5D4o1o
UAS on BNB Chain0xCD79140C466cf2AACaff5cf7a98c11f19DCa01cf (1:1 backed)
Solana poolsB48mPRtu7vKAwCedumQ4cpSt4NikPDjcUn4wQQgHa4x7, tail 6ehhooYziejucMnY4tCDkGHLfJjcDFVVSWYAgcmqQdZc
BNB pool0x62Bf2bC9a75073DC50dD22c0C56c639D0a366462 (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).