Mintlify-Like Docs Publishing with Codex
Use this guide to generate docs locally with Codex and publish them to your handle site on 10x.in using a JWT token.
When to use
- You want Mintlify-style structure (
docs.jsonnavigation) but host docs on your own 10x handle site. - You want a local generation flow plus API publish to
https://{handle}.{PUBLIC_DOMAIN}/docs. - You want repeatable deploy commands that Codex can run for you.
Prerequisites
- Your handle already exists (example:
links). - You have a valid creator
JWTtoken. - Docs source files are in
docs/external. - Every page you want published is listed in
docs/external/docs.json.
Codex workflow (recommended)
- Ask Codex to create or update markdown pages in
docs/external/.... - Ask Codex to add page keys to
docs/external/docs.jsonnavigation. - Ask Codex to run a dry run publish.
- Review the summary output (file count, bytes, missing pages).
- Ask Codex to run live publish and activation.
- Verify live URLs.
Command: dry run
JWT_TOKEN="YOUR_JWT_TOKEN" \
HANDLE="links" \
DRY_RUN=1 \
npm run site:publish:external-docs
Command: live publish
JWT_TOKEN="YOUR_JWT_TOKEN" \
HANDLE="links" \
API_BASE_URL="https://api.10x.in" \
ACTIVATE=1 \
VERIFY=1 \
DRY_RUN=0 \
npm run site:publish:external-docs
Output URL pattern
- Docs root:
https://{handle}.{PUBLIC_DOMAIN}/docs - Page route:
https://{handle}.{PUBLIC_DOMAIN}/docs/<page-route> - SEO artifacts:
https://{handle}.{PUBLIC_DOMAIN}/docs/sitemap.xmlhttps://{handle}.{PUBLIC_DOMAIN}/docs/llms.txthttps://{handle}.{PUBLIC_DOMAIN}/robots.txt
Required auth
- Creator-level bearer
JWTinJWT_TOKEN. - Do not commit tokens to git, docs, or scripts.
- Rotate token if exposed.
API fallback
If you need to implement outside the script:
POST /v2/handles/{handle}/site-deployments(create draft with manifest)- Upload each file to returned pre-signed
putUrl POST /v2/handles/{handle}/site-deploymentswith:
{
"activate": true,
"deploymentId": "dep_xxx"
}
Common errors
| Status | Error | Fix |
|---|---|---|
| 401 | Unauthorized | Use a fresh creator token and correct handle ownership. |
| 400 | missing_entrypoint | Ensure index.html is in deployment manifest (script handles this). |
| Script failure | Missing markdown source | Add missing page file or remove page from docs.json. |
| Verify failure | Route returns 404 | Confirm page key exists in docs.json and was included in upload. |
Related: