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

# Create a project

> Create a project (matter or case), optionally linked to accounts and contacts. Visible to everyone in the organization unless access is restricted to specific members.



## OpenAPI

````yaml https://api.parley.so/openapi.json post /projects
openapi: 3.1.1
info:
  title: Parley API
  version: 1.0.0
  description: >-
    Manage Parley's projects (matters or cases), accounts (client
    organizations), contacts (people), tasks, custom fields, notes, files,
    activity, automations, and skills. Records refer to each other as { type,
    id, name } references; writes take IDs. Errors are { error: { code, message,
    details } }, where code names what went wrong and each operation lists the
    codes it can return. In a query string, write a timestamp's offset as Z or
    %2B, because a raw + arrives as a space. The MCP server at /mcp offers the
    same data as a smaller set of tools.
servers:
  - url: https://api.parley.so/v1
security:
  - bearerAuth: []
tags:
  - name: Projects
    description: >-
      A project is a matter or case: it groups the files, notes, activity, and
      tasks for one engagement, and links to the accounts and contacts it
      involves.
  - name: Accounts
    description: >-
      An account is a client organization. Contacts belong to it, and projects
      link to it.
  - name: Contacts
    description: >-
      A contact is a person, optionally belonging to one account and linked to
      projects.
  - name: Tasks
    description: >-
      A task is a to-do with a status, assignee, and due date, optionally about
      one project, account, or contact.
  - name: Fields
    description: >-
      Custom fields defined for projects, accounts, contacts, or tasks. Records
      carry their values in fields, keyed by field name.
  - name: Notes
    description: >-
      Markdown notes on a project, account, or contact. Updates take the version
      you last read, so concurrent edits fail with 409 VERSION_CONFLICT instead
      of overwriting.
  - name: Files
    description: >-
      Files and folders of a project, account, contact, or intake, or the
      organization's Library. Add a file by creating an upload, PUTting its
      bytes, and adding the upload to a location.
  - name: Activity
    description: >-
      What happened across the organization or on one record: changes, links,
      notes, files, USCIS case updates, and synced emails and meetings. Each
      item's kind says which details it carries.
  - name: Sessions
    description: >-
      Conversations with Parley's assistant, from the web app, Word, Outlook,
      automation runs, and the API. Start one with a message, follow up or steer
      it while it works, and read its replies.
  - name: Automations
    description: >-
      Instructions Parley's assistant carries out on a schedule, as the person
      who created them, with nobody present.
  - name: Skills
    description: >-
      Reusable playbooks for Parley's assistant: a SKILL.md plus optional
      bundled documents, addressed by slug.
  - name: Users
    description: The people in your organization, and the caller.
