NFT CREDENTIALSPRIVACY-FIRSTVERIFY ONCEPROVE EVERYWHEREPROTOCOL V2.0 LIVEDECENTRALIZED IDENTITYZERO-KNOWLEDGE PROOFSSTELLAR BLOCKCHAINNFT CREDENTIALSPRIVACY-FIRSTVERIFY ONCEPROVE EVERYWHERE
// Developer Documentation

StellarID Docs

Full API reference, OAuth integration guides, ZK circuit docs, Fee Sponsorship, and Multi-Signature — everything you need to build with StellarID.

Quick Start

Get up and running with StellarID in 4 steps. Connect wallet → Get credential → Generate ZK proof → Verify anywhere.

Step 01[CONNECT YOUR WALLET]

Install Freighter wallet extension and connect to StellarID

bash
# 1. Install Freighter from https://www.freighter.app/
# 2. Create or import a Stellar testnet wallet
# 3. Fund it via Stellar Friendbot:
curl https://friendbot.stellar.org?addr=YOUR_WALLET_ADDRESS
Step 02[GET YOUR FIRST CREDENTIAL]

Link GitHub or LinkedIn to receive a verifiable on-chain credential NFT

bash
# GitHub OAuth flow
GET https://stellarid-api.onrender.com/api/v1/github-issuer/auth?stellarAddress=YOUR_STELLAR_ADDRESS

# LinkedIn OAuth flow  
GET https://stellarid-api.onrender.com/api/v1/linkedin-issuer/auth?stellarAddress=YOUR_STELLAR_ADDRESS

# Both flows return a JWT token and mint an NFT credential
Step 03[GENERATE A ZK PROOF]

Generate a zero-knowledge proof to prove a claim without revealing your data

bash
# POST to create a shareable proof
POST https://stellarid-api.onrender.com/api/v1/proofs
Authorization: Bearer YOUR_JWT_TOKEN
{
  "credentialId": "your-credential-id",
  "circuitType": "age_check",
  "publicInputs": { "threshold": 18 }
}

# Response includes a public share link + PDF download
Step 04[VERIFY A PROOF (PLATFORM INTEGRATION)]

Any platform can verify a StellarID proof using the public endpoint

bash
# Public verification — no auth required
GET https://stellarid-api.onrender.com/verify/YOUR_PROOF_TOKEN

# Or via API
POST https://stellarid-api.onrender.com/api/v1/verify
{
  "token": "YOUR_PROOF_TOKEN"
}

Core Concepts

Module: 01

Zero-Knowledge Proofs

Groth16 ZK-SNARKs via Circom. Proofs generated client-side — your data never leaves your device.

Module: 02

NFT Credentials

Non-transferable NFTs on Stellar containing cryptographic commitments (Poseidon hash), not raw data.

Module: 03

Selective Disclosure

Prove specific claims (age 18+, income bracket) without revealing underlying identity data.

Module: 04

Privacy by Design

Zero personal data stored on-chain. All credentials encrypted client-side. Blockchain stores only hashed commitments.

Module: 05

Fee Sponsorship

Gasless transactions — users never pay XLM gas fees. StellarID sponsors all credential minting costs via fee bump.

Module: 06

Multi-Signature Approval

High-value credentials require N-of-M signer approval. Full audit trail recorded on-chain for enterprise trust.

Architecture

StellarID uses a three-layer architecture separating client-side ZK operations, REST API logic, and blockchain interactions.

Client Layer
  • Next.js 14 Frontend
  • Zustand State
  • snarkjs Proof Generation
  • Freighter Wallet
API Layer
  • Express.js REST API
  • JWT + API Key Auth
  • Rate Limiting (Helmet)
  • GitHub & LinkedIn OAuth
Data Layer
  • PostgreSQL 15 + Indexes
  • Redis 7 Cache
  • Pinata IPFS Storage
  • Stellar Horizon API

OAuth Issuers

StellarID supports OAuth-based credential issuance. Users authenticate with a 3rd party and receive a verifiable NFT credential.

GitHub Issuer[ACTIVE]

Credential type: github_developer

  • GitHub username verified
  • Public repo count
  • Verified primary email
  • Account age & followers
LinkedIn Issuer[ACTIVE]

Credential type: linkedin_professional

  • Full name verified
  • Professional email
  • Profile picture
  • LinkedIn member ID
json
// GitHub credential claim data (stored on IPFS, never raw on-chain)
{
  "github_username": "iamomm-hack",
  "public_repos_count": 42,
  "account_created_year": 2020,
  "verified_email": true,
  "followers": 150
}

// LinkedIn credential claim data
{
  "linkedin_name": "Om Kumar",
  "linkedin_email": "user@example.com",
  "linkedin_email_verified": true,
  "linkedin_sub": "xAbCDef12345",
  "verified_at": "2026-03-30T00:00:00Z"
}

Advanced Features

Fee Sponsorship (Gasless TX)[ACTIVE]

