API Documentation

Beta — The public API is in beta. Endpoints, payloads, and rate limits may change without notice until v1 is stabilized. Do not rely on it for production fund-gating without your own fallbacks.

Contents

  1. Overview
  2. Access
  3. Endpoints
  4. Responses & limits
  5. Integration

01Overview

Identity Prism exposes JSON endpoints for a wallet's computed identity and composite reputation, along with sybil-analysis and activity signals. These values are inputs for an integrating application; they are not a guarantee that a wallet belongs to a particular person.

All addresses are base58 Solana public keys. Reputation combines public wallet history with server-recorded application activity. Scores, tiers, and badges are computed by the application; an explicit user-signed action is required when a result is recorded on Solana.

02Access

The read routes below are served from the main application origin and are rate-limited. No separate client package is required: call the HTTP endpoints directly. The sybil-analysis route is public and rate-limited when no token is sent. A wallet-session JWT is optional; if an Authorization: Bearer <token> header is supplied, the token must be valid or the request is rejected.

03Endpoints

GET/api/v2/reputation?address=

The current composite endpoint. It returns the on-chain identity score (0–400), composite score (0–1000), tier, five-pillar breakdown, optional sybil analysis, and recent activity counters.

curl "https://identityprism.xyz/api/v2/reputation?address=SOLANA_ADDRESS"

200 OK
{
  "version": "2.1",
  "address": "SOLANA_ADDRESS",
  "onchainScore": 0,
  "baseScore": 0,
  "baseTier": "mercury",
  "baseMaxScore": 400,
  "compositeScore": 0,
  "compositeTier": "mercury",
  "compositeMaxScore": 1000,
  "scoreBreakdown": {
    "onchain": 0, "sybilTrust": 0, "humanProof": 0,
    "social": 0, "engagement": 0
  },
  "identity": { "score": 0, "maxScore": 400, "tier": "mercury", "badges": [], "badgeCount": 0 },
  "stats": { "solBalance": 0, "walletAgeDays": 0, "transactionCount": 0, "tokenCount": 0, "nftCount": 0 },
  "sybilAnalysis": null
}

GET/api/v1/reputation/:address

Returns the public composite profile for a known address: score, tier, breakdown, behavioral summary, sybil risk, and signal summary.

GET/api/reputation?address=

Legacy compatibility route. Its score, tier, and badges describe the on-chain identity pillar, whose score is 0–400; it also includes best-effort trust and wallet statistics.

GET/api/v1/reputation/:address/history

Returns the stored score-history entries for the address. Each entry includes the computed timestamp, score, and risk level.

GET/api/sybil/analysis?address=

Returns a wallet's sybil analysis. Without a token it is a public, IP-rate-limited request. A wallet-session JWT may be supplied as Authorization: Bearer <token>; an invalid supplied token is rejected rather than ignored.

GET /api/sybil/analysis?address=7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU

200 OK
{
  "address": "7xKX...gAsU",
  "trustScore": 92,
  "riskScore": 8,
  "riskLevel": "low",
  "verdict": {},
  "signals": []
}

POST/api/sybil/batch

Returns cached or graph-backed sybil summaries for up to 20 addresses. A missing analysis is reported as not_analyzed.

POST /api/sybil/batch
Content-Type: application/json

{ "addresses": ["SOLANA_ADDRESS"] }

GET/api/recovery/status?address=

Returns server-observed recovery activity. The response separates the requested activity bonus from the applied bonus, which is capped by the current sybil verdict and by the composite trust rules.

POST/api/reputation/batch

Legacy batch lookup for 1–5 addresses. GET /api/reputation/compare?a=&b= compares two addresses.

Errors — Failed requests return JSON with the matching HTTP status: 400 for invalid input, 401 for an invalid supplied token or a missing session on routes that require one, 404 for an unknown address, and 429 when a route is rate limited.

04Rate Limits

Limits are route-specific and primarily IP-based. The v2 reputation route allows 10 requests per minute by default; the legacy inline reputation route enforces a one-second per-IP cooldown, and public v1 reads have their own per-minute limit. The server may apply stricter limits. On exhaustion the API returns 429 Too Many Requests; clients should honor any Retry-After or retry metadata returned by the route.

05Integration

No official client package is currently published and no package installation is required for the HTTP API. Use the platform's fetch or another HTTPS client, validate the address, set a timeout, and treat sybil results as signals rather than a permanent identity decision.

const response = await fetch(
  `https://identityprism.xyz/api/v2/reputation?address=${encodeURIComponent(address)}`,
);
if (!response.ok) throw new Error(`Identity Prism returned ${response.status}`);
const profile = await response.json();
console.log(profile.compositeScore, profile.compositeTier);

For protocol background and the scoring model, read the whitepaper. Questions: [email protected].