{"description":"What Qart does for a small business, from keeping the books to smart contracts. Climb at your own pace; every rung works on its own.","rungs":[{"id":"books","title":"Keep the books","step":1,"capabilities":[{"id":"ledger","path":"/orgs/:handle/reports","title":"Double-entry journal","endpoints":[{"path":"/api/v1/orgs/:handle/ledger","auth":"bearer","method":"GET","role":"admin"}],"maturity":"live","for_you":"Each paid order becomes a balanced journal entry: money in, revenue, sales tax owed. Export it as CSV for QuickBooks, Xero or your accountant."},{"id":"sales_tax","path":"/orgs/:handle/tax-dashboard","title":"Sales tax schedules","endpoints":[],"maturity":"live","for_you":"Pick your jurisdiction once. Orders carry the right rate, and the tax collected is tracked as a liability."},{"id":"receipts","path":"/orgs/:handle/settings","title":"Receipts that prove themselves","endpoints":[],"maturity":"live","for_you":"A receipt can be written to the chain, so anyone can verify a purchase from its txid on any Qart instance. The receipt is the transaction: the third entry beside your debits and credits."},{"id":"reports","path":"/orgs/:handle/reports","title":"Sales reports","endpoints":[],"maturity":"live","for_you":"Daily and monthly sales, top items and busy hours, without a spreadsheet."}],"promise":"Every sale lands in a standard journal your accountant can import."},{"id":"in_person","title":"Get paid in person","step":2,"capabilities":[{"id":"receiving_address","path":"/orgs/:handle/settings","title":"Your own receiving address","endpoints":[{"path":"/api/v1/organizations","auth":"bearer","method":"GET","role":null},{"path":"/api/v1/onboard","auth":"bearer_optional","method":"POST","role":null},{"path":"/api/v1/organizations","auth":"bearer_optional","method":"POST","role":null},{"path":"/api/v1/organizations/:handle","auth":"bearer","method":"GET","role":"staff"}],"maturity":"live","for_you":"Payments go straight to your wallet. Qart never holds your money and never holds your keys."},{"id":"pos","path":"/orgs/:handle/pos","title":"Point of sale","endpoints":[{"path":"/api/pos/orders/:order_number","auth":"none","method":"GET","role":null},{"path":"/api/pos/orders","auth":"bearer","method":"POST","role":"staff"},{"path":"/api/pos/orders/:order_number/confirm","auth":"bearer","method":"POST","role":"staff"},{"path":"/api/v1/orgs/:handle/items","auth":"bearer","method":"POST","role":"staff"},{"path":"/api/v1/orgs/:handle/items","auth":"bearer","method":"GET","role":"staff"},{"path":"/api/v1/orgs/:handle/menu","auth":"bearer","method":"GET","role":"staff"},{"path":"/api/v1/orgs/:handle/menu","auth":"bearer","method":"PUT","role":"staff"}],"maturity":"live","for_you":"A menu, a cart and a QR code on a tablet or phone. The customer scans, pays, and you see it land."},{"id":"pay_links","path":"/pay/:handle","title":"Pay links and tips","endpoints":[],"maturity":"live","for_you":"A link or QR anyone can pay, for an amount you set or one they choose."},{"id":"cards_and_wallets","path":"/orgs/:handle/settings","title":"Cards and other wallets","endpoints":[],"maturity":"live","for_you":"Connect Stripe or HandCash so customers without bitcoin can still pay you; it all lands in the same books."}],"promise":"Take a payment at the counter today, with the phone you already have."},{"id":"online","title":"Sell online","step":3,"capabilities":[{"id":"commerce_api","path":"/orgs/:handle/settings","title":"Checkout on your own site","endpoints":[{"path":"/api/v1/commerce/:merchant_handle","auth":"commerce_key","method":"GET","role":null},{"path":"/api/v1/commerce/:merchant_handle/catalog","auth":"commerce_key","method":"GET","role":null},{"path":"/api/v1/commerce/:merchant_handle/catalog/:id","auth":"commerce_key","method":"GET","role":null},{"path":"/api/v1/commerce/:merchant_handle/checkout","auth":"commerce_key","method":"POST","role":null},{"path":"/api/v1/commerce/:merchant_handle/checkout/:public_token/status","auth":"commerce_key","method":"GET","role":null},{"path":"/api/v1/commerce/:merchant_handle/tickets","auth":"commerce_key","method":"GET","role":null},{"path":"/api/v1/commerce/:merchant_handle/tickets/checkout","auth":"commerce_key","method":"POST","role":null}],"maturity":"live","for_you":"One script tag turns any page into a store: a Buy button, an inline QR and a confirmation, no redirect."},{"id":"site_builder","path":"/sites/new","title":"A site, built with you","endpoints":[],"maturity":"live","for_you":"Describe your shop and get an editable website on GitHub Pages, with a coach that keeps helping after launch."},{"id":"open_sign","path":"/orgs/:handle/counter","title":"The Open sign","endpoints":[{"path":"/api/v1/shops/:org_handle/sign","auth":"none","method":"GET","role":null}],"maturity":"live","for_you":"Tell neighbors you are open right now, on Qart and on your own site, and answer questions while they browse."},{"id":"federated_marketplace","path":"/marketplace","title":"Found across the network","endpoints":[{"path":"/api/v1/peers","auth":"none","method":"GET","role":null},{"path":"/api/v1/peers/exchange","auth":"none","method":"POST","role":null},{"path":"/api/v1/feeds","auth":"bearer_optional","method":"GET","role":null},{"path":"/api/v1/feeds","auth":"bearer_optional","method":"POST","role":null},{"path":"/api/v1/discover/nearby","auth":"bearer_optional","method":"GET","role":null},{"path":"/api/v1/discover/search","auth":"bearer_optional","method":"GET","role":null},{"path":"/api/v1/discover/featured","auth":"bearer_optional","method":"GET","role":null},{"path":"/api/v1/discover/categories","auth":"bearer_optional","method":"GET","role":null},{"path":"/api/v1/discover/categories/:category","auth":"bearer_optional","method":"GET","role":null},{"path":"/api/v1/discover/merchants/:merchant_handle","auth":"bearer_optional","method":"GET","role":null}],"maturity":"live","for_you":"Your catalog is an open feed. Other Qart instances can list it, with no platform in the middle."}],"promise":"Put a Buy button on any website, or let Qart build the site with you."},{"id":"bitcoin_economics","title":"Bitcoin-native economics","step":4,"capabilities":[{"id":"loyalty","path":"/pos/cards","title":"Loyalty stamps","endpoints":[{"path":"/api/pos/loyalty-cards/lookup/:identifier","auth":"none","method":"GET","role":null},{"path":"/api/pos/loyalty-cards/:id","auth":"none","method":"GET","role":null},{"path":"/api/pos/loyalty-cards","auth":"bearer","method":"POST","role":"staff"},{"path":"/api/pos/loyalty-cards/:id/stamp","auth":"bearer","method":"POST","role":"staff"},{"path":"/api/pos/loyalty-cards/:id/redeem","auth":"bearer","method":"POST","role":"staff"},{"path":"/api/pos/loyalty-cards/:id/transfer","auth":"bearer","method":"POST","role":"staff"},{"path":"/api/v1/loyalty-cards","auth":"bearer","method":"POST","role":null}],"maturity":"live","for_you":"Stamp cards that live in the customer's wallet, optionally as on-chain stamps, so the reward is theirs."},{"id":"prepaid_cards","path":"/orgs/:handle/prepaid-cards","title":"Prepaid and gift cards","endpoints":[{"path":"/api/pos/prepaid-cards/lookup/:identifier","auth":"none","method":"GET","role":null},{"path":"/api/pos/prepaid-cards/:id","auth":"none","method":"GET","role":null},{"path":"/api/pos/prepaid-cards","auth":"bearer","method":"POST","role":"staff"},{"path":"/api/pos/prepaid-cards/:id/use","auth":"bearer","method":"POST","role":"staff"},{"path":"/api/pos/prepaid-cards/:id/transfer","auth":"bearer","method":"POST","role":"staff"},{"path":"/api/v1/prepaid-cards/purchase","auth":"bearer","method":"POST","role":null}],"maturity":"live","for_you":"Sell stored value up front. Redemptions draw down a liability in your books, not a mystery balance."},{"id":"stable_value","title":"Stable value (MNEE)","endpoints":[{"path":"/api/v1/mnee/intents","auth":"bearer_optional","method":"POST","role":null},{"path":"/api/v1/mnee/intents/:payment_id","auth":"bearer_optional","method":"GET","role":null},{"path":"/api/v1/mnee/intents/:payment_id/settle","auth":"bearer_optional","method":"POST","role":null}],"maturity":"testnet","for_you":"Price and settle in a dollar stablecoin on the same chain when you would rather not hold bitcoin."},{"id":"tokens","path":"/tokens/mint","title":"Your own token","endpoints":[],"note":"The coordinated testnet run with the bitblocks indexer is still owed (#10).","maturity":"preview","for_you":"Mint a BSV-21 token for memberships, credits or a community currency."}],"promise":"Rewards, stored value and stable money that customers actually own."},{"id":"p2p","title":"Peer to peer and 402","step":5,"capabilities":[{"id":"paygate_402","path":"/402","title":"402 Payment Required","endpoints":[{"path":"/api/v1/402/resources","auth":"paygate_key","method":"GET","role":null},{"path":"/api/v1/402/resources","auth":"paygate_key","method":"POST","role":null},{"path":"/api/v1/402/resources/:id","auth":"paygate_key","method":"DELETE","role":null},{"path":"/api/v1/402/check","auth":"paygate_key","method":"POST","role":null},{"path":"/api/v1/402/verify","auth":"paygate_key","method":"POST","role":null},{"path":"/api/v1/402/payments","auth":"paygate_key","method":"GET","role":null}],"maturity":"live","for_you":"Put a price on a URL. A request without payment gets HTTP 402 and a payment request; a paid one gets through. Micropayments of a few sats work."},{"id":"paymail","title":"A payment name","endpoints":[{"path":"/api/v1/bsvalias/id/:paymail","auth":"none","method":"GET","role":null},{"path":"/api/v1/bsvalias/address/:paymail","auth":"none","method":"GET","role":null},{"path":"/api/v1/bsvalias/address/:paymail","auth":"none","method":"POST","role":null},{"path":"/api/v1/bsvalias/public-profile/:paymail","auth":"none","method":"GET","role":null},{"path":"/api/v1/bsvalias/verifypubkey/:paymail/:pubkey","auth":"none","method":"GET","role":null}],"maturity":"live","for_you":"Customers pay a name like you@qart.app instead of copying a long address."},{"id":"keypair_identity","path":"/identity/link","title":"Sign in with a key","endpoints":[{"path":"/api/auth/challenge","auth":"none","method":"POST","role":null},{"path":"/api/auth/verify","auth":"none","method":"POST","role":null}],"maturity":"live","for_you":"Your identity is a key you hold (did:key), recognized by any app that checks it. No password to leak."},{"id":"wallet_api","title":"Wallet API","endpoints":[{"path":"/api/v1/wallet/utxos","auth":"bearer_optional","method":"GET","role":null},{"path":"/api/v1/wallet/broadcast","auth":"bearer_optional","method":"POST","role":null}],"maturity":"live","for_you":"List spendable coins and broadcast transactions your own tools signed. The key stays with you."}],"promise":"Get paid per request, per article, per API call, directly, with no middleman."},{"id":"contracts","title":"Smart contracts","step":6,"capabilities":[{"id":"escrow","path":"/orders","title":"Escrow","endpoints":[],"note":"The testnet walk-through is still owed (#38).","maturity":"testnet","for_you":"Buyer, seller and an arbiter share a 2-of-3 lock. Two of three agree and the money moves; no platform decides."},{"id":"timelocked_refund","title":"Pre-signed refunds","endpoints":[],"maturity":"testnet","for_you":"The refund is signed before the money moves, locked until a date. The customer is protected without trusting you."},{"id":"referral_covenant","path":"/referrals","title":"Referral covenants","endpoints":[],"note":"The covenant pays to P2SH, which is disabled; it moves to a bare script first (#60).","maturity":"preview","for_you":"Pay a referrer automatically when their link sells, enforced by the script instead of a promise."},{"id":"psbt","path":"/wallet/tx","title":"Co-signed transactions","endpoints":[],"maturity":"testnet","for_you":"Build a transaction here, sign it in your own wallet, combine signatures from partners. Keys never leave their owners."}],"promise":"Agreements that settle themselves: the terms are in the transaction."}],"llms_txt":"/llms.txt","personalized":"GET /api/v1/orgs/:handle/capabilities with Authorization: Bearer <user API key>"}