Overview

Seamless ACH webhooks let your application receive real-time updates about key events—like payments being created, processed, or refunded. These updates are delivered via HTTP POST to a URL you configure.

🔔 Webhook Endpoint

Seamless ACH webhooks let your application receive real-time updates about key events—like payments being created, processed, or refunded. These updates are sent via HTTP POST to a URL you configure.

How It Works

  • Webhook URLs are tied to your API key. When you call this endpoint using your API key, Seamless ACH automatically associates the webhook with your account.
  • Events use version 2 format by default. Each webhook contains an event type and related data (e.g., transaction status or customer details).
  • Secure delivery. Seamless ACH uses basic access authentication and includes your secret API key in each request.

You can manage your webhook URLs in your Webhooks Settings.

Event Name: transaction.status vs check.changed

The event field's value depends on your account's webhook version:

  • Webhook V2 (default for new accounts): event is "transaction.status".
  • Webhook V1 (legacy accounts): event is "check.changed".

Both versions deliver the same payload — only the event field differs. Contact support to change your webhook version.

Acknowledging Webhooks

To confirm you’ve received a webhook, your server should respond with an HTTP 2xx status code.

  • Any other response (e.g., 3xx, 4xx, or 5xx) will be treated as a failed delivery.
  • Redirects or "Not Modified" responses will also count as failures.

ℹ️

Note: Events are only available for retrieval via the API for up to 7 days.


🧾 Sample Webhook Payload

{
  "event": "transaction.status",
  "check": {
    "id": "txn_7890abcd",
    "status": "failed",
    "error_code": "R01",
    "error_description": "Insufficient Funds",
    "error_explanation": "Available balance is not sufficient to cover the debit."
  },
  "timestamp": "2025-05-01T14:30:00Z"
}

 

On Webhook V1 accounts, event will be "check.changed" instead — the rest of the payload is identical.