Integration Files API
Upload, download, push, and deploy integration files
Integration Files API
Endpoints
GET /api/integrations/:name/files
List integration files.
Auth: API Key | Min Role: VIEWER | MCP: integrations:read
Query parameters:
| Parameter | Description |
|---|---|
mode | read (default) — returns filename, size, and content snippet (~200 chars). download — returns full file content map. |
folderPath | (download mode only) Absolute local folder path where files will be written by the local proxy. |
Read mode response:
{ "files": [{ "filename": "integration.yaml", "sizeBytes": 512, "snippet": "name: my-automation..." }], "totalFiles": 2, "totalSizeBytes": 1024 }GET /api/integrations/:name/files/:filename
Get the full content of a specific integration file.
Auth: API Key | Min Role: VIEWER
PUT /api/integrations/:name/files/:filename
Create or update a single integration file (upsert).
Auth: API Key | Min Role: DEVELOPER
Body: { "content": "file content here" }
DELETE /api/integrations/:name/files/:filename
Delete an integration file. integration.yaml cannot be deleted.
Auth: API Key | Min Role: DEVELOPER
Response: { "ok": true }
POST /api/integrations/:name/deploy
Snapshot the current files as a versioned deployment.
Auth: API Key | Min Role: DEVELOPER | MCP: integrations:write
Body: { "name": "v1.2", "description": "Optional version label" }
Response: { "ok": true, "lastDeployedAt": "2026-01-15T10:00:00Z" }
POST /api/integrations/:name/push
Upsert files and snapshot a deployment without triggering a run.
Auth: API Key | Min Role: DEVELOPER | MCP: integrations:write
Body:
{
"files": { "integration.yaml": "...", "step.ts": "..." },
"description": "Optional version label"
}Or use folderPath to load all supported files from a server-side directory:
{ "folderPath": "/absolute/path/to/integration/folder" }Response: 201 { "ok": true, "version": 3, "fileCount": 2, "lastDeployedAt": "..." }
POST /api/integrations/:name/push-run
Atomic push-and-run: upsert files, snapshot a deployment, trigger a run, and return the runId. The integration is created automatically if it does not exist.
Auth: API Key | Min Role: DEVELOPER | MCP: integrations:write
Body:
{
"files": {
"integration.yaml": "name: my-automation\ntrigger:\n type: manual\nsteps:\n - id: greet\n name: Greet\n description: Returns hello\n file: greet.ts",
"greet.ts": "export async function run(input: Record<string, any>, ctx: StepContext) {\n return { message: \"hello\" };\n}"
},
"payload": { "key": "value" }
}Or with folderPath:
{ "folderPath": "/absolute/path/to/folder", "payload": {} }Response: 201 { "runId": "run_abc123", "status": "RUNNING" }
Supported file extensions: .yaml, .yml, .ts, .json, .md, .txt