TrustLayer Projects API
The Projects API from TrustLayer — 9 operation(s) for projects.
The Projects API from TrustLayer — 9 operation(s) for projects.
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