---
title: "Submit contracts for decoding"
method: POST
path: "/v1/contracts/decode"
---

# Submit contracts for decoding

`POST /v1/contracts/decode`

## Request

- Base URL: `https://api.dune.com/api`
- URL: `https://api.dune.com/api/v1/contracts/decode`
- Auth: none declared. Required headers: `X-Dune-Api-Key`

Submit up to 100 contracts (with their ABIs) for decoding in one request. Each item is validated and queued independently; the response reports a per-item result matched by index. Successful items are queued as "pending" and can be tracked with GET /v1/contracts/submissions or at dune.com/workspace. Submissions are attributed to the user who created the API key. "upgrade" submissions and protected namespaces are always routed to manual review.

## Query parameters

- `api_key` string

## Headers

- `X-Dune-Api-Key` string, required

## Request body

- ModelsSubmitContractsRequest
  - `submissions` ModelsContractSubmissionInput[], required
    - `abi` object[], required: ABI is the contract ABI, either as a JSON array or as a JSON-encoded string containing the array.
    - `address` string, required
    - `blockchain_name` string, required
    - `contract_name` string, required
    - `has_multiple_instances` boolean
    - `idempotency_key` string: IdempotencyKey makes the item safe to retry. It is unique per account (at most 128 characters); resubmitting an item with a key you already used returns the existing submission with replayed=true instead of creating a new one.
    - `is_created_by_factory` boolean
    - `is_manual_abi` boolean
    - `is_proxy` boolean
    - `old_contract_name` string
    - `old_project_name` string: OldProjectName and OldContractName are required for "rename" submissions and name the contract as it is decoded today; project_name and contract_name carry the new names. "delete" submissions target project_name and contract_name directly.
    - `project_name` string, required
    - `resubmission_reason` string
    - `submission_type` 'new' | 'upgrade' | 'rename' | 'delete' | 'other': SubmissionType defaults to "new". "upgrade" submissions always go to manual review.

## Response `200`

OK

- ModelsSubmitContractsResponse
  - `results` ModelsContractSubmissionResult[]
    - `error` string
    - `index` integer
    - `replayed` boolean: Replayed is true when idempotency_key matched an earlier submission; submission_id then refers to that submission and nothing new was created.
    - `status` 'pending'
    - `submission_id` string

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `429`: Too Many Requests
- `500`: Internal Server Error

## Changes

- **2026-11-03** `f82b25fe64b1`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/dune/apis/duneapi/changes/v1/contracts/decode/post.md)

---

[API](https://skmtc.dev/dune/apis/duneapi.md) - [All operations](https://skmtc.dev/dune/apis/duneapi/llms.txt) - [OpenAPI document](https://skmtc.dev/dune/apis/duneapi/revisions/f82b25fe64b1?raw)
