---
title: "Verify Contract (Standard JSON)"
method: POST
path: "/v2/verify/{chainId}/{address}"
tags: ["Verify Contracts"]
---

# Verify Contract (Standard JSON)

`POST /v2/verify/{chainId}/{address}`

Submit a contract for verification via the [Solidity standard JSON input](https://docs.soliditylang.org/en/latest/using-the-compiler.html#input-description) or [Vyper JSON input](https://docs.vyperlang.org/en/stable/compiling-a-contract.html#input-json-description).

There are no "single file" or "multi-part" verification endpoints because those are essentially wrappers around the Solidity compiler's JSON interface. The verification frontend can provide files and settings options to resemble these.

You can optionally pass the `creationTransactionHash` to make Sourcify reliably fetching the creation bytecode. Otherwise, it will try to fetch it itself which is dependent on external services.

**Note**: The `outputSelection` field in the `stdJsonInput.settings` will be overridden during verification to ensure all necessary artifacts are generated.

## Path parameters

- `chainId` 31318 | 42431 | 4217, required
- `address` string, required

## Request body

- object
  - `stdJsonInput` object, required — Full [standard JSON object](https://docs.soliditylang.org/en/latest/using-the-compiler.html#input-description) to pass to the compiler. Must include the `language` field inside the stdJsonInput object. Currently supports Solidity and Vyper.
  - `compilerVersion` string, required
  - `contractIdentifier` string, required — The fully qualified file path and contract name to indicate which contract to verify.
  - `creationTransactionHash` string — The hash of the transaction that created this contract. Optional.

## Response `202`

Successfully submitted the verification. The server started to process the verification. 

You can follow the verification status via the returned `verificationId` at `GET /v2/verify/{verificationId}`

- object
  - `verificationId` string, uuid, required

## Other responses

- `400` — Bad request from the client
- `409` — The contract is already verified
- `429` — The contract is already being verified. Jobs older than 5 minutes are considered stale and automatically expired, allowing a retry.
- `500`

## Changes

- **2026-03-09** `eef63cd83966` — 2 breaking, 1 warning, 6 info
  - the `path` request parameter `chainId` was restricted to a list of enum values
  - for the `path` request parameter `chainId`, the type/format was changed from `string`/`` to `integer`/``
  - changed the pattern of the `path` request parameter `address` from `(\b0x[a-fA-F0-9]{40}\b)` to `^0x[a-fA-F0-9]{40}$`
  - added the new enum value `31318.00` to the `path` request parameter `chainId`
  - …5 more
- **2025-12-17** `f02ddb386819` — 6 breaking, 3 warning, 1 info
  - removed the enum value `31318.00` from the `path` request parameter `chainId`
  - removed the enum value `4217.00` from the `path` request parameter `chainId`
  - removed the enum value `42431.00` from the `path` request parameter `chainId`
  - for the `path` request parameter `address`, the minLength was increased from `0` to `42`
  - …6 more

[Change history](https://skmtc.dev/tempoxyz/apis/contract-verification-api/changes/v2/verify/:chainId/:address/post.md)

---

[API](https://skmtc.dev/tempoxyz/apis/contract-verification-api.md) · [All operations](https://skmtc.dev/tempoxyz/apis/contract-verification-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/tempoxyz/contract-verification-api/revisions/a76585f33723/schema)
