OIO AUTH
Login with SOBTC.NET
Zero-KYC identity verification. No passwords. No email. No data shared.
Allow your users to authenticate using their BTC ID and BTC KEY. Your site receives only: verified status and username. No personal data. No keys. No tracking.
HOW IT WORKS
01
User enters their BTC ID and BTC KEY on your site
02
Your server sends them to POST /auth/verify
03
SOBTC.NET verifies and returns verified: true/false + username
04
You store the username — never the key
RULES FOR DEVELOPERS
✓ Never store the BTC KEY — verify and discard it immediately
✓ Never transmit BTC KEY over unencrypted connections (use HTTPS)
✓ Never share verification results with third parties
✓ Inform users you are using OIO Auth before asking for credentials
✓ Store only the username — not the BTC ID or any other credential
Misuse of OIO Auth violates platform terms and will result in account suspension.
API REFERENCE
ENDPOINT
POST https://sobtc.net/auth/verify
REQUEST BODY (JSON)
{
"btc_id": "OIO-xxxxxxxx",
"btc_key": "BTC-KEY-xxxx-xxxx-..."
}
"btc_id": "OIO-xxxxxxxx",
"btc_key": "BTC-KEY-xxxx-xxxx-..."
}
RESPONSE — SUCCESS
{"verified": true, "username": "btc", "btc_id": "OIO-xxxxxxxx"}
RESPONSE — FAILURE
{"verified": false, "error": "invalid credentials"}
CODE EXAMPLES
cURL
curl -X POST https://sobtc.net/auth/verify \
-H "Content-Type: application/json" \
-d '{"btc_id":"OIO-xxxxxxxx","btc_key":"BTC-KEY-..."}'
-H "Content-Type: application/json" \
-d '{"btc_id":"OIO-xxxxxxxx","btc_key":"BTC-KEY-..."}'
JavaScript / Node.js
const res = await fetch('https://sobtc.net/auth/verify', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({ btc_id, btc_key })
});
const { verified, username } = await res.json();
if (verified) {
// login user with username only — discard btc_key
}
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({ btc_id, btc_key })
});
const { verified, username } = await res.json();
if (verified) {
// login user with username only — discard btc_key
}
Python
import requests
r = requests.post('https://sobtc.net/auth/verify',
json={'btc_id': btc_id, 'btc_key': btc_key})
data = r.json()
if data['verified']:
username = data['username'] # store only this
r = requests.post('https://sobtc.net/auth/verify',
json={'btc_id': btc_id, 'btc_key': btc_key})
data = r.json()
if data['verified']:
username = data['username'] # store only this
EMBEDDABLE WIDGET
Copy and paste into any HTML page — works standalone:
<!-- SOBTC.NET Login Widget -->
<div id="oio-auth" style="max-width:320px;background:#0a0a0a;border:1px solid #1e1e1e;padding:20px;font-family:monospace">
<a href="https://sobtc.net" rel="dofollow" style="display:flex;align-items:center;gap:8px;text-decoration:none;margin-bottom:16px">
<img src="https://sobtc.net/style/logo.png" width="28" height="28" style="border-radius:50%">
<div>
<div style="font-size:12px;font-weight:bold;color:#f7931a">SOBTC.NET</div>
<div style="font-size:9px;color:#888">Bitcoin Donations Network</div>
</div>
</a>
<input id="oid" placeholder="OIO-xxxxxxxx" style="width:100%;background:#000;border:1px solid #1e1e1e;color:#fff;padding:8px;margin-bottom:8px;box-sizing:border-box">
<input id="okey" type="password" placeholder="BTC-KEY-..." style="width:100%;background:#000;border:1px solid #1e1e1e;color:#fff;padding:8px;margin-bottom:12px;box-sizing:border-box">
<button onclick="oioVerify()" style="width:100%;background:#f7931a;border:none;color:#000;padding:10px;font-weight:bold;cursor:pointer">LOGIN WITH SOBTC.NET</button>
<div id="oio-result" style="margin-top:10px;font-size:11px"></div>
</div>
<script>
async function oioVerify(){
const r=document.getElementById("oio-result");
const res=await fetch("https://sobtc.net/auth/verify",{
method:"POST",headers:{"Content-Type":"application/json"},
body:JSON.stringify({btc_id:document.getElementById("oid").value,
btc_key:document.getElementById("okey").value})
});
const d=await res.json();
if(d.verified){
r.style.color="#0a0";
r.textContent="✅ Welcome, @"+d.username;
// TODO: handle login — d.username is verified
} else {
r.style.color="#e55";
r.textContent="❌ "+d.error;
}
}
</script>
LIVE DEMO
This demo calls POST /auth/verify directly from your browser. Your credentials are not stored.