---
title: "Register unwatched DRE wallets on the Alchemy webhook (cron)"
method: POST
path: "/cron/webhook-addresses"
tags: ["cron"]
---

# Register unwatched DRE wallets on the Alchemy webhook (cron)

`POST /cron/webhook-addresses`

Expected schedule: **every 5 minutes**.

Selects up to **500** `user_wallets` rows with `status = ACTIVE` and `webhook_registered_at IS NULL`, registers them on every configured Alchemy Address Activity webhook in a single request each, and stamps the ones every webhook accepted.

Registration at signup is best-effort, so this is what heals wallets whose call failed — without it they are never watched and their deposits produce no activity row. Deliberately capped at one Alchemy request per run so a large pending backlog drains steadily instead of bursting the API. Returns **200** with `{ pending, attempted, registered, failed }`; `pending` is the outstanding count *before* this run and is the metric to alert on. Requires `X-CRON-API-KEY` matching `CRON_API_KEY`.

## Headers

- `X-CRON-API-KEY` string, required

## Response `200`

Reconciliation ran; body reports pending/attempted/registered/failed counts.

## Other responses

- `401` — Missing or invalid `X-CRON-API-KEY`.

---

[API](https://skmtc.dev/dre/apis/dre-api.md) · [All operations](https://skmtc.dev/dre/apis/dre-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/dre/dre-api/revisions/5d14beb9482b/schema)
