---
title: "Creates a new badge."
method: POST
path: "/legacy-badges/v1/universes/{universeId}/badges"
tags: ["Badges", "Universes"]
---

# Creates a new badge.

`POST /legacy-badges/v1/universes/{universeId}/badges`

## Request

- Base URL: `https://apis.roblox.com`
- URL: `https://apis.roblox.com/legacy-badges/v1/universes/{universeId}/badges`
- Auth: one of:
  - API key in header `x-api-key`
  - OAuth 2
    - Authorization code: `https://apis.roblox.com/oauth/v1/authorize`
    - Token URL: `https://apis.roblox.com/oauth/v1/token` scopes: `legacy-universe.badge:manage-and-spend-robux`

Charges the selected payment source and creates the badge under the universe's root place.

## Path parameters

- `universeId` integer, required

## Request body `multipart/form-data`

- object
  - `name` string: The badge name.
  - `description` string: The badge description.
  - `paymentSourceType` 1 | 2: Whether or not to pay for the badge with user funds, or group funds.
  - `files` string, binary: The badge icon. Optional: when omitted and a curated default badge icon is configured on the service, the badge is created with that default icon. When provided, exactly one file must be supplied.
  - `expectedCost` integer: User expected cost of a badge.
  - `isActive` boolean: Whether or not the badge should be created in the active state.

## Response `200`

OK

- RobloxWebResponsesBadgesBadgeResponseV2
  - `id` integer
  - `name` string
  - `description` string
  - `displayName` string
  - `displayDescription` string
  - `enabled` boolean
  - `iconImageId` integer
  - `displayIconImageId` integer
  - `awarder` RobloxWebResponsesRelatedEntityTypeResponseRobloxPlatformBadgesBadgeAwarderType
    - `id` integer
    - `type` 1: ['Place' = 1]
    - `name` string
  - `statistics` RobloxWebResponsesBadgesBadgeAwardStatisticsResponse
    - `pastDayAwardedCount` integer
    - `awardedCount` integer
    - `winRatePercentage` number, double
  - `created` string, date-time
  - `updated` string, date-time

## Other responses

- `400`: 11: The badge icon is invalid. 14: Invalid badge name. 15: Invalid badge description. 16: Payment source is invalid. 18: Expected badge cost is different from the actual badge cost.
- `401`: 0: Authorization has been denied for this request.
- `403`: 0: Token Validation Failed 6: Text moderated. 12: You do not have permission to manage this game's badges. 17: Insufficient funds.
- `404`: 3: The game is invalid or does not exist.
- `429`: 13: Too many requests, try again later.

## Changes

- **2026-10-09** `a088ae4955d2`: 1 info
  - the security scope `legacy-universe.badge:manage-and-spend-robux` was added to the endpoint's security scheme `roblox-oauth2`

[Operation history](https://skmtc.dev/roblox/apis/roblox-api/changes/legacy-badges/v1/universes/:universeId/badges/post.md)

---

[API](https://skmtc.dev/roblox/apis/roblox-api.md) - [All operations](https://skmtc.dev/roblox/apis/roblox-api/llms.txt) - [OpenAPI document](https://skmtc.dev/roblox/apis/roblox-api/revisions/bcfdc20689cd?raw)
