> ## Documentation Index
> Fetch the complete documentation index at: https://docs.slant.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a project

> Create a new project from a known project template.



## OpenAPI

````yaml /api-reference/openapi.yaml post /v1/projects
openapi: 3.0.1
info:
  title: Slant Public API V1
  version: v1
  description: Public API for creating and managing resources in Slant
  contact:
    name: Slant API Support
    email: api@slant.com
servers:
  - url: https://api.slant.app
security:
  - bearer: []
paths:
  /v1/projects:
    post:
      tags:
        - Projects
      summary: Create a project
      description: Create a new project from a known project template.
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
          description: Unique key to ensure idempotent request handling.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - book_id
                - project_template_id
              properties:
                book_id:
                  type: string
                  description: The book ID
                  example: book123xyz
                project_template_id:
                  type: string
                  description: The project template ID
                  example: template123xyz
                name:
                  type: string
                  description: Project name
                  example: Smith Family Onboarding
                projectable_type:
                  type: string
                  enum:
                    - Household
                    - Contact
                    - Business
                  description: Related record type. Omit for ownerless projects.
                  example: Household
                projectable_id:
                  type: string
                  description: Related household, contact, or business ID
                  example: household123xyz
                assigned_to_id:
                  type: string
                  description: Assigned user ID
                  example: user123xyz
                form_responses:
                  type: object
                  description: >-
                    Project form responses keyed by project milestone form field
                    ID
        required: true
      responses:
        '201':
          description: project created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '400':
          description: bad request - invalid JSON
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                  - detail
                properties:
                  error:
                    type: string
                    description: Error code
                    enum:
                      - invalid_json
                  detail:
                    oneOf:
                      - type: string
                        description: Human-readable error description
                      - type: array
                        items:
                          type: string
                        description: Array of validation error messages
        '401':
          description: unauthorized - missing or invalid token
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                  - detail
                properties:
                  error:
                    type: string
                    description: Error code
                    enum:
                      - token_missing
                      - token_invalid
                  detail:
                    oneOf:
                      - type: string
                        description: Human-readable error description
                      - type: array
                        items:
                          type: string
                        description: Array of validation error messages
        '403':
          description: forbidden
        '422':
          description: unprocessable entity - invalid payload
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                  - detail
                properties:
                  error:
                    type: string
                    description: Error code
                    enum:
                      - invalid_payload
                      - record_invalid
                      - parameter_missing
                  detail:
                    oneOf:
                      - type: string
                        description: Human-readable error description
                      - type: array
                        items:
                          type: string
                        description: Array of validation error messages
      security:
        - bearer: []
