---
title: "Get a member's published Funko Me figure by handle"
method: GET
path: "/api/funko/m/{handle}"
tags: ["funko"]
---

# Get a member's published Funko Me figure by handle

`GET /api/funko/m/{handle}`

## Request

- Base URL: `https://www.immersivecommons.com`
- URL: `https://www.immersivecommons.com/api/funko/m/{handle}`
- Auth: none required

Public, no auth, CORS-open, cacheable. Returns a manifest of PARTS, not a baked file: `parts.body` and `parts.library` are byte-identical for every member and cache once for the whole floor; only `parts.head` is per-person. `bakedGlbUrl` is optional forever — do not require it. `clips` is the member's UNLOCKED subset, never the full set. A `stats[].value` of null means the source could not be read — it does NOT mean zero.

Members are private by default. A handle whose owner has not opted in returns exactly the same 404 as a handle nobody ever registered, so this endpoint cannot be used to enumerate membership.

## Path parameters

- `handle` string, required

## Response `200`

The figure manifest itself — the response body is the FunkoManifest.

- FunkoManifest
  - `handle` string, required: URL-safe lowercase handle.
  - `displayName` string, required
  - `tier` string, required: The member's ring: public | ft-member | ai-floor | ic-member | operator.
  - `parts` object, required: Compose these client-side. Do NOT expect one baked file.
    - `body` string, required: Absolute https URL. Shared 62k-tri rigged body, identical for every member.
    - `library` string, required: Absolute https URL. Shared skeleton-only clip library.
    - `head` string, required: Absolute https URL. Per-person head, a rigid child of the Head bone.
  - `bakedGlbUrl` string: OPTIONAL FOREVER. Present only if a single-file bake exists. Never require it.
  - `thumbUrl` string
  - `clips` string[], required: Animation names inside library.glb that this member has actually UNLOCKED. Never the full set — the unlock set is the membership signal.
  - `props` string[], required: Socketed props, re-filtered against live unlocks on every read.
  - `activeClip` string, required: The clip to play by default. Always one of `clips`, or empty when none are unlocked.
  - `stats` object[], required: The measurables behind the unlocks.
    - `id` string
    - `label` string
    - `value` integer, nullable: null means the source could NOT be read. It does not mean zero — do not render it as 0.
    - `unit` string
  - `profileUrl` string, required
  - `generatedAt` string, required: ISO-8601 of this response, not of the underlying data.

## Other responses

- `404`: No PUBLIC figure for that handle — indistinguishable from an unregistered handle, by design.
- `503`: Figure lookup temporarily unavailable.

---

[API](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api.md) · [All operations](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api/revisions/be67c1f67c27?raw)
