Webhooks — Outbound HTTP Notifications
Webhooks deliver events to your HTTP endpoints. When something happens in Theo (completion, job finish, skill install, etc.), a signed POST is sent to every matching endpoint.Register a Webhook
signing_secret — save it securely. It’s shown once and used to verify payloads.
Event Catalog
| Event | Description |
|---|---|
completion.created | A completion was generated |
job.completed / job.failed | Background job finished |
workflow.completed / workflow.failed | Workflow run finished |
skill.installed / skill.uninstalled | Skill install/uninstall |
skill.submitted / skill.approved / skill.rejected | Skill review |
connector.created / connector.status_changed | Connector events |
credits.low | Credit balance low |
key.created / key.revoked | API key events |
"*" as an event type to receive all events.
Verify Signatures
Every delivery includes HMAC-SHA256 signatures:HMAC-SHA256(signing_secret, timestamp + "." + raw_body) and comparing. Reject if the timestamp drifts more than 5 minutes.
Retry Behavior
- Automatic retries with exponential backoff on transient failures
- Per-attempt timeout enforced server-side
- 4xx errors are not retried (client errors)
- Webhooks are auto-disabled after a sustained run of failed deliveries
- Every attempt — successful or failed — is recorded in the delivery log
Manage Webhooks
GET /api/v1/webhooks— List all webhooksPATCH /api/v1/webhooks/{id}— Update URL, event types, enable/disableDELETE /api/v1/webhooks/{id}— RemovePOST /api/v1/webhooks/{id}/test— Send a test eventGET /api/v1/webhooks/{id}/deliveries— View delivery log
Hook Events — Autonomous Skill Triggers
Hooks are internal event triggers that automatically execute skills when events occur — no HTTP endpoint needed. The skill runs headless via the autonomous executor with credit guards.How Hooks Work
- An event is published (via
POST /api/v1/eventsor internal platform events) - The hook evaluator checks all enabled hooks for pattern matches
- Matching hooks load the associated skill and execute it autonomously
- Results are recorded in the execution log
Hook Presets
| Preset | Event Pattern | Default Skill | Description |
|---|---|---|---|
share.accepted.welcome | share.accepted | email-drafter | Welcome on share accept |
task.overdue.summary | task.overdue | todo-manager | Summarize overdue tasks |
project.created.suggestions | project.created | document-analyzer | Suggest project next steps |
team.member_joined.onboarding | team.member_joined | email-drafter | Onboarding guidance |
document.analyzed.followup | document.analyzed | document-analyzer | Follow-up action items |
Install a Hook
Custom Event Patterns
Patterns support:- Exact match:
share.acceptedmatches onlyshare.accepted - Glob wildcard:
order.*.completedmatchesorder.purchase.completed,order.return.completed - Prefix match:
sharematchesshare.accepted,share.declined, etc. - Catch-all:
*matches everything
Publishing Events
UsePOST /api/v1/events to publish domain events that trigger hooks and webhooks:
Guard Rails
Autonomous execution runs under strict safety limits:- Pre-flight credit check before each run
- Separate daily cap for autonomous actions
- Per-run caps on tool invocations and total spend
- Credit checkpoint between steps
- Hooks auto-pause after repeated failures
- Configurable cooldown between firings to prevent runaway execution
Manage Hooks
GET /api/v1/hooks— List hooks (includes available presets)PATCH /api/v1/hooks/{id}— Update config, enable/disableDELETE /api/v1/hooks/{id}— RemoveGET /api/v1/hooks/{id}— View execution history