components:
  schemas:
    Project:
      type: object
      required:
        - id
        - name
        - status
        - book_id
        - project_template
        - project_milestone
      properties:
        id:
          type: string
          description: The project ID
          example: project123xyz
        name:
          type: string
          description: The project name
          example: Smith Family Onboarding
        status:
          type: string
          enum:
            - in_progress
            - overdue
            - completed
            - cancelled
          description: Project status
        milestone_progress:
          type: integer
          nullable: true
          description: Percent complete for the current milestone
        overall_progress:
          type: integer
          nullable: true
          description: Percent complete for the whole project
        milestone_updated_at:
          type: string
          format: date-time
          nullable: true
        completed_at:
          type: string
          format: date-time
          nullable: true
        book_id:
          type: string
          description: The book ID
          example: book123xyz
        project_template_id:
          type: string
          description: The project template ID
          example: template123xyz
        project_milestone_id:
          type: string
          description: The current project milestone ID
          example: milestone123xyz
        assigned_to_id:
          type: string
          nullable: true
          description: Assigned user ID
        created_by_id:
          type: string
          nullable: true
          description: Creator user ID
        household_id:
          type: string
          nullable: true
          description: Attached household ID for household projects
        projectable_type:
          type: string
          nullable: true
          enum:
            - Household
            - Contact
            - Business
          description: Related record model type, or null for ownerless projects
        projectable_id:
          type: string
          nullable: true
          description: Related record ID, or null for ownerless projects
        description:
          type: object
          properties:
            html:
              type: string
              nullable: true
            markdown:
              type: string
              nullable: true
            nodes:
              nullable: true
            preferred_format:
              type: string
        comments_count:
          type: integer
          description: Active comment count
        milestone_progresses:
          type: array
          items:
            type: object
        visited_project_milestone_ids:
          type: array
          items:
            type: string
        attachments:
          type: array
          items:
            $ref: '#/components/schemas/ProjectAttachment'
        household:
          type: object
          nullable: true
          properties:
            id:
              type: string
            name:
              type: string
            type:
              type: string
              enum:
                - Client
                - Prospect
                - PastClient
        projectable:
          allOf:
            - $ref: '#/components/schemas/ProjectProjectable'
          nullable: true
          description: >-
            The related household, contact, or business. Null for ownerless
            projects.
        assigned_to:
          $ref: '#/components/schemas/User'
          nullable: true
        created_by:
          $ref: '#/components/schemas/User'
          nullable: true
        project_milestone:
          $ref: '#/components/schemas/ProjectMilestone'
        project_template:
          $ref: '#/components/schemas/ProjectTemplate'
        project_form_field_responses:
          type: array
          items:
            $ref: '#/components/schemas/ProjectFormFieldResponse'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    ProjectAttachment:
      type: object
      properties:
        file_name:
          type: string
          example: onboarding.pdf
        file_type:
          type: string
          example: application/pdf
        file_size:
          type: integer
          example: 123456
        source:
          type: string
          example: uploaded
        signed_id:
          type: string
          example: signed-blob-id
        download_url:
          type: string
          nullable: true
        view_url:
          type: string
          nullable: true
    ProjectProjectable:
      type: object
      required:
        - id
        - type
        - name
      properties:
        id:
          type: string
          description: The related record ID
          example: abc123xyz
        type:
          type: string
          enum:
            - Client
            - Prospect
            - PastClient
            - Contact
            - Business
          description: The related record type
        name:
          type: string
          description: The related record display name
          example: Smith Household
        person:
          allOf:
            - $ref: '#/components/schemas/Person'
          nullable: true
          description: The contact person. Present only when type is Contact.
    User:
      type: object
      required:
        - id
        - email
        - first_name
        - last_name
      properties:
        id:
          type: string
          description: The ID of the user
          example: abc123xyz
        email:
          type: string
          format: email
          description: Email address of the user
          example: user@example.com
        first_name:
          type: string
          nullable: true
          description: First name of the user
          example: John
        last_name:
          type: string
          nullable: true
          description: Last name of the user
          example: Doe
        api_access:
          type: object
          description: >-
            Authentication details for the current personal access token. Only
            present on /v1/me when authenticating with a PAT.
          properties:
            auth_type:
              type: string
              enum:
                - personal_access_token
              example: personal_access_token
            scope:
              type: string
              enum:
                - read_only
                - read_write
              example: read_write
    ProjectMilestone:
      type: object
      required:
        - id
        - title
        - project_template_id
      properties:
        id:
          type: string
          description: The project milestone ID
          example: milestone123xyz
        guid:
          type: string
          description: The project milestone GUID
          example: milestone-guid
        title:
          type: string
          description: The milestone title
          example: Initial Setup
        color:
          type: string
          nullable: true
          description: Milestone display color
        sort_order:
          type: integer
          nullable: true
          description: Milestone sort order
        auto_advance_trigger:
          type: string
          enum:
            - all_tasks_completed
            - meeting_scheduled
            - meeting_completed
        project_template_id:
          type: string
          description: The project template ID
          example: template123xyz
        created_at:
          type: string
          format: date-time
          description: When the milestone was created
        updated_at:
          type: string
          format: date-time
          description: When the milestone was last updated
        project_milestone_outcomes:
          type: array
          items:
            $ref: '#/components/schemas/ProjectMilestoneOutcome'
        project_milestone_form_fields:
          type: array
          items:
            $ref: '#/components/schemas/ProjectMilestoneFormField'
    ProjectTemplate:
      type: object
      required:
        - id
        - title
        - project_milestones
      properties:
        id:
          type: string
          description: The project template ID
          example: template123xyz
        guid:
          type: string
          description: The project template GUID
          example: template-guid
        title:
          type: string
          description: The template title
          example: New Client Onboarding
        description:
          type: string
          nullable: true
        projectable_kind:
          type: string
          enum:
            - household
            - contact
            - business
          description: The related record kind this template supports
        enable_kanban_view:
          type: boolean
        book_id:
          type: string
          nullable: true
          description: The owning book ID, or null for company-wide templates
        order_index:
          type: integer
        book_name:
          type: string
          nullable: true
        book_initials:
          type: string
          nullable: true
        attachments:
          type: array
          items:
            $ref: '#/components/schemas/ProjectAttachment'
        project_milestones:
          type: array
          items:
            $ref: '#/components/schemas/ProjectMilestone'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    ProjectFormFieldResponse:
      type: object
      required:
        - id
        - project_milestone_form_field_id
      properties:
        id:
          type: string
          description: The form field response ID
          example: response123xyz
        project_milestone_form_field_id:
          type: string
          description: The form field ID
          example: field123xyz
        value:
          description: Typed form field response value
          nullable: true
        display_value:
          type: string
          nullable: true
          description: Display value for household record or file attachment fields
    Person:
      type: object
      required:
        - id
        - book_id
        - first_name
        - last_name
      properties:
        id:
          type: string
          description: The person ID
          example: abc123xyz
        book_id:
          type: string
          description: The book ID
          example: book123xyz
        household_id:
          type: string
          description: The household ID
          example: xyz789abc
          nullable: true
        contact_id:
          type: string
          description: The contact ID (present when person belongs to a contact)
          example: cnt456def
          nullable: true
        role_type:
          type: string
          enum:
            - client
            - prospect
            - contact
            - past_client
          description: The entity type this person belongs to
          example: client
          nullable: true
        first_name:
          type: string
          example: John
        middle_name:
          type: string
          example: Robert
          nullable: true
        last_name:
          type: string
          example: Doe
        salutation:
          type: string
          example: Mr.
          nullable: true
        suffix:
          type: string
          example: Jr.
          nullable: true
        maiden_name:
          type: string
          example: Smith
          nullable: true
        gender:
          type: string
          enum:
            - female
            - male
            - nonbinary
            - other
            - prefer_not_to_say
          example: male
          nullable: true
        designations:
          type: string
          example: CPA, CFP
          nullable: true
        household_role:
          type: string
          enum:
            - head_of_household
            - partner
            - spouse
            - dependent_child
            - other_adult
            - other_dependent
            - unknown
            - deceased
            - non_dependent_child
            - grandchild
          example: head_of_household
          nullable: true
          description: Only present when person belongs to a household
        preferred_name:
          type: string
          example: Johnny
          nullable: true
        date_of_birth:
          type: string
          format: date
          description: Date of birth
          example: '1985-06-15'
          nullable: true
        job_title:
          type: string
          description: Job title
          example: Software Engineer
          nullable: true
        ssn:
          type: string
          description: Obfuscated social security number
          example: '***-**-6789'
          nullable: true
        drivers_license_number:
          type: string
          description: Obfuscated driver's license number
          example: '******7890'
          nullable: true
        email_addresses:
          type: array
          items:
            $ref: '#/components/schemas/Email'
          description: Array of email addresses with primary designation
        phone_numbers:
          type: array
          items:
            $ref: '#/components/schemas/PhoneNumber'
          description: Array of phone numbers with primary designation
        addresses:
          type: array
          items:
            $ref: '#/components/schemas/Address'
          description: Array of addresses with primary designation
        employments:
          type: array
          items:
            $ref: '#/components/schemas/Employment'
          description: Array of employment records
        custom_fields:
          type: object
          description: Custom field values as key-value pairs
          example:
            preferred_contact_method: Email
            risk_tolerance: Moderate
    ProjectMilestoneOutcome:
      type: object
      required:
        - id
        - label
        - destination
      properties:
        id:
          type: string
          description: The milestone outcome ID
          example: outcome123xyz
        label:
          type: string
          description: The outcome label
          example: Ready for accounts
        default_comment:
          type: string
          nullable: true
          description: Default comment for this outcome
        destination:
          type: string
          enum:
            - next_milestone
            - specific_milestone
            - complete_project
          description: Where this outcome moves the project
        sort_order:
          type: integer
          nullable: true
          description: Outcome sort order
        target_project_milestone_id:
          type: string
          nullable: true
          description: Target milestone ID for specific milestone outcomes
    ProjectMilestoneFormField:
      type: object
      required:
        - id
        - label
        - field_type
        - required
      properties:
        id:
          type: string
          description: The form field ID
          example: field123xyz
        guid:
          type: string
          description: The form field GUID
          example: field-guid
        label:
          type: string
          description: The field label
          example: Custodian
        field_type:
          type: string
          enum:
            - text
            - textarea
            - number
            - date
            - select
            - boolean
            - currency
            - household_record
            - file_attachment
        required:
          type: boolean
          description: Whether this field is required
        placeholder:
          type: string
          nullable: true
        sort_order:
          type: integer
          description: Field sort order
        household_record_source:
          type: string
          nullable: true
        select_options:
          type: array
          items:
            type: string
          nullable: true
    Email:
      type: object
      required:
        - email
        - email_type
        - is_primary
      properties:
        email:
          type: string
          format: email
          example: john.doe@example.com
        email_type:
          type: string
          enum:
            - personal
            - business
            - school
            - other
          example: personal
        is_primary:
          type: boolean
          example: true
    PhoneNumber:
      type: object
      required:
        - phone_number
        - phone_type
        - is_primary
      properties:
        phone_number:
          type: string
          example: '+15555551234'
        extension:
          type: string
          nullable: true
          example: '1234'
        phone_type:
          type: string
          enum:
            - mobile
            - work
            - home
            - fax
            - other
          example: mobile
        is_primary:
          type: boolean
          example: true
    Address:
      type: object
      required:
        - address_type
        - is_primary
      properties:
        line1:
          type: string
          example: 123 Main St
          nullable: true
        line2:
          type: string
          example: Apt 4B
          nullable: true
        city:
          type: string
          example: New York
          nullable: true
        state:
          type: string
          example: NY
          nullable: true
        zip:
          type: string
          example: '10001'
          nullable: true
        country_code:
          type: string
          example: US
          nullable: true
        address_type:
          type: string
          enum:
            - home
            - work
            - mailing
            - other
          example: home
        is_primary:
          type: boolean
          example: true
    Employment:
      type: object
      required:
        - business_name
      properties:
        id:
          type: string
          description: The employment ID
          example: emp123xyz
        person_id:
          type: string
          description: The person ID
          example: abc123xyz
        business_name:
          type: string
          example: Acme Corp
        role:
          type: string
          example: Software Engineer
          nullable: true
        start_date:
          type: string
          format: date
          example: '2023-01-15'
          nullable: true
        end_date:
          type: string
          format: date
          example: '2024-12-31'
          nullable: true
        actively_employed:
          type: boolean
          example: true
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      bearerFormat: OAuth
      description: OAuth 2.0 Bearer Token from Clerk authentication

````