Webhooks Overview

Webhooks Overview

Webhooks (also called Publish Notifications, or PNs) are how the BaaS platform delivers real-time event notifications to your system. Rather than polling for state changes, you register an HTTPS endpoint and Green Dot POSTs a structured payload to it whenever a relevant event occurs — a card transaction, an account status change, an ACH update, and so on.

Your endpoint is configured per event type, so you can route different event categories to different services, or fan them all into a single handler. Either approach is valid.


How It Works

  1. An event occurs on the platform (e.g., a POS authorization, an account status change).
  2. The BaaS platform constructs a webhook payload and POSTs it to your pre-configured endpoint over HTTPS.
  3. Your endpoint processes the payload and responds with HTTP 200 or 201 and a valid JSON body (see Response Format below).
  4. Green Dot logs the result. Non-2xx responses trigger the retry logic described below.

PCI note: Webhook payloads never include full PANs, CVVs, PINs, or expiration dates. Only the BIN and last 4 digits of the PAN are included.


Outbound HTTP Headers

Every webhook request from Green Dot includes these headers:

HeaderValue
Acceptapplication/json, text/plain, text/html
Accept-Encodinggzip, deflate
User-Agentgreendot-baas/3.0.0
x-GD-RequestIdUnique request identifier (echo this back in your response)
API-KeyYour program's API key

Authentication

Before posting a webhook, Green Dot authenticates to your endpoint. The following authentication types are supported:

  • OAuth — Standard client credentials flow
  • FormOAuth — OAuth over form-encoded body
  • PartnerOAuth — Partner-managed OAuth
  • FormUrlEncodedOAuth — URL-encoded form variant
  • Certificate — Mutual TLS (mTLS)

API keys for PIE (test) and Production environments must be provided to Green Dot via a secure channel.

Example: OAuth token request

curl --location 'https://bank-events.XXXXX.com/api/v1/token' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'client_id=CLIENTID' \
  --data-urlencode 'client_secret=SECRET' \
  --data-urlencode 'grant_type=client_credentials' \
  --data-urlencode 'scope=post:webhook'

Example response

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "expires_in": 3600,
  "token_type": "Bearer",
  "scope": "post:webhook"
}

Event Types

The platform emits webhooks for the following event categories:

Event TypeTrigger
transactionCard authorizations, postings, and multi-clearing transactions
statementReadyE-statement is available for an account
accountUpdatedAccount status changes
interestPaidInterest credited to a purse
achTransferACH transfer initiated or status updated
failedTransferRetried transaction fails due to NSF
nocAlertGreen Dot receives an ACH Notification of Change (NOC)
userUpdatedUser profile updated (name, address, email, phone) — delta only
cardUpdatedCard ordered (new or replacement)
checkUpdatedCheck declined, approved, posted, or returned
eWalletToken activations, completions, and status updates
billPaymentBill pay debit, failed debit, or credit
paperCheckPaper check clearing status updated
paperCheckOrderPaper check order initiated, ordered, declined, or not received
mailTrackingPhysical card delivery stages
promotionalPromotional transaction processed
mrdcCheckDepositMobile remote deposit capture (MRDC) check deposit fails
p2pTransferPerson-to-person transfer processed
atmPinUpdateSuccessful ATM PIN change
ammAuto Money Movement — ACH In, date-driven, failed events, rule expiry reminders
adjustmentFinalStatusAdjustment exhausted all retries
directDepositSwitchEvents for Green Dot's Direct DD Switch enrollment feature

Multi-clearing transactions: A single webhook can contain multiple events (one per clearing) in the same POST body.


Response Format

Your endpoint must respond with HTTP 200 or 201 and a JSON body. Use the response body to return a correlation ID — this helps Green Dot's support team trace issues on your end.

Required response headers

Echo back the x-GD-RequestId header that Green Dot sent in the request.

Example response

