Create an e-mandate
Creating an e-mandate registers your customer's details and returns the link where they verify their account and sign. The e-mandate starts in draft and becomes active once signed.
1. Send the request
Call POST /v1/e-mandates with an E-Mandate access token.
curl -X POST "https://api.sandbox.fintecture.com/v1/e-mandates?redirect_uri=https://www.my-shop.com/mandate/return&state=order-1234" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"meta": {
"authentication_methods": ["bank_account", "bank_transfer"],
"send_invitation_email": false
},
"data": {
"type": "e-mandates",
"attributes": {
"creditor_identifier": "FR38ZZZ882BC6",
"debtor": {
"name": "Jon Doe",
"first_name": "Jon",
"last_name": "Doe",
"email": "[email protected]",
"address": {
"number": "12",
"street": "rue de la Paix",
"zip": "75002",
"city": "Paris",
"country": "FR"
}
}
}
}
}'const params = new URLSearchParams({
redirect_uri: 'https://www.my-shop.com/mandate/return',
state: 'order-1234',
});
const response = await fetch(`https://api.sandbox.fintecture.com/v1/e-mandates?${params}`, {
method: 'POST',
headers: {
Authorization: `Bearer ${accessToken}`,
'Content-Type': 'application/json',
Accept: 'application/json',
},
body: JSON.stringify({
meta: { authentication_methods: ['bank_account', 'bank_transfer'], send_invitation_email: false },
data: {
type: 'e-mandates',
attributes: {
creditor_identifier: 'FR38ZZZ882BC6',
debtor: {
name: 'Jon Doe',
first_name: 'Jon',
last_name: 'Doe',
email: '[email protected]',
address: { number: '12', street: 'rue de la Paix', zip: '75002', city: 'Paris', country: 'FR' },
},
},
},
}),
});
const { data } = await response.json();
const signingUrl = data.links.next;Query parameters
| Parameter | Required | Description |
|---|---|---|
redirect_uri | No | Where the customer is sent once the e-mandate is signed. Without it, the customer stays on a Fintecture confirmation page. |
state | No | Your own reference, up to 36 characters, returned on the redirect and in webhooks. |
with_beneficiary | No | true to include your beneficiary details in the response. |
Body
| Attribute | Required | Description |
|---|---|---|
meta.authentication_methods | No | Verification methods offered to the customer, in order of preference: bank_account (bank connection) and/or bank_transfer. The first one is shown first; the others are offered as fallbacks. A single value removes the fallback. Default: ["bank_account", "bank_transfer"]. |
meta.send_invitation_email | No | true to have Fintecture email the signing link to the customer. Default: false, in which case you send the customer to links.next yourself. |
data.type | No | e-mandates |
data.attributes.creditor_identifier | Yes | Your SEPA creditor identifier (ICS), up to 35 characters. |
data.attributes.rum | No | Unique mandate reference (RUM), 1 to 35 characters. It must be unique among your e-mandates. If omitted, Fintecture generates one (FTE followed by 32 characters). |
data.attributes.currency | No | EUR, the only accepted value. |
data.attributes.debtor.name | Yes | Customer's full name, 1 to 70 characters. Printed on the mandate. |
data.attributes.debtor.email | Yes | Customer's email. Fintecture sends the signed mandate PDF to it. |
data.attributes.debtor.address | Yes | Customer's postal address, see below. |
data.attributes.debtor.first_name | No | Customer's first name. |
data.attributes.debtor.last_name | No | Customer's last name. |
data.attributes.debtor.phone_prefix | No | International dialling prefix, for example +33. |
data.attributes.debtor.phone | No | Phone number without the prefix. |
data.attributes.debtor.company_name | No | For a business customer. When set, incorporation is required. |
data.attributes.debtor.incorporation | If company_name | Company registration, see below. |
debtor.address
| Attribute | Required | Description |
|---|---|---|
number | No | Street number, up to 10 characters. |
street | Yes | Street name, up to 60 characters. |
zip | Yes | Postal code, up to 15 characters. |
city | Yes | City, up to 50 characters. |
country | Yes | ISO 3166-1 alpha-2 country code, for example FR. |
debtor.incorporation
| Attribute | Required | Description |
|---|---|---|
registry | Yes | SIREN (9 digits), SIRET (14 digits), VAT (2-letter country code followed by 2 to 13 characters), HRB or CREF. |
id | Yes | Registration number for that registry, 7 to 15 characters. Spaces are removed. |
country | Yes | ISO 3166-1 alpha-2 country code of the registry. |
The customer's IBAN comes from the verificationYou don't send the account to debit. The customer selects it during verification, and it appears in
debtor.ibanonce the e-mandate is signed.
2. Read the response
A 201 Created returns the e-mandate in draft:
{
"data": {
"type": "e-mandates",
"id": "9e2c7e69-732d-4adf-bede-f4ad15d9e8a3",
"attributes": {
"status": "draft",
"flow_step": "bank_account_verification",
"rum": "FTEa3f69fe87aa34b57b0b1274de55947f1",
"creditor_identifier": "FR38ZZZ882BC6",
"scheme": "core",
"currency": "EUR",
"created_at": "2026-10-27T15:20:11.000Z",
"debtor": {
"name": "Jon Doe",
"email": "[email protected]",
"address": { "number": "12", "street": "rue de la Paix", "zip": "75002", "city": "Paris", "country": "FR" }
}
},
"links": {
"next": "https://api.sandbox.fintecture.com/v1/kyu/redirect?state=emandates:9e2c7e69-732d-4adf-bede-f4ad15d9e8a3:emandate"
}
}
}Store data.id: it is the emandate_id you use for every later call.
3. Send the customer to sign
Redirect the customer to data.links.next, or set meta.send_invitation_email to true to let Fintecture email it. The link takes them through verification and signature, as shown in Integrate e-mandates.
Once signed, the customer is redirected to your redirect_uri with three query parameters:
https://www.my-shop.com/mandate/return?emandate_id=9e2c7e69-732d-4adf-bede-f4ad15d9e8a3&status=active&state=order-1234
Don't rely on the redirect aloneThe customer may close the browser before the redirect. Confirm the status with the
emandates.status.activewebhook or by reading the e-mandate.
Errors
| Status | Cause | Fix |
|---|---|---|
400 | A required field is missing, a value is too long or badly formatted, or an unknown field was sent. | The error details name the field. |
401 | Missing or expired access token, or an invalid signature in production. | Request a new token; check the HTTP Signature. |
403 | The application does not have the e-mandates scope. | Check your application in the Console, or contact support. |
404 BENEFICIARY_NOT_FOUND | Your application has no beneficiary. | Add a beneficiary to the application in the Console. |
409 CONFLICT | An e-mandate with this rum already exists. | Use a new rum, or omit it to let Fintecture generate one. |
Updated about 1 hour ago