---
title: "Upsert builder metadata"
method: POST
path: "/admin/builders"
tags: ["Admin"]
---

# Upsert builder metadata

`POST /admin/builders`

## Request

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

Create or update builder metadata for a builder_id already registered on-chain via FeeManager.registerBuilderCode(). Rejects if fee_recipient does not match the on-chain FeeManager.getBuilderInfo(builder_id) result.

## Request body

- ApiUpsertBuilderRequest
  - `builder_id` integer
  - `slug` string
  - `name` string
  - `fee_recipient` string: Fee recipient address (hex with 0x prefix). Must match the on-chain FeeManager.getBuilderInfo(builder_id).fee_recipient — mismatches are rejected.
  - `is_active` boolean: Initial active state, used only when registering this builder for the first time. Ignored on subsequent updates to an existing builder_id — after registration, chain is the sole writer of is_active (mirrored from BuilderActivated/BuilderDeactivated), so this field can't be used to flip it independently of on-chain state.

## Response `200`

A successful response.

- ApiUpsertBuilderResponse
  - `builder_id` integer
  - `slug` string
  - `name` string
  - `fee_recipient` string
  - `is_active` 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/builders/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)
