```bash #!/usr/bin/env bash # ============================================================ # SUBTC GATEWAY V4.2 — Bitcoin Only # Full curl reference # SUBTC Protocol — Bitcoin curl API # Gateway V4.2 · Bitcoin Only · Stateless · Idempotent · curl-first # API CURL POST ONLY : https://subtc.net/api # ============================================================ BASE="https://api.subtc.net" # ───────────────────────────────────────────── # Health # ───────────────────────────────────────────── curl -sS "$BASE/health" # ───────────────────────────────────────────── # Key # ───────────────────────────────────────────── RESP=$(curl -sS -X POST "$BASE/v1/btc?mode=key_create" \ -H "Content-Type: application/json") KEY=$(echo "$RESP" | sed -n 's/.*"key":"\([^"]*\)".*/\1/p') echo "KEY=$KEY" curl -sS -X POST "$BASE/v1/btc?mode=key_status" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" # ───────────────────────────────────────────── # Wallet # ───────────────────────────────────────────── RESP=$(curl -sS -X POST "$BASE/v1/btc?mode=wallet_create" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d '{"net":"test"}') WID=$(echo "$RESP" | sed -n 's/.*"wallet_id":"\([^"]*\)".*/\1/p') echo "WID=$WID" curl -sS -X POST "$BASE/v1/btc?mode=wallet_list" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" # ───────────────────────────────────────────── # Address # ───────────────────────────────────────────── RESP=$(curl -sS -X POST "$BASE/v1/btc?mode=wallet_receive" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d "{\"wallet_id\":\"$WID\"}") ADDR=$(echo "$RESP" | sed -n 's/.*"address":"\([^"]*\)".*/\1/p') echo "ADDR=$ADDR" # ───────────────────────────────────────────── # Balance # ───────────────────────────────────────────── curl -sS -X POST "$BASE/v1/btc?mode=wallet_balance" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d "{\"wallet_id\":\"$WID\"}" # ───────────────────────────────────────────── # Send # ───────────────────────────────────────────── curl -sS -X POST "$BASE/v1/btc?mode=wallet_send" \ -H "X-SUBTC-KEY: $KEY" \ -H "X-SUBTC-IDEMPOTENCY: send-$(date +%s)" \ -H "Content-Type: application/json" \ -d "{\"wallet_id\":\"$WID\",\"to\":\"tb1qDESTINATION\",\"amount_sat\":50000}" # ───────────────────────────────────────────── # Inbox # ───────────────────────────────────────────── curl -sS -X POST "$BASE/v1/btc?mode=inbox_create" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d "{\"wallet_id\":\"$WID\",\"expected_sat\":20000}" # ───────────────────────────────────────────── # Wait — Long Poll # ───────────────────────────────────────────── curl -sS -X POST "$BASE/v1/btc?mode=wallet_wait_event" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d "{\"wallet_id\":\"$WID\",\"address\":\"$ADDR\",\"expected_sat\":20000,\"timeout_sec\":300}" # ───────────────────────────────────────────── # Wait — Webhook # ───────────────────────────────────────────── curl -sS -X POST "$BASE/v1/btc?mode=wallet_wait_event" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d "{\"wallet_id\":\"$WID\",\"address\":\"$ADDR\",\"expected_sat\":20000,\"timeout_sec\":600,\"callback_url\":\"https://yourserver.com/webhook\"}" # ───────────────────────────────────────────── # Poll — Single Check # ───────────────────────────────────────────── curl -sS -X POST "$BASE/v1/btc?mode=wallet_poll" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d "{\"wallet_id\":\"$WID\",\"address\":\"$ADDR\",\"expected_sat\":20000}" # ───────────────────────────────────────────── # Poll — Loop # ───────────────────────────────────────────── while true; do RESP=$(curl -sS -X POST "$BASE/v1/btc?mode=wallet_poll" \ -H "X-SUBTC-KEY: $KEY" \ -H "Content-Type: application/json" \ -d "{\"wallet_id\":\"$WID\",\"address\":\"$ADDR\",\"expected_sat\":20000}") REACHED=$(echo "$RESP" | sed -n 's/.*"reached":\([a-z]*\).*/\1/p') RECEIVED=$(echo "$RESP" | sed -n 's/.*"received_sat":\([0-9]*\).*/\1/p') echo "received=$RECEIVED reached=$REACHED" [ "$REACHED" = "true" ] && echo "✅ confirmed" && break sleep 3 done ``` # Atomic Units & Fee Philosophy # 1 BTC = 100,000,000 sat # SUBTC uses integer atomic units for BTC # Min send amounts: # BTC: 50,000 SAT # Service + network fee: 3% # Deterministic rounding, idempotency, simplified auditing