Identity and payments for Bitcoin-native applications.
No accounts. No KYC. No payment processor.
Portal lets users authenticate and pay using their Nostr identity through the Portal mobile app. You run a single Docker container (sdk-daemon) and call its REST API from any language.
Your backend ←— REST API —→ sdk-daemon ←— Nostr —→ Portal app
- Authentication — passwordless login via Nostr
- Age verification — browser-based identity verification with cryptographic proof
- Payments — single, recurring, invoice-based; BTC or fiat
- JWTs — signed by the user's Nostr key
- Cashu tokens — mint, burn, and transfer ecash
- Wallets — NWC or Breez for outbound payments
docker run -d -p 3000:3000 \
-e PORTAL__AUTH__AUTH_TOKEN=$(openssl rand -hex 32) \
-e PORTAL__NOSTR__PRIVATE_KEY=<your-64-char-hex-key> \
getportal/sdk-daemon:0.4.1Then follow the Quick Start guide or jump to the REST API reference.
| Language | Install |
|---|---|
| TypeScript / JS | npm install portal-sdk |
| Java | JitPack |
| Any language | REST API — no SDK needed |
Full docs: portaltechnologiesinc.github.io/lib
Guides: Authentication · Age Verification · Payments · Cashu · JWT · Docker
| Crate | Description |
|---|---|
portal-rest |
REST API daemon |
portal |
Core protocol and conversation logic |
portal-app |
App runtime and wallet integration |
portal-wallet |
Wallet backends (NWC, Breez) |
portal-rates |
Fiat/BTC exchange rates |
clients/ts |
TypeScript SDK |
portal-cli |
Dev/testing CLI tools |
MIT — see LICENSE