2. Payments into a wallet – bank transfer

Introduction

A user may transfer funds from their bank account to their wallet (each wallet has an IBAN). There’s no endpoint for this as it’s initiated by the user and not by Customate. However, Customate can send a webhook to advise of incoming funds into a wallet.

Timings for money into a customate wallet from external bank account

Customates banking partners Incoming payment processing stops at 17:45 CET normal business days with incoming payments are not processed on public holidays (or weekends). Customate calls the banking partners API for money in at 5, 20, 35 and 50 minutes past the hour, 7 days per week.

Payments during normal business days:

  • If user pays out from their external bank to customate wallet at 18:00 CET on Thursday it will credit Customate wallet at 00:05 CET Friday as Customates banking partners Incoming payment processing stops at 17:45 CET and resumes next business day at 00:00 CET. Customate calls the banking partner API at 00:05 CET Friday, receives funds, credits the Customate wallet and marks status as success.
  • If user pays out from their bank to customate wallet at 17:00 CET on Thursday it will credit Customate wallet at 17:05 CET Thursday as Customate calls the banking partner API at 17:05 CET, receives funds and credits the Customate wallet and marks status as success

Payments on a weekend

  • If user pays out from their bank to customate wallet at 18:00 CET on Saturday it will credit Customate wallet at 00:05 CET Monday as Customates banking partners Incoming payment processing stops at 17:45 CET on Friday and resumes next business day at 00:00 CET., Customate calls the banking partner API at 00:05 CET Monday, receives funds, credits the Customate wallet and marks status as success

Example Scenario 1: Money in from a bank sent during UK business hours

1 – User sent £1.27 from external bank to wallet at 12:09pm UTC Friday 27th Aug.

2 – Customate wallet showed status SUCCEEDED at 12:50 pm UTC Friday 27th Aug

 Webhook: Transaction updated (comes first and has the amount). Status = SUCCESS

{
  "items": [
    {
      "id": "a36db4fa-59c6-47d9-827f-54326bf902a7",
      "type": "transaction.updated",
      "creation_datetime": "2021-08-27T12:50:02.889241+00:00",
      "data": {
        "name": "IncomingBankTransfer",
        "amount": 127,
        "status": "success",
        "metadata": {},
        "error_code": null,
        "net_amount": "127",
        "error_message": null,
        "closing_balance": 55147,
        "external_reference": null,
        "funding_source": {
          "id": null
        },
        "payee": {
          "id": "e07648f2-0900-4d7c-9f41-973b9daf3430"
        },
        "schedule": {
          "id": null
        },
        "id": "b28dc846-3cf3-4992-960a-6192a1fcc110",
        "payment": {
          "id": "9db3a57e-4d68-4d44-8dd4-89944b5494ff"
        },
        "profile": "d871c453-18fe-497e-a84a-01b0f14d7a7c",
        "fee": 0
      }
    }
  ]
}

Webhook: Payment updated (came right after and has 2 types but does not show the amount). Status = PROCESSING & then SUCCESS

{
  "items": [
    {
      "id": "cd5f0744-14fa-4a53-9c62-352369b62673",
      "type": "payment.updated",
      "creation_datetime": "2021-08-27T12:50:02.917574+00:00",
      "data": {
        "status": "processing",
        "metadata": {},
        "scenario": "IncomingBankTransfer",
        "error_code": null,
        "error_message": null,
        "closing_balance": 55147,
        "funding_source": {
          "id": null
        },
        "payee": {
          "id": "e07648f2-0900-4d7c-9f41-973b9daf3430"
        },
        "id": "9db3a57e-4d68-4d44-8dd4-89944b5494ff",
        "schedule": {
          "id": null
        },
        "profile": {
          "id": "d871c453-18fe-497e-a84a-01b0f14d7a7c"
        }
      }
    },
    {
      "id": "7b33c885-4717-47ca-af3e-2a9e894dae2c",
      "type": "payment.updated",
      "creation_datetime": "2021-08-27T12:50:03.534017+00:00",
      "data": {
        "status": "success",
        "metadata": {},
        "scenario": "IncomingBankTransfer",
        "error_code": null,
        "error_message": null,
        "closing_balance": 55147,
        "funding_source": {
          "id": null
        },
        "payee": {
          "id": "e07648f2-0900-4d7c-9f41-973b9daf3430"
        },
        "id": "9db3a57e-4d68-4d44-8dd4-89944b5494ff",
        "schedule": {
          "id": null
        },
        "profile": {
          "id": "d871c453-18fe-497e-a84a-01b0f14d7a7c"
        }
      }
    }
  ]
}

 

