リファレンスHTTP APIAgents

Add the entries of a settings document the installation lacks

POST
/v1/installation/settings/import

The operator (installation.settings.manage, the workspace owner), signed in; an API key is 403 whatever its scopes. Adds each entry whose id no row holds, in one transaction, and writes an import_connection, import_repository or import_mcp_server receipt for each. An id held with the same content is unchanged (inactive when that row is disabled or removed: it stays so), and nothing is overwritten: an id held with other content, a GitHub App repository another id already holds, or a new stored entry whose id already has a value is 409 REVISION_CONFLICT (details.reason_code: settings_conflict, details.entries) and nothing changes. An entry bringing an env or Secrets Manager reference the installation does not hold yet is 400 external_reference (details.entries), nothing changed: only the operator's settings import CLI brings those in. A stored: true entry always means its own row's value and runs once the value is set (needs_value). A wrong outline (version, the top-level keys) is 400 with details.issues; an entry the settings rules refuse is 400 invalid_document. dry_run=true answers the same without writing.

Auth: cookie session only; no scope. Idempotency-Key: ignored.

Authorization

cookieSession
cookie__Host-werft_session<token>

For the web console: the browser session cookie set by POST /v1/auth/login. It holds the scopes of the user's workspace role (owner: all; admin and member: all but sessions:recover). Requests other than GET must also send X-Requested-With: werft-web.

Query Parameters

dry_run?string

true checks the document and answers as an import would, writing nothing.

Value in"true""false"

Header Parameters

X-Requested-With?"werft-web"

Required with a cookie session: the literal werft-web.

Value in"werft-web"

Request Body

application/json
  1. body
version*number
connections*
repositories*
mcp_servers*

Response Body

What was added, and what was there already.

application/json
  1. response
outcome*string
Value in"applied""dry_run"
added*array<>
unchanged*array<>
inactive*array<>
needs_value*array<>
receipt_ids*array<>
Example Request
curl -X POST 'https://example.com/v1/installation/settings/import' \  -H 'Content-Type: application/json' \  -d '{  "version": 1,  "connections": {    "anthropic-main": {      "kind": "anthropic",      "endpoint": "https://api.anthropic.com",      "auth": {        "kind": "api_key",        "value_env": "ANTHROPIC_API_KEY"      }    },    "anthropic-console": {      "kind": "anthropic",      "endpoint": "https://api.anthropic.com",      "auth": {        "kind": "api_key",        "stored": true,        "last4": "x9Qa"      }    }  },  "repositories": {    "docs-site": {      "url": "https://github.com/acme/docs-site.git",      "branch": "main",      "auth": {        "kind": "github_app"      }    }  },  "mcp_servers": {}}'
Example Response
{  "outcome": "applied",  "added": [    "connection:anthropic-console",    "repository:docs-site"  ],  "unchanged": [    "connection:anthropic-main"  ],  "inactive": [],  "needs_value": [    "connection:anthropic-console"  ],  "receipt_ids": [    "019a0000-0000-7000-8000-0000000000f1",    "019a0000-0000-7000-8000-0000000000f2"  ]}