--- title: git.sr.ht API reference --- The git.sr.ht API allows you to browse, create, and manage repositories on git.sr.ht programmatically. This API follows the [standard sourcehut API conventions](../api-conventions.md). ## Authentication Authentication is done via the [meta.sr.ht OAuth flow](https://man.sr.ht/meta.sr.ht/oauth-api.md). The following OAuth scopes are available for git.sr.ht: - **info:read**, **info:write**: read & write repository details - **access:read**, **access:write**: read & write access control lists - **data:read**: read git data ## Git protocols The high and low-level data endpoints are basic and provided as a convenience. For write operations or more complex read operations, we recommend using the git interface. git.sr.ht supports the [smart protocol][protocols] over HTTPS (read-only) and SSH (read/write). [protocols]: https://git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols ## Resources ### Commit resource ```json { "id": "sha-1 hash", "short_id": "truncated hash", "author": { "email": "email address", "name": "author name" }, "committer": { "email": "email address", "name": "committer name" }, "timestamp": "timestamp", "message": "commit message", "tree": "tree ID (sha-1 hash)", "parents": [ list of parent IDs (string, sha-1 hash) ], "signature": { "signature": "base64 encoded PGP signature", "data": "base64 encoded signed payload" } or null } ``` ### Tree resource ```json { "id": "sha-1 hash", "short_id": "truncated hash", "entries": [ { "name": "entry name", "id": "sha-1 hash", "type": "tree" | "blob", "mode": unix file mode } ] } ``` ### Reference resource ```json { "name": "name of reference (e.g. refs/heads/master)", "target": "reference target (sha-1 hash)" } ``` ### Repository resource ```json { "id": integer, "created": "timestamp", "subject": "message subject", "name": "repository name", "description": "repository description (markdown)", "visibility": "public" | "unlisted" | "private" } ``` ## Endpoints **Note**: usernames are prefixed with `~`. ### GET /api/user/:username Retrieves a user resource. ### GET /api/user Equivalent to [/api/user/:username](#GET-apiuserusername), implies the authenticated user. ### GET /api/:username/repos List of [repository resources](#repository-resource) owned by this user. **OAuth scope**: `info:read` ### GET /api/repos Equivalent to [/api/:username/repos](#GET-apiusernamerepos), implies the authenticated user. ### POST /api/repos Creates a new [repository resource](#repository-resource). **OAuth scope**: `info:write` **Request body** ```json { "name": "repository name", "description": "repository description (markdown)" (optional) "visibility": "public" | "unlisted" | "private" (optional: default public) } ``` **Response** The new [repository resource](#repository-resource) ### GET /api/:username/repos/:name Retrieves a [repository resource](#repository-resource). **OAuth scope**: `info:read` ### GET /api/repos/:name Equivalent to [/api/:username/repos/:name](#GET-apiusernamereposname), implies the authenticated user. ### PUT /api/repos/:name Updates a [repository resource](#repository-resource). **OAuth scope**: `info:write` **Request body** ```json { "name": "repository name" (optional), "description": "repository description (markdown)" (optional), "visibility": "public" | "unlisted" | "private" (optional) } ``` **Notes** - Updating the name will create a redirect. ### DELETE /api/repos/:name Deletes a [repository resource](#repository-resource). **OAuth scope**: `info:write` ## Common data endpoints Endpoints for fetching git data from repos. ### GET /api/:username/repos/:name/refs List of [reference resources](#reference-resource) in this git repository. **OAuth scope**: `data:read` ### GET /api/repos/:name/refs Equivalent to [/api/:username/repos/refs](#GET-apiusernamereposnamerefs), implies the authenticated user. ### GET /api/:username/repos/:name/log List of the latest [commit resources](#commit-resource) on the default branch. **OAuth scope**: `data:read` ### GET /api/repos/:name/log Equivalent to [/api/:username/repos/:name/log](#GET-apiusernamereposnamelog), implies the authenticated user. ### GET /api/:username/repos/:name/log/:ref List of the latest [commit resources](#commit-resource) starting from the given reference (sha-1 ID or name). **OAuth scope**: `data:read` ### GET /api/repos/:name/log/:ref Equivalent to [/api/:username/repos/:name/log/:ref](#GET-apiusernamereposnamelogref), implies the authenticated user. ## High-level data endpoints The endpoints work with paths instead of object IDs. ### GET /api/:username/repos/:name/tree Returns the [tree resource](#tree-resource) for the latest commit to the default branch. **OAuth scope**: `data:read` ### GET /api/repos/:name/tree Equivalent to [/api/:username/repos/:name/tree](#GET-apiusernamereposnametree), implies the authenticated user. ### GET /api/:username/repos/:name/tree/:ref Returns the [tree resource](#tree-resource) for the given reference. **OAuth scope**: `data:read` ### GET /api/repos/:name/tree/:ref Equivalent to [/api/:username/repos/:name/tree/:ref](#GET-apiusernamereposnametreeref), implies the authenticated user. ### GET /api/:username/repos/:name/tree/:ref/:path Returns the [tree resource](#tree-resource) for the given reference, following the parent trees until the requested tree is found. In other words, this lists the contents of a subdirectory by path. **OAuth scope**: `data:read` ### GET /api/repos/:name/tree/:ref/:path Equivalent to [/api/:username/repos/:name/tree/:ref/:path](#GET-apiusernamereposnametreerefpath), implies the authenticated user. ### GET /api/:username/repos/:name/blob/:ref/:path Returns the blob at the given path of the tree specified by the given reference. **OAuth scope**: `data:read` **Response** The contents of the requested blob, as text/plain or as application/octet-stream for binary blobs. ### GET /api/repos/:name/blob/:ref/:path Equivalent to [/api/:username/repos/:name/blob/:ref/:path](#GET-apiusernamereposnameblobrefpath), implies the authenticated user. ## Low-level data endpoints These endpoints work with object IDs instead of paths. ### GET /api/:username/repos/:name/tree/:id Returns the [tree resource](#tree-resource) with the given ID. **OAuth scope**: `data:read` ### GET /api/repos/:name/tree/:id Equivalent to [/api/:username/repos/:name/tree/:id](#GET-apiusernamereposnametreeid), implies the authenticated user. ### GET /api/:username/repos/:name/blob/:id Returns the blob with the given ID. **OAuth scope**: `data:read` **Response** The contents of the requested blob, as text/plain or as application/octet-stream for binary blobs. ### GET /api/repos/:name/blob/:id Equivalent to [/api/:username/repos/:name/blob/:id](#GET-apiusernamereposnameblobid), implies the authenticated user.