Peable is a payments platform, a personal payment app, and the tools that connect payments to other websites and applications. Peable is the public product for fiat and FairCoin payments: its merchant workspace, APIs, SDKs and checkout share one payment lifecycle.
Businesses and platforms use Peable to accept and manage payments through
Orbit by Peable, the central merchant workspace, alongside APIs and services. The product covers payment requests,
payment links, hosted checkout, subscriptions, tax, connected sellers, refunds,
disputes, payment status and webhook notifications. The API foundation exists;
Orbit is a separate merchant application, not a screen inside the personal wallet:
packages/orbit, served at orbit.peable.to. Its first version
covers payments, webhook deliveries, merchant settings, tax and contributions; the
rest of the workspace is still to come and is excluded from this payment release.
Orbit will bring payment operations, customers, subscriptions, refunds,
disputes, settlement, reports and developer tools into one place. Developer tools
include application credentials and webhook configuration/diagnostics, with the
same authority checks as the APIs.
Buyers and merchants interact with Peable, regardless of the payment method. Peable owns the public payment resources, checkout experience, payment status and merchant notifications. Fiat payments use configured provider integrations; FairCoin payments use the self-custodial rail. A provider is an internal processing integration, not the platform's identity or a separate merchant-facing product.
The current implementation includes one card provider. Supporting additional fiat providers and their payment methods is part of the architecture and roadmap, not a claim that multiple providers, every bank method or every market are enabled today. Available methods must come from the configured provider and merchant capabilities; merchant preferences can restrict that set but cannot invent availability or approval.
People use the app to send and receive payments, pay for goods and services, approve checkout requests and view their activity. Its current implementation is a self-custodial FairCoin wallet with Oxy identity, public profiles, receive codes, contacts and pockets. Signing stays with the user's device. Hosts without signing capability provide a read-only experience and hand payment approval to a capable device.
Peable integrates into both the server and the customer-facing experience:
- Server: create and manage payments, checkout sessions, subscriptions, connected sellers, refunds and other payment resources using authenticated APIs.
- Websites and apps: present a Pay with Peable button and payment window, let the buyer review and authorize the payment, and report its progress and result.
- Peable App: approve a payment when the integrating surface cannot sign locally.
The intended experience is a connected flow: the merchant creates the payment, the website or app opens Peable's payment window, the buyer authorizes it, and the merchant receives the verified result. Merchant credentials stay on the server. Opening or closing a window is never proof of payment.
Today the browser SDK supplies an embeddable button, a QR payment window, app
handoff and realtime status. The separate app payment sheet supports payments to
people from Oxy apps. The unified merchant checkout composes reusable Bloom UI
with the optional @peable.to/sdk/checkout/ui entry and Mention as its first
consumer. Server imports remain independent of UI dependencies. Buyers use one
checkout; test or live processing is determined by the merchant's environment.
Development fixtures are separate from that buyer journey. Publication and
production acceptance must be verified for the exact release.
Mention is the first target for the unified payment experience. In the local integration, opening Mention Plus and tapping Subscribe opens Pay with Peable in a Bloom detached bottom sheet. The buyer reviews the offer and payment method, authorizes payment, and sees the resulting status.
Mention Plus can be purchased on its own. Oxy One also includes Mention Plus; it is not the only way to subscribe. Users with Plus through One must keep that access without purchasing Plus again. Both routes rely on authoritative backend entitlements; cancellation, failed payment and pending confirmation remain distinct.
The approved standalone catalogue prices are USD 5.99 monthly and USD 57.50 annually (20% below twelve monthly payments, rounded to cents). Catalogue prices and purchase availability are separate: an offer can be visible while purchasing remains disabled. Oxy One continues to be another source of Plus access.
Plus is sold through Orbit's own billing engine (ADR 0018): the offers are
catalog products and prices, Subscribe opens a Checkout Session in
mode: 'subscription', the subscription and its invoices are Orbit objects,
management is the customer portal (billing_portal), and access is the
entitlement (entitlements.activeEntitlements) — Plus through Plus or Oxy One
is one entitlement. Production activation still requires the correct merchant,
the approved catalogue rows and authoritative entitlement delivery to be
configured and verified together. Closing the sheet or checkout window never grants Plus.
Peable accepts FairCoin as a cryptocurrency for payments: sending, receiving and paying for goods or services. The FairCoin rail is self-custodial; the gateway holds watch-only public keys and cannot spend a user's funds.
Peable, Oxy and Oxy ecosystem applications do not buy or sell FairCoin and do not offer cryptocurrency exchange or brokerage. Buying or selling FairCoin is outside this product and belongs to the FairCoin organization. “Buying” in Peable means paying a merchant for goods or services, not buying the currency.
This is an explicit product boundary motivated by legal considerations, not a statement that regulatory review is complete. The inherited Buy FAIR screens, bridge purchase client and exchange/ATM discovery have been removed from the Peable experience. Historical local purchase records are retained without exposing a new currency-purchase flow.
Implementation, external testing, deployment and availability for real payments are separate states. This table describes source capability, not production readiness.
| Area | Implemented foundation | Remaining work or verification |
|---|---|---|
| Payments | Intents, links, sessions, idempotency, FairCoin settlement, card provider integration, signed webhooks and realtime status | End-to-end acceptance on the exact release and enabled environment |
| Merchant operations | Administrative APIs; Orbit (payments, webhook log and redelivery, merchant settings, tax, contributions) | Complete centralized merchant workspace and credential-management experience |
| Marketplace payments | Connected sellers, onboarding, transfers, reversals, refunds and disputes | Full provider/device acceptance; dispute attachments; bank payout tracking |
| Billing and tax | Customers, subscription checkout, portal, invoice reads, cancellation, tax calculation/reporting and native FairCoin periods | Broad self-service billing management and activation per approved offer; FairCoin renewal requires payment authorization |
| Tax compliance | Orbit Tax workspace (ADR 0020): business onboarding, declared registrations, private tax documents, assessments against a versioned, sourced rule set (EU VAT OSS B2C and Texas sales tax only), review queue with owner decisions, deadlines and history | More supported jurisdictions after professional review; registration submission, return filing and remittance (not available today, and never simulated) |
| Personal app | Identity, wallet, activity, sending/receiving, profiles, QR, payment approval and pockets | Physical-device acceptance and recovery/rotation verification |
| Embedded payments | Browser button/QR/app handoff; separate person-payment sheet; reusable merchant checkout in the local Mention integration | Publish and accept the unified commercial checkout; activate standalone Plus with authoritative access |
| Financial operations | Per-payment provider settlement reads | Per-merchant ledger, fiat balances, reserves, bank payouts and reconciliation |
| In-person payments | No terminal product | Terminal and contactless payment experience |
Historical evidence includes real provider test-mode subscription checkout and lifecycle tests, plus deployment receipts. It does not verify today's deployment or all payment flows. See the roadmap for evidence, limitations and delivery priorities. The provider architecture and local test record describes the internal processing boundary.
|
A merchant record holds a watch only account
Each FairCoin payment intent gets a receive address derived from that |
Test and live are isolated by the environment on the credential that authenticated the
call, not by a flag the caller sends. One Oxy app gets at most one merchant per
environment, and one deployment holds a test key and a live key side by side
(ADR 0017): a Amounts are canonical base unit strings and never floats, on both rails. Merchants supply no provider credentials. Peable holds the provider credentials (ADR 0009); a merchant's whole authentication is their Oxy application credential. |
A Bun workspace monorepo. Everything is under packages/.
| Path | Package | What it is |
|---|---|---|
packages/backend |
@peable.to/backend |
The Gateway. Express, Drizzle on PostgreSQL and Socket.IO on Bun |
packages/sdk |
@peable.to/sdk |
Server SDK plus the separate @peable.to/sdk/checkout browser entry |
packages/checkout |
@peable.to/checkout |
The hosted, anonymous, payer facing checkout web app. Vite and React |
packages/frontend |
@peable.to/frontend |
Expo app for iOS, Android, web and Electron |
packages/orbit |
@peable.to/orbit |
Orbit by Peable, the merchant dashboard. Expo web first, Bloom, Oxy sign-in |
packages/contracts |
@peable.to/contracts |
Zod contribution contracts and generated OpenAPI |
packages/shared-types |
@peable.to/shared-types |
The wire contract shared by all of the above |
packages/pay |
@peable.to/pay |
Payment execution from an Oxy app; @peable.to/pay/ui separately exports the payment sheet |
shared-types is the reason the webhook signer cannot drift: the Gateway signs and the
SDK verifies through the same exported routine.
You need Bun and a PostgreSQL instance — docker compose -f docker-compose.postgres.yml up -d starts one, and the backend refuses to boot
without DATABASE_URL pointing at it (see packages/backend/.env.example).
bun install # postinstall builds contracts, shared-types, sdk and pay
bun run dev # every package at onceOr one at a time:
bun run dev:backend # bun --watch, listens on 3001 by default
bun run dev:frontend # expo start --clear
bun run dev:orbit # Orbit on http://localhost:8082checkout has no root shortcut; the SDK has build:sdk. Other commands use the workspace filter:
bun run --filter @peable.to/checkout dev
bun run --filter @peable.to/sdk devEvery script
Root: dev, dev:frontend, dev:orbit, dev:backend, build, build:shared-types,
build:frontend, build:orbit, build:backend, test, lint, lint:fix, format, clean,
start:frontend, start:orbit, start:backend. lint is Biome (biome check .) over the whole
repo plus the frontend's and Orbit's minimal Expo ESLint; format / lint:fix write Biome's fixes.
| Package | Scripts |
|---|---|
@peable.to/backend |
dev, start, build, typecheck, test, clean |
@peable.to/sdk |
build (cjs, esm and types), dev, typecheck, test, clean |
@peable.to/checkout |
dev, build, preview, typecheck, test |
@peable.to/frontend |
dev, start, android, ios, web, electron, build, electron:build, typecheck, lint, test |
@peable.to/orbit |
dev, start, web, build (web export), typecheck, lint, test |
@peable.to/shared-types |
same build trio as the SDK, plus dev, typecheck, test, clean |
Install the SDK, not this repo.
bun add @peable.to/sdkimport { Peable } from '@peable.to/sdk';
const peable = new Peable({
publicKey: process.env.OXY_APP_PUBLIC_KEY,
secret: process.env.OXY_APP_SECRET,
});
const intent = await peable.paymentIntents.create(
{ amount: '2500', network: 'mainnet' },
{ idempotencyKey: crypto.randomUUID() },
);Hand intent.client_secret to the browser and mount the payer side widget from
@peable.to/sdk/checkout. The guides and the API reference are at
oxy.so/developers/docs/peable (source:
packages/sdk/docs).
There is no bespoke Peable API key. The SDK is configured with the same
ApplicationCredential Oxy Console already issues, presents it to the Oxy API to mint a
short lived service token, and re mints when that token expires.
The backend verifies callers with @oxy.so/core/server, using createOxyAuthMiddleware
and getRequiredOxyUserId for human callers, oxy.middleware.service() for merchant service tokens,
and oxy.middleware.socket() for Socket.IO. There is no app local bearer parser.
The payer side is different by design: a payer is anonymous and proves nothing except
possession of a payment intent's clientSecret, which travels in a request header rather
than a query string so it stays out of access logs.
See OxyHQ/oxy for the identity platform behind all of
this.
| Route group | File |
|---|---|
| Payment intents | paymentIntents.ts |
| Payment links | paymentLinks.ts |
| Checkout sessions | checkoutSessions.ts |
| Merchants | merchants.ts |
| Webhook deliveries | webhookDeliveries.ts |
| Dashboard | dashboard.ts |
| Social send and receive | social.ts |
| Enrichment | enrich.ts |
Realtime intent updates go out over Socket.IO, which is what lets a checkout page move
from processing to succeeded without polling.
- Peable docs: the integration guides, the API
reference and the error codes (source:
packages/sdk/docs) - Examples: runnable test-mode integrations (Checkout, Elements, subscriptions, Connect, a webhook receiver)
- Roadmap
| Repo | What it is |
|---|---|
OxyHQ/oxy |
The Oxy platform: identity, signed records, API and SDK |
OxyHQ/PeableSDK |
Landing page for @peable.to/sdk. The source is here, in packages/sdk |