Users never pay XLM gas fees. StellarID's sponsor account covers all transaction costs using Stellar's Fee Bump mechanism.

0.01 XLM

Max fee/tx

Fee Bump TX

Mechanism

0 XLM

User XLM needed

bash
# Check sponsor status
GET https://stellarid-api.onrender.com/api/v1/fee-sponsor/status

# Response:
{
  "sponsor": {
    "address": "G...",
    "balance": "100 XLM",
    "canSponsor": true,
    "transactionsRemaining": 10000
  }
}
Multi-Signature Approval[ACTIVE]

High-value credentials require N-of-M signers to approve before issuance.

  • Corporate ID: HR + Manager (2-of-2)
  • University degree: Dean + Department (2-of-3)
  • Professional license: Board + Examiner (3-of-5)
  • Financial credential: Bank + Compliance (2-of-2)
bash
# Create multi-sig request
POST https://stellarid-api.onrender.com/api/v1/multisig/request
Authorization: Bearer YOUR_JWT
{
  "credentialType": "corporate_identity",
  "ownerAddress": "G...",
  "requiredSigners": ["G...HR", "G...MANAGER"],
  "threshold": 2
}

# Signer adds their signature
POST https://stellarid-api.onrender.com/api/v1/multisig/sign/:requestId
{
  "signerPublicKey": "G...HR",
  "signature": "..."
}

API Reference

Base URL: https://stellarid-api.onrender.com/api/v1

Auth: Authorization: Bearer YOUR_JWT_TOKEN

Auth

POST/auth/connectConnect wallet & get JWT tokenPublic
GET/auth/meGet current user profileJWT

Credentials

POST/credentialsIssue a new credentialJWT
GET/credentials/myList your credentialsJWT
DELETE/credentials/:idDelete (unlink) a credentialJWT

Proofs

POST/proofsCreate shareable ZK proof recordJWT
GET/proofs/:tokenPublic proof verificationPublic
GET/proofs/:token/pdfDownload PDF certificatePublic

Issuers

GET/issuersList all trusted issuersPublic

OAuth

GET/github-issuer/authStart GitHub OAuth flowPublic
GET/github-issuer/callbackGitHub OAuth callback (auto)Public
GET/linkedin-issuer/authStart LinkedIn OAuth flowPublic
GET/linkedin-issuer/callbackLinkedIn OAuth callback (auto)Public

Fee Sponsorship

GET/fee-sponsor/infoFee sponsorship feature infoPublic
GET/fee-sponsor/statusSponsor account balance & statusPublic
POST/fee-sponsor/requestRequest gasless transactionJWT

Multi-Signature

GET/multisig/infoMulti-sig feature infoPublic
POST/multisig/requestCreate multi-sig credential requestJWT
POST/multisig/sign/:idAdd signature to requestJWT
GET/multisig/request/:idCheck multi-sig request statusJWT
GET/multisig/pendingList your pending requestsJWT

Admin

GET/admin/statsPlatform-wide analyticsJWT
GET/admin/activityLast 24h activity feedJWT
GET/admin/chart-data30-day trend chart dataJWT
GET/admin/top-issuersTop issuers by volumeJWT

Verify

POST/verifyVerify a ZK proof (platform API)Public

ZK Circuits

StellarID includes 4 pre-built Circom circuits. All circuits use Poseidon hashing and Groth16 proving.

age_check

Proves age ≥ threshold without revealing birthdate

Inputs: birthYear, currentYear, threshold

income_check

Proves income in range without revealing exact amount

Inputs: income, minIncome, maxIncome

residency_check

Proves residency in a country without revealing address

Inputs: countryCode, allowedCountries[]

membership_check

Proves group membership without revealing identity

Inputs: memberSecret, merkleProof, groupRoot

bash
# Compile a circuit
cd zk-circuits
circom age_check.circom --r1cs --wasm --sym -o build/

# Generate proving key (Groth16)
snarkjs groth16 setup build/age_check.r1cs pot12_final.ptau age_check_0000.zkey

# Export verification key
snarkjs zkey export verificationkey age_check_0000.zkey verification_key.json

# Generate proof (client-side in browser via snarkjs WASM)
const { proof, publicSignals } = await snarkjs.groth16.fullProve(
  { birthYear: 2000, currentYear: 2026, threshold: 18 },
  "age_check.wasm",
  "age_check_final.zkey"
);

Security

StellarID was built with security-first principles. See the full SECURITY.md checklist →

JWT Authentication

7-day expiring tokens. All private endpoints protected.

Helmet.js (HTTP Headers)

XSS, clickjacking, MIME-type sniffing protection.

Rate Limiting

20 req/min on auth, 100 req/min on verify endpoints.

SQL Injection Prevention

All queries use parameterized inputs via pg library.

No Secrets in Code

All keys in environment variables, never committed.

HTTPS Enforced

Render + Vercel enforce HTTPS on all production traffic.

Ready to Integrate[GO]

Start Building

Verify once, prove everywhere with StellarID.