Skip to main content

Atlas Transaction Webhooks

The Atlas Webhooks API delivers asynchronous, real-time HTTP POST notifications to your webhook listener whenever payment transactions progress through clearing, settlement, dispute, or failure lifecycles.

Instead of continuously polling payment status endpoints, your server can subscribe to webhooks to update client orders, release goods, credit merchant ledgers, and trigger automated reconciliation workflows.

sequenceDiagram
autonumber
actor Customer as Customer / Payer
participant Bank as Clearing Partner (ClearBank / SEPA / SWIFT)
participant Atlas as Atlas Payment Service
participant Listener as Your Webhook Listener

Customer->>Bank: Send Inbound Deposit (IBAN)
Bank->>Atlas: Settlement Notification
Atlas->>Listener: POST /webhook (ibanToWallet.completed)
Note over Listener: Validate X-Atlas-Signature & Process
Listener-->>Atlas: 200 OK
Atlas->>Atlas: Mark Webhook Delivery as Success

Supported Webhook Categories

The Transaction Webhooks API provides dedicated payload schemas for each transaction type and status combination:

CategoryEvent NameStateDescription
IBAN to WalletibanToWallet.requestedrequestedInbound deposit recognized, awaiting settlement.
IBAN to WalletibanToWallet.completedcompletedFunds settled and credited to your virtual IBAN wallet.
IBAN to WalletibanToWallet.disputeddisputedInbound deposit recalled or disputed by originating bank.
IBAN to WalletibanToWallet.archivedarchivedInbound deposit cancelled or archived.
Wallet to WalletwalletToWallet.completedcompletedInternal transfer finished (fires for both sender & receiver).
Wallet Creditwallet.credit.successcompletedVPay inter-company payment credited to receiver wallet.
Wallet to AccountwalletToAccount.requestedrequestedOutbound payout validated and queued for bank rails.
Wallet to AccountwalletToAccount.completedcompletedOutbound payout successfully settled to beneficiary bank.
Wallet to AccountwalletToAccount.archivedarchivedOutbound payout failed or cancelled by clearing rail.
Wallet to AccountwalletToAccount.refundedrefundedOutbound payout returned and principal refunded to wallet.

Security & Signature Verification

Every incoming webhook contains security headers to verify message authenticity and prevent replay attacks:

POST /api/webhooks/atlas HTTP/1.1
Host: your-api-domain.com
Content-Type: application/json
X-Atlas-Signature: t=1705315800,v1=9b7c8932ef216f40b2a8d3...
X-Atlas-Delivery-Id: 550e8400-e29b-41d4-a716-446655440000

Verification Algorithm

  1. Extract timestamp t and signature v1 from the X-Atlas-Signature header.
  2. Ensure t is within an acceptable window (e.g. 5 minutes) to protect against replay attacks.
  3. Compute the HMAC SHA-256 digest of ${t}.${rawRequestBody} using your Webhook Secret Key.
  4. Compare the computed signature using a constant-time comparison.
import crypto from 'crypto';

function verifyAtlasWebhook(rawBody, signatureHeader, secret) {
const parts = Object.fromEntries(signatureHeader.split(',').map(s => s.split('=')));
const timestamp = parts.t;
const signature = parts.v1;

// Check timestamp freshness (5 minutes)
const tolerance = 5 * 60;
if (Math.abs(Date.now() / 1000 - parseInt(timestamp, 10)) > tolerance) {
throw new Error('Webhook timestamp too old or in future');
}

// Compute expected HMAC
const payloadToSign = `${timestamp}.${rawBody}`;
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(payloadToSign)
.digest('hex');

return crypto.timingSafeEqual(
Buffer.from(signature, 'hex'),
Buffer.from(expectedSignature, 'hex')
);
}

Response Expectations & Retries

  • Immediate Acknowledgment: Return an HTTP 200 OK or 204 No Content status within 5 seconds of receiving the notification.
  • Asynchronous Processing: Queue intensive operations (such as generating PDFs or emailing users) for background worker processing.
  • Retry Schedule: If your listener returns a non-2xx status or times out, Atlas retries delivery up to 8 times using exponential backoff with jitter (initial retry after 30s, scaling up to 24 hours).
  • Idempotent Handling: Use the unique reference or id field in the payload to guard against processing duplicate deliveries.