DEVELOPER RESOURCES

Developer Hub

Shamwari is fully open-source under the MIT licence. The complete Java protocol codebase, five technical volumes, full REST API at the testnet node, and client binaries are all available now. Testnet is live across all three BetaChains. Build the next generation of quantum-safe financial infrastructure.

MIT OPEN SOURCEREST APIFIVE VOLUMESTESTNET LIVEJAVA / JVMNO SMART CONTRACTS
MIT
Full source code — fork, audit, contribute freely
5
Complete technical reference volumes published 2026
70+
Protocol transaction types accessible via REST API
3
Live BetaChains on testnet: CAPITAL · ZWG · BRL •AED • PVT
01
QUICK START
Start building in under 60 seconds

Download the client, connect to the testnet node, and query the REST API immediately. No account required for read operations. Submit transactions by providing your Dilithium-signed payload.

FIRST API CALL: 30 SECONDS
# 1. Get the current block on CAPITAL chain curl "https://wallet.shamwari.network/api?requestType=getBlock&chain=CAPITAL" # 2. Query an account's balance curl "https://wallet.shamwari.network/api?requestType=getAccount&account=SHAMWARI-XXXX-XXXX-XXXX-XXXXX" # 3. Get active insurance products on ZIMBABWE chain curl "https://wallet.shamwari.network/api?requestType=getInsuranceProducts&chain=5&status=ACTIVE" # 4. Submit a signed transaction (POST with your Dilithium-signed attachment) curl -X POST "https://wallet.shamwari.network/shamwari" -d "requestType=sendMoney&chain=5&recipient=SHAMWARI-XXXX-XXXX-XXXX-XXXXX&amountNQT=1000&secretPhrase=..."

The testnet API is publicly accessible. Read operations require no authentication. Transaction submission requires a valid Dilithium-signed payload. The secretPhrase parameter in the example above is only for testnet prototyping while production integrations sign client-side and submit signed bytes only.

02
REST API
Full HTTP API: query and submit everything

Shamwari exposes a single REST endpoint at each node for all protocol operations. All queries use HTTP GET with requestType and chain parameters. Transaction submissions use HTTP POST. JSON request and response format throughout.

Single Endpoint Architecture
All API operations use the same base URL: /api?requestType=.... The requestType parameter routes to the appropriate handler. This makes the API trivial to firewall, proxy, and rate-limit where one endpoint handles everything.
Chain Scoping
All financial operations include a chain parameter specifying the target BetaChain: chain=ZIMBABWE, chain=BRAZIL, or chain=CAPITAL. Omitting chain defaults to FxtChain for infrastructure queries.
No Authentication for Reads
All GET queries are publicly accessible with no API key, no authentication header, and no rate limiting. Any party i.e developer, regulator or auditor can query full chain state in real time. Transaction submission requires a valid Dilithium signature.
Pagination and Filtering
List endpoints support firstIndex / lastIndex pagination, status filtering, block height range filtering, and account-specific queries. All responses include a totalCount field for pagination UI. Maximum 100 records per request.
TRANSACTION FLOW

How to Submit a Transaction

Every transaction submission follows the same pattern. The wallet SDK handles steps 1–3 automatically.

  • 1. Construct attachment: build the JSON attachment for your transaction type (e.g. CURRENCY_PAYMENT, LIST_PRODUCT, SUBSCRIBE)
  • 2. Broadcast unsigned tx: POST to getUnsignedTransaction with your attachment fields to receive the canonical byte serialisation
  • 3. Sign client-side: sign the byte payload with your Dilithium private key (never send the private key)
  • 4. Submit signed tx: POST to broadcastTransaction with the serialised attachment + Dilithium signature bytes
  • 5. Confirm: GET getTransaction?transaction=TXID to poll confirmation status
03
KEY ENDPOINTS
Reference table for the most common API calls

The most frequently used API endpoints across all six protocol systems. Full parameter documentation and response schemas available in the documentation.

