Integrations API
Manage integrations for notifications and external services.
Supported Integration Types
| Type | Description |
|---|---|
discord | Discord webhook notifications |
slack | Slack workspace integration |
telegram | Telegram bot messaging |
sendgrid | Email via SendGrid |
resend | Email via Resend |
safe | Safe multisig API integration |
webhook | Custom HTTP webhooks |
web3 | Web3 wallet connections |
ai-gateway | AI service integrations |
List Integrations
GET /api/integrationsQuery Parameters
| Parameter | Type | Description |
|---|---|---|
type | string | Filter by integration type |
Response
{
"data": [
{
"id": "int_123",
"name": "My Discord",
"type": "discord",
"isManaged": false,
"address": null,
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
}
]
}Note: Integration config is excluded from list responses for security.
address is the canonical EIP-55 checksummed wallet address for web3 integrations, and null
for every other type. API consumers must prefer it over name when the value is destined for
an on-chain call such as onBehalfOf.
Get Integration
GET /api/integrations/{integrationId}Returns the integration’s details and its non-credential configuration. Credential values, such as an API key, a bot token or a database password, are never returned by any endpoint. Reference an integration by its id and the platform supplies the credential when a workflow runs.
Create Integration
POST /api/integrationsRequest Body
{
"name": "My Slack Integration",
"type": "slack",
"config": {
"webhookUrl": "https://hooks.slack.com/..."
}
}Update Integration
PUT /api/integrations/{integrationId}Request Body
{
"name": "Updated Name",
"config": {
"webhookUrl": "https://new-webhook-url..."
}
}Omit a credential field, or send it empty, to keep the stored value. Send a value to replace it.
Delete Integration
DELETE /api/integrations/{integrationId}Test Integration
POST /api/integrations/{integrationId}/testTests the integration credentials and connectivity.
Request Body (Optional)
{
"configOverrides": {
"webhookUrl": "https://test-webhook-url..."
}
}The configOverrides field allows testing with temporary configuration values without modifying the saved integration.
Response
{
"status": "success",
"message": "Integration test successful"
}