Skip to main content

Overview

Projects represent documentation sites generated from GitHub repositories. Each project has a unique slug for accessing the documentation.

Create Project

Queue a new documentation generation job for a GitHub repository.
curl -X POST https://api.whatdoc.xyz/projects \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "repoName": "facebook/react",
    "slug": "react-docs",
    "techstack": "Other",
    "llmProvider": "gemini",
    "template": "modern"
  }'
Authentication: Required
Rate Limit: 30 requests per minute
repoName
string
required
GitHub repository in format owner/repo (e.g., facebook/react)
slug
string
required
Unique URL slug for the documentation site. Must be unique across all projects.
techstack
string
default:"Other"
Project tech stack: MERN, Next.js, or Other
llmProvider
string
default:"gemini"
LLM provider for generation: gemini or openai
template
string
default:"modern"
Documentation template. Available templates:
  • modern (Free)
  • minimal (Free)
  • twilio (Premium)
  • django (Premium)
  • mdn (Premium)
  • aerolatex (Premium)
  • fintech (Premium)
  • devtools (Premium)
  • minimalist (Premium)
  • opensource (Premium)
  • wiki (Premium)
  • componentlib (Premium)
  • consumertech (Premium)
  • deepspace (Premium)
  • web3 (Premium)
  • enterprise (Premium)
Optional Headers:
X-Custom-Api-Key
string
Your own LLM API key (BYOK - Bring Your Own Key)
X-Target-Model
string
default:"gemini-2.5-flash-lite"
Target LLM model when using custom API key
message
string
Success message
project
object
Created project object
jobId
string
BullMQ job ID for tracking generation progress
status
string
Initial status: queued
Plan Limits:
  • Free: 2 generations (or 5 with FREE5DOCS code)
  • Pro $4.99: Up to 10 repositories
  • Pro $9.99: Up to 25 repositories
  • Pro Unlimited: No limits

List My Projects

Get all projects owned by the authenticated user.
curl -X GET https://api.whatdoc.xyz/projects/mine \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"
Authentication: Required
projects
array
Array of project objects sorted by updatedAt (most recent first)

Get Project by ID

Retrieve a specific project by its ID.
curl -X GET https://api.whatdoc.xyz/projects/PROJECT_ID \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"
Authentication: Required
projectId
string
required
Project unique identifier
project
object
Complete project object with all fields
Users can only access their own projects. Attempting to access another user’s project returns 403 Forbidden.

Get Project by Slug

Publicly retrieve project information using its slug.
curl -X GET https://api.whatdoc.xyz/projects/slug/react-docs
Authentication: Not required (public endpoint)
slug
string
required
Project URL slug
project
object
Project object

Get Project by Subdomain

Publicly retrieve project using subdomain.
curl -X GET https://api.whatdoc.xyz/projects/subdomain/acme
Authentication: Not required (public endpoint)
subdomain
string
required
Subdomain (e.g., acme for acme.whatdoc.xyz)

Get Project by Custom Domain

Publicly retrieve project using custom domain.
curl -X GET https://api.whatdoc.xyz/projects/custom-domain/docs.example.com
Authentication: Not required (public endpoint)
domain
string
required
Custom domain configured for the project
repoName
string
Repository name
techstack
string
Project tech stack
generatedDocs
string
Generated documentation content
updatedAt
string
Last update timestamp
creatorName
string
Project owner’s name
template
string
Template name
subdomain
string
Subdomain if configured
customization
object
Customization settings

Update Project

Update project settings, template, or customization.
curl -X PUT https://api.whatdoc.xyz/projects/PROJECT_ID \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "template": "twilio",
    "slug": "new-slug",
    "subdomain": "myapp",
    "customDomain": "docs.myapp.com",
    "customization": {
      "logoUrl": "https://example.com/logo.png",
      "ownerName": "Acme Corp",
      "currentVersion": "2.0.0"
    }
  }'
Authentication: Required
projectId
string
required
Project unique identifier
template
string
Change documentation template
slug
string
Update URL slug (lowercase, alphanumeric and hyphens only)
subdomain
string
Set subdomain (e.g., myappmyapp.whatdoc.xyz)
customDomain
string
Set custom domain. This will automatically configure Cloudflare SSL and add domain to Vercel.
generatedDocs
string
Update documentation content
customization
object
Customization settings object
message
string
Success message
project
object
Updated project object
Custom domain setup requires valid DNS configuration. The domain must not be already mapped to another project.

Delete Project

Permanently delete a project.
curl -X DELETE https://api.whatdoc.xyz/projects/PROJECT_ID \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"
Authentication: Required
projectId
string
required
Project unique identifier
message
string
Success message: “Project deleted.”

List Available Providers

Get list of available LLM providers.
curl -X GET https://api.whatdoc.xyz/projects/providers
Authentication: Not required (public endpoint)
providers
array
Array of available LLM provider names

Project Status Values

Projects progress through these status values during generation:
StatusDescription
idleInitial state (unused in queue system)
queuedWaiting in generation queue
scanningScanning repository files
analyzingAnalyzing code structure
generatingGenerating documentation
readyDocumentation complete
failedGeneration failed

Build docs developers (and LLMs) love