TrustLayer Projects API

The Projects API from TrustLayer — 9 operation(s) for projects.

OpenAPI Specification

trustlayer-projects-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: TrustLayer Platform Auth Projects API
  version: '1.0'
  contact:
    name: TrustLayer Support
    email: support@trustlayer.io
  termsOfService: https://trustlayer.io/terms-of-service
  externalDocs:
    description: OpenAPI specification
    url: /v1/platform-api.yaml
  description: '3rd-party API for the TrustLayer platform.


    **Deprecated.** Platform API v1 is deprecated as of 01 June 2026 and is

    scheduled for sunset (end-of-life) on 31 March 2027. It remains fully

    available until the sunset date but will not receive new features. Please

    migrate to Platform API v2 for new integrations.


    All v1 responses carry the standard deprecation response headers

    ([RFC 8594](https://www.rfc-editor.org/rfc/rfc8594)):


    ```http

    Deprecation: @1780272000

    Sunset: Wed, 31 Mar 2027 23:59:59 GMT

    Link: <https://developers.trustlayer.io/>; rel="deprecation", <https://developers.trustlayer.io/>; rel="sunset"

    ```


    `Deprecation: @1780272000` is the Unix timestamp for 2026-06-01T00:00:00Z;

    sunset (end-of-life) is 2027-03-31T23:59:59 GMT.'
  x-deprecated: true
  x-deprecation-date: '2026-06-01'
  x-sunset: '2027-03-31'
  license:
    name: Apache 2.0
    url: https://apache.org/licenses/LICENSE-2.0
servers:
- url: http://localhost:4000/v1
  description: Local
- url: https://api.trustlayer.io/v1
  description: Production
security:
- API Key: []
tags:
- name: Projects
paths:
  /projects/{id}/external-ids:
    parameters:
    - schema:
        type: string
      name: id
      in: path
      required: true
    put:
      summary: Update project external IDs
      operationId: put-projects-:id-external-ids
      deprecated: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    $ref: '#/components/schemas/response-status'
                  data:
                    $ref: '#/components/schemas/project'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                externalIds:
                  type: array
                  x-stoplight:
                    id: 2pkejdal5p5gq
                  items:
                    x-stoplight:
                      id: 93pbk6htcs4v3
                    type: string
      description: 'Update the list of external IDs for this project. The passed values will replace the current ones.

        External IDs are in the format `source/id` or `source:instance/id`, where `instance` can be used to differentiate multiple instances of the same `source`.


        Note that if the workspace is already integrated with one or more external systems, this endpoint should _not_ be used.'
      tags:
      - Projects
  /projects:
    get:
      summary: List projects
      tags:
      - Projects
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    $ref: '#/components/schemas/response-status'
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/project'
                  meta:
                    $ref: '#/components/schemas/collection-meta'
      operationId: get-projects
      deprecated: true
      description: 'Available filters:

        * `name`

        * `status` ("compliant", "non_compliant", others?)

        * `active`

        * `createdAt`

        * `updatedAt`

        * `startDate`

        * `endDate`

        * `customField`

        * `externalId`

        * `active`



        Available sort keys:

        * `name`

        * `createdAt`

        * `updatedAt`

        * `startDate`

        * `endDate`


        Available include options:

        * `parties`

        * `customFields`


        Notes:


        * the value of the `externalId` filter must be in the format `<provider name>/<external id>`, e.g. `procore/1234`

        * the value of the `customField` filter must be in the format `<custom field id>/<field value>`. The only supported operator is `eq`.

        '
      parameters:
      - $ref: '#/components/parameters/sort'
      - $ref: '#/components/parameters/page-number'
      - $ref: '#/components/parameters/page-size'
      - $ref: '#/components/parameters/filter'
      - $ref: '#/components/parameters/include'
      x-internal: false
    post:
      summary: Create a new project
      operationId: post-projects
      deprecated: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    $ref: '#/components/schemas/response-status'
                  data:
                    $ref: '#/components/schemas/project'
      tags:
      - Projects
      description: The only required attribute is `name`.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                project:
                  $ref: '#/components/schemas/project-create'
  /projects/{projectId}:
    parameters:
    - schema:
        type: string
      name: projectId
      in: path
      required: true
      description: Project ID
    get:
      summary: Fetch a project
      tags:
      - Projects
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    $ref: '#/components/schemas/response-status'
                  data:
                    $ref: '#/components/schemas/project'
      operationId: get-projects-id
      deprecated: true
      description: 'Available include options:

        * `parties`

        * `customFields`

        '
      parameters:
      - $ref: '#/components/parameters/include'
    delete:
      summary: Delete a project
      operationId: delete-projects-projectId
      deprecated: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    $ref: '#/components/schemas/response-status'
                  data:
                    $ref: '#/components/schemas/project'
      description: Soft-deletes a project
      tags:
      - Projects
      x-internal: false
  /projects/{projectId}/relationships/parties:
    parameters:
    - schema:
        type: string
      name: projectId
      in: path
      required: true
      description: Project ID
    post:
      summary: Add parties to a project
      operationId: post-projects-id-relationships-parties
      deprecated: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    $ref: '#/components/schemas/response-status'
                  data:
                    $ref: '#/components/schemas/project'
      tags:
      - Projects
      description: 'Parties that are already associated with the project are ignored.


        All parties _must_ exist, otherwise a 404 response will be returned and no party will be added.'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                parties:
                  $ref: '#/components/schemas/reference-list-input'
              required:
              - parties
    delete:
      summary: Remove a party from a project
      operationId: delete-projects-id-relationships-parties
      deprecated: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    $ref: '#/components/schemas/response-status'
                  data:
                    $ref: '#/components/schemas/project'
      description: All parties _must_ exist, otherwise a 404 response will be returned and no party will be removed.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                parties:
                  $ref: '#/components/schemas/reference-list-input'
              required:
              - parties
      tags:
      - Projects
  /projects/{projectId}/relationships/documents:
    parameters:
    - schema:
        type: string
      name: projectId
      in: path
      required: true
      description: Project ID
    post:
      summary: Attach documents to a project
      operationId: post-projects-id-relationships-documents
      deprecated: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    $ref: '#/components/schemas/response-status'
                  data:
                    $ref: '#/components/schemas/project'
      tags:
      - Projects
      description: 'A document can be attached to any number of projects.


        All documents _must_ exist, otherwise a 404 response will be returned and no document will be attached.'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                documents:
                  $ref: '#/components/schemas/reference-list-input'
              required:
              - documents
    delete:
      summary: Detach documents from a project
      operationId: delete-projects-id-relationships-documents
      deprecated: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    $ref: '#/components/schemas/response-status'
                  data:
                    $ref: '#/components/schemas/project'
      description: All documents _must_ exist, otherwise a 404 response will be returned and no document will be detached.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                documents:
                  $ref: '#/components/schemas/reference-list-input'
              required:
              - documents
      tags:
      - Projects
  /projects/{projectId}/relationships/documents/{documentId}:
    parameters:
    - schema:
        type: string
      name: projectId
      in: path
      required: true
      description: Project ID
    - schema:
        type: string
      name: documentId
      in: path
      required: true
      description: Document ID
    delete:
      summary: Remove a document from a project
      operationId: delete-projects-projectId-relationships-documents-documentId
      deprecated: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    $ref: '#/components/schemas/response-status'
                  data:
                    $ref: '#/components/schemas/project'
      tags:
      - Projects
      description: If you need to remove multiple documents at once you can use the alternative endpoint `DELETE /projects/{projectId}/relationships/documents`
  /projects/{projectId}/relationships/parties/{partyId}:
    parameters:
    - schema:
        type: string
      name: projectId
      in: path
      required: true
      description: Project ID
    - schema:
        type: string
      name: partyId
      in: path
      required: true
      description: Party ID
    delete:
      summary: Remove a party from a project
      operationId: delete-projects-projectId-relationships-parties-partyId
      deprecated: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    $ref: '#/components/schemas/response-status'
                  data:
                    $ref: '#/components/schemas/project'
      tags:
      - Projects
      description: If you need to remove multiple parties at once you can use the alternative endpoint `DELETE /projects/{projectId}/relationships/parties`
  /projects/{projectId}/compliance-profile:
    parameters:
    - schema:
        type: string
      name: projectId
      in: path
      required: true
    get:
      summary: Fetch compliance profile for project
      tags:
      - Projects
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    $ref: '#/components/schemas/response-status'
                  data:
                    $ref: '#/components/schemas/compliance-profile'
      operationId: get-projects-projectId-compliance-profile
      deprecated: true
      parameters:
      - $ref: '#/components/parameters/scope-type'
      - $ref: '#/components/parameters/scope-id'
      description: 'This will return the project-specific compliance profile relative to the given scope.


        NOTE: it is _mandatory_ to specify a `scope`, which can be either a `party` (belonging to a project) or a `complianceProfile`.'
      x-internal: true
  /documents/{documentId}/relationships/projects:
    parameters:
    - schema:
        type: string
      name: documentId
      in: path
      required: true
    post:
      summary: Associate a document to multiple projects
      operationId: post-documents-documentId-relationships-projects
      deprecated: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    $ref: '#/components/schemas/response-status'
                  data:
                    $ref: '#/components/schemas/document'
      tags:
      - Projects
      description: TBD
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                projects:
                  type: array
                  items:
                    $ref: '#/components/schemas/reference-input'
components:
  schemas:
    project:
      title: Project
      type: object
      x-examples:
        Example project:
          type: projects
          id: 60a3dc67cba60c04739e8e46
          name: Test Project
          parties:
          - id: 60896067dd86e01e90199f42
            type: parties
          customData:
          - value: '123'
            customField:
              type: customFields
              id: 60896067dd86e01e90199f42
          externalIds:
            procore:
            - id: '49843945'
      properties:
        type:
          type: string
          default: projects
          readOnly: true
        id:
          type: string
        name:
          type: string
        description:
          type: string
          nullable: true
        startDate:
          type: string
          format: date-time
          nullable: true
        endDate:
          type: string
          format: date-time
          nullable: true
        active:
          type: boolean
        parties:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/reference'
            - $ref: '#/components/schemas/party'
            - type: string
        customData:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
              customField:
                oneOf:
                - $ref: '#/components/schemas/reference'
                - $ref: '#/components/schemas/custom-field'
        complianceStatus:
          type: object
          properties:
            status:
              type: string
              enum:
              - compliant
              - non_compliant
            compliantPartiesCount:
              type: number
            totalPartiesCount:
              type: number
            complianceScore:
              type: number
        deletedAt:
          type: string
          format: date-time
          nullable: true
        deletedBy:
          oneOf:
          - nullable: true
          - $ref: '#/components/schemas/reference'
        externalIds:
          type: object
          x-stoplight:
            id: uw5iuj9nds4en
    reference-list-input:
      type: array
      title: reference-list-input
      x-tags:
      - input
      minItems: 1
      items:
        type: object
        properties:
          id:
            type: string
            pattern: ^[a-z0-9]{24}$
            minLength: 24
            maxLength: 24
        required:
        - id
      x-internal: true
    project-create:
      title: project-create
      type: object
      x-internal: true
      x-tags:
      - input
      properties:
        name:
          type: string
          description: The project name
        description:
          type: string
          description: An optional description
        startDate:
          type: string
          format: date
        endDate:
          type: string
          format: date
        customData:
          type: array
          items:
            type: object
            properties:
              customField:
                $ref: '#/components/schemas/reference-input'
              value:
                type: string
                nullable: false
            required:
            - customField
            - value
        externalIds:
          type: array
          x-stoplight:
            id: tla0kkdm08jk4
          items:
            x-stoplight:
              id: utre6jd713rg1
            type: string
      required:
      - name
    compliance-document:
      x-internal: true
      title: Compliance Document
      type: object
      properties:
        id:
          type: string
        origin:
          type: string
          enum:
          - upload
          - makeCompliant
          - connectedDocument
          - fillableForm
          - webForm
        complianceStatus:
          type: string
          enum:
          - compliant
          - non_compliant
    party:
      title: Party
      type: object
      x-examples:
        Example Party:
          id: 60896067dd86e01e90199f42
          name: Test Party
          address:
            line1: 123 Main Street
            line2: ''
            city: Pleasantville
            postalCode: '10200'
            region: NY
            country: US
          type: Vendor
          status: new
          customData:
          - value: '123'
            customField:
              type: customFields
              id: 60896067dd86e01e90199f42
          externalIds:
            procore:
            - id: '49843945'
      properties:
        type:
          type: string
          default: parties
          readOnly: true
        id:
          type: string
          readOnly: true
        name:
          type: string
        address:
          $ref: '#/components/schemas/address'
        status:
          type: string
          enum:
          - new
          - compliant
          - non_compliant
          - inactive
          readOnly: true
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/contact'
        website:
          type: string
          nullable: true
        active:
          type: boolean
        notes:
          type: string
          nullable: true
        complianceStatus:
          $ref: '#/components/schemas/compliance-status'
        projects:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/reference'
            - $ref: '#/components/schemas/project'
        projectStats:
          type: object
          properties:
            compliantProjectsCount:
              type: number
            totalProjectsCount:
              type: number
        documents:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/reference'
            - $ref: '#/components/schemas/document'
        partyType:
          oneOf:
          - $ref: '#/components/schemas/reference'
          - $ref: '#/components/schemas/party-type'
        tags:
          type: array
          items:
            oneOf:
            - $ref: '#/components/schemas/taggging'
            - $ref: '#/components/schemas/taggging-full'
        complianceProfile:
          oneOf:
          - $ref: '#/components/schemas/reference'
          - $ref: '#/components/schemas/compliance-profile'
          - nullable: true
        customData:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
              customField:
                oneOf:
                - $ref: '#/components/schemas/reference'
                - $ref: '#/components/schemas/custom-field'
        deletedAt:
          type: string
          format: date-time
          nullable: true
        deletedBy:
          oneOf:
          - nullable: true
          - $ref: '#/components/schemas/reference'
        externalIds:
          type: object
          x-stoplight:
            id: zk87opteuie3w
    reference-input:
      title: reference-input
      type: object
      properties:
        id:
          type: string
          minLength: 24
          maxLength: 24
          pattern: ^[a-z0-9]{24}$
      required:
      - id
      x-internal: true
      x-tags:
      - input
    compliance-status:
      type: object
      title: Compliance Status
      properties:
        complianceProfile:
          $ref: '#/components/schemas/reference'
        nextExpirationDate:
          type: string
          format: date-time
          nullable: true
        latestExpirationDate:
          type: string
          format: date-time
          nullable: true
        modules:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              label:
                type: string
              status:
                type: string
                enum:
                - compliant
                - non_compliant
              documents:
                type: array
                items:
                  $ref: '#/components/schemas/compliance-document'
              documentsCount:
                type: number
                example: 1
              subjects:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: string
                    label:
                      type: string
                    status:
                      type: string
                      enum:
                      - compliant
                      - non_compliant
                      - waived
                      - overridden
                    notes:
                      type: string
                    effectiveDate:
                      type: string
                      format: date-time
                      nullable: true
                    expirationDate:
                      type: string
                      format: date-time
                      nullable: true
                    latestExpirationDate:
                      type: string
                      format: date-time
                      nullable: true
                    latestValidEffectiveDate:
                      type: string
                      format: date-time
                      nullable: true
                    latestValidExpirationDate:
                      type: string
                      format: date-time
                      nullable: true
                    documents:
                      type: array
                      items:
                        $ref: '#/components/schemas/compliance-document'
                    documentsCount:
                      type: number
                    resetOn:
                      type: string
                      format: date-time
                      nullable: true
                    requirements:
                      type: array
                      items:
                        type: object
                        properties:
                          id:
                            type: string
                          label:
                            type: string
                          moduleId:
                            type: string
                          moduleLabel:
                            type: string
                          subjectId:
                            type: string
                          subjectLabel:
                            type: string
                          attributeId:
                            type: string
                          attributeLabel:
                            type: string
                          attributeDescription:
                            type: string
                          matchingCriteria:
                            type: string
                            enum:
                            - matchOnce
                            - matchRepeatedly
                          operator:
                            type: string
                            enum:
                            - must be present
                            - must be greater or equal to
                            - must be less or equal to
                            - must be completed by
                            - at least one must be present from list
                          targetValue:
                            type: string
                          value:
                            type: string
                          status:
                            type: string
                            enum:
                            - compliant
                            - non_compliant
                            - waived
                            - overridden
                            - invalidated
                          invalidatedBy:
                            type: array
                            items:
                              type: string
                          notes:
                            type: string
                          publicNotes:
                            type: string
                          documents:
                            type: array
                            items:
                              $ref: '#/components/schemas/compliance-document'
                          documentsCount:
                            type: number
                          resetOn:
                            type: string
                            format: date-time
                            nullable: true
                          custom:
                            type: boolean
                        required:
                        - id
                        - label
                        - moduleId
                        - moduleLabel
                        - subjectId
                        - subjectLabel
                        - attributeId
                        - attributeLabel
                        - matchingCriteria
                        - operator
                        - status
                        - documents
                        - documentsCount
                        - custom
                  required:
                  - id
                  - label
                  - status
                  - documents
                  - documentsCount
                  - requirements
            required:
            - id
            - label
            - status
            - documents
            - documentsCount
            - subjects
        subjects:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              effectiveDate:
                type: string
                format: date-time
                nullable: true
              expirationDate:
                type: string
                format: date-time
                nullable: true
              latestValidEffectiveDate:
                type: string
                format: date-time
                nullable: true
              latestValidExpirationDate:
                type: string
                format: date-time
                nullable: true
              notes:
                type: string
              requirementsStatus:
                type: string
                enum:
                - compliant
                - non_compliant
                - waived
                - overridden
              resetRequirementsOn:
                type: string
                format: date-time
                nullable: true
        requirements:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              label:
                type: string
              operator:
                type: string
              targetValue:
                type: string
              actualValue:
                type: string
              status:
                type: string
                enum:
                - compliant
                - non_compliant
                - waived
                - overridden
                - invalidated
              waiverOrOverrideNotes:
                type: string
              waiverOrOverrideExpirationDate:
                type: string
                format: date-time
                nullable: true
        status:
          type: string
          enum:
          - compliant
          - non_compliant
        lastChangedAt:
          type: string
          format: date-time
      required:
      - complianceProfile
      - modules
      - subjects
      - requirements
      - status
      x-examples:
        Example compliance status:
          complianceProfile:
            id: 60a27c51fcd891823568ed27
            type: compliance-profiles
          nextExpirationDate: '2024-11-14T00:00:00.000Z'
          latestExpirationDate: '2025-12-19T23:59:59.999Z'
          modules:
          - id: evidenceOfInsurance
            label: Evidence of Insurance
            status: compliant
            documents:
            - id: 6877a0b2d7a1998eeb7f7f2f
              origin: upload
              complianceStatus: compliant
            documentsCount: 1
            subjects:
            - id: commercialGeneralLiability
              label: Commercial General Liability
              status: compliant
              notes: lorem ipsum dolor sit amet
              effectiveDate: '2024-11-14T00:00:00.000Z'
              expirationDate: '2025-11-14T23:59:59.999Z'
              latestExpirationDate: '2025-12-19T23:59:59.999Z'
              latestValidEffectiveDate: '2024-11-14T00:00:00.000Z'
              latestValidExpirationDate: '2025-11-14T23:59:59.999Z'
              documents:
              - id: 6877a0b2d7a1998eeb7f7f2f
                origin: upload
                complianceStatus: compliant
              documentsCount: 1
              resetOn: '2025-06-02T00:00:00.000Z'
              requirements:
              - id: evidenceOfInsurance.commercialGeneralLiability.evidenceOfInsuranceCommercialGeneralLiabilityGeneralAggregate
                label: 'Evidence of Insurance : Commercial General Liability : General Aggregate'
                moduleId: evidenceOfInsurance
                moduleLabel: Evidence of Insurance
                subjectId: commercialGeneralLiability
                subjectLabel: Commercial General Liability
 

# --- truncated at 32 KB (49 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/trustlayer/refs/heads/main/openapi/trustlayer-projects-api-openapi.yml