---
title: "Get a project"
method: GET
path: "/v1/projects/{id}"
tags: ["Projects"]
---

# Get a project

`GET /v1/projects/{id}`

Retrieve a project by ID.

## Query parameters

- `book_id` string

## Response `200`

project retrieved

- Project
  - `id` string, required — The project ID
  - `name` string, required — The project name
  - `status` 'in_progress' | 'overdue' | 'completed' | 'cancelled', required — Project status
  - `milestone_progress` integer, nullable — Percent complete for the current milestone
  - `overall_progress` integer, nullable — Percent complete for the whole project
  - `milestone_updated_at` string, date-time, nullable
  - `completed_at` string, date-time, nullable
  - `book_id` string, required — The book ID
  - `project_template_id` string — The project template ID
  - `project_milestone_id` string — The current project milestone ID
  - `assigned_to_id` string, nullable — Assigned user ID
  - `created_by_id` string, nullable — Creator user ID
  - `household_id` string, nullable — Attached household ID for household projects
  - `projectable_type` 'Household' | 'Contact' | 'Business', nullable — Related record model type, or null for ownerless projects
  - `projectable_id` string, nullable — Related record ID, or null for ownerless projects
  - `description` object
    - `html` string, nullable
    - `markdown` string, nullable
    - `nodes` unknown
    - `preferred_format` string
  - `comments_count` integer — Active comment count
  - `milestone_progresses` object[]
  - `visited_project_milestone_ids` string[]
  - `attachments` ProjectAttachment[]
    - `file_name` string
    - `file_type` string
    - `file_size` integer
    - `source` string
    - `signed_id` string
    - `download_url` string, nullable
    - `view_url` string, nullable
  - `household` object, nullable
    - `id` string
    - `name` string
    - `type` 'Client' | 'Prospect' | 'PastClient'
  - `projectable` ProjectProjectable
    - `id` string, required — The related record ID
    - `type` 'Client' | 'Prospect' | 'PastClient' | 'Contact' | 'Business', required — The related record type
    - `name` string, required — The related record display name
    - `person` Person
      - `id` string, required — The person ID
      - `book_id` string, required — The book ID
      - `household_id` string, nullable — The household ID
      - `contact_id` string, nullable — The contact ID (present when person belongs to a contact)
      - `role_type` 'client' | 'prospect' | 'contact' | 'past_client', nullable — The entity type this person belongs to
      - `first_name` string, required
      - `middle_name` string, nullable
      - `last_name` string, required
      - `salutation` string, nullable
      - `suffix` string, nullable
      - `maiden_name` string, nullable
      - `gender` 'female' | 'male' | 'nonbinary' | 'other' | 'prefer_not_to_say', nullable
      - `designations` string, nullable
      - `household_role` 'head_of_household' | 'partner' | 'spouse' | 'dependent_child' | 'other_adult' | 'other_dependent' | 'unknown' | 'deceased' | 'non_dependent_child' | 'grandchild', nullable — Only present when person belongs to a household
      - `preferred_name` string, nullable
      - `date_of_birth` string, date, nullable — Date of birth
      - `job_title` string, nullable — Job title
      - `ssn` string, nullable — Obfuscated social security number
      - `drivers_license_number` string, nullable — Obfuscated driver's license number
      - `email_addresses` Email[] — Array of email addresses with primary designation
        - `email` string, email, required
        - `email_type` 'personal' | 'business' | 'school' | 'other', required
        - `is_primary` boolean, required
      - `phone_numbers` PhoneNumber[] — Array of phone numbers with primary designation
        - `phone_number` string, required
        - `extension` string, nullable
        - `phone_type` 'mobile' | 'work' | 'home' | 'fax' | 'other', required
        - `is_primary` boolean, required
      - `addresses` Address[] — Array of addresses with primary designation
        - `line1` string, nullable
        - `line2` string, nullable
        - `city` string, nullable
        - `state` string, nullable
        - `zip` string, nullable
        - `country_code` string, nullable
        - `address_type` 'home' | 'work' | 'mailing' | 'other', required
        - `is_primary` boolean, required
      - `employments` Employment[] — Array of employment records
        - `id` string — The employment ID
        - `person_id` string — The person ID
        - `business_name` string, required
        - `role` string, nullable
        - `start_date` string, date, nullable
        - `end_date` string, date, nullable
        - `actively_employed` boolean
      - `custom_fields` object — Custom field values as key-value pairs
  - `assigned_to` User
    - `id` string, required — The ID of the user
    - `email` string, email, required — Email address of the user
    - `first_name` string, nullable, required — First name of the user
    - `last_name` string, nullable, required — Last name of the user
    - `api_access` object — Authentication details for the current personal access token. Only present on /v1/me when authenticating with a PAT.
      - `auth_type` 'personal_access_token'
      - `scope` 'read_only' | 'read_write'
  - `created_by` User
    - `id` string, required — The ID of the user
    - `email` string, email, required — Email address of the user
    - `first_name` string, nullable, required — First name of the user
    - `last_name` string, nullable, required — Last name of the user
    - `api_access` object — Authentication details for the current personal access token. Only present on /v1/me when authenticating with a PAT.
      - `auth_type` 'personal_access_token'
      - `scope` 'read_only' | 'read_write'
  - `project_milestone` ProjectMilestone, required
    - `id` string, required — The project milestone ID
    - `guid` string — The project milestone GUID
    - `title` string, required — The milestone title
    - `color` string, nullable — Milestone display color
    - `sort_order` integer, nullable — Milestone sort order
    - `auto_advance_trigger` 'all_tasks_completed' | 'meeting_scheduled' | 'meeting_completed'
    - `project_template_id` string, required — The project template ID
    - `created_at` string, date-time — When the milestone was created
    - `updated_at` string, date-time — When the milestone was last updated
    - `project_milestone_outcomes` ProjectMilestoneOutcome[]
      - `id` string, required — The milestone outcome ID
      - `label` string, required — The outcome label
      - `default_comment` string, nullable — Default comment for this outcome
      - `destination` 'next_milestone' | 'specific_milestone' | 'complete_project', required — Where this outcome moves the project
      - `sort_order` integer, nullable — Outcome sort order
      - `target_project_milestone_id` string, nullable — Target milestone ID for specific milestone outcomes
    - `project_milestone_form_fields` ProjectMilestoneFormField[]
      - `id` string, required — The form field ID
      - `guid` string — The form field GUID
      - `label` string, required — The field label
      - `field_type` 'text' | 'textarea' | 'number' | 'date' | 'select' | 'boolean' | 'currency' | 'household_record' | 'file_attachment', required
      - `required` boolean, required — Whether this field is required
      - `placeholder` string, nullable
      - `sort_order` integer — Field sort order
      - `household_record_source` string, nullable
      - `select_options` string[], nullable
  - `project_template` ProjectTemplate, required
    - `id` string, required — The project template ID
    - `guid` string — The project template GUID
    - `title` string, required — The template title
    - `description` string, nullable
    - `projectable_kind` 'household' | 'contact' | 'business' — The related record kind this template supports
    - `enable_kanban_view` boolean
    - `book_id` string, nullable — The owning book ID, or null for company-wide templates
    - `order_index` integer
    - `book_name` string, nullable
    - `book_initials` string, nullable
    - `attachments` ProjectAttachment[]
      - `file_name` string
      - `file_type` string
      - `file_size` integer
      - `source` string
      - `signed_id` string
      - `download_url` string, nullable
      - `view_url` string, nullable
    - `project_milestones` ProjectMilestone[], required
      - `id` string, required — The project milestone ID
      - `guid` string — The project milestone GUID
      - `title` string, required — The milestone title
      - `color` string, nullable — Milestone display color
      - `sort_order` integer, nullable — Milestone sort order
      - `auto_advance_trigger` 'all_tasks_completed' | 'meeting_scheduled' | 'meeting_completed'
      - `project_template_id` string, required — The project template ID
      - `created_at` string, date-time — When the milestone was created
      - `updated_at` string, date-time — When the milestone was last updated
      - `project_milestone_outcomes` ProjectMilestoneOutcome[]
        - `id` string, required — The milestone outcome ID
        - `label` string, required — The outcome label
        - `default_comment` string, nullable — Default comment for this outcome
        - `destination` 'next_milestone' | 'specific_milestone' | 'complete_project', required — Where this outcome moves the project
        - `sort_order` integer, nullable — Outcome sort order
        - `target_project_milestone_id` string, nullable — Target milestone ID for specific milestone outcomes
      - `project_milestone_form_fields` ProjectMilestoneFormField[]
        - `id` string, required — The form field ID
        - `guid` string — The form field GUID
        - `label` string, required — The field label
        - `field_type` 'text' | 'textarea' | 'number' | 'date' | 'select' | 'boolean' | 'currency' | 'household_record' | 'file_attachment', required
        - `required` boolean, required — Whether this field is required
        - `placeholder` string, nullable
        - `sort_order` integer — Field sort order
        - `household_record_source` string, nullable
        - `select_options` string[], nullable
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `project_form_field_responses` ProjectFormFieldResponse[]
    - `id` string, required — The form field response ID
    - `project_milestone_form_field_id` string, required — The form field ID
    - `value` unknown
    - `display_value` string, nullable — Display value for household record or file attachment fields
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Other responses

- `400` — bad request - invalid JSON
- `401` — unauthorized - missing or invalid token
- `403` — forbidden
- `404` — not found

---

[API](https://skmtc.net/slant/apis/slant-public-api-v1.md) · [All operations](https://skmtc.net/slant/apis/slant-public-api-v1/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/slant/slant-public-api-v1/revisions/b56e0d137554/schema)
