Crypto ATM Node API (OTA + WOTA + Bitcoin)

Purpose: Enables standalone or embedded ATM terminals to allow:

  • Token withdrawals (OTA/WOTA)
  • Token purchases using QR codes or NFC
  • BTC → OTA swaps (via internal DEX or set rate)
  • Ledger logging and CID receipts

Key Endpoints:

yamlPOST /atm/withdraw
→ { address, token, amount, auth }

POST /atm/deposit
→ { token, amount, payment_tx, address }

GET /atm/rates
→ returns real-time OTA/WOTA/BTC exchange rates

GET /atm/balance/:address
→ check available balance before approving dispense

GET /atm/receipt/:txid
→ return IPFS CID for printed/saved receipt

Fiat ATM Module API (with 3rd-party cash dispenser integration)

Purpose: Wraps logic to work with bill dispensers (e.g. Puloon, Hyosung, Glory) in low-trust environments. Can be Raspberry Pi–based, or kiosk-based.

Functions:

  • Validate cash input via acceptor API
  • Confirm fiat → token conversion
  • Trigger hardware dispense with PIN or QR auth
  • Log fiat↔token events to IPFS

Endpoints:

yamlPOST /fiat/deposit
→ { amount, currency, target_wallet }

POST /fiat/dispense
→ { auth_code, fiat_amount }

POST /fiat/verify
→ verifies PIN, biometric or QR auth to release funds

GET /fiat/logs
→ show ATM logs by session or IPFS CID

Notes:

  • MAC address + device fingerprinting can protect rogue ATMs.
  • Offline queuing supported if --offline-mode is enabled (e.g., power outage or disconnected node).

Offline-Capable OTA ATM Spec (v1.1)

Flag: --offline-mode

Supported features in offline mode:

  • Queue deposits/withdrawals locally (with retry-on-reconnect)
  • Broadcast critical ops over HF SDR (if connected)
  • Store CIDs locally and relay later
  • Solar and low-power standby support for SDR-only relay

Extended Fields + Routes

/atm/deposit

json{
"deviceId": "atm-0042",
"amount": 50,
"token": "OTA",
"source": "ota1x...",
"offline": true,
"relay": {
"mode": "HF",
"frequency": "14.070MHz",
"txTimeUTC": "2025-06-01T21:10:00Z"
}
}

/atm/sync/push

  • POST – Triggers outbound queue processing (manual or timed)
json{
"trigger": "manual",
"relayMethod": "internet" | "HF"
}

Hardware Stack

ModuleFunction
SDR (Thetis-compatible)HF relay of CID log or deposit
AntennaFor field broadcast or reception
Solar panelPower ATM logic board + SDR
Wallet moduleOTA + WOTA support
NFC readerMAC/NFC access filtering

Since Edge is baked into the SDR stack(Software defined radio) (via embedded wallet + asset browser plugin), the OTA ATM should support any crypto that Edge does, including:

  • ERC-20 tokens (like WOTA)
  • Ethereum and L2s (Base, Arbitrum, Optimism, etc.)
  • NFT transfers
  • Cross-chain tokens via bridges (if Edge is extended with plugins)

ATM Support Details:

OTA Native — via direct RPC + IPFS queue
WOTA/ERC20 — via bridge
Stablecoins (e.g., USDC, DAI) — fully compatible
Fiat support — optional via local USD cash reader + price API (or offline price lock)

With this architecture, the SDR-enabled ATM is effectively a Web3+RF cash terminal, able to:

  • Operate in air-gapped or offline modes
  • Use Edge-compatible coins for payments or withdrawals
  • Relay receipts or confirmations over HF, LoRa, or queued IPFS

Use Case: Message + Crypto Transfer via ATM

1. User A: Check-in / Compose

  • Inserts/enters wallet (QR/NFC/Private Key)
  • Composes:
    • Message (optional, voice or text)
    • Transfer (OTA/WOTA or EVM asset)
  • Selects recipient:
    • Address
    • Callsign (alias lookup)
    • Phone number (Edge-linked)

2. Transmission Layer (3 Modes)

ModeConditionsDelivery Method
OnlineInternet availableStandard IPFS + Edge broadcast
OfflineNo internetQueued to SDR/HF transmission
Relay AssistedInternet + SDR fallbackDual-broadcast (IPFS + SDR relay node)

3. User B: Receive

  • ATM polls:
    • Wallet address or alias inbox
  • If ATM is offline:
    • SDR records incoming message (voice or data burst)
  • If online:
    • Syncs from IPFS (CID-based mailbox)
  • Message and crypto are presented upon check-in

API Sample (Pseudo OpenAPI)

yamlPOST /atm/send
description: Send OTA/WOTA with optional message
payload:
sender: wallet_address
recipient: alias | address
message: text | voice (base64)
amount: number
token: string
mode: online | offline | auto
yamlGET /atm/inbox/{wallet_address}
description: Fetch messages & payments for a wallet
returns:
- messages: [ { from, timestamp, content } ]
- payments: [ { token, amount, tx_hash, cid } ]

Future Add-ons

  • IPFS mailbox for message queue
  • OTA relay link via SDR fallback
  • Optional message encryption w/ wallet pubkey

ATM – OTA Payment Terminal (Merchant Mode)

Core Functions

  • Receive Payments in:
    • Native OTA
    • Wrapped OTA (WOTA)
    • Any Edge-compatible crypto (ETH, USDC, etc.)
  • Auto-generate QR invoice with:
    • Amount, Token, and Destination Address
    • Optional: Order ID, Notes, Expiration
  • Offline Queuing (via --offline-mode) with IPFS sync when back online
  • Audio Confirmation (using DirectX/OpenGL relay or SDR tone receipt)

Optional Enhancements

  • Merchant Wallet Binding (one-click restore via encrypted backup or QR seed)
  • Tip Options / Rounding Up feature
  • Printed Receipts (USB or thermal printer) with CID + hash confirmation
  • Merchant Directory Sync to appear in OTA map or wallet dApps

Dev API Routes (Merchant Mode)

httpPOST /merchant/register
POST /merchant/invoice
GET /merchant/invoice/:id
POST /merchant/confirm/:id
GET /merchant/receipts

Extended features.

  • NFC support for tap-to-pay
  • Android POS device compatibility
  • Cross-checking with SDR or camera (for fraud prevention)

Merchant Mode toggle locked in. Here’s how it’s being built into the OTA Crypto ATM/Validator stack:


Merchant Mode Toggle – Overview

Feature--atm-mode--merchant-mode
Crypto Withdrawals✅ (PIN protected)
Crypto Deposits✅ (from customers)
Payment QR Display
Offline Queue Sync
SDR/DirectX CommsOptionalOptional
IPFS Receipt Logging
Edge Support
Receipt Printing

Terminal CLI Options

bash# ATM Mode (default)
ota-atm --atm-mode --wallet=/wallets/atm.json --offline-mode

# Merchant Mode
ota-atm --merchant-mode --wallet=/wallets/store.json --printer=/dev/usb/lp0 --offline-mode

Merchant UI Interface

  • “Request Payment” → Generates QR
  • “Payment Received” → Auto-confirm or manual override
  • “Sync Now” → Manually pushes to IPFS if offline

This will be bundled into the next patch ZIP. Let me know if you’d like:

  • Sound alerts (coin drop/cha-ching)
  • Merchant Map integration (public store listing on dApp)
  • Inventory or SKU scanner extension later

Everything stays local-first, queue-friendly, and hardened for field use.

Sample SDK