Save bank details for future payments
This guide describes how to save shopper's bank details and use it for subsequent payments.
Save bank details for the first time
- Call Create a Customer API if it is a new customer and save the returned Customer ID.
Example request:
Shell1curl --request POST \2--url 'https://api-demo.airwallex.com/api/v1/pa/customers/create' \3--header 'Content-Type: application/json' \4--header 'Authorization: Bearer <your_bearer_token>' \5--data '{6 "request_id": "f387ff37-c535-4dd5-999d-6bdcc25cf328",7 "merchant_customer_id": "143ffd72-6564-446e-b413-b7956af281e1",8 "email": "[email protected]",9 "phone_number": "15566668888",10 "first_name": "John",11 "last_name": "Doe",12 "additional_info": {13 "register_via_social_media": true,14 "registration_date":"2012-12-30",15 "first_successful_order_date": "2012-12-30"16 }17}'
Example response:
JSON1{2 "id": "cus_sgstcsjwdgsxshryfnf",3 "request_id": "f387ff37-c535-4dd5-999d-6bdcc25cf328",4 "merchant_customer_id": "143ffd72-6564-446e-b413-b7956af281e1",5 "first_name": "John",6 "last_name": "Doe",7 "email": "[email protected]",8 "phone_number": "15566668888",9 "additional_info": {10 "registered_via_social_media": false,11 "registration_date": "2012-12-30",12 "first_successful_order_date": "2012-12-30"13 },14 "client_secret": "eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE3MDY1OTg0MjYsImV4cCI6MTcwNjYwMjAyNiwidHlwZSI6ImNsaWVudC1zZWNyZXQiLCJwYWRjIjoiU0ciLCJhY2NvdW50X2lkIjoiNjgwYjAyOWUtYzA5MC00MTI2LTkzYWMtZmZiYTUwYTZjNmQ3IiwiY3VzdG9tZXJfaWQiOiJjdXNfc2dzdGNzandkZ3N4c2hyeWZuZiJ9.UxqGXNNGPxr35SEDPw-pnGH8w4hX41KwoPTaZ0Z3I68",15 "created_at": "2024-01-30T07:07:06+0000",16 "updated_at": "2024-01-30T07:07:06+0000"17}
- Create a PaymentConsent API with the Customer ID from Step 1, and save Consent ID for subsequent transactions. Note that a payment consent can be created without providing a payment method immediately. You can update payment_consents API to attach payment_method later on.
Example request:
Shell1curl --request POST \2--url 'https://api-demo.airwallex.com/api/v1/pa/payment_consents/create' \3--header 'Content-Type: application/json' \4--header 'Authorization: Bearer <your_bearer_token>' \5--data '6{7 "request_id": "8e14085c-7e8f-4a3c-ad19-0f4e2e8fc25e",8 "customer_id": "cus_sgstcsjwdgsxshryfnf",9 "next_triggered_by": "customer",10 "merchant_trigger_reason": "unscheduled"11}12'
Example response:
JSON1{23 "id": "cst_sgstcsjwdgsxshs4isd",4 "request_id": "8e14085c-7e8f-4a3c-ad19-0f4e2e8fc25e",5 "customer_id": "cus_sgstcsjwdgsxshryfnf",6 "next_triggered_by": "customer",7 "merchant_trigger_reason": "unscheduled",8 "metadata": {9 "foo": "bar"10 },11 "status": "PENDING_VERIFICATION",12 "created_at": "2024-01-30T07:07:06+0000",13 "updated_at": "2024-01-30T07:07:06+0000",14 "client_secret": "eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE3MDY1OTg0MjYsImV4cCI6MTcwNjYwMjAyNiwidHlwZSI6ImNsaWVudC1zZWNyZXQiLCJwYWRjIjoiU0ciLCJhY2NvdW50X2lkIjoiNjgwYjAyOWUtYzA5MC00MTI2LTkzYWMtZmZiYTUwYTZjNmQ3IiwiY29uc2VudF9pZCI6ImNzdF9zZ3N0Y3Nqd2Rnc3hzaHM0aXNkIn0.yctS8xP-vMjys0SJ_rz44g8wY96cDcN_iGIQFWn6BHE",15 "purpose": "recurring"16}
- Verify payment_consents API through a transaction authorization or verification. You have 2 options to get the payment consent verified
Option 1: Save bank account details without a payment
The shopper only attaches the bank account details for future payments.
Plaid verification
Example request:
Shell1url --request POST \2--url 'https://api-demo.airwallex.com/api/v1/pa/payment_consents/cst_sgstr8wqfga4vna9wc1/verify' \3--header 'Content-Type: application/json' \4--header 'Authorization: Bearer <your_bearer_token>' \5--data '6{7 "request_id": "c8812204-0b15-4ae0-8758-26c4b601b055",8 "payment_method": {9 "type": "eft_direct_debit",10 "eft_direct_debit": {11 "business_account": true,12 "owner_name": "John doe",13 "owner_email": "[email protected]"14 }15 },16 "verification_options": {17 "eft_direct_debit": {18 "method": "plaid"19 }20 },21 "descriptor": "Airwallex",22 "return_url": "https://www.airwallex.com"23}24'
Example response:
JSON1{2 "id": "cst_sgstcsjwdgsxshs4isd",3 "request_id": "79d88762-fb26-4d0b-8f70-e1db5df21292",4 "customer_id": "cus_sgstcsjwdgsxshryfnf",5 "payment_method": {6 "type": "eft_direct_debit"7 },8 "next_triggered_by": "merchant",9 "merchant_trigger_reason": "unscheduled",10 "metadata": {11 "foo": "bar"12 },13 "status": "PENDING_VERIFICATION",14 "created_at": "2024-01-30T07:07:06+0000",15 "updated_at": "2024-01-30T07:13:56+0000",16 "next_action": {17 "type": "redirect",18 "method": "GET",19 "url": "https://checkout-staging.airwallex.com/#/page/sg/plaid/verify/txn_sgstnvlvcgsxsojgco0_hs4isd?link_token=link-sandbox-70098ab3-3044-42d6-8dff-d12693395db4"20 },21 "purpose": "recurring"22}
Micro deposit verification
Example request:
Shell1POST /api/v1/pa/payment_consents/cst_sgstcsjwdgsxshs4isd/verify2{3 "request_id": "19413178-6ada-4a17-8776-2a684b1d7999",4 "payment_method": {5 "type": "eft_direct_debit",6 "eft_direct_debit": {7 "account_number": "0033441",8 "institution_number": "010",9 "transit_number": "04832",10 "business_account": false,11 "owner_name": "John Doe",12 "owner_email": "[email protected]",13 "mandate_version" : "1.0"14 }15 },16 "verification_options": {17 "eft_direct_debit": {18 "method": "micro_deposit"19 }20 },21 "descriptor": "Airwallex",22 "return_url": "https://www.airwallex.com"23}
Example response:
JSON1{2 "id": "cst_sgstcsjwdgsxshs4isd",3 "request_id": "19413178-6ada-4a17-8776-2a684b1d7999",4 "customer_id": "cus_sgstcsjwdgsxshryfnf",5 "payment_method": {6 "type": "eft_direct_debit",7 "id": "mtd_sgst6b57zgsxshsa6gb",8 "eft_direct_debit": {9 "account_number": "0033441",10 "institution_number": "010",11 "transit_number": "04832",12 "business_account": false,13 "owner_name": "John Doe",14 "owner_email": "[email protected]",15 "micro_deposit": {16 "status": "PENDING"17 }18 }19 },20 "next_triggered_by": "merchant",21 "merchant_trigger_reason": "unscheduled",22 "metadata": {23 "foo": "bar"24 },25 "status": "PENDING_VERIFICATION",26 "created_at": "2024-01-30T07:07:06+0000",27 "updated_at": "2024-01-30T07:07:07+0000",28 "next_action": {29 "type": "notify_micro_deposits",30 "url": "https://checkout-staging.airwallex.com/#/page/direct-debit-verify-account/sg/vfy_sgst9sv9cgsxshsjtd6_hs4isd",31 "micro_deposit_count": 2,32 "email": "[email protected]",33 "remaining_attempts": 334 },35 "mandate": {36 "type": "eft_direct_debit",37 "version": "1.0",38 "accepted_at": "2024-01-30T07:07:06+0000"39 },40 "purpose": "recurring"41}
Micro deposit + micro debit verification
Example request:
Shell1POST /api/v1/pa/payment_consents/cst_sgstcsjwdgsxshs4isd/verify2{3 "request_id": "19413178-6ada-4a17-8776-2a684b1d7999",4 "payment_method": {5 "type": "eft_direct_debit",6 "eft_direct_debit": {7 "account_number": "0033441",8 "institution_number": "010",9 "transit_number": "04832",10 "business_account": false,11 "owner_name": "John Doe",12 "owner_email": "[email protected]",13 "mandate_version" : "1.0"14 }15 },16 "verification_options": {17 "eft_direct_debit": {18 "method": "micro_deposit_and_debit"19 }20 },21 "descriptor": "Airwallex",22 "return_url": "https://www.airwallex.com"23}
Example response:
JSON1{2 "id": "cst_sgstcsjwdgsxshs4isd",3 "request_id": "19413178-6ada-4a17-8776-2a684b1d7999",4 "customer_id": "cus_sgstcsjwdgsxshryfnf",5 "payment_method": {6 "type": "eft_direct_debit",7 "id": "mtd_sgst6b57zgsxshsa6gb",8 "eft_direct_debit": {9 "account_number": "0033441",10 "institution_number": "010",11 "transit_number": "04832",12 "business_account": false,13 "owner_name": "John Doe",14 "owner_email": "[email protected]",15 "micro_deposit": {16 "status": "PENDING"17 },18 "micro_debit": {19 "status": "PENDING"20 }21 }22 },23 "next_triggered_by": "merchant",24 "merchant_trigger_reason": "unscheduled",25 "metadata": {26 "foo": "bar"27 },28 "status": "PENDING_VERIFICATION",29 "created_at": "2024-01-30T07:07:06+0000",30 "updated_at": "2024-01-30T07:07:07+0000",31 "next_action": {32 "type": "notify_micro_deposits",33 "url": "https://checkout-staging.airwallex.com/#/page/direct-debit-verify-account/sg/vfy_sgst9sv9cgsxshsjtd6_hs4isd",34 "micro_deposit_count": 2,35 "email": "[email protected]",36 "remaining_attempts": 337 },38 "mandate": {39 "type": "eft_direct_debit",40 "version": "1.0",41 "accepted_at": "2024-01-30T07:07:06+0000"42 },43 "purpose": "recurring"44}
Option 2: Save bank account details during payment
The shopper pays for the first order and attaches the bank account details for future payments. You can Create a PaymentIntent API and Confirm a PaymentIntent API with payment_consent_reference from Step 2. This will return SUCCEEDED status for the first payment if the verification is successfull.
Example request:
Shell1POST /api/v1/pa/payment_intents/create2{3 "request_id": "20780f04-5eff-4227-af8e-4c4d2f4d68b7",4 "amount": 4.4,5 "currency": "CAD",6 "customer_id": "cus_sgstpkhp5ga4vn7rqyo",7 "merchant_order_id": "ea95b90f-2ba5-43f8-a6ab-9fa2ce476426",8 "return_url": "https://www.baidu.com",9 "descriptor": "For internal testing",10 "additional_data": "131231232"11}
Example response:
JSON1{2 "id": "int_sgstbn2sxgai33j69xs",3 "request_id": "20780f04-5eff-4227-af8e-4c4d2f4d68b7",4 "amount": 4.4,5 "currency": "CAD",6 "customer_id": "cus_sgstpkhp5ga4vn7rqyo",7 "merchant_order_id": "ea95b90f-2ba5-43f8-a6ab-9fa2ce476426",8 "descriptor": "For internal testing",9 "status": "REQUIRES_PAYMENT_METHOD",10 "captured_amount": 0,11 "created_at": "2022-06-07T07:41:44+0000",12 "updated_at": "2022-06-07T07:41:45+0000",13 "available_payment_method_types": [14 "eft_direct_debit"15 ],16 "client_secret": "eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2NTQ1ODc3MDUsImV4cCI6MTY1NDU5MTMwNSwiYWNjb3VudF9pZCI6ImRiMGJkMDgzLTlkZDUtNDk3ZC05ZGFkLWI3NGNkOGNiMWE4ZiIsImludGVudF9pZCI6ImludF9zZ3N0Ym4yc3hnYWkzM2o2OXhzIiwicGFkYyI6IlNHIiwiYnVzaW5lc3NfbmFtZSI6IkdvcmN6YW55LCBNYWNlamtvdmljIGFuZCBKYWt1Ym93c2tpIn0.zjunyrRE4Wq1YTUUQBqWt4ACmL_rJCnhIR81OM1Fl8k",17 ...18}
Plaid verification
Example request:
Shell1POST /api/v1/pa/payment_intents/int_sgstbn2sxgai33j69xs/confirm2{3 "request_id": "c38579ad-4c08-4aad-9dbb-8965bd7c11ac",4 "payment_method": {5 "type": "eft_direct_debit",6 "id": "mtd_sgstbzd9ngf6lw52enq",7 "eft_direct_debit": {8 "business_account": true,9 "owner_name": "John Doe",10 "owner_email": "[email protected]"11 }12 },13 "payment_consent_reference": {14 "id": "cst_sgstfvwszgf1fm9uk9w"15 }16}
Example response:
JSON1{2 "id": "int_sgstpf54lgf6t7z71eh",3 "request_id": "c38579ad-4c08-4aad-9dbb-8965bd7c11ac",4 "amount": 4.4,5 "currency": "CAD",6 "merchant_order_id": "ea95b90f-2ba5-43f8-a6ab-9fa2ce476426",7 "customer_id": "cus_sgsts772qgf6t6fjpxb",8 "payment_consent_id": "cst_sgstpf54lgf6t6h2i0r",9 "descriptor": "For internal testing",10 "status": "REQUIRES_CUSTOMER_ACTION",11 "captured_amount": 0,12 "latest_payment_attempt": {13 "id": "att_sgstpf54lgf6t817nlq_7z71eh",14 "amount": 4.4,15 "currency": "CAD",16 "payment_method": {17 "type": "eft_direct_debit",18 "eft_direct_debit": {19 "account_number": "0033441",20 "institution_number": "010",21 "transit_number": "04832",22 "business_account": false,23 "owner_name": "John Doe",24 "owner_email": "[email protected]",25 }26 },27 "payment_intent_id": "int_sgstpf54lgf6t7z71eh",28 "payment_consent_id": "cst_sgstpf54lgf6t6h2i0r",29 "status": "AUTHENTICATION_REDIRECTED",30 "captured_amount": 0,31 "refunded_amount": 0,32 "created_at": "2022-11-07T08:29:12+0000",33 "updated_at": "2022-11-07T08:29:16+0000",34 "settle_via": "airwallex",35 "authentication_data": {36 "ds_data": {},37 "fraud_data": {38 "score": "0"39 },40 "avs_result": "U",41 "cvc_result": "U"42 }43 },44 "created_at": "2022-11-07T08:29:09+0000",45 "updated_at": "2022-11-07T08:29:16+0000",46 "next_action": {47 "type": "redirect",48 "method": "GET",49 "url": "https://checkout-staging.airwallex.com/#/page/sg/plaid/pay/txn_sgstmfkqggf6t82emp1_7z71eh?link_token=link-sandbox-68861238-5db8-44eb-8615-20c99cb22271"50 },51 "base_amount": 4.452 ...53}
Micro deposit verification
Example request:
Shell1POST /api/v1/pa/payment_intents/int_sgstbn2sxgai33j69xs/confirm2{3 "request_id": "c38579ad-4c08-4aad-9dbb-8965bd7c11ac",4 "payment_method": {5 "type": "eft_direct_debit",6 "id": "mtd_sgstbzd9ngf6lw52enq",7 "eft_direct_debit": {8 "account_number": "0033441",9 "institution_number": "010",10 "transit_number": "04832",11 "business_account": false,12 "owner_name": "John Doe",13 "owner_email": "[email protected]",14 }15 },16 "payment_consent_reference": {17 "id": "cst_sgstfvwszgf1fm9uk9w"18 }19}
Example response:
JSON1{2 "id": "int_sgstbn2sxgai33j69xs",3 "request_id": "c38579ad-4c08-4aad-9dbb-8965bd7c11ac",4 "amount": 4.4,5 "currency": "CAD",6 "merchant_order_id": "ea95b90f-2ba5-43f8-a6ab-9fa2ce476426",7 "payment_consent_id": "cus_sgstpkhp5ga4vn7rqyo",8 "descriptor": "For internal testing",9 "status": "REQUIRES_CUSTOMER_ACTION",10 "captured_amount": 0,11 "latest_payment_attempt": {12 "id": "att_sgstjjpnbgf6o7wlijd_3j69xs",13 "amount": 4.4,14 "currency": "CAD",15 "payment_method": {16 "id": "mtd_sgstjjpnbgf6o7wftae",17 "customer_id": "cus_sgstjjpnbgf6lw15hwy",18 "type": "eft_direct_debit",19 "eft_direct_debit": {20 "account_number": "0033441",21 "institution_number": "010",22 "transit_number": "04832",23 "business_account": false,24 "owner_name": "John Doe",25 "owner_email": "[email protected]",26 },27 "status": "CREATED",28 "created_at": "2022-11-07T05:27:40+0000",29 "updated_at": "2022-11-07T05:27:40+0000"30 },31 "payment_intent_id": "int_sgstbn2sxgai33j69xs",32 "payment_consent_id": "cus_sgstpkhp5ga4vn7rqyo",33 "status": "AUTHENTICATION_REDIRECTED",34 "captured_amount": 0,35 "refunded_amount": 0,36 "created_at": "2022-11-07T05:27:41+0000",37 "updated_at": "2022-11-07T05:27:49+0000",38 "settle_via": "airwallex",39 "authentication_data": {40 "ds_data": {},41 "fraud_data": {42 "action": "VERIFY",43 "score": "0"44 },45 "avs_result": "U",46 "cvc_result": "U"47 }48 },49 "created_at": "2022-11-07T05:27:22+0000",50 "updated_at": "2022-11-07T05:27:49+0000",51 "next_action": {52 "type": "notify_micro_deposits",53 "url": "https://checkout-staging.airwallex.com/#/page/direct-debit-verify-account/sg/vfy_sgstmfkqggf6o81nrm8_7lbs9n",54 "micro_deposit_count": "2",55 "email": "[email protected]"56 },57 "base_amount": 1058 ...59}
Successful verification will result in the status of payment consent changed to VERIFIED. If the payment consent is not verified, the status will stay as PENDING_VERIFICATION, and next_action will appear in the response.
Initiate a subsequent transaction using stored bank account details
- Create a PaymentIntent API with the corresponding
Customer ID.
Example request:
Shell1POST /api/v1/pa/payment_intents/create
Shell1{2 "request_id": "e71db33e-e191-48b1-82ae-ed19fdcc3fd9",3 "amount": 4.4,4 "currency": "CAD",5 "customer_id": "cus_sgstpkhp5ga4vn7rqyo",6 "merchant_order_id": "ea95b90f-2ba5-43f8-a6ab-9fa2ce476426",7 "return_url": "https://www.baidu.com",8 "descriptor": "For internal testing",9 "additional_data": "131231232"10}
Example response:
JSON1{2 "id": "int_sgstbzd9ngf6oc3f6ce",3 "request_id": "e71db33e-e191-48b1-82ae-ed19fdcc3fd9",4 "amount": 4.4,5 "currency": "CAD",6 "merchant_order_id": "ea95b90f-2ba5-43f8-a6ab-9fa2ce476426",7 "customer_id": "cus_sgstjjpnbgf6lw15hwy",8 "descriptor": "For internal testing",9 "status": "REQUIRES_PAYMENT_METHOD",10 "captured_amount": 0,11 "created_at": "2022-11-07T05:31:54+0000",12 "updated_at": "2022-11-07T05:31:54+0000",13 "available_payment_method_types": [14 "eft_direct_debit"15 ],16 "client_secret": "eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2Njc3OTkxMTQsImV4cCI6MTY2NzgwMjcxNCwidHlwZSI6ImNsaWVudC1zZWNyZXQiLCJwYWRjIjoiU0ciLCJhY2NvdW50X2lkIjoiMTc1MjY1YWMtMGVmZi00ODg4LTlhNDgtMzI4NTE3YmJmNGFhIiwiaW50ZW50X2lkIjoiaW50X3Nnc3RiemQ5bmdmNm9jM2Y2Y2UiLCJjdXN0b21lcl9pZCI6ImN1c19zZ3N0ampwbmJnZjZsdzE1aHd5IiwiYnVzaW5lc3NfbmFtZSI6IkdveWV0dGUgTExDIn0.bE164aOthTfFQYqcBro5fGbwvhw5w0RS3Y1MruCyHg0",17 "base_amount": 4.418 ...19}
- Confirm a PaymentIntent API with
payment_consent_reference.idto request payment with reference to the stored PaymentConsent.
Example request:
Shell1POST /api/v1/pa/payment_intents/int_sgstbn2sxgai33j69xs/confirm2{3 "request_id": "c38579ad-4c08-4aad-9dbb-8965bd7c11ac",4 "payment_consent_reference": {5 "id": "cst_sgstr8wqfga4vna9wc1"6 }7}
Example response:
JSON1{2 "id": "int_sgstbn2sxgai33j69xs",3 "request_id": "c38579ad-4c08-4aad-9dbb-8965bd7c11ac",4 "amount": 4.4,5 "currency": "CAD",6 "customer_id": "cus_sgstpkhp5ga4vn7rqyo",7 "merchant_order_id": "ea95b90f-2ba5-43f8-a6ab-9fa2ce476426",8 "descriptor": "For internal testing",9 "status": "PENDING",10 "captured_amount": 0,11 "created_at": "2022-06-08T02:24:20+0000",12 "updated_at": "2022-06-08T02:24:20+0000",13 "client_secret": "eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2NTQ2NTUwNjAsImV4cCI6MTY1NDY1ODY2MCwiYWNjb3VudF9pZCI6ImRiMGJkMDgzLTlkZDUtNDk3ZC05ZGFkLWI3NGNkOGNiMWE4ZiIsImludGVudF9pZCI6ImludF9zZ3N0bXpkNTJnYWl5MWd0czg1IiwicGFkYyI6IlNHIiwiYnVzaW5lc3NfbmFtZSI6IkdvcmN6YW55LCBNYWNlamtvdmljIGFuZCBKYWt1Ym93c2tpIn0.X_HQSYf8tbwjtZI2HzS9MjEbO1dTiQopyi-Pw6iny1I",14 ...15}
- You can also get a list of PaymentConsents API with the corresponding
Customer IDto render the list of shopper’s payment methods they previously saved.
Example request:
Shell1GET /api/v1/pa/payment_consents
Example response:
JSON1{2 "has_more": false,3 "items": [4 {5 "id": "cst_sgstr8wqfga4vna9wc1",6 "request_id": "e06ba29c-aabc-4a17-accf-c08fe06f418d",7 "customer_id": "cus_sgstpkhp5ga4vn7rqyo",8 "payment_method": {9 "type": "eft_direct_debit",10 "id": "mtd_sgstr8wqfga4vnabxmy",11 "eft_direct_debit": {12 "account_number": "0033441",13 "institution_number": "010",14 "transit_number": "04832",15 "business_account": false,16 "owner_name": "John Doe",17 "owner_email": "[email protected]",18 "mandate_version" : "1.0"19 }20 },21 "next_triggered_by": "merchant",22 "merchant_trigger_reason": "unscheduled",23 "status": "PENDING_VERIFICATION",24 "created_at": "2022-05-26T08:12:30+0000",25 "updated_at": "2022-05-26T08:12:30+0000",26 "client_secret": "eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2NTM1NTI3NTEsImV4cCI6MTY1MzU1NjM1MSwiYWNjb3VudF9pZCI6ImRiMGJkMDgzLTlkZDUtNDk3ZC05ZGFkLWI3NGNkOGNiMWE4ZiIsImRhdGFfY2VudGVyX3JlZ2lvbiI6IlNHIiwiY29uc2VudF9pZCI6ImNzdF9zZ3N0cjh3cWZnYTR2bmE5d2MxIiwicGFkYyI6IlNHIn0.gqCk3eANNbn5DX7UpsA6uG8JoXksn3Yy7JSJaVTcqZg",27 "mandate": {28 "accepted_at": "2022-05-26T08:12:30+0000",29 "version": "1.0"30 }31 }32 ]33 ...34}