curl --request POST \
--url https://api.getmembrane.com/actions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"type": "<string>",
"config": {},
"key": "<string>",
"description": "<string>",
"inputSchema": {},
"connectionId": "<string>"
}
'import requests
url = "https://api.getmembrane.com/actions"
payload = {
"name": "<string>",
"type": "<string>",
"config": {},
"key": "<string>",
"description": "<string>",
"inputSchema": {},
"connectionId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
type: '<string>',
config: {},
key: '<string>',
description: '<string>',
inputSchema: {},
connectionId: '<string>'
})
};
fetch('https://api.getmembrane.com/actions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.getmembrane.com/actions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'type' => '<string>',
'config' => [
],
'key' => '<string>',
'description' => '<string>',
'inputSchema' => [
],
'connectionId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.getmembrane.com/actions"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"config\": {},\n \"key\": \"<string>\",\n \"description\": \"<string>\",\n \"inputSchema\": {},\n \"connectionId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.getmembrane.com/actions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"config\": {},\n \"key\": \"<string>\",\n \"description\": \"<string>\",\n \"inputSchema\": {},\n \"connectionId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getmembrane.com/actions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"config\": {},\n \"key\": \"<string>\",\n \"description\": \"<string>\",\n \"inputSchema\": {},\n \"connectionId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"uuid": "<string>",
"key": "<string>",
"description": "<string>",
"meta": {},
"state": "BUILDING",
"errors": [
{}
],
"revision": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"archivedAt": "<string>",
"isDeactivated": true,
"isReadOnly": true,
"parentId": "<string>",
"parentUuid": "<string>",
"parentKey": "<string>",
"connectionId": "<string>",
"instanceKey": "<string>",
"isUniversal": true,
"externalAppId": "<string>",
"externalAppUuid": "<string>",
"externalAppKey": "<string>",
"inputSchema": {},
"type": "api-request-to-external-app",
"config": {},
"outputMapping": "<unknown>",
"customOutputSchema": {},
"isCustomized": true,
"tenantId": "<string>",
"ownerName": "<string>",
"agentSessionId": "<string>",
"universalParentId": "<string>",
"outputSchema": {},
"isPublic": true,
"logoUri": "<string>",
"defaultOutputSchema": {},
"transformedOutputSchema": {},
"dependencies": [
"<unknown>"
]
}create-action
Create a new action for a connection. Returns the created action object including its ID.
curl --request POST \
--url https://api.getmembrane.com/actions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"type": "<string>",
"config": {},
"key": "<string>",
"description": "<string>",
"inputSchema": {},
"connectionId": "<string>"
}
'import requests
url = "https://api.getmembrane.com/actions"
payload = {
"name": "<string>",
"type": "<string>",
"config": {},
"key": "<string>",
"description": "<string>",
"inputSchema": {},
"connectionId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
type: '<string>',
config: {},
key: '<string>',
description: '<string>',
inputSchema: {},
connectionId: '<string>'
})
};
fetch('https://api.getmembrane.com/actions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.getmembrane.com/actions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'type' => '<string>',
'config' => [
],
'key' => '<string>',
'description' => '<string>',
'inputSchema' => [
],
'connectionId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.getmembrane.com/actions"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"config\": {},\n \"key\": \"<string>\",\n \"description\": \"<string>\",\n \"inputSchema\": {},\n \"connectionId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.getmembrane.com/actions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"config\": {},\n \"key\": \"<string>\",\n \"description\": \"<string>\",\n \"inputSchema\": {},\n \"connectionId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getmembrane.com/actions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"type\": \"<string>\",\n \"config\": {},\n \"key\": \"<string>\",\n \"description\": \"<string>\",\n \"inputSchema\": {},\n \"connectionId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"uuid": "<string>",
"key": "<string>",
"description": "<string>",
"meta": {},
"state": "BUILDING",
"errors": [
{}
],
"revision": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"archivedAt": "<string>",
"isDeactivated": true,
"isReadOnly": true,
"parentId": "<string>",
"parentUuid": "<string>",
"parentKey": "<string>",
"connectionId": "<string>",
"instanceKey": "<string>",
"isUniversal": true,
"externalAppId": "<string>",
"externalAppUuid": "<string>",
"externalAppKey": "<string>",
"inputSchema": {},
"type": "api-request-to-external-app",
"config": {},
"outputMapping": "<unknown>",
"customOutputSchema": {},
"isCustomized": true,
"tenantId": "<string>",
"ownerName": "<string>",
"agentSessionId": "<string>",
"universalParentId": "<string>",
"outputSchema": {},
"isPublic": true,
"logoUri": "<string>",
"defaultOutputSchema": {},
"transformedOutputSchema": {},
"dependencies": [
"<unknown>"
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Display name. Optional on create; used to generate key when key is omitted.
Determines which handler runs and which config schema is used for validation (e.g. "run-javascript", "api-request-to-external-app").
Type-specific configuration object. Validated by the handler's config schema; passed to handler setup/run and getTemplateOutputSchema. For type "run-javascript", config.code uses this contract: action.run-javascript: input { input: unknown, user: unknown, connection: { id: string, name: string }, integration: { id: string, key?: string, name?: string } | undefined } + custom-code runtime clients -> unknown. Full contract: doc:functions/action-run-javascript.
Show child attributes
Show child attributes
Stable reference key. Unique per parent/integration scope and generated from name if omitted on create.
Optional human-readable description.
JSON Schema for the action input. Used by the action engine for template output schema, run-time variables, and output mapping.
Show child attributes
Show child attributes
Connection ID for filtering or for connection-level instances. Same semantics as base integration-level property.
Response
Create a new action for a connection. Returns the created action object including its ID.
Internal database ID of the element. Assigned by the API; unique per element.
Display name. Always present in API responses (filled by API if not set on create).
Stable UUID. Generated if omitted on create and unique across elements of this type.
Stable reference key. Unique per parent/integration scope and generated from name if omitted on create.
Optional human-readable description.
Optional key-value metadata.
Show child attributes
Show child attributes
Current lifecycle or health state (e.g. READY, SETUP_FAILED, CONFIGURATION_ERROR, BUILDING). Set by the engine during setup and validation.
BUILDING, CLIENT_ACTION_REQUIRED, CONFIGURATION_ERROR, SETUP_FAILED, READY, DISCONNECTING Validation or setup errors when state is not READY.
Opaque revision token; changes on each update. Used for optimistic concurrency.
ISO date when the element was created.
ISO date when the element was last updated.
When set, the element is archived (soft-deleted). Archived elements cannot be patched.
When true, setup is skipped and the element is treated as inactive (e.g. when dependencies are deactivated or the element is archived).
When true, the element cannot be modified (e.g. published package elements or elements from another workspace).
Internal ID of the universal parent workspace element. Connection-level children are unique per parent and connection.
UUID of the parent element; alternative to parentId when creating (e.g. from export). Resolved to parentId by the API.
Key of the parent element; alternative to parentId. Resolved to parentId by the API.
Connection ID for filtering or for connection-level instances. Same semantics as base integration-level property.
Key for the connection-level instance when multiple exist per connection. Same semantics as base integration-level property.
When true, the element is universal. Omit or false for connection-specific elements.
Informational internal ID of the external app this element belongs to.
UUID of the external app when this action is published in a package that has an external app. Populated in API responses for published actions.
Key of the external app; alternative to externalAppId. Resolved to externalAppId by the API.
JSON Schema for the action input. Used by the action engine for template output schema, run-time variables, and output mapping.
Action type (e.g. HttpRequest, RunJavascript). Determines which handler runs and which config schema is used for validation.
api-request-to-external-app, api-request-to-your-app, http-request, run-javascript, api-request Type-specific configuration object. Validated by the handler's config schema; passed to handler setup/run and getTemplateOutputSchema.
Show child attributes
Show child attributes
Mapping expression to transform the action's raw output. Evaluated with access to input, output, and user; used to compute transformed output schema and at run time.
Explicit output schema for the action. Takes precedence over the transformed or default output schema when resolving outputSchema.
[INTERNAL] ID of the agent session building this action. Present when the action was created or updated with an intent.
For connection-level instances: ID of the universal (root) action in the hierarchy. Set automatically when creating an instance; used in list/selector queries to filter by universal parent.
When true, the element is publicly listed (e.g. in universe). Used for published packages; publish/unpublish updates this on published elements.
Resolved app logo for this element (integration -> connector -> external app -> favicon).