Projects APIs form the foundation of Tray's comprehensive suite of endpoints designed to automate Software Development Life Cycle (SDLC) processes and facilitate environment promotion through a robust export-import mechanism. These APIs are particularly valuable for organizations implementing automated CI/CD pipelines for their projects.
The suite enables programmatic management of project versions, allowing teams to create, export, and import project states across different environments (from development to production).
This suite empowers teams implementing automated deployment pipelines by enabling:
The Project endpoints provide essential functionality across four key areas:
Environment Promotion Overview
A typical environment promotion pipeline using these APIs follows these steps:
After completing development, create a project version in the source environment using the Create Project Version endpoint. This saves the current state of your integration.
Use the List Project Versions API to retrieve available versions and compare them if needed (similar to git diff functionality).
Once you've identified the desired version for promotion, use the Export Project from Version API to obtain the project version as JSON.
Before importing to the target environment:
Import the project into the target environment using the Import Project API, providing the required environmental mappings (such as different authentications, custom services and connectors mappings or config values for the target environment).
After import, save a new version in the target environment (using Create Project Version API), ideally maintaining version number consistency with the source environment.
For embedded integrations, additional solution management steps are required after the project promotion process (please see the Solutions APIs documentation).
Use the Get Publish Preview API to validate the impact of publishing the updated solution (e.g. expected breaking changes)
Use the Publish Solution API to propagate changes to solution instances.
Platform deployment:
Embedded deployment:
Save a specific state of the project as version so that it can be later retrieved for release (or rollback)
success
Invalid Input
Unauthorized
Forbidden
Not Found
Limit exceeded
Internal Error
{- "title": "string",
- "description": "string"
}
{- "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8",
- "versionNumber": "string",
- "title": "string",
- "description": "string",
- "created": "2019-08-24T14:15:22Z",
- "creator": "string"
}
Retrieve a list of saved versions of the project
success
required | Array of objects (ProjectVersionResponse) List of project versions, based on request criteria |
required | object (PageInfoResponse) Information about the current page. Allows to navigate through the paginated results. |
Invalid Input
Unauthorized
Forbidden
Not Found
Limit exceeded
Internal Error
{- "elements": [
- {
- "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8",
- "versionNumber": "string",
- "title": "string",
- "description": "string",
- "created": "2019-08-24T14:15:22Z",
- "creator": "string"
}
], - "pageInfo": {
- "startCursor": "string",
- "endCursor": "string",
- "hasNextPage": true,
- "hasPreviousPage": true
}
}
Retrieve a specific project version JSON
Json document containing project export
Invalid Input
Unauthorized
Forbidden
Not Found
Limit exceeded
Internal Error
{- "message": "string",
- "code": "string"
}
Returns information describing required authentications and config mappings needed to complete an import
success
Invalid Input
Unauthorized
Forbidden
Not Found
Limit exceeded
Internal Error
{- "exportedProjectJson": { },
- "connectorMapping": [
- {
- "from": {
- "name": "string",
- "version": "string"
}, - "to": {
- "name": "string",
- "version": "string"
}
}
], - "serviceMapping": [
- {
- "from": {
- "name": "string",
- "version": "string"
}, - "to": {
- "name": "string",
- "version": "string"
}
}
]
}
{- "unresolvedAuthentications": true,
- "newConfigKeys": true,
- "config": {
- "source": { },
- "target": { }
}, - "authenticationsRequirements": [
- {
- "authExportId": "string",
- "title": "string",
- "service": {
- "name": "string",
- "version": "string"
}, - "scopes": [
- "string"
], - "resolvedAuthentication": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "service": {
- "name": "string",
- "version": "string"
}, - "serviceEnvironment": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}, - "scopes": [
- "string"
]
}
}
]
}
Returns potential changes and impacts on the project and the solution (if applicable) if the import is applied.
success
required | object (importexport.ImportMetadataView) Metadata of the import |
required | object (importexport.ProjectImportImpactViewForPreview) Preview of an impact of the import on the project |
object (importexport.SolutionImportImpactViewForPreview) Preview of an impact of the import on the solution (present only if importing a project with embedded solution) |
Invalid Input
Unauthorized
Forbidden
Not Found
Limit exceeded
Internal Error
{- "authenticationResolution": [
- {
- "authExportId": "string",
- "authenticationId": "c97ede01-dc79-4cb7-8ae8-9e2457649b27"
}
], - "configOverride": { },
- "exportedProjectJson": { },
- "connectorMapping": [
- {
- "from": {
- "name": "string",
- "version": "string"
}, - "to": {
- "name": "string",
- "version": "string"
}
}
], - "serviceMapping": [
- {
- "from": {
- "name": "string",
- "version": "string"
}, - "to": {
- "name": "string",
- "version": "string"
}
}
]
}
{- "importMetadata": {
- "importedFrom": {
- "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8",
- "projectVersion": "string",
- "projectName": "string"
}, - "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8",
- "projectName": "string"
}, - "projectImpact": {
- "config": {
- "created": [
- {
- "key": "string",
- "value": "string"
}
], - "updated": [
- {
- "key": "string",
- "oldValue": "string",
- "newValue": "string"
}
], - "removed": [
- {
- "key": "string",
- "value": "string"
}
]
}, - "workflows": {
- "created": [
- {
- "name": "string",
- "importedFromId": "6c356389-3f92-480f-bdcc-4698670dd603"
}
], - "updated": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "importedFromId": "6c356389-3f92-480f-bdcc-4698670dd603"
}
], - "removed": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}
]
}
}, - "solutionImpact": {
- "changeType": "Created",
- "breakingChanges": true,
- "requiresNewUserInput": true,
- "requiresNewSystemInput": true,
- "authSlots": {
- "created": [
- {
- "authenticationId": "c97ede01-dc79-4cb7-8ae8-9e2457649b27",
- "title": "string",
- "description": "string",
- "serviceId": "8f8bb40f-b96b-40fe-9064-5031fbe483f9",
- "serviceEnvironmentId": "a6e07c5a-ab15-47f2-8575-5bb51b45c412",
- "scopes": [
- "string"
], - "externalId": "string",
- "static": true,
- "hidden": true,
- "skipCTA": true,
- "requireUnique": true,
- "hasBreakingChange": true,
- "changes": [
- {
- "message": "string",
- "code": "CreatedMandatorySlot",
- "breakingChange": true
}
], - "recreated": true,
- "slotRecreationReasons": [
- {
- "code": "AuthenticationIdChanged",
- "message": "string"
}
], - "recreatedFromSlotId": "8a240360-7587-4734-bdc5-74d5f0cc6e8c"
}
], - "updated": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "description": "string",
- "authenticationId": "c97ede01-dc79-4cb7-8ae8-9e2457649b27",
- "serviceId": "8f8bb40f-b96b-40fe-9064-5031fbe483f9",
- "serviceEnvironmentId": "a6e07c5a-ab15-47f2-8575-5bb51b45c412",
- "scopes": [
- "string"
], - "externalId": "string",
- "static": true,
- "hidden": true,
- "skipCTA": true,
- "requireUnique": true,
- "hasBreakingChange": true,
- "changes": [
- {
- "message": "string",
- "code": "CreatedMandatorySlot",
- "breakingChange": true
}
], - "previously": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "description": "string",
- "authenticationId": "c97ede01-dc79-4cb7-8ae8-9e2457649b27",
- "serviceId": "8f8bb40f-b96b-40fe-9064-5031fbe483f9",
- "serviceEnvironmentId": "a6e07c5a-ab15-47f2-8575-5bb51b45c412",
- "scopes": [
- "string"
], - "externalId": "string",
- "static": true,
- "hidden": true,
- "skipCTA": true,
- "requireUnique": true
}
}
], - "removed": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "description": "string",
- "authenticationId": "c97ede01-dc79-4cb7-8ae8-9e2457649b27",
- "serviceId": "8f8bb40f-b96b-40fe-9064-5031fbe483f9",
- "serviceEnvironmentId": "a6e07c5a-ab15-47f2-8575-5bb51b45c412",
- "scopes": [
- "string"
], - "externalId": "string",
- "static": true,
- "hidden": true,
- "skipCTA": true,
- "requireUnique": true
}
]
}, - "configSlots": {
- "created": [
- {
- "key": "string",
- "title": "string",
- "description": "string",
- "externalId": "string",
- "valueType": "string",
- "ddl": true,
- "ddlConfiguration": {
- "allowSetCustomValue": true
}, - "required": true,
- "useDefaultValue": true,
- "defaultValue": "string",
- "referencedAuthSlotId": "f5f8ae2d-fc82-4ec7-b1c9-f37f031f3d33",
- "static": true,
- "hidden": true,
- "hasCustomJs": true,
- "hasDataMapping": true,
- "disabledResetType": true,
- "hasBreakingChange": true,
- "changes": [
- {
- "message": "string",
- "code": "CreatedMandatorySlot",
- "breakingChange": true
}
], - "recreated": true,
- "slotRecreationReasons": [
- {
- "code": "ConfigVariableKeyChanged",
- "message": "string"
}
], - "recreatedFromSlotId": "8a240360-7587-4734-bdc5-74d5f0cc6e8c"
}
], - "updated": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "key": "string",
- "title": "string",
- "description": "string",
- "externalId": "string",
- "valueType": "string",
- "ddl": true,
- "ddlConfiguration": {
- "allowSetCustomValue": true
}, - "required": true,
- "useDefaultValue": true,
- "defaultValue": "string",
- "referencedAuthSlotId": "f5f8ae2d-fc82-4ec7-b1c9-f37f031f3d33",
- "static": true,
- "hidden": true,
- "hasCustomJs": true,
- "hasDataMapping": true,
- "disabledResetType": true,
- "hasBreakingChange": true,
- "changes": [
- {
- "message": "string",
- "code": "CreatedMandatorySlot",
- "breakingChange": true
}
], - "previously": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "key": "string",
- "title": "string",
- "description": "string",
- "externalId": "string",
- "valueType": "string",
- "ddl": true,
- "ddlConfiguration": {
- "allowSetCustomValue": true
}, - "required": true,
- "useDefaultValue": true,
- "defaultValue": "string",
- "referencedAuthSlotId": "f5f8ae2d-fc82-4ec7-b1c9-f37f031f3d33",
- "static": true,
- "hidden": true,
- "hasCustomJs": true,
- "hasDataMapping": true,
- "disabledResetType": true
}
}
], - "removed": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "key": "string",
- "title": "string",
- "description": "string",
- "externalId": "string",
- "valueType": "string",
- "ddl": true,
- "ddlConfiguration": {
- "allowSetCustomValue": true
}, - "required": true,
- "useDefaultValue": true,
- "defaultValue": "string",
- "referencedAuthSlotId": "f5f8ae2d-fc82-4ec7-b1c9-f37f031f3d33",
- "static": true,
- "hidden": true,
- "hasCustomJs": true,
- "hasDataMapping": true,
- "disabledResetType": true
}
]
}
}
}
Import project with desired dependencies mappings (config, authentication, services, connectors can be specified)
success
required | object (importexport.ImportMetadataView) Metadata of the import |
required | object (importexport.ProjectImportImpactView) Impact of the import on the project |
object (importexport.SolutionImportImpactView) Impact of the import on the solution (present only if importing a project with embedded solution) |
Invalid Input
Unauthorized
Forbidden
Not Found
Limit exceeded
Internal Error
{- "authenticationResolution": [
- {
- "authExportId": "string",
- "authenticationId": "c97ede01-dc79-4cb7-8ae8-9e2457649b27"
}
], - "configOverride": { },
- "exportedProjectJson": { },
- "connectorMapping": [
- {
- "from": {
- "name": "string",
- "version": "string"
}, - "to": {
- "name": "string",
- "version": "string"
}
}
], - "serviceMapping": [
- {
- "from": {
- "name": "string",
- "version": "string"
}, - "to": {
- "name": "string",
- "version": "string"
}
}
]
}
{- "importMetadata": {
- "importedFrom": {
- "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8",
- "projectVersion": "string",
- "projectName": "string"
}, - "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8",
- "projectName": "string"
}, - "projectImpact": {
- "config": {
- "created": [
- {
- "key": "string",
- "value": "string"
}
], - "updated": [
- {
- "key": "string",
- "oldValue": "string",
- "newValue": "string"
}
], - "removed": [
- {
- "key": "string",
- "value": "string"
}
]
}, - "workflows": {
- "created": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "importedFromId": "6c356389-3f92-480f-bdcc-4698670dd603"
}
], - "updated": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "importedFromId": "6c356389-3f92-480f-bdcc-4698670dd603"
}
], - "removed": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string"
}
]
}
}, - "solutionImpact": {
- "solutionId": "9ff66092-33fb-498c-8123-e85aa68facfe",
- "changeType": "Created",
- "breakingChanges": true,
- "requiresNewUserInput": true,
- "requiresNewSystemInput": true,
- "authSlots": {
- "created": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "authenticationId": "c97ede01-dc79-4cb7-8ae8-9e2457649b27",
- "title": "string",
- "description": "string",
- "serviceId": "8f8bb40f-b96b-40fe-9064-5031fbe483f9",
- "serviceEnvironmentId": "a6e07c5a-ab15-47f2-8575-5bb51b45c412",
- "scopes": [
- "string"
], - "externalId": "string",
- "static": true,
- "hidden": true,
- "skipCTA": true,
- "requireUnique": true,
- "hasBreakingChange": true,
- "changes": [
- {
- "message": "string",
- "code": "CreatedMandatorySlot",
- "breakingChange": true
}
], - "recreated": true,
- "slotRecreationReasons": [
- {
- "code": "AuthenticationIdChanged",
- "message": "string"
}
], - "recreatedFromSlotId": "8a240360-7587-4734-bdc5-74d5f0cc6e8c"
}
], - "updated": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "description": "string",
- "authenticationId": "c97ede01-dc79-4cb7-8ae8-9e2457649b27",
- "serviceId": "8f8bb40f-b96b-40fe-9064-5031fbe483f9",
- "serviceEnvironmentId": "a6e07c5a-ab15-47f2-8575-5bb51b45c412",
- "scopes": [
- "string"
], - "externalId": "string",
- "static": true,
- "hidden": true,
- "skipCTA": true,
- "requireUnique": true,
- "hasBreakingChange": true,
- "changes": [
- {
- "message": "string",
- "code": "CreatedMandatorySlot",
- "breakingChange": true
}
], - "previously": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "description": "string",
- "authenticationId": "c97ede01-dc79-4cb7-8ae8-9e2457649b27",
- "serviceId": "8f8bb40f-b96b-40fe-9064-5031fbe483f9",
- "serviceEnvironmentId": "a6e07c5a-ab15-47f2-8575-5bb51b45c412",
- "scopes": [
- "string"
], - "externalId": "string",
- "static": true,
- "hidden": true,
- "skipCTA": true,
- "requireUnique": true
}
}
], - "removed": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "description": "string",
- "authenticationId": "c97ede01-dc79-4cb7-8ae8-9e2457649b27",
- "serviceId": "8f8bb40f-b96b-40fe-9064-5031fbe483f9",
- "serviceEnvironmentId": "a6e07c5a-ab15-47f2-8575-5bb51b45c412",
- "scopes": [
- "string"
], - "externalId": "string",
- "static": true,
- "hidden": true,
- "skipCTA": true,
- "requireUnique": true
}
]
}, - "configSlots": {
- "created": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "key": "string",
- "title": "string",
- "description": "string",
- "externalId": "string",
- "valueType": "string",
- "ddl": true,
- "ddlConfiguration": {
- "allowSetCustomValue": true
}, - "required": true,
- "useDefaultValue": true,
- "defaultValue": "string",
- "referencedAuthSlotId": "f5f8ae2d-fc82-4ec7-b1c9-f37f031f3d33",
- "static": true,
- "hidden": true,
- "hasCustomJs": true,
- "hasDataMapping": true,
- "disabledResetType": true,
- "hasBreakingChange": true,
- "changes": [
- {
- "message": "string",
- "code": "CreatedMandatorySlot",
- "breakingChange": true
}
], - "recreated": true,
- "slotRecreationReasons": [
- {
- "code": "ConfigVariableKeyChanged",
- "message": "string"
}
], - "recreatedFromSlotId": "8a240360-7587-4734-bdc5-74d5f0cc6e8c"
}
], - "updated": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "key": "string",
- "title": "string",
- "description": "string",
- "externalId": "string",
- "valueType": "string",
- "ddl": true,
- "ddlConfiguration": {
- "allowSetCustomValue": true
}, - "required": true,
- "useDefaultValue": true,
- "defaultValue": "string",
- "referencedAuthSlotId": "f5f8ae2d-fc82-4ec7-b1c9-f37f031f3d33",
- "static": true,
- "hidden": true,
- "hasCustomJs": true,
- "hasDataMapping": true,
- "disabledResetType": true,
- "hasBreakingChange": true,
- "changes": [
- {
- "message": "string",
- "code": "CreatedMandatorySlot",
- "breakingChange": true
}
], - "previously": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "key": "string",
- "title": "string",
- "description": "string",
- "externalId": "string",
- "valueType": "string",
- "ddl": true,
- "ddlConfiguration": {
- "allowSetCustomValue": true
}, - "required": true,
- "useDefaultValue": true,
- "defaultValue": "string",
- "referencedAuthSlotId": "f5f8ae2d-fc82-4ec7-b1c9-f37f031f3d33",
- "static": true,
- "hidden": true,
- "hasCustomJs": true,
- "hasDataMapping": true,
- "disabledResetType": true
}
}
], - "removed": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "key": "string",
- "title": "string",
- "description": "string",
- "externalId": "string",
- "valueType": "string",
- "ddl": true,
- "ddlConfiguration": {
- "allowSetCustomValue": true
}, - "required": true,
- "useDefaultValue": true,
- "defaultValue": "string",
- "referencedAuthSlotId": "f5f8ae2d-fc82-4ec7-b1c9-f37f031f3d33",
- "static": true,
- "hidden": true,
- "hasCustomJs": true,
- "hasDataMapping": true,
- "disabledResetType": true
}
]
}
}
}