Regular Digital File
The file is scanned; GitHub is not required.
A practical guide to repository control, build provenance, and Billixi file scanning.
License guide
A key-only license needs no file or GitHub connection. If you also deliver an executable, complete the same executable preflight.
The product does not enter the review queue until its required checks are complete, so an unfinished setup is not returned to you.
The file is scanned; GitHub is not required.
File Safety and Verified Build are both required before review.
There is no delivered file; GitHub and file scanning are not required.
File Safety and Verified Build are both required before review.
Billixi immediately checks its extension and type and warns when it may be executable.
The file enters quarantine and is not available to buyers or the store.
File Safety scans these exact bytes. Verified Build links them to a specific repository, commit, and GitHub Actions run.
After both checks turn green, Submit is enabled and Ops performs the final review.
This exact uploaded file passed Billixi’s current scan. It is not an absolute guarantee or proof of ownership.
This exact file hash is linked to a repository, commit, and authenticated GitHub Actions run. It is not proof of legal ownership.
Open this simple four-step guide if you need help.

Install the read-only GitHub App only for the repository you select.

Commit the one-time product claim and verify its exact branch, tag, or commit.

Send the GitHub Actions OIDC build proof, then wait for Billixi security review.

Return to Trust & Verification and check each applicable badge against the exact commit and release.
Import a new GitHub release, wait for approval, then publish it once. Eligible buyers get the latest download and one email.
After pushing, manually run the repository release workflow with a new SemVer tag. A push alone never publishes.
Accept ownership, import the immutable asset, and wait for Billixi approval on this page.
Add clear buyer notes and publish once. Billixi sends one email to each eligible buyer.
Billixi asks for read-only Metadata and Contents access, scoped to repositories you select. Attestations access is optional and used only for GitHub-native provenance. Billixi never commits, opens a PR, clones the repository, or stores an installation token.
Open products and install the GitHub AppCopy the path and the product-specific JSON shown in Trust & Verification. Commit it to the selected repository. Billixi resolves one commit first and reads the file only from that exact commit. The displayed challenge normally expires after 24 hours.
.billixi/product-claim.json{
"schema": "billixi-product-claim/v1",
"product_id": "<your-product-id>",
"challenge": "<one-time-value>",
"expires_at": "<shown-expiry>"
}GitHub web: Add file → Create new file → enter the exact path → paste JSON → commit. Git local: create the directories and file, commit, push, then enter that branch or commit in Billixi and choose Check again.
Common fixes: exact path and case, correct branch, unexpired challenge, unchanged JSON, and restored app permission.
Open the selected repository, choose Add file → Create new file, enter the exact path, paste the generated JSON unchanged, and commit to the branch you will verify.
Create the file locally, paste the generated JSON unchanged, commit, push, then enter that branch or exact commit in Billixi and choose Check again.
mkdir -p .billixi
# Save the exact JSON generated in Billixi as:
# .billixi/product-claim.json
git add .billixi/product-claim.json
git commit -m "chore: add Billixi product claim"
git pushGitHub Actions signs a short-lived OIDC proof that binds the private repository, workflow, commit, GitHub-hosted runner, Billixi product, and final file SHA-256. Billixi stores only immutable claims and token digests—not the token or source. No Enterprise plan, public repository, secret, or personal token is required.
name: Private release provenance
on:
push:
tags: ['v*']
permissions:
contents: read
id-token: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Build artifact
run: ./scripts/build-release.sh
- name: Prove the exact private build to Billixi
shell: bash
env:
BILLIXI_PRODUCT_ID: '<your-product-id>'
BILLIXI_ARTIFACT_PATH: dist/my-product.zip
BILLIXI_PROOF_ENDPOINT: https://api.billixi.com/api/v1/payment/source-providers/github/actions/build-proofs
run: |
set -euo pipefail
sha256="$(sha256sum "$BILLIXI_ARTIFACT_PATH" | cut -d ' ' -f1)"
compact_product_id="$(tr -d '-' <<<"$BILLIXI_PRODUCT_ID")"
audience="billixi-source-trust:${compact_product_id}:${sha256}"
encoded="$(jq -rn --arg value "$audience" '$value | @uri')"
response="$(curl --silent --show-error --fail-with-body \
-H "Authorization: Bearer ${ACTIONS_ID_TOKEN_REQUEST_TOKEN}" \
"${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=${encoded}")"
token="$(jq -er '.value' <<<"$response")"
echo "::add-mask::$token"
body="$(jq -cn --arg productId "$BILLIXI_PRODUCT_ID" --arg artifactSha256 "$sha256" \
--arg artifactName "$(basename "$BILLIXI_ARTIFACT_PATH")" \
'{productId:$productId,artifactSha256:$artifactSha256,artifactName:$artifactName}')"
curl --silent --show-error --fail-with-body \
-H "Authorization: Bearer ${token}" -H 'Content-Type: application/json' \
--data "$body" "$BILLIXI_PROOF_ENDPOINT" >/dev/null
unset token responsesha256sum dist/my-product.zip
# macOS
shasum -a 256 dist/my-product.zipGet-FileHash .\dist\my-product.zip -Algorithm SHA256