Skip to content

CRM Update With Approval

Use this pattern for customer data changes.

Source: examples/crm_update_tool.py

from toolrampart import rate_limit, redact, require_approval, scope, side_effects, tool

@tool
@scope("crm.contact.update")
@require_approval()
@redact(["email", "phone"])
@rate_limit("20/hour/user")
@side_effects(writes_data=True, idempotent=True)
def update_contact(customer_id: str, email: str | None = None, phone: str | None = None) -> dict:
    ...

Call with an idempotency key:

client.invoke(
    "update_contact",
    {"customer_id": "cus_123", "email": "new@example.com"},
    idempotency_key="crm-contact-cus_123-email-001",
)