---
title: "Preview profile badges"
method: POST
path: "/users/@me/profile-badges/preview"
tags: ["Users"]
---

# Preview profile badges

`POST /users/@me/profile-badges/preview`

## Request

- Base URL: `https://web.fluxer.app/api/v1`
- URL: `https://web.fluxer.app/api/v1/users/@me/profile-badges/preview`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/fluxer/apis/fluxer-api/docs/users/@me/profile-badges/preview/post.ts> (a function with typed inputs; its response is checked against the schema)

Returns the current user's profile badges as other people would see them with the given badge settings applied. Settings left out keep their saved values. Nothing is saved. Labels are localized for the current user.

## Request body

- ProfileBadgePreviewRequest
  - `hidden_profile_badges` string[]: The full list of badge keys to hide from other people. It replaces the stored list, takes precedence over the deprecated hide fields, and keys of custom badges that no longer exist are dropped
  - `premium_badge_masked` boolean: Preview with the premium badge masked
  - `premium_badge_timestamp_hidden` boolean: Preview with the premium badge date hidden
  - `operator_pass_badge_timestamp_hidden` boolean: Preview with the month and year the Operator Pass was first held hidden
  - `operator_pass_badge_count_hidden` boolean: Preview with the number of Operator Passes held hidden
  - `premium_badge_hidden` boolean: Deprecated, use hidden_profile_badges
  - `premium_badge_sequence_hidden` boolean: Deprecated, use hidden_profile_badges
  - `operator_pass_badge_hidden` boolean: Deprecated, use hidden_profile_badges

## Response `200`

Success

- ProfileBadgePreviewResponse
  - `profile_badges` ProfileBadgeResponse[], required: Profile badges in display order. Empty when there is nothing to show
    - `key` string, required: Stable identity of the badge. It equals kind for built-in badges and is custom:{id} for custom badges, so use it as the list key
    - `kind` string, required: Badge type. Known values: staff, partner, bug_hunter, operator_pass, visionary, visionary_number, plutonium, custom, and premium on self-hosted instances. Clients must render unknown values from the other fields.
    - `label` string, required: Full badge description, localized for the viewer. Use it as the tooltip, and as alt text when there is no caption
    - `asset` string, required
    - `asset_url` string, nullable, required: Absolute image URL for a badge whose image is not a static badge hash, such as a custom badge. Null otherwise
    - `small_asset` string
    - `aspect_ratio` number, nullable, required: Image width divided by its height. Render the image at the badge height and this many times as wide. Null for square badges
    - `caption` string, nullable, required: Short text for the badge, such as #42. A badge with an image uses it as alt text, and a badge without one shows it as text. Null when the label covers it
    - `href` string, nullable, required: Absolute URL to open when the badge is clicked, or null
    - `count` integer, nullable: How many passes the badge stands for, from 2. The badge art already carries the number, so clients never draw it on top. Absent below 2 and when the holder hides the number from other people
    - `accessible_label` string, nullable: Label for screen readers with the full count, used instead of label when present
    - `details` object, nullable: Content for the richer vertical tooltip, null or absent when label is the whole tooltip
      - `title` string, required: First line of the tooltip under the larger badge art
      - `lines` string[], required: Further tooltip lines, in order
    - `quote` string, nullable: The quote from the holder's Operators' wall listing, plain text to show in straight double quotes after the other tooltip lines and never parse as markup. Absent while the wall does not show it
  - `own_badges` OwnProfileBadgeResponse[], required: Every badge you hold, in display order, with whether these settings hide it
    - `key` string, required: Stable identity of the badge. It equals kind for built-in badges and is custom:{id} for custom badges, so use it as the list key
    - `kind` string, required: Badge type. Known values: staff, partner, bug_hunter, operator_pass, visionary, visionary_number, plutonium, custom, and premium on self-hosted instances. Clients must render unknown values from the other fields.
    - `label` string, required: Full badge description, localized for the viewer. Use it as the tooltip, and as alt text when there is no caption
    - `asset` string, required
    - `asset_url` string, nullable, required: Absolute image URL for a badge whose image is not a static badge hash, such as a custom badge. Null otherwise
    - `small_asset` string
    - `aspect_ratio` number, nullable, required: Image width divided by its height. Render the image at the badge height and this many times as wide. Null for square badges
    - `caption` string, nullable, required: Short text for the badge, such as #42. A badge with an image uses it as alt text, and a badge without one shows it as text. Null when the label covers it
    - `href` string, nullable, required: Absolute URL to open when the badge is clicked, or null
    - `count` integer, nullable: How many passes the badge stands for, from 2. The badge art already carries the number, so clients never draw it on top. Absent below 2 and when the holder hides the number from other people
    - `accessible_label` string, nullable: Label for screen readers with the full count, used instead of label when present
    - `details` object, nullable: Content for the richer vertical tooltip, null or absent when label is the whole tooltip
      - `title` string, required: First line of the tooltip under the larger badge art
      - `lines` string[], required: Further tooltip lines, in order
    - `quote` string, nullable: The quote from the holder's Operators' wall listing, plain text to show in straight double quotes after the other tooltip lines and never parse as markup. Absent while the wall does not show it
    - `hidden` boolean, required: True when the badge key is in your hidden_profile_badges, so other people do not see it

## Other responses

- `400`: Bad Request - The request was malformed or contained invalid data
- `401`: Unauthorized - Authentication is required or the token is invalid
- `403`: Forbidden - You do not have permission to perform this action
- `429`: Too Many Requests - You are being rate limited
- `500`: Internal Server Error - An unexpected error occurred

## Changes

> 65 revisions in range; 2 not diffed.

- **2026-11-04** `fad4dd738895`: 2 info
  - added the optional property `own_badges/items/quote` to the response with the `200` status
  - added the optional property `profile_badges/items/quote` to the response with the `200` status
- **2026-10-26** `2feeda8f8dd5`: 4 info
  - added the new optional request property `hidden_profile_badges`
  - added the required property `own_badges` to the response with the `200` status
  - added the required property `profile_badges/items/asset_url` to the response with the `200` status
  - added the required property `profile_badges/items/key` to the response with the `200` status
- **2026-10-24** `2ecd716d4472`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/fluxer/apis/fluxer-api/changes/users/@me/profile-badges/preview/post.md)

---

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