Command Palette
Search for a command to run

Repositories

Create, list, and manage Git repositories on Outpost

GET
/{namespace}/repositories

List repositories

GET `/auth/v1/repository/{namespace}`

Retrieve all repositories within a namespace.

Path parameters


namespace
type: string
required
The namespace (user or organization) that owns the repositories.

Query parameters


page
type: integer
Page number for pagination.
default: 1
per_page
type: integer
Number of results per page. Maximum `100`.
default: 20
sort
type: string
Sort field. One of `name`, `created_at`, `updated_at`, `size`.
default: updated_at
order
type: string
Sort order. One of `asc`, `desc`.
default: desc
visibility
type: string
Filter by visibility. One of `public`, `private`, `internal`.

Request

curl "https://outpost.run/auth/v1/acme/repositories?per_page=2&sort=name&order=asc" -H "Authorization: Bearer <access_token>"

Response 200

{ "data": [ { "id": "repo_3f8a1b2c4d5e", "name": "inference-engine", "namespace": "acme", "full_name": "acme/inference-engine", "description": "Distributed inference engine for large language models", "visibility": "private", "default_branch": "main", "size_bytes": 524288000, "language": "Python", "created_at": "2025-11-14T08:30:00Z", "updated_at": "2026-03-17T14:22:10Z", "pushed_at": "2026-03-17T14:22:10Z" }, { "id": "repo_9e7d6c5b4a3f", "name": "model-weights", "namespace": "acme", "full_name": "acme/model-weights", "description": "Centralized model weight storage with DVC integration", "visibility": "private", "default_branch": "main", "size_bytes": 10737418240, "language": null, "created_at": "2025-09-02T12:00:00Z", "updated_at": "2026-03-15T09:45:30Z", "pushed_at": "2026-03-15T09:45:30Z" } ], "pagination": { "page": 1, "per_page": 2, "total": 47, "total_pages": 24 } }

Get a repository

GET `/auth/v1/repository/{namespace}/{id}`

Retrieve details for a single repository by its ID.

Path parameters


namespace
type: string
required
The namespace (user or organization) that owns the repository.
id
type: string
required
The repository ID.

Request

curl https://outpost.run/auth/v1/acme/repositories/repo_3f8a1b2c4d5e -H "Authorization: Bearer <access_token>"

Response 200

{ "id": "repo_3f8a1b2c4d5e", "name": "inference-engine", "namespace": "acme", "full_name": "acme/inference-engine", "description": "Distributed inference engine for large language models", "visibility": "private", "default_branch": "main", "size_bytes": 524288000, "language": "Python", "content_addressed": true, "branch_protection": true, "secret_scanning": true, "collaborators": 12, "branches": 8, "tags": 23, "created_at": "2025-11-14T08:30:00Z", "updated_at": "2026-03-17T14:22:10Z", "pushed_at": "2026-03-17T14:22:10Z" }

Create a repository

POST `/auth/v1/repository/{namespace}`

Create a new repository in a namespace.

Path parameters


namespace
type: string
required
The namespace (user or organization) to create the repository in.

Body parameters


name
type: string
required
Repository name. Must be unique within the namespace. Allowed characters: alphanumeric, hyphens, underscores, and dots.
description
type: string
A short description of the repository. Maximum 512 characters.
visibility
type: string
Repository visibility. One of `public`, `private`, `internal`.
default: private
default_branch
type: string
Name of the default branch created on initialization.
default: main
auto_init
type: boolean
Initialize the repository with an empty commit on the default branch.
default: true
content_addressed
type: boolean
Enable content-addressed storage with deduplication. Default for all repositories.
default: true
gitignore_template
type: string
Name of a `.gitignore` template to include. For example, `Python`, `Go`, `Node`.

Request

curl -X POST https://outpost.run/auth/v1/acme/repositories -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{ "name": "training-pipeline", "description": "End-to-end model training pipeline with checkpointing", "visibility": "private", "default_branch": "main", "auto_init": true, "content_addressed": true, "gitignore_template": "Python" }'