paths:
  /projects:
    post:
      tags:
        - Projects
      summary: Create a project
      description: >-
        Create a project (matter or case), optionally linked to accounts and
        contacts. Visible to everyone in the organization unless access is
        restricted to specific members.
      operationId: createProject
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minLength: 1
                  description: Project name.
                access:
                  anyOf:
                    - type: object
                      properties:
                        type:
                          const: everyone
                      required:
                        - type
                      additionalProperties: false
                    - type: object
                      properties:
                        type:
                          const: members
                        memberIds:
                          type: array
                          items:
                            type: string
                            minLength: 1
                          default: []
                          description: >-
                            IDs of the users to add as members. The caller is
                            always a member.
                      required:
                        - type
                      additionalProperties: false
                  description: >-
                    Who can access the project. Defaults to everyone in the
                    organization.
                  default:
                    type: everyone
                accountIds:
                  type: array
                  maxItems: 100
                  items:
                    type: string
                    minLength: 1
                  description: IDs of accounts to link. At most 100.
                contactIds:
                  type: array
                  maxItems: 100
                  items:
                    type: string
                    minLength: 1
                  description: >-
                    IDs of contacts to link. At most 100. A contact that belongs
                    to an account can only be linked along with that account.
                    Link both in the same call, or link the contact to a project
                    with no accounts and its account is linked too.
                fields:
                  type: object
                  propertyNames:
                    type: string
                    minLength: 1
                  additionalProperties:
                    anyOf:
                      - type: string
                      - type: number
                      - type: boolean
                      - type: array
                        items:
                          type: string
                      - type: object
                        properties:
                          streetAddress:
                            anyOf:
                              - type: string
                              - type: 'null'
                          cityTown:
                            anyOf:
                              - type: string
                              - type: 'null'
                          state:
                            anyOf:
                              - type: string
                              - type: 'null'
                          country:
                            anyOf:
                              - type: string
                              - type: 'null'
                        additionalProperties: false
                      - type: 'null'
                  description: >-
                    Custom field values to set on the project, keyed by field
                    name or ID. A value replaces the current one, null clears
                    it, and fields you don't mention are left alone. Each value
                    must match its field's type: a string for text, long_text,
                    email, url, single_select (one of the field's options), and
                    user (the id of an active user in the organization); a
                    number; true or false; an ISO 8601 date-time or YYYY-MM-DD
                    date; a list of strings for collection ([] clears it); or {
                    streetAddress, cityTown, state, country } for address. At
                    most 50 fields.
              required:
                - name
              additionalProperties: false
      responses:
        '201':
          description: Created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
          headers:
            Location:
              description: The URL of the created resource.
              schema:
                type: string
        '400':
          description: >-
            The request was invalid. VALIDATION_FAILED, INVALID_REFERENCE,
            LINK_CONFLICT, INVALID_FIELD_VALUES.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ValidationFailedError'
                  - $ref: '#/components/schemas/InvalidReferenceError'
                  - $ref: '#/components/schemas/LinkConflictError'
                  - $ref: '#/components/schemas/InvalidFieldValuesError'
        '401':
          description: Missing or invalid credentials. UNAUTHORIZED.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: You don't have permission. FORBIDDEN.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '429':
          description: Too many requests, or a usage limit was reached. TOO_MANY_REQUESTS.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsError'
components:
  schemas:
    Project:
      type: object
      properties:
        id:
          type: string
          minLength: 1
          description: The project ID.
        name:
          type: string
          minLength: 1
          description: Project name.
        access:
          $ref: '#/components/schemas/ProjectAccess'
        accounts:
          type: array
          items:
            $ref: '#/components/schemas/AccountRef'
          description: >-
            The accounts linked to the project. Direct links only: the accountId
            filter on the project list also matches projects linked through one
            of the account's contacts.
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/ContactRef'
          description: The contacts linked to the project.
        createdAt:
          type: string
          format: date-time
          description: When the project was created.
        updatedAt:
          type: string
          format: date-time
          description: >-
            When the project was last updated, including changes to its linked
            accounts and contacts. Field value changes do not change it.
        fields:
          type: object
          propertyNames:
            type: string
          additionalProperties:
            anyOf:
              - type: string
              - type: number
              - type: boolean
              - type: array
                items:
                  type: string
              - type: object
                properties:
                  streetAddress:
                    anyOf:
                      - type: string
                      - type: 'null'
                  cityTown:
                    anyOf:
                      - type: string
                      - type: 'null'
                  state:
                    anyOf:
                      - type: string
                      - type: 'null'
                  country:
                    anyOf:
                      - type: string
                      - type: 'null'
                required:
                  - streetAddress
                  - cityTown
                  - state
                  - country
                description: A postal address. Each part is a string or null.
              - type: 'null'
          description: >-
            Custom field values, keyed by field name, with a key for every field
            defined for projects (null when unset). The value's shape follows
            the field's type.
      required:
        - id
        - name
        - access
        - accounts
        - contacts
        - createdAt
        - updatedAt
        - fields
      examples:
        - id: cmf2x8k0q0001abcd
          name: Acme Corp H-1B petition
          access:
            type: everyone
          accounts:
            - type: account
              id: cmf2x7r1p0000abcd
              name: Acme Corp
          contacts:
            - type: contact
              id: cmf2x7z3e0002abcd
              name: Ada Lovelace
          createdAt: '2026-10-01T15:04:05.000Z'
          updatedAt: '2026-10-02T09:30:00.000Z'
          fields:
            Matter Number: IMM-2041
            Target Date: null
    ValidationFailedError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              const: VALIDATION_FAILED
            message:
              type: string
              examples:
                - The request is invalid.
            details:
              type: object
              properties:
                issues:
                  type: array
                  items:
                    type: object
                    properties:
                      path:
                        type: string
                        description: >-
                          Where the problem is, as a dotted path into the input
                          such as accountIds.add.0 or reminder.remindAt. Empty
                          for the input as a whole.
                      message:
                        type: string
                        description: What is wrong with the value.
                    required:
                      - path
                      - message
                  description: Each problem with the input.
              required:
                - issues
          required:
            - code
            - message
            - details
      required:
        - error
    InvalidReferenceError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              const: INVALID_REFERENCE
            message:
              type: string
              examples:
                - >-
                  The request refers to a record or user that doesn't exist or
                  that you can't use.
            details:
              type: object
              properties:
                field:
                  type: string
                  description: The input that holds the reference, such as accountIds.
                ids:
                  type: array
                  items:
                    type: string
                  description: The IDs that could not be used.
              required:
                - field
                - ids
          required:
            - code
            - message
            - details
      required:
        - error
    LinkConflictError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              const: LINK_CONFLICT
            message:
              type: string
              examples:
                - >-
                  A contact's account must be linked to every project the
                  contact is linked to.
            details:
              type: object
              properties:
                reason:
                  enum:
                    - account_not_linked
                    - contacts_still_linked
                  type: string
                  description: >-
                    account_not_linked: a contact would be linked without its
                    account. contacts_still_linked: an account would be unlinked
                    while its contacts stay linked.
                conflicts:
                  type: array
                  items:
                    type: object
                    properties:
                      projectId:
                        type: string
                      contactId:
                        type: string
                      accountId:
                        type: string
                    required:
                      - projectId
                      - contactId
                      - accountId
              required:
                - reason
                - conflicts
          required:
            - code
            - message
            - details
      required:
        - error
    InvalidFieldValuesError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              const: INVALID_FIELD_VALUES
            message:
              type: string
              examples:
                - Some custom field values were not accepted.
            details:
              type: object
              properties:
                unknownFields:
                  type: array
                  items:
                    type: string
                  description: Keys that are not the name or ID of a field.
                readOnlyFields:
                  type: array
                  items:
                    type: string
                  description: Fields Parley maintains, which cannot be set.
                duplicateFields:
                  type: array
                  items:
                    type: string
                  description: Keys that set a field another key already sets.
                invalidValues:
                  type: array
                  items:
                    type: object
                    properties:
                      field:
                        type: string
                        description: The name or ID the value was given under.
                      expected:
                        type: string
                        description: What the field accepts.
                    required:
                      - field
                      - expected
              required:
                - unknownFields
                - readOnlyFields
                - duplicateFields
                - invalidValues
          required:
            - code
            - message
            - details
      required:
        - error
    UnauthorizedError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              const: UNAUTHORIZED
            message:
              type: string
              examples:
                - Missing or invalid credentials.
          required:
            - code
            - message
      required:
        - error
    ForbiddenError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              const: FORBIDDEN
            message:
              type: string
              examples:
                - You don't have permission to do this.
          required:
            - code
            - message
      required:
        - error
    TooManyRequestsError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              const: TOO_MANY_REQUESTS
            message:
              type: string
              examples:
                - Too many requests.
          required:
            - code
            - message
      required:
        - error
    ProjectAccess:
      description: >-
        Who can see the project: everyone in the organization, or only its
        members.
      oneOf:
        - $ref: '#/components/schemas/EveryoneProjectAccess'
        - $ref: '#/components/schemas/MembersProjectAccess'
      discriminator:
        propertyName: type
        mapping:
          everyone: '#/components/schemas/EveryoneProjectAccess'
          members: '#/components/schemas/MembersProjectAccess'
    AccountRef:
      type: object
      properties:
        type:
          const: account
        id:
          type: string
          description: Its ID.
        name:
          type: string
          description: The account name.
      required:
        - type
        - id
        - name
      description: The account's type, ID, and name.
    ContactRef:
      type: object
      properties:
        type:
          const: contact
        id:
          type: string
          description: Its ID.
        name:
          type: string
          description: >-
            The contact's first and last name, or an email address when it has
            no name.
      required:
        - type
        - id
        - name
      description: The contact's type, ID, and name.
    EveryoneProjectAccess:
      type: object
      properties:
        type:
          const: everyone
      required:
        - type
    MembersProjectAccess:
      type: object
      properties:
        type:
          const: members
        members:
          type: array
          items:
            $ref: '#/components/schemas/UserRef'
          description: The people who can see the project.
      required:
        - type
        - members
    UserRef:
      type: object
      properties:
        id:
          type: string
          description: The user's ID.
        name:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            The user's full name, or null when it is unknown, as for someone who
            has left the organization.
        email:
          anyOf:
            - type: string
            - type: 'null'
          description: The user's email address, or null when it is unknown.
      required:
        - id
        - name
        - email
      description: A reference to a person in the organization.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: A Parley API key.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.