aboutsummaryrefslogblamecommitdiffstats
path: root/git.sr.ht/api.md
blob: 2a847a0e9dfefcf1b0f217f9aa61c335856b8457 (plain) (tree)































































































































































































































































                                                                                                 

                            




                                                                                























                                                                                                 

                            




                                                                                



                                                                                     
---
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.