Advanced30 minModule 6 of 6

Production Best Practices

Secure your workflows, manage credentials, debug failures, and operate Orchestrator at production scale.

What you'll learn in this module

  • How Orchestrator encrypts and stores credentials
  • Best practices for key management and workflow visibility
  • A systematic approach to debugging failed executions
  • Performance patterns and common pitfalls to avoid

Security Model

Orchestrator uses a multi-layer security architecture. Understanding it helps you make informed decisions about credential storage and workflow sharing.

Credential Encryption

User enters API key AES-256-GCM encryption Encrypted blob stored in DB Workflow executes Decrypt at runtime Key used for API call Key discarded from memory
LayerMechanism
Integration credentialsAES-256-GCM encryption at rest. Decrypted only during execution, never logged.
API keysSHA-256 hashed before storage. The full key is returned exactly once at creation.
Execution logsInputs and outputs are auto-redacted. Auth headers, tokens, and keys are stripped.
Session authManagement API uses HTTP-only session cookies, not bearer tokens.

Key Separation

Orchestrator uses two distinct types of keys:

Key TypePurposeScope
Orchestrator API KeyAuthenticate webhook requests to a specific workflowPer-workflow
Skytells Platform KeyAuthenticate calls to Skytells AI models (AI Gateway, etc.)Per-account

Credential Management Best Practices

Use dedicated credentials per workflow

Create a separate integration for each workflow rather than sharing one integration across many workflows. This allows you to revoke access for a single workflow without affecting others.

Test integrations before deploying

Use the Test button (or POST /api/integrations/{id}/test) to verify credentials before enabling a webhook trigger.

Rotate keys on schedule

Update integration credentials periodically. Since Orchestrator decrypts at runtime, updating the integration immediately takes effect for all future executions.

Audit API key usage

Orchestrator shows only the key prefix in the dashboard. If you suspect a key is compromised, delete it immediately via the API Keys panel and create a new one.


Workflow Visibility

Every workflow has a visibility setting:

VisibilityWho can viewWho can execute
privateOwner onlyOwner + anyone with API key
publicAnyone with the linkOwner + anyone with API key

Debugging Failures

When an execution fails, follow this five-step process:

Step 1 — Check the Execution Status

Open the workflow and click the Executions tab. Look for the execution with error status.

Step 2 — Identify the Failed Step

Click into the execution to see the per-step breakdown. Each step shows its own status. The first step with error is usually the root cause.

Step 3 — Read the Error Details

The step log entry includes:

  • error — the error message or code
  • input — what was sent (redacted)
  • output — any partial response
  • duration — how long before failure

Step 4 — Common Error Patterns

ErrorLikely causeFix
401 UnauthorizedExpired or invalid integration credentialsUpdate integration with fresh credentials
429 Too Many RequestsRate limit hit on external serviceAdd delays or reduce parallel actions
TIMEOUTExternal API took too longCheck service status; consider breaking into smaller steps
INVALID_TEMPLATEBad template variable syntaxVerify {{step_name.field}} references exist upstream
INTEGRATION_NOT_FOUNDMissing integration on an actionRe-attach the integration in the action config
CONDITION_EVAL_ERRORInvalid condition expressionCheck operator compatibility and value types

Step 5 — Re-run

After fixing the issue, trigger a new execution (Manual or Webhook) and verify the step passes.


Performance Patterns

Keep workflows focused

A workflow with 30+ nodes is hard to debug. Instead, split into multiple smaller workflows that call each other via webhooks:

Workflow A Workflow B Receive ticket Classify Call Workflow B via webhook Receive from A Enrich data Create Jira ticket

Minimize expensive actions

AI actions (text generation, image generation) are the slowest and most expensive steps. Structure your workflow to:

  1. Gate with conditions — check whether the AI call is needed before making it
  2. Be specific in prompts — shorter, focused prompts return faster
  3. Use the right model — don't use a large model for simple classification

Template variable efficiency

Template variables are resolved at execution time. Keep variable paths short:

  • {{step_1.text}} — fast, one-level access
  • {{step_1.deeply.nested.field.value}} — works, but harder to debug

Execution Log Best Practices

PracticeReason
Review logs after first production runCatch unexpected outputs early
Delete old executions periodicallyExecution data accumulates; use the delete endpoint to clean up
Don't rely on logs for data storageLogs are redacted and not designed as a data store
Check log redactionVerify sensitive data isn't leaking through custom output fields

Pre-Launch Checklist

Before switching a workflow from Manual to Webhook trigger:

  • All integrations tested via the Test button
  • Template variables verified with a Manual run + sample data
  • Condition branches tested with edge-case inputs
  • Error handling considered — what happens when an external API is down?
  • API key created and stored securely in the calling system
  • Execution logs reviewed for any sensitive data exposure
  • Workflow visibility set appropriately

What you now understand

AreaKey takeaway
EncryptionAES-256-GCM for credentials, SHA-256 for API keys, auto-redaction for logs
Key separationOrchestrator keys ≠ Skytells keys — always use the right key for the right scope
DebuggingFive-step process from execution status → step error → fix → re-run
PerformanceSplit large workflows, gate expensive actions, use focused prompts
Pre-launchEight-point checklist before going to production

Congratulations — you've completed the Orchestrator Mastery learning path. You now have the knowledge to build, integrate, automate, and operate workflows in production.

Explore the Orchestrator documentation for complete API reference and plugin details.

On this page