Mandates
Used to create EFT DO / (DebiCheck / Registered Mandate: authenticate), edit EFT DO / (DebiCheck / Registered Mandate: Update, Reauthorise or Cancel) and archive mandates.
When creating collections you can either submit a record with the customer, bank accounts and mandate details or create a mandate here and then assign a customer_id, bank_account_id and mandate_id to a collection record.
WARNING
Customers that are specified as companies (or have company business accounts) can only be assigned with Registered Mandate (RM) payment methods where the provider bank is ABSA or EFT DO payment methods. Company business bank accounts can not be processed via DebiCheck payment methods. Nedbank provided RM payment methods do not support company business accounts yet.
DebiCheck customers have to approve the mandates themselves whereas Registered Mandates only need to be approved by the bank.
Create
API call to create (DebiCheck / Registered Mandate: authenticate) new mandates(s) as single or batch records.
DebiCheck customers will have to approve the mandate from their phone. Registered Mandates customers will be authenticated with the bank and do not need any approval, likewise EFT customers do not need any approval either.
Path
POST /mandates/create
Request Body
{
"records": [{
"customer_id": "cus_q0lJckGcUQptaXODDb7sG",
"bank_account_id": "ban_xrf4nxBPH5bwjXIrl6Le5",
"payment_methods_id": "pam_9b_DTCrtPblUgNHodKAxB",
"mandate_status": "ACTIVE", // Not applicable to DebiCheck / Registered Mandates
"reference": "ABC123",
"contract_reference": "CTC24091900001",
"payment_industry": "ACCOUNT_REPAYMENT",
"amount": "45.00",
// required for recurring collections
"recurring": {
"process_day": 1,
"collection_interval": "MONTHLY",
"date_release": "2026-05-12"
},
// used with one-time collections
"one_time": {
"process_date": "2024-10-25"
},
// required if Payment Method is DebiCheck
"debicheck": {
"first_collection_amount": "50.45",
"first_collection_date": "2024-10-16",
"maximum_collection_amount": "60.00",
"allow_date_adjustment": true,
"allow_variable_amount": true,
"allow_payment_tracking": true,
"payment_tracking_max_days": 4,
"adjustment_category": "ANNUALLY", // only allowed when 'allow variable amount' is set to true
"adjustment_type": "RATE",
"adjustment_rate": "5.12345",
"adjustment_amount": "0.00",
"approval_window": "BATCH_TT2_APPROVE_BY_19H00_ON_DAY_2",
"mandate_authentication_code": "12345678" // only used with DebiCheck TT3 approval windows
},
// required if Payment Method is Registered mandates
"registered_mandate": {
"first_collection_amount": "50.45",
"first_collection_date": "2024-10-16",
"maximum_collection_amount": "60.00",
"allow_date_adjustment": true,
"allow_variable_amount": true,
"allow_payment_tracking": true,
"payment_tracking_max_days": 4
}
}]
}
Examples
One-time EFT Debit Order
{
"records": [{
"customer_id": "cus_q0lJckGcUQptaXODDb7sG",
"bank_account_id": "ban_xrf4nxBPH5bwjXIrl6Le5",
"payment_methods_id": "pam_9b_DTCrtPblUgNHodKAxB",
"mandate_status": "ACTIVE",
"contract_reference": "CTC24091900002",
"payment_industry": "ACCOUNT_REPAYMENT",
"amount": "45.00",
"one_time": {
"process_date": "2025-06-25"
}
}]
}
Recurring EFT Debit Order
{
"records": [{
"customer_id": "cus_q0lJckGcUQptaXODDb7sG",
"bank_account_id": "ban_xrf4nxBPH5bwjXIrl6Le5",
"payment_methods_id": "pam_9b_DTCrtPblUgNHodKAxB",
"mandate_status": "ACTIVE",
"contract_reference": "CTC24091900002",
"payment_industry": "ACCOUNT_REPAYMENT",
"amount": "45.00",
"recurring": {
"process_day": 1,
"collection_interval": "MONTHLY",
"date_release": "2026-05-12"
}
}]
}
One-time DebiCheck
{
"records": [{
"customer_id": "cus_q0lJckGcUQptaXODDb7sG",
"bank_account_id": "ban_xrf4nxBPH5bwjXIrl6Le5",
"payment_methods_id": "pam_5mX1n4WUS86B6iJ9aVK1w",
"contract_reference": "CTC24091900002",
"payment_industry": "ACCOUNT_REPAYMENT",
"amount": "45.00",
"one_time": {
"process_date": "2025-06-25"
},
"debicheck": {
"maximum_collection_amount": "60.00",
"allow_payment_tracking": true,
"payment_tracking_max_days": 4,
"approval_window": "BATCH_TT2_APPROVE_BY_19H00_ON_DAY_2"
}
}]
}
Recurring DebiCheck
{
"records": [{
"customer_id": "cus_q0lJckGcUQptaXODDb7sG",
"bank_account_id": "ban_xrf4nxBPH5bwjXIrl6Le5",
"payment_methods_id": "pam_5mX1n4WUS86B6iJ9aVK1w",
"contract_reference": "CTC24091900002",
"payment_industry": "ACCOUNT_REPAYMENT",
"amount": "45.00",
"recurring": {
"process_day": 1,
"collection_interval": "MONTHLY",
"date_release": "2026-05-12"
},
"debicheck": {
"first_collection_amount": "50.45",
"first_collection_date": "2025-05-01",
"maximum_collection_amount": "60.00",
"allow_date_adjustment": true,
"allow_variable_amount": true,
"allow_payment_tracking": true,
"payment_tracking_max_days": 4,
"adjustment_category": "ANNUALLY",
"adjustment_type": "RATE",
"adjustment_rate": "5.12345",
"adjustment_amount": "0.00",
"approval_window": "BATCH_TT2_APPROVE_BY_19H00_ON_DAY_2"
}
}]
}
Recurring DebiCheck TT3
{
"records": [{
"customer_id": "cus_q0lJckGcUQptaXODDb7sG",
"bank_account_id": "ban_xrf4nxBPH5bwjXIrl6Le5",
"payment_methods_id": "pam_5mX1n4WUS86B6iJ9aVK1w",
"contract_reference": "CTC24091900002",
"payment_industry": "ACCOUNT_REPAYMENT",
"amount": "45.00",
"recurring": {
"process_day": 1,
"collection_interval": "MONTHLY",
"date_release": "2026-05-12"
},
"debicheck": {
"first_collection_amount": "50.45",
"first_collection_date": "2025-05-01",
"maximum_collection_amount": "60.00",
"allow_date_adjustment": true,
"allow_variable_amount": true,
"allow_payment_tracking": true,
"payment_tracking_max_days": 4,
"adjustment_category": "ANNUALLY",
"adjustment_type": "RATE",
"adjustment_rate": "5.12345",
"adjustment_amount": "0.00",
"approval_window": "MAC_TT3_MESSAGE_AUTHENTICATION_CODE_CARD_AND_PIN",
"mandate_authentication_code": "12345678"
}
}]
}
One-time Registered Mandate
{
"records": [{
"customer_id": "cus_q0lJckGcUQptaXODDb7sG",
"bank_account_id": "ban_xrf4nxBPH5bwjXIrl6Le5",
"payment_methods_id": "pam_ak7lHmJ0a2fuD1q4M6b0q",
"contract_reference": "CTC24091900002",
"payment_industry": "ACCOUNT_REPAYMENT",
"amount": "45.00",
"one_time": {
"process_date": "2025-06-25"
},
"registered_mandate": {
"maximum_collection_amount": "60.00",
"allow_payment_tracking": true,
"payment_tracking_max_days": 4
}
}]
}
Recurring Registered Mandate
{
"records": [{
"customer_id": "cus_q0lJckGcUQptaXODDb7sG",
"bank_account_id": "ban_xrf4nxBPH5bwjXIrl6Le5",
"payment_methods_id": "pam_ak7lHmJ0a2fuD1q4M6b0q",
"contract_reference": "CTC24091900002",
"payment_industry": "ACCOUNT_REPAYMENT",
"amount": "45.00",
"recurring": {
"process_day": 1,
"collection_interval": "MONTHLY",
"date_release": "2026-05-12"
},
"registered_mandate": {
"first_collection_amount": "50.45",
"first_collection_date": "2025-05-01",
"maximum_collection_amount": "60.00",
"allow_date_adjustment": true,
"allow_variable_amount": true,
"allow_payment_tracking": true,
"payment_tracking_max_days": 4
}
}]
}
Request Parameters
Field | Required | Type | Description | Example |
|---|---|---|---|---|
| customer_id | Y | String(32) | Customer ID | cus_q0lJckGcUQptaXODDb7sG |
| bank_account_id | Y | String(32) | Bank Account ID | ban_xrf4nxBPH5bwjXIrl6Le5 |
| payment_methods_id | Y | String(32) | Payment Method ID | pam_ak7lHmJ0a2fuD1q4M6b0q |
| mandate_status | n/a | ENUM | (ACTIVE,ARCHIVED,CANCELLATION_PENDING,CANCELLATION_REJECTED,CANCELLATION_SUCCESSFUL,DISABLED,GENERATED,NO_REPLY,PENDING,REJECTED,SUSPENDED) | ACTIVE |
| reference | N | String(256) | Optional custom reference number | ABC123 |
| contract_reference | C | String(14) | Uniquely identifies the mandate with the bank and will show on bank statements. | CTC24091900001 |
| payment_industry | N | ENUM | Used by both EFT debit orders and DebiCheck. (ACCOUNT_REPAYMENT,BOND_REPAYMENT,CHARITABLE_OR_RELIGIOUS_CONTRIBUTIONS,H_P__REPAYMENT,INSURANCE_PREMIUM,LOAN_REPAYMENT_OTHER_THAN_MORTGAGE,MEDICAL_AID_FUND_CONTRIBUTION,PENSION_FUND_CONTRIBUTION,RENT_PROPERTY,RENTALLEASE_OTHER_THAN_PROPERTY,SERVICE_CHARGE_MAINTENANCE,SERVICE_CHARGE_VARIABLE_AMOUNTS,UNIT_TRUST_PURCHASE). | ACCOUNT_REPAYMENT |
| amount | Y | Decimal | The amount to be collected on the billing day in Rands | 45.00 |
| recurring.process_day | Y | Integer | Calendar day on which the collection is to be made. If you choose 31st and the month only has 30 days the collection will be made on the 30th. | 1 |
| recurring.collection_interval | N | ENUM | How often this collection should be run. (MONTHLY,YEARLY). | MONTHLY |
| recurring.date_release | N | Date(YYYY-MM-DD) | When this mandate is to release or complete | 2026-05-01 |
| one_time.process_date | N | Date(YYYY-MM-DD) | Date upon which transaction will be processed once | 2024-09-30 |
| debicheck.first_collection_amount | N | Decimal | Amount to be collected on the first collection date. Make sure to have a running collection connected to the mandate to receive this first collection amount. | 50.45 |
| debicheck.first_collection_date | C | Date(YYYY-MM-DD) | When the first collection amount is to be collected. If this date is the same as the collection starting date then 2 collections will be attempted on the same day. This first collection date is independent from the recurring collection start date. | 2024-03-01 |
| debicheck.maximum_collection_amount | Y | Decimal | This is the maximum collection amount allowed for the mandate. This maximum amount may not be more than 1.5 times the instalment amount e.g. if your instalment amount is R 10.00 then your maximum collection amount may not be more than R15.00. Used with re-presented (arrears) collections. | 60.00 |
| debicheck.allow_date_adjustment | N | Boolean | Used by DebiCheck to indicate that collections may be made on billing days other than the day specified on the mandate. | true |
| debicheck.allow_variable_amount | N | Boolean | Used by DebiCheck to indicate that the amount collected on the billing day may be changed. Must be true when using adjustment category amount/rates. | false |
| debicheck.allow_payment_tracking | N | Boolean | Used by DebiCheck to allow automated resubmission of failed collections. The collection will be resubmitted up to a maximum amount of days, or until the collection succeeds whichever comes first. Warning: the resubmitted collection becomes disputable. | true |
| debicheck.payment_tracking_max_days | N | Integer | 1 to 10 Days. Maximum amount of days failed collections are to be resubmitted (when in tracking), after the billing day. | 4 |
| debicheck.adjustment_category | N | ENUM | Used by DebiCheck to increase the DebiCheck mandate amount per specified interval e.g. increase collection amount by R 10.00 every year. (ANNUALLY,BIANNUALLY,NEVER,QUARTERLY). See increase API. Not applicable to RM, for RM create a new mandate and disable the previous mandate manually. | ANNUALLY |
| debicheck.adjustment_type | N | ENUM | Amount or rate as a percentage. (AMOUNT,RATE) | RATE |
| debicheck.adjustment_rate | N | Decimal | Determines the percentage to increase the DebiCheck amount per adjustment category interval e.g 5.12345% per interval | 5.12345 |
| debicheck.adjustment_amount | N | Decimal | Determines the amount to increase the DebiCheck amount per adjustment category interval. Either adjustment rate OR adjustment amount must be used when an adjustment category is specified and both may not be specified at the same time | 0.00 |
| debicheck.approval_window | N | ENUM | Determines how long the user has to approve the DebiCheck mandate. Does NOT apply to Registered Mandates. (BATCH_TT2_APPROVE_BY_19H00_ON_DAY_2,DELAYED_REAL_TIME_TT1_APPROVE_BY_20H00_ON_THE_SAME_DAY,MAC_TT3_MESSAGE_AUTHENTICATION_CODE_CARD_AND_PIN,REAL_TIME_TT1_APPROVE_WITHIN_120_SECONDS_CELLPHONE_MUST_MATCH_BANK,REAL_TIME_TT1_APPROVE_WITHIN_120_SECONDS_SENT_TO_BANK_CELLPHONE). | BATCH_TT2_APPROVE_BY_19H00_ON_DAY_2 |
| debicheck.mandate_authentication_code | C - Required with TT3 | String(8) | Mandate authentication code used with TT3 solutions (Card and PIN). | 12345678 |
| registered_mandate.first_collection_amount | N | Decimal | Amount to be collected on the first collection date. Make sure to have a running collection connected to the mandate to receive this first collection amount. | 50.45 |
| registered_mandate.first_collection_date | C | Date(YYYY-MM-DD) | When the first collection amount is to be collected. If this date is the same as the collection starting date then 2 collections will be attempted on the same day. This first collection date is independent from the recurring collection start date. | 2024-03-01 |
| registered_mandate.maximum_collection_amount | Y | Decimal | This is the maximum collection amount allowed for the mandate. This maximum amount may not be more than 1.5 times the instalment amount e.g. if your instalment amount is R 10.00 then your maximum collection amount may not be more than R15.00. Used with re-presented (arrears) collections. | 60.00 |
| registered_mandate.allow_date_adjustment | N | Boolean | Used by RM to indicate that collections may be made on billing days other than the day specified on the mandate. | true |
| registered_mandate.allow_variable_amount | N | Boolean | Used by RM to indicate that the amount collected on the billing day may be changed. Must be true when using adjustment category amount/rates. | false |
| registered_mandate.allow_payment_tracking | N | Boolean | Used by RM to allow automated resubmission of failed collections. The collection will be resubmitted up to a maximum amount of days, or until the collection succeeds whichever comes first. Warning: the resubmitted collection becomes disputable. | true |
| registered_mandate.payment_tracking_max_days | N | Integer | 1 to 10 Days. Maximum amount of days failed collections are to be resubmitted (when in tracking), after the billing day. | 4 |
Response Body
The response follows the same format as the list response
{
"status": true,
"results": [{
"id": "man_LfUp0ZILHxWRdzZV9ksPt",
...
"contract_reference": "CTC24091900001",
...
"customer_id": "cus_q0lJckGcUQptaXODDb7sG",
"bank_account_id": "ban_xrf4nxBPH5bwjXIrl6Le5",
"payment_methods_id": "pam_ak7lHmJ0a2fuD1q4M6b0q",
"mandate_status": "ACTIVE",
...
"amount": "45.00",
"recurring": {...},
"one_time": {...},
...
"debicheck": {...},
"registered_mandate": {...},
"debit_order": {...}
}, ...]
}
Update EFT Debit Order
API call to update existing mandate(s) as single or batch records. Records can not be deleted, only archived.
Path
POST /mandates/eft/update
WARNING
An EFT debit order mandate can not be archived/disabled if it has running collections, you need to pause the connected collections first.
Only provide the fields you wish to change in the body.
One-time mandates can not be converted to recurring mandates and vice versa. Collection interval of recurring mandates can not be changed after creation.
Request Body
{
"records": [{
"id": "man_LfUp0ZILHxWRdzZV9ksPt",
"amount": "45.00",
"reference": "ABC123",
// for recurring mandates
"recurring": {
"process_day": 1,
"date_release": "2026-05-12"
},
// or for one-time mandates
"one_time": {
"process_date": "2024-10-25"
},
"payment_industry": "ACCOUNT_REPAYMENT",
"mandate_status": "ACTIVE"
}]
}
Request Parameters
Field | Required | Type | Description | Example |
|---|---|---|---|---|
| id | Y | String(32) | Record id to update | man_LfUp0ZILHxWRdzZV9ksPt |
| amount | N | Decimal | The amount to be collected on the billing day | 45.00 |
| reference | N | String(256) | Optional custom reference number | ABC123 |
| recurring.process_day | N | Integer | Calendar day on which the collection is to be made. If you choose 31st and the month only has 30 days the collection will be made on the 30th. | 1 |
| recurring.date_release | N | When this mandate is to release or complete | 2026-05-01 | |
| one_time.process_date | N | Date(YYYY-MM-DD) | Date upon which transaction will be processed once | 2024-09-30 |
| payment_industry | N | ENUM | Used by both EFT debit orders and DebiCheck / RM. (ACCOUNT_REPAYMENT,BOND_REPAYMENT,CHARITABLE_OR_RELIGIOUS_CONTRIBUTIONS,H_P__REPAYMENT,INSURANCE_PREMIUM,LOAN_REPAYMENT_OTHER_THAN_MORTGAGE,MEDICAL_AID_FUND_CONTRIBUTION,PENSION_FUND_CONTRIBUTION,RENT_PROPERTY,RENTALLEASE_OTHER_THAN_PROPERTY,SERVICE_CHARGE_MAINTENANCE,SERVICE_CHARGE_VARIABLE_AMOUNTS,UNIT_TRUST_PURCHASE). | ACCOUNT_REPAYMENT |
| debit_order.mandate_status | N | ENUM | Only allowed to be changed for EFT debit orders. (ACTIVE,ARCHIVED,CANCELLATION_PENDING,CANCELLATION_REJECTED,CANCELLATION_SUCCESSFUL,DISABLED,GENERATED,NO_REPLY,PENDING,REJECTED,SUSPENDED). | ACTIVE |
Response Body
The response follows the same format as the list response
{
"status": true,
"results": [{
"id": "man_LfUp0ZILHxWRdzZV9ksPt",
...
"contract_reference": "CTC24091900001",
...
"customer_id": "cus_q0lJckGcUQptaXODDb7sG",
"bank_account_id": "ban_xrf4nxBPH5bwjXIrl6Le5",
"payment_methods_id": "pam_ak7lHmJ0a2fuD1q4M6b0q",
"mandate_status": "ACTIVE",
...
"amount": "45.00",
"recurring": {...},
"one_time": {...},
...
"debicheck": {...},
"registered_mandate": {...},
"debit_order": {...}
}, ...]
}
Update DebiCheck / Registered Mandates
API call to update existing mandate(s) as single or batch records. Records can not be deleted, only archived.
Archive
Set the mandate status to 'archived'. Archiving is not a DebiCheck / RM feature, it is a Kwik only status available for convenience.
DebiCheck Path
POST /mandates/debicheck/update/archive
Registered Mandate Path
POST /mandates/rm/update/archive
Request Body
{
"records": [{
"id": "man_LfUp0ZILHxWRdzZV9ksPt"
}]
}
Activate
Activate the DebiCheck/ RM mandate after being archived. This will ultimately restore the mandate status the current status the bank reflects.
DebiCheck Path
POST /mandates/debicheck/update/activate
Registered Mandate Path
POST /mandates/rm/update/activate
Request Body
{
"records": [{
"id": "man_LfUp0ZILHxWRdzZV9ksPt"
}]
}
Cancel
Cancel/stop the DebiCheck mandate / Registered Mandate.
DebiCheck Path
POST /mandates/debicheck/update/cancel
Registered Mandate Path
POST /mandates/rm/update/cancel
WARNING
The cancel reason will show immediately on the record but the status will not be updated until a response is received from the bank.
Request Body
{
"records": [{
"id": "man_LfUp0ZILHxWRdzZV9ksPt",
"cancel_reason": "CONTRACT_EXPIRED"
}]
}
Request Parameters
Field | Required | Type | Description | Example |
|---|---|---|---|---|
| id | Y | String(32) | Mandate record id to update | man_LfUp0ZILHxWRdzZV9ksPt |
| cancel_reason | Y | ENUM | (CANCELLATION_OR_AMENDMENT_REQUESTED_BY_THE_CREDITOR,CONTRACT_EXPIRED,MANDATE_CANCELLATION_DUE_TO_FRAUD,MANDATE_CANCELLED_DUE_TO_EARLY_SETTLEMENT) | CONTRACT_EXPIRED |
Re-submit (DebiCheck ABSA)
WARNING
TT1 (approval_window) DebiCheck mandates only.
Only applicable to DebiCheck mandates created by a payment method with the provider bank set to ABSA. Resubmit the created mandate that has returned the 'no reply' status within the last 5 calendar days. You are limited to 4 re-submissions after that you have to create a new mandate.
DebiCheck Path
POST /mandates/debicheck/update/resubmit
Request Body
{
"records": [{
"id": "man_LfUp0ZILHxWRdzZV9ksPt"
}]
}
Increase (DebiCheck)
Used for annual, bi-annual or quarterly DebiCheck mandate increases. Only applicable when the mandate specifies an adjustment category with an adjustment amount or rate. Client will receive a notification on their phone indicating the increase.
DebiCheck Path
POST /mandates/debicheck/update/increase
Registered Mandate Path
Registered Mandate (RM) increases are not supported. Disable the old mandate and create a new one manually.
WARNING
Only applicable to DebiCheck mandates that are active with a valid adjustment rate or amount specified.
Increases should be done after the last collection for the interval (annually, bi-annually or quarterly) has completed e.g. an annual increase for a mandate that started on the 1st January 2025 can be done on the 2nd December 2025 if the collection for the 1st December has been completed.
Mandate amount changes will only reflect after being approved by the bank, whereas the collection update change will reflect immediately.
Request Body
{
"records": [{
"id": "man_LfUp0ZILHxWRdzZV9ksPt",
"amount": "45.00",
"update_recurring_collection": true
}]
}
Request Parameters
Field | Required | Type | Description | Example |
|---|---|---|---|---|
| id | Y | String(32) | Mandate record id to update | man_LfUp0ZILHxWRdzZV9ksPt |
| amount | Y | Decimal | The new amount to be collected on the billing day. Must match the adjustment category rules e.g. you can not increase the mandate amount by R 10.00 if your adjustment amount is R 1.00 for example. Same applies to adjustment rates. | 45.00 |
| update_recurring_collection | Y | Boolean | true - Set the amount of any connected collection to the increase amount specified. false - Only update the amount on the mandate and leave connected collection amounts as is. | true |
Update (Recurring DebiCheck)
Only a select number of fields may be updated for DebiCheck (or Registered Mandates), this is according to the bank rules. For example you can not change the bank branch code assigned to a mandate.
DebiCheck Path
POST /mandates/debicheck/update/request
Registered Mandate Path
Registered Mandate (RM) updates are not supported.
WARNING
One-timeDebiCheck mandates / Registered Mandates can not be changed and you will have to cancel the mandate and create a new mandate if you wish to change it.The collection interval of
recurring(monthly, yearly) mandates can not be changed after creation so make sure it is correct on creation.Make sure to update your connected collections accordingly AFTER the DebiCheck mandate amendment has been approved. In most cases it is best to pause the old collection and create a new collection.
Avoid changing mandates when a collection is pending at the bank for deduction otherwise you could violate the mandate rules and result in the collection being rejected on the day of collection.
When updating DebiCheck mandates depending on the fields that you want to update you either perform an
updateor are-auth. Anupdatewill send the customer a notification whereas are-authhas to be approved by the customer before the new changes can come into effect. The 'action' column below to indicate anupdateorre-authis only a guideline based on ABSA TT2 DebiCheck provided mandates. The requirements ofupdate/re-authdiffers between DebiCheck mandates provided by ABSA and those provided by Nedbank and there is also a difference between the requirements for a TT1 and a TT2 mandate; therefore only provide the fields you wish to change.
Request Body
{
"records": [{
"id": "man_LfUp0ZILHxWRdzZV9ksPt",
"reference": "ABC123",
// Required when action is UPDATE
"update_reason": "REQUESTED_BY_CUSTOMER",
// pull in the latest customer name, id, contact number & email
"update_customer": true,
// pull in the latest bank account number and type
// NOTE: bank branch is not allowed to change
"update_bank_account": true,
// This is the re-authentication instrument used,
// must be TT2 if original submission was TT2.
"approval_window": "BATCH_TT2_APPROVE_BY_19H00_ON_DAY_2",
// Used with DebiCheck TT3
"mandate_authentication_code": "12345678",
"amount": "45.00",
"recurring": {
"process_day": 1,
"date_release": "2026-05-12"
},
"payment_industry": "ACCOUNT_REPAYMENT",
"allow_date_adjustment": true,
"allow_payment_tracking": true,
"payment_tracking_max_days": 4,
"first_collection_amount": "50.45",
"first_collection_date": "2024-10-16",
"maximum_collection_amount": "60.00",
"adjustment_category": "ANNUALLY",
"adjustment_type": "RATE",
"adjustment_rate": "5.12345",
"adjustment_amount": "0.00"
}]
}
Request Parameters
Field | Required | DebiCheck Action | Type | Description | Example |
|---|---|---|---|---|---|
| id | Y | n/a | String(32) | Mandate record id to update | man_LfUp0ZILHxWRdzZV9ksPt |
| reference | N | String(256) | Optional custom reference number | ABC123 | |
| update_reason | Y | n/a | ENUM | (CANCELLATION_OR_AMENDMENT_REQUESTED_BY_INITIATING_PARTY,REQUESTED_BY_CUSTOMER) | REQUESTED_BY_CUSTOMER |
| update_customer | N | update | Boolean | Updates the DebiCheck details with the currently linked customer name, surname, ID number, contact number and email details | true |
| update_bank_account | N | re-auth | Boolean | Updates the DebiCheck details with the currently linked bank account number and bank account type. The bank branch can not be changed, mandates can not be moved between banks. | true |
| approval_window | Y | n/a | ENUM | If mandate init was TT1 then the amend window must also be TT1 (same applies for TT2 and TT3). Determines how long the user has to approve the DebiCheck mandate update. Only used if a field is contained that requires re-auth. Does NOT apply to Registered Mandates. (BATCH_TT2_APPROVE_BY_19H00_ON_DAY_2,DELAYED_REAL_TIME_TT1_APPROVE_BY_20H00_ON_THE_SAME_DAY,MAC_TT3_MESSAGE_AUTHENTICATION_CODE_CARD_AND_PIN,REAL_TIME_TT1_APPROVE_WITHIN_120_SECONDS_CELLPHONE_MUST_MATCH_BANK,REAL_TIME_TT1_APPROVE_WITHIN_120_SECONDS_SENT_TO_BANK_CELLPHONE). | BATCH_TT2_APPROVE_BY_19H00_ON_DAY_2 |
| mandate_authentication_code | C - Required with TT3 | n/a | String(8) | Mandate authentication code used with TT3 solutions (Card and PIN). | 12345678 |
| amount | N | re-auth | Decimal | The amount to be collected on the billing day | 45.00 |
| recurring.process_day | N | re-auth | Integer | Calendar day on which the collection is to be made. If you choose 31st and the month only has 30 days the collection will be made on the 30th. | 1 |
| recurring.date_release | N | update | When this mandate is to release or complete | 2026-05-01 | |
| payment_industry | N | update | ENUM | Used by both EFT debit orders and DebiCheck. (ACCOUNT_REPAYMENT,BOND_REPAYMENT,CHARITABLE_OR_RELIGIOUS_CONTRIBUTIONS,H_P__REPAYMENT,INSURANCE_PREMIUM,LOAN_REPAYMENT_OTHER_THAN_MORTGAGE,MEDICAL_AID_FUND_CONTRIBUTION,PENSION_FUND_CONTRIBUTION,RENT_PROPERTY,RENTALLEASE_OTHER_THAN_PROPERTY,SERVICE_CHARGE_MAINTENANCE,SERVICE_CHARGE_VARIABLE_AMOUNTS,UNIT_TRUST_PURCHASE). | ACCOUNT_REPAYMENT |
| allow_date_adjustment | N | update | Boolean | Used by DebiCheck to indicate that collections may be made on billing days other than the day specified on the mandate. | true |
| allow_payment_tracking | N | update | Boolean | Used by DebiCheck to allow automated resubmission of failed collections. The collection will be resubmitted up to a maximum amount of days, or until the collection succeeds whichever comes first. Warning: the resubmitted collection becomes disputable. | true |
| payment_tracking_max_days | N | update | Integer | 1 to 10 Days. Maximum amount of days failed collections are to be resubmitted (when in tracking), after the billing day. | 4 |
| first_collection_amount | N | update | Decimal | Amount to be collected on the first collection date. Make sure to have a running collection connected to the mandate to receive this first collection amount. | 50.45 |
| first_collection_date | N | re-auth | Date(YYYY-MM-DD) | When the first collection amount is to be collected. If this date is the same as the collection starting date then 2 collections will be attempted on the same day. This first collection date is independent from the recurring collection start date. | 2024-03-01 |
| maximum_collection_amount | N | re-auth | Decimal | Required by DebiCheck. This is the maximum collection amount allowed for the mandate. This maximum amount may not be more than 1.5 times the instalment amount e.g. if your instalment amount is R 10.00 then your maximum collection amount may not be more than R15.00. Used with re-presented (arrears) collections. | 60.00 |
| adjustment_category | N | update | ENUM | Used by DebiCheck to increase the DebiCheck mandate amount per specified interval e.g. increase collection amount by R 10.00 every year. (ANNUALLY,BIANNUALLY,NEVER,QUARTERLY). See increase API. | ANNUALLY |
| adjustment_type | N | update | ENUM | Amount or rate as a percentage. (AMOUNT,RATE) | RATE |
| adjustment_rate | N | re-auth | Decimal | Determines the percentage to increase the DebiCheck amount per adjustment category interval e.g 5.12345% per interval | 5.12345 |
| adjustment_amount | N | re-auth | Decimal | Determines the amount to increase the DebiCheck amount per adjustment category interval. Either adjustment rate OR adjustment amount must be used when an adjustment category is specified and both may not be specified at the same time | 0.00 |
Response Body
The response follows the same format as the list response
{
"status": true,
"results": [{
"id": "man_LfUp0ZILHxWRdzZV9ksPt",
...
"contract_reference": "CTC24091900001",
...
"customer_id": "cus_q0lJckGcUQptaXODDb7sG",
"bank_account_id": "ban_xrf4nxBPH5bwjXIrl6Le5",
"payment_methods_id": "pam_ak7lHmJ0a2fuD1q4M6b0q",
"mandate_status": "ACTIVE",
...
"amount": "45.00",
"recurring": {...},
"one_time": {...},
...
"debicheck": {...},
"registered_mandate": {...},
"debit_order": {...}
}, ...]
}
List
List mandates loaded on the platform.
Path
GET /mandates/list?{params}
Query Parameters
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| mandate_status | ENUM | N | Filter for a specific mandate status. (ACTIVE,ARCHIVED,CANCELLATION_PENDING,CANCELLATION_REJECTED,CANCELLATION_SUCCESSFUL,DISABLED,GENERATED,NO_REPLY,PENDING,REJECTED,SUSPENDED). | ACTIVE |
| approval_window | ENUM | N | Filter for a specific approval window. Lookups type must be 'approval_window'. Does NOT apply to Registered Mandates. (BATCH_TT2_APPROVE_BY_19H00_ON_DAY_2,DELAYED_REAL_TIME_TT1_APPROVE_BY_20H00_ON_THE_SAME_DAY,MAC_TT3_MESSAGE_AUTHENTICATION_CODE_CARD_AND_PIN,REAL_TIME_TT1_APPROVE_WITHIN_120_SECONDS_CELLPHONE_MUST_MATCH_BANK,REAL_TIME_TT1_APPROVE_WITHIN_120_SECONDS_SENT_TO_BANK_CELLPHONE). | BATCH_TT2_APPROVE_BY_19H00_ON_DAY_2 |
| customer_id | String(32) | N | Filter for a specific customer id. | cus_q0lJckGcUQptaXODDb7sG |
| mandate_id | String(32) | N | Filter for a specific mandate id. | man_LfUp0ZILHxWRdzZV9ksPt |
| bank_account_id | String(32) | N | Filter for a specific bank account id. | ban_xrf4nxBPH5bwjXIrl6Le5 |
| payment_methods_id | String(32) | N | Filter for a specific payment method id. | pam_ak7lHmJ0a2fuD1q4M6b0q |
| date_start | Date(YYYY-MM-DD) | N | Filter for records that have a created date after this date specified. | 2024-09-13 |
| date_end | Date(YYYY-MM-DD) | N | Filter for records that have an created date before this specified date | 2025-04-24 |
| updated_date_start | Date(YYYY-MM-DD) | N | Filter for records that have been updated after this specified date. | 2024-09-13 |
| updated_date_end | Date(YYYY-MM-DD) | N | Filter for records that have been updated before this specified date. | 2025-04-24 |
Response Body
{
"status": true,
"results": [{
"id": "man_LfUp0ZILHxWRdzZV9ksPt",
"reference": "ABC123",
"contract_reference": "CTC24091900001",
"updated_at": null,
"created_at": "2024-02-27 09:11:23",
"customer_id": "cus_q0lJckGcUQptaXODDb7sG",
"bank_account_id": "ban_xrf4nxBPH5bwjXIrl6Le5",
"payment_methods_id": "pam_ak7lHmJ0a2fuD1q4M6b0q",
"mandate_status": "ACTIVE",
"message": "",
"bank_request_status": "UPDATE_PENDING",
"cancel_reason": "CONTRACT_EXPIRED",
"update_reason": "REQUESTED_BY_CUSTOMER",
"amount": "45.00",
"payment_industry": "ACCOUNT_REPAYMENT",
"recurring": {
"process_day": 1,
"collection_interval": "MONTHLY",
"date_release": "2026-05-12"
},
"one_time": {
"process_date": "2024-10-16"
},
"debicheck": {
"first_collection_amount": "50.45",
"first_collection_amount_excl": "50.45",
"first_collection_date": "2024-10-16",
"maximum_collection_amount": "60.00",
"allow_date_adjustment": true,
"allow_variable_amount": true,
"allow_payment_tracking": true,
"payment_tracking_max_days": 4,
"adjustment_category": "ANNUALLY",
"adjustment_type": "RATE",
"adjustment_rate": "5.12345",
"adjustment_amount": "0.00",
"approval_window": "BATCH_TT2_APPROVE_BY_19H00_ON_DAY_2"
},
"registered_mandate": {
"first_collection_amount": "50.45",
"first_collection_amount_excl": "50.45",
"first_collection_date": "2024-10-16",
"maximum_collection_amount": "60.00",
"allow_date_adjustment": true,
"allow_variable_amount": true,
"allow_payment_tracking": true,
"payment_tracking_max_days": 4
},
"debit_order": {
"mandates": [{
"created_at": "2025-10-07T06:44:57.697Z",
"document_url": "https://staging.app.kwik.co.za/1.0/mandates/download?key=mandates/acc_N0Rys3kQcYMLgS52XPMRa/mandate_MANHOD2510070844572665.pdf"
}, ...]
}
}, ...]
}
Response Parameters
Field | Required | Type | Description | Example |
|---|---|---|---|---|
| id | n/a | String(32) | Record id returned | man_LfUp0ZILHxWRdzZV9ksPt |
| reference | N | String(256) | Optional custom reference number | ABC123 |
| contract_reference | C | String(14) | Uniquely identifies the mandate with the bank and will show on bank statements. | CTC24091900001 |
| updated_at | n/a | Date(YYYY-MM-DD HH:mm:ss) | When last the record was updated | 2024-02-27 09:11:23 |
| created_at | n/a | Date(YYYY-MM-DD HH:mm:ss) | When this record was created | 2024-02-27 09:11:23 |
| customer_id | Y | String(32) | Customer ID | cus_q0lJckGcUQptaXODDb7sG |
| bank_account_id | Y | String(32) | Bank Account ID | ban_xrf4nxBPH5bwjXIrl6Le5 |
| payment_methods_id | Y | String(32) | Payment Method ID | pam_ak7lHmJ0a2fuD1q4M6b0q |
| mandate_status | n/a | ENUM | (ACTIVE,ARCHIVED,CANCELLATION_PENDING,CANCELLATION_REJECTED,CANCELLATION_SUCCESSFUL,DISABLED,GENERATED,NO_REPLY,PENDING,REJECTED,SUSPENDED) | ACTIVE |
| message | n/a | String | Message related to the mandate status if applicable | some rejection reason |
| bank_request_status | n/a | ENUM | Applicable to DebiCheck / RM update and cancellation requests. (CANCELLATION_ACCEPTED,CANCELLATION_PENDING,CANCELLATION_REJECTED,CANCELLATION_SUCCESSFUL,UPDATE_ACCEPTED,UPDATE_PENDING,UPDATE_REJECTED). | UPDATE_PENDING |
| cancel_reason | n/a | ENUM | (CANCELLATION_OR_AMENDMENT_REQUESTED_BY_THE_CREDITOR,CONTRACT_EXPIRED,MANDATE_CANCELLATION_DUE_TO_FRAUD,MANDATE_CANCELLED_DUE_TO_EARLY_SETTLEMENT) | CONTRACT_EXPIRED |
| update_reason | n/a | ENUM | (CANCELLATION_OR_AMENDMENT_REQUESTED_BY_INITIATING_PARTY,REQUESTED_BY_CUSTOMER) | REQUESTED_BY_CUSTOMER |
| amount | Y | Decimal | The amount to be collected on the billing day in Rands | 45.00 |
| payment_industry | N | ENUM | Used by both EFT debit orders and DebiCheck. (ACCOUNT_REPAYMENT,BOND_REPAYMENT,CHARITABLE_OR_RELIGIOUS_CONTRIBUTIONS,H_P__REPAYMENT,INSURANCE_PREMIUM,LOAN_REPAYMENT_OTHER_THAN_MORTGAGE,MEDICAL_AID_FUND_CONTRIBUTION,PENSION_FUND_CONTRIBUTION,RENT_PROPERTY,RENTALLEASE_OTHER_THAN_PROPERTY,SERVICE_CHARGE_MAINTENANCE,SERVICE_CHARGE_VARIABLE_AMOUNTS,UNIT_TRUST_PURCHASE). | ACCOUNT_REPAYMENT |
| recurring.process_day | Y | Integer | Calendar day on which the collection is to be made. If you choose 31st and the month only has 30 days the collection will be made on the 30th. | 1 |
| recurring.collection_interval | N | ENUM | How often this collection should be run. (MONTHLY,YEARLY). | MONTHLY |
| recurring.date_release | N | Date(YYYY-MM-DD) | When this mandate is to release or complete | 2026-05-01 |
| one_time.process_date | N | Date(YYYY-MM-DD) | Date upon which transaction will be processed once | 2024-09-30 |
| debicheck.first_collection_amount | N | Decimal | Amount to be collected on the first collection date. Make sure to have a running collection connected to the mandate to receive this first collection amount. | 50.45 |
| debicheck.first_collection_amount_excl | N | Decimal | First collection amount excluding tax. | 50.45 |
| debicheck.first_collection_date | C | Date(YYYY-MM-DD) | When the first collection amount is to be collected. If this date is the same as the collection starting date then 2 collections will be attempted on the same day. This first collection date is independent from the recurring collection start date. | 2024-03-01 |
| debicheck.maximum_collection_amount | Y | Decimal | This is the maximum collection amount allowed for the mandate. This maximum amount may not be more than 1.5 times the instalment amount e.g. if your instalment amount is R 10.00 then your maximum collection amount may not be more than R15.00. Used with re-presented (arrears) collections. | 60.00 |
| debicheck.allow_date_adjustment | N | Boolean | Used by DebiCheck to indicate that collections may be made on billing days other than the day specified on the mandate. | true |
| debicheck.allow_variable_amount | N | Boolean | Used by DebiCheck to indicate that the amount collected on the billing day may be changed. Must be true when using adjustment category amount/rates. | false |
| debicheck.allow_payment_tracking | N | Boolean | Used by DebiCheck to allow automated resubmission of failed collections. The collection will be resubmitted up to a maximum amount of days, or until the collection succeeds whichever comes first. Warning: the resubmitted collection becomes disputable. | true |
| debicheck.payment_tracking_max_days | N | Integer | 1 to 10 Days. Maximum amount of days failed collections are to be resubmitted (when in tracking), after the billing day. | 4 |
| debicheck.adjustment_category | N | ENUM | Used by DebiCheck to increase the DebiCheck mandate amount per specified interval e.g. increase collection amount by R 10.00 every year. (ANNUALLY,BIANNUALLY,NEVER,QUARTERLY). See increase API. Not applicable to RM, for RM create a new mandate and disable the previous mandate manually. | ANNUALLY |
| debicheck.adjustment_type | N | ENUM | Amount or rate as a percentage. (AMOUNT,RATE) | RATE |
| debicheck.adjustment_rate | N | Decimal | Determines the percentage to increase the DebiCheck amount per adjustment category interval e.g 5.12345% per interval | 5.12345 |
| debicheck.adjustment_amount | N | Decimal | Determines the amount to increase the DebiCheck amount per adjustment category interval. Either adjustment rate OR adjustment amount must be used when an adjustment category is specified and both may not be specified at the same time | 0.00 |
| debicheck.approval_window | N | ENUM | Determines how long the user has to approve the DebiCheck mandate. Does NOT apply to Registered Mandates. (BATCH_TT2_APPROVE_BY_19H00_ON_DAY_2,DELAYED_REAL_TIME_TT1_APPROVE_BY_20H00_ON_THE_SAME_DAY,MAC_TT3_MESSAGE_AUTHENTICATION_CODE_CARD_AND_PIN,REAL_TIME_TT1_APPROVE_WITHIN_120_SECONDS_CELLPHONE_MUST_MATCH_BANK,REAL_TIME_TT1_APPROVE_WITHIN_120_SECONDS_SENT_TO_BANK_CELLPHONE). | BATCH_TT2_APPROVE_BY_19H00_ON_DAY_2 |
| registered_mandate.first_collection_amount | N | Decimal | Amount to be collected on the first collection date. Make sure to have a running collection connected to the mandate to receive this first collection amount. | 50.45 |
| registered_mandate.first_collection_date | C | Date(YYYY-MM-DD) | When the first collection amount is to be collected. If this date is the same as the collection starting date then 2 collections will be attempted on the same day. This first collection date is independent from the recurring collection start date. | 2024-03-01 |
| registered_mandate.maximum_collection_amount | Y | Decimal | This is the maximum collection amount allowed for the mandate. This maximum amount may not be more than 1.5 times the instalment amount e.g. if your instalment amount is R 10.00 then your maximum collection amount may not be more than R15.00. Used with re-presented (arrears) collections. | 60.00 |
| registered_mandate.allow_date_adjustment | N | Boolean | Used by RM to indicate that collections may be made on billing days other than the day specified on the mandate. | true |
| registered_mandate.allow_variable_amount | N | Boolean | Used by RM to indicate that the amount collected on the billing day may be changed. Must be true when using adjustment category amount/rates. | false |
| registered_mandate.allow_payment_tracking | N | Boolean | Used by RM to allow automated resubmission of failed collections. The collection will be resubmitted up to a maximum amount of days, or until the collection succeeds whichever comes first. Warning: the resubmitted collection becomes disputable. | true |
| registered_mandate.payment_tracking_max_days | N | Integer | 1 to 10 Days. Maximum amount of days failed collections are to be resubmitted (when in tracking), after the billing day. | 4 |
| debit_order.documents_history | N | Object | List of mandate PDF documents created | |
| debit_order.documents_history.created_at | N | Date(ISO) | ISO timestamp when the document was created | 2025-10-07T06:44:57.697Z |
| debit_order.documents_history.document_url | N | String | Private URL link to download the document. Make a GET request to this URL with authorization headers included (to test you can use POSTMAN for example). |