curl --request GET \
--url https://api.tenderly.co/api/v1/account/{accountSlug}/project/{projectSlug}/actions/action/{actionId} \
--header 'X-Access-Key: <api-key>'import requests
url = "https://api.tenderly.co/api/v1/account/{accountSlug}/project/{projectSlug}/actions/action/{actionId}"
headers = {"X-Access-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Access-Key': '<api-key>'}};
fetch('https://api.tenderly.co/api/v1/account/{accountSlug}/project/{projectSlug}/actions/action/{actionId}', 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.tenderly.co/api/v1/account/{accountSlug}/project/{projectSlug}/actions/action/{actionId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Access-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tenderly.co/api/v1/account/{accountSlug}/project/{projectSlug}/actions/action/{actionId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Access-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tenderly.co/api/v1/account/{accountSlug}/project/{projectSlug}/actions/action/{actionId}")
.header("X-Access-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tenderly.co/api/v1/account/{accountSlug}/project/{projectSlug}/actions/action/{actionId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Access-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "be048c73-41c3-4fcd-b0c6-d286af7155fe",
"projectId": "cbb49e29-24ad-4cf9-8b2d-1f34a3019582",
"name": "instadapp-implementation",
"description": "Track these 3 proposal events: add, remove & setDefault.",
"status": "DEPLOYED",
"stopped": false,
"version": {
"id": "34655755-771f-4da7-989e-ec2b27e8f13b",
"index": 3,
"actionId": "be048c73-41c3-4fcd-b0c6-d286af7155fe",
"parentActionId": "",
"runtime": "V1",
"function": "instadappImplementation:implementationFn",
"triggerType": "TRANSACTION",
"trigger": {
"type": "transaction",
"transaction": {
"status": [
"MINED"
],
"filter": {
"any": [
{
"network": [
"1"
],
"status": [],
"value": [],
"gasLimit": [],
"gasUsed": [],
"fee": [],
"from": [],
"to": [],
"function": [],
"eventEmitted": [
{
"contract": {
"address": "0xcba828153d3a85b30b5b912e1f2dacac5816ae9d",
"invocationType": "ANY"
},
"id": null,
"name": "LogSetDefaultImplementation"
},
{
"contract": {
"address": "0xcba828153d3a85b30b5b912e1f2dacac5816ae9d",
"invocationType": "ANY"
},
"id": null,
"name": "LogAddImplementation"
},
{
"contract": {
"address": "0xcba828153d3a85b30b5b912e1f2dacac5816ae9d",
"invocationType": "ANY"
},
"id": null,
"name": "LogRemoveImplementation"
}
],
"logEmmitted": []
}
],
"and": null
}
}
},
"commitish": null,
"source": "import {\n ActionFn,\n Context,\n Event,\n TransactionEvent,\n} from '@tenderly/actions';\n\n// TEST: Try manual trigger with this tx hash on Mainnet: 0x3bdf5a48174f7f8f7bfb2f43dbe399c47405bba1cea3480aa0c199270f262f7e\nexport const implementationFn: ActionFn = async (context: Context, event: Event) => {\n let txEvent = event as TransactionEvent;\n console.log('InstaDapp Implementation Event is detected');\n // Shorten logs because it's too large to print\n console.log({ ...txEvent, logs: txEvent.logs.splice(0, 5) });\n};\n",
"createdAt": "2022-10-18T12:37:10.392964Z",
"deployRequested": false,
"deployError": null,
"invocationType": "SYNC"
},
"editable": false,
"createdAt": "2022-10-18T12:24:51.187849Z",
"deliveryChannels": null
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "bad_request",
"message": "Bad request input parameters"
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "unauthorized",
"message": "Unauthorized"
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "insufficient_permissions",
"message": "Insufficient permissions"
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "resource_not_found",
"message": "The resource you requested could not be found."
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "internal_server_error",
"message": "Internal server error"
}
}Get Web3 Action details
Retrieve the configuration details of a specific Web3 Action. You need to provide the Web3 Action ID.
curl --request GET \
--url https://api.tenderly.co/api/v1/account/{accountSlug}/project/{projectSlug}/actions/action/{actionId} \
--header 'X-Access-Key: <api-key>'import requests
url = "https://api.tenderly.co/api/v1/account/{accountSlug}/project/{projectSlug}/actions/action/{actionId}"
headers = {"X-Access-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Access-Key': '<api-key>'}};
fetch('https://api.tenderly.co/api/v1/account/{accountSlug}/project/{projectSlug}/actions/action/{actionId}', 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.tenderly.co/api/v1/account/{accountSlug}/project/{projectSlug}/actions/action/{actionId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Access-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tenderly.co/api/v1/account/{accountSlug}/project/{projectSlug}/actions/action/{actionId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Access-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tenderly.co/api/v1/account/{accountSlug}/project/{projectSlug}/actions/action/{actionId}")
.header("X-Access-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tenderly.co/api/v1/account/{accountSlug}/project/{projectSlug}/actions/action/{actionId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Access-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "be048c73-41c3-4fcd-b0c6-d286af7155fe",
"projectId": "cbb49e29-24ad-4cf9-8b2d-1f34a3019582",
"name": "instadapp-implementation",
"description": "Track these 3 proposal events: add, remove & setDefault.",
"status": "DEPLOYED",
"stopped": false,
"version": {
"id": "34655755-771f-4da7-989e-ec2b27e8f13b",
"index": 3,
"actionId": "be048c73-41c3-4fcd-b0c6-d286af7155fe",
"parentActionId": "",
"runtime": "V1",
"function": "instadappImplementation:implementationFn",
"triggerType": "TRANSACTION",
"trigger": {
"type": "transaction",
"transaction": {
"status": [
"MINED"
],
"filter": {
"any": [
{
"network": [
"1"
],
"status": [],
"value": [],
"gasLimit": [],
"gasUsed": [],
"fee": [],
"from": [],
"to": [],
"function": [],
"eventEmitted": [
{
"contract": {
"address": "0xcba828153d3a85b30b5b912e1f2dacac5816ae9d",
"invocationType": "ANY"
},
"id": null,
"name": "LogSetDefaultImplementation"
},
{
"contract": {
"address": "0xcba828153d3a85b30b5b912e1f2dacac5816ae9d",
"invocationType": "ANY"
},
"id": null,
"name": "LogAddImplementation"
},
{
"contract": {
"address": "0xcba828153d3a85b30b5b912e1f2dacac5816ae9d",
"invocationType": "ANY"
},
"id": null,
"name": "LogRemoveImplementation"
}
],
"logEmmitted": []
}
],
"and": null
}
}
},
"commitish": null,
"source": "import {\n ActionFn,\n Context,\n Event,\n TransactionEvent,\n} from '@tenderly/actions';\n\n// TEST: Try manual trigger with this tx hash on Mainnet: 0x3bdf5a48174f7f8f7bfb2f43dbe399c47405bba1cea3480aa0c199270f262f7e\nexport const implementationFn: ActionFn = async (context: Context, event: Event) => {\n let txEvent = event as TransactionEvent;\n console.log('InstaDapp Implementation Event is detected');\n // Shorten logs because it's too large to print\n console.log({ ...txEvent, logs: txEvent.logs.splice(0, 5) });\n};\n",
"createdAt": "2022-10-18T12:37:10.392964Z",
"deployRequested": false,
"deployError": null,
"invocationType": "SYNC"
},
"editable": false,
"createdAt": "2022-10-18T12:24:51.187849Z",
"deliveryChannels": null
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "bad_request",
"message": "Bad request input parameters"
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "unauthorized",
"message": "Unauthorized"
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "insufficient_permissions",
"message": "Insufficient permissions"
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "resource_not_found",
"message": "The resource you requested could not be found."
}
}{
"error": {
"id": "596b1dc7-af60-477b-aab3-6c93eb92ddfa",
"slug": "internal_server_error",
"message": "Internal server error"
}
}Authorizations
An API key is a token that a client provides when making API calls. Send it as the X-Access-Key request header on any endpoint:
curl '<API_ENDPOINT>' \ -H 'X-Access-Key: ${TENDERLY_ACCESS_KEY}' \ ...
Learn how to generate API access tokens at Tenderly Docs.
Path Parameters
Account slug of the user
Project slug of the account
Web3 Action Id to get info for
Response
A successful response.
ID of the Web3 Action.
"4cc3ee95-6bc5-4c85-83d0-26d4b89d5c25"
ID of the project where Web3 Action is created.
"dfdc391a-a15d-4590-9aef-8691259c7df4"
Web3 Action name.
"periodic-cron"
Web3 Action description.
"Triggers every 1 hour"
Status of the Web3 Action.
DEPLOYED, PUBLISHED "DEPLOYED"
Flag showing if Web3 Action is stopped or not.
false
Flag showing if Web3 Action is editable or not.
true
When Web3 Action is created.
"2023-12-14T16:20:36.078679Z"
Show child attributes
Show child attributes
{ "id": "65f4e0e8-4b67-4f0c-815f-1a08cd418f1a", "index": 1, "actionId": "4cc3ee95-6bc5-4c85-83d0-26d4b89d5c25", "parentActionId": "", "runtime": "V2", "function": "implementation:actionFn", "triggerType": "PERIODIC", "trigger": { "type": "periodic", "periodic": { "cron": "0 * * * *", "interval": "1h" } }, "commitish": null, "source": "// Do not change function name.\nconst actionFn = async (context, periodicEvent) => {\n console.log(periodicEvent)\n\n // To access project's secret\n // let secret = await context.secrets.get('MY-SECRET')\n\n // To access project's storage\n // let value = await context.storage.getStr('MY-KEY')\n // await context.storage.putStr('MY-KEY', 'MY-VALUE')\n\n // Your logic goes here :)\n}\n// Do not change this.\nmodule.exports = { actionFn }", "createdAt": "2023-12-14T16:20:36.078679Z", "deployRequested": false, "deployError": null, "invocationType": "SYNC" }
Shows delivery channels for given Web3 Action.
[]
Was this page helpful?