---
title: "Take down, restore, or grant generations"
method: POST
path: "/api/funko/admin"
tags: ["funko", "browser-session"]
---

# Take down, restore, or grant generations

`POST /api/funko/admin`

## Request

- Base URL: `https://www.immersivecommons.com`
- URL: `https://www.immersivecommons.com/api/funko/admin`
- Auth: API key in cookie `__session`

Clerk session + operator ring. The action is named in the body rather than split across routes so the audit story is one handler: every branch writes a mod-log entry, and there is no path that mutates a figure without one. Calls the same moderation functions the MCP tools call, so the two surfaces cannot disagree about what a takedown does.

## Request body

- FunkoAdminActionRequest
  - `action` 'takedown' | 'restore' | 'grant', required
  - `handle` string: The figure to act on (takedown / restore).
  - `userId` string: The member to act on. Accepted in place of `handle`, and required for `grant`.
  - `reason` string: Recorded in the moderation log.
  - `count` integer: Generations to grant. `grant` only.

## Response `200`

The action's result.

- FunkoAdminActionResponse: Shape follows the action: takedown/restore echo the moderation result; grant returns the member's new grant total.
  - `ok` boolean, required
  - `userId` string
  - `grants` integer: `grant` only — the member's new grant total.

## Other responses

- `400`: Unknown action, or a missing/invalid argument.
- `401`: Not signed in.
- `403`: Not an operator.
- `404`: No such member or figure.
- `409`: The figure is already in the requested state.

---

[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)
