Author/edit bot code from a natural-language instruction via the code agent
Runs Paige’s code agent (its system prompt, scaffold + connector awareness, and guardrails) in a bounded headless loop to write/edit the bot’s code — the higher-quality counterpart to PUT /v1/files/{path}. Flow JSON is rejected (use the flow endpoints). Frozen/injected/auto-generated files (e.g. services/messages.js, config/mediaAssets.js, package.json, .paige/**) are refused, while the agent still authors the bot wiring it owns (routes/*, app.js, config/db.js). Consumes credits; rejected with 402 insufficient_credits when out of balance. A truncated or failed agent run returns 502 build_failed.
Required scope: code:write
Authorizations
Project API key issued in Settings → API keys. Send it as Authorization: Bearer pk_live_….
Headers
Target project id, for an MCP OAuth bearer (mcp_at_…) attached to more than one project — get ids from GET /v1/projects. Matched case-insensitively.
Omit it and a READ falls back to the connection's default project; a mutation (any non-GET) on a connection with 2+ projects is rejected with 400 project_required — a write is never defaulted to a guessed project. A connection with exactly one project never needs the header.
Scopes are checked against the SELECTED project only, never a union across the connection.
For a pk_ API key the header selects nothing — one key is one project's context — but it IS validated: omit it and the key's own project is used, send it and it must name that project, otherwise the call is rejected with 403 project_not_attached (a blank value is 400 invalid_project_header, as above).
Body
Natural-language description of the code to write or change. Paige's code agent authors/edits the bot files using its own system prompt, scaffold + connector awareness, and guardrails.
1 - 10000