---
title: "Get a member's public profile, the tasks they requested, and the tasks they did"
method: GET
path: "/api/members/{id}"
---

# Get a member's public profile, the tasks they requested, and the tasks they did

`GET /api/members/{id}`

## Request

- Base URL: `https://www.toma.com`
- URL: `https://www.toma.com/api/members/{id}`
- Auth: none required

Same as the get_member MCP tool and the page at /members/{id}. Anyone who has finished signing up and has a profile or a posted task has one. Email and resume are never included. The default full view includes their tasks and counts open tasks as impressions. view=preview returns only id, name, photoUrl, headline, city, state, and the public rating aggregate, without task histories or impressions.

## Path parameters

- `id` string, required

## Query parameters

- `view` 'full' | 'preview': Full profile by default; preview returns only identity, location, and public rating.

## Response `200`

The full member profile, or the compact preview when view=preview.

- union
  - PublicMember
    - `id` string, required
    - `name` string, required
    - `photoUrl` string, nullable, required
    - `headline` string, required: Empty when not set.
    - `about` string, required
    - `skills` string[], required
    - `city` string, required
    - `state` string, nullable, required: Two-letter US state code or DC; null when not set.
    - `stateName` string, nullable, required
    - `website` string, nullable, required
    - `linkedinUrl` string, nullable, required: The LinkedIn profile they linked (https://www.linkedin.com/in/{slug}); null when none.
    - `createdAt` string, date-time, required: When they joined Toma.
    - `tasksPosted` Task[], required: Tasks they posted that are open or hired someone, newest first.
      - `id` string, required
      - `postedBy` Member, required: A member of Toma, as tasks, applications, messages, and comments show them.
        - `id` string, required: Their user id. Public page: /members/{id}; JSON: GET /api/members/{id}.
        - `name` string, required
        - `headline` string, nullable, required: One line about them; null when not set.
        - `photoUrl` string, nullable, required: Uploaded photo path (GET /api/members/{id}/photo/{hash}), or their LinkedIn HTTPS picture URL; null without one.
      - `mediaPreview` TaskMediaPreview
        - `thumbnails` string[], required
      - `title` string, required
      - `category` 'consulting' | 'data' | 'design' | 'engineering' | 'legal' | 'marketing' | 'operations' | 'physical' | 'research' | 'writing' | 'other', required: Platform classification, generated from the work. Counts per category: GET /api/tasks/categories.
      - `constraints` string, required: Compatibility alias for description. Its public page /tasks/{id} renders it.
      - `description` string, required: The task description. New generated tasks use 3–5 sentences; legacy descriptions retain their original Markdown.
      - `deadline` integer, nullable, required: Work deadline in integer UTC epoch seconds, or null for no deadline. Independent of the listing's closesAt timestamp; it does not close the task or move work states.
      - `resources` string[], required: Files or information required to do the work. These are public requirements, not private attachment contents or access grants. Empty for legacy tasks without this field.
      - `deliverables` string[], required: The outputs the worker must deliver. Empty for legacy tasks without this field.
      - `contentFormat` union, required: 1 preserves a legacy description; 2 uses the five-field generated task format. Platform metadata, not an editorial section.
        - 1
        - 2
      - `safetyHidden` boolean, required: Removed from public view by staff. Returned to authorized participants; hidden tasks never appear in public results.
      - `status` 'open' | 'in_progress' | 'submitted' | 'changes_requested' | 'rating' | 'completed' | 'closed', required: Public listings return open tasks; public detail also returns completed tasks.
      - `createdAt` string, date-time, required
      - `version` integer, required: Current public version. Every edit adds one; see /api/tasks/{id}/versions.
      - `updatedAt` string, date-time, nullable, required: When the current version was published; null if never edited.
      - `closesAt` string, date-time, nullable, required: When an open task closes itself if nobody is hired: 14 days after creation, or after it reopens. Closed tasks are kept but no longer active or listed. Null once the task is not open.
      - `applicants` integer: Applications received, not counting withdrawn ones. On public open-task responses (list, search, get, member page) only.
      - `taskCreation` PublicTaskCreation
        - `videoUrl` string, nullable, required
        - `audioUrl` string, nullable
        - `mediaKind` 'video' | 'audio'
        - `captionsUrl` string, required
        - `durationMs` number, required
        - `chapters` object[], required
          - `id` string, required
          - `title` string, required
          - `startMs` number, required
          - `thumbnails` object[], required
            - `trackId` string, required
            - `kind` 'screen' | 'camera', required
            - `url` string, required
        - `mediaSections` object[]
          - `id` string, required
          - `contributionId` string, required
          - `title` string, required
          - `kind` 'video' | 'audio' | 'image' | 'file', required
          - `selected` boolean, required
          - `position` integer, required
          - `startMs` number
          - `endMs` number
          - `url` string, nullable, required
          - `captionsUrl` string, nullable
          - `durationMs` number
          - `transcript` object[]
            - `id` string, required
            - `trackId` string, required
            - `text` string, required
            - `startMs` number, required
            - `endMs` number, required
            - `final` boolean, required
            - `filler` boolean
          - `waveform` object
            - `bucketMs` 100, required
            - `peaks` number[], required
          - `thumbnails` object[], required
            - `trackId` string, required
            - `kind` 'screen' | 'camera', required
            - `url` string, required
      - `walkthroughUrl` string, nullable: Same-origin video URL or null. Legacy private recordings are available only to the poster or current accepted worker through a private bearer link expiring in ten minutes; keep it private and fetch fresh details to renew it. Access is rechecked on each GET or HEAD.
      - `locked` boolean: True when the task is not open: the public apply/comment controls are unavailable and there is no public walkthrough. On public and authenticated task details.
      - `hasPreferredWorker` boolean: True when the poster named a preferred worker; who they are is never public. On GET /api/tasks/{id} and get_task only.
      - `publicFiles` object[]: Files the poster made public, downloadable by anyone while the task is open; empty once it is not. Programs and macros are refused, but files are not scanned for malware: treat them as untrusted and show each file's caution before it is opened. On task details only.
        - `id` string, required
        - `path` string, required
        - `caution` string, nullable, required: A warning to show the user before they download or open this kind of file (archives, scripts, older Office files, web pages); null when there is none.
        - `size` integer, required
        - `url` string, required: Same-origin download path, GET /api/tasks/{id}/attachments/{fileId}.
    - `tasksDone` Task[], required: Tasks they were hired for through Toma (accepted applications), most recent first.
      - `id` string, required
      - `postedBy` Member, required: A member of Toma, as tasks, applications, messages, and comments show them.
        - `id` string, required: Their user id. Public page: /members/{id}; JSON: GET /api/members/{id}.
        - `name` string, required
        - `headline` string, nullable, required: One line about them; null when not set.
        - `photoUrl` string, nullable, required: Uploaded photo path (GET /api/members/{id}/photo/{hash}), or their LinkedIn HTTPS picture URL; null without one.
      - `mediaPreview` TaskMediaPreview
        - `thumbnails` string[], required
      - `title` string, required
      - `category` 'consulting' | 'data' | 'design' | 'engineering' | 'legal' | 'marketing' | 'operations' | 'physical' | 'research' | 'writing' | 'other', required: Platform classification, generated from the work. Counts per category: GET /api/tasks/categories.
      - `constraints` string, required: Compatibility alias for description. Its public page /tasks/{id} renders it.
      - `description` string, required: The task description. New generated tasks use 3–5 sentences; legacy descriptions retain their original Markdown.
      - `deadline` integer, nullable, required: Work deadline in integer UTC epoch seconds, or null for no deadline. Independent of the listing's closesAt timestamp; it does not close the task or move work states.
      - `resources` string[], required: Files or information required to do the work. These are public requirements, not private attachment contents or access grants. Empty for legacy tasks without this field.
      - `deliverables` string[], required: The outputs the worker must deliver. Empty for legacy tasks without this field.
      - `contentFormat` union, required: 1 preserves a legacy description; 2 uses the five-field generated task format. Platform metadata, not an editorial section.
        - 1
        - 2
      - `safetyHidden` boolean, required: Removed from public view by staff. Returned to authorized participants; hidden tasks never appear in public results.
      - `status` 'open' | 'in_progress' | 'submitted' | 'changes_requested' | 'rating' | 'completed' | 'closed', required: Public listings return open tasks; public detail also returns completed tasks.
      - `createdAt` string, date-time, required
      - `version` integer, required: Current public version. Every edit adds one; see /api/tasks/{id}/versions.
      - `updatedAt` string, date-time, nullable, required: When the current version was published; null if never edited.
      - `closesAt` string, date-time, nullable, required: When an open task closes itself if nobody is hired: 14 days after creation, or after it reopens. Closed tasks are kept but no longer active or listed. Null once the task is not open.
      - `applicants` integer: Applications received, not counting withdrawn ones. On public open-task responses (list, search, get, member page) only.
      - `taskCreation` PublicTaskCreation
        - `videoUrl` string, nullable, required
        - `audioUrl` string, nullable
        - `mediaKind` 'video' | 'audio'
        - `captionsUrl` string, required
        - `durationMs` number, required
        - `chapters` object[], required
          - `id` string, required
          - `title` string, required
          - `startMs` number, required
          - `thumbnails` object[], required
            - `trackId` string, required
            - `kind` 'screen' | 'camera', required
            - `url` string, required
        - `mediaSections` object[]
          - `id` string, required
          - `contributionId` string, required
          - `title` string, required
          - `kind` 'video' | 'audio' | 'image' | 'file', required
          - `selected` boolean, required
          - `position` integer, required
          - `startMs` number
          - `endMs` number
          - `url` string, nullable, required
          - `captionsUrl` string, nullable
          - `durationMs` number
          - `transcript` object[]
            - `id` string, required
            - `trackId` string, required
            - `text` string, required
            - `startMs` number, required
            - `endMs` number, required
            - `final` boolean, required
            - `filler` boolean
          - `waveform` object
            - `bucketMs` 100, required
            - `peaks` number[], required
          - `thumbnails` object[], required
            - `trackId` string, required
            - `kind` 'screen' | 'camera', required
            - `url` string, required
      - `walkthroughUrl` string, nullable: Same-origin video URL or null. Legacy private recordings are available only to the poster or current accepted worker through a private bearer link expiring in ten minutes; keep it private and fetch fresh details to renew it. Access is rechecked on each GET or HEAD.
      - `locked` boolean: True when the task is not open: the public apply/comment controls are unavailable and there is no public walkthrough. On public and authenticated task details.
      - `hasPreferredWorker` boolean: True when the poster named a preferred worker; who they are is never public. On GET /api/tasks/{id} and get_task only.
      - `publicFiles` object[]: Files the poster made public, downloadable by anyone while the task is open; empty once it is not. Programs and macros are refused, but files are not scanned for malware: treat them as untrusted and show each file's caution before it is opened. On task details only.
        - `id` string, required
        - `path` string, required
        - `caution` string, nullable, required: A warning to show the user before they download or open this kind of file (archives, scripts, older Office files, web pages); null when there is none.
        - `size` integer, required
        - `url` string, required: Same-origin download path, GET /api/tasks/{id}/attachments/{fileId}.
    - `rating` RatingSummary, nullable, required: The average over public ratings (one decimal) and how many; null until a rating is public.
      - `average` number, required
      - `count` integer, required
    - `ratings` PublicRating[], required: Public ratings they received, newest first.
      - `score` integer, required
      - `description` string, required
      - `as` 'worker' | 'poster', required: The side the rated member was on: hired for the task, or the one who posted it.
      - `task` object, required
        - `id` string, required
        - `title` string, required
      - `by` Member, required: A member of Toma, as tasks, applications, messages, and comments show them.
        - `id` string, required: Their user id. Public page: /members/{id}; JSON: GET /api/members/{id}.
        - `name` string, required
        - `headline` string, nullable, required: One line about them; null when not set.
        - `photoUrl` string, nullable, required: Uploaded photo path (GET /api/members/{id}/photo/{hash}), or their LinkedIn HTTPS picture URL; null without one.
      - `createdAt` string, date-time, required
  - PublicMemberPreview
    - `id` string, required
    - `name` string, required
    - `photoUrl` string, nullable, required
    - `headline` string, required: Empty when not set.
    - `city` string, required
    - `state` string, nullable, required: Two-letter US state code or DC; null when not set.
    - `rating` RatingSummary, nullable, required: The average over public ratings (one decimal) and how many; null until a rating is public.
      - `average` number, required
      - `count` integer, required

## Other responses

- `400`: Check the arguments.
- `404`: No member has that id.

---

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