curl -X GET "https://api.dune.com/api/v1/contracts/submissions?blockchain_name=ethereum&status=pending&limit=20" \
-H "X-DUNE-API-KEY: YOUR_API_KEY"
import requests
url = "https://api.dune.com/api/v1/contracts/submissions"
headers = {"X-DUNE-API-KEY": "YOUR_API_KEY"}
params = {"blockchain_name": "ethereum", "status": "pending", "limit": 20}
while True:
page = requests.get(url, params=params, headers=headers).json()
for submission in page["submissions"]:
print(submission["id"], submission["status"])
if "next_cursor" not in page:
break
params["cursor"] = page["next_cursor"]
const url = 'https://api.dune.com/api/v1/contracts/submissions';
const params = new URLSearchParams({
blockchain_name: 'ethereum',
status: 'pending',
limit: 20
});
const response = await fetch(`${url}?${params}`, {
headers: { 'X-DUNE-API-KEY': 'YOUR_API_KEY' }
});
const data = await response.json();
console.log(data.submissions, data.next_cursor);
{
"submissions": [
{
"id": "0b1e4c2a-7d3f-4e5b-9a6c-8d7e6f5a4b3c",
"blockchain_name": "ethereum",
"address": "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
"project_name": "uniswap",
"contract_name": "UniswapToken",
"status": "pending",
"submission_type": "new",
"created_at": "2026-09-10T11:04:18.724658Z",
"updated_at": "2026-09-10T11:04:18.724658Z",
"idempotency_key": "uniswap-token/ethereum/1"
}
],
"total": 1
}
Contract Decoding
List Contract Submissions
List the contract decoding submissions made by your account
GET
/
v1
/
contracts
/
submissions
curl -X GET "https://api.dune.com/api/v1/contracts/submissions?blockchain_name=ethereum&status=pending&limit=20" \
-H "X-DUNE-API-KEY: YOUR_API_KEY"
import requests
url = "https://api.dune.com/api/v1/contracts/submissions"
headers = {"X-DUNE-API-KEY": "YOUR_API_KEY"}
params = {"blockchain_name": "ethereum", "status": "pending", "limit": 20}
while True:
page = requests.get(url, params=params, headers=headers).json()
for submission in page["submissions"]:
print(submission["id"], submission["status"])
if "next_cursor" not in page:
break
params["cursor"] = page["next_cursor"]
const url = 'https://api.dune.com/api/v1/contracts/submissions';
const params = new URLSearchParams({
blockchain_name: 'ethereum',
status: 'pending',
limit: 20
});
const response = await fetch(`${url}?${params}`, {
headers: { 'X-DUNE-API-KEY': 'YOUR_API_KEY' }
});
const data = await response.json();
console.log(data.submissions, data.next_cursor);
{
"submissions": [
{
"id": "0b1e4c2a-7d3f-4e5b-9a6c-8d7e6f5a4b3c",
"blockchain_name": "ethereum",
"address": "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
"project_name": "uniswap",
"contract_name": "UniswapToken",
"status": "pending",
"submission_type": "new",
"created_at": "2026-09-10T11:04:18.724658Z",
"updated_at": "2026-09-10T11:04:18.724658Z",
"idempotency_key": "uniswap-token/ethereum/1"
}
],
"total": 1
}
Minimum required API key scope:
Read. Lists the submissions of the user who created the API key.Description
Returns the contract decoding submissions made by the user who created the API key, newest first. Use it to track submissions made through Submit Contracts for Decoding or the Dune UI.Statuses
| Status | Meaning |
|---|---|
pending | Queued; the decoding pipeline picks it up within about a minute. |
approved | Validated and about to be decoded. |
processed | Decoded tables are available in the Data Explorer. |
needs_manual_review | Waiting for a Dune team member. Always the case for upgrades, renames, deletions, and protected namespaces. |
rejected | Not accepted; comment explains why. |
in_progress, cancelled | Intermediate and terminal states set during manual handling. |
Filtering
Combine any ofblockchain_name, address, project_name, contract_name, and status. Filters are ANDed together.
Pagination
Results are paged with an opaque cursor. Request a page withlimit (default 50, maximum 250). When more results exist the response includes next_cursor; pass it back as the cursor parameter to fetch the next page. total is the number of submissions matching the filters across all pages.
Pricing
This is a metadata endpoint and does not consume credits.Related Endpoints
- Submit Contracts for Decoding - Submit a batch of contracts
curl -X GET "https://api.dune.com/api/v1/contracts/submissions?blockchain_name=ethereum&status=pending&limit=20" \
-H "X-DUNE-API-KEY: YOUR_API_KEY"
import requests
url = "https://api.dune.com/api/v1/contracts/submissions"
headers = {"X-DUNE-API-KEY": "YOUR_API_KEY"}
params = {"blockchain_name": "ethereum", "status": "pending", "limit": 20}
while True:
page = requests.get(url, params=params, headers=headers).json()
for submission in page["submissions"]:
print(submission["id"], submission["status"])
if "next_cursor" not in page:
break
params["cursor"] = page["next_cursor"]
const url = 'https://api.dune.com/api/v1/contracts/submissions';
const params = new URLSearchParams({
blockchain_name: 'ethereum',
status: 'pending',
limit: 20
});
const response = await fetch(`${url}?${params}`, {
headers: { 'X-DUNE-API-KEY': 'YOUR_API_KEY' }
});
const data = await response.json();
console.log(data.submissions, data.next_cursor);
{
"submissions": [
{
"id": "0b1e4c2a-7d3f-4e5b-9a6c-8d7e6f5a4b3c",
"blockchain_name": "ethereum",
"address": "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
"project_name": "uniswap",
"contract_name": "UniswapToken",
"status": "pending",
"submission_type": "new",
"created_at": "2026-09-10T11:04:18.724658Z",
"updated_at": "2026-09-10T11:04:18.724658Z",
"idempotency_key": "uniswap-token/ethereum/1"
}
],
"total": 1
}
Headers
API Key for the service
Query Parameters
API Key, alternative to using the HTTP header X-Dune-Api-Key
Filter by blockchain, e.g. ethereum
Filter by contract address
Filter by project (namespace) name
Filter by contract name
Filter by submission status
Available options:
pending, approved, rejected, processed, in_progress, cancelled, needs_manual_review Maximum number of submissions to return (default 50, max 250)
Opaque cursor for pagination. Use the value provided on a previous response under next_cursor
Was this page helpful?