Skip to main content
When a DEX or AMM program is upgraded, its swap math, fees or account layout can change with it. A bot built against the old version keeps sending transactions that now fail or fill worse. The Program Upgrades API tells you when that happens. It reads every watched program’s on-chain ProgramData account every minute and can call your webhook the moment a deploy slot changes. The same data is on the public tracker at sodae.io/program-upgrades.

Get programs

GET /programs returns every watched program with its latest deploy.
To fetch only some programs, pass their addresses as a comma-separated program_id:

Response

Programs are ordered by deploy_slot, newest first.

Webhooks

Set a webhook and Sodae sends a POST to your URL whenever a watched program’s deploy slot changes.
1

Add your URL

In the dashboard, open APIs → Program Upgrades and enter an https URL that is reachable from the public internet.
2

Store the secret

The signing secret is shown once, when the webhook is created or the secret is rotated. Keep it with your server’s other secrets.
3

Send a test

Send test delivers a ping event. The delivery and your server’s response show under Recent deliveries.

Events

program.upgraded
ping

Headers

Verifying the signature

Compute the HMAC over the raw request body, before any JSON parsing, and reject timestamps older than a few minutes.

Delivery and retries

  • Any 2xx response within 10 seconds counts as delivered. Redirects are not followed.
  • A failed delivery is retried after 30 seconds, 2 minutes, 10 minutes, 30 minutes and 2 hours. That makes 6 attempts in all; after the last, it is marked failed.
  • Queued deliveries and their retries are kept across restarts. A deploy that lands while the watcher itself is restarting is not sent as an event. /programs always shows the latest deploy, so if missing one matters, also compare deploy_slot from /programs on your side.

Errors