Response 201

{ "id": "repo_7c2d4e6f8a1b", "name": "training-pipeline", "namespace": "acme", "full_name": "acme/training-pipeline", "description": "End-to-end model training pipeline with checkpointing", "visibility": "private", "default_branch": "main", "size_bytes": 0, "language": null, "content_addressed": true, "branch_protection": false, "secret_scanning": false, "collaborators": 1, "branches": 1, "tags": 0, "clone_url": "https://outpost.run/acme/training-pipeline.git", "ssh_url": "[email protected]:acme/training-pipeline.git", "created_at": "2026-03-18T10:15:00Z", "updated_at": "2026-03-18T10:15:00Z", "pushed_at": null }

Rename a repository

PUT `/auth/v1/repository/{namespace}/{id}/name`

Rename an existing repository.

Path parameters


namespace
type: string
required
The namespace (user or organization) that owns the repository.
id
type: string
required
The repository ID.

Body parameters


name
type: string
required
The new repository name. Must be unique within the namespace.

Request

curl -X PUT https://outpost.run/auth/v1/acme/repositories/repo_7c2d4e6f8a1b/name -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{ "name": "training-pipeline-v2" }'

Response 200

{ "id": "repo_7c2d4e6f8a1b", "name": "training-pipeline-v2", "namespace": "acme", "full_name": "acme/training-pipeline-v2", "updated_at": "2026-03-18T11:30:00Z" }
Renaming breaks existing clone URLs
After renaming, existing clone URLs will stop working. Update any CI/CD pipelines, deployment configs, or local remotes that reference the old name.

Change repository visibility

POST `/auth/v1/repository/{namespace}/{id}/visibility`

Change the visibility of a repository between public, private, and internal.

Path parameters


namespace
type: string
required
The namespace (user or organization) that owns the repository.
id
type: string
required
The repository ID.

Body parameters


visibility
type: string
required
New visibility. One of `public`, `private`, `internal`.

Request

curl -X POST https://outpost.run/auth/v1/acme/repositories/repo_3f8a1b2c4d5e/visibility -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{ "visibility": "public" }'

Response 200

{ "id": "repo_3f8a1b2c4d5e", "name": "inference-engine", "namespace": "acme", "visibility": "public", "updated_at": "2026-03-18T12:00:00Z" }

Transfer a repository

POST `/auth/v1/repository/{namespace}/{id}/transfer`

Transfer a repository to a different namespace.

Path parameters


namespace
type: string
required
The current namespace that owns the repository.
id
type: string
required
The repository ID.

Body parameters


new_namespace
type: string
required
The target namespace to transfer the repository to. You must have admin access in the target namespace.

Request

curl -X POST https://outpost.run/auth/v1/acme/repositories/repo_3f8a1b2c4d5e/transfer -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{ "new_namespace": "acme-research" }'

Response 200

{ "id": "repo_3f8a1b2c4d5e", "name": "inference-engine", "namespace": "acme-research", "full_name": "acme-research/inference-engine", "updated_at": "2026-03-18T12:30:00Z" }

Delete a repository

DELETE `/auth/v1/repository/{namespace}/{id}`

Permanently delete a repository and all its data, including branches, commits, and LFS objects.

Path parameters


namespace
type: string
required
The namespace (user or organization) that owns the repository.
id
type: string
required
The repository ID.

Request

curl -X DELETE https://outpost.run/auth/v1/acme/repositories/repo_7c2d4e6f8a1b -H "Authorization: Bearer <access_token>"

Response 204

Returns an empty response body on success.


Get directory tree

GET `/auth/v1/repository/{namespace}/{id}/tree/{path}`

Retrieve the directory listing (tree) at a given path within a repository.

Path parameters


namespace
type: string
required
The namespace (user or organization) that owns the repository.
id
type: string
required
The repository ID.
path
type: string
required
The directory path within the repository. Use an empty string or `/` for the root directory.

