PermuteDocs
Go to Permute

Actions · actionDefinitionSave

Save an action draft

Requires action and selected-source admin permission. Source schema revisions are dependency revisions. History, restore, and publish use the shared resource versioning endpoints.

PUT/v1/actions/{actionId}/definition
betaapiKeyworkspace

When to use

Save action code, contracts, permissions, and source bindings together.

For agents

Requires admin access to the action and selected databases and connectors. Database bindings pin published schema revisions. Optional connectors maps names to connector IDs; handlers use connectors.<name>.request, query, or putObject according to the provider. Each external call needs a stable stepId. Publish through client.revisions.

Example

typescript
import { PermuteClient } from '@permute/sdk';

const orgClient = new PermuteClient({
  apiKey: process.env.PERMUTE_API_KEY!,
});

const client = orgClient.withWorkspace(process.env.PERMUTE_WORKSPACE_ID!);

const result = await client.actions.saveDefinition('actn_abcdefghijklmnopqrstuvwx', {
  "expectedDraft": null,
  "definition": {
    "source": "exports.handler = ({ input, db }) => { db.insert('contacts', input); return input; };",
    "inputSchema": {
      "type": "object"
    },
    "outputSchema": {
      "type": "object"
    },
    "invokePermission": "write",
    "sources": [
      {
        "sourceId": "dbas_crm123",
        "revisionId": "rvsn_schema123",
        "readTables": [],
        "writeTables": [
          "contacts"
        ]
      }
    ]
  }
});

Request body

json
{
  "expectedDraft": null,
  "definition": {
    "source": "exports.handler = ({ input, db }) => { db.insert('contacts', input); return input; };",
    "inputSchema": {
      "type": "object"
    },
    "outputSchema": {
      "type": "object"
    },
    "invokePermission": "write",
    "sources": [
      {
        "sourceId": "dbas_crm123",
        "revisionId": "rvsn_schema123",
        "readTables": [],
        "writeTables": [
          "contacts"
        ]
      }
    ]
  }
}

Response

json
{
  "data": {
    "revisionId": "rvsn_action123"
  }
}