---
title: "Get a meeting"
method: GET
path: "/api/v1/meetings/{meetingId}"
tags: ["Meetings"]
---

# Get a meeting

`GET /api/v1/meetings/{meetingId}`

## Request

- Base URL: `https://api.recruitwithatlas.com`
- URL: `https://api.recruitwithatlas.com/api/v1/meetings/{meetingId}`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/recruitwithatlas/apis/atlas-api/docs/api/v1/meetings/:meetingId/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns the core meeting record: schedule, status, organizer, participants, linked project/company, and custom attributes. The transcript, manual note, and AI notes are **not** included — each can be large, so they will be served by dedicated sub-resource endpoints. Use the list endpoint’s `hasTranscript` / `hasManualNote` / `hasAiNotes` flags to check whether those artefacts exist.

This endpoint serves **general meetings only**. If the requested ID resolves to a candidate interview, the response is a `422` whose body points at `GET /api/v1/interviews/{interviewId}`.

## Path parameters

- `meetingId` string, uuid, required: ID of the meeting to retrieve

## Response `200`

Meeting detail

- object
  - `status` 'ok', required
  - `data` object, required
    - `id` string, uuid, required
    - `name` string, nullable, required
    - `description` string, nullable, required
    - `location` string, nullable, required
    - `meetingUrl` string, nullable, required
    - `method` 'video_call' | 'phone_call' | 'in_person' | 'null', nullable, required: Communication method. Null when the meeting has no linked interview record.
    - `status` 'draft' | 'created' | 'scheduled' | 'coming' | 'waiting_to_join' | 'live' | 'completed' | 'transcribed' | 'failed' | 'canceled' | 'no_answer' | 'scheduling', required: Meeting status (meeting.status)
    - `direction` 'inbound' | 'outbound' | 'null', nullable, required: Call direction (`inbound`/`outbound`). Only populated for VoIP-sourced phone calls (e.g. RingOver, RingCentral); null for video meetings and manually logged calls.
    - `startAt` string, nullable, required: UTC ISO 8601 start time
    - `endAt` string, nullable, required: UTC ISO 8601 end time
    - `createdAt` string, nullable, required
    - `updatedAt` string, nullable, required: Effective last-updated timestamp: the later of the meeting row and its linked interview record — the same value the list endpoint reports.
    - `organizer` object, nullable, required: Meeting organizer — resolved the same way as the list shape: an Atlas user when the organizer email matches one of the meeting users, otherwise an `external` attendee with `id` null. Null when no organizer was recorded. The organizer may or may not also appear in `participants` — do not assume dedup.
      - `id` string, uuid, nullable, required: Atlas user ID when `type=user`; null when `type=external` (organizer not present in Atlas).
      - `name` string, required
      - `email` string, nullable, required
      - `type` 'user' | 'external', required
      - `relationship` 'user' | 'external', required: Same as `type`: `user` for an Atlas user, `external` for an organizer not present in Atlas.
    - `participants` object[], required: Flat list of users and people invited to the meeting. Filter by `type` to separate them.
      - `id` string, uuid, required: Atlas user or person ID
      - `name` string, required
      - `email` string, nullable, required
      - `type` 'user' | 'person', required
      - `relationship` 'user' | 'candidate' | 'company_contact' | 'person', required: How the participant relates to the interview: `user` (an Atlas user), `candidate` (the interview candidate), `company_contact` (a person who is an active contact of a company), or `person` (any other person).
    - `project` object, nullable, required: Project linked to the meeting. Null when no project is associated.
      - `id` string, uuid, required
      - `role` string, required: Job role (project.jobRole)
      - `companyName` string, nullable, required: Name of the project's company, null when none is set
    - `company` object, nullable, required: Company linked to the meeting. Resolved from the linked project's company when present, otherwise from the direct company link. Null when neither is set.
      - `id` string, uuid, required
      - `name` string, required
    - `customAttributes` object[], required
      - `attributeId` string, uuid, required: Custom attribute definition ID
      - `attributeName` string, nullable, required: Attribute name
      - `attributeType` 'options' | 'text_block' | 'text_line' | 'number_input' | 'integer' | 'date' | 'null', nullable, required: Attribute type — drives the shape of each entry in `values`.
      - `values` union[], required: All values recorded for this attribute. For single-value attributes the array has one entry; for multi-select `options` attributes it may have several.
        - union: A single value entry. Shape depends on `attributeType`: - `text_line` / `text_block` → string - `integer` / `number_input` → number - `date` → ISO `YYYY-MM-DD` string - `options` → `{ optionId, optionValue }` object
          - string
          - number
          - object
            - `optionId` string, uuid, required: Selected option ID
            - `optionValue` string, nullable, required: Display value of the option

## Other responses

- `401`: Unauthorized - missing or invalid API key
- `404`: Meeting not found or belongs to a different agency
- `422`: meetingId is not a valid UUID, or the ID belongs to an interview (the body then carries `correctEndpoint: "GET /api/v1/interviews/:interviewId"`).
- `429`: Too many requests - the caller has exceeded the per-agency rate limit for the tier this endpoint counts against (default per minute: 1200 read / 400 write / 60 upload). Inspect the `RateLimit-*` headers — returned on every response, not only on 429s — and back off until the window resets. See the "Rate limits" section of the introduction for details.

## Changes

- **2026-11-03** `158ee454751c`: 3 warning
  - added the new `undefined` enum value to the `data/customAttributes/items/attributeType` response property for the response status `200`
  - added the new `undefined` enum value to the `data/direction` response property for the response status `200`
  - added the new `undefined` enum value to the `data/method` response property for the response status `200`

[Operation history](https://skmtc.dev/recruitwithatlas/apis/atlas-api/changes/api/v1/meetings/:meetingId/get.md)

---

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