Project Git Access
Altium 365 can host a Git repository for your project's source files. Altium Designer works with these repositories as a native client, but you can also work with them like any other Git remote — clone, pull, push, etc. with the standard Git client.
This page shows how to:
-
Discover a project's repository URL through the Altium 365 API.
-
Authenticate Git requests using an Altium 365 access token.
-
Work with Git repository
Step 1: Get the Repository URL
Repository details are exposed through the Altium 365 API. Query your projects, read the repositoryUrl field, and use it as your Git remote.
See Tokens for details on acquiring and using Altium 365 tokens. If you are new to the API, start with the Altium 365 API Quick Start Guide.
Hardware projects
Hardware (PCB) projects expose the repository fields through desProjects:
query {
desProjects {
nodes {
repositoryUrl
}
}
}
Software projects
Software projects expose the same fields through sftSoftwareProjects:
query {
sftSoftwareProjects {
repositoryUrl
}
}
Response fields
Both queries return the same repository fields:
| Your application | Description |
repositoryUrl |
The Git remote URL for the repository. Treat it as an opaque value — request it from the API and use it as-is. |
For example, a hardware project response:
{
"data": {
"desProjects": {
"nodes": [
{
"repositoryUrl": "{repositoryUrl}"
}
]
}
}
}
Step 2: Authenticate
Altium 365 Git repositories authenticate with basic authentication. Use your Altium 365 API access token as the password. The token must be issued for the Workspace that owns the project.
The username is ignored by the server but must be a non-empty string. Any placeholder (for example: token) works.
Authorization header
For service-to-service calls, pass the credentials in the Authorization header, base64-encoded as username:password:
Authorization: Basic base64("token:{access-token}")
Git command line
Clone using the repositoryUrl returned by the API. When prompted, enter any non-empty username and your access token as the password:
git clone {repositoryUrl}
# Username: "token" (any non-empty value)
# Password: {access-token}
Configure a Git credential helper so the token is stored securely and you are not prompted on every operation. The available helpers vary by platform (for example osxkeychain on macOS, manager on Windows):
git config --global credential.helper osxkeychain
Credentials in the repository URL
As an alternative to the prompt, Altium 365 accepts credentials in the authority component of the URL — the standard URI username:password@ syntax. The API never returns a URL with credentials pre-filled, so you construct this form yourself: take the returned repositoryUrl and insert {username}:{access-token}@ immediately after https://.
git clone https://token:{access-token}@<returned-url>
# <returned-url> is the repositoryUrl with the leading "https://" removed
The username is ignored (any non-empty value); the password is the same access token (JWT) used in the methods above.
Step 3: Working with the Repository
Once cloned, the repository behaves like any standard Git remote:
cd <your-repository>
# Make changes, then push as usual
git add .
git commit -m "Update firmware sources"
git push
An invalid or expired access token causes Git operations to fail with an authentication error:
git clone {repositoryUrl}
# provide credentials when prompted
Cloning into '<your-repository>'...
bad input: 07KCg
fatal: Authentication failed for '{repositoryUrl}'
Security
-
Treat the access token like a password. Do not commit it to source control or embed it in client-side code.
-
Prefer a credential helper over embedding the token in the clone URL, so it is not written to
.git/configor your shell history. -
Use short-lived tokens for automation. For CI/CD and background services, obtain a short-lived access token from a refresh token so the credential that travels with each request has a limited exposure window. See Using a Refresh Token.
Limits
To keep the project repository fast and reliable, the Git server rejects large compressed archives: .zip, .7z, and .rar files larger than 256 MB. A push that includes such a file is rejected:
git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 282.56 MiB | 1.09 MiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
error: RPC failed; HTTP 471 curl 22 The requested URL returned error: 471
send-pack: unexpected disconnect while reading sideband packet
fatal: the remote end hung up unexpectedly
Everything up-to-date
See KB: Cannot save project due to Git error with status code 471 for details of this error in Altium Designer context.