{
  "responseDetails": [
    {
      "code": 0,
      "description": "80172fdd-012f-4635-bb4f-dd71a637cc92",
      "subCode": 0
    }
  ]
}

Response Code Reference

Sub-CodeHTTP StatusNameDescription
02xxSUCCESSOperation successful.
10404NOT_FOUNDResource not found.
100400MALFORMED_SCHEMAPayload could not be parsed.
200400INVALID_REQUESTRequest was invalid. See description for details.
300400REQUIRED_PROPERTY_MISSINGA required field is absent or empty.
350400INVALID_DATA_TYPEWrong data type (e.g., string where integer expected).
400400INVALID_FORMATString or number format is invalid.
500500INVALID_FIELD_LENValue is shorter or longer than the allowed length.
503503DOWNSTREAM_OFFLINE_NO_RETRYDownstream system unavailable for extended/unknown period. Do not auto-retry.
600400DOWNSTREAM_OFFLINE_RETRYDownstream system transiently unavailable. May auto-retry.
610400INVALID_ENUM_VALUEValue not in the allowable set.
620400INVALID_AMOUNTAmount value is invalid.
630400INVALID_DATE_RANGEDate is outside the allowable range.
640400INVALID_PROPERTYProperty is not valid in this request context.
700400INVALID_STRING_CHARACTERString contains an invalid character.
720400INVALID_DATE_FORMATMust be ISO 8601: YYYY-MM-DD
725400INVALID_UTC_DATETIME_FORMATMust be ISO 8601: YYYY-MM-DDTHH:MM:SS.SSSZ
730400INVALID_DATETIME_FORMAT_NO_TZMust be ISO 8601: YYYY-MM-DDTHH:MM:SS.SSS (timezone unknown)
740400INVALID_DATETIME_FORMAT_TZ_OFFSETMust be ISO 8601: YYYY-MM-DDTHH:MM:SS.SSS±hh:mm
750400INVALID_HTTP_URLInvalid HTTP URL format.
1000200/400INVALID_EMAIL_FORMATInvalid email format.
10602xxVALUE_DOES_NOT_EXISTObject identifier not found in the system.
n/a5xxDUPLICATE_RESOURCEResource already exists based on unique identifiers.
n/a5xxGENERAL_UNEXPECTED_ERRORCatch-all for unexpected system errors.

Retry Behavior

This feature must be explicitly requested and configured per partner.

When enabled, failed webhook deliveries are automatically retried on a scheduled basis (initially hourly, for up to 24 hours) until they succeed or all attempts are exhausted.

What triggers a retry:

  • HTTP 5xx response
  • Request timeout
  • HTTP 401 or 403 (retried once the underlying auth issue is resolved)
  • HTTP 0 / hard failures: DNS resolution failure, connection failure, SSL errors

Configuration note: Retry behavior is tied to release boundaries — it cannot be toggled on/off outside of a release cycle. Async retry is available for all webhook types.


Webhook Reconciliation Files

Contact your Green Dot Representative to request this feature.

Partners configured for reconciliation receive a daily file via SFTP each morning containing all transaction webhooks sent the previous day. This enables you to verify delivery completeness and catch any gaps.

File format: CSV, PGP-encrypted before drop. You'll need the appropriate decryption keys configured in advance.

SFTP access: Green Dot provisions a partner-specific SFTP account on its server. Coordinate with your Green Dot Representative to get credentials.

Reconciliation File Fields

The file has a human-readable header row (ignorable) followed by fixed-width records.