Endpoint (requestType)MethodSystemDescription
getBlockGETInfrastructureGet block by height or ID. Include transactions=true to include full transaction list.
getAccountGETIdentityFull account info: balances, account type, permissions, domain, certificate status.
sendMoneyPOSTShamwariPayCURRENCY_PAYMENT transaction. Params: chain, recipient, amountNQT, currencyId.
publishExchangeOfferPOSTShamwariPayPlace a currency exchange offer on the DEX. Params: chain, currencyId, rateQNTPerUnit, limit.
loanOfferPOSTShamwariPayCreate a loan offer. Params: chain, currency, amount, interestRate, collateral, term.
getOpenOrdersGETTotem ExchangeQuery order book for a Totem/currency pair. Params: chain, asset, currency.
placeAskOrderPOSTTotem ExchangePlace a sell order for a Totem asset. Params: chain, asset, currency, quantityQNT, priceNQT.
getInsuranceProductsGETInsuranceList insurance products on a chain. Params: chain, status (optional), issuerId (optional).
applyForPolicyPOSTInsuranceApply for an insurance policy. Params: chain, insuranceId, coverageAmount.
submitClaimPOSTInsuranceSubmit an insurance claim. Params: chain, policyId, claimAmount, description.
listProductPOSTCommerceCreate a product listing. Params: chain, name, price, currency, fulfilmentMode, deadline.
getPurchasesGETCommerceList purchases for a buyer or merchant. Params: chain, account, status.
deliverGoodsPOSTCommerceSubmit DELIVERY_CONFIRMATION. Params: chain, purchase, deliveryData (encrypted).
createServicePOSTSubscriptionsRegister a subscription service. Params: chain, name, price, period, assetType.
subscribePOSTSubscriptionsSubscribe to a service. Params: chain, serviceId.
getSubscriptionsGETSubscriptionsList subscriptions for an account. Params: chain, account, status.
issueCertificatePOSTCertificatesIssue a Shamwari certificate. DEVELOPER account required. Params: chain, subjectKey, type, expiry.
getCertificateGETCertificatesGet certificate by ID. Returns status, issuer, subject, validity period.
grantPermissionPOSTChain ControlGrant CHAIN_USER or CHAIN_ADMIN permission. CHAIN_ADMIN required. Params: chain, recipient.
getPermissionGETChain ControlQuery permission status for an account. Params: chain, account.
getAccountInfoGETIdentityGet decryptable AccountInfo for an account. Returns encrypted payload if set.
setAccountInfoPOSTIdentitySet account metadata (AccountInfo). Params: chain, name, description, encryptedData.
04
TECHNICAL VOLUMES
Five complete reference documents

Five comprehensive technical volumes cover the entire Shamwari protocol — from blockchain architecture and consensus to cryptography, all financial systems, and the full API reference.

VOLUME I
Blockchain Architecture
The definitive reference for Shamwari's dual-chain architecture, consensus pipeline, and permission system.
FxtChain + BetaChain hierarchy7-gate consensus pipelinePermission PermissionPolicyAFTER_BLOCK_APPLY automationBinder ProtocolBlock structure and forgingGenesis and versioned state
VOLUME II
Monetary System
Complete specification for ShamwariPay — the monetary primitive layer covering all payment, lending, and exchange operations.
5 currency types + bitmaskDEX order book mechanicsLending and collateralSavings and vault products13 tax rate typesTax Collector systemShamwariPay transaction reference
VOLUME III
Digital Assets & Insurance
Full specification for the Totem Exchange and Insurance Marketplace protocol systems.
3 Totem asset typesTotemApproval lifecycleDividend distributionTotemHistory provenanceInsurance 9-state lifecycleActuarial reserve engineRiskCalculator 6 dimensions
VOLUME IV
Commerce & Identity
Complete specification for E-Commerce, Subscriptions, Account Identity, and the App Store on CAPITAL chain.
5 fulfilment modesKyber encryption patternEscrow and buyer protectionSubscription billing engine10 account typesAccountInfo identity model.shamwari.network domains
VOLUME V
Post-Quantum Cryptography
Full cryptographic specification — algorithms, parameters, key derivation, and JVM PKI integration.
ML-DSA Dilithium FIPS 204ML-KEM Kyber FIPS 203BIP39 PQ AdaptationAES-256-GCM hybrid encryptionKey derivation architectureShamwariCertificate JVM PKIHarvest-now threat model
API REF
REST API Reference
Complete endpoint reference for all transaction types, queries, and chain state operations.
All 70+ requestType valuesRequest parametersResponse schemasError codesPaginationAuthentication modelChain-specific parameters
05
INTEGRATION PATHS
Three ways to build on Shamwari

Build the integration depth that fits your use case — from a lightweight REST API connection to running your own full protocol node.

REST API Integration

Integrate Shamwari operations into any application via the REST API. Account creation, transaction submission, balance queries, order book data, insurance product queries, and certificate verification which are all accessible over HTTP with JSON responses. No SDK required. Works from any language or environment.

Java SDK Integration

The Java implementation of the Shamwari protocol includes a complete client SDK for JVM-based applications. The SDK handles key management, transaction construction, Dilithium signing, and Kyber encryption natively. Suitable for Android applications, enterprise middleware, JVM microservices, and Spring Boot backends.

Full Node Operation

Run a complete Shamwari node to participate in consensus, earn forging rewards, or operate as a Binder (fee-abstraction service provider). Full nodes hold the complete blockchain state, validate all transactions, and independently verify all compliance operations. Required for Binder operation and institutional deployments.

REST API Integration: What You Can Do

