---
title: "Read the caller's own unlock snapshot"
method: GET
path: "/api/funko/progress"
tags: ["funko", "browser-session"]
---

# Read the caller's own unlock snapshot

`GET /api/funko/progress`

## Request

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

Clerk-session only and SELF-ONLY - there is no `userId` parameter and there must never be one. Recomputes on a cache miss or a stale snapshot; a snapshot computed while any gating signal was degraded is never cached. A signal whose read failed reports `value: null` plus an `error` string rather than a coerced zero. `?fresh=1` skips the cache for the 'I just linked GitHub, why is it still locked' case.

## Query parameters

- `fresh` '1'

## Response `200`

The unlock snapshot plus a flattened `stats` block.

- FunkoProgressResponse: The UnlockSnapshot spread at the top level, plus a flattened `stats` block.
  - `ok` boolean, required
  - `granted` string[]: Catalog ids the member has earned.
  - `stats` object[], required
    - `id` string
    - `label` string
    - `unit` string
    - `value` union: null when the read FAILED. Never coerced to zero — the null is the message.
      - number
      - string
    - `source` string
    - `asOf` string, date-time
    - `error` string: Present only on a failed read. Member-safe; names the remedy where there is one.
  - `cached` boolean: Whether this came from the snapshot cache.

## Other responses

- `401`: Not signed in.
- `500`: Signal read failed.

---

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