---
title: "Read the caller's own member profile"
method: GET
path: "/api/membership/profile"
tags: ["membership"]
---

# Read the caller's own member profile

`GET /api/membership/profile`

## Request

- Base URL: `https://www.immersivecommons.com`
- URL: `https://www.immersivecommons.com/api/membership/profile`
- Auth: one of:
  - API key in cookie `__session`
  - HTTP bearer

Clerk session, or agt_ token with `membership:write` — note the READ shares the write scope, because the route resolves both verbs through one auth path. A member who has never saved a profile gets a default stub rather than a 404.

## Response `200`

The caller's profile.

- MemberProfileResponse
  - `ok` boolean, required
  - `profile` MemberProfile, required
    - `clerk_user_id` string, required
    - `first_name` string
    - `photo_data_url` string: Set through /api/membership/profile/photo, not this route.
    - `company_website` string: Normalized to an absolute URL on save.
    - `company_logo_url` string: Derived from company_website; not settable directly.
    - `public_visible` boolean, required: Whether the member appears on the public members wall.
    - `ring` string, required: Snapshot of the member's tier at the last save — public | ft-member | ai-floor | ic-member | operator.
    - `updated_at` string, date-time, required

## Other responses

- `401`: No auth.
- `403`: Scope/tier not authorized.

---

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