SafeSend Developer API

Risk score any wallet address

One endpoint. 7 chains. Sub-500ms response. Embed wallet fraud detection directly into your product — no blockchain infrastructure required.

7
Supported chains
<500ms
Typical response
1–10
Risk score scale
REST
Simple HTTP API
Getting Started

Overview

SafeSend's API lets you integrate wallet risk scoring into any product. Submit a wallet address, receive a structured risk assessment — including on-chain balance, transaction history, scam database matches, and a 1–10 risk score.

Supported networks: ETH, BTC, SOL, POLYGON, BASE, ARBITRUM, OPTIMISM.

Base URL

base url
https://safesend-2e7y.polsia.app

Quick example

curl
curl -X POST https://safesend-2e7y.polsia.app/api/check \
  -H "Content-Type: application/json" \
  -H "X-API-Key: sk_your_api_key" \
  -d '{"address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7Divf1"}'

Authentication

API Keys

All API requests require a key passed in the X-API-Key header. Keys are issued per plan tier and scoped to your account.

🔑 Get your key: Subscribe to a Pro or Business plan below. Your API key is emailed instantly after checkout. Free tier keys are available by signing up — no credit card required.

Sending your key

http header
X-API-Key: sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Key format

PrefixEnvironmentUsage
sk_live_ Production Real checks, counted against your quota
sk_test_ Sandbox Returns mock scores — does not count against quota

Rate Limits & Pricing

Plans

Checks are counted per calendar day (UTC). Exceeding your daily limit returns 429 Too Many Requests.

100
checks / day
Free
10,000
checks / day
Pro
unlimited
Business
Free
$0 / mo
100 checks / day
  • All 7 chains
  • Risk score + factors
  • Scam database lookup
  • Community support
Get free key
Business
$199 / mo
Unlimited checks
  • All 7 chains
  • Risk score + factors
  • Scam database lookup
  • Webhook notifications
  • Dedicated support
  • Custom SLA
Contact us

API Reference

POST /api/check

Submit a wallet address for risk assessment. Returns a 1–10 risk score, risk level, on-chain data, and a breakdown of contributing risk factors.

POST /api/check Analyze a wallet address

Request body

ParameterTypeRequiredDescription
address string required The wallet address to analyze. Auto-detected for ETH/BTC/SOL formats.
network string optional Override network for EVM addresses. One of: POLYGON, BASE, ARBITRUM, OPTIMISM. Omit for ETH, BTC, SOL — auto-detected.

Response fields

addressstringThe wallet address as submitted
networkstringHuman-readable network name (e.g. "Ethereum")
networkCodestringMachine-readable code: ETH, BTC, SOL, POLYGON, BASE, ARBITRUM, OPTIMISM
isValidbooleanWhether the address passes format validation
isScambooleanMatch found in community scam database
riskScorenumber1–10 risk score. 1 = very safe, 10 = high risk / confirmed scam
riskLevelstringlow, medium, high, or critical
factorsobjectBreakdown of individual risk signals that contributed to the score
balancestringHuman-readable balance with units (e.g. "1.234 ETH")
transactionCountnumberTotal number of transactions on this address
isContractbooleanWhether the address is a smart contract (EVM only)
checkedAtstringISO 8601 timestamp of when the check ran

Example response

json
{
  "address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7Divf1",
  "network": "Bitcoin",
  "networkCode": "BTC",
  "isValid": true,
  "isScam": false,
  "riskScore": 2,
  "riskLevel": "low",
  "factors": {
    "validAddress": true,
    "hasTransactionHistory": true,
    "inScamDatabase": false,
    "isNewWallet": false
  },
  "balance": "72.62 BTC",
  "transactionCount": 3402,
  "isContract": false,
  "checkedAt": "2026-05-07T12:30:00.000Z"
}

GET /api/recent-checks

Returns the 20 most recent anonymized wallet checks. Useful for building community-activity feeds or trust indicators in your UI.

GET /api/recent-checks Public — no auth required

No parameters. Returns an array of recent check summaries (addresses are partially masked for privacy).


Code Examples

Integration examples

Copy-paste ready examples for the most common environments.

cURL

bash
# Check an Ethereum address
curl -X POST https://safesend-2e7y.polsia.app/api/check \
  -H "Content-Type: application/json" \
  -H "X-API-Key: sk_live_xxxxxxxxxxxxxxxx" \
  -d '{"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"}'

