AXMEAXME

AXME

Stop building webhook infrastructure — migrate to intent lifecycle in a weekend

HMAC, idempotency, backoff, and DLQ for every integration pair — or one durable intent with delivery modes you choose per client.

Step-by-step guide to replacing webhook endpoints, polling loops, and retry middleware with AXME's durable intent model.

Every backend team eventually builds the same stack: HMAC verification, idempotency keys, exponential backoff, dead-letter queues, and a reconciliation job when callbacks arrive twice. That is 200+ lines per integration pair — before you count polling loops and status tables for long-running work.

MIGRATE

Webhooks → AXME concept map

Concept mapping for migration planning.

CapabilityWebhooksAXME

Durable execution

Resume after crash or deploy.

Build your own
✓Native intent lifecycle

Native HITL

Human approvals without glue.

Custom per gate
✓8 task types built in

Fleet governance

Observe and stop agents.

Cobble observability
✓Mesh control plane

Open protocol

No vendor lock-in.

Varies
✓AXP open source

LLM-friendly

Non-deterministic code OK.

Often blocked
✓Yes

Time to production

Prototype to durable ship.

Months
✓Days

TRADE-OFFS

What you gain — and what you give up.

Honest evaluation before cutover.

Webhook endpoint

→ Delivery mode (stream, poll, push, inbox).

Polling loop

→ WAITING_FOR_TOOL / durable wait.

Retry + DLQ

→ Intent lifecycle policies.

Idempotency table

→ Intent dedupe at submit.

MIGRATION PATH

Recommended phases.

Parallel running before full cutover.

1. Inventory

List webhook pairs, pollers, and shared state tables.

2. Pilot intent

One flow: submit + wait instead of callback URL.

3. Parallel run

AXME and legacy webhooks both active; compare audit.

4. Retire endpoints

Delete per-workflow routes; keep external ingress as signals only.

Webhook retry stack → one intent

DIY webhooks

@app.post("/webhooks/orders")
def receive(req):
    verify_hmac(req)  # + idempotency table
    process_order(req.json())
# sender: backoff, jitter, DLQ...

AXME

intent_id = client.send_intent({
  "intent_type": "intent.order.process.v1",
  "payload": {"order_id": "ORD-142"},
})
result = client.wait_for(intent_id)

Migration FAQ

Can I run AXME alongside existing webhooks?
Yes — parallel running is the recommended first phase; retire endpoints when intent history is trusted.
What about systems that only support webhooks?
Use push delivery — AXME handles retry and signing; you implement one handler, not a farm per workflow.
Do receivers still need HTTP servers?
Only if they choose push — stream, poll, and inbox modes avoid receiver-side endpoints.

Related resources

Ship your first durable agent — in under 10 minutes.

Free tier. No credit card. Self-host or hosted — your choice.

Start free now Read the docs