---
title: "Submit a token or NFT to the public registry (pending review)"
method: POST
path: "/v1/registry/submit"
tags: ["Merchant Setup"]
---

# Submit a token or NFT to the public registry (pending review)

`POST /v1/registry/submit`

## Request

- Base URL: `https://api.insumermodel.com`
- URL: `https://api.insumermodel.com/v1/registry/submit`
- Auth: API key in header `X-API-Key`

Submit a token or NFT collection to the public registry. X-API-Key required (free: no credits are charged; the key is only for accountability). A submission is held as pending until approved; some submissions are added at once (the response says which: `pending`, `active`). The submission is routed into one of two buckets by asset type: tokens (ERC-20 utility or ERC-3643 security, plus Solana SPL) and NFTs (ERC-721/1155, including ERC-5192 soulbound). Set `assetType` ("token"/"nft") explicitly, or it is inferred from `standard` (defaulting to NFT). A token submission requires `symbol`. Idempotent per chain + address: a re-submit of the same asset returns the existing entry rather than creating a duplicate. EVM addresses are normalized lowercase; Solana mint addresses are left as-is. Returns a flat envelope (no `data` wrapper). Rate limited (429).

## Request body

- object: Provide `contractAddress` (EVM) or `mintAddress` (Solana) along with `name` and `chainId`; if both are sent, `contractAddress` is used. A submission with neither is rejected with 400.
  - `name` string, required
  - `assetType` 'token' | 'nft': Which registry to list the submission in. "token": the token registry (ERC-20, ERC-3643, SPL and similar); "nft": the NFT registry (ERC-721/1155/5192). If omitted, inferred from `standard`, defaulting to "nft". A "token" submission requires `symbol`. `type` is accepted as an alias for this field.
  - `contractAddress` string: EVM contract address. Provide this or mintAddress.
  - `mintAddress` string: Solana mint address. Provide this or contractAddress.
  - `chainId` union, required: Positive integer for EVM, or the string "solana".
    - integer
    - string
  - `chainName` string
  - `symbol` string: Ticker symbol. Required for token submissions; ignored for NFTs.
  - `decimals` integer: Token decimals (token submissions only).
  - `image` string: Collection image URL (NFT submissions). For tokens, use `logo`.
  - `logo` string: Token logo URL (token submissions). `image` is accepted as a fallback.
  - `standard` string: e.g. ERC-721, ERC-20, ERC-3643. Used to infer `assetType` when it is omitted.
  - `website` string
  - `description` string
  - `coingeckoId` string: CoinGecko id for market-cap lookup (token submissions only).
  - `source` string: Provenance tag shown in the admin review queue (e.g. "partner-app").

## Response `200`

Already listed (idempotent)

- object
  - `ok` true
  - `alreadyListed` true
  - `pending` boolean
  - `active` boolean
  - `docId` string
  - `meta` Meta
    - `version` string
    - `timestamp` string, date-time

## Other responses

- `201`: Submitted (pending review)
- `400`: Missing name/contractAddress/chainId, or invalid chainId
- `401`: Invalid or missing API key
- `405`: Method not allowed (only POST supported)
- `429`: Submission limit reached
- `500`: Unexpected server error. Safe to retry; no credits are charged on a 500. Router endpoints return the standard error envelope; standalone endpoints (the ones whose 200 is a flat object) return a flat {"error": "..."} object.

---

[API](https://skmtc.dev/insumermodel/apis/insumerapi.md) · [All operations](https://skmtc.dev/insumermodel/apis/insumerapi/llms.txt) · [OpenAPI document](https://skmtc.dev/insumermodel/apis/insumerapi/revisions/91f56fe9e3d8?raw)
