Action Control
Action catalog and custom actions
Every action agents take: built in, from the catalog by category, or your own, run by your webhook or decision only.
Agents do far more than refunds. Any business action can go through Action Control: the built-in ones Audon’s connectors execute, actions from the catalog, and your own. Identity, allowed actions, your policies, limits and budgets, duplicates and idempotency, approvals, the kill switch and evidence work the same for all of them; built-in business rules (refundable balance, already cancelled …) exist only for the built-in actions.
Three kinds of action
- Built in:
refund.create,credit.create,discount.create,subscription.cancel,subscription.update,order.cancel. Executed and verified by Stripe, Shopify, a Webhook or the Test connector. - From the catalog: added to your organization with one click and then yours to change.
- Custom: your own id, fields and risk.
How your own actions run
- Webhook: your endpoint executes it, under the Webhook connector contract (signed request,
Idempotency-Key, a status endpoint for reconciliation). The request carriestype(your action id),countandparams. - Decision only: Audon decides (allow, deny, approval) and records the evidence; the agent executes it and reports the outcome (
report_outcome).
Evidence classes stay honest
Every completed or failed action carries outcome_evidence: provider_verified (Audon executed it and re-read the provider object), connector_verified (your webhook, confirmed on its status endpoint), connector_reported (your webhook’s response only), agent_reported (decision only: the agent says so; Audon neither executed it nor saw the result) or simulated (Test connector). A blocked decision-only action is potentially prevented loss at most, unless a reviewer confirms it.
Fields
A type says what the controls can see: an amount (money, in minor units, optionally a fixed currency), a count (recipients, rows, seats), what the resource is, and typed attributes your policies test as params.<key>. Changing fields, execution, connector, risk or category creates a new version; every action records the version it ran under.
{
"id": "loyalty.points.grant",
"name": "Grant loyalty points",
"category": "commerce",
"risk": "medium",
"execution": "webhook",
"connector_id": "icn_…",
"fields": {
"count": {
"enabled": true,
"label": "points"
},
"resource": {
"label": "Customer id"
},
"attributes": [
{
"key": "tier",
"type": "enum",
"label": "Tier",
"values": [
"gold",
"silver"
],
"required": true
}
]
}
}Policies for any action
Rules can match categories, risk and count, and the quantity limit sums counts over a window:
{
"rules": [
{
"id": "bulk-sends",
"effect": "require_approval",
"match": {
"categories": [
"communication"
],
"count": {
"gt": 100
}
}
},
{
"id": "no-critical",
"effect": "deny",
"match": {
"risk": [
"critical"
]
}
},
{
"id": "sms-per-day",
"effect": "limit",
"match": {
"action_types": [
"sms.send"
]
},
"limit": {
"kind": "quantity",
"max_quantity": 1000,
"window_minutes": 1440,
"per": "agent",
"on_exceed": "require_approval"
}
}
]
}The catalog
119 actions in 20 categories, each with a suggested default policy (added as a draft with with_policy; nothing applies until a person activates it).
| Category | Actions |
|---|---|
| Payments | refund.createcredit.createpayment.link.createpayment.capturepayment.voidpayout.createchargeback.respondpayment_method.delete |
| Commerce | discount.createorder.cancelorder.createorder.updateorder.reshipreturn.approvegift_card.createproduct.price.updateinventory.adjustproduct.delete |
| Subscriptions & plans | subscription.cancelsubscription.updatesubscription.pausesubscription.resumetrial.extendplan.changeseats.updateusage_credit.grant |
| Support & ticketing | ticket.replyticket.closeticket.escalateticket.bulk_updateticket.deletegoodwill.grant |
| Communication | email.sendemail.bulk_sendsms.sendchat.message.sendcall.placenotification.push |
| CRM & customer data | crm.contact.createcrm.contact.updatecrm.contact.deletecrm.contact.mergecrm.deal.updatecrm.owner.reassign |
| Marketing & ads | ads.budget.updateads.campaign.launchads.campaign.pausecampaign.sendaudience.uploadpromo_code.create |
| Social & publishing | social.post.publishsocial.replysocial.post.deletewebsite.page.publish |
| Finance & accounting | invoice.createinvoice.sendinvoice.voidbill.paytransfer.createjournal_entry.postexpense.approvebank_account.update |
| Procurement & purchasing | purchase_order.createpurchase.makevendor.createlicense.purchasetravel.book |
| HR & recruiting | candidate.rejectcandidate.advanceoffer.sendemployee.updatepayroll.changetime_off.approveemployee.offboard |
| Legal & contracts | contract.sendcontract.signnda.sendcontract.terminate |
| Files & documents | file.sharefile.deletefile.movedocument.createfile.permissions.update |
| Calendar & scheduling | calendar.event.createcalendar.event.cancelbooking.createbooking.cancel |
| Tasks & projects | task.createtask.updatetask.deleteproject.archive |
| Access & identity | access.role.grantaccess.role.revokeuser.inviteuser.deactivateapi_key.createpassword.reset |
| Engineering & deployment | deploy.productioncode.mergedb.migration.runfeature_flag.updaterelease.rollbackconfig.update |
| Infrastructure & cloud | cloud.resource.createcloud.resource.deletecloud.scaledns.record.updatebackup.delete |
| Security | firewall.rule.updatesecret.rotatesecret.readsecurity_alert.dismissmfa.disable |
| Data | data.exportdata.deletedata.bulk_updatedata.importdatabase.query.writecustomer_data.erase |
API: integrity_action_catalog_list, integrity_action_types_add_template, integrity_action_type_create, integrity_action_type_update, integrity_action_type_archive (restore is human-only).
Last updated