name: send-request description: Send HTTP requests with automatic configuration and authentication. Use when testing APIs, webhooks, or any HTTP endpoint.
Send Request Skill
Sends HTTP requests with:
- Config-based: baseUrl, auth, headers (from
.pi-super-curl/config.json) - Named endpoints: Quick access via
@endpoint-name - Template variables:
{{uuid}},{{uuidv7}},{{env.VAR}},{{timestamp}} - JWT auth: Auto-generates tokens with configurable payload
- Env resolution:
$VARsyntax for secrets in config
Usage
Run the send-request.cjs script with request parameters:
# First, find the script path (use -L to follow symlinks)
SCRIPT=$(find -L ~/.pi/agent/skills -name "send-request.cjs" 2>/dev/null | head -1)
# Then use it
node "$SCRIPT" <METHOD> "<URL>" [options] 2>&1
Parameters:
METHOD: GET, POST, PUT, PATCH, DELETEURL: Full URL or@endpoint-namefrom config--body '{"key": "value"}': Request body (JSON, supports templates)--header 'Name: Value': Custom header (repeatable)--save: Save response to~/Desktop/api-responses/--stream: Stream SSE responses
Examples:
# Simple GET request
node "$SCRIPT" GET "https://httpbin.org/get" 2>&1
# POST with JSON body and templates
node "$SCRIPT" POST "@chat" --body '{"id": "{{uuidv7}}", "user": "{{env.USER_ID}}"}' 2>&1
# Named endpoint from config
node "$SCRIPT" GET "@health" 2>&1
# With custom header
node "$SCRIPT" GET "https://api.example.com/data" --header "X-Custom: value" 2>&1
Configuration
The script reads .pi-super-curl/config.json from the current directory (walking up) or home directory:
{
"baseUrl": "$API_BASE_URL",
"envFile": ".env",
"auth": {
"type": "jwt",
"secret": "$JWT_SECRET",
"algorithm": "HS256",
"expiresIn": 3600,
"payload": {
"user_id": "{{env.USER_ID}}",
"role": "authenticated"
}
},
"headers": {
"Content-Type": "application/json",
"X-Org-Id": "{{env.ORG_ID}}"
},
"endpoints": [
{
"name": "health",
"url": "/health",
"method": "GET"
},
{
"name": "chat",
"url": "/api/chat",
"method": "POST",
"defaultBody": {
"chat_id": "{{uuidv7}}",
"workspace_id": "{{env.WORKSPACE_ID}}"
}
}
]
}
Template Variables
| Template | Description |
|---|---|
{{uuid}}, {{uuidv4}} |
Random UUID v4 |
{{uuidv7}} |
Time-ordered UUID v7 |
{{timestamp}} |
Unix timestamp (seconds) |
{{timestamp_ms}} |
Unix timestamp (ms) |
{{date}} |
ISO date string |
{{env.VAR}} or {{$VAR}} |
Environment variables |
Environment Resolution
Two syntaxes for different contexts:
| Syntax | Use in | Example |
|---|---|---|
$VAR |
baseUrl, auth.secret, auth.token |
"baseUrl": "$API_URL" |
{{env.VAR}} |
URLs, headers, body, JWT payload | "user_id": "{{env.USER_ID}}" |
Authentication Types
Bearer Token
{"type": "bearer", "token": "$MY_API_TOKEN"}
JWT (auto-generated)
{
"type": "jwt",
"secret": "$JWT_SECRET",
"algorithm": "HS256",
"expiresIn": 3600,
"payload": {
"user_id": "{{env.USER_ID}}",
"email": "{{env.EMAIL}}",
"role": "authenticated"
}
}
API Key
{"type": "api-key", "token": "$API_KEY", "header": "X-API-Key"}
Basic Auth
{"type": "basic", "username": "$USER", "password": "$PASS"}
Output
The script outputs:
[INFO]lines to stderr (method, URL, timing)- Response body to stdout
- Raw response saved to
/tmp/generation-output.txt(for/scurl-log) [INFO] Request completed successfullyon success[ERROR]on failure