---
title: "Upsert market metadata"
method: POST
path: "/admin/markets/metadata"
tags: ["Admin"]
---

# Upsert market metadata

`POST /admin/markets/metadata`

## Request

- Base URL: `https://api.testnet.rise.trade`
- URL: `https://api.testnet.rise.trade/admin/markets/metadata`
- Auth: none required
- TypeScript: <https://skmtc.dev/rise/apis/risex-rest-api/docs/admin/markets/metadata/post.ts> (a function with typed inputs; its response is checked against the schema)

Set category, search tags and is_new for one market. Tags replace the existing set wholesale. Changes appear in GET /v1/markets within a listener round trip.

## Request body

- ApiUpsertMarketMetadataRequest
  - `market_id` string, int64
  - `category` string: Must be "crypto", "stocks", "commodity", "index_etf", or empty to mark it uncategorized.
  - `search_tags` string[]: Replaces the stored set. Lowercase alphanumeric, max 32 chars each.
  - `is_new` boolean

## Response `200`

A successful response.

- ApiUpsertMarketMetadataResponse
  - `market` ApiMarketMetadata: Echoes what was stored. Reads go through GET /v1/markets, which carries these fields.
    - `market_id` string, int64
    - `name` string: Market name from the on-chain config, e.g. "XAU/USDC".
    - `category` string: "crypto" | "stocks" | "commodity" | "index_etf", or empty when not categorized yet.
    - `search_tags` string[]: Normalized search terms, sorted.
    - `is_new` boolean

## Other responses

- `default`: An unexpected error response.

## Changes

- **2026-11-03** `98eabcd6a6ad`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/rise/apis/risex-rest-api/changes/admin/markets/metadata/post.md)

---

[API](https://skmtc.dev/rise/apis/risex-rest-api.md) - [All operations](https://skmtc.dev/rise/apis/risex-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/rise/apis/risex-rest-api/revisions/98eabcd6a6ad?raw)