# Check a Polygon address (same 0x format, specify network override)
curl -X POST https://safesend-2e7y.polsia.app/api/check \
  -H "Content-Type: application/json" \
  -H "X-API-Key: sk_live_xxxxxxxxxxxxxxxx" \
  -d '{"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "network": "POLYGON"}'

Node.js / JavaScript

javascript
// Using native fetch (Node 18+ or browser)
async function checkWallet(address, network) {
  const res = await fetch('https://safesend-2e7y.polsia.app/api/check', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': process.env.SAFESEND_API_KEY
    },
    body: JSON.stringify({ address, network })
  });

  if (!res.ok) {
    throw new Error(`SafeSend API error: ${res.status}`);
  }

  return res.json();
}

// Example: block high-risk withdrawals in an exchange
async function validateWithdrawal(toAddress) {
  const risk = await checkWallet(toAddress);

  if (risk.riskScore >= 7 || risk.isScam) {
    throw new Error('Withdrawal blocked: high-risk destination address');
  }

  return { approved: true, riskScore: risk.riskScore };
}

Python

python
import requests
import os

SAFESEND_API_KEY = os.environ["SAFESEND_API_KEY"]
BASE_URL = "https://safesend-2e7y.polsia.app"

def check_wallet(address: str, network: str = None) -> dict:
    payload = {"address": address}
    if network:
        payload["network"] = network

    response = requests.post(
        f"{BASE_URL}/api/check",
        json=payload,
        headers={
            "X-API-Key": SAFESEND_API_KEY,
            "Content-Type": "application/json"
        },
        timeout=10
    )
    response.raise_for_status()
    return response.json()

# DeFi protocol: flag high-risk senders before they interact with your contract
def is_safe_sender(wallet_address: str) -> bool:
    result = check_wallet(wallet_address)
    return result["riskScore"] <= 6 and not result["isScam"]

Integration Guides

Use cases

How teams embed SafeSend into their products.

💸

Embed in your wallet app

Show a risk indicator before users confirm any send. Block or warn when the destination scores above your threshold. Works on ETH, Polygon, Base, Arbitrum, Optimism, SOL, BTC.

🏦

Exchange withdrawal flow

Check every withdrawal destination before funds leave. Auto-reject confirmed scam addresses. Surface risk details for manual review on borderline scores.

DeFi protocol guard

Pre-screen wallets interacting with your contracts. Flag high-risk senders before they participate in governance, yield vaults, or liquidity pools.

🔍

Compliance & due diligence

Add wallet screening to your KYC/AML pipeline. Score wallet addresses from new user signups. Integrate with your existing risk scoring infrastructure.

Risk score thresholds — recommended defaults

ScoreLevelRecommended action
1–3 Low Allow — established wallet with normal activity
4–6 Medium Warn user — new wallet or limited history
7–9 High Require confirmation or block — multiple risk signals
10 Critical Block — confirmed scam address in database

Error Handling

Errors

SafeSend uses standard HTTP status codes. Error responses include a JSON body with an error field.

StatusCodeMeaning
200 Check completed successfully
400 bad_request Missing or invalid address. Check the error and hint fields.
401 unauthorized Missing or invalid API key
429 rate_limited Daily quota exceeded. Resets at midnight UTC.
500 server_error Transient error. Retry with exponential backoff.

Error response shape

json
{
  "error": "Unrecognized address format",
  "hint": "Supported: Ethereum / Polygon / Base / Arbitrum / Optimism (0x...), Bitcoin (1.../3.../bc1...), Solana"
}

Get Started

Get your API key

Free tier issues instantly. 100 checks/day. No credit card.

Request a free API key

Takes 5 seconds. Key issued immediately.

By signing up you agree to our terms. Free tier: 100 requests/day.

Pro
$49 / mo
10,000 checks / day
  • All 7 chains
  • Priority support
  • 99.9% uptime SLA
Get Pro key →
Business
$199 / mo
Unlimited + webhooks
  • All 7 chains
  • Webhook notifications
  • Dedicated support
  • Custom SLA
Contact sales

📬 Enterprise? Email api@safesend-2e7y.polsia.app for volume pricing, SLAs, and custom integration support.