The Project Provisioning API provides a set of flexible, modular endpoints to allow the programmatic creation of a project within . Each API endpoint handles a subset of the information required to provision a project, and executing all of these endpoints as detailed below will result in a functional project that can be accessed through the interface.Documentation Index
Fetch the complete documentation index at: https://docs.maia.ai/llms.txt
Use this file to discover all available pages before exploring further.
It is important to bear in mind that, until the intended users of the project are manually invited, the project will only be visible/accessible by users with the Super Admin role.
Create project
This is the first endpoint to be called in the process, which initializes the project with minimal information. A successful request will produce a v4 UUID, which will be required for the subsequent endpoints. Currently, the supported data warehouses areSNOWFLAKE and REDSHIFT, with a deployment type of HYBRID or FULL_SAAS. Future updates will add support for other warehouses.
Example request
Base URL:POST /v1/projects
Example request body:
Create Default Warehouse Connection
Adding a default warehouse connection sets up basic configuration for connecting to a data warehouse. Currently, the supported warehouse and authentication combinations are:| Warehouse | Authentication Type |
|---|---|
| Snowflake | key_pair |
| Amazon Redshift | password |
This endpoint only defines basic metadata for the warehouse, not the actual credentials for connecting to the warehouse. These are provided in the Create Environment request below.
Example request
Base URL:POST /v1/projects/{projectId}/data-platform-connections
Ensure that the {projectId} variable is replaced with the target project ID from the initial request to create the project.
Example request body:
Create Secret - Full SaaS only
If using a Full SaaS , you will need to create a secret containing the warehouse connection credentials for your chosen warehouse type. This request will securely store the provided credentials into the Matillion-hosted vault, and allow you to reference them when creating an environment.Request Structure
There are a handful of fields to provide as part of the request:name: The name of the secret that is to be created. This is how you will refer to the secret in any subsequent requests.
type: The type of secret to be created. For data warehouse credentials, this should be set to DWH_PASSWORD.
key: The key which contains the data warehouse credential within the secret value itself.
value: The secret to be stored, such as a password or private key.
When providing a private key, the value MUST include
\n newline characters to ensure that it is properly formatted. See example below.Example request
Note the differing URL path for this request. The agentId can be fetched from the agents API endpoints. Base URL:POST /v1/secrets/{agentId}/secret-value
Ensure that the {agentId} variable is replaced with the target agent ID that belongs to the project created in the initial request.
Example request body:
Create cloud credential connection
If using a Full SaaS project, or connecting to cloud platform resources outside of the ‘s account, you need to provide credentials to connect to that cloud platform and then associate the new connection with the target environment. Currently, the supported cloud platform and authentication combinations are:| Cloud platform | Authentication type |
|---|---|
| AWS | CLOUD_PROVIDER_SECRET |
| Azure | CLOUD_PROVIDER_SECRET |
| GCP | CLOUD_PROVIDER_SECRET |
Create a cloud credential secret in a Full SaaS vault
To create the secret in a Full SaaS vault, use the/v1/secrets/{agentId}/secret-value endpoint.
Example request body (AWS):
value block depending on the platform being configured, using the formats below.
Azure CLOUD_PROVIDER_SECRET vault format:
CLOUD_PROVIDER_SECRET vault format:
Create a cloud credential secret in an external vault
When creating a secret in an external vault—such as AWS Secrets Manager, Azure Key Vault, or another supported platform—the format must match thevalue parameter in the examples above.
Example request
Base URL:POST /v1/projects/{projectId}/connections
Ensure that the {projectId} variable is replaced with the target project ID from the initial request to create the project.
AWS via AWS Secrets Manager
Example request body:The
region property is optional.AWS via Matillion-hosted vault
Example request body:Azure via Azure Key Vault
Example request body:The
vaultName property is optional.GCP via Google Secret Manager
Example request body:Listing cloud platform connections is performed through the general
Connections API endpoint.Create Environment
Request Structure
When creating an environment, there are a number of fields to provide:name: The name of the environment. This is an immutable identifier for the environment, and is used in other requests to refer to this specific environment.
description (optional): An optional, text description for the environment.
defaultAgentId: The UUID of the that will be used by default for this environment.
defaultUserAccessLevel: The default access level that will be assigned to a user for the environment, when they are added to the project. The accepted values are one of:
- default
- admin
- runner
- readOnly
- noAccess
defaultConnections: Specifies the following default connections for the environment:
- Data warehouse.
- Cloud platform (optional).
my-warehouse-connection).
Currently, the connection details for the warehouse connection are provided via the
connectionOverrides block as detailed below. These overrides correspond to the connections defined here in defaultConnections. Each environment expects a separate data warehouse connection. If the same data warehouse connection is used across multiple environments, adding or modifying details in one environment will affect the others.connectionOverrides: Allows you to provide details for the data warehouse connection.
Within the
connectionProperties, the passphrase is only required if the password itself is encrypted. For more information, see Storing the private key.Example request
Base URL:POST /v1/projects/{projectId}/environments
Ensure that the {projectId} variable is replaced with the target project ID from the initial request to create the project.
Snowflake
Example request body:Redshift
Example request body:Snowflake with AWS cloud credentials
To attach a cloud platform connection to the environment, add aCLOUD_PLATFORM entry to defaultConnections alongside the DWH entry. The value must match the name of the cloud credential connection created in Create cloud credential connection.
Example request body:
Initialize Repository
After creating the project, this endpoint allows a Git repository to be associated with the project. The Project Provisioning API currently supports two Git providers: GitHub and Azure DevOps. Full SaaS repositories are not currently supported.Authentication
For both providers, uses a Matillion-managed identity to connect to your repository. You do not need to create or provide a Personal Access Token (PAT) when calling these endpoints—authentication is handled automatically by .The
Git-Provider-Access-Token header is not required for either provider.POST /v1/projects/{projectId}/repositories
Ensure that the {projectId} variable is replaced with the target project ID from the initial request to create the project.
GitHub
uses GitHub App authentication. No additional setup is required in your GitHub organization beyond installing the Matillion GitHub App once per organization.Example request
Azure DevOps
uses a Matillion-owned Microsoft Entra service principal to connect to your Azure DevOps repository. Before calling this endpoint with"provider": "azure-devops", you must:
- Install the Matillion service principal in your Azure tenant.
- Grant the Matillion service principal access to your Azure DevOps organization and the target repository.
Install the Matillion service principal
If you (or another user in your Azure tenant) have previously connected an Azure DevOps repository to through the UI, the Matillion service principal is already installed in your tenant and you can skip this step. Otherwise, follow Installing the Maia app in Azure to install the Matillion service principal in your Azure tenant. To verify, visit the Enterprise Applications blade in the Azure portal and confirm that the Matillion service principal is listed.Grant the Matillion service principal access
This is a one-time setup per Azure DevOps organization. Once the service principal has been granted access, it can be reused for any project and repository in that organization that has been granted the same permissions.
- In your Azure DevOps organization, go to Organization settings → Users → Add user.
- In the Users field, search for and select the Matillion service principal as it appears in your tenant.
- Set Access level to Basic.
- Add the service principal to the project that contains your target repository.
- Set the Azure DevOps group membership to Project Contributors, or a custom group with at least Read and Contribute permissions on the target repository.
- Click Add.
Example request
{azure-devops-organization-name}: The name of your Azure DevOps organization (the segment immediately afterdev.azure.com/in the URL).{azure-devops-repository-id}: The UUID of the target Azure DevOps repository. Find this via the Repositories - List API.{your-azure-entra-tenant-id}: The UUID of the Microsoft Entra tenant backing your Azure DevOps organization. Find this in the Azure portal under Microsoft Entra ID → Overview.
