Skip to main content

Function Execution

Execute and test your functions directly from the CLI.

Running functions locally

Use invoke run to execute a function on your machine without a running execution service โ€” same isolated-vm sandbox, no network connection required.

Invoking Functionsโ€‹

Basic Invocationโ€‹

Invoke a function using its name or ID:

invoke function:invoke my-api

Example output:

Executing function 'my-api'...
โœ… Function executed successfully in 63ms

๐Ÿ“ค Response:

{
"message": "Hello, World!",
"timestamp": 1708675200687
}

HTTP Methodsโ€‹

Specify the HTTP method:

# GET request (default)
invoke function:invoke my-api --method GET

# POST request
invoke function:invoke my-api --method POST

# Other methods
invoke function:invoke my-api --method PUT
invoke function:invoke my-api --method DELETE
invoke function:invoke my-api --method PATCH

Sending Dataโ€‹

JSON data:

invoke function:invoke my-api \
--method POST \
--data '{"name": "John", "email": "john@example.com"}'

Raw body:

invoke function:invoke my-api \
--method POST \
--body "Plain text data"

From file:

invoke function:invoke my-api \
--method POST \
--file ./request-data.json

Priority: --body > --data > --file

Custom Headersโ€‹

Add custom headers:

# Single header
invoke function:invoke my-api \
--header "Authorization: Bearer token123"

# Multiple headers
invoke function:invoke my-api \
--header "Authorization: Bearer token123" \
--header "X-Request-ID: abc-123" \
--header "Content-Type: application/json"

URL Pathsโ€‹

Append paths to the invocation URL:

# Invoke /users/123
invoke function:invoke my-api --path "/users/123"

# Invoke /api/v1/products
invoke function:invoke my-api --path "/api/v1/products"

This transforms:

  • From: http://localhost:3001/invoke/{id}
  • To: http://localhost:3001/invoke/{id}/users/123

Timeout Controlโ€‹

Set a custom timeout (in milliseconds):

# 60 second timeout
invoke function:invoke my-api --timeout 60000

# Default is 30 seconds
invoke function:invoke my-api --timeout 30000

JSON Outputโ€‹

Get machine-readable output:

invoke function:invoke my-api --output json

Example JSON output:

{
"status": 200,
"duration": 63,
"data": {
"message": "Hello, World!"
}
}

Testing Functionsโ€‹

The function:test command provides enhanced output with function details and recent logs.

Basic Testโ€‹

invoke function:test my-api

Example output:

๐Ÿงช Testing Function:

Name: my-api
ID: cd23cc1f-936f-445e-b2ba-dd8306b8dc01
Active: Yes
Version: 2
Requires API Key: No

โšก Executing...

โœ… Success in 47ms

๐Ÿ“Š Response:

{
"message": "Test successful"
}

๐Ÿ“‹ Recent Logs:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Time โ”‚ Status โ”‚ Duration โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 23/2/2026, 2:10:57 pm โ”‚ โœ… 200 โ”‚ 47ms โ”‚
โ”‚ 23/2/2026, 2:08:00 pm โ”‚ โœ… 200 โ”‚ 30ms โ”‚
โ”‚ 23/2/2026, 2:07:51 pm โ”‚ โœ… 200 โ”‚ 33ms โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Test with Dataโ€‹

invoke function:test my-api \
--method POST \
--data '{"test": "value"}'

Test with Custom Pathโ€‹

invoke function:test my-api --path "/api/status"

Complete Examplesโ€‹

REST API Testingโ€‹

# GET request
invoke function:invoke my-api \
--method GET \
--path "/users/123" \
--header "Authorization: Bearer token123"

# POST request
invoke function:invoke my-api \
--method POST \
--path "/users" \
--header "Content-Type: application/json" \
--data '{"name": "John Doe", "email": "john@example.com"}'

# PUT request
invoke function:invoke my-api \
--method PUT \
--path "/users/123" \
--data '{"name": "Jane Doe"}'

# DELETE request
invoke function:invoke my-api \
--method DELETE \
--path "/users/123"

Authentication Testingโ€‹

# Test with API key
invoke function:invoke my-api \
--header "x-api-key: func_abc123..." \
--data '{"action": "process"}'

# Test with Bearer token
invoke function:invoke my-api \
--header "Authorization: Bearer eyJhbGc..." \
--method POST

File Upload Simulationโ€‹

# Send JSON file content
invoke function:invoke my-api \
--method POST \
--file ./upload-data.json

# Send custom content type
invoke function:invoke my-api \
--method POST \
--header "Content-Type: text/csv" \
--body "$(cat data.csv)"

Webhook Testingโ€‹

# Simulate webhook payload
invoke function:invoke webhook-handler \
--method POST \
--header "X-Webhook-Signature: sha256=abc..." \
--data '{
"event": "payment.success",
"data": {
"amount": 1000,
"currency": "USD"
}
}'

Load Testingโ€‹

Simple load test using a loop:

#!/bin/bash

echo "Running 100 requests..."
for i in {1..100}; do
invoke function:invoke my-api \
--output json \
--data "{\"request\": $i}" \
>> results.log
done

echo "Complete! Check results.log"

Error Handlingโ€‹

Test error scenarios:

# Test with invalid data
invoke function:invoke my-api \
--method POST \
--data '{"invalid": true}'

# Test timeout
invoke function:invoke my-api \
--timeout 1000 # 1 second timeout

Comparing Invoke vs Testโ€‹

Featurefunction:invokefunction:test
Execute functionโœ…โœ…
Show responseโœ…โœ…
Function detailsโŒโœ…
Recent logsโŒโœ…
JSON outputโœ…โŒ
Custom timeoutโœ…โŒ
Use caseProduction/automationDevelopment/debugging

Tipsโ€‹

Quick Function Testโ€‹

# Fast syntax check
invoke function:test my-api --data '{}'

Debugging Responsesโ€‹

# Get full response details
invoke function:invoke my-api --output json | jq '.'

Automation Scriptsโ€‹

#!/bin/bash

# Automated testing script
response=$(invoke function:invoke my-api \
--method POST \
--data '{"test": true}' \
--output json)

status=$(echo $response | jq -r '.status')

if [ "$status" = "200" ]; then
echo "โœ… Test passed"
exit 0
else
echo "โŒ Test failed: $status"
exit 1
fi

Performance Monitoringโ€‹

# Measure response time
for i in {1..10}; do
invoke function:invoke my-api --output json | \
jq '.duration' | \
awk '{sum+=$1} END {print "Avg:", sum/NR "ms"}'
done

Using with CI/CDโ€‹

GitHub Actions example:

- name: Test function
run: |
invoke function:test my-api --output json > test-result.json
if [ $? -ne 0 ]; then
echo "Function test failed"
exit 1
fi

Error Messagesโ€‹

"Function not found"โ€‹

The function name or ID doesn't exist:

invoke function:get my-api  # Check if function exists
invoke function:list # List all functions

"No active version"โ€‹

Upload and activate a version:

invoke function:versions:upload my-api ./my-function --switch

"Execution failed"โ€‹

Check the function logs:

invoke function:logs my-api --limit 10

"Timeout"โ€‹

Increase timeout or optimize your function:

invoke function:invoke my-api --timeout 60000