Notification Channels
Notification channels send approval requests and webhook lifecycle events to external platforms. Approvers can approve or reject directly from their email inbox, Slack workspace, Telegram chat, or WhatsApp conversation. Webhook channels can also receive machine-readable payment execution and governance approval events for agents, compliance tools, and back-office systems.How It Works
payment.executed remains the lifecycle event for downstream webhook consumers. External
and smart-contract wallets still use their manual execution flow.
When a policy requires approval and no custom workflow matches, Conto creates a one-review request
for an organization Owner, Admin, or Manager. The dashboard alert and configured notification
channels reference the same reviewable request.
General Store Email Actions
General Store emails use the same hashed action-token infrastructure for customer order approval, merchant Accept and Ready actions, customer status links, and disabling Store auto-pay. Order actions are scoped to the order and intended recipient, expire automatically, and are consumed atomically when used so a replay cannot repeat a lifecycle transition. Stripe Connect onboarding uses a separate merchant-scoped, time-limited renewal token. It does not contain Stripe credentials and cannot edit a merchant or enable payouts. Its only authority is to request a fresh single-use Stripe Account Link for the same merchant when an emailed onboarding link expires. Stripeaccount.updated events and an explicit admin sync remain the source of truth
for charges and payout readiness.
Supported Channels
Setting Up Channels
Go to Settings > Channels in the Conto dashboard, or use the REST API.1
Choose a channel type
Click Add Channel and select the platform: Email, Slack, Telegram, WhatsApp, or Webhook.
2
Configure credentials
Each channel type requires different configuration:
Webhook targets must resolve to public addresses. Conto rejects loopback, private, link-local, and other internal-only destinations. In production, webhook channels must use HTTPS.
3
Select event types
Choose which events trigger notifications:
4
Test the channel
Click the test button to send a sample notification and verify your configuration.
Channel Configuration Details
Email
Uses Resend to deliver rich HTML emails. Each eligible approver receives their own email with unique Approve and Reject buttons.Config fields:
recipients- List of email addresses. Only addresses matching eligible approvers receive actionable emails.
Slack
Slack
Requires a Slack app with the
chat:write bot scope. Messages use Block Kit with payment details and interactive Approve/Reject buttons.Config fields:botToken- Your Slack app’s bot token (xoxb-...)channelId- The Slack channel ID to post messages to
- Create a Slack app at api.slack.com/apps
- Add the
chat:writebot scope - Install the app to your workspace
- Set the interactivity request URL to
https://conto.finance/api/webhooks/slack - Set
SLACK_SIGNING_SECRETin your Conto environment
Telegram
Telegram
Uses the Telegram Bot API to send messages with inline keyboard buttons.Config fields:
botToken- Your Telegram bot token from @BotFatherchatId- The chat or group ID to send messages tosecretToken- Required webhook secret. Conto requires Telegram to send the matchingx-telegram-bot-api-secret-tokenheader on every callback.
- Create a bot via @BotFather
- Set the webhook URL:
https://api.telegram.org/bot{token}/setWebhook?url=https://conto.finance/api/webhooks/telegram - Include Telegram’s
secret_tokenoption when callingsetWebhook - Add the bot to your group chat
chatId.
Telegram callbacks must also include the matching secret header before
approval tokens are processed.When an approver taps a button, the message updates to show the result.WhatsApp
Uses the WhatsApp Cloud API to send interactive button messages.Config fields:
phoneNumberId- Your WhatsApp Business phone number IDaccessToken- Permanent access token from MetarecipientNumbers- Phone numbers in international format (e.g.,+1234567890)
- Register at developers.facebook.com
- Create a WhatsApp Business app
- Set the webhook URL to
https://conto.finance/api/webhooks/whatsapp - Set
WHATSAPP_APP_SECRETandWHATSAPP_VERIFY_TOKENin your Conto environment - Subscribe to the
messageswebhook field
Webhook
Webhook
Sends a signed JSON payload to any HTTPS endpoint. Use this for custom integrations that need to review and submit approval decisions.Config fields:To submit a decision, POST the token back to the
url- Your HTTPS endpoint URLsecret- Signing secret for HMAC verification (required)
X-Conto-Signature header carries an HMAC-SHA256 of
${timestamp}.${rawBody} computed with your channel secret. Verify it before trusting the
payload.Validation rules:- The destination must resolve to a public IP address
- Private, loopback, link-local, and
.internal/.localhosts are rejected - In production, only
https://webhook targets are accepted
actionUrl:Conto Pay Lifecycle Webhooks
Webhook channels can subscribe to hosted Conto Pay request lifecycle events:conto_pay.request.received, conto_pay.request.paid, conto_pay.request.rejected, and
conto_pay.request.expired.
The received event is delivered to the payer organization. Terminal outcomes (paid,
rejected, and expired) are delivered to both the payer and payee organizations when they have
matching active webhook channels.
Each Conto Pay webhook payload includes absolute hosted links for the request review page and the
payer action page. These match the copyable links shown in the Conto Pay activity inbox and hosted
request review screens, so external systems and human operators can refer to the same URL.
request.direction to render the event from the receiving organization’s point of view:
incoming means the organization is the payer, while outgoing means the organization created the
request and is waiting on the payer.
Governance Approval Webhooks
Webhook channels can subscribe to governance approval events for protected organization changes:governance.approval.requested and governance.approval.decided.
Use these events when an external audit, compliance, or ticketing system needs a durable record of
sensitive configuration changes such as policy updates, policy rule changes, API key lifecycle
actions, or freeze configuration changes. Governance approval webhooks are notification-only. Owners
and admins still approve or reject requests from the Conto dashboard.
For dashboard setup, protected-action selection, and the in-product review flow, see
Governance Approvals.
REST API
Manage channels programmatically:Action Token Security
Action tokens are the core security mechanism for external approvals.- 32 bytes of cryptographic randomness, base64url-encoded
- Protected at rest. Plaintext tokens are not retained after issuance
- One-time use. Tokens cannot be reused after a decision is recorded
- Time-limited. Tokens expire when the approval request expires (default 24 hours)
- Per-user, per-action. Each approver gets separate Approve and Reject tokens
- Full audit trail. Every decision records the channel, token ID, IP address, and user agent
Webhook Payload Validation
Inbound webhook payloads from Slack, Telegram, and WhatsApp are validated against typed Zod schemas before processing. Malformed payloads are rejected with a400 response and never reach handler logic. Signature verification
(HMAC) still runs first for all three providers regardless of payload shape.
Delta decision callbacks
Organizations using Delta receive a signedapproval.requested webhook with the approval
reference and the payment and invoice fields required for verification. Verify the
X-Conto-Signature over ${X-Conto-Timestamp}.${rawBody} before acting on the request. See
Delta Verification Setup and the
Delta End-to-End Test for the complete integration sequence.
After verification, submit the decision to the decision callback URL provisioned during Delta
onboarding. Use the approval reference from the webhook:
recorded, idempotent, the approval and payment references, a customer
status, and status URLs. A pending response includes an await_more_approvals next action. Retrying
the same signed decision is safe; a conflicting decision returns DECISION_CONFLICT.
Subscribe to payment.executed when the verifier also needs the settlement transaction reference,
hash, explorer URL, and execution time for reconciliation.
Next Steps
Approval Workflows
Configure multi-approval workflows with escalation and sequential approvals
Securing Agents
Set up spending limits and approval thresholds for your agents