Overdraft Protection (ODP)
Overview
An overdraft is defined as the additional amount a customer can spend beyond a zero balance, resulting in a negative balance. Eligible customers must be able to opt-in and receive overdraft protection. Available to customers who are US citizens or legal residents, in each case with a valid physical address within the 50 United States and the District of Columbia. Customers may incur certain fees if they do not replenish their account to at least $0 within a specified timeframe, often referred to as the cool-down period, which typically lasts around 7 days + 1 grace period.
Overdraft: $15 for each transaction that is greater than $5 and overdraws the Account by more than $10, up to a maximum of ten overdraft fees per monthly statement period.
Grace Period: 24 hours.
OD Grace Period Rules
- Grace Period Set for Account → When First OD Eligible Auth that takes account Available balance <0.
- Grace Period Reset for Account.
- When any Credit Transaction takes account balance >=0 within 24hrs of existing grace period.
- When we receive Auth reversal with matching RetreivalReferenceNumber/ApprovalCode and IsReversal=1.
Overdraft Cushion Tiers
There are 4 Overdraft Cushion Tiers we refer to as OD1, OD2, OD3, OD4.
Limit Type | Limit Amount Max | Limit Amount Min |
---|---|---|
OD1 Cushion Limit | $10.00 | $0.00 |
OD2 Cushion Limit | $100.00 | $0.00 |
OD3 Cushion Limit | $200.00 | $0.00 |
OD4 Cushion Limit | $300.00 | $0.00 |
Prerequisites
- Customer must be enrolled successfully.
- Customer must have card activated/Pin set.
- Customer must have direct deposit setup AND must have at least 1 direct deposit transaction.
The OD Cushion Tier that the customer qualifies for depends on Direct Deposit $ Amount.
Flows
Opt-In
- To Opt-in the customer needs to accept the terms and conditions for overdraft. (Make call to the Update Account API where the termsIdentifier=”overdraft”).
- Call the Get OD Eligibility API to see what OD cushion tier the customer qualifies for.
- Call the Update Account Feature API using the OD cushion tier from OD Eligibility API to Add this Feature to the customers account.
Opt-Out
- Customer must be Opted-in to ODP.
- Call GET Account Features API to see what the customers OD cushion tier is.
- Call the Update Account Feature API using the OD cushion tier from GET Account Features API to Remove the Feature from the customers account.
Upgrade/Downgrade OD Cushion Tier
- Customer must have a OD cushion tier applied to their account.
- Call Get OD Eligibility API to see what **new **OD cushion tier the customer qualifies for.
- Call the Update Account Feature API using the OD cushion tier from OD Eligibility API to upgrade/downgrade this Feature on the customers account. The previous OD Cushion tier will be removed.
Overdraft Protection Amount
To get the remaining ODP balance the partner is responsible for calculating this information.
Calculation: Remaining ODP balance = OD tier cushion limit + Available Balance

