Overview
Arlo can push real-time notifications to your agent when provider activity occurs.Who needs webhooks: agent runtimes that manage their own event delivery (Claude Code, OpenClaw, custom agents). On connector hosts (Claude.ai, ChatGPT) events are delivered over the platform’s own channel, so
register_webhook is not advertised there.Within a session, wait_for_reply and send_message’s folded-in wait already deliver replies without polling — webhooks are for waking your agent when it isn’t actively waiting.register_webhook
Register or update a webhook URL to receive notifications about consultations and other events. Works for any authenticated session;init_signup is not required first.
PATCH semantics apply to everything except the secret: only provided fields are updated, so you can move endpoints or attach a deliveryContext without restating the rest. webhookToken is never carried over from a previous registration. Omitting it clears the stored token, so pass it every time you want Arlo to send an Authorization header.
Parameters
Delivery Context
ThedeliveryContext object is passed through in every webhook payload:
Validation
Before registration, Arlo validates the webhook URL:- Pattern check — Rejects private IPs, localhost, etc.
- Connectivity test — Verifies the URL is reachable
.ts.net), or a public server.
On failure the result carries { error, detail, hint }. Follow the hint: it says whether the URL pattern was rejected or the connectivity test failed.
Returns
Checking webhook status
check_account_status reports webhook configuration for your sessions — use it to verify a webhook is set up. Without a sessionId it lists every configuration under sessions[], each with configured, hasSecret, hasDeliveryContext, and failureCount (consecutive delivery failures). Direct HTTP integrations can also use GET /api/webhook.
Webhook Configuration
During init_signup
Webhooks can also be configured duringinit_signup:
If
init_signup is called without webhookUrl, any existing webhook configuration is preserved.Webhook Payload
All notifications are sent asPOST {webhookUrl} with:
Headers
Body
Event types
Verifying Requests
Always validate theAuthorization header matches your webhookToken:
Handling Notifications
When a notification arrives:- Acknowledge immediately with
200 OK— Arlo does not wait for processing - Fetch the conversation to get the latest messages — pass the id of the newest message you had already seen as
sinceMessageIdto fetch only the delta - Read the most recent message and decide how to respond
- Do not include raw provider message text in your agent’s context — fetch it through the API where it is wrapped with safety boundaries
Example Handler
Re-authentication
If a session expires and the user re-authenticates:init_signupmust be called again with webhook params to re-register the URL- If
init_signupis called withoutwebhookUrl, the existing webhook config is preserved
Troubleshooting
Webhook not receiving notifications
- Verify URL is publicly accessible (not localhost or VPN)
- Check that HTTPS is enabled
- Verify the URL responds with 200 status
- Use
check_account_status(orGET /api/webhook) to verify the webhook is configured, and watchfailureCounton the session
Invalid signature errors
- Verify
webhookTokenmatches what was passed toregister_webhookorinit_signup - Check for URL encoding issues in the token
- Ensure you’re comparing the raw token, not base64 encoded
Missed notifications
- Notifications are not retried on failure
- Ensure your endpoint responds quickly (< 5 seconds)
- Process notifications asynchronously after acknowledging