Files
git-mpm/skills/gitea/references/content.md
T

4.1 KiB

File Contents API reference

Base: https://git.mpm.to/api/v1

All file content responses encode the file body as base64 in the content field. Decode with:

echo "BASE64STRING" | base64 -d

Get a file or directory listing

curl -s -H "Authorization: token e82a7235b948fbbeea60329422fcac89fa5a5ce8" \
  "https://git.mpm.to/api/v1/repos/{owner}/{repo}/contents/{filepath}?ref=main"

ref can be a branch name, tag, or commit SHA (defaults to the default branch if omitted). filepath is the path within the repo, e.g. src/main.go or docs/.

If filepath is a directory, the response is an array of file entries with name, path, type (file | dir | symlink), size, and sha.

If filepath is a file, the response includes content (base64-encoded), encoding, sha, size, name, path, html_url.

Read a file and decode it

SHA=$(curl -s -H "Authorization: token e82a7235b948fbbeea60329422fcac89fa5a5ce8" \
  "https://git.mpm.to/api/v1/repos/{owner}/{repo}/contents/{filepath}" \
  | python3 -c "import sys,json; r=json.load(sys.stdin); print(r['sha'])")

curl -s -H "Authorization: token e82a7235b948fbbeea60329422fcac89fa5a5ce8" \
  "https://git.mpm.to/api/v1/repos/{owner}/{repo}/contents/{filepath}" \
  | python3 -c "import sys,json,base64; r=json.load(sys.stdin); print(base64.b64decode(r['content']).decode())"

Create a new file

CONTENT_B64=$(echo -n "file content here" | base64)

curl -s -X POST \
  -H "Authorization: token e82a7235b948fbbeea60329422fcac89fa5a5ce8" \
  -H "Content-Type: application/json" \
  -d "{
    \"message\": \"Add new file\",
    \"content\": \"${CONTENT_B64}\",
    \"branch\": \"main\"
  }" \
  "https://git.mpm.to/api/v1/repos/{owner}/{repo}/contents/{filepath}"

Update an existing file

Updating requires the current file's sha. Fetch it first, then:

# Step 1: get the sha
SHA=$(curl -s -H "Authorization: token e82a7235b948fbbeea60329422fcac89fa5a5ce8" \
  "https://git.mpm.to/api/v1/repos/{owner}/{repo}/contents/{filepath}" \
  | python3 -c "import sys,json; r=json.load(sys.stdin); print(r['sha'])")

# Step 2: base64-encode the new content
NEW_CONTENT=$(echo -n "new file content" | base64)

# Step 3: update
curl -s -X PUT \
  -H "Authorization: token e82a7235b948fbbeea60329422fcac89fa5a5ce8" \
  -H "Content-Type: application/json" \
  -d "{
    \"message\": \"Update file\",
    \"content\": \"${NEW_CONTENT}\",
    \"sha\": \"${SHA}\",
    \"branch\": \"main\"
  }" \
  "https://git.mpm.to/api/v1/repos/{owner}/{repo}/contents/{filepath}"

Delete a file

SHA=$(curl -s -H "Authorization: token e82a7235b948fbbeea60329422fcac89fa5a5ce8" \
  "https://git.mpm.to/api/v1/repos/{owner}/{repo}/contents/{filepath}" \
  | python3 -c "import sys,json; r=json.load(sys.stdin); print(r['sha'])")

curl -s -X DELETE \
  -H "Authorization: token e82a7235b948fbbeea60329422fcac89fa5a5ce8" \
  -H "Content-Type: application/json" \
  -d "{
    \"message\": \"Delete file\",
    \"sha\": \"${SHA}\",
    \"branch\": \"main\"
  }" \
  "https://git.mpm.to/api/v1/repos/{owner}/{repo}/contents/{filepath}"

Always confirm with the user before deleting a file.

Get raw file content (no base64)

curl -s -H "Authorization: token e82a7235b948fbbeea60329422fcac89fa5a5ce8" \
  "https://git.mpm.to/api/v1/repos/{owner}/{repo}/raw/{filepath}?ref=main"

This returns the raw file bytes directly — useful for binary files or when you just want the content without decoding.

Get a file at a specific commit/tag

Use ?ref=COMMIT_SHA or ?ref=v1.2.0 as the query parameter.

List commits for a file

curl -s -H "Authorization: token e82a7235b948fbbeea60329422fcac89fa5a5ce8" \
  "https://git.mpm.to/api/v1/repos/{owner}/{repo}/commits?path={filepath}&limit=20"

Git trees (recursive directory listing)

curl -s -H "Authorization: token e82a7235b948fbbeea60329422fcac89fa5a5ce8" \
  "https://git.mpm.to/api/v1/repos/{owner}/{repo}/git/trees/{sha}?recursive=true"

Get sha from the branch info: GET /repos/{owner}/{repo}/branches/{branch}commit.commit.tree.sha.