Query parameters


ref
type: string
The branch, tag, or commit SHA to read the tree from.
default: main

Request

curl "https://outpost.run/auth/v1/acme/repositories/repo_3f8a1b2c4d5e/tree/src?ref=main" -H "Authorization: Bearer <access_token>"

Response 200

{ "path": "src", "ref": "main", "entries": [ { "name": "main.py", "type": "file", "size_bytes": 4096, "mode": "100644" }, { "name": "models", "type": "directory", "mode": "040000" }, { "name": "utils", "type": "directory", "mode": "040000" }, { "name": "config.yaml", "type": "file", "size_bytes": 1024, "mode": "100644" } ] }

Get file contents

GET `/auth/v1/repository/{namespace}/{id}/file/{path}`

Retrieve the contents of a single file from a repository.

Path parameters


namespace
type: string
required
The namespace (user or organization) that owns the repository.
id
type: string
required
The repository ID.
path
type: string
required
The file path within the repository.

Query parameters


ref
type: string
The branch, tag, or commit SHA to read the file from.
default: main

Request

curl "https://outpost.run/auth/v1/acme/repositories/repo_3f8a1b2c4d5e/file/src/main.py?ref=main" -H "Authorization: Bearer <access_token>"

Response 200

{ "path": "src/main.py", "ref": "main", "size_bytes": 4096, "encoding": "utf-8", "content": "import torch\nfrom models import LLaMAModel\n\ndef main():\n model = LLaMAModel.from_pretrained('meta-llama/Llama-3.1-8B')\n ...\n" }
Large files
For files larger than 1 MB, the `content` field may be omitted and a `download_url` field will be provided instead. Binary files always return a `download_url`.

Get commits

GET `/auth/v1/repository/{namespace}/{id}/commits/{revision}`

Retrieve the commit history for a given branch, tag, or commit SHA.

Path parameters


namespace
type: string
required
The namespace (user or organization) that owns the repository.
id
type: string
required
The repository ID.
revision
type: string
required
The branch name, tag name, or commit SHA to list commits from.

Query parameters


page
type: integer
Page number for pagination.
default: 1
per_page
type: integer
Number of commits per page. Maximum `100`.
default: 20

Request

curl "https://outpost.run/auth/v1/acme/repositories/repo_3f8a1b2c4d5e/commits/main?per_page=3" -H "Authorization: Bearer <access_token>"

Response 200

{ "data": [ { "sha": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2", "message": "feat: add batched inference support", "author": { "name": "Jane Doe", "email": "[email protected]", "date": "2026-03-17T14:22:10Z" }, "committer": { "name": "Jane Doe", "email": "[email protected]", "date": "2026-03-17T14:22:10Z" } }, { "sha": "b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3", "message": "fix: memory leak in token decoder", "author": { "name": "John Smith", "email": "[email protected]", "date": "2026-03-16T09:15:00Z" }, "committer": { "name": "John Smith", "email": "[email protected]", "date": "2026-03-16T09:15:00Z" } }, { "sha": "c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", "message": "refactor: split model loading into separate module", "author": { "name": "Jane Doe", "email": "[email protected]", "date": "2026-03-15T16:45:00Z" }, "committer": { "name": "Jane Doe", "email": "[email protected]", "date": "2026-03-15T16:45:00Z" } } ], "pagination": { "page": 1, "per_page": 3, "total": 156, "total_pages": 52 } }

Error responses

All repository endpoints may return the following errors:

Status Description
400 Bad request -- invalid parameters or body
401 Unauthorized -- missing or invalid credentials
403 Forbidden -- insufficient permissions for this namespace
404 Not found -- repository or namespace does not exist
409 Conflict -- a repository with the same name already exists
422 Unprocessable entity -- validation error
{ "error": { "code": "not_found", "message": "Repository 'repo_nonexistent' not found in namespace 'acme'.", "request_id": "req_8f3a2b1c4d5e" } }

Previous Overview

Next Machines