ODP APIs
Perform OD Eligibility Check Based on Inquiry Date.
Route
GET /programs/{programCode}/accounts/{accountIdentifier}/odEligibilities
Route Parameters
Parameter name | Type | Value | Description |
---|---|---|---|
programCode | string | varies | This property identifies the program type of the account to be created. |
accountIdentifier | string | varies | The Account Identifier. |
Headers
Header name | Type | Value | Description |
---|---|---|---|
X-GD-RequestId | uuid | varies | This property is used to uniquely identify each request. |
Response
{
"qualifiedTier": 1,
"overdraftCushionLimit": "-$10",
"currentTier": 1,
"isSuspend": false,
"overdraftFeatureConditions": [
{
"feature": "Od1",
"overdraftCondition": {
"periodDays": 0,
"ddCount": 1,
"totalDDAmount": 0.0
},
"overdraftFee": {
"feeamount": 0.0,
"graceperiodinhour": 0
},
"cushionLimit": 10.0
},
{
"feature": "Od2",
"overdraftCondition": {
"periodDays": 35,
"ddCount": 2,
"totalDDAmount": 200.0
},
"overdraftFee": {
"feeamount": 15.0,
"graceperiodinhour": 24
},
"cushionLimit": 100.0
},
{
"feature": "Od3",
"overdraftCondition": {
"periodDays": 35,
"ddCount": 2,
"totalDDAmount": 1000.0
},
"overdraftFee": {
"feeamount": 15.0,
"graceperiodinhour": 24
},
"cushionLimit": 200.0
},
{
"feature": "Od4",
"overdraftCondition": {
"periodDays": 35,
"ddCount": 2,
"totalDDAmount": 3000.0
},
"overdraftFee": {
"feeamount": 15.0,
"graceperiodinhour": 24
},
"cushionLimit": 300.0
}
],
"responseDetails": [
{
"code": 0,
"subCode": 0,
"description": "Success",
"url": "http://tbd"
}
]
}
This endpoint can be used to assign account identifiers to customer accounts or to opt in or out of any terms or agreements that were agreed to or declined during enrollment
Route
PUT /programs/{programCode}/accounts/{accountIdentifier}
Route Parameters
Parameter name | Type | Value | Description |
---|---|---|---|
programCode | string | varies | This property identifies the program type of the account to be created. |
accountIdentifier | string | varies | The Account Identifier. |
Headers
Header name | Type | Value | Description |
---|---|---|---|
X-GD-RequestId | uuid | varies | This property is used to uniquely identify each request. |
Request
To accept the overdraft terms and conditions the termsIdentifier
=”overdraft”. All Terms Identifiers can be found here.
{
"encryptedEmail": {
"version": "string",
"ephemeralPublicKey": "string",
"publicKeyHash": "string",
"data": "string"
},
"termsAcceptances": [
{
"termsIdentifier": "string",
"termsAcceptanceDateTime": "string",
"termsAcceptanceFlag": true
}
],
"partnerAccountIdentifier": "string"
}
Response
{
"responseDetails": [
{
"code": 0,
"subCode": 0,
"description": "string",
"url": "string"
}
]
}
Error Response Codes
Http StatusCode | Code | SubCode | Description |
---|---|---|---|
400 | Terms acceptances not valid. | ||
400 | 1000 | 0 | Program code is unknown. |
400 | 4 | 105 | Account Closed. |
400 | 5 | 57 | Required terms cannot be opted out. |
400 | 5 | 58 | Terms cannot be opted out because feature is still in use. |
Enroll or Unenroll a Customer into or from an Additional Account Feature.
Route
PUT /programs/{programCode}/accounts/{accountIdentifier}/features/{featureId}
Route Parameters
Parameter name | Type | Value | Description |
---|---|---|---|
|
string |
varies |
This property identifies the program type of the account to be created. |
|
string |
varies |
The Account Identifier. |
|
string |
varies |
The unique identifier of the feature to be updated. FeatureIds: od1, od2, od3, od4 |
Headers
Header name | Type | Value | Description |
---|---|---|---|
X-GD-RequestId | uuid | varies | This property is used to uniquely identify each request. |
Request
{
"authorize": true
}
Response
{
"responseDetails": [
{
"code": 0,
"subCode": 0,
"description": "string",
"url": "string"
}
]
}
Error Response Codes
Http StatusCode | Code | SubCode | Description |
---|---|---|---|
400 | 5 | 55 | The feature is not eligible. Overdraft terms not accepted. |
400 | 1000 | 0 | Failed to get overdraft eligibility. |
400 | 55 | 0 | Required Terms not accepted. |
400 | 4 | 105 | AccountStatus is closed or restricted. |
400 | 350 | 0 | Invalid Feature Id. |
Allows Partners to retrieve the active features that customers are enrolled in.
Route
GET /programs/{programCode}/accounts/{accountIdentifier}/features
Route Parameters
Parameter name | Type | Value | Description |
---|---|---|---|
programCode | string | varies | This property identifies the program type of the account to be created. |
accountIdentifier | string | varies | The Account Identifier. |
Headers
Header name | Type | Value | Description |
---|---|---|---|
X-GD-RequestId | uuid | varies | This property is used to uniquely identify each request. |
Response
{
"features": [
"string"
],
"odTier": {
"odTier": "string",
"odTierDescription": "string",
"odCushionLimit": "string"
},
"responseDetails": [
{
"code": 0,
"subCode": 0,
"description": "string",
"url": "string"
}
]
}
Error Response Codes
Http StatusCode | Code | SubCode | Description |
---|---|---|---|
400 | 4 | 105 | AccountStatus is closed or restricted. |
Route
GET /programs/{programCode}/accounts/{accountIdentifier}/overdraftTransactions
Route Parameters
Parameter name | Type | Value | Description |
---|---|---|---|
programCode | string | varies | This property identifies the program type of the account to be created. |
accountIdentifier | string | varies | The Account Identifier. |
startDate | query string | varies | The start date to search. Format is YYYY-MM-DD. |
endDate | query string | varies | The end date to search. Format is YYYY-MM-DD. |
Headers
Header name | Type | Value | Description |
---|---|---|---|
X-GD-RequestId | uuid | varies | This property is used to uniquely identify each request. |
Response
{
"accountIdentifier": "string",
"overdraftTransactions": [
{
"establishmentCategory": "string",
"establishmentName": "string",
"transactionDate": "2025-04-21T22:47:24.140Z",
"transactionAmount": 0,
"overdraftFee": 0,
"gracePeriodDate": "2025-04-21T22:47:24.140Z",
"nextOdpPeriod": "2025-04-21T22:47:24.140Z",
"isNegativeOver45Days": true,
"MerchantCategoryCode": "string",
"featureKey": 0,
"isReversal": true
}
],
"totalAllowedTransactions": "string",
"lastTransactionDate": "2025-04-21T22:47:24.140Z",
"accountSubscriptionReinstatementReasonKey": "string",
"responseDetails": [
{
"code": 0,
"subCode": 0,
"description": "string",
"url": "string"
}
]
}
Error Response Codes
Http StatusCode | Code | SubCode | Description |
---|---|---|---|
400 |
350 |
AccountIdentifier is not formatted correctly. |
|
400 |
Start Date is required. Start Date must be a valid date in the format YYYY-MM-DD. End Date is required. End Date must be greater than Start Date. |
Route
GET /programs/{programCode}/accounts/{accountIdentifier}/overdraftFeeAuthTransactions
Route Parameters
Parameter name | Type | Value | Description |
---|---|---|---|
programCode | string | varies | This property identifies the program type of the account to be created. |
accountIdentifier | string | varies | The Account Identifier. |
startDate | query string | varies | The start date to search. Format is YYYY-MM-DD. |
endDate | query string | varies | The end date to search. Format is YYYY-MM-DD. |
Headers
Header name | Type | Value | Description |
---|---|---|---|
X-GD-RequestId | uuid | varies | This property is used to uniquely identify each request. |
Response
{
"accountIdentifier": "string",
"overdraftTransactions": [
{
"establishmentCategory": "string",
"establishmentName": "string",
"transactionDate": "2025-04-21T22:51:10.498Z",
"transactionAmount": 0,
"overdraftFee": 0,
"gracePeriodDate": "2025-04-21T22:51:10.498Z",
"nextOdpPeriod": "2025-04-21T22:51:10.498Z",
"isNegativeOver45Days": true,
"MerchantCategoryCode": "string",
"featureKey": 0,
"isReversal": true
}
],
"totalAllowedTransactions": "string",
"lastTransactionDate": "2025-04-21T22:51:10.498Z",
"accountSubscriptionReinstatementReasonKey": "string",
"responseDetails": [
{
"code": 0,
"subCode": 0,
"description": "string",
"url": "string"
}
]
}
Error Response Codes
Http StatusCode | Code | SubCode | Description |
---|---|---|---|
400 |
350 |
AccountIdentifier is not formatted correctly. |
|
400 |
Start Date is required. Start Date must be a valid date in the format YYYY-MM-DD. End Date is required. End Date must be greater than Start Date. |
Updated about 19 hours ago