Integrate our products into your software. Let's make payment happen together!
Look at all the possibilitiesThe mandate API resource can be used to acquire mandates from the customers to allow easy merchant initiated
transactions in the future. When creating a mandate, a mandateId
is returned. This mandateId
can later be used for all kinds of actions, including sending the mandateId
with a new payment request, to indicate it’s a new payment for that specific mandate.
A mandate is obtained by performing an initial mandate creation process. The creation can be achieved through a mandate create request:
The mandate creation process creates two entities: the mandate itself and a child transaction. The mandate contains the
mandate Id and a reference to the child transaction (childReferenceId
). The child transaction is created to gain the
actual mandate.
A mandate entity can only have 1 child transaction. When the child transaction reaches a
final transaction status such as success
or manualintervention
, the mandate will be updated
with the same corresponding mandate status.
An optional amount can be added when creating a mandate and triggers the first payment of that mandate. The payment information is then used to sign the mandate. When no amount is specified, alternative ways to sign the mandate will be presented to the customer, eg. SMS, iDIN, itsme, …
The general mandate creation request flow is:
signUrl
from the response.returnUrl
provided in
the create a new mandate.only an active mandate can be used for payments.
We do not expose the status of the mandate or any of its details to the customer. It is up to you to verify the status of the mandate transaction and act accordingly. Webhooks and Notifications are provided to give you feedback, but this principle remains.
Name | Description |
---|---|
status | Possible values: Mandate Status |
merchantOrderReference | A reference, maximum 255 characters, of the merchant order reference associated with this mandate |
signUrl | To complete the mandate create request the customer should be redirected to this URL. |
returnUrl | After the mandate creation is completed (successfully or otherwise) the customer is redirected to this URL |
externalMandateReference | The unique reference of the mandate given by the external mandate party |
created | The local server datetime the mandate was created, epoch timestamp |
modified | The local server datetime the mandate was modified, epoch timestamp |
details | An optional object listing specific mandate details: Mandate Details |
signed | The local server datetime the mandate was signed, epoch timestamp |
mandateId | The Id of the mandate uniquely given by CCV. |
type | The Type of the mandate, possible values: Mandate Type |
amount | The amount used in the first payment of the current mandate. Specifying an amount will trigger the first payment automatically |
notificationRequests | An object which is used to request Notifications for specific events related to this mandate. |
Example
{
"status": "active",
"externalMandateReference": "CCV98",
"mandateId": "50d2f91c-9a4d-4205-b443-24ae24b316a3",
"signed": 1622705674332,
"type": "sepa_direct_debit",
"merchantOrderReference": "1234678",
"modified": 1622705674384,
"signUrl": "https://urlToSign",
"created": 1622705598302,
"returnUrl": "https://google.be",
"amount": 4.78,
"details": {
"customerCountry": "BEL",
"customerLanguage": "nld",
"customerFirstName": "Dirk",
"customerEmail": "d.teur@ccvlab.eu",
"sddDetails": "{\"Mndt\":{\"MndtId\":\"CCV98\",\"LclInstrm\":\"CORE\",\"Ocrncs\":{\"SeqTp\":\"RCUR\",\"Frqcy\":\"ADHO\",\"Drtn\":{\"FrDt\":\"2021-06-03\"}},\"CdtrSchmeId\":\"BE46ZZZ00000084920\",\"Cdtr\":{\"Nm\":\"CCV Belgium NV\",\"PstlAdr\":{\"AdrLine\":\"Ter Waarde 48\",\"PstCd\":\"8900\",\"TwnNm\":\"Ieper\",\"Ctry\":\"BE\"},\"Id\":\"BE0897971214\",\"CtryOfRes\":\"BE\",\"CtctDtls\":{\"EmailAdr\":\"xx\"}},\"Dbtr\":{\"Nm\":\"Dirk Teur\",\"PstlAdr\":{\"AdrLine\":\"XX\",\"PstCd\":\"3500\",\"TwnNm\":\"Hasselt\",\"Ctry\":\"BE\"},\"CtryOfRes\":\"BE\",\"CtctDtls\":{\"EmailAdr\":\"d.teur@ccvlab.eu\"}},\"DbtrAcct\":\"BE31798258915655\",\"DbtrAgt\":{\"FinInstnId\":{\"BICFI\":\"GKCCBEBB\",\"Nm\":\"BELFIUS BANK\"}},\"RfrdDoc\":\"TAR2014\",\"SplmtryData\":[{\"Key\":\"TRACKER\",\"Value\":\"53jz\"},{\"Key\":\"token\",\"Value\":\"SDD210603093318246CB87E192.1\"},{\"Key\":\"MandateName\",\"Value\":\"Mandate for direct debit terminal\"},{\"Key\":\"TemplateId\",\"Value\":330},{\"Key\":\"Terminal type\",\"Value\":null},{\"Key\":\"FirstName\",\"Value\":\"Dirk\"},{\"Key\":\"LastName\",\"Value\":\"Teur\"},{\"Key\":\"Language\",\"Value\":\"en\"},{\"Key\":\"SignerMethod#0\",\"Value\":\"mock\"},{\"Key\":\"Signer#0\",\"Value\":\"Twikey Mock Signer\"},{\"Key\":\"SignerPlace#0\",\"Value\":\"Genk\"},{\"Key\":\"SignerDate#0\",\"Value\":\"2021-06-03T07:34:28Z\"}]}}",
"customerLastName": "Teur"
}
}
Name | Description |
---|---|
SEPA_DIRECT_DEBIT | Create a mandate to use with payments using the method sdd . |
PAYPAL | Create a mandate to use with payments using the method paypal . |
APPLEPAY | Create a mandate to use with payments using the method applepay . |
GOOGLEPAY | Create a mandate to use with payments using the method googlepay . |
Name | Description |
---|---|
PENDING | This mandate is still is the process of being signed. |
ACTIVE | This mandate is active and ready to be used. |
INACTIVE | This mandate is not active and cannot be used with a payment. |
For each given mandate-type, there are specific details. Besides these specific details, there are also general details that apply to all mandates.
Name | Description |
---|---|
customerFirstName | The first name of the customer |
customerLastName | The last name of the customer |
customerEmail | The email of the customer |
customerLanguage | The language of the customer |
customerCountry | The country code of the customer |
Example
{
"customerCountry": "BEL",
"customerLanguage": "nld",
"customerFirstName": "Dirk",
"customerEmail": "d.teur@ccvlab.eu",
"customerLastName": "Teur"
}
Contains the raw sdd details
Name | Description |
---|---|
sddDetails | Specific details of a SEPA_DIRECT_DEBIT mandate |
Example
{
"sddDetails": "{\"Mndt\":{\"MndtId\":\"CCV98\",\"LclInstrm\":\"CORE\",\"Ocrncs\":{\"SeqTp\":\"RCUR\",\"Frqcy\":\"ADHO\",\"Drtn\":{\"FrDt\":\"2021-06-03\"}},\"CdtrSchmeId\":\"BE46ZZZ00000084920\",\"Cdtr\":{\"Nm\":\"CCV Belgium NV\",\"PstlAdr\":{\"AdrLine\":\"Ter Waarde 48\",\"PstCd\":\"8900\",\"TwnNm\":\"Ieper\",\"Ctry\":\"BE\"},\"Id\":\"BE0897971214\",\"CtryOfRes\":\"BE\",\"CtctDtls\":{\"EmailAdr\":\"xx\"}},\"Dbtr\":{\"Nm\":\"Dirk Teur\",\"PstlAdr\":{\"AdrLine\":\"XX\",\"PstCd\":\"3500\",\"TwnNm\":\"Hasselt\",\"Ctry\":\"BE\"},\"CtryOfRes\":\"BE\",\"CtctDtls\":{\"EmailAdr\":\"d.teur@ccvlab.eu\"}},\"DbtrAcct\":\"BE31798258915655\",\"DbtrAgt\":{\"FinInstnId\":{\"BICFI\":\"GKCCBEBB\",\"Nm\":\"BELFIUS BANK\"}},\"RfrdDoc\":\"TAR2014\",\"SplmtryData\":[{\"Key\":\"TRACKER\",\"Value\":\"53jz\"},{\"Key\":\"token\",\"Value\":\"SDD210603093318246CB87E192.1\"},{\"Key\":\"MandateName\",\"Value\":\"Mandate for direct debit terminal\"},{\"Key\":\"TemplateId\",\"Value\":330},{\"Key\":\"Terminal type\",\"Value\":null},{\"Key\":\"FirstName\",\"Value\":\"Dirk\"},{\"Key\":\"LastName\",\"Value\":\"Teur\"},{\"Key\":\"Language\",\"Value\":\"en\"},{\"Key\":\"SignerMethod#0\",\"Value\":\"mock\"},{\"Key\":\"Signer#0\",\"Value\":\"Twikey Mock Signer\"},{\"Key\":\"SignerPlace#0\",\"Value\":\"Genk\"},{\"Key\":\"SignerDate#0\",\"Value\":\"2021-06-03T07:34:28Z\"}]}}"
}
/api/v1/mandate
POST
application/json
Name | Required | Description |
---|---|---|
merchantOrderReference | No | A reference, maximum of 255 characters, of the order associated with this mandate |
returnUrl | Yes | After the contract is completed (successfully or otherwise) the customer is redirected to this URL. |
type | Yes | The type of the mandate to be created. Possible values Mandate Types |
amount | No | An optional amount to start the first payment and to use that payment to sign the mandate. The amount can contain up to 12 digits in total, including a maximum of 2 decimal digits. |
details | No | Details specific for the type of mandate |
notificationRequests | No | An object which is used to request Notifications for specific events related to this mandate. |
sequenceInfo | Conditional | Indicates if the mandate is created as part of a sequence . Required for mandate types GOOGLEPAY and APPLEPAY |
Name | Required | Description |
---|---|---|
customerFirstName | Yes | The first name of the customer |
customerLastName | Yes | The last name of the customer |
customerEmail | Yes | The email of the customer to which the contract is mailed. |
customerLanguage | Yes | The language of the customer. Defines the language to be used in the payment screens the customer will see. Possible values: Languages |
customerCountry | Yes | The country of the customer, an ISO 3166 alpha-2 code. See for more info: Country Codes - ISO 3166. |
customerZip | No | The zip/postal code of the customer. Should be filled in if the other address fields are filled in. |
customerAddress | No | The address of the customer. Should be filled in if the other address fields are filled in. |
customerCity | No | The city of the customer. Should be filled in if the other address fields are filled in. |
Example
{
"details": {
"customerLanguage": "nld",
"customerFirstName": "Dirk",
"customerEmail": "d.teur@ccvlab.eu",
"customerLastName": "Teur",
"customerCountry": "BEL",
"customerZip": "8500",
"customerAddress": "Spinnerijstraat 99/Bus 12",
"customerCity": "Kortrijk"
},
"merchantOrderReference" : "1234678",
"type": "SEPA_DIRECT_DEBIT",
"returnUrl" : "https://google.be"
}
Name | Required | Description |
---|---|---|
googlePayEncryptedToken | No | The entire unmodified encrypted token as received by Google Pay in String UTF-8 format |
Example
{
"type": "GOOGLEPAY",
"returnUrl" : "https://google.be",
"merchantOrderReference" : "1234678",
"details": {
"googlePayEncryptedToken": "<UNMODIFIED ENCRYPTED TOKEN HERE>"
},
"sequenceInfo": {
"type": "UNSCHEDULED",
"source": "CIT"
}
}
200
application/json
This operation returns all data from a given mandate.
/api/v1/mandate/{id}
GET
application/json
200
application/json
This operation returns all data from all mandates.
/api/v1/mandate
GET
application/json
200
application/json
This operation returns all transactions initiated using the given mandate.
/api/v1/mandate/{id}/transactions
GET
application/json
200
application/json
Used to revoke a mandate rendering it unusable. The mandate status is set to the inactive mandate status
The mandate revoke request is a simple DELETE request.
/api/v1/mandate/{mandateId}
DELETE
Name | Required | Description |
---|---|---|
mandateId | Yes | The mandate id of the mandate that should be revoked |
200
200 if revoke is successful.
/api/v1/mandate/{mandateId}
PUT
application/json
Name | Required | Description |
---|---|---|
mandateId | Yes | The mandate id of the mandate that should be updated |
Name | Required | Description |
---|---|---|
details | Yes | General Details and/or details specific for the type of mandate |
The details
parameter is required meaning that at least one of the below specified detail-fields should be present in the update request. Otherwise,
the request will return 400 - Bad Request
status code.
Updating general details can be done in combination with mandate-type specific details. There is no need to perform a separate update request to change these values. See our example in the update SDD details section below for more information.
Name | Required | Description |
---|---|---|
customerFirstName | No | The first name of the customer |
customerLastName | No | The last name of the customer |
customerEmail | No | The email of the customer to which the contract is mailed. |
customerLanguage | No | The language of the customer. Defines the language to be used in the payment screens the customer will see. Possible values: Languages |
customerCountry | No | The country of the customer, an ISO 3166 alpha-2 code. See for more info: Country Codes - ISO 3166. |
!INFO customerFirstName
& customerLastName
must be updated together, otherwise the request will return a 400 - Bad Request
status code.Only provide customerEmail
when it’s value has changed otherwise the request will return a 400 - Bad Request
status code.
Name | Required | Description |
---|---|---|
customerZip | No | The zipcode of the customer |
customerCity | No | The city of the customer |
customerAddress | No | The address of the customer (street & number) |
vatNumber | No | The enterprise number (can only be changed if companyName is changed) |
customerNumber | No | The customer number |
companyName | No | The company name on the mandate |
customerPhoneNumber | No | The customer phone number |
iban | No | The debtor IBAN |
bic | No | The debtor BIC code |
!INFO customerAddress
, customerCity
, customerZip
& customerCountry
should be updated together.
Example
{
"type": "SEPA_DIRECT_DEBIT",
"details": {
"customerFirstName": "Dirk",
"customerLastName": "Teur",
"customerEmail": "d.teur@ccvlab.eu",
"customerLanguage": "nld",
"customerCountry": "BEL",
"customerZip": "5800",
"customerCity": "Kortrijk",
"vatNumber": "1234",
"customerNumber": "23454",
"customerAddress": "Zr Idastraat 15",
"companyName": "CCV LAB",
"customerMobilePhoneNumber": "0474144545",
"iban": "BE68068897250734",
"bic": "GKCCBEBB"
}
}
200
application/json