Create link — POST /v1/git/repos/{name}/link

Records that a repository's history lives on another host, making the repository first when the org has none of that name.

POST /v1/git/repos/{name}/link

Addresshttps://api.hanzo.ai/v1/git/repos/{name}/link
MethodPOST
Operationpost_git_repos_by_name_link
AuthAuthorization: Bearer $HANZO_API_KEY

Records that a repository's history lives on another host, making the repository first when the org has none of that name. Nothing is copied: a read is served from a cache filled from the host, as the host lets the caller read, and a push goes to the host. A repository whose history is HERE is refused (409): a link would hide what only this store holds.

Request

4 fields, body application/json (required).

FieldInTypeRequiredDescription
namepathstringyesName is the repository, from the :name path segment.
namebodystring—Name is the repository, from the :name path segment.
projectbodystring—Project is the sub-scope to make it in; empty uses the caller's own.
sourcebodystring—Source is where its history lives: an http(s) clone address, such as https://github.com/acme/widgets.git.

Response

StatusBodyMeaning
200git.repoViewok
defaultproblem-detailsrefused

200 body — 19 fields.

FieldInTypeAlwaysDescription
branchesbodystring[]—Branches are the repo's branch names.
cloneUrlbodystring—CloneURL is the HTTPS smart-HTTP remote git clone takes.
createdAtbodystring—CreatedAt is RFC 3339 UTC.
defaultBranchbodystring—DefaultBranch is where HEAD points on a fresh repo ("main").
descriptionbodystring—Description is the caller-supplied blurb (max 4KiB).
headbodystring—Head is the resolved HEAD commit, empty on an empty repo.
idbodystring—ID is the repo's stable, prefixed identifier ("repo_" + 128 random bits).
linkbodygit.link—
link.cloneUrlbodystring—CloneURL is the address its history is fetched from and pushed to.
link.namebodystring—Name is the repository's name on its provider.
link.ownerbodystring—Owner is the account the repository belongs to on its provider.
link.providerbodystring—Provider is "github", "forge" (git.hanzo.ai, Hanzo's own), or "git" for any other host.
namebodystring—Name is the org-unique handle, and the last path segment of both URLs below.
orgbodystring—Org owns the repo — the gateway-minted X-Org-Id, and the isolation key.
projectbodystring—Project is the optional sub-scope the repo lives in; absent for the org's default scope.
publicbodyboolean—Public grants ANONYMOUS read (fetch) only; push and the whole control plane stay org-authed.
sizeBytesbodyinteger (int64)—SizeBytes is the repo's measured on-disk size, re-measured on create, after each push, and after a gc.
sshUrlbodystring—SSHURL is the scp-style SSH remote (git@host:org/repo.git).
updatedAtbodystring—UpdatedAt is RFC 3339 UTC, empty until the first write.

Failure carries the platform error shape — see Errors.

Examples

hanzo git repos link <name>
import { Configuration, GitApi } from 'hanzoai';

const api = new GitApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postGitReposByNameLink({ name: 'name', name: "<name>", project: "<project>" });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import GitApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = GitApi(client).post_git_repos_by_name_link(name='name', name="<name>", project="<project>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.GitAPI.PostGitReposByNameLink(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, git_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = git_api::post_git_repos_by_name_link(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.GitApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new GitApi(client).postGitReposByNameLink();
curl -X POST https://api.hanzo.ai/v1/git/repos/<name>/link \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "name": "<name>",
       "project": "<project>"
     }'

MCP reaches git through the git tool, which names its 41 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "get_git_activity"
         }
       }
     }'

Git API · All Hanzo APIs · Interactive reference

Was this page useful?
Broken link or missing step? Drop it in #docs on Discord or open a PR.