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