{
  "info": {
    "_postman_id": "onchainrisk-paid-v3",
    "name": "OnChainRisk Paid API",
    "description": "Full OnChainRisk API for Pro, Business, and Enterprise plans.\n\n**Setup:**\n1. Sign up at https://onchainrisk.io/register and upgrade to Pro or higher\n2. Dashboard → API Keys → Create a paid API key\n3. Set env var `paid_api_key` to your key\n4. Open any folder below — `Analysis` through `Account` are safe to explore; `⚠ Destructive` needs extra caution.\n\n**Authentication:** the authenticated operations use `Authorization: Bearer {{paid_api_key}}` — no JWT, no CAPTCHA, no separate flow between them. The one documented exception is the `Public Share Links (no auth)` folder: those requests send no `Authorization` header at all, because a share token *is* the credential. Do not add a paid key to them.\n\n**Scope:** the reviewed external integration surface described by the paid OpenAPI contract at https://api.onchainrisk.io/openapi.yaml — the authenticated paid-key operations, plus the explicitly public share-link retrieval operations. One request per published operation.\n\nBeing reachable with a paid key is not the same as being part of this surface: our own dashboard, session and admin endpoints are first-party, are not an integration contract, and are deliberately absent even where a paid key would technically be accepted. Signup / login / password reset / 2FA likewise run in the dashboard UI (Turnstile CAPTCHA, JWT session).\n\n**Folder conventions:**\n- `Analysis`, `Token`, `Block / MEV`, `Multi-chain`, `AI Investigation`, `Watchlist & Alerts`, `Notifications`, `Labels`, `Graph Operations`, `Account` — safe day-to-day paid API work.\n- `⚠ Destructive` — the three DELETE operations (watchlist item, label, investigation). Running one removes that resource.\n- `Public Share Links (no auth)` — read-only retrieval of a report or graph someone has shared. No credential: the share token *is* the credential, so set `sample_share_token` to one the report owner gave you (they create share links from the dashboard).\n\nA CI coverage script (`validate:paid-coverage`) ensures no core endpoint drifts out of sync with the Swagger spec.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://api.onchainrisk.io",
      "type": "string"
    },
    {
      "key": "paid_api_key",
      "value": "ocr_live_REPLACE_ME",
      "type": "string",
      "description": "Paid API key (Pro+). Create at https://onchainrisk.io/dashboard/api-keys"
    },
    {
      "key": "sample_address",
      "value": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
      "type": "string",
      "description": "Vitalik — real data, explorable."
    },
    {
      "key": "user_address",
      "value": "0xREPLACE_ME_WITH_YOUR_ADDRESS",
      "type": "string"
    },
    {
      "key": "sample_token_address",
      "value": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "type": "string",
      "description": "USDC on Ethereum — safe honeypot/security test subject."
    },
    {
      "key": "sample_block",
      "value": "19500000",
      "type": "string"
    },
    {
      "key": "sample_tx_hash",
      "value": "0xREPLACE_ME_WITH_TX_HASH",
      "type": "string"
    },
    {
      "key": "sample_email",
      "value": "you@example.com",
      "type": "string"
    },
    {
      "key": "sample_report_id",
      "value": "REPLACE_AFTER_FIRST_CHECK",
      "type": "string",
      "description": "Auto-populated when you run POST /api/v1/check (sync path) or POST /api/v1/multichain/analyze (async). Source: response.data.reportId."
    },
    {
      "key": "sample_scan_status_id",
      "value": "REPLACE_AFTER_ASYNC_SCAN",
      "type": "string",
      "description": "Auto-populated when POST /api/v1/check returns 202 (heavy address routed to async queue). Source: response.data.reportId in the 202 payload."
    },
    {
      "key": "sample_watchlist_id",
      "value": "REPLACE_AFTER_WATCHLIST_ADD",
      "type": "string",
      "description": "Auto-populated when you run POST /api/watchlist. Source: response.data.id."
    },
    {
      "key": "sample_label_id",
      "value": "REPLACE_AFTER_LABEL_CREATE",
      "type": "string",
      "description": "Auto-populated when you run POST /api/labels. Source: response.data.id."
    },
    {
      "key": "sample_investigation_id",
      "value": "REPLACE_AFTER_INVESTIGATE",
      "type": "string",
      "description": "Auto-populated from GET /api/investigations (first item). Or run POST /api/investigate first."
    },
    {
      "key": "sample_payment_id",
      "value": "REPLACE_AFTER_UPGRADE",
      "type": "string",
      "description": "Reserved. Billing flows are dashboard-only — not exposed in this collection."
    }
  ],
  "item": [
    {
      "name": "Analysis",
      "item": [
        {
          "name": "POST /api/v1/check — address risk analysis",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"address\": \"{{sample_address}}\",\n  \"network\": \"eth\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/v1/check",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "check"
              ]
            },
            "description": "\n\n## Localization metadata (added 2026-04-29)\n\nIn addition to the legacy `patternFlags: string[]` and `timing.botFlags: string[]`,\nthe response now includes:\n\n- `patternFlagDetails: FlagDetail[]` (top-level, index-aligned with `patternFlags`)\n- `timing.botFlagDetails: FlagDetail[]` (inside `timing`, index-aligned with `timing.botFlags`)\n\nEach FlagDetail:\n```json\n{\n  \"code\": \"bulk_collection\",\n  \"templateKey\": \"pattern.bulk_collection\",\n  \"defaultEn\": \"BULK COLLECTION pattern: 24 inbound TXs in 600s\",\n  \"severity\": \"medium\",\n  \"description\": \"Many sources sent funds within a short window (bulk collection).\"\n}\n```\n\nUse `code` / `templateKey` for translation/mapping. `defaultEn` is a display\nfallback only (may include dynamic values; not a stable translation key).\n\nBot flag example (inside `timing.botFlagDetails[i]`):\n```json\n{\n  \"code\": \"always_on_24h\",\n  \"templateKey\": \"bot.always_on_24h\",\n  \"defaultEn\": \"Active across 22+ hours daily — likely automated\",\n  \"severity\": \"medium\",\n  \"description\": \"Address is active for ~22+ hours per day, suggesting automation.\"\n}\n```\n\nUnknown / unmapped flags fall back to `code: \"unknown\"` with namespaced\n`templateKey` (`pattern.unknown` or `bot.unknown`); `severity` and\n`description` are `null` in that case. Legacy fields (`patternFlags`,\n`timing.botFlags`) remain unchanged for backward compatibility.\n"
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const d = pm.response.json().data;",
                  "if (pm.response.code === 200) {",
                  "  pm.test('sync path: reportId persisted', () => pm.expect(d.reportId).to.be.a('string'));",
                  "  pm.test('NO _sandbox field (paid)', () => pm.expect(d).to.not.have.property('_sandbox'));",
                  "  if (d.reportId) pm.collectionVariables.set('sample_report_id', d.reportId);",
                  "} else if (pm.response.code === 202) {",
                  "  pm.test('async path: returned status poll id', () => pm.expect(d.reportId).to.be.a('string'));",
                  "  if (d.reportId) pm.collectionVariables.set('sample_scan_status_id', d.reportId);",
                  "} else {",
                  "  pm.test('200 or 202', () => pm.expect([200, 202]).to.include(pm.response.code));",
                  "}"
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// Stable validation envelope: validation errors always 422 with",
                  "// success:false + error.code=VALIDATION_ERROR + details.errorCode.",
                  "// Added 2026-04-24 after the Tron/network mismatch incident.",
                  "// (Ref: docs/testing/fixtures/validation/*.json — same shape.)",
                  "pm.test('validation envelope is stable (422)', function () {",
                  "    if (pm.response.code !== 422) return;",
                  "    const body = pm.response.json();",
                  "    pm.expect(body).to.have.property('success', false);",
                  "    pm.expect(body.error).to.have.property('code', 'VALIDATION_ERROR');",
                  "    pm.expect(body.error).to.have.property('message');",
                  "    pm.expect(body.error).to.have.property('details');",
                  "    pm.expect(body.error.details).to.have.property('errorCode');",
                  "});"
                ]
              }
            }
          ],
          "response": [
            {
              "name": "422 ADDRESS_NETWORK_MISMATCH (Tron + network=eth)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Authorization",
                    "value": "Bearer {{api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"address\": \"TLA2W3khvaLjZ7FQ3cwh1zHszVRV627cr5\",\n  \"network\": \"eth\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": false,\n  \"error\": {\n    \"message\": \"Validation failed\",\n    \"code\": \"VALIDATION_ERROR\",\n    \"details\": {\n      \"address\": \"Address format does not match selected network. The address looks like a tron address, but network was set to eth.\",\n      \"errorCode\": \"ADDRESS_NETWORK_MISMATCH\",\n      \"detectedFamily\": \"tron\",\n      \"requestedNetwork\": \"eth\"\n    }\n  }\n}"
            },
            {
              "name": "422 INVALID_ADDRESS (whitespace-only)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Authorization",
                    "value": "Bearer {{api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"address\": \"   \",\n  \"network\": \"eth\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": false,\n  \"error\": {\n    \"message\": \"Validation failed\",\n    \"code\": \"VALIDATION_ERROR\",\n    \"details\": {\n      \"address\": \"Address is required.\",\n      \"errorCode\": \"INVALID_ADDRESS\"\n    }\n  }\n}"
            },
            {
              "name": "422 UNSUPPORTED_NETWORK (network=Ethereum)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Authorization",
                    "value": "Bearer {{api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"address\": \"0x742d35Cc6634C0532925a3b844Bc454e4438f44e\",\n  \"network\": \"Ethereum\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": false,\n  \"error\": {\n    \"message\": \"Validation failed\",\n    \"code\": \"VALIDATION_ERROR\",\n    \"details\": {\n      \"address\": \"Unsupported network 'ethereum'. Supported: arbitrum, avalanche, base, bsc, btc, cardano, celo, cosmos, cronos, eth, fantom, linea, ltc, moonbeam, optimism, polygon, polygon_zkevm, scroll, sol, ton, tron, xrp, zksync.\",\n      \"errorCode\": \"UNSUPPORTED_NETWORK\",\n      \"requestedNetwork\": \"ethereum\"\n    }\n  }\n}"
            },
            {
              "name": "422 INVALID_ADDRESS_CHECKSUM (Tron bad Base58Check)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Authorization",
                    "value": "Bearer {{api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"address\": \"TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\",\n  \"network\": \"tron\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": false,\n  \"error\": {\n    \"message\": \"Validation failed\",\n    \"code\": \"VALIDATION_ERROR\",\n    \"details\": {\n      \"address\": \"Address failed tron checksum validation.\",\n      \"errorCode\": \"INVALID_ADDRESS_CHECKSUM\",\n      \"detectedFamily\": \"tron\",\n      \"requestedNetwork\": \"tron\"\n    }\n  }\n}"
            },
            {
              "name": "422 COULD_NOT_DETECT_NETWORK (unrecognisable address)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Authorization",
                    "value": "Bearer {{api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"address\": \"not_an_address_at_all_12345\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": false,\n  \"error\": {\n    \"message\": \"Validation failed\",\n    \"code\": \"VALIDATION_ERROR\",\n    \"details\": {\n      \"address\": \"Could not detect network from address format. Please specify the network parameter.\",\n      \"errorCode\": \"COULD_NOT_DETECT_NETWORK\"\n    }\n  }\n}"
            },
            {
              "name": "200 Heavy BTC address (overview mode, partial history)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Authorization",
                    "value": "Bearer {{api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"address\": \"bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc\",\n  \"network\": \"btc\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"address\": \"bc1qq2mvrp4g3ugd424dw4xv53rgsf8szkrv853jrc\",\n    \"network\": \"btc\",\n    \"riskScore\": null,\n    \"riskLevel\": \"unknown\",\n    \"addressInfo\": {\n      \"type\": \"eoa\",\n      \"balance\": \"0.59374798 BTC\",\n      \"txCount\": 243064,\n      \"firstSeen\": null,\n      \"lastSeen\": null\n    },\n    \"patternFlags\": [],\n    \"transactionHistory\": [],\n    \"tokenTransferHistory\": [],\n    \"topCounterparties\": [],\n    \"addressConnections\": [],\n    \"txFetchIncomplete\": true,\n    \"dataQuality\": \"partial\",\n    \"riskConfidence\": \"low\",\n    \"dataCompleteness\": {\n      \"reportedTxCount\": 243064,\n      \"fetchedTxCount\": 0,\n      \"completenessPct\": 0.0,\n      \"reportedCountSource\": \"mempool_chain_stats\",\n      \"partialReason\": \"btc_tx_count_exceeds_full_fetch_limit\"\n    }\n  }\n}"
            },
            {
              "name": "202 Async queued (heavy address)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Authorization",
                    "value": "Bearer {{paid_api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"address\": \"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D\",\n  \"network\": \"eth\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Accepted",
              "code": 202,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reportId\": \"98958045-d736-4bc4-90ed-a717a9258738\",\n    \"status\": \"queued\",\n    \"async\": true\n  }\n}"
            },
            {
              "name": "202 Deduplicated (idempotent retry within 30 min)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Authorization",
                    "value": "Bearer {{paid_api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"address\": \"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D\",\n  \"network\": \"eth\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Accepted",
              "code": 202,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reportId\": \"98958045-d736-4bc4-90ed-a717a9258738\",\n    \"status\": \"queued\",\n    \"async\": true,\n    \"deduplicated\": true\n  }\n}"
            },
            {
              "name": "200 Verified smart contract (USDC, complete)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Authorization",
                    "value": "Bearer {{paid_api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"address\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n  \"network\": \"eth\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reportId\": \"6c4f29d4-2b1e-4d2c-8b77-c8e1b9a40124\",\n    \"status\": \"complete\",\n    \"address\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n    \"network\": \"eth\",\n    \"riskScore\": 5,\n    \"riskLevel\": \"low\",\n    \"createdAt\": \"2026-04-25T10:15:00Z\",\n    \"addressInfo\": {\n      \"type\": \"smart_contract\",\n      \"balance\": \"0 ETH\",\n      \"txCount\": 412,\n      \"firstSeen\": \"2020-06-09T18:43:35Z\",\n      \"lastSeen\": \"2026-04-25T10:11:02Z\"\n    },\n    \"patternFlags\": [],\n    \"contractAnalysis\": {\n      \"contractName\": \"FiatTokenV2_2\",\n      \"bytecodeSize\": 24576,\n      \"compilerVersion\": \"v0.6.12+commit.27d51765\",\n      \"deployer\": \"0x95Ba4cF87D6723ad9C0Db21737D862bE80e93911\",\n      \"isVerified\": true,\n      \"hasSelfdestruct\": false,\n      \"hasDelegatecall\": true,\n      \"hasCreate2\": false,\n      \"similarityFlags\": [\"ERC20\", \"Upgradeable\"],\n      \"knownSignatures\": [\"transfer(address,uint256)\", \"approve(address,uint256)\", \"balanceOf(address)\"]\n    },\n    \"contractInfo\": {\n      \"deployer\": \"0x95Ba4cF87D6723ad9C0Db21737D862bE80e93911\",\n      \"creationTx\": \"0xe7e0fe390354509cd08c9a0168536938600ddc552b3f7cb96030ebef62e75895\",\n      \"creationBlock\": 6082465,\n      \"isProxy\": true,\n      \"implementationAddress\": \"0xa2327a938Febf5FEC13baCFb16Ae10EcBc4cbDCF\",\n      \"contractName\": \"FiatTokenV2_2\"\n    },\n    \"dataCompleteness\": {\n      \"reportedTxCount\": 412,\n      \"fetchedTxCount\": 412,\n      \"completenessPct\": 100,\n      \"partialReason\": null\n    }\n  }\n}"
            },
            {
              "name": "200 Heavy contract — overview only (heavy_contract_overview)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Authorization",
                    "value": "Bearer {{paid_api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"address\": \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n  \"network\": \"eth\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reportId\": \"d2b1e7f1-9c3a-4f88-9e02-66ad12fa01a3\",\n    \"status\": \"complete\",\n    \"address\": \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n    \"network\": \"eth\",\n    \"riskScore\": null,\n    \"riskLevel\": \"low\",\n    \"createdAt\": \"2026-04-25T10:00:00Z\",\n    \"addressInfo\": {\n      \"type\": \"contract\",\n      \"balance\": \"0 ETH\",\n      \"txCount\": 267575,\n      \"firstSeen\": \"2021-05-04T23:10:00Z\",\n      \"lastSeen\": \"2026-04-25T09:55:21Z\"\n    },\n    \"patternFlags\": [],\n    \"contractAnalysis\": {\n      \"contractName\": null,\n      \"bytecodeSize\": 6177,\n      \"compilerVersion\": \"v0.8.16+commit.07a7930e\",\n      \"deployer\": null,\n      \"isVerified\": true,\n      \"hasSelfdestruct\": false,\n      \"hasDelegatecall\": false,\n      \"hasCreate2\": false,\n      \"similarityFlags\": [],\n      \"knownSignatures\": []\n    },\n    \"dataCompleteness\": {\n      \"reportedTxCount\": 267575,\n      \"fetchedTxCount\": 0,\n      \"completenessPct\": 0,\n      \"partialReason\": \"heavy_contract_overview\"\n    }\n  }\n}"
            }
          ]
        },
        {
          "name": "GET /api/v1/check/{address} — fetch cached report",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/check/{{sample_address}}?network=eth",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "check",
                "{{sample_address}}"
              ],
              "query": [
                {
                  "key": "network",
                  "value": "eth"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 Verified smart contract (normal)",
              "originalRequest": {
                "method": "GET",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{paid_api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48?network=eth",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check",
                    "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
                  ],
                  "query": [
                    {
                      "key": "network",
                      "value": "eth"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"address\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n    \"network\": \"eth\",\n    \"riskScore\": 5,\n    \"riskLevel\": \"low\",\n    \"addressInfo\": {\n      \"type\": \"smart_contract\",\n      \"balance\": \"0 ETH\",\n      \"txCount\": 412,\n      \"firstSeen\": \"2020-06-09T18:43:35Z\",\n      \"lastSeen\": \"2026-04-25T10:11:02Z\"\n    },\n    \"patternFlags\": [],\n    \"contractAnalysis\": {\n      \"contractName\": \"FiatTokenV2_2\",\n      \"bytecodeSize\": 24576,\n      \"compilerVersion\": \"v0.6.12+commit.27d51765\",\n      \"deployer\": \"0x95Ba4cF87D6723ad9C0Db21737D862bE80e93911\",\n      \"isVerified\": true,\n      \"hasSelfdestruct\": false,\n      \"hasDelegatecall\": true,\n      \"hasCreate2\": false,\n      \"similarityFlags\": [\"ERC20\", \"Upgradeable\"],\n      \"knownSignatures\": [\"transfer(address,uint256)\", \"approve(address,uint256)\", \"balanceOf(address)\"]\n    },\n    \"contractInfo\": {\n      \"deployer\": \"0x95Ba4cF87D6723ad9C0Db21737D862bE80e93911\",\n      \"creationTx\": \"0xe7e0fe390354509cd08c9a0168536938600ddc552b3f7cb96030ebef62e75895\",\n      \"creationBlock\": 6082465,\n      \"isProxy\": true,\n      \"implementationAddress\": \"0xa2327a938Febf5FEC13baCFb16Ae10EcBc4cbDCF\",\n      \"contractName\": \"FiatTokenV2_2\"\n    },\n    \"dataCompleteness\": {\n      \"reportedTxCount\": 412,\n      \"fetchedTxCount\": 412,\n      \"completenessPct\": 100,\n      \"partialReason\": null\n    }\n  }\n}"
            },
            {
              "name": "200 Heavy contract — overview only (heavy_contract_overview)",
              "originalRequest": {
                "method": "GET",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{paid_api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check/0x1F98431c8aD98523631AE4a59f267346ea31F984?network=eth",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check",
                    "0x1F98431c8aD98523631AE4a59f267346ea31F984"
                  ],
                  "query": [
                    {
                      "key": "network",
                      "value": "eth"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"address\": \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n    \"network\": \"eth\",\n    \"riskScore\": null,\n    \"riskLevel\": \"low\",\n    \"addressInfo\": {\n      \"type\": \"contract\",\n      \"balance\": \"0 ETH\",\n      \"txCount\": 267575,\n      \"firstSeen\": \"2021-05-04T23:10:00Z\",\n      \"lastSeen\": \"2026-04-25T09:55:21Z\"\n    },\n    \"patternFlags\": [],\n    \"contractAnalysis\": {\n      \"contractName\": null,\n      \"bytecodeSize\": 6177,\n      \"compilerVersion\": \"v0.8.16+commit.07a7930e\",\n      \"deployer\": null,\n      \"isVerified\": true,\n      \"hasSelfdestruct\": false,\n      \"hasDelegatecall\": false,\n      \"hasCreate2\": false,\n      \"similarityFlags\": [],\n      \"knownSignatures\": []\n    },\n    \"dataCompleteness\": {\n      \"reportedTxCount\": 267575,\n      \"fetchedTxCount\": 0,\n      \"completenessPct\": 0,\n      \"partialReason\": \"heavy_contract_overview\"\n    },\n    \"partialReason\": \"heavy_contract_overview\"\n  }\n}"
            }
          ]
        },
        {
          "name": "GET /api/v1/check/status/{reportId} — async scan polling",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/check/status/{{sample_scan_status_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "check",
                "status",
                "{{sample_scan_status_id}}"
              ]
            },
            "description": "Lightweight polling for async scans returned via 202 from POST /api/v1/check. Lifecycle: queued → analyzing → complete | failed. Does NOT consume quota. Poll every ~5 seconds until status is complete or failed (typically 1–5 minutes for heavy addresses)."
          },
          "response": [
            {
              "name": "200 queued",
              "originalRequest": {
                "method": "GET",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{paid_api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check/status/98958045-d736-4bc4-90ed-a717a9258738",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check",
                    "status",
                    "98958045-d736-4bc4-90ed-a717a9258738"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reportId\": \"98958045-d736-4bc4-90ed-a717a9258738\",\n    \"status\": \"queued\",\n    \"phase\": null,\n    \"errorMessage\": null,\n    \"riskScore\": null,\n    \"riskLevel\": null,\n    \"queuedAt\": \"2026-04-26T22:27:30Z\",\n    \"startedAt\": null,\n    \"finishedAt\": null\n  }\n}"
            },
            {
              "name": "200 analyzing",
              "originalRequest": {
                "method": "GET",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{paid_api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check/status/98958045-d736-4bc4-90ed-a717a9258738",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check",
                    "status",
                    "98958045-d736-4bc4-90ed-a717a9258738"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reportId\": \"98958045-d736-4bc4-90ed-a717a9258738\",\n    \"status\": \"analyzing\",\n    \"phase\": \"fetching_transactions\",\n    \"errorMessage\": null,\n    \"riskScore\": null,\n    \"riskLevel\": null,\n    \"queuedAt\": \"2026-04-26T22:27:30Z\",\n    \"startedAt\": \"2026-04-26T22:27:35Z\",\n    \"finishedAt\": null\n  }\n}"
            },
            {
              "name": "200 complete",
              "originalRequest": {
                "method": "GET",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{paid_api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check/status/98958045-d736-4bc4-90ed-a717a9258738",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check",
                    "status",
                    "98958045-d736-4bc4-90ed-a717a9258738"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reportId\": \"98958045-d736-4bc4-90ed-a717a9258738\",\n    \"status\": \"complete\",\n    \"phase\": null,\n    \"errorMessage\": null,\n    \"riskScore\": 5,\n    \"riskLevel\": \"low\",\n    \"queuedAt\": \"2026-04-26T22:27:30Z\",\n    \"startedAt\": \"2026-04-26T22:27:35Z\",\n    \"finishedAt\": \"2026-04-26T22:30:12Z\"\n  }\n}"
            },
            {
              "name": "200 failed",
              "originalRequest": {
                "method": "GET",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{paid_api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/check/status/98958045-d736-4bc4-90ed-a717a9258738",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "check",
                    "status",
                    "98958045-d736-4bc4-90ed-a717a9258738"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reportId\": \"98958045-d736-4bc4-90ed-a717a9258738\",\n    \"status\": \"failed\",\n    \"phase\": null,\n    \"errorMessage\": \"Modal upstream timeout after 5 minutes\",\n    \"riskScore\": null,\n    \"riskLevel\": null,\n    \"queuedAt\": \"2026-04-26T22:27:30Z\",\n    \"startedAt\": \"2026-04-26T22:27:35Z\",\n    \"finishedAt\": \"2026-04-26T22:32:35Z\"\n  }\n}"
            }
          ]
        },
        {
          "name": "GET /api/reports/{reportId} - fetch full report",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/reports/{{sample_report_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "reports",
                "{{sample_report_id}}"
              ]
            },
            "description": "Fetch one of your own reports by its reportId (the UUID returned by POST /api/v1/check; a legacy integer id also works). This is the canonical way to get the full analysis after an async scan completes - GET /api/v1/check/status/{reportId} returns only the lifecycle summary, never the report body. Accepts the same API key that created the report. Does NOT consume quota. Returns 404 if the report does not exist or is not owned by the caller."
          },
          "response": [
            {
              "name": "200 complete report",
              "originalRequest": {
                "method": "GET",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{paid_api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/reports/98958045-d736-4bc4-90ed-a717a9258738",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "reports",
                    "98958045-d736-4bc4-90ed-a717a9258738"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"reportId\": \"98958045-d736-4bc4-90ed-a717a9258738\",\n  \"address\": \"0x742d35CC6634C0532925a3b844bc454e4438F44e\",\n  \"network\": \"eth\",\n  \"riskScore\": 5,\n  \"riskLevel\": \"low\",\n  \"createdAt\": \"2026-04-26T22:30:12Z\"\n}"
            },
            {
              "name": "200 in-flight (async not complete)",
              "originalRequest": {
                "method": "GET",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{paid_api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/reports/98958045-d736-4bc4-90ed-a717a9258738",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "reports",
                    "98958045-d736-4bc4-90ed-a717a9258738"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"reportId\": \"98958045-d736-4bc4-90ed-a717a9258738\",\n  \"address\": \"0x742d35CC6634C0532925a3b844bc454e4438F44e\",\n  \"network\": \"eth\",\n  \"status\": \"analyzing\",\n  \"createdAt\": \"2026-04-26T22:27:30Z\"\n}"
            },
            {
              "name": "404 not found / not owned",
              "originalRequest": {
                "method": "GET",
                "header": [
                  {
                    "key": "Authorization",
                    "value": "Bearer {{paid_api_key}}"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/reports/00000000-0000-4000-8000-000000000000",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "reports",
                    "00000000-0000-4000-8000-000000000000"
                  ]
                }
              },
              "status": "Not Found",
              "code": 404,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"success\": false,\n  \"error\": \"Report not found\"\n}"
            }
          ]
        },
        {
          "name": "POST /api/v1/check/deep — peel chain tracing",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"address\": \"{{sample_address}}\",\n  \"network\": \"eth\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/v1/check/deep",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "check",
                "deep"
              ]
            }
          }
        }
      ]
    },
    {
      "name": "Token",
      "item": [
        {
          "name": "POST /api/v1/token/check — honeypot + security score",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"address\": \"{{sample_token_address}}\",\n  \"network\": \"eth\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/v1/token/check",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "token",
                "check"
              ]
            }
          }
        },
        {
          "name": "POST /api/v1/token/check/stream — progressive SSE",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "text/event-stream"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"address\": \"{{sample_token_address}}\",\n  \"network\": \"eth\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/v1/token/check/stream",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "token",
                "check",
                "stream"
              ]
            }
          }
        },
        {
          "name": "POST /api/v1/token/reports — save report",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"address\": \"{{sample_token_address}}\",\n  \"network\": \"eth\",\n  \"reportData\": {}\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/v1/token/reports",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "token",
                "reports"
              ]
            }
          }
        },
        {
          "name": "GET /api/v1/token/reports — list saved",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/token/reports",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "token",
                "reports"
              ]
            }
          }
        }
      ]
    },
    {
      "name": "Block / MEV",
      "item": [
        {
          "name": "POST /api/v1/block/analyze — MEV patterns",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"blockNumber\": {{sample_block}},\n  \"network\": \"eth\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/v1/block/analyze",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "block",
                "analyze"
              ]
            }
          }
        },
        {
          "name": "POST /api/v1/block/reports — save block analysis",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"blockNumber\": {{sample_block}},\n  \"network\": \"eth\",\n  \"reportData\": {}\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/v1/block/reports",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "block",
                "reports"
              ]
            }
          }
        },
        {
          "name": "GET /api/v1/block/reports — list saved",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/block/reports",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "block",
                "reports"
              ]
            }
          }
        },
        {
          "name": "GET /api/v1/block/reports/{id} — fetch saved block report",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/block/reports/{{sample_report_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "block",
                "reports",
                "{{sample_report_id}}"
              ]
            },
            "description": "Fetch one saved block report by id. Accepts the UUID reportPublicId returned by POST /api/v1/block/analyze (preferred) or the legacy integer id. Owned by the calling key; 404 otherwise. Does not consume quota."
          }
        }
      ]
    },
    {
      "name": "Multi-chain",
      "item": [
        {
          "name": "POST /api/v1/multichain/scan — quick overview",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"address\": \"{{sample_address}}\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/v1/multichain/scan",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "multichain",
                "scan"
              ]
            }
          }
        },
        {
          "name": "POST /api/v1/multichain/analyze — full cross-chain (5 credits)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"address\": \"{{sample_address}}\",\n  \"networks\": [\n    \"eth\",\n    \"polygon\",\n    \"arbitrum\"\n  ]\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/v1/multichain/analyze",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "multichain",
                "analyze"
              ]
            },
            "description": "Full cross-chain risk analysis. `networks` is REQUIRED and must be a non-empty array — runtime answers 422 `{networks: \"At least one network required\"}` without it. Returns 202 with a reportId; poll GET /api/v1/multichain/analyze/{reportId} for progress."
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if (pm.response.code === 202 || pm.response.code === 200) {",
                  "  const d = pm.response.json().data;",
                  "  if (d && d.reportId) pm.collectionVariables.set('sample_report_id', d.reportId);",
                  "}"
                ]
              }
            }
          ]
        },
        {
          "name": "GET /api/v1/multichain/analyze/{reportId} — poll progress",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/multichain/analyze/{{sample_report_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "multichain",
                "analyze",
                "{{sample_report_id}}"
              ]
            }
          }
        },
        {
          "name": "POST /api/v1/multichain/reports — save",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"address\": \"{{sample_address}}\",\n  \"reportData\": {}\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/v1/multichain/reports",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "multichain",
                "reports"
              ]
            }
          }
        },
        {
          "name": "GET /api/v1/multichain/reports — list saved",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/multichain/reports",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "multichain",
                "reports"
              ]
            }
          }
        },
        {
          "name": "GET /api/v1/multichain/reports/{id} — fetch saved multi-chain report",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/multichain/reports/{{sample_report_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "multichain",
                "reports",
                "{{sample_report_id}}"
              ]
            },
            "description": "Fetch one saved multi-chain report by id. Accepts the UUID reportPublicId returned by POST /api/v1/multichain/scan (preferred) or the legacy integer id. Owned by the calling key; 404 otherwise. Does not consume quota."
          }
        }
      ]
    },
    {
      "name": "AI Investigation",
      "item": [
        {
          "name": "POST /api/investigate — start investigation (SSE)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "text/event-stream"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"message\": \"Summarize suspicious activity patterns for {{sample_address}}.\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/investigate",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "investigate"
              ]
            },
            "description": "Start or continue an AI investigation. The request field is `message` (max 5000 chars) — the previously published `question`/`address`/`network` shape was never read by the runtime, so the example could not succeed. Pass `investigationId` to continue a thread, or `reportId` to anchor it to a saved report. Responds as text/event-stream."
          }
        },
        {
          "name": "GET /api/investigations — list",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/investigations",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "investigations"
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if (pm.response.code === 200) {",
                  "  const body = pm.response.json();",
                  "  const list = body.data?.investigations || body.data || [];",
                  "  if (Array.isArray(list) && list.length > 0 && list[0].id) {",
                  "    pm.collectionVariables.set('sample_investigation_id', String(list[0].id));",
                  "  }",
                  "}"
                ]
              }
            }
          ]
        },
        {
          "name": "GET /api/investigations/{id} — detail",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/investigations/{{sample_investigation_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "investigations",
                "{{sample_investigation_id}}"
              ]
            }
          }
        }
      ]
    },
    {
      "name": "Watchlist & Alerts",
      "item": [
        {
          "name": "GET /api/watchlist — list",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/watchlist",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "watchlist"
              ]
            }
          }
        },
        {
          "name": "POST /api/watchlist — add address",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"address\": \"{{sample_address}}\",\n  \"network\": \"eth\",\n  \"label\": \"Watched via Postman\",\n  \"notify_email\": 1\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/watchlist",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "watchlist"
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "if (pm.response.code === 201) {",
                  "  const d = pm.response.json().data;",
                  "  if (d && d.id) pm.collectionVariables.set('sample_watchlist_id', String(d.id));",
                  "}"
                ]
              }
            }
          ]
        },
        {
          "name": "PATCH /api/watchlist/{id} — update",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Updated label\",\n  \"notify_email\": 0,\n  \"notify_telegram\": 1\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/watchlist/{{sample_watchlist_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "watchlist",
                "{{sample_watchlist_id}}"
              ]
            }
          }
        },
        {
          "name": "GET /api/watchlist/{id}/alerts — alerts for one item",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/watchlist/{{sample_watchlist_id}}/alerts",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "watchlist",
                "{{sample_watchlist_id}}",
                "alerts"
              ]
            }
          }
        },
        {
          "name": "GET /api/alerts — all alerts",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/alerts",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "alerts"
              ]
            }
          }
        }
      ]
    },
    {
      "name": "Notifications",
      "item": [
        {
          "name": "GET /api/notifications/settings",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/notifications/settings",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "notifications",
                "settings"
              ]
            }
          }
        },
        {
          "name": "PATCH /api/notifications/settings",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email_enabled\": 1,\n  \"webhook_url\": \"\",\n  \"webhook_enabled\": 0\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/notifications/settings",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "notifications",
                "settings"
              ]
            }
          }
        },
        {
          "name": "POST /api/notifications/test",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/notifications/test",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "notifications",
                "test"
              ]
            }
          }
        },
        {
          "name": "POST /api/notifications/telegram/connect",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"chatId\": \"your-telegram-chat-id\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/notifications/telegram/connect",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "notifications",
                "telegram",
                "connect"
              ]
            }
          }
        },
        {
          "name": "POST /api/notifications/telegram/disconnect",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/notifications/telegram/disconnect",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "notifications",
                "telegram",
                "disconnect"
              ]
            }
          }
        },
        {
          "name": "GET /api/v1/webhook/deliveries — recent webhook delivery attempts",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/webhook/deliveries",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "webhook",
                "deliveries"
              ]
            },
            "description": "Public-contract endpoint (source says so explicitly); requireAuth, so a paid API key works. Added in #729 for paid OpenAPI <-> Postman parity."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Labels",
      "description": "Custom address labels. Bulk import/export for compliance teams.",
      "item": [
        {
          "name": "GET /api/labels — list",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/labels",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "labels"
              ]
            }
          }
        },
        {
          "name": "POST /api/labels — create",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"address\": \"{{sample_address}}\",\n  \"network\": \"eth\",\n  \"label\": \"Internal test\",\n  \"category\": \"custom\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/labels",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "labels"
              ]
            },
            "event": [
              {
                "listen": "test",
                "script": {
                  "type": "text/javascript",
                  "exec": [
                    "if (pm.response.code === 201) {",
                    "  const d = pm.response.json().data;",
                    "  if (d && d.id) pm.collectionVariables.set('sample_label_id', String(d.id));",
                    "}"
                  ]
                }
              }
            ]
          }
        },
        {
          "name": "PATCH /api/labels/{id}",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"Updated\",\n  \"notes\": \"Investigation #42\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/labels/{{sample_label_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "labels",
                "{{sample_label_id}}"
              ]
            }
          }
        },
        {
          "name": "POST /api/labels/import — bulk import",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"labels\": [\n    { \"address\": \"0x...\", \"network\": \"eth\", \"label\": \"Exchange hot\", \"category\": \"custom\" }\n  ]\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/labels/import",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "labels",
                "import"
              ]
            }
          }
        },
        {
          "name": "GET /api/labels/export — export all",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/labels/export",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "labels",
                "export"
              ]
            }
          }
        }
      ]
    },
    {
      "name": "Graph Operations",
      "item": [
        {
          "name": "POST /api/graph/expand — expand counterparties",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"address\": \"{{sample_address}}\",\n  \"network\": \"eth\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/graph/expand",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "graph",
                "expand"
              ]
            }
          }
        },
        {
          "name": "POST /api/graph/csv-import — import fund flow CSV",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reportId\": \"{{sample_report_id}}\",\n  \"csv\": \"from,to,value\\n0x...,0x...,100\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/api/graph/csv-import",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "graph",
                "csv-import"
              ]
            }
          }
        }
      ]
    },
    {
      "name": "Account",
      "item": [
        {
          "name": "GET /api/v1/usage — quota & rate limit",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/usage",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "usage"
              ]
            },
            "description": "Read-only public introspection of plan quota, purchased credits, and rate limit. Replaces the internal /api/user/usage call for API-key clients. Sandbox keys are accepted (introspection only). Response shape:\n\n- plan\n- key_type ('paid' | 'sandbox' | null for JWT)\n- billing_period (monthly for paid plans, rolling_24h for free)\n- plan_quota (used / limit / remaining; limit=null for enterprise)\n- purchased_credits.available\n- rate_limit.requests_per_second\n\nSee OpenAPI for full shape and examples."
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('200 OK', () => pm.response.to.have.status(200));",
                  "pm.test('has plan_quota', () => {",
                  "  const body = pm.response.json();",
                  "  pm.expect(body.data.plan_quota).to.be.an('object');",
                  "  pm.expect(body.data.plan_quota).to.have.property('used');",
                  "  pm.expect(body.data.plan_quota).to.have.property('limit');",
                  "  pm.expect(body.data.plan_quota).to.have.property('remaining');",
                  "});",
                  "pm.test('rate_limit.requests_per_second present', () => {",
                  "  const body = pm.response.json();",
                  "  pm.expect(body.data.rate_limit.requests_per_second).to.be.a('number');",
                  "});",
                  "pm.test('no internal sentinel 999999 leaked', () => {",
                  "  pm.expect(pm.response.text()).to.not.include('999999');",
                  "});"
                ]
              }
            }
          ]
        }
      ]
    },
    {
      "name": "⚠ Destructive",
      "description": "Every request here removes data or changes a resource irreversibly. Double-check the {{sample_*}} id variables before running — you might overwrite state you care about. Where possible, test against dummy records first.",
      "item": [
        {
          "name": "DELETE /api/watchlist/{id}",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/watchlist/{{sample_watchlist_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "watchlist",
                "{{sample_watchlist_id}}"
              ]
            }
          }
        },
        {
          "name": "DELETE /api/labels/{id}",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/labels/{{sample_label_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "labels",
                "{{sample_label_id}}"
              ]
            }
          }
        },
        {
          "name": "DELETE /api/investigations/{id} — archive investigation",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{paid_api_key}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/investigations/{{sample_investigation_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "investigations",
                "{{sample_investigation_id}}"
              ]
            },
            "description": "Soft-delete (archive). #729: the collection previously sent POST .../archive, which has no runtime route."
          }
        }
      ]
    },
    {
      "name": "Public Share Links (no auth)",
      "description": "Share-token endpoints are deliberately unauthenticated — the 64-hex token is the credential. Both requests are explicitly noauth (#729).",
      "item": [
        {
          "name": "GET /api/share/{token} — public shared report (no auth)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/share/{{sample_share_token}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "share",
                "{{sample_share_token}}"
              ]
            },
            "description": "Intentionally UNAUTHENTICATED: the 64-hex share token is the credential. Auth is set to noauth so this request does not inherit a Bearer token. Added in #729 for parity.",
            "auth": {
              "type": "noauth"
            }
          },
          "response": []
        },
        {
          "name": "GET /api/share/{token}/graph — public shared graph (no auth)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/share/{{sample_share_token}}/graph",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "share",
                "{{sample_share_token}}",
                "graph"
              ]
            },
            "description": "Intentionally UNAUTHENTICATED, same token-as-credential model as the shared report. Auth is noauth. Added in #729 for parity.",
            "auth": {
              "type": "noauth"
            }
          },
          "response": []
        }
      ]
    }
  ]
}