FieldDescriptionExample
accountIdentifierAccount identifiere1b7c5b4-14ab-4f64-bf89-9403a4ba8c4f
eventIdentifierEvent identifiera0c7680f-8e0e-44ad-a7c3-f73cb95c8a08
eventTypeType of eventtransaction
eventDateTimeTimestamp of the event2025-03-11 06:46:17.1010000
transactionIdentifierTransaction identifiercf27e0e7-eaf3-4421-93b3-012fc9ab46aa
parentTransactionIdentifierParent transaction identifier23aeb5fe-102a-47b5-bd95-856be896cc0e
transactionTypeTransaction typepurchase, adjustment, partnerTransferIn, atmWithdrawal, cashReload
transactionStatusTransaction statuscompleted, declined
binBIN of the payment instrument346596
last4PanLast 4 digits of the PAN8978
transactionAmountTransaction amount15.81
currencyTransaction currencyUSD
isCredittrue if credit, false if debittrue
retrievalReferenceNumberNetwork RRN459272062104469
purseIdentifierPurse identifier0e8574a0-12ef-4506-918c-c1d7fc93693a
purseTypePurse typeprimary, savings
availableBalanceAvailable balance50.20
availableBalanceAsOfDateTimeBalance timestamp2025-03-11 06:46:17.1010000
ledgerBalanceLedger balance50.20
ledgerBalanceAsOfDateTimeLedger balance timestamp2025-03-11 06:46:17.1010000
postedDateTimeNetwork posting timestamp2025-03-11 06:46:17.1010000
feeAmountFee amount1.00
feeCurrencyFee currencyUSD
feeTypeFee typebankOTCFee
feeDescriptionFee descriptionBank OTC Fee
authorizationDateTimeAUTH transaction timestamp2025-03-10 06:46:17.1010000
cashBackAmountCashback amount, if any2.50
localTransactionAmountAmount in local currency25.12
localTransactionCurrencyLocal currency codeCDN
merchantIdMerchant identifierMC12412
addressLine1Merchant street address1 Blueberry Street
postalCodeMerchant postal code91001
merchantNameMerchant nameStarbucks Inc
merchantCityMerchant cityPasadena
merchantStateProvMerchant state/provinceCA
merchantIndustryCodeMCC code5999, 6011
merchantIndustryCategoryMCC categoryMiscellaneous Stores
merchantIndustryDescriptionMCC descriptionMiscellaneous and speciality retail outlets
authorizationStatusIndicatorAuthorization status indicator
holdExpirationDateAuth hold expiration date
declineReasonDecline reason, if applicableOther
eciE-commerce indicator
isPartialAuthtrue if partial authtrue
approvalCodeApproval code
transferIdentifierTransfer identifier
adjustmentTypeAdjustment typeprovisionalDispute
descriptionFree-text description
transferTypeTransfer typeachPull, swipeReload, adjustment
dpanIdentifierDevice PAN (network token) identifier — represents a card provisioned to a digital wallet (Apple Pay, Google Pay, Samsung Wallet, etc.)08d9e746-6cda-40b6-84ce-d3be86a48797
fpanIdentifierFunding PAN identifier — the physical card's account numberb337df5f-e056-4ca2-868f-3055b93333a8
parPayment Account Reference — a persistent identifier linking all tokens (dPANs) back to the same underlying fPANV0010013818032485958373336929
last4DpanLast 4 digits of the dPAN2040
walletWallet providerGoogle, Apple, Samsung
tokenStatusToken statusActive
achCategoryCodeACH category codepr
bankNameBank nameGDot Bank
accountNumberACH account number115608195748333
routingNumberRouting number123456789
firstNameAccount holder first name
lastNameAccount holder last name
accountTypeAccount typeChecking
transactionTypeDescriptionTransaction type labelATM Withdrawal, Cash Deposit
authTypeAuthorization type
requestAuthorizationAmountRequested authorization amount
localDateTimeLocal date/time
postingDateTimePosting date/time
retailMerchantNameRetail merchant nameWalmart Supercenter
retailStoreNumberRetail store number2252
retailCityRetail cityCentreville
retailStateRetail stateMD
adjustmentIdentifierAdjustment identifiere1b7c5b4-14ab-4f64-bf89-9403a4ba8c4f
isMultiClearingtrue if this auth has multiple clearings

Did this page help you?