Overview

The WorldScore API allows you to verify users and access their reputation scores within the World (formerly Worldcoin) ecosystem. With 65,000+ verified unique humans, WorldScore provides the most comprehensive reputation layer for World mini apps.

Base URL: https://developer.worldscore.world/api/v1

Authentication

All API endpoints (except /stats) require an API key. Include your key in the X-API-Key header:

curl -H "X-API-Key: ws_live_your_api_key_here" \ https://developer.worldscore.world/api/v1/score?wallet=0x...

You can also pass the key as a query parameter: ?api_key=ws_live_...(less secure, not recommended for production).

Rate Limits

The free tier allows 100 requests per minute per API key. Rate limit information is included in every response via headers:

HeaderDescription
X-RateLimit-LimitMaximum requests per window (100)
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetISO timestamp when the window resets

Score Lookup

The primary endpoint for retrieving a user's complete WorldScore data including reputation score, verified credentials, and score breakdown.

GET/api/v1/score

Parameters

ParameterTypeRequiredDescription
walletstringRequiredThe user's World wallet address (0x...)

Response

{
  "success": true,
  "data": {
    "walletAddress": "0x1234...abcd",
    "username": "alice_world",
    "totalScore": 750,
    "isVerified": true,
    "verificationLevel": "high",   // "low" | "medium" | "high"
    "credentials": {
      "orbVerified": true,          // 150 points
      "emailVerified": true,        // 40 points
      "phoneVerified": true,        // 60 points
      "externalWallet": {
        "connected": true,
        "points": 100               // 10-100 based on balance
      },
      "babTokenHolder": false,      // 100 points
      "twitterVerified": true,      // 50 points
      "walletAnalysis": {
        "completed": true,
        "points": 60                // 10-90 based on WLD balance
      },
      "referrals": {
        "count": 3,
        "points": 50                // up to 100
      }
    },
    "scoreBreakdown": {
      "orbVerification": 150,
      "externalWallet": 100,
      "emailVerification": 40,
      "phoneVerification": 60,
      "twitterVerification": 50,
      "babToken": 0,
      "walletAnalysis": 60,
      "referrals": 50
    },
    "memberSince": "2026-01-15T10:30:00.000Z",
    "lastActive": "2026-07-29T14:22:00.000Z"
  }
}

Quick Verify

A lightweight endpoint for simple boolean verification checks. Use this when you only need to know if a user is registered and their score level.

GET/api/v1/verify

Parameters

ParameterTypeRequiredDescription
walletstringRequiredThe user's World wallet address (0x...)

Response

{
  "verified": true,
  "score": 750,
  "level": "high",
  "username": "alice_world"
}

Public Stats

Aggregate statistics about the WorldScore network. No API key required.

GET/api/v1/stats

Response

{
  "success": true,
  "data": {
    "totalUsers": 65471,
    "averageScore": 520,
    "verifications": {
      "emails": 48230,
      "phones": 31540,
      "babTokens": 8920
    },
    "scoreRange": { "min": 300, "max": 999 },
    "lastUpdated": "2026-07-30T07:00:00.000Z"
  }
}

Score Breakdown

WorldScore ranges from 300 to 999. Here's how each verification credential contributes to the total score:

CredentialMax PointsDetails
ORB Verification150Must be verified via World Orb iris scan
External Wallet100$0 balance = 10pts, $1-$50 = 50pts, $50+ = 100pts
BAB Token100Must hold Binance BAB token in connected wallet
Wallet Analysis900 WLD = 10pts, 1-20 WLD = 30pts, 21-50 WLD = 60pts, 50+ WLD = 90pts
Phone Verification60Verify mobile number with OTP
X/Twitter50Connect and verify X/Twitter account
Email Verification40Verify email address
Referrals1001st = 10pts, 2nd = 15pts, 3rd = 25pts, 4th = 50pts

Base score: All users start with 300 points (ORB verified through World ID). Maximum achievable score is 999 with all verifications and 4+ referrals.

Verification Levels

LevelScore RangeRecommended Use
Low300 – 499Basic access, limited features
Medium500 – 699Standard access, moderate trust features
High700 – 999Full access, low/zero-collateral, premium features

Code Examples

JavaScript / Node.js

const response = await fetch(
  "https://developer.worldscore.world/api/v1/score?wallet=0x1234...abcd",
  {
    headers: {
      "X-API-Key": "ws_live_your_api_key_here",
    },
  }
);

const data = await response.json();

if (data.success && data.data) {
  console.log("Score:", data.data.totalScore);
  console.log("Level:", data.data.verificationLevel);
  console.log("ORB Verified:", data.data.credentials.orbVerified);
  
  // Gate access based on score
  if (data.data.totalScore >= 600) {
    console.log("User qualifies for premium features!");
  }
}

Python

import requests

response = requests.get(
    "https://developer.worldscore.world/api/v1/score",
    params={"wallet": "0x1234...abcd"},
    headers={"X-API-Key": "ws_live_your_api_key_here"}
)

data = response.json()

if data.get("success") and data.get("data"):
    score = data["data"]["totalScore"]
    level = data["data"]["verificationLevel"]
    print(f"WorldScore: {score} ({level})")
    
    # Check specific credentials
    creds = data["data"]["credentials"]
    if creds["orbVerified"] and creds["emailVerified"]:
        print("User has strong identity verification")

cURL

# Full score lookup
curl -X GET \
  "https://developer.worldscore.world/api/v1/score?wallet=0x1234...abcd" \
  -H "X-API-Key: ws_live_your_api_key_here"

# Quick verification check
curl -X GET \
  "https://developer.worldscore.world/api/v1/verify?wallet=0x1234...abcd" \
  -H "X-API-Key: ws_live_your_api_key_here"

# Public stats (no API key needed)
curl -X GET "https://developer.worldscore.world/api/v1/stats"

Error Handling

The API uses standard HTTP status codes. All error responses include an error field with a human-readable message.

StatusMeaningExample
200SuccessRequest completed. User may or may not exist.
400Bad RequestMissing wallet parameter
401UnauthorizedMissing or invalid API key
429Rate LimitedExceeded 100 requests/minute
500Server ErrorInternal error — try again later
// Error response format
{
  "error": "API key required",
  "message": "Include your API key in the X-API-Key header or as api_key query parameter"
}