{
  "name": "BentCrypto Agent API",
  "description": "Machine-readable crypto intelligence, paid per request with x402. Only the Token Risk API is live today (limited beta); all other products are not live.",
  "site": "https://bentcrypto.com",
  "docs": "https://bentcrypto.com/docs",
  "llmsTxt": "https://bentcrypto.com/llms.txt",
  "openapi": "https://bentcrypto.com/openapi.json",
  "baseUrl": "https://bentcrypto-x402-production.up.railway.app",
  "preferredBaseUrl": "https://api.bentcrypto.com",
  "preferredBaseUrlOperational": false,
  "apiVersion": "v1",
  "payment": {
    "protocol": "x402",
    "x402Version": 2,
    "scheme": "exact",
    "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
    "networkLabel": "Solana Mainnet",
    "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "assetSymbol": "USDC",
    "assetDecimals": 6,
    "payTo": "5bZdrGYAbHdbVCqw7RVUpxma22kJehaQCHhp4nHuHCyy",
    "challengeHeader": "payment-required",
    "settlementHeader": "payment-response"
  },
  "rateLimit": {
    "enforced": false,
    "note": "No public rate limit is enforced today. Per-payer rate limiting is planned."
  },
  "products": [
    {
      "id": "token-risk",
      "name": "Token Risk API",
      "status": "beta",
      "live": true,
      "method": "GET",
      "path": "/v1/token/risk",
      "url": "https://bentcrypto-x402-production.up.railway.app/v1/token/risk",
      "docs": "https://bentcrypto.com/apis/token-risk",
      "chains": [
        "solana"
      ],
      "parameters": {
        "chain": {
          "in": "query",
          "required": true,
          "enum": [
            "solana"
          ]
        },
        "address": {
          "in": "query",
          "required": true,
          "description": "Solana mint address"
        }
      },
      "price": {
        "amount": "10000",
        "asset": "USDC",
        "decimals": 6,
        "usd": "0.01",
        "per": "request"
      },
      "responseFields": [
        "success",
        "chain",
        "address",
        "asset_context.type",
        "asset_context.registry_match",
        "token.name",
        "token.symbol",
        "risk.score",
        "risk.level",
        "risk.provisional",
        "risk.base_score",
        "risk.floor_applied",
        "risk.override_applied",
        "confidence.score",
        "confidence.level",
        "confidence.coverage_percent",
        "confidence.source_agreement_percent",
        "confidence.freshness_percent",
        "categories.authority_control",
        "categories.holder_concentration",
        "categories.liquidity_tradability",
        "categories.launch_manipulation",
        "categories.maturity_trust",
        "signals",
        "holder_concentration",
        "warnings",
        "summary",
        "metadata.api_schema_version",
        "metadata.risk_engine_version",
        "metadata.asset_registry_version",
        "metadata.release_stage",
        "metadata.evaluated_at",
        "metadata.data_sources",
        "metadata.provider_errors",
        "metadata.cache"
      ],
      "riskLevels": [
        "low",
        "moderate",
        "high",
        "critical",
        "insufficient_data"
      ],
      "errorCodes": [
        {
          "http": 402,
          "code": null,
          "description": "Payment required, returned before route validation. Empty JSON body; challenge in the payment-required header."
        },
        {
          "http": 400,
          "code": "UNSUPPORTED_CHAIN",
          "description": "Route validation, after a valid payment."
        },
        {
          "http": 400,
          "code": "MISSING_ADDRESS",
          "description": "Route validation, after a valid payment."
        },
        {
          "http": 400,
          "code": "INVALID_ADDRESS",
          "description": "Route validation, after a valid payment."
        },
        {
          "http": 500,
          "code": "INTERNAL_GATEWAY_ERROR",
          "description": "Unexpected gateway failure."
        },
        {
          "http": 502,
          "code": "RISK_ENGINE_UNAVAILABLE",
          "description": "Risk engine unreachable."
        },
        {
          "http": 503,
          "code": "GATEWAY_NOT_CONFIGURED",
          "description": "Gateway missing required configuration."
        },
        {
          "http": 504,
          "code": "RISK_ENGINE_TIMEOUT",
          "description": "Risk engine timed out."
        }
      ],
      "responseNotes": {
        "signals": "Object keyed by signal name. Each record: name, category, status, value, points, max_points, severity, context.",
        "categories": "Object keyed by category name. Each category: score, available_max, configured_max.",
        "holder_concentration": "raw_top10_percent, effective_top10_percent, single_holder_percent, excluded_percent, excluded_account_types, classification_complete.",
        "warnings": "Array of objects: code, severity, message."
      },
      "errorBody": {
        "success": false,
        "error": "MACHINE_CODE",
        "message": "string",
        "request_id": "string"
      }
    },
    {
      "id": "wallet-risk",
      "name": "Wallet Risk API",
      "status": "coming-soon",
      "live": false,
      "method": "GET",
      "path": "/v1/wallet/risk",
      "docs": "https://bentcrypto.com/apis/wallet-risk"
    },
    {
      "id": "token-security",
      "name": "Token Security API",
      "status": "coming-soon",
      "live": false,
      "method": "GET",
      "path": "/v1/token/security",
      "docs": "https://bentcrypto.com/apis/token-security"
    },
    {
      "id": "token-full",
      "name": "Token Full Intelligence",
      "status": "coming-soon",
      "live": false,
      "method": "GET",
      "path": "/v1/token/full",
      "docs": "https://bentcrypto.com/apis/token-full"
    },
    {
      "id": "compliance-screen",
      "name": "Compliance Screening",
      "status": "coming-soon",
      "live": false,
      "method": "GET",
      "path": "/v1/compliance/screen",
      "docs": "https://bentcrypto.com/apis/compliance-screening"
    },
    {
      "id": "token-liquidity",
      "name": "Liquidity & Holder Concentration",
      "status": "coming-soon",
      "live": false,
      "method": "GET",
      "path": "/v1/token/liquidity",
      "docs": "https://bentcrypto.com/apis/token-liquidity"
    },
    {
      "id": "pretrade-security",
      "name": "Agent Pre-Trade Security Check",
      "status": "coming-soon",
      "live": false,
      "method": "POST",
      "path": "/v1/agent/pretrade/security",
      "docs": "https://bentcrypto.com/apis/agent-pretrade-security"
    },
    {
      "id": "pretrade-bundle",
      "name": "Bundled Pre-Trade Intelligence",
      "status": "coming-soon",
      "live": false,
      "method": "POST",
      "path": "/v1/agent/pretrade",
      "docs": "https://bentcrypto.com/apis/agent-pretrade"
    }
  ],
  "safety": {
    "keysHandled": false,
    "note": "BentCrypto never requests private keys or seed phrases. Payment authorization happens entirely inside the client's own wallet or agent runtime.",
    "disclaimer": "Risk indicators are informational only and are not financial, legal, tax, or investment advice."
  },
  "cors": {
    "enabled": true,
    "allowedOrigins": [
      "https://bentcrypto.com",
      "https://www.bentcrypto.com",
      "https://bentcrypto.lovable.app"
    ],
    "allowedMethods": [
      "GET",
      "OPTIONS"
    ],
    "exposedHeaders": [
      "payment-required",
      "payment-response",
      "x-request-id"
    ]
  },
  "authentication": {
    "mechanism": "x402",
    "apiKeysSupported": false,
    "note": "Access is authorized per request via x402 micropayment. There is no public API-key program."
  },
  "engine": {
    "apiSchemaVersion": "1.0",
    "riskEngineVersion": "1.1.2",
    "releaseStage": "beta"
  },
  "preferredBaseUrlNote": "https://api.bentcrypto.com is the intended canonical hostname. Its /health endpoint does not respond yet, so the Railway URL remains the operational production base URL.",
  "example": {
    "request": "GET https://bentcrypto-x402-production.up.railway.app/v1/token/risk?chain=solana&address=So11111111111111111111111111111111111111112",
    "result": {
      "risk": {
        "score": 1,
        "level": "low"
      }
    }
  }
}