activepieces-8-error-handling-and-retry-logic
Sub-skill of activepieces: 8. Error Handling and Retry Logic.
Best use case
activepieces-8-error-handling-and-retry-logic is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Sub-skill of activepieces: 8. Error Handling and Retry Logic.
Teams using activepieces-8-error-handling-and-retry-logic should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/8-error-handling-and-retry-logic/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How activepieces-8-error-handling-and-retry-logic Compares
| Feature / Agent | activepieces-8-error-handling-and-retry-logic | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Sub-skill of activepieces: 8. Error Handling and Retry Logic.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 8. Error Handling and Retry Logic
## 8. Error Handling and Retry Logic
```typescript
// Error handling patterns
const errorHandlingFlow = {
"displayName": "Resilient API Integration",
"trigger": {
"name": "schedule",
"type": "SCHEDULE",
"settings": {
"cronExpression": "*/15 * * * *"
},
"displayName": "Every 15 Minutes"
},
"steps": [
{
"name": "fetch_with_retry",
"type": "CODE",
"settings": {
"input": {
"api_url": "{{connections.external_api.base_url}}/data",
"api_key": "{{connections.external_api.api_key}}"
},
"sourceCode": {
"code": `
export const code = async (inputs) => {
const { api_url, api_key } = inputs;
const maxRetries = 3;
const baseDelay = 1000;
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const response = await fetch(api_url, {
headers: { Authorization: \`Bearer \${api_key}\` },
signal: AbortSignal.timeout(30000) // 30 second timeout
});
if (response.status === 429) {
// Rate limited - wait and retry
const retryAfter = parseInt(response.headers.get('Retry-After') || '60');
if (attempt < maxRetries) {
await new Promise(r => setTimeout(r, retryAfter * 1000));
continue;
}
}
if (!response.ok) {
throw new Error(\`HTTP \${response.status}: \${response.statusText}\`);
}
const data = await response.json();
return {
success: true,
data,
attempts: attempt
};
} catch (error) {
if (attempt === maxRetries) {
return {
success: false,
error: error.message,
attempts: attempt
};
}
// Exponential backoff
const delay = baseDelay * Math.pow(2, attempt - 1);
await new Promise(r => setTimeout(r, delay));
}
}
};`
}
},
"displayName": "Fetch with Retry"
},
{
"name": "handle_result",
"type": "BRANCH",
"settings": {
"conditions": [
{
"name": "success",
"expression": {
"type": "EXPRESSION",
"value": "{{fetch_with_retry.success}} === true"
},
"steps": [
{
"name": "process_data",
"type": "CODE",
"settings": {
"input": {
"data": "{{fetch_with_retry.data}}"
},
"sourceCode": {
"code": `
export const code = async (inputs) => {
const { data } = inputs;
// Process successful data
return {
processed: true,
count: data.length,
timestamp: new Date().toISOString()
};
};`
}
}
}
]
},
{
"name": "failure",
"expression": {
"type": "EXPRESSION",
"value": "{{fetch_with_retry.success}} === false"
},
"steps": [
{
"name": "alert_failure",
"type": "PIECE",
"settings": {
"pieceName": "@activepieces/piece-slack",
"actionName": "send_message",
"input": {
"channel": "#alerts",
"text": "API Integration Failed after {{fetch_with_retry.attempts}} attempts. Error: {{fetch_with_retry.error}}"
}
}
},
{
"name": "log_failure",
"type": "PIECE",
"settings": {
"pieceName": "@activepieces/piece-http",
"actionName": "send_request",
"input": {
"method": "POST",
"url": "{{connections.logging_api.base_url}}/errors",
"body": {
"flow": "Resilient API Integration",
"error": "{{fetch_with_retry.error}}",
"attempts": "{{fetch_with_retry.attempts}}",
"timestamp": "{{now}}"
}
}
}
}
]
}
]
},
"displayName": "Handle Result"
}
]
};
```Related Skills
tax-form-currency-field-handling
Handle currency field rounding and formatting quirks when entering precise decimal values into tax software forms
diagnose-venv-shebang-import-errors
Debugging pattern for ModuleNotFoundError when CLI entry points use wrong Python interpreter
diagnose-shebang-virtualenv-import-errors
Debugging pattern for ModuleNotFoundError when CLI entry points use wrong Python interpreter
diagnose-shebang-venv-import-errors
Troubleshoot ModuleNotFoundError in CLI tools by identifying shebang-venv mismatches
diagnose-dirty-ntfs-mount-errors
Troubleshoot NTFS mount failures by identifying dirty volume flags and driver type
debug-toml-section-scoping-errors
Diagnose and fix TOML configuration errors caused by misplaced key-value pairs in named sections
batch-syntax-repair-from-injection-errors
Detect and fix systematic syntax errors caused by line-injection scripts that split multiline constructs
bash-pipefail-grep-error-handling
Handle grep exit codes safely under set -eo pipefail by isolating pipeline failure scope
bash-cli-framework-5-error-handling
Sub-skill of bash-cli-framework: 5. Error Handling (+1).
improve-decision-logic-scoring
Sub-skill of improve: Decision Logic (Scoring).
instrument-data-allotrope-calculated-data-handling
Sub-skill of instrument-data-allotrope: Calculated Data Handling.
clinical-trial-protocol-full-workflow-logic
Sub-skill of clinical-trial-protocol: Full Workflow Logic.