Example Scenario 2: Money in from a bank sent on a weekend UK time

1 – User sent £1.29 from external bank to wallet at 08:58am UTC Saturday 28th Aug.

2 – Customate wallet showed status SUCCEEDED at 00:05:06 am UTC on Monday 30th Aug.

Webhook: Transaction updated (includes amount) Status = Success and Payment updated (does not include amount) Status = Processing

{
  "items": [
    {
      "id": "f30f490d-508d-4607-ad14-02abd55685cd",
      "type": "transaction.updated",
      "creation_datetime": "2021-08-30T00:05:06.506988+00:00",
      "data": {
        "name": "IncomingBankTransfer",
        "amount": 129,
        "status": "success",
        "metadata": {},
        "error_code": null,
        "net_amount": "129",
        "error_message": null,
        "closing_balance": 55942,
        "external_reference": null,
        "funding_source": {
          "id": null
        },
        "payee": {
          "id": "e07648f2-0900-4d7c-9f41-973b9daf3430"
        },
        "schedule": {
          "id": null
        },
        "id": "b54008ae-d31a-47d1-ab15-4ebc78a4c817",
        "payment": {
          "id": "0925a999-6ca7-48dd-ab18-53f52666d650"
        },
        "profile": "d871c453-18fe-497e-a84a-01b0f14d7a7c",
        "fee": 0
      }
    },
    {
      "id": "eb96e3d7-624a-43e7-ba79-f905d47dcb6d",
      "type": "payment.updated",
      "creation_datetime": "2021-08-30T00:05:06.536665+00:00",
      "data": {
        "status": "processing",
        "metadata": {},
        "scenario": "IncomingBankTransfer",
        "error_code": null,
        "error_message": null,
        "closing_balance": 55942,
        "funding_source": {
          "id": null
        },
        "payee": {
          "id": "e07648f2-0900-4d7c-9f41-973b9daf3430"
        },
        "id": "0925a999-6ca7-48dd-ab18-53f52666d650",
        "schedule": {
          "id": null
        },
        "profile": {
          "id": "d871c453-18fe-497e-a84a-01b0f14d7a7c"
        }
      }
    }
  ]
}

 

Webhook: Payment updated (does not show the amount) Status = Success

{
  "items": [
    {
      "id": "8ce42f82-92c0-4f20-a4b5-029ef8d2a2bf",
      "type": "payment.updated",
      "creation_datetime": "2021-08-30T00:05:07.001028+00:00",
      "data": {
        "status": "success",
        "metadata": {},
        "scenario": "IncomingBankTransfer",
        "error_code": null,
        "error_message": null,
        "closing_balance": 55942,
        "funding_source": {
          "id": null
        },
        "payee": {
          "id": "e07648f2-0900-4d7c-9f41-973b9daf3430"
        },
        "id": "0925a999-6ca7-48dd-ab18-53f52666d650",
        "schedule": {
          "id": null
        },
        "profile": {
          "id": "d871c453-18fe-497e-a84a-01b0f14d7a7c"
        }
      }
    }
  ]
}

 

Sandbox endpoint to simulate a bank transfer into a wallet

The service_payments endpoint (sandbox only) simulates an external bank payment into a Customate wallet. The API processes it as if it was received from a bank, creates the necessary objects (payment, transactions) and sends webhook events.

This endpoint creates a bank transfer instruction and returns its ID. It’s only available in the sandbox.

Required information for the endpoint, service_payments

  • amount, in pence or cents
  • scenario (IncomingBankTransfer)
  • payee ID (must be of type wallet)

Optional information

  • description

 

Example JSON request for sandbox simulation
{
  "amount": 1200,
  "scenario": "IncomingBankTransfer",
  "description": "Deposit for apartment #121",
  "payee_id": "fdbf7995-84f6-4c28-b5e8-9ebec78c8edc"
}

Example response
{
  "id": "6c67dcce-2a21-485f-948f-92582af50a9f"
}