๐Ÿ“– Setup Guide

Get started with DocsCI

Prevent broken examples and API/SDK drift from reaching production. Set up in under 5 minutes with the GitHub Actions template.

๐Ÿš€ Quick setup

1

Sign up & create your org

Create a free account at snippetci.com/signup. Create an org matching your GitHub organization name.

2

Import your GitHub repo

Import any public GitHub repo by URL. DocsCI auto-detects your docs folder structure.

POST https://snippetci.com/api/repos
{
  "repo_url": "https://github.com/your-org/your-repo",
  "org_id": "<your-org-id>",
  "docs_path": "docs/",
  "sdk_languages": ["python", "typescript"]
}
3

Add the GitHub Actions workflow

Copy the template to .github/workflows/docsci.yml and add DOCSCI_API_KEY as a repository secret.

โ†“ Download docsci.yml
4

Import your OpenAPI spec (optional)

Point DocsCI at your staging API spec. It checks all docs examples against the live schema on every run.

POST https://snippetci.com/api/openapi-import
{
  "source_url": "https://api.your-company.com/openapi.json",
  "org_id": "<your-org-id>"
}
5

Trigger your first run

DocsCI fetches your docs, extracts code snippets, executes them in hermetic sandboxes, and generates AI fix suggestions for failures.

POST https://snippetci.com/api/runs
{
  "repo_id": "<your-repo-id>",
  "branch": "main"
}

๐Ÿ”’ Hermetic Sandbox Specifications

Every snippet runs in an ephemeral, isolated environment. No shared state between runs โ€” eliminates flakiness caused by external dependencies.

FeatureBehavior
JS/TS executionNode.js subprocess โ€” no network, no fs writes
Python executionIsolated Python subprocess โ€” no network access
Timeout10s default, configurable up to 60s
Memory limit256MB per snippet
Network accessBlocked (allowlist via customer-hosted runner)
Filesystem writesBlocked โ€” tmpdir only, auto-cleaned
CredentialsEphemeral โ€” never shared between runs
Customer-hosted runnersBring your own infra with your real API credentials

๐Ÿ“ก API Reference

All endpoints require Authorization: Bearer <supabase-jwt> except healthcheck.

MethodEndpointAuthDescription
GET/api/healthcheckNoneSupabase connectivity & RLS status
GET/api/reposBearerList repos for current user's orgs
POST/api/reposBearerImport a public GitHub repo by URL
GET/api/runsBearerList recent CI runs (filter by repo_id)
POST/api/runsBearerTrigger a new CI run for a repo
GET/api/runs/[id]BearerGet run details + all snippet results
POST/api/snippetsBearerExecute a code snippet in sandbox (JS/TS/Python)
POST/api/openapi-importBearerImport an OpenAPI spec from a URL
POST/api/ai-fixBearerGenerate AI fix suggestion + patch diff
GET/api/audit-logBearerPaginated audit log for current org

โœ… Whole-product checklist

โœ…Self-serve auth: email/password + Google OAuth
โœ…GitHub repo import by URL (public repos)
โœ…Sample repo one-click run
โœ…JS/TS snippet execution in isolated Node sandbox
โœ…Python snippet execution in isolated subprocess
โœ…OpenAPI URL import with HTTPS + allowlist enforcement
โœ…HTTP allowlist for smoke tests (blocks private IPs)
โœ…AI-generated fix PR comments (Claude via Vercel AI Gateway)
โœ…Downloadable patch diffs (unified diff format)
โœ…Clear run reports with per-snippet pass/fail status
โœ…Audit log for all org actions
โœ…GitHub Actions template (docsci.yml)
โœ…RLS policies on all 5 DB tables
โœ…Supabase auth trigger (auto-creates profile on signup)
๐ŸšงAccessibility checks (WCAG โ€” roadmap Q3)
๐ŸšงCopy tone/clarity checks (AI โ€” roadmap Q3)
๐ŸšงCustomer-hosted runner (self-host โ€” roadmap Q4)

Ready to ship docs that work?

10 design partner slots open. We'll set up your first pipeline together in a 30-minute call.