Give your pipeline a deploy token and it can publish a built folder to arcdoq with no browser and nobody signed in. Point Claude at this page and it will write the workflow for you. The one step that stays yours is pasting the token into your repository secrets.
In the app, open Tokens and choose New token. Name it after the thing that will use it, so a list of them stays readable later. You need to be an admin or owner of the workspace.
On GitHub: Settings, Secrets and variables, Actions, New repository secret. Name it ARCDOQ_DEPLOY_TOKEN. Any CI with a secret store works the same way.
ARCDOQ_DEPLOY_TOKEN=arcdoq_deploy_<id>_<secret>
Tokens start with arcdoq_deploy_ on purpose: the prefix is distinctive enough for a secret scanner to catch if one ever lands in a commit. If that happens, revoke it in the app. Rotating is cheap; a live credential in git history is not.
A deploy is one request: your built folder as a list of files. Rather than copying a script you have to understand, give Claude this page and the two facts it cannot guess, your slug and your build directory. It writes the workflow, and stops at the secret, which is yours to paste.
Read https://arcdoq.com/docs/deploy and set up arcdoq deploys for this repo.
The site slug is "docs", my built output is in ./dist, and the site should be
private.
Do not put the token in any file. Tell me to add ARCDOQ_DEPLOY_TOKEN to the
repository secrets myself.
Writing it by hand instead? Everything the workflow needs is below. Build, walk the output directory, and send one request.
Text files go as utf8. Anything binary, an image or a font, goes as base64 with encoding set. Paths are relative to your build directory, and a root index.html is required.
The first deploy to a new slug must say visibility, and arcdoq will not guess. A site published from CI has nobody watching it, and the two wrong guesses are not equally bad: wrongly private is noticed in seconds, wrongly public may never be. Later deploys leave it out and inherit whatever the site already is.
Authorization: Bearer $ARCDOQ_DEPLOY_TOKEN
Content-Type: application/json
{
"site": "docs",
"visibility": "private", // required on the FIRST deploy only
"files": [
{ "path": "index.html", "content": "<!doctype html>..." },
{ "path": "assets/app.css", "content": "body{...}" },
{ "path": "assets/logo.png", "content": "iVBORw0KGgo...", "encoding": "base64" }
]
}
{
"success": true,
"created": false,
"slug": "docs",
"visibility": "private",
"url": "https://orbitalx.sites.arcdoq.com/docs",
"serving": "live",
"message": "Published 43 files to docs."
}
POST https://mcp.arcdoq.com/deploy with a bearer token. The site is keyed by slug, not by an id, so the same three lines of config resolve to the same site forever and your pipeline keeps no state. If the slug does not exist yet, the deploy creates it.
Still stuck? Email support@arcdoq.com.