Everything in the Shamwari protocol is accessible via the REST API.

  • Submit any of the 70+ transaction types with a signed payload
  • Query real-time account balances, permission status, and subscription state
  • Read live order book, recent trades, and Totem price history
  • Query insurance product state, policy status, and reserve levels
  • Verify certificate validity and revocation status in real time
  • Monitor AFTER_BLOCK_APPLY events via block polling for automation
  • Access historical state at any block height via height= parameter

Java SDK: Key Capabilities

The Java SDK wraps the protocol operations in typed, documented Java interfaces.

  • ShamwariAccount: key management, seed phrase derivation, QKP generation
  • ShamwariTransaction: build and sign any transaction type type-safely
  • ShamwariCrypto: Dilithium sign/verify, Kyber encrypt/decrypt
  • ShamwariAPI: HTTP client wrapping all REST endpoints
  • ShamwariWallet: full wallet operations: send, receive, exchange, subscribe
  • Compatible with Android API level 24+
  • Available from the Bitbucket repository under the MIT licence
06
CODE EXAMPLES
Common integration patterns

Example code for the most common Shamwari integration operations. All examples use the public testnet API URL. Replace with your production node URL for mainnet.

Create Account and Generate Keys

// Java- derive PQC keypair from BIP39 seed phrase String seedPhrase = ShamwariAccount.generateSeedPhrase(24); // 24-word BIP39 ShamwariQKP qkp = ShamwariAccount.qkpFromSeed(seedPhrase); // Dilithium signing key (2528 bytes private, 1312 bytes public) byte[] dilithiumPubKey = qkp.getDilithiumPublicKey(); byte[] dilithiumPrivKey = qkp.getDilithiumPrivateKey(); // NEVER send this // Kyber encryption key (1632 bytes private, 800 bytes public) byte[] kyberPubKey = qkp.getKyberPublicKey(); // Derive account ID from Dilithium public key hash String accountId = ShamwariAccount.getAccountId(dilithiumPubKey); System.out.println("Account: " + accountId); // SHAMWARI-XXXX-XXXX-XXXX-XXXXX

Send a ZWG Currency Payment

// Java - sign and submit CURRENCY_PAYMENT on ZIMBABWE chain ShamwariAPI api = new ShamwariAPI("https://wallet.shamwari.network"); // Build unsigned transaction JSONObject unsignedTx = api.getUnsignedTransaction(Map.of( "requestType", "sendMoney", "chain", "ZIMBABWE", "recipient", "S-DEST-ACCT-ID", "amountNQT", "100000", // 10,000 ZWG (1 decimal = 10,000 QNT) "currencyId", "ZWG_CURRENCY_ID", "deadline", "1440" )); // Sign with Dilithium key byte[] txBytes = Hex.decode(unsignedTx.getString("unsignedTransactionBytes")); byte[] signature = ShamwariCrypto.dilithiumSign(txBytes, qkp.getDilithiumPrivateKey()); // Broadcast JSONObject result = api.broadcastTransaction( unsignedTx.getString("unsignedTransactionBytes"), Hex.toHexString(signature) ); System.out.println("TX Hash: " + result.getString("transaction"));

Encrypt a Purchase Payload

// Java - Kyber-encrypt a delivery address for a PURCHASES transaction String deliveryAddress = "123 Harare Road, Avondale, Zimbabwe"; JSONObject merchantInfo = api.getAccount("S-MERCHANT-ACCT-ID", "ZIMBABWE"); byte[] merchantKyberPubKey = Base64.decode(merchantInfo.getString("kyberPublicKey")); // Kyber KEM + AES-256-GCM hybrid encryption ShamwariEncryptedData encryptedPayload = ShamwariCrypto.encryptToPublicKey( deliveryAddress.getBytes(StandardCharsets.UTF_8), merchantKyberPubKey ); // Include encrypted payload in PURCHASES transaction attachment JSONObject purchase = api.getUnsignedTransaction(Map.of( "requestType", "purchase", "chain", "ZIMBABWE", "goods", "PRODUCT_LISTING_ID", "priceNQT", "500000", "encryptedData", encryptedPayload.toHex(), "kyberCipherText", encryptedPayload.getCipherTextHex() ));

Subscribe to a Service

// Java — subscribe to a recurring service String serviceId = "SERVICE_ID_FROM_GETSERVICES"; JSONObject unsignedTx = api.getUnsignedTransaction(Map.of( "requestType", "subscribe", "chain", "ZIMBABWE", "serviceId", serviceId, "deadline", "1440" )); byte[] txBytes = Hex.decode(unsignedTx.getString("unsignedTransactionBytes")); byte[] sig = ShamwariCrypto.dilithiumSign(txBytes, qkp.getDilithiumPrivateKey()); api.broadcastTransaction(unsignedTx.getString("unsignedTransactionBytes"), Hex.toHexString(sig)); // Check subscription status JSONObject sub = api.getSubscriptions("ZIMBABWE", myAccountId, "ACTIVE"); System.out.println("Subscribed until block: " + sub.getJSONArray("subscriptions") .getJSONObject(0).getInt("expirationHeight"));
07
TESTNET
All three BetaChains live

The Shamwari testnet runs all three production BetaChains with mainnet-identical configuration. All 70+ transaction types are available. Test tokens are free. The testnet does not correlate to the mainnet exactly.

CAPITAL Chain — Open Access
CAPITAL chain requires no permission and any account can submit all globally-available transaction types immediately. Best starting point for developers: test Totem Exchange, certificate issuance, subscription creation, and App Store registration without KYC onboarding.
ZIMBABWE Chain: Permissioned
ZIMBABWE chain switches to BETA_CHAIN policy at block 10,000 on testnet. Before block 10,000: open access for all developers. After: request CHAIN_USER permission via the request form. Models the real mainnet onboarding flow.
BRAZIL Chain: Permissioned
BRAZIL chain follows the same configuration as ZIMBABWE. Open until block 10,000 on testnet, then permissioned. Use this chain to test BRL-denominated integrations and tax withholding behaviour.
Testnet Access
Request free testnet coins via the request form. CAPITAL, ZWG, AED, PVT, BRL and WEALTH tokens available. Request testnet CHAIN_USER permission for permissioned chains via the same form.

Testnet Access Details

All testnet endpoints are publicly accessible.

  • API URL: https://wallet.shamwari.network/shamwari
  • Wallet UI: https://wallet.shamwari.network (connect to testnet)
  • Test chains active: CAPITAL, ZIMBABWE, BRAZIL, UAE, PRIVATE
  • Block explorer: wallet.shamwari.network
  • CHAIN_USER request: (TBA)

Testnet vs Mainnet Differences

Testnet uses identical protocol configuration with minor operational differences.

  • Same: transaction types, validation rules, consensus pipeline, tax rates, permission hierarchy
  • Same: PQC cryptography, Kyber encryption, Dilithium signatures
  • Same: block time target (~12 seconds), block size limits
  • Different: tokens have no monetary value, to be used for testing only
  • Different: permissionSwitchHeight = 10,000 for both regulated chains
  • Different:Chains (Testnet chains for demonstration purposes only)
08
NODE OPERATION
Running Shamwari infrastructure

Shamwari nodes validate transactions, forge blocks, and earn WEALTH forging rewards. Binder nodes additionally operate the fee-abstraction service for BetaChain users and earn fee revenue from day one of mainnet.

MINIMUM
Full Node — Minimum
2-core CPU (x64 or ARM64)
2 GB RAM
32 GB ROM
10 Mbps sustained bandwidth
H2 embedded database (default)
Java 17+ (OpenJDK or GraalVM)
Suitable for developer and testnet nodes
RECOMMENDED
Forging Node — Recommended
4-core CPU, 3.0 GHz+
4 GB RAM
512 GB NVMe SSD
50 Mbps dedicated bandwidth
PostgreSQL 14+ (production)
Java 21+ (GraalVM for performance)
Recommended for forging reward participation
REQUIRED
Binder Node
8-core CPU, 3.5 GHz+
8 GB RAM
1 TB NVMe SSD RAID
1 Mbps dedicated bandwidth
Licensed FSP or Bank account required
PostgreSQL 14+ with tuning
Required for Binder fee-abstraction service

Forging Rewards

Nodes participating in block forging earn WEALTH (FXT) token rewards proportional to their forging stake.

  • Reward = blockFee + inflationSubsidy per forged block
  • Forging probability proportional to WEALTH balance (stake-weighted)
  • Up to 100 forger accounts assignable per node
  • No energy expenditure because of balance-weighted proof-of-stake
  • Rewards begin at mainnet genesis block 1
  • Detailed forging configuration in Blockchain Architecture Document

Binder Revenue Model

Binder nodes earn the spread between the FXT fee they pay on FxtChain and the BetaChain fees they collect from users.

  • Binder pays one FXT fee for a bundled BetaBlock transaction
  • Collects BetaChain fees from all bundled user transactions
  • Profit = collected BetaChain fees − FXT cost
  • Competitive binder market where the best rate wins contested transactions
  • Requires CHAIN_BINDER permission (licensed FSP or bank)
  • Full Binder configuration in Chain Controls Documentation
INSTITUTIONAL & DEVELOPER ENQUIRIES
For Binder node operator onboarding, institutional CHAIN_ADMIN account setup, or investment due diligence: invest@thenamelesstree.africa
For technical support and developer questions: open an issue on the Bitbucket repository or consult the documentation.
START BUILDING TODAY

The complete financial protocol is available now.

Open source, well-documented, running on testnet. Start building the next generation of quantum-safe financial infrastructure for emerging markets.