Build with Palm USD.
PUSD is a fully-reserved, non-freezable USD stablecoin on Ethereum, Solana, BNB Chain, TRON, and ADI Chain. There is no proprietary SDK, no custom wallet, and no permission you need to ask for. If your code already works with USDC, it works with PUSD.
What you get out of the box
- A standard ERC-20 / SPL / BEP-20 / TRC-20 token, with 6 decimals, on each chain
- A non-freezable smart contract: no admin key, no blacklist, no pause function
- A public, no-auth circulation API for reserves and supply data
- Monthly ISAE 3000 (Revised) reserve attestations by a licensed CPA, published openly
What you do not need
- No API key for read-only data. The circulation API is fully public.
- No SDK install. The token is standard at every layer.
- No bridge. Each chain has a native mint and redeem contract; nothing is wrapped.
curl https://api.palmusd.com/v1/circulation
Quickstart.
Pick a chain. Drop in the contract address. Read a balance. The whole thing is two imports and a function call.
1. Pick the chain you want
The PUSD token is deployed natively on Ethereum, Solana, BNB Chain, TRON, and ADI Chain. Each deployment uses 6 decimals, matching standard stablecoin precision.
2. Get the contract address
Live contract addresses for Ethereum, Solana, BNB Chain, and ADI Chain are listed in Contracts & chain IDs below. The TRON deployment publishes at mainnet on TRON. Never trust an address that is not listed in this document, signed by Palm Treasury, and reflected on the published reserves attestation.
3. Read a balance
Use any standard library for the chain. The right-hand panel shows the same call in cURL, JavaScript, and Python.
// JS via ethers.js
import { Contract, JsonRpcProvider, formatUnits } from 'ethers';
const PUSD = '0xfaf0cee6b20e2aaa4b80748a6af4cd89609a3d78';
const ABI = ['function balanceOf(address) view returns (uint256)'];
const rpc = new JsonRpcProvider('https://eth.llamarpc.com');
const pusd = new Contract(PUSD, ABI, rpc);
const raw = await pusd.balanceOf('0x...');
console.log(formatUnits(raw, 6));
Contracts & chain IDs.
Verify before you sign. These are the only PUSD contract addresses. Any other deployment claiming to be Palm USD is not Palm USD.
API overview.
A small, public, no-auth REST API for circulation, reserves, and peg data. JSON in, JSON out. Designed to be safely cacheable and trivially scriptable.
Base URL
Authentication
None required for read endpoints. The API is intended for transparent, programmatic access by integrators, exchanges, custodians, journalists, and auditors. There is no API key to request.
Versioning
All endpoints sit under /v1/. Breaking changes ship as a new major version (/v2/) with the prior version maintained for a minimum 12 months.
Response format
JSON, UTF-8, with application/json; charset=utf-8 content type. Numeric amounts are returned as decimal strings to preserve precision (PUSD uses 6 decimals at the token level).
Rate limits
Read endpoints are aggressively cacheable. A soft rate limit of 60 requests per minute per IP applies to non-cached requests. Heavy users should set a User-Agent identifying their service.
Rate-limit headers and quota dashboard ship Q2 2026
Circulation
Returns the current circulating supply of PUSD across all live chains, with optional exclusion of one or more chains and a recomputed total.
LiveQuery parameters
| Parameter | Description |
|---|---|
| exclude |
One or more chain identifiers to exclude from the response. Accepts two equivalent forms: repeated values (?exclude=ETHEREUM&exclude=BSC) or a comma-separated list (?exclude=ETHEREUM,BSC).
Excluded chains are removed from the chains array, and total_circulating is recomputed from the remaining entries so the payload stays internally consistent.
|
Response
Returns an object with the per-chain circulating amounts and the total (recomputed if any chain was excluded).
chain (string identifier) and circulating (decimal string in PUSD units).circulating values across all included chains, returned as a decimal string. If exclude was supplied, this value is the recomputed total of the remaining chains, not the global total.Errors
| Status | When |
|---|---|
| 400 | The exclude parameter contained one or more values that did not match a known chain identifier. The response body returns the offending value(s). |
curl https://api.palmusd.com/v1/circulation curl "https://api.palmusd.com/v1/circulation?exclude=ETHEREUM,BSC"
Circulation history.
Returns historical circulation across the same chain set. Identical exclude semantics: removed chains drop out, totals recompute.
Query parameters
| Parameter | Description |
|---|---|
| exclude | Same semantics as /v1/circulation. Repeated or comma-separated. Excluded chains drop out of every point in the time series; total_circulating at every timestamp is recomputed accordingly. |
from, to, interval) and pagination land alongside the published v1 reference. Q2 2026
Reserves.
Returns the current snapshot of reserve composition by tier, custodian, and instrument class, attested under ISAE 3000 (Revised) by a licensed CPA.
Coming Q2 2026Will return: tier-by-tier composition (Cash & Callable Deposits, Commodity Murabaha, Quasi-sovereign Sukuk, Long-dated Sukuk), per-custodian breakdown, attestation date, attestation reference, and the URL of the signed PDF.
Until live, the canonical source is the monthly attestation linked from the Reserves page.
Peg snapshot.
Returns the current observed market peg, the reserve coverage ratio, and the timestamp of the last attestation.
Coming Q2 2026Will return: VWAP across primary venues, deviation from $1.00, reserve coverage ratio (always ≥ 1.0), timestamp, and a cryptographic signature over the snapshot for verification.
Errors.
Errors return standard HTTP status codes with a JSON body describing the failure.
| Status | Meaning |
|---|---|
| 200 | Request succeeded. Body contains the requested resource. |
| 400 | The request was malformed: typically an invalid query parameter such as an unknown chain in exclude. |
| 404 | The endpoint or resource does not exist at this version. |
| 429 | The soft rate limit was exceeded. Back off and retry. |
| 500 | An unexpected server error. Safe to retry. Reach security@palmusd.com if persistent. |
Error body shape
All errors return a JSON object with a stable shape:
{
"error": {
"code": "invalid_chain",
"message": "Unknown chain in exclude parameter: DOGE",
"details": { "invalid_values": ["DOGE"] }
}
}
SDKs.
There is no Palm SDK, by design. PUSD is a standard token at every layer; whatever library already moves USDC for you will move PUSD without modification.
Recommended libraries
- Ethereum / BNB Chain:
ethers,viem,web3.js - Solana:
@solana/web3.js+@solana/spl-token - TRON:
tronweb - ADI:
ethers,viem(EVM-compatible)
@palmusd/api and palmusd respectively. They are wrappers, not dependencies. Anything they do, you can do without them.
Audits & security.
Two assurance layers: smart-contract security audits, and monthly reserve attestations.
Smart contract audit
Audited by Leading cybersecurity companies. The full report, severity counts, and remediations will be linked here once the report is published.
Reserve attestation
Monthly attestation under ISAE 3000 (Revised) by a licensed CPA. Each attestation covers reserve composition, custody, and 1:1 backing. Reports are linked from the Reserves page within 10 business days of period end.
Responsible disclosure
Found a security issue? Email security@palmusd.com. Please do not file a public GitHub issue, social-media post, or chain-explorer comment until coordinated disclosure has happened. A formal bug bounty program with severity bands and bounty amounts will be published once smart contracts are publicly deployed.
Status.
Real-time health of the API and chain integrations.
status.palmusd.com ships Q2 2026Until the public status page launches, current API health is reflected in the pill at the top right of every page. Major incidents and planned maintenance are announced via the Newsroom.
What status will cover
- API availability and latency by endpoint
- Per-chain mint, redeem, and read-RPC health
- Open and resolved incidents with full postmortems
- Subscription via email and webhook
Changelog.
Material changes to the API, contracts, and reserve policy.
No public entries yet. New entries will publish here per release, with semantic-version dating and a one-paragraph summary of each change.
