Direct Debit API

Manage direct debit authorizations for recurring payments via bank accounts.

Direct Debit API https://paystack.com/docs/payments/direct-debit/

class djpaystack.api.direct_debit.DirectDebitAPI(client)[source]

Bases: BaseAPI

Paystack Direct Debit API

Direct debit allows a business to debit a customer’s bank account once the customer has given consent via a mandate authorization. Currently available for businesses in Nigeria only.

initialize_authorization(email: str, channel: str = 'direct_debit', callback_url: str | None = None, account: Dict[str, str] | None = None, address: Dict[str, str] | None = None) Dict[str, Any][source]

Initiate a direct debit authorization request.

The response contains a redirect_url that you redirect the customer to give consent to your request.

Parameters:
  • email – Customer’s email address

  • channel – Authorization channel (default: ‘direct_debit’)

  • callback_url – URL to redirect customer after consent

  • account – Optional dict with ‘number’ and ‘bank_code’ to pre-fill customer’s bank details

  • address – Optional dict with ‘state’, ‘city’, ‘street’ to pre-fill customer’s address

Returns:

Response containing redirect_url for customer consent

verify_authorization(reference: str) Dict[str, Any][source]

Verify the status of a direct debit authorization.

Listen to webhook events (direct_debit.authorization.created, direct_debit.authorization.active) for real-time status updates.

Parameters:

reference – Reference from the initialization request

Returns:

Authorization details including status

activation_charge(customer_id: str, authorization_id: int) Dict[str, Any][source]

Trigger an activation charge for a single customer whose authorization is stuck in a pending status.

This causes a debit of NGN 50 on the customer’s account to confirm it can be debited. The amount is refunded after the check.

Parameters:
  • customer_id – Customer ID or code

  • authorization_id – The authorization ID to activate

Returns:

Activation charge response

bulk_activation_charge(customer_ids: List[int]) Dict[str, Any][source]

Trigger activation charges for multiple customers at once.

Parameters:

customer_ids – List of customer IDs to activate

Returns:

Bulk activation charge response

Quick Reference

from djpaystack import PaystackClient
client = PaystackClient()

# Initialize authorization (sends OTP to customer)
client.direct_debit.initialize_authorization(
    email='customer@example.com',
    bank_code='058',
    account_number='0123456789',
)

# Verify with OTP
client.direct_debit.verify_authorization(reference='ref-from-init')

# Activation charge (small debit to activate)
client.direct_debit.activation_charge(customer_id='CUS_xxxxx')

# Bulk activation charge
client.direct_debit.bulk_activation_charge(customer_ids=['CUS_xxx', 'CUS_yyy'])

Webhook Events

  • direct_debit.authorization.created — Authorization created

  • direct_debit.authorization.active — Authorization activated and ready for use