Skip to content

API Reference

The VeloGit Data Plane provides a REST API for managing organizations, repositories, agents, and more.

Most endpoints require a valid OIDC Bearer token issued by the identity provider:

Authorization: Bearer <your_token>

Git Smart HTTP operations (git clone, git push) use HTTP Basic Auth. Use any username and your PAT as the password:

https://<username>:<pat>@velogit.com/<org>/<repo>.git

PATs can be created (with an optional expiry) and revoked from Developer Settings in the UI, or via the tokens API. Expired tokens are rejected with 401 Unauthorized.

Some endpoints are publicly accessible (no auth required) for repos with public visibility — for example, listing files, commits, pull requests, and fragments. Write operations always require authentication.


MethodPathDescription
GET/orgsList organizations the current user belongs to
POST/orgsCreate a new organization
GET/orgs/:org/reposList repositories for an org (public repos visible to anyone)
GET/orgs/:org/settingsGet organization settings
PATCH/orgs/:org/settingsUpdate organization settings (default repo visibility, etc.)
GET/orgs/:org/activityRecent activity feed for an org
GET/orgs/:org/me/membershipCheck if the current user is a member of the org
MethodPathDescription
GET/orgs/:org/membersList org members
POST/orgs/:org/invitationsInvite a user by email
DELETE/orgs/:org/invitations/:idRevoke a pending invitation
DELETE/orgs/:org/members/:userIdRemove a member
PATCH/orgs/:org/members/:userIdUpdate a member’s role
GET/invitations/:tokenGet invitation details by token
POST/invitations/:token/acceptAccept an invitation
MethodPathDescription
GET/reposList all repos the user has access to
POST/reposCreate a new repository
GET/orgs/:org/repos/:repoGet repository detail (includes forked_from origin if applicable)
PATCH/orgs/:org/repos/:repoUpdate repository metadata (name, description, visibility)
DELETE/orgs/:org/repos/:repoDelete a repository
POST/orgs/:org/repos/:repo/forkFork a repository into a target org. Body: {"org":"<target-org>","name":"<new-name>"}
GET/orgs/:org/repos/:repo/filesList files at a path
GET/orgs/:org/repos/:repo/contentGet raw file content
GET/orgs/:org/repos/:repo/commitsList commits
GET/orgs/:org/repos/:repo/branchesList branches
GET/orgs/:org/repos/:repo/diff/:shaGet diff for a specific commit
GET/orgs/:org/repos/:repo/contributorsList contributors by commit count
MethodPathDescription
GET/orgs/:org/repos/:repo/pullsList pull requests
POST/orgs/:org/repos/:repo/pullsOpen a new pull request
GET/orgs/:org/repos/:repo/pulls/:idGet PR detail (includes fragments)
PATCH/orgs/:org/repos/:repo/pulls/:idUpdate PR title, description, or status
POST/orgs/:org/repos/:repo/pulls/:id/mergeMerge a pull request
GET/orgs/:org/repos/:repo/pulls/:id/commitsList commits in a PR
GET/orgs/:org/repos/:repo/pulls/:id/diffGet unified diff for a PR
GET/orgs/:org/repos/:repo/pulls/:id/commentsList PR comments
POST/orgs/:org/repos/:repo/pulls/:id/commentsPost a comment (supports inline and threaded replies)
GET/orgs/:org/repos/:repo/pulls/:id/reviewsList reviews
POST/orgs/:org/repos/:repo/pulls/:id/reviewsSubmit an approval or change request
MethodPathDescription
GET/orgs/:org/repos/:repo/fragmentsList fragments for a repo
POST/orgs/:org/repos/:repo/fragmentsCreate a fragment (agent use)
PATCH/orgs/:org/repos/:repo/fragments/:id/rejectDismiss a suggestion
POST/orgs/:org/repos/:repo/meldApply a suggestion to a branch
MethodPathDescription
GET/orgs/:org/repos/:repo/pipelinesList pipeline runs (most recent 30)
GET/orgs/:org/repos/:repo/pipelines/:idGet a pipeline run with step details (steps ordered by creation time)
POST/orgs/:org/repos/:repo/pipelines/:id/cancelCancel an active run; force-destroys the runner machine
POST/orgs/:org/repos/:repo/pipelines/:id/rerunRe-run the whole pipeline against the same commit — spawns a new pipeline run
POST/orgs/:org/repos/:repo/pipelines/:id/steps/:step/rerunRe-run a single step (and its transitive downstream via After:) within the same run; the named step + dependents are reset to pending and a fresh runner picks them up. See Re-running Individual Steps
POST/orgs/:org/repos/:repo/pipelines/:id/gates/:step/approveApprove a blocked gate step; triggers a new runner segment
POST/orgs/:org/repos/:repo/pipelines/:id/gates/:step/rejectReject a blocked gate step; marks all pending steps skipped
StatusMeaning
runningA machine is actively executing steps
waiting_gatePaused at a gate checkpoint; awaiting human approval
passedAll steps completed successfully
failedOne or more critical steps failed, or the run was reaped as stale
rejectedA gate was rejected by a team member
MethodPathDescription
GET/orgs/:org/repos/:repo/flaresGet flare count and whether the current user has flared
POST/orgs/:org/repos/:repo/flareFlare a repository
DELETE/orgs/:org/repos/:repo/flareRemove your flare
MethodPathDescription
GET/orgs/:org/webhooksList org-level webhooks
POST/orgs/:org/webhooksCreate an org-level webhook
DELETE/orgs/:org/webhooks/:idDelete a webhook
GET/orgs/:org/webhooks/:id/deliveriesView delivery history
POST/orgs/:org/webhooks/:id/pingSend a test ping
MethodPathDescription
GET/orgs/:org/agentsList configured agents
POST/orgs/:org/agentsCreate an agent
PUT/orgs/:org/agents/:idUpdate an agent
DELETE/orgs/:org/agents/:idDelete an agent
GET/orgs/:org/agent-configGet org-level LLM provider config
POST/orgs/:org/agent-configSave org-level LLM provider config
MethodPathDescription
GET/tokensList your PATs (shows name, prefix, expiry date)
POST/tokensCreate a new PAT. Body: {"name":"<name>","expiry_days":<days>} — set expiry_days to 0 for no expiration
DELETE/tokens/:idRevoke a PAT
MethodPathDescription
GET/orgs/:org/repos/:repo/settings/protectionGet branch protection rules
PUT/orgs/:org/repos/:repo/settings/protectionCreate or update branch protection

VeloGit uses standard HTTP status codes:

CodeMeaning
200 OKRequest succeeded
201 CreatedResource successfully created
400 Bad RequestInvalid input parameters
401 UnauthorizedMissing or invalid authentication
403 ForbiddenAuthenticated but lacking permission
404 Not FoundResource does not exist
500 Internal Server ErrorUnexpected server error