# Contract Verification API
> Check whether any EVM smart contract source code is verified and pull its ABI, source files and deployment details, keyless. Give it a chain id and contract address and get the verification status (full / partial / not verified), the compiler and contract name, the deployment info (deployer, transaction, block), the contract ABI (the JSON interface every integration needs), and the verified Solidity source. Live, nothing stored. The contract-verification / ABI layer for security, due-diligence, block-explorer, wallet and dapp tooling — backed by the open Sourcify registry, distinct from price, TVL and chain-registry APIs.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/contractverify-api/..."
```

## Pricing
- **Free** (Free) — 3,800 calls/Mo, 3 req/s
- **Starter** ($12/Mo) — 95,000 calls/Mo, 8 req/s
- **Pro** ($40/Mo) — 620,000 calls/Mo, 20 req/s
- **Business** ($119/Mo) — 4,000,000 calls/Mo, 50 req/s

## Endpoints

### Contract

#### `GET /v1/abi` — The contract ABI plus function and event name lists

**Parameters:**
- `chain` (query, required, string) — Numeric chain id Example: `1`
- `address` (query, required, string) — Contract address Example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/contractverify-api/v1/abi?chain=1&address=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
```

**Response:**
```json
{
    "data": {
        "abi": [
            {
                "name": "upgradeTo",
                "type": "function",
                "inputs": [
                    {
                        "name": "newImplementation",
                        "type": "address"
                    }
                ],
                "outputs": [],
                "payable": false,
                "constant": false,
                "stateMutability": "nonpayable"
            },
            {
                "name": "upgradeToAndCall",
                "type": "function",
                "inputs": [
                    {
                        "name": "newImplementation",
                        "type": "address"
                    },
                    {
                        "name": "data",
                        "type": "bytes"
                    }
                ],
                "outputs": [],
                "payable": true,
                "constant": false,
                "stateMutability": "payable"
            },
            {
                "name": "implementation",
                "type": "function",
                "inputs": [],
                "outputs": [
                    {
                        "name": "",
                        "type": "address"
                    }
                ],
                "payable": false,
                "constant": true,
                "stateMutability": "view"
            },
            {
                "name": "changeAdmin
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/contract` — Verification status, compiler, name and deployment for a contract

**Parameters:**
- `chain` (query, required, string) — Numeric chain id (1 = Ethereum, 137 = Polygon, 8453 = Base) Example: `1`
- `address` (query, required, string) — Contract address (0x + 40 hex) Example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/contractverify-api/v1/contract?chain=1&address=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
```

**Response:**
```json
{
    "data": {
        "name": "FiatTokenProxy",
        "note": "match=exact_match means bytecode matches exactly; match=match is a partial (metadata-hash) match.",
        "match": "match",
        "source": "Sourcify",
        "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
        "chain_id": 1,
        "language": "Solidity",
        "verified": true,
        "deployment": {
            "deployer": "0x95Ba4cF87D6723ad9C0Db21737D862bE80e93911",
            "block_number": 6082465,
            "transaction_hash": "0xe7e0fe390354509cd08c9a0168536938600ddc552b3f7cb96030ebef62e75895"
        },
        "verified_at": "2024-08-08T13:20:07Z",
        "runtime_match": "match",
        "creation_match": "match",
        "compiler_version": "0.4.24+commit.e67f0147"
    },
    "meta": {
        "timestamp": "2026-06-14T08:04:17.625Z",
        "request_id": "3e2888de-49c2-41d2-a068-99a75b40b2bb"
    },
    "status": "ok",
    "message": "Contract verification retrieved successfully",
    "success": true
}
```

#### `GET /v1/source` — The verified Solidity source files

**Parameters:**
- `chain` (query, required, string) — Numeric chain id Example: `1`
- `address` (query, required, string) — Contract address Example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/contractverify-api/v1/source?chain=1&address=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
```

**Response:**
```json
{
    "data": {
        "name": "FiatTokenProxy",
        "note": "Verified Solidity source files for the contract.",
        "files": [
            {
                "path": "FiatTokenProxy.sol",
                "content": "pragma solidity ^0.4.24;\r\n\r\n// File: zos-lib/contracts/upgradeability/Proxy.sol\r\n\r\n/**\r\n * @title Proxy\r\n * @dev Implements delegation of calls to other contracts, with proper\r\n * forwarding of return values and bubbling of failures.\r\n * It defines a fallback function that delegates all calls to the address\r\n * returned by the abstract _implementation() internal function.\r\n */\r\ncontract Proxy {\r\n  /**\r\n   * @dev Fallback function.\r\n   * Implemented entirely in `_fallback`.\r\n   */\r\n  function () payable external {\r\n    _fallback();\r\n  }\r\n\r\n  /**\r\n   * @return The Address of the implementation.\r\n   */\r\n  function _implementation() internal view returns (address);\r\n\r\n  /**\r\n   * @dev Delegates execution to an implementation contract.\r\n   * This is a low level function that doesn't return to its internal call site.\r\n   * It will return to the external caller whatever the implementation returns.\r\n   * @param implementation Address to delegate.\r\n   */\r\n  function _delegate(address implementation) internal {\r\n    assembly {\r\n      // Copy msg.data. We take full control of memory in this inline assembly\r\n      // block because it will not return to Solidity code. We overwrite the\r\n      // Soli
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Service metadata & live sample

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/contractverify-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "All endpoints take a required chain (numeric chain id, e.g. 1 = Ethereum, 137 = Polygon, 8453 = Base) and address (0x + 40 hex). Example: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 = USDC on Ethereum. abi and source return 404 if the contract is not verified.",
        "sample": {
            "name": "FiatTokenProxy",
            "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
            "verified": true
        },
        "source": "Sourcify open verification API (sourcify.dev/server/v2), live",
        "service": "contractverify-api",
        "endpoints": {
            "GET /v1/abi": "The contract's ABI plus function and event name lists (chain, address).",
            "GET /v1/meta": "This document.",
            "GET /v1/source": "The verified Solidity source files (chain, address).",
            "GET /v1/contract": "Verification status, compiler, name and deployment for a contract (chain, address)."
        },
        "description": "Check whether any EVM smart contract's source code is verified and pull its ABI, source files and deployment details, keyless. Give it a chain id and contract address and get the verification status (full/partial/not verified), the compiler and contract name, the deployment info (deployer, transaction, block), the contract's ABI and the verified Solidity source. Live, nothing stored beyond a short cache. The contract-verification / ABI layer for security, due-diligence, explorer, wallet and dapp too
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/contractverify-api
OpenAPI spec: https://www.oanor.com/api/contractverify-api/openapi.json
