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 TypeLimit Amount MaxLimit 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

  1. Customer must be enrolled successfully.
  2. Customer must have card activated/Pin set.
  3. 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

  1. 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”).
  2. Call the Get OD Eligibility API to see what OD cushion tier the customer qualifies for.
  3. 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

  1. Customer must be Opted-in to ODP.
  2. Call GET Account Features API to see what the customers OD cushion tier is.
  3. 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

  1. Customer must have a OD cushion tier applied to their account.
  2. Call Get OD Eligibility API to see what new OD cushion tier the customer qualifies for.
  3. 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 nameTypeValueDescription
programCodestringvariesThis property identifies the program type of the account to be created.
accountIdentifierstringvariesThe Account Identifier.

Headers

Header nameTypeValueDescription
X-GD-RequestIduuidvariesThis property is used to uniquely identify each request.

Response

{
  "qualifiedTier": 0,
  "overdraftCushionLimit": "string",
  "isSuspend":false,
  "currentTier":0,
  "overdraftFeatureConditions": [
        {
            "feature": 55,
            "featureName": "Od1",
            "overdraftCondition": {
                "periodDays": 0,
                "ddCount": 1,
                "totalDDAmount": 0.0
            },
            "overdraftFee": {
                "feeAmount": 0.0,
                "gracePeriodInHour": 0
            },
            "cushionLimit": 10.0
        },
        {
            "feature": 56,
            "featureName": "Od2",
            "overdraftCondition": {
                "periodDays": 35,
                "ddCount": 2,
                "totalDDAmount": 200.0
            },
            "overdraftFee": {
                "feeAmount": 15.0,
                "gracePeriodInHour": 24
            },
            "cushionLimit": 100.0
        },
        {
            "feature": 57,
            "featureName": "Od3",
            "overdraftCondition": {
                "periodDays": 35,
                "ddCount": 2,
                "totalDDAmount": 1000.0
            },
            "overdraftFee": {
                "feeAmount": 15.0,
                "gracePeriodInHour": 24
            },
            "cushionLimit": 200.0
        },
        {
            "feature": 81,
            "featureName": "Od4",
            "overdraftCondition": {
                "periodDays": 35,
                "ddCount": 2,
                "totalDDAmount": 3000.0
            },
            "overdraftFee": {
                "feeAmount": 15.0,
                "gracePeriodInHour": 24
            },
            "cushionLimit": 300.0
        }
    ],
  "responseDetails": [
    {
      "code": 0,
      "subCode": 0,
      "description": "string",
      "url": "string"
    }
  ]
}

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 nameTypeValueDescription
programCodestringvariesThis property identifies the program type of the account to be created.
accountIdentifierstringvariesThe Account Identifier.

Headers

Header nameTypeValueDescription
X-GD-RequestIduuidvariesThis 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 StatusCodeCodeSubCodeDescription
400Terms acceptances not valid.
40010000Program code is unknown.
4004105Account Closed.
400557Required terms cannot be opted out.
400558Terms 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 nameTypeValueDescription
programCodestringvariesThis property identifies the program type of the account to be created.
accountIdentifierstringvariesThe Account Identifier.
featureIdstringvariesThe unique identifier of the feature to be updated.

FeatureIds: od1, od2, od3, od4

Headers

Header nameTypeValueDescription
X-GD-RequestIduuidvariesThis 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 StatusCodeCodeSubCodeDescription
400555The feature is not eligible. Overdraft terms not accepted.
40010000Failed to get overdraft eligibility.
400550Required Terms not accepted.
4004105AccountStatus is closed or restricted.
4003500Invalid Feature Id.

Allows Partners to retrieve the active features that customers are enrolled in.

Route

GET /programs/{programCode}/accounts/{accountIdentifier}/features

Route Parameters

Parameter nameTypeValueDescription
programCodestringvariesThis property identifies the program type of the account to be created.
accountIdentifierstringvariesThe Account Identifier.

Headers

Header nameTypeValueDescription
X-GD-RequestIduuidvariesThis 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 StatusCodeCodeSubCodeDescription
4004105AccountStatus is closed or restricted.

Route

GET /programs/{programCode}/accounts/{accountIdentifier}/overdraftTransactions

Route Parameters

Parameter nameTypeValueDescription
programCodestringvariesThis property identifies the program type of the account to be created.
accountIdentifierstringvariesThe Account Identifier.
startDatequery stringvariesThe start date to search. Format is YYYY-MM-DD.
endDatequery stringvariesThe end date to search. Format is YYYY-MM-DD.

Headers

Header nameTypeValueDescription
X-GD-RequestIduuidvariesThis 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 StatusCodeCodeSubCodeDescription
400350AccountIdentifier is not formatted correctly.
400Start 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 nameTypeValueDescription
programCodestringvariesThis property identifies the program type of the account to be created.
accountIdentifierstringvariesThe Account Identifier.
startDatequery stringvariesThe start date to search. Format is YYYY-MM-DD.
endDatequery stringvariesThe end date to search. Format is YYYY-MM-DD.

Headers

Header nameTypeValueDescription
X-GD-RequestIduuidvariesThis 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 StatusCodeCodeSubCodeDescription
400350AccountIdentifier is not formatted correctly.
400Start 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.