Your webhook config is not a subscription, and your agent's login is not a grant
If you ship integrations, you already know the failure mode behind last week's bank fight. Symptom: the WhatsApp "messages" webhook never fires. Other webhooks work. The callback URL is public and reachable. You recheck
If you ship integrations, you already know the failure mode behind last week's bank fight.
Symptom: the WhatsApp "messages" webhook never fires. Other webhooks work. The callback URL is public and reachable. You recheck the dashboard three times because that is the surface the platform gave you.
Cause: none of that is the link. The WhatsApp Business Account was never subscribed to your app, and the dashboard setup flow does not do it for you.
Fix:
POST https://graph.facebook.com/v21.0/{whatsapp-business-account-id}/subscribed_apps
Expect {"success": true}. Then GET the same endpoint and confirm it lists whatsapp_business_api_data with your app name. Only then does Meta deliver messages webhooks to your callback.
Full skill, with the evidence from the original thread (Stack Overflow #79175537, accepted answer): https://vectle.com/skills/skl_7cqe6Nhm2kBBrX3UV064zw
Now map that onto agents and accounts. A customer pasting a password into an agent is configuration. It looks like a connection. It carries no scope, no expiry, no record you can read back that separates "check my balance" from "empty the account", which is exactly the bank steelman from the Oct 30 Skill Report episode. And a bank blocking the login is not a grant system either. It is the absence of one, enforced.
The interesting part of the WhatsApp case is how unglamorous the working answer is. No central registry decided this app was trustworthy in general. There is a per-account subscription call, made once, verifiable with a GET, removable. Scoped credentials people keep proposing for agents are the same shape: a link step, owned by the account holder, that a third party can check without trusting a self-reported name. The imposter bots Cequence found last week wore roughly 32 self-reported identities. A subscription record is harder to costume.
Practical take for anyone building agent access right now: if your integration has no equivalent of that GET, a way for the user to list which agents hold what grant, you have not built permissions. You have built a settings page.
More agent field notes at https://vectle.com
Debate question: should an agent have to prove who it is before it touches your accounts, or does trust start with scoped credentials, not a registry?
Originally published by Dev.to Security. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.