---
title: "Register builder"
method: POST
path: "/v1/builders"
tags: ["Orders"]
---

# Register builder

`POST /v1/builders`

## Request

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

Registers a builder code for the signing account. The server calls FeeManager.registerBuilderCode(account) and stores the supplied slug/name against the assigned builder_id. Gas sponsored by API service.

`fee_recipient` is always the signing account — it is derived, never accepted from the client. Up to 10 builders per account; a request past that cap is rejected without sending a transaction.

**Prerequisites:**
1. `GET /v1/auth/nonce` — one-time nonce (5 min TTL, shared with the Login flow)
2. `GET /v1/auth/eip712-domain` — EIP-712 domain (`name`, `version`, `chainId`, `verifyingContract` = Authorization contract)

**Typed data:**
```
RegisterBuilder(address account,string slug,string name,uint256 nonce,uint32 deadline)
```
Sign as standard EIP-712 typed data (e.g. ethers `signTypedData`) with `nonce` = the hex nonce parsed as a uint256.

**Signature:** 64-byte EIP-2098 compact (r + yParityAndS) or 65-byte (r+s+v, auto-converted).

## Request body

- ApiRegisterBuilderRequest: Request to register a builder code for the signing account. There is no fee_recipient field: the on-chain fee recipient is always the signing account, so accepting one from the client could only ever be ignored or wrong.
  - `account` string: Account registering the builder; must be the EIP-712 signer and an on-chain RISEx account.
  - `slug` string: User-facing builder code. 3-32 chars, lowercase [a-z0-9-_], no leading/trailing or consecutive separators. The "builder-" prefix is reserved for placeholder slugs.
  - `name` string: Display name, 1-50 characters.
  - `nonce` string: One-time nonce from GET /v1/auth/nonce (hex).
  - `deadline` integer: Unix timestamp after which the signature is rejected.
  - `signature` string: EIP-712 RegisterBuilder signature; 64-byte compact or 65-byte, hex-encoded.

## Response `200`

A successful response.

- ApiRegisterBuilderResponse
  - `builder_id` integer: Builder ID assigned on-chain by FeeManager.registerBuilderCode().
  - `slug` string
  - `name` string
  - `tx_hash` string
  - `block_number` string, uint64

## 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/v1/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)
