Repository: liberapay/liberapay.com

Issue:
Some payments still not giving meta data in Stripe
Hi, in a previous ticket at my request (thanks again), you added some data to Stripe payments to mention it was from Liberapay.

Some payments however don't note this. It's important for many reasons including taxes, enabling people to quickly match up where funds are actually coming from.

Please ensure all Stripe payments actually note they're from Liberapay. Can give example if needed. If you're able to, the May 16, 2021 transaction on the GamingOnLinux Liberapay account of €11.93 had no info on the payout.


Discussion:

Resolving patch:
diff --git a/liberapay/constants.py b/liberapay/constants.py
--- a/liberapay/constants.py
+++ b/liberapay/constants.py
@@ -89,7 +89,7 @@ def __missing__(self, currency):
 
 AVATAR_QUERY = '?s=160&d=404'
 AVATAR_SOURCES = (
-    'libravatar bitbucket facebook github gitlab google mastodon pleroma twitch twitter youtube'
+    'libravatar bitbucket github gitlab mastodon pleroma twitch twitter'
 ).split()
 
 BASE64URL_CHARS = set('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_')
diff --git a/liberapay/payin/stripe.py b/liberapay/payin/stripe.py
--- a/liberapay/payin/stripe.py
+++ b/liberapay/payin/stripe.py
@@ -443,7 +443,9 @@ def execute_transfer(db, pt, destination, source_transaction):
         return update_payin_transfer(db, pt.id, '', 'failed', str(e))
     # `Transfer` objects don't have a `status` attribute, so if no exception was
     # raised we assume that the transfer was successful.
-    return update_payin_transfer(db, pt.id, tr.id, 'succeeded', None)
+    pt = update_payin_transfer(db, pt.id, tr.id, 'succeeded', None)
+    update_transfer_metadata(tr, pt)
+    return pt
 
 
 def refund_payin(db, payin, refund_amount=None):


Test patch:
diff --git a/liberapay/testing/vcr.py b/liberapay/testing/vcr.py
--- a/liberapay/testing/vcr.py
+++ b/liberapay/testing/vcr.py
@@ -1,4 +1,5 @@
 import logging
+import os
 from os.path import join, dirname, realpath
 
 from vcr import VCR
@@ -41,7 +42,7 @@ def deserialize(cassette_str):
 
 vcr = VCR(
     cassette_library_dir=FIXTURES_ROOT,
-    record_mode='once',
+    record_mode=os.environ.get('VCR', 'once'),
     match_on=['method', 'scheme', 'host', 'path', 'query'],
 )
 vcr.register_serializer('custom', CustomSerializer)
diff --git a/tests/py/fixtures/TestPayinsStripe.yml b/tests/py/fixtures/TestPayinsStripe.yml
--- a/tests/py/fixtures/TestPayinsStripe.yml
+++ b/tests/py/fixtures/TestPayinsStripe.yml
@@ -5,20 +5,20 @@ interactions:
     method: POST
     uri: https://api.stripe.com/v1/tokens
   response:
-    body: {string: "{\n  \"id\": \"btok_1GVfmOFk4eGpfLOCCBSQRMed\",\n  \"object\"\
-        : \"token\",\n  \"bank_account\": {\n    \"id\": \"ba_1GVfmOFk4eGpfLOCK3U72yxe\"\
+    body: {string: "{\n  \"id\": \"btok_1Iw2ndFk4eGpfLOCguUqtOCz\",\n  \"object\"\
+        : \"token\",\n  \"bank_account\": {\n    \"id\": \"ba_1Iw2ndFk4eGpfLOCsI18TW3G\"\
         ,\n    \"object\": \"bank_account\",\n    \"account_holder_name\": \"Jane\
         \ Doe\",\n    \"account_holder_type\": null,\n    \"bank_name\": \"STRIPE\
         \ TEST BANK\",\n    \"country\": \"DE\",\n    \"currency\": \"eur\",\n   \
         \ \"fingerprint\": \"vYeSfyBOnTdv1v6W\",\n    \"last4\": \"3000\",\n    \"\
         routing_number\": \"110000000\",\n    \"status\": \"new\"\n  },\n  \"client_ip\"\
-        : \"109.190.32.190\",\n  \"created\": 1586359528,\n  \"livemode\": false,\n\
+        : \"77.128.117.173\",\n  \"created\": 1622197217,\n  \"livemode\": false,\n\
         \  \"type\": \"bank_account\",\n  \"used\": false\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['551']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:28 GMT']
+      Date: ['Fri, 28 May 2021 10:20:17 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -28,26 +28,61 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [8e4d90bc-d1e3-4585-a907-8d0e38bad416]
-      original-request: [req_SDbtgXLPUgNBG7]
-      request-id: [req_SDbtgXLPUgNBG7]
+      idempotency-key: [create_german_bank_account_token_2100]
+      original-request: [req_WmZKV4jmquQuyd]
+      request-id: [req_WmZKV4jmquQuyd]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: account[tos_shown_and_accepted]=True
+    body: bank_account[country]=CH&bank_account[currency]=CHF&bank_account[account_number]=CH9300762011623852957&bank_account[account_holder_name]=Foo+Bar
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/tokens
   response:
-    body: {string: "{\n  \"id\": \"ct_1GVfmPFk4eGpfLOCwTLgJMhH\",\n  \"object\": \"\
-        token\",\n  \"client_ip\": \"109.190.32.190\",\n  \"created\": 1586359529,\n\
+    body: {string: "{\n  \"id\": \"btok_1Iw2ndFk4eGpfLOCjzq8LtAL\",\n  \"object\"\
+        : \"token\",\n  \"bank_account\": {\n    \"id\": \"ba_1Iw2ndFk4eGpfLOC23RD4hhz\"\
+        ,\n    \"object\": \"bank_account\",\n    \"account_holder_name\": \"Foo Bar\"\
+        ,\n    \"account_holder_type\": null,\n    \"bank_name\": \"STRIPE TEST BANK\"\
+        ,\n    \"country\": \"CH\",\n    \"currency\": \"chf\",\n    \"fingerprint\"\
+        : \"JIAY3PROGLCP57ES\",\n    \"last4\": \"2957\",\n    \"routing_number\"\
+        : \"110000000\",\n    \"status\": \"new\"\n  },\n  \"client_ip\": \"77.128.117.173\"\
+        ,\n  \"created\": 1622197217,\n  \"livemode\": false,\n  \"type\": \"bank_account\"\
+        ,\n  \"used\": false\n}\n"}
+    headers:
+      Connection: [keep-alive]
+      Content-Length: ['550']
+      Content-Type: [application/json]
+      Date: ['Fri, 28 May 2021 10:20:17 GMT']
+      Server: [nginx]
+      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
+      access-control-allow-credentials: ['true']
+      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
+      access-control-allow-origin: ['*']
+      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
+          X-Stripe-Privileged-Session-Required']
+      access-control-max-age: ['300']
+      cache-control: ['no-cache, no-store']
+      idempotency-key: [create_swiss_bank_account_token_2100]
+      original-request: [req_CmtNk0ZwALQHJo]
+      request-id: [req_CmtNk0ZwALQHJo]
+      stripe-should-retry: ['false']
+      stripe-version: ['2019-08-14']
+    status: {code: 200, message: OK}
+- request:
+    body: account[business_type]=individual&account[individual][address][country]=CH&account[individual][address][city]=Bern&account[individual][address][postal_code]=3000&account[individual][address][line1]=address_full_match&account[individual][dob][day]=1&account[individual][dob][month]=1&account[individual][dob][year]=1901&account[individual][email]=test-swiss-1%40liberapay.com&account[individual][first_name]=Foo&account[individual][last_name]=Bar&account[individual][id_number]=000000000&account[individual][phone]=%2B41665554433&account[tos_shown_and_accepted]=True
+    headers: {}
+    method: POST
+    uri: https://api.stripe.com/v1/tokens
+  response:
+    body: {string: "{\n  \"id\": \"ct_1Iw2neFk4eGpfLOCeCeDe0gJ\",\n  \"object\": \"\
+        token\",\n  \"client_ip\": \"77.128.117.173\",\n  \"created\": 1622197218,\n\
         \  \"livemode\": false,\n  \"type\": \"account\",\n  \"used\": false\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['180']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:29 GMT']
+      Date: ['Fri, 28 May 2021 10:20:18 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -57,52 +92,94 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [9edba385-38b1-4eac-b385-e8ebc92a8ea5]
-      original-request: [req_hXjkquKrB0x8s8]
-      request-id: [req_hXjkquKrB0x8s8]
+      idempotency-key: [create_swiss_account_token_2100]
+      original-request: [req_LwfR2kfcG5R5Jn]
+      request-id: [req_LwfR2kfcG5R5Jn]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: account_token=ct_1GVfmPFk4eGpfLOCwTLgJMhH&country=CH&type=custom
+    body: account_token=ct_1Iw2neFk4eGpfLOCeCeDe0gJ&country=CH&type=custom&business_profile[mcc]=5734&business_profile[url]=https%3A%2F%2Fliberapay.com%2F&capabilities[card_payments][requested]=True&capabilities[sepa_debit_payments][requested]=True&capabilities[transfers][requested]=True&external_account=btok_1Iw2ndFk4eGpfLOCjzq8LtAL
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/accounts
   response:
-    body: {string: "{\n  \"id\": \"acct_1GVfmPLo8l3IWFWX\",\n  \"object\": \"account\"\
-        ,\n  \"business_profile\": {\n    \"mcc\": null,\n    \"name\": null,\n  \
-        \  \"product_description\": null,\n    \"support_address\": null,\n    \"\
+    body: {string: "{\n  \"id\": \"acct_1Iw2ne2H54hWzJBk\",\n  \"object\": \"account\"\
+        ,\n  \"business_profile\": {\n    \"mcc\": \"5734\",\n    \"name\": null,\n\
+        \    \"product_description\": null,\n    \"support_address\": null,\n    \"\
         support_email\": null,\n    \"support_phone\": null,\n    \"support_url\"\
-        : null,\n    \"url\": null\n  },\n  \"business_type\": null,\n  \"capabilities\"\
-        : {\n    \"legacy_payments\": \"active\"\n  },\n  \"charges_enabled\": true,\n\
-        \  \"country\": \"CH\",\n  \"created\": 1586359529,\n  \"default_currency\"\
-        : \"chf\",\n  \"details_submitted\": false,\n  \"email\": null,\n  \"external_accounts\"\
-        : {\n    \"object\": \"list\",\n    \"data\": [\n\n    ],\n    \"has_more\"\
-        : false,\n    \"total_count\": 0,\n    \"url\": \"/v1/accounts/acct_1GVfmPLo8l3IWFWX/external_accounts\"\
-        \n  },\n  \"metadata\": {\n  },\n  \"payouts_enabled\": false,\n  \"requirements\"\
-        : {\n    \"current_deadline\": null,\n    \"currently_due\": [\n      \"external_account\"\
-        \n    ],\n    \"disabled_reason\": null,\n    \"errors\": [\n\n    ],\n  \
-        \  \"eventually_due\": [\n      \"business_type\",\n      \"external_account\"\
-        ,\n      \"relationship.account_opener\"\n    ],\n    \"past_due\": [\n  \
-        \    \"external_account\"\n    ],\n    \"pending_verification\": [\n\n   \
-        \ ]\n  },\n  \"settings\": {\n    \"branding\": {\n      \"icon\": null,\n\
-        \      \"logo\": null,\n      \"primary_color\": null\n    },\n    \"card_payments\"\
-        : {\n      \"decline_on\": {\n        \"avs_failure\": false,\n        \"\
-        cvc_failure\": false\n      },\n      \"statement_descriptor_prefix\": null\n\
-        \    },\n    \"dashboard\": {\n      \"display_name\": null,\n      \"timezone\"\
-        : \"Etc/UTC\"\n    },\n    \"payments\": {\n      \"statement_descriptor\"\
-        : \"\",\n      \"statement_descriptor_kana\": null,\n      \"statement_descriptor_kanji\"\
-        : null\n    },\n    \"payouts\": {\n      \"debit_negative_balances\": false,\n\
-        \      \"schedule\": {\n        \"delay_days\": 7,\n        \"interval\":\
-        \ \"daily\"\n      },\n      \"statement_descriptor\": null\n    }\n  },\n\
-        \  \"tos_acceptance\": {\n    \"date\": 1586359529,\n    \"ip\": \"109.190.32.190\"\
-        ,\n    \"user_agent\": \"Stripe/v1 PythonBindings/2.35.1\"\n  },\n  \"type\"\
-        : \"custom\"\n}\n"}
+        : null,\n    \"url\": \"https://liberapay.com/\"\n  },\n  \"business_type\"\
+        : \"individual\",\n  \"capabilities\": {\n    \"card_payments\": \"active\"\
+        ,\n    \"sepa_debit_payments\": \"active\",\n    \"transfers\": \"active\"\
+        \n  },\n  \"charges_enabled\": true,\n  \"company\": {\n    \"address\": {\n\
+        \      \"city\": \"Bern\",\n      \"country\": \"CH\",\n      \"line1\": \"\
+        address_full_match\",\n      \"line2\": null,\n      \"postal_code\": \"3000\"\
+        ,\n      \"state\": null\n    },\n    \"directors_provided\": true,\n    \"\
+        executives_provided\": true,\n    \"name\": null,\n    \"owners_provided\"\
+        : true,\n    \"phone\": \"+41665554433\",\n    \"tax_id_provided\": false,\n\
+        \    \"verification\": {\n      \"document\": {\n        \"back\": null,\n\
+        \        \"details\": null,\n        \"details_code\": null,\n        \"front\"\
+        : null\n      }\n    }\n  },\n  \"country\": \"CH\",\n  \"created\": 1622197219,\n\
+        \  \"default_currency\": \"chf\",\n  \"details_submitted\": true,\n  \"email\"\
+        : null,\n  \"external_accounts\": {\n    \"object\": \"list\",\n    \"data\"\
+        : [\n      {\n        \"id\": \"ba_1Iw2ne2H54hWzJBkFEIgJRdG\",\n        \"\
+        object\": \"bank_account\",\n        \"account\": \"acct_1Iw2ne2H54hWzJBk\"\
+        ,\n        \"account_holder_name\": \"Foo Bar\",\n        \"account_holder_type\"\
+        : null,\n        \"available_payout_methods\": [\n          \"standard\"\n\
+        \        ],\n        \"bank_name\": \"STRIPE TEST BANK\",\n        \"country\"\
+        : \"CH\",\n        \"currency\": \"chf\",\n        \"default_for_currency\"\
+        : true,\n        \"fingerprint\": \"JIAY3PROGLCP57ES\",\n        \"last4\"\
+        : \"2957\",\n        \"metadata\": {\n        },\n        \"routing_number\"\
+        : \"110000000\",\n        \"status\": \"new\"\n      }\n    ],\n    \"has_more\"\
+        : false,\n    \"total_count\": 1,\n    \"url\": \"/v1/accounts/acct_1Iw2ne2H54hWzJBk/external_accounts\"\
+        \n  },\n  \"individual\": {\n    \"id\": \"person_4Iw2ne00GMzJOzXJ\",\n  \
+        \  \"object\": \"person\",\n    \"account\": \"acct_1Iw2ne2H54hWzJBk\",\n\
+        \    \"address\": {\n      \"city\": \"Bern\",\n      \"country\": \"CH\"\
+        ,\n      \"line1\": \"address_full_match\",\n      \"line2\": null,\n    \
+        \  \"postal_code\": \"3000\",\n      \"state\": null\n    },\n    \"created\"\
+        : 1622197219,\n    \"dob\": {\n      \"day\": 1,\n      \"month\": 1,\n  \
+        \    \"year\": 1901\n    },\n    \"email\": \"test-swiss-1@liberapay.com\"\
+        ,\n    \"first_name\": \"Foo\",\n    \"id_number_provided\": true,\n    \"\
+        last_name\": \"Bar\",\n    \"metadata\": {\n    },\n    \"phone\": \"+41665554433\"\
+        ,\n    \"relationship\": {\n      \"account_opener\": true,\n      \"director\"\
+        : false,\n      \"executive\": false,\n      \"owner\": false,\n      \"percent_ownership\"\
+        : null,\n      \"representative\": true,\n      \"title\": null\n    },\n\
+        \    \"requirements\": {\n      \"currently_due\": [\n\n      ],\n      \"\
+        errors\": [\n\n      ],\n      \"eventually_due\": [\n\n      ],\n      \"\
+        past_due\": [\n\n      ],\n      \"pending_verification\": [\n        \"verification.additional_document\"\
+        ,\n        \"verification.document\"\n      ]\n    },\n    \"ssn_last_4_provided\"\
+        : true,\n    \"verification\": {\n      \"additional_document\": {\n     \
+        \   \"back\": null,\n        \"details\": null,\n        \"details_code\"\
+        : null,\n        \"front\": null\n      },\n      \"details\": null,\n   \
+        \   \"details_code\": null,\n      \"document\": {\n        \"back\": null,\n\
+        \        \"details\": null,\n        \"details_code\": null,\n        \"front\"\
+        : null\n      },\n      \"status\": \"pending\"\n    }\n  },\n  \"metadata\"\
+        : {\n  },\n  \"payouts_enabled\": false,\n  \"requirements\": {\n    \"current_deadline\"\
+        : null,\n    \"currently_due\": [\n\n    ],\n    \"disabled_reason\": \"requirements.pending_verification\"\
+        ,\n    \"errors\": [\n\n    ],\n    \"eventually_due\": [\n\n    ],\n    \"\
+        past_due\": [\n\n    ],\n    \"pending_verification\": [\n      \"individual.verification.additional_document\"\
+        ,\n      \"individual.verification.document\"\n    ]\n  },\n  \"settings\"\
+        : {\n    \"bacs_debit_payments\": {\n    },\n    \"branding\": {\n      \"\
+        icon\": null,\n      \"logo\": null,\n      \"primary_color\": null,\n   \
+        \   \"secondary_color\": null\n    },\n    \"card_issuing\": {\n      \"tos_acceptance\"\
+        : {\n        \"date\": null,\n        \"ip\": null\n      }\n    },\n    \"\
+        card_payments\": {\n      \"decline_on\": {\n        \"avs_failure\": false,\n\
+        \        \"cvc_failure\": false\n      },\n      \"statement_descriptor_prefix\"\
+        : null\n    },\n    \"dashboard\": {\n      \"display_name\": \"Liberapay\"\
+        ,\n      \"timezone\": \"Etc/UTC\"\n    },\n    \"payments\": {\n      \"\
+        statement_descriptor\": \"LIBERAPAY.COM\",\n      \"statement_descriptor_kana\"\
+        : null,\n      \"statement_descriptor_kanji\": null\n    },\n    \"payouts\"\
+        : {\n      \"debit_negative_balances\": false,\n      \"schedule\": {\n  \
+        \      \"delay_days\": 7,\n        \"interval\": \"daily\"\n      },\n   \
+        \   \"statement_descriptor\": null\n    },\n    \"sepa_debit_payments\": {\n\
+        \    }\n  },\n  \"tos_acceptance\": {\n    \"date\": 1622197218,\n    \"ip\"\
+        : \"77.128.117.173\",\n    \"user_agent\": \"Stripe/v1 PythonBindings/2.35.1\"\
+        \n  },\n  \"type\": \"custom\"\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['1939']
+      Content-Length: ['4825']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:30 GMT']
+      Date: ['Fri, 28 May 2021 10:20:20 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -112,9 +189,9 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [e98f9b1a-f278-409c-9ac9-cf95bbacc82c]
-      original-request: [req_gMDgOP2Vnqx3zN]
-      request-id: [req_gMDgOP2Vnqx3zN]
+      idempotency-key: [create_swiss_account_2100]
+      original-request: [req_SmNcZZtvz8QR8L]
+      request-id: [req_SmNcZZtvz8QR8L]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
@@ -124,24 +201,24 @@ interactions:
     method: GET
     uri: https://api.stripe.com/v1/tokens/tok_visa
   response:
-    body: {string: "{\n  \"id\": \"tok_1GVfmRFk4eGpfLOCSLXxfLj8\",\n  \"object\":\
-        \ \"token\",\n  \"card\": {\n    \"id\": \"card_1GVfmRFk4eGpfLOCZDvk5nNW\"\
+    body: {string: "{\n  \"id\": \"tok_1Iw2nhFk4eGpfLOCHr0ciYGb\",\n  \"object\":\
+        \ \"token\",\n  \"card\": {\n    \"id\": \"card_1Iw2nhFk4eGpfLOCn15U8y3F\"\
         ,\n    \"object\": \"card\",\n    \"address_city\": null,\n    \"address_country\"\
         : null,\n    \"address_line1\": null,\n    \"address_line1_check\": null,\n\
         \    \"address_line2\": null,\n    \"address_state\": null,\n    \"address_zip\"\
         : null,\n    \"address_zip_check\": null,\n    \"brand\": \"Visa\",\n    \"\
         country\": \"US\",\n    \"currency\": \"usd\",\n    \"cvc_check\": null,\n\
-        \    \"dynamic_last4\": null,\n    \"exp_month\": 4,\n    \"exp_year\": 2021,\n\
+        \    \"dynamic_last4\": null,\n    \"exp_month\": 5,\n    \"exp_year\": 2022,\n\
         \    \"fingerprint\": \"k6ycurEAdsI1uF3b\",\n    \"funding\": \"credit\",\n\
         \    \"last4\": \"4242\",\n    \"metadata\": {\n    },\n    \"name\": null,\n\
         \    \"tokenization_method\": null\n  },\n  \"client_ip\": null,\n  \"created\"\
-        : 1586359531,\n  \"livemode\": false,\n  \"type\": \"card\",\n  \"used\":\
+        : 1622197221,\n  \"livemode\": false,\n  \"type\": \"card\",\n  \"used\":\
         \ false\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['790']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:31 GMT']
+      Date: ['Fri, 28 May 2021 10:20:21 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -151,24 +228,24 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_PzlbrtPvKXz9Pe]
+      request-id: [req_bcsNQSiSwL55Gu]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: owner[email]=donor%40example.com&redirect[return_url]=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2Fcomplete&token=tok_1GVfmRFk4eGpfLOCSLXxfLj8&type=card&usage=reusable
+    body: owner[email]=donor%40example.com&redirect[return_url]=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2Fcomplete&token=tok_1Iw2nhFk4eGpfLOCHr0ciYGb&type=card&usage=reusable
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/sources
   response:
-    body: {string: "{\n  \"id\": \"src_1GVfmRFk4eGpfLOCwTlnKUJn\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": null,\n  \"card\": {\n    \"exp_month\": 4,\n\
-        \    \"exp_year\": 2021,\n    \"last4\": \"4242\",\n    \"country\": \"US\"\
+    body: {string: "{\n  \"id\": \"src_1Iw2nhFk4eGpfLOCfQWPACWD\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": null,\n  \"card\": {\n    \"exp_month\": 5,\n\
+        \    \"exp_year\": 2022,\n    \"last4\": \"4242\",\n    \"country\": \"US\"\
         ,\n    \"brand\": \"Visa\",\n    \"funding\": \"credit\",\n    \"fingerprint\"\
         : \"k6ycurEAdsI1uF3b\",\n    \"three_d_secure\": \"optional\",\n    \"name\"\
         : null,\n    \"address_line1_check\": null,\n    \"address_zip_check\": null,\n\
         \    \"cvc_check\": null,\n    \"tokenization_method\": null,\n    \"dynamic_last4\"\
-        : null\n  },\n  \"client_secret\": \"src_client_secret_AXQqWadQvFF8nA2fclu5xaG6\"\
-        ,\n  \"created\": 1586359531,\n  \"currency\": null,\n  \"flow\": \"none\"\
+        : null\n  },\n  \"client_secret\": \"src_client_secret_WNeNHpQo0rRaU0k4qE2J71c0\"\
+        ,\n  \"created\": 1622197221,\n  \"currency\": null,\n  \"flow\": \"none\"\
         ,\n  \"livemode\": false,\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"\
         address\": null,\n    \"email\": \"donor@example.com\",\n    \"name\": null,\n\
         \    \"phone\": null,\n    \"verified_address\": null,\n    \"verified_email\"\
@@ -179,7 +256,7 @@ interactions:
       Connection: [keep-alive]
       Content-Length: ['958']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:31 GMT']
+      Date: ['Fri, 28 May 2021 10:20:21 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -189,39 +266,39 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [create_source_from_tok_1GVfmRFk4eGpfLOCSLXxfLj8]
-      original-request: [req_sLaXFiRNvLofsp]
-      request-id: [req_sLaXFiRNvLofsp]
+      idempotency-key: [create_source_from_tok_1Iw2nhFk4eGpfLOCHr0ciYGb]
+      original-request: [req_T3y3bpptFT7VW2]
+      request-id: [req_T3y3bpptFT7VW2]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: email=donor%40example.com&source=src_1GVfmRFk4eGpfLOCwTlnKUJn
+    body: email=donor%40example.com&source=src_1Iw2nhFk4eGpfLOCfQWPACWD
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/customers
   response:
-    body: {string: "{\n  \"id\": \"cus_H3nNk2cPobC9lw\",\n  \"object\": \"customer\"\
+    body: {string: "{\n  \"id\": \"cus_JZBAPGjOEWBeoo\",\n  \"object\": \"customer\"\
         ,\n  \"account_balance\": 0,\n  \"address\": null,\n  \"balance\": 0,\n  \"\
-        created\": 1586359532,\n  \"currency\": null,\n  \"default_source\": \"src_1GVfmRFk4eGpfLOCwTlnKUJn\"\
+        created\": 1622197221,\n  \"currency\": null,\n  \"default_source\": \"src_1Iw2nhFk4eGpfLOCfQWPACWD\"\
         ,\n  \"delinquent\": false,\n  \"description\": null,\n  \"discount\": null,\n\
-        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"1A2A70D2\",\n\
+        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"24EF74B6\",\n\
         \  \"invoice_settings\": {\n    \"custom_fields\": null,\n    \"default_payment_method\"\
         : null,\n    \"footer\": null\n  },\n  \"livemode\": false,\n  \"metadata\"\
         : {\n  },\n  \"name\": null,\n  \"next_invoice_sequence\": 1,\n  \"phone\"\
         : null,\n  \"preferred_locales\": [\n\n  ],\n  \"shipping\": null,\n  \"sources\"\
         : {\n    \"object\": \"list\",\n    \"data\": [\n      {\n        \"id\":\
-        \ \"src_1GVfmRFk4eGpfLOCwTlnKUJn\",\n        \"object\": \"source\",\n   \
-        \     \"amount\": null,\n        \"card\": {\n          \"exp_month\": 4,\n\
-        \          \"exp_year\": 2021,\n          \"last4\": \"4242\",\n         \
+        \ \"src_1Iw2nhFk4eGpfLOCfQWPACWD\",\n        \"object\": \"source\",\n   \
+        \     \"amount\": null,\n        \"card\": {\n          \"exp_month\": 5,\n\
+        \          \"exp_year\": 2022,\n          \"last4\": \"4242\",\n         \
         \ \"country\": \"US\",\n          \"brand\": \"Visa\",\n          \"funding\"\
         : \"credit\",\n          \"fingerprint\": \"k6ycurEAdsI1uF3b\",\n        \
         \  \"three_d_secure\": \"optional\",\n          \"name\": null,\n        \
         \  \"address_line1_check\": null,\n          \"address_zip_check\": null,\n\
         \          \"cvc_check\": null,\n          \"tokenization_method\": null,\n\
         \          \"dynamic_last4\": null\n        },\n        \"client_secret\"\
-        : \"src_client_secret_AXQqWadQvFF8nA2fclu5xaG6\",\n        \"created\": 1586359531,\n\
-        \        \"currency\": null,\n        \"customer\": \"cus_H3nNk2cPobC9lw\"\
+        : \"src_client_secret_WNeNHpQo0rRaU0k4qE2J71c0\",\n        \"created\": 1622197221,\n\
+        \        \"currency\": null,\n        \"customer\": \"cus_JZBAPGjOEWBeoo\"\
         ,\n        \"flow\": \"none\",\n        \"livemode\": false,\n        \"metadata\"\
         : {\n        },\n        \"owner\": {\n          \"address\": null,\n    \
         \      \"email\": \"donor@example.com\",\n          \"name\": null,\n    \
@@ -230,19 +307,19 @@ interactions:
         \  \"verified_phone\": null\n        },\n        \"statement_descriptor\"\
         : null,\n        \"status\": \"chargeable\",\n        \"type\": \"card\",\n\
         \        \"usage\": \"reusable\"\n      }\n    ],\n    \"has_more\": false,\n\
-        \    \"total_count\": 1,\n    \"url\": \"/v1/customers/cus_H3nNk2cPobC9lw/sources\"\
+        \    \"total_count\": 1,\n    \"url\": \"/v1/customers/cus_JZBAPGjOEWBeoo/sources\"\
         \n  },\n  \"subscriptions\": {\n    \"object\": \"list\",\n    \"data\": [\n\
         \n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\":\
-        \ \"/v1/customers/cus_H3nNk2cPobC9lw/subscriptions\"\n  },\n  \"tax_exempt\"\
+        \ \"/v1/customers/cus_JZBAPGjOEWBeoo/subscriptions\"\n  },\n  \"tax_exempt\"\
         : \"none\",\n  \"tax_ids\": {\n    \"object\": \"list\",\n    \"data\": [\n\
         \n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\":\
-        \ \"/v1/customers/cus_H3nNk2cPobC9lw/tax_ids\"\n  },\n  \"tax_info\": null,\n\
+        \ \"/v1/customers/cus_JZBAPGjOEWBeoo/tax_ids\"\n  },\n  \"tax_info\": null,\n\
         \  \"tax_info_verification\": null\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['2439']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:32 GMT']
+      Date: ['Fri, 28 May 2021 10:20:22 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -252,83 +329,83 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [create_customer_for_participant_1410_with_src_1GVfmRFk4eGpfLOCwTlnKUJn]
-      original-request: [req_ysGi9EhtHz0VLI]
-      request-id: [req_ysGi9EhtHz0VLI]
+      idempotency-key: [create_customer_for_participant_2110_with_src_1Iw2nhFk4eGpfLOCfQWPACWD]
+      original-request: [req_QOEoeWIbY3GohR]
+      request-id: [req_QOEoeWIbY3GohR]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=2499&currency=eur&customer=cus_H3nNk2cPobC9lw&metadata[payin_id]=1410&source=src_1GVfmRFk4eGpfLOCwTlnKUJn&statement_descriptor=Liberapay+1410&expand[0]=balance_transaction
+    body: amount=2499&currency=eur&customer=cus_JZBAPGjOEWBeoo&description=Liberapay&metadata[payin_id]=2110&source=src_1Iw2nhFk4eGpfLOCfQWPACWD&statement_descriptor=Liberapay+2110&expand[0]=balance_transaction
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/charges
   response:
-    body: {string: "{\n  \"id\": \"ch_1GVfmSFk4eGpfLOCIWv3L5L0\",\n  \"object\": \"\
-        charge\",\n  \"amount\": 2499,\n  \"amount_refunded\": 0,\n  \"application\"\
-        : null,\n  \"application_fee\": null,\n  \"application_fee_amount\": null,\n\
-        \  \"balance_transaction\": {\n    \"id\": \"txn_1GVfmTFk4eGpfLOCHUXxWfRx\"\
+    body: {string: "{\n  \"id\": \"ch_1Iw2niFk4eGpfLOCxnpWb3BJ\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 2499,\n  \"amount_captured\": 2499,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": null,\n  \"application_fee\": null,\n  \"application_fee_amount\"\
+        : null,\n  \"balance_transaction\": {\n    \"id\": \"txn_1Iw2njFk4eGpfLOCiOLV4MbH\"\
         ,\n    \"object\": \"balance_transaction\",\n    \"amount\": 2499,\n    \"\
-        available_on\": 1586908800,\n    \"created\": 1586359532,\n    \"currency\"\
-        : \"eur\",\n    \"description\": null,\n    \"exchange_rate\": null,\n   \
-        \ \"fee\": 97,\n    \"fee_details\": [\n      {\n        \"amount\": 97,\n\
+        available_on\": 1622592000,\n    \"created\": 1622197222,\n    \"currency\"\
+        : \"eur\",\n    \"description\": \"Liberapay\",\n    \"exchange_rate\": null,\n\
+        \    \"fee\": 97,\n    \"fee_details\": [\n      {\n        \"amount\": 97,\n\
         \        \"application\": null,\n        \"currency\": \"eur\",\n        \"\
         description\": \"Stripe processing fees\",\n        \"type\": \"stripe_fee\"\
         \n      }\n    ],\n    \"net\": 2402,\n    \"reporting_category\": \"charge\"\
-        ,\n    \"source\": \"ch_1GVfmSFk4eGpfLOCIWv3L5L0\",\n    \"status\": \"pending\"\
+        ,\n    \"source\": \"ch_1Iw2niFk4eGpfLOCxnpWb3BJ\",\n    \"status\": \"pending\"\
         ,\n    \"type\": \"charge\"\n  },\n  \"billing_details\": {\n    \"address\"\
         : {\n      \"city\": null,\n      \"country\": null,\n      \"line1\": null,\n\
         \      \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
         \    },\n    \"email\": \"donor@example.com\",\n    \"name\": null,\n    \"\
         phone\": null\n  },\n  \"calculated_statement_descriptor\": \"LIBERAPAY* LIBERAPAY\
-        \ 1\",\n  \"captured\": true,\n  \"created\": 1586359532,\n  \"currency\"\
-        : \"eur\",\n  \"customer\": \"cus_H3nNk2cPobC9lw\",\n  \"description\": null,\n\
-        \  \"destination\": null,\n  \"dispute\": null,\n  \"disputed\": false,\n\
-        \  \"failure_code\": null,\n  \"failure_message\": null,\n  \"fraud_details\"\
+        \ 2\",\n  \"captured\": true,\n  \"created\": 1622197222,\n  \"currency\"\
+        : \"eur\",\n  \"customer\": \"cus_JZBAPGjOEWBeoo\",\n  \"description\": \"\
+        Liberapay\",\n  \"destination\": null,\n  \"dispute\": null,\n  \"disputed\"\
+        : false,\n  \"failure_code\": null,\n  \"failure_message\": null,\n  \"fraud_details\"\
         : {\n  },\n  \"invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n\
-        \    \"payin_id\": \"1410\"\n  },\n  \"on_behalf_of\": null,\n  \"order\"\
+        \    \"payin_id\": \"2110\"\n  },\n  \"on_behalf_of\": null,\n  \"order\"\
         : null,\n  \"outcome\": {\n    \"network_status\": \"approved_by_network\"\
         ,\n    \"reason\": null,\n    \"risk_level\": \"normal\",\n    \"risk_score\"\
-        : 47,\n    \"seller_message\": \"Payment complete.\",\n    \"type\": \"authorized\"\
+        : 25,\n    \"seller_message\": \"Payment complete.\",\n    \"type\": \"authorized\"\
         \n  },\n  \"paid\": true,\n  \"payment_intent\": null,\n  \"payment_method\"\
-        : \"src_1GVfmRFk4eGpfLOCwTlnKUJn\",\n  \"payment_method_details\": {\n   \
+        : \"src_1Iw2nhFk4eGpfLOCfQWPACWD\",\n  \"payment_method_details\": {\n   \
         \ \"card\": {\n      \"brand\": \"visa\",\n      \"checks\": {\n        \"\
         address_line1_check\": null,\n        \"address_postal_code_check\": null,\n\
         \        \"cvc_check\": null\n      },\n      \"country\": \"US\",\n     \
-        \ \"exp_month\": 4,\n      \"exp_year\": 2021,\n      \"fingerprint\": \"\
+        \ \"exp_month\": 5,\n      \"exp_year\": 2022,\n      \"fingerprint\": \"\
         k6ycurEAdsI1uF3b\",\n      \"funding\": \"credit\",\n      \"installments\"\
         : null,\n      \"last4\": \"4242\",\n      \"network\": \"visa\",\n      \"\
         three_d_secure\": null,\n      \"wallet\": null\n    },\n    \"type\": \"\
         card\"\n  },\n  \"receipt_email\": null,\n  \"receipt_number\": null,\n  \"\
-        receipt_url\": \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/ch_1GVfmSFk4eGpfLOCIWv3L5L0/rcpt_H3nNV2NaYcUCAIc8Zp9J0TFxrcqVccC\"\
+        receipt_url\": \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/ch_1Iw2niFk4eGpfLOCxnpWb3BJ/rcpt_JZBAzo0X4hwo8YxIPpx1K8mm6lga0x1\"\
         ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
         \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
-        \ 0,\n    \"url\": \"/v1/charges/ch_1GVfmSFk4eGpfLOCIWv3L5L0/refunds\"\n \
+        \ 0,\n    \"url\": \"/v1/charges/ch_1Iw2niFk4eGpfLOCxnpWb3BJ/refunds\"\n \
         \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
-        id\": \"src_1GVfmRFk4eGpfLOCwTlnKUJn\",\n    \"object\": \"source\",\n   \
-        \ \"amount\": null,\n    \"card\": {\n      \"exp_month\": 4,\n      \"exp_year\"\
-        : 2021,\n      \"last4\": \"4242\",\n      \"country\": \"US\",\n      \"\
+        id\": \"src_1Iw2nhFk4eGpfLOCfQWPACWD\",\n    \"object\": \"source\",\n   \
+        \ \"amount\": null,\n    \"card\": {\n      \"exp_month\": 5,\n      \"exp_year\"\
+        : 2022,\n      \"last4\": \"4242\",\n      \"country\": \"US\",\n      \"\
         brand\": \"Visa\",\n      \"funding\": \"credit\",\n      \"fingerprint\"\
         : \"k6ycurEAdsI1uF3b\",\n      \"three_d_secure\": \"optional\",\n      \"\
         name\": null,\n      \"address_line1_check\": null,\n      \"address_zip_check\"\
         : null,\n      \"cvc_check\": null,\n      \"tokenization_method\": null,\n\
-        \      \"dynamic_last4\": null\n    },\n    \"client_secret\": \"src_client_secret_AXQqWadQvFF8nA2fclu5xaG6\"\
-        ,\n    \"created\": 1586359533,\n    \"currency\": null,\n    \"customer\"\
-        : \"cus_H3nNk2cPobC9lw\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
+        \      \"dynamic_last4\": null\n    },\n    \"client_secret\": \"src_client_secret_WNeNHpQo0rRaU0k4qE2J71c0\"\
+        ,\n    \"created\": 1622197223,\n    \"currency\": null,\n    \"customer\"\
+        : \"cus_JZBAPGjOEWBeoo\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
         \    \"metadata\": {\n    },\n    \"owner\": {\n      \"address\": null,\n\
         \      \"email\": \"donor@example.com\",\n      \"name\": null,\n      \"\
         phone\": null,\n      \"verified_address\": null,\n      \"verified_email\"\
         : null,\n      \"verified_name\": null,\n      \"verified_phone\": null\n\
         \    },\n    \"statement_descriptor\": null,\n    \"status\": \"chargeable\"\
         ,\n    \"type\": \"card\",\n    \"usage\": \"reusable\"\n  },\n  \"source_transfer\"\
-        : null,\n  \"statement_descriptor\": \"Liberapay 1410\",\n  \"statement_descriptor_suffix\"\
-        : \"Liberapay 1410\",\n  \"status\": \"succeeded\",\n  \"transfer_data\":\
+        : null,\n  \"statement_descriptor\": \"Liberapay 2110\",\n  \"statement_descriptor_suffix\"\
+        : \"Liberapay 2110\",\n  \"status\": \"succeeded\",\n  \"transfer_data\":\
         \ null,\n  \"transfer_group\": null\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['4021']
+      Content-Length: ['4062']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:33 GMT']
+      Date: ['Fri, 28 May 2021 10:20:23 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -338,9 +415,9 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [payin_1410]
-      original-request: [req_Gxugnt6BMEm62c]
-      request-id: [req_Gxugnt6BMEm62c]
+      idempotency-key: [payin_2110]
+      original-request: [req_v7ZphPS7weUkj2]
+      request-id: [req_v7ZphPS7weUkj2]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
@@ -348,60 +425,22 @@ interactions:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/sources/src_1GVfmRFk4eGpfLOCwTlnKUJn
-  response:
-    body: {string: "{\n  \"id\": \"src_1GVfmRFk4eGpfLOCwTlnKUJn\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": null,\n  \"card\": {\n    \"exp_month\": 4,\n\
-        \    \"exp_year\": 2021,\n    \"last4\": \"4242\",\n    \"country\": \"US\"\
-        ,\n    \"brand\": \"Visa\",\n    \"funding\": \"credit\",\n    \"fingerprint\"\
-        : \"k6ycurEAdsI1uF3b\",\n    \"three_d_secure\": \"optional\",\n    \"name\"\
-        : null,\n    \"address_line1_check\": null,\n    \"address_zip_check\": null,\n\
-        \    \"cvc_check\": null,\n    \"tokenization_method\": null,\n    \"dynamic_last4\"\
-        : null\n  },\n  \"client_secret\": \"src_client_secret_AXQqWadQvFF8nA2fclu5xaG6\"\
-        ,\n  \"created\": 1586359531,\n  \"currency\": null,\n  \"customer\": \"cus_H3nNk2cPobC9lw\"\
-        ,\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"metadata\": {\n  },\n\
-        \  \"owner\": {\n    \"address\": null,\n    \"email\": \"donor@example.com\"\
-        ,\n    \"name\": null,\n    \"phone\": null,\n    \"verified_address\": null,\n\
-        \    \"verified_email\": null,\n    \"verified_name\": null,\n    \"verified_phone\"\
-        : null\n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\"\
-        ,\n  \"type\": \"card\",\n  \"usage\": \"reusable\"\n}\n"}
-    headers:
-      Connection: [keep-alive]
-      Content-Length: ['994']
-      Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:33 GMT']
-      Server: [nginx]
-      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
-      access-control-allow-credentials: ['true']
-      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
-      access-control-allow-origin: ['*']
-      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
-          X-Stripe-Privileged-Session-Required']
-      access-control-max-age: ['300']
-      cache-control: ['no-cache, no-store']
-      request-id: [req_I0sHVq3RG9SBcw]
-      stripe-version: ['2019-08-14']
-    status: {code: 200, message: OK}
-- request:
-    body: null
-    headers: {}
-    method: GET
-    uri: https://api.stripe.com/v1/tokens/btok_1GVfmOFk4eGpfLOCCBSQRMed
+    uri: https://api.stripe.com/v1/tokens/btok_1Iw2ndFk4eGpfLOCguUqtOCz
   response:
-    body: {string: "{\n  \"id\": \"btok_1GVfmOFk4eGpfLOCCBSQRMed\",\n  \"object\"\
-        : \"token\",\n  \"bank_account\": {\n    \"id\": \"ba_1GVfmOFk4eGpfLOCK3U72yxe\"\
+    body: {string: "{\n  \"id\": \"btok_1Iw2ndFk4eGpfLOCguUqtOCz\",\n  \"object\"\
+        : \"token\",\n  \"bank_account\": {\n    \"id\": \"ba_1Iw2ndFk4eGpfLOCsI18TW3G\"\
         ,\n    \"object\": \"bank_account\",\n    \"account_holder_name\": \"Jane\
         \ Doe\",\n    \"account_holder_type\": null,\n    \"bank_name\": \"STRIPE\
         \ TEST BANK\",\n    \"country\": \"DE\",\n    \"currency\": \"eur\",\n   \
         \ \"fingerprint\": \"vYeSfyBOnTdv1v6W\",\n    \"last4\": \"3000\",\n    \"\
         routing_number\": \"110000000\",\n    \"status\": \"new\"\n  },\n  \"client_ip\"\
-        : \"109.190.32.190\",\n  \"created\": 1586359528,\n  \"livemode\": false,\n\
+        : \"77.128.117.173\",\n  \"created\": 1622197217,\n  \"livemode\": false,\n\
         \  \"type\": \"bank_account\",\n  \"used\": false\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['551']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:34 GMT']
+      Date: ['Fri, 28 May 2021 10:20:24 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -411,24 +450,24 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_UD1pNZELZSbZcl]
+      request-id: [req_NMowPUf1lfsCph]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=5200&owner[email]=donor%40example.com&redirect[return_url]=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2Fcomplete&token=btok_1GVfmOFk4eGpfLOCCBSQRMed&type=sepa_debit&usage=reusable
+    body: amount=5200&owner[email]=donor%40example.com&redirect[return_url]=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2Fcomplete&token=btok_1Iw2ndFk4eGpfLOCguUqtOCz&type=sepa_debit&usage=reusable
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/sources
   response:
-    body: {string: "{\n  \"id\": \"src_1GVfmUFk4eGpfLOCe5TNONii\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": 5200,\n  \"client_secret\": \"src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
-        ,\n  \"created\": 1586359534,\n  \"currency\": \"eur\",\n  \"flow\": \"none\"\
+    body: {string: "{\n  \"id\": \"src_1Iw2nkFk4eGpfLOC70NJspSO\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": 5200,\n  \"client_secret\": \"src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
+        ,\n  \"created\": 1622197224,\n  \"currency\": \"eur\",\n  \"flow\": \"none\"\
         ,\n  \"livemode\": false,\n  \"mandate\": {\n    \"acceptance\": {\n     \
         \ \"date\": null,\n      \"ip\": null,\n      \"offline\": null,\n      \"\
         online\": null,\n      \"status\": \"pending\",\n      \"type\": null,\n \
         \     \"user_agent\": null\n    },\n    \"amount\": null,\n    \"currency\"\
         : null,\n    \"interval\": \"variable\",\n    \"notification_method\": \"\
-        none\",\n    \"reference\": \"GQRBWRPGVJAPHAQG\",\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmUFk4eGpfLOCe5TNONii/src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
+        none\",\n    \"reference\": \"UREOJ8CROUXWK0RM\",\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nkFk4eGpfLOC70NJspSO/src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
         \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
         \  \"city\": null,\n      \"country\": \"DE\",\n      \"line1\": null,\n \
         \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
@@ -437,8 +476,8 @@ interactions:
         : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
         \  \"sepa_debit\": {\n    \"last4\": \"3000\",\n    \"bank_code\": \"37040044\"\
         ,\n    \"fingerprint\": \"VNz5BVW8XnYcq3XT\",\n    \"country\": \"DE\",\n\
-        \    \"mandate_reference\": \"GQRBWRPGVJAPHAQG\",\n    \"mandate_url\": \"\
-        https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmUFk4eGpfLOCe5TNONii/src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
+        \    \"mandate_reference\": \"UREOJ8CROUXWK0RM\",\n    \"mandate_url\": \"\
+        https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nkFk4eGpfLOC70NJspSO/src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
         ,\n    \"branch_code\": null\n  },\n  \"statement_descriptor\": null,\n  \"\
         status\": \"chargeable\",\n  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\
         \n}\n"}
@@ -446,7 +485,7 @@ interactions:
       Connection: [keep-alive]
       Content-Length: ['1545']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:34 GMT']
+      Date: ['Fri, 28 May 2021 10:20:24 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -456,40 +495,40 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [create_source_from_btok_1GVfmOFk4eGpfLOCCBSQRMed]
-      original-request: [req_TBvR7T6brQsNAd]
-      request-id: [req_TBvR7T6brQsNAd]
+      idempotency-key: [create_source_from_btok_1Iw2ndFk4eGpfLOCguUqtOCz]
+      original-request: [req_niVsMuoYXYA7Oy]
+      request-id: [req_niVsMuoYXYA7Oy]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: email=donor%40example.com&source=src_1GVfmUFk4eGpfLOCe5TNONii
+    body: email=donor%40example.com&source=src_1Iw2nkFk4eGpfLOC70NJspSO
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/customers
   response:
-    body: {string: "{\n  \"id\": \"cus_H3nNPCdpWqqLZR\",\n  \"object\": \"customer\"\
+    body: {string: "{\n  \"id\": \"cus_JZBArJta3pxRl7\",\n  \"object\": \"customer\"\
         ,\n  \"account_balance\": 0,\n  \"address\": null,\n  \"balance\": 0,\n  \"\
-        created\": 1586359535,\n  \"currency\": null,\n  \"default_source\": \"src_1GVfmUFk4eGpfLOCe5TNONii\"\
+        created\": 1622197224,\n  \"currency\": null,\n  \"default_source\": \"src_1Iw2nkFk4eGpfLOC70NJspSO\"\
         ,\n  \"delinquent\": false,\n  \"description\": null,\n  \"discount\": null,\n\
-        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"1B5BF9FB\",\n\
+        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"33F9865A\",\n\
         \  \"invoice_settings\": {\n    \"custom_fields\": null,\n    \"default_payment_method\"\
         : null,\n    \"footer\": null\n  },\n  \"livemode\": false,\n  \"metadata\"\
         : {\n  },\n  \"name\": null,\n  \"next_invoice_sequence\": 1,\n  \"phone\"\
         : null,\n  \"preferred_locales\": [\n\n  ],\n  \"shipping\": null,\n  \"sources\"\
         : {\n    \"object\": \"list\",\n    \"data\": [\n      {\n        \"id\":\
-        \ \"src_1GVfmUFk4eGpfLOCe5TNONii\",\n        \"object\": \"source\",\n   \
-        \     \"amount\": 5200,\n        \"client_secret\": \"src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
-        ,\n        \"created\": 1586359534,\n        \"currency\": \"eur\",\n    \
-        \    \"customer\": \"cus_H3nNPCdpWqqLZR\",\n        \"flow\": \"none\",\n\
+        \ \"src_1Iw2nkFk4eGpfLOC70NJspSO\",\n        \"object\": \"source\",\n   \
+        \     \"amount\": 5200,\n        \"client_secret\": \"src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
+        ,\n        \"created\": 1622197224,\n        \"currency\": \"eur\",\n    \
+        \    \"customer\": \"cus_JZBArJta3pxRl7\",\n        \"flow\": \"none\",\n\
         \        \"livemode\": false,\n        \"mandate\": {\n          \"acceptance\"\
         : {\n            \"date\": null,\n            \"ip\": null,\n            \"\
         offline\": null,\n            \"online\": null,\n            \"status\": \"\
         pending\",\n            \"type\": null,\n            \"user_agent\": null\n\
         \          },\n          \"amount\": null,\n          \"currency\": null,\n\
         \          \"interval\": \"variable\",\n          \"notification_method\"\
-        : \"none\",\n          \"reference\": \"GQRBWRPGVJAPHAQG\",\n          \"\
-        url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmUFk4eGpfLOCe5TNONii/src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
+        : \"none\",\n          \"reference\": \"UREOJ8CROUXWK0RM\",\n          \"\
+        url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nkFk4eGpfLOC70NJspSO/src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
         \n        },\n        \"metadata\": {\n        },\n        \"owner\": {\n\
         \          \"address\": {\n            \"city\": null,\n            \"country\"\
         : \"DE\",\n            \"line1\": null,\n            \"line2\": null,\n  \
@@ -500,24 +539,24 @@ interactions:
         \          \"verified_phone\": null\n        },\n        \"sepa_debit\": {\n\
         \          \"last4\": \"3000\",\n          \"bank_code\": \"37040044\",\n\
         \          \"fingerprint\": \"VNz5BVW8XnYcq3XT\",\n          \"country\":\
-        \ \"DE\",\n          \"mandate_reference\": \"GQRBWRPGVJAPHAQG\",\n      \
-        \    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmUFk4eGpfLOCe5TNONii/src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
+        \ \"DE\",\n          \"mandate_reference\": \"UREOJ8CROUXWK0RM\",\n      \
+        \    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nkFk4eGpfLOC70NJspSO/src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
         ,\n          \"branch_code\": null\n        },\n        \"statement_descriptor\"\
         : null,\n        \"status\": \"chargeable\",\n        \"type\": \"sepa_debit\"\
         ,\n        \"usage\": \"reusable\"\n      }\n    ],\n    \"has_more\": false,\n\
-        \    \"total_count\": 1,\n    \"url\": \"/v1/customers/cus_H3nNPCdpWqqLZR/sources\"\
+        \    \"total_count\": 1,\n    \"url\": \"/v1/customers/cus_JZBArJta3pxRl7/sources\"\
         \n  },\n  \"subscriptions\": {\n    \"object\": \"list\",\n    \"data\": [\n\
         \n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\":\
-        \ \"/v1/customers/cus_H3nNPCdpWqqLZR/subscriptions\"\n  },\n  \"tax_exempt\"\
+        \ \"/v1/customers/cus_JZBArJta3pxRl7/subscriptions\"\n  },\n  \"tax_exempt\"\
         : \"none\",\n  \"tax_ids\": {\n    \"object\": \"list\",\n    \"data\": [\n\
         \n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\":\
-        \ \"/v1/customers/cus_H3nNPCdpWqqLZR/tax_ids\"\n  },\n  \"tax_info\": null,\n\
+        \ \"/v1/customers/cus_JZBArJta3pxRl7/tax_ids\"\n  },\n  \"tax_info\": null,\n\
         \  \"tax_info_verification\": null\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['3128']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:35 GMT']
+      Date: ['Fri, 28 May 2021 10:20:25 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -527,56 +566,55 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [create_customer_for_participant_1420_with_src_1GVfmUFk4eGpfLOCe5TNONii]
-      original-request: [req_sGYDakemRml0We]
-      request-id: [req_sGYDakemRml0We]
+      idempotency-key: [create_customer_for_participant_2120_with_src_1Iw2nkFk4eGpfLOC70NJspSO]
+      original-request: [req_CJSDHUlNyJ6eTS]
+      request-id: [req_CJSDHUlNyJ6eTS]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=5200&currency=eur&customer=cus_H3nNPCdpWqqLZR&metadata[payin_id]=1420&source=src_1GVfmUFk4eGpfLOCe5TNONii&statement_descriptor=Liberapay+1420&expand[0]=balance_transaction
+    body: amount=5200&currency=eur&customer=cus_JZBArJta3pxRl7&description=Liberapay&metadata[payin_id]=2120&source=src_1Iw2nkFk4eGpfLOC70NJspSO&statement_descriptor=Liberapay+2120&expand[0]=balance_transaction
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/charges
   response:
-    body: {string: "{\n  \"id\": \"py_1GVfmVFk4eGpfLOCJgFZm7QC\",\n  \"object\": \"\
-        charge\",\n  \"amount\": 5200,\n  \"amount_refunded\": 0,\n  \"application\"\
-        : null,\n  \"application_fee\": null,\n  \"application_fee_amount\": null,\n\
-        \  \"balance_transaction\": null,\n  \"billing_details\": {\n    \"address\"\
-        : {\n      \"city\": null,\n      \"country\": \"DE\",\n      \"line1\": null,\n\
-        \      \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
-        \    },\n    \"email\": \"donor@example.com\",\n    \"name\": \"Jane Doe\"\
-        ,\n    \"phone\": null\n  },\n  \"calculated_statement_descriptor\": null,\n\
-        \  \"captured\": true,\n  \"created\": 1586359535,\n  \"currency\": \"eur\"\
-        ,\n  \"customer\": \"cus_H3nNPCdpWqqLZR\",\n  \"description\": null,\n  \"\
-        destination\": null,\n  \"dispute\": null,\n  \"disputed\": false,\n  \"failure_code\"\
-        : null,\n  \"failure_message\": null,\n  \"fraud_details\": {\n  },\n  \"\
-        invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n    \"payin_id\"\
-        : \"1420\"\n  },\n  \"on_behalf_of\": null,\n  \"order\": null,\n  \"outcome\"\
-        : {\n    \"network_status\": \"approved_by_network\",\n    \"reason\": null,\n\
-        \    \"risk_level\": \"not_assessed\",\n    \"seller_message\": \"Payment\
-        \ complete.\",\n    \"type\": \"authorized\"\n  },\n  \"paid\": false,\n \
-        \ \"payment_intent\": null,\n  \"payment_method\": \"src_1GVfmUFk4eGpfLOCe5TNONii\"\
+    body: {string: "{\n  \"id\": \"py_1Iw2nlFk4eGpfLOCFcha1bAs\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 5200,\n  \"amount_captured\": 5200,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": null,\n  \"application_fee\": null,\n  \"application_fee_amount\"\
+        : null,\n  \"balance_transaction\": null,\n  \"billing_details\": {\n    \"\
+        address\": {\n      \"city\": null,\n      \"country\": \"DE\",\n      \"\
+        line1\": null,\n      \"line2\": null,\n      \"postal_code\": null,\n   \
+        \   \"state\": null\n    },\n    \"email\": \"donor@example.com\",\n    \"\
+        name\": \"Jane Doe\",\n    \"phone\": null\n  },\n  \"calculated_statement_descriptor\"\
+        : null,\n  \"captured\": true,\n  \"created\": 1622197225,\n  \"currency\"\
+        : \"eur\",\n  \"customer\": \"cus_JZBArJta3pxRl7\",\n  \"description\": \"\
+        Liberapay\",\n  \"destination\": null,\n  \"dispute\": null,\n  \"disputed\"\
+        : false,\n  \"failure_code\": null,\n  \"failure_message\": null,\n  \"fraud_details\"\
+        : {\n  },\n  \"invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n\
+        \    \"payin_id\": \"2120\"\n  },\n  \"on_behalf_of\": null,\n  \"order\"\
+        : null,\n  \"outcome\": {\n    \"network_status\": \"approved_by_network\"\
+        ,\n    \"reason\": null,\n    \"risk_level\": \"not_assessed\",\n    \"seller_message\"\
+        : \"Payment complete.\",\n    \"type\": \"authorized\"\n  },\n  \"paid\":\
+        \ false,\n  \"payment_intent\": null,\n  \"payment_method\": \"src_1Iw2nkFk4eGpfLOC70NJspSO\"\
         ,\n  \"payment_method_details\": {\n    \"sepa_debit\": {\n      \"bank_code\"\
         : \"37040044\",\n      \"branch_code\": null,\n      \"country\": \"DE\",\n\
         \      \"fingerprint\": \"VNz5BVW8XnYcq3XT\",\n      \"last4\": \"3000\",\n\
         \      \"mandate\": null\n    },\n    \"type\": \"sepa_debit\"\n  },\n  \"\
-        receipt_email\": null,\n  \"receipt_number\": null,\n  \"receipt_url\": \"\
-        https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/py_1GVfmVFk4eGpfLOCJgFZm7QC/rcpt_H3nN1P3q7jJVHSwfGSUEe17Tug4avGf\"\
-        ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
-        \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
-        \ 0,\n    \"url\": \"/v1/charges/py_1GVfmVFk4eGpfLOCJgFZm7QC/refunds\"\n \
-        \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
-        id\": \"src_1GVfmUFk4eGpfLOCe5TNONii\",\n    \"object\": \"source\",\n   \
-        \ \"amount\": 5200,\n    \"client_secret\": \"src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
-        ,\n    \"created\": 1586359535,\n    \"currency\": \"eur\",\n    \"customer\"\
-        : \"cus_H3nNPCdpWqqLZR\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
+        receipt_email\": null,\n  \"receipt_number\": null,\n  \"receipt_url\": null,\n\
+        \  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n   \
+        \ \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n\
+        \    \"url\": \"/v1/charges/py_1Iw2nlFk4eGpfLOCFcha1bAs/refunds\"\n  },\n\
+        \  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"id\":\
+        \ \"src_1Iw2nkFk4eGpfLOC70NJspSO\",\n    \"object\": \"source\",\n    \"amount\"\
+        : 5200,\n    \"client_secret\": \"src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
+        ,\n    \"created\": 1622197225,\n    \"currency\": \"eur\",\n    \"customer\"\
+        : \"cus_JZBArJta3pxRl7\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
         \    \"mandate\": {\n      \"acceptance\": {\n        \"date\": null,\n  \
         \      \"ip\": null,\n        \"offline\": null,\n        \"online\": null,\n\
         \        \"status\": \"pending\",\n        \"type\": null,\n        \"user_agent\"\
         : null\n      },\n      \"amount\": null,\n      \"currency\": null,\n   \
         \   \"interval\": \"variable\",\n      \"notification_method\": \"none\",\n\
-        \      \"reference\": \"GQRBWRPGVJAPHAQG\",\n      \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmUFk4eGpfLOCe5TNONii/src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
+        \      \"reference\": \"UREOJ8CROUXWK0RM\",\n      \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nkFk4eGpfLOC70NJspSO/src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
         \n    },\n    \"metadata\": {\n    },\n    \"owner\": {\n      \"address\"\
         : {\n        \"city\": null,\n        \"country\": \"DE\",\n        \"line1\"\
         : null,\n        \"line2\": null,\n        \"postal_code\": null,\n      \
@@ -586,17 +624,17 @@ interactions:
         \      \"verified_phone\": null\n    },\n    \"sepa_debit\": {\n      \"last4\"\
         : \"3000\",\n      \"bank_code\": \"37040044\",\n      \"fingerprint\": \"\
         VNz5BVW8XnYcq3XT\",\n      \"country\": \"DE\",\n      \"mandate_reference\"\
-        : \"GQRBWRPGVJAPHAQG\",\n      \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmUFk4eGpfLOCe5TNONii/src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
+        : \"UREOJ8CROUXWK0RM\",\n      \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nkFk4eGpfLOC70NJspSO/src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
         ,\n      \"branch_code\": null\n    },\n    \"statement_descriptor\": null,\n\
         \    \"status\": \"chargeable\",\n    \"type\": \"sepa_debit\",\n    \"usage\"\
         : \"reusable\"\n  },\n  \"source_transfer\": null,\n  \"statement_descriptor\"\
-        : \"Liberapay 1420\",\n  \"statement_descriptor_suffix\": null,\n  \"status\"\
+        : \"Liberapay 2120\",\n  \"statement_descriptor_suffix\": null,\n  \"status\"\
         : \"pending\",\n  \"transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['3765']
+      Content-Length: ['3683']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:35 GMT']
+      Date: ['Fri, 28 May 2021 10:20:25 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -606,9 +644,9 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [payin_1420]
-      original-request: [req_AYSKgem1REq750]
-      request-id: [req_AYSKgem1REq750]
+      idempotency-key: [payin_2120]
+      original-request: [req_7IEWtjC7S9oQ15]
+      request-id: [req_7IEWtjC7S9oQ15]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
@@ -616,18 +654,64 @@ interactions:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/sources/src_1GVfmUFk4eGpfLOCe5TNONii
+    uri: https://api.stripe.com/v1/sources/src_1Iw2nkFk4eGpfLOC70NJspSO
+  response:
+    body: {string: "{\n  \"id\": \"src_1Iw2nkFk4eGpfLOC70NJspSO\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": 5200,\n  \"client_secret\": \"src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
+        ,\n  \"created\": 1622197224,\n  \"currency\": \"eur\",\n  \"customer\": \"\
+        cus_JZBArJta3pxRl7\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
+        mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
+        \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
+        : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
+        \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
+        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"UREOJ8CROUXWK0RM\"\
+        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nkFk4eGpfLOC70NJspSO/src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
+        \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
+        \  \"city\": null,\n      \"country\": \"DE\",\n      \"line1\": null,\n \
+        \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
+        \    },\n    \"email\": \"donor@example.com\",\n    \"name\": \"Jane Doe\"\
+        ,\n    \"phone\": null,\n    \"verified_address\": null,\n    \"verified_email\"\
+        : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
+        \  \"sepa_debit\": {\n    \"last4\": \"3000\",\n    \"bank_code\": \"37040044\"\
+        ,\n    \"fingerprint\": \"VNz5BVW8XnYcq3XT\",\n    \"country\": \"DE\",\n\
+        \    \"mandate_reference\": \"UREOJ8CROUXWK0RM\",\n    \"mandate_url\": \"\
+        https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nkFk4eGpfLOC70NJspSO/src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
+        ,\n    \"branch_code\": null\n  },\n  \"statement_descriptor\": null,\n  \"\
+        status\": \"chargeable\",\n  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\
+        \n}\n"}
+    headers:
+      Connection: [keep-alive]
+      Content-Length: ['1581']
+      Content-Type: [application/json]
+      Date: ['Fri, 28 May 2021 10:20:26 GMT']
+      Server: [nginx]
+      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
+      access-control-allow-credentials: ['true']
+      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
+      access-control-allow-origin: ['*']
+      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
+          X-Stripe-Privileged-Session-Required']
+      access-control-max-age: ['300']
+      cache-control: ['no-cache, no-store']
+      request-id: [req_4RuIPQVAsoW8kA]
+      stripe-version: ['2019-08-14']
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers: {}
+    method: GET
+    uri: https://api.stripe.com/v1/sources/src_1Iw2nkFk4eGpfLOC70NJspSO
   response:
-    body: {string: "{\n  \"id\": \"src_1GVfmUFk4eGpfLOCe5TNONii\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": 5200,\n  \"client_secret\": \"src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
-        ,\n  \"created\": 1586359534,\n  \"currency\": \"eur\",\n  \"customer\": \"\
-        cus_H3nNPCdpWqqLZR\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
+    body: {string: "{\n  \"id\": \"src_1Iw2nkFk4eGpfLOC70NJspSO\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": 5200,\n  \"client_secret\": \"src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
+        ,\n  \"created\": 1622197224,\n  \"currency\": \"eur\",\n  \"customer\": \"\
+        cus_JZBArJta3pxRl7\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
         mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
         \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
         : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
         \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
-        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"GQRBWRPGVJAPHAQG\"\
-        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmUFk4eGpfLOCe5TNONii/src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
+        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"UREOJ8CROUXWK0RM\"\
+        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nkFk4eGpfLOC70NJspSO/src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
         \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
         \  \"city\": null,\n      \"country\": \"DE\",\n      \"line1\": null,\n \
         \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
@@ -636,8 +720,8 @@ interactions:
         : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
         \  \"sepa_debit\": {\n    \"last4\": \"3000\",\n    \"bank_code\": \"37040044\"\
         ,\n    \"fingerprint\": \"VNz5BVW8XnYcq3XT\",\n    \"country\": \"DE\",\n\
-        \    \"mandate_reference\": \"GQRBWRPGVJAPHAQG\",\n    \"mandate_url\": \"\
-        https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmUFk4eGpfLOCe5TNONii/src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
+        \    \"mandate_reference\": \"UREOJ8CROUXWK0RM\",\n    \"mandate_url\": \"\
+        https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nkFk4eGpfLOC70NJspSO/src_client_secret_pBoWzcThmvqj9tmE20SVU48Y\"\
         ,\n    \"branch_code\": null\n  },\n  \"statement_descriptor\": null,\n  \"\
         status\": \"chargeable\",\n  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\
         \n}\n"}
@@ -645,7 +729,7 @@ interactions:
       Connection: [keep-alive]
       Content-Length: ['1581']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:36 GMT']
+      Date: ['Fri, 28 May 2021 10:20:26 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -655,7 +739,7 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_nvAIUg7cEb6bc6]
+      request-id: [req_w3txNak97IXEdt]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
@@ -664,24 +748,24 @@ interactions:
     method: GET
     uri: https://api.stripe.com/v1/tokens/tok_jp
   response:
-    body: {string: "{\n  \"id\": \"tok_1GVfmWFk4eGpfLOCEhY5iO8W\",\n  \"object\":\
-        \ \"token\",\n  \"card\": {\n    \"id\": \"card_1GVfmWFk4eGpfLOChHpWLkBn\"\
+    body: {string: "{\n  \"id\": \"tok_1Iw2nmFk4eGpfLOCivto2sSb\",\n  \"object\":\
+        \ \"token\",\n  \"card\": {\n    \"id\": \"card_1Iw2nmFk4eGpfLOCkNA7mCAs\"\
         ,\n    \"object\": \"card\",\n    \"address_city\": null,\n    \"address_country\"\
         : null,\n    \"address_line1\": null,\n    \"address_line1_check\": null,\n\
         \    \"address_line2\": null,\n    \"address_state\": null,\n    \"address_zip\"\
         : null,\n    \"address_zip_check\": null,\n    \"brand\": \"Visa\",\n    \"\
-        country\": \"JP\",\n    \"currency\": \"usd\",\n    \"cvc_check\": null,\n\
-        \    \"dynamic_last4\": null,\n    \"exp_month\": 4,\n    \"exp_year\": 2021,\n\
+        country\": \"JP\",\n    \"currency\": \"jpy\",\n    \"cvc_check\": null,\n\
+        \    \"dynamic_last4\": null,\n    \"exp_month\": 5,\n    \"exp_year\": 2022,\n\
         \    \"fingerprint\": \"4heNPBHbDWXWyXBc\",\n    \"funding\": \"credit\",\n\
         \    \"last4\": \"0003\",\n    \"metadata\": {\n    },\n    \"name\": null,\n\
         \    \"tokenization_method\": null\n  },\n  \"client_ip\": null,\n  \"created\"\
-        : 1586359536,\n  \"livemode\": false,\n  \"type\": \"card\",\n  \"used\":\
+        : 1622197226,\n  \"livemode\": false,\n  \"type\": \"card\",\n  \"used\":\
         \ false\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['790']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:36 GMT']
+      Date: ['Fri, 28 May 2021 10:20:26 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -691,24 +775,24 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_bQRqZD0yJTHmdc]
+      request-id: [req_R2qHsjpxXgLI4a]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=10000&owner[email]=donor%40example.com&redirect[return_url]=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2Fcomplete&token=tok_1GVfmWFk4eGpfLOCEhY5iO8W&type=card&usage=single_use
+    body: amount=10000&owner[email]=donor%40example.com&redirect[return_url]=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2Fcomplete&token=tok_1Iw2nmFk4eGpfLOCivto2sSb&type=card&usage=single_use
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/sources
   response:
-    body: {string: "{\n  \"id\": \"src_1GVfmXFk4eGpfLOCMYDcQiMM\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": 10000,\n  \"card\": {\n    \"exp_month\": 4,\n\
-        \    \"exp_year\": 2021,\n    \"last4\": \"0003\",\n    \"country\": \"JP\"\
+    body: {string: "{\n  \"id\": \"src_1Iw2nnFk4eGpfLOCxTHylo2e\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": 10000,\n  \"card\": {\n    \"exp_month\": 5,\n\
+        \    \"exp_year\": 2022,\n    \"last4\": \"0003\",\n    \"country\": \"JP\"\
         ,\n    \"brand\": \"Visa\",\n    \"funding\": \"credit\",\n    \"fingerprint\"\
         : \"4heNPBHbDWXWyXBc\",\n    \"three_d_secure\": \"optional\",\n    \"name\"\
         : null,\n    \"address_line1_check\": null,\n    \"address_zip_check\": null,\n\
         \    \"cvc_check\": null,\n    \"tokenization_method\": null,\n    \"dynamic_last4\"\
-        : null\n  },\n  \"client_secret\": \"src_client_secret_2cjToy3YCwEQBrzNRTeAUEoF\"\
-        ,\n  \"created\": 1586359537,\n  \"currency\": null,\n  \"flow\": \"none\"\
+        : null\n  },\n  \"client_secret\": \"src_client_secret_bmhNljhY1FfMNo7OTrynQUo0\"\
+        ,\n  \"created\": 1622197227,\n  \"currency\": null,\n  \"flow\": \"none\"\
         ,\n  \"livemode\": false,\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"\
         address\": null,\n    \"email\": \"donor@example.com\",\n    \"name\": null,\n\
         \    \"phone\": null,\n    \"verified_address\": null,\n    \"verified_email\"\
@@ -719,7 +803,7 @@ interactions:
       Connection: [keep-alive]
       Content-Length: ['961']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:37 GMT']
+      Date: ['Fri, 28 May 2021 10:20:27 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -729,39 +813,39 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [create_source_from_tok_1GVfmWFk4eGpfLOCEhY5iO8W]
-      original-request: [req_JzklW9EqaLIBKE]
-      request-id: [req_JzklW9EqaLIBKE]
+      idempotency-key: [create_source_from_tok_1Iw2nmFk4eGpfLOCivto2sSb]
+      original-request: [req_08JNORUJFzcC1x]
+      request-id: [req_08JNORUJFzcC1x]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: email=donor%40example.com&source=src_1GVfmXFk4eGpfLOCMYDcQiMM
+    body: email=donor%40example.com&source=src_1Iw2nnFk4eGpfLOCxTHylo2e
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/customers
   response:
-    body: {string: "{\n  \"id\": \"cus_H3nN6N7DRNNnKC\",\n  \"object\": \"customer\"\
+    body: {string: "{\n  \"id\": \"cus_JZBAEvEoENUOMY\",\n  \"object\": \"customer\"\
         ,\n  \"account_balance\": 0,\n  \"address\": null,\n  \"balance\": 0,\n  \"\
-        created\": 1586359537,\n  \"currency\": null,\n  \"default_source\": \"src_1GVfmXFk4eGpfLOCMYDcQiMM\"\
+        created\": 1622197227,\n  \"currency\": null,\n  \"default_source\": \"src_1Iw2nnFk4eGpfLOCxTHylo2e\"\
         ,\n  \"delinquent\": false,\n  \"description\": null,\n  \"discount\": null,\n\
-        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"4DB98DB2\",\n\
+        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"3C83F954\",\n\
         \  \"invoice_settings\": {\n    \"custom_fields\": null,\n    \"default_payment_method\"\
         : null,\n    \"footer\": null\n  },\n  \"livemode\": false,\n  \"metadata\"\
         : {\n  },\n  \"name\": null,\n  \"next_invoice_sequence\": 1,\n  \"phone\"\
         : null,\n  \"preferred_locales\": [\n\n  ],\n  \"shipping\": null,\n  \"sources\"\
         : {\n    \"object\": \"list\",\n    \"data\": [\n      {\n        \"id\":\
-        \ \"src_1GVfmXFk4eGpfLOCMYDcQiMM\",\n        \"object\": \"source\",\n   \
-        \     \"amount\": 10000,\n        \"card\": {\n          \"exp_month\": 4,\n\
-        \          \"exp_year\": 2021,\n          \"last4\": \"0003\",\n         \
+        \ \"src_1Iw2nnFk4eGpfLOCxTHylo2e\",\n        \"object\": \"source\",\n   \
+        \     \"amount\": 10000,\n        \"card\": {\n          \"exp_month\": 5,\n\
+        \          \"exp_year\": 2022,\n          \"last4\": \"0003\",\n         \
         \ \"country\": \"JP\",\n          \"brand\": \"Visa\",\n          \"funding\"\
         : \"credit\",\n          \"fingerprint\": \"4heNPBHbDWXWyXBc\",\n        \
         \  \"three_d_secure\": \"optional\",\n          \"name\": null,\n        \
         \  \"address_line1_check\": null,\n          \"address_zip_check\": null,\n\
         \          \"cvc_check\": null,\n          \"tokenization_method\": null,\n\
         \          \"dynamic_last4\": null\n        },\n        \"client_secret\"\
-        : \"src_client_secret_2cjToy3YCwEQBrzNRTeAUEoF\",\n        \"created\": 1586359537,\n\
-        \        \"currency\": null,\n        \"customer\": \"cus_H3nN6N7DRNNnKC\"\
+        : \"src_client_secret_bmhNljhY1FfMNo7OTrynQUo0\",\n        \"created\": 1622197227,\n\
+        \        \"currency\": null,\n        \"customer\": \"cus_JZBAEvEoENUOMY\"\
         ,\n        \"flow\": \"none\",\n        \"livemode\": false,\n        \"metadata\"\
         : {\n        },\n        \"owner\": {\n          \"address\": null,\n    \
         \      \"email\": \"donor@example.com\",\n          \"name\": null,\n    \
@@ -770,19 +854,19 @@ interactions:
         \  \"verified_phone\": null\n        },\n        \"statement_descriptor\"\
         : null,\n        \"status\": \"chargeable\",\n        \"type\": \"card\",\n\
         \        \"usage\": \"single_use\"\n      }\n    ],\n    \"has_more\": false,\n\
-        \    \"total_count\": 1,\n    \"url\": \"/v1/customers/cus_H3nN6N7DRNNnKC/sources\"\
+        \    \"total_count\": 1,\n    \"url\": \"/v1/customers/cus_JZBAEvEoENUOMY/sources\"\
         \n  },\n  \"subscriptions\": {\n    \"object\": \"list\",\n    \"data\": [\n\
         \n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\":\
-        \ \"/v1/customers/cus_H3nN6N7DRNNnKC/subscriptions\"\n  },\n  \"tax_exempt\"\
+        \ \"/v1/customers/cus_JZBAEvEoENUOMY/subscriptions\"\n  },\n  \"tax_exempt\"\
         : \"none\",\n  \"tax_ids\": {\n    \"object\": \"list\",\n    \"data\": [\n\
         \n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\":\
-        \ \"/v1/customers/cus_H3nN6N7DRNNnKC/tax_ids\"\n  },\n  \"tax_info\": null,\n\
+        \ \"/v1/customers/cus_JZBAEvEoENUOMY/tax_ids\"\n  },\n  \"tax_info\": null,\n\
         \  \"tax_info_verification\": null\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['2442']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:37 GMT']
+      Date: ['Fri, 28 May 2021 10:20:28 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -792,83 +876,83 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [create_customer_for_participant_1430_with_src_1GVfmXFk4eGpfLOCMYDcQiMM]
-      original-request: [req_mqvbgg186cmW0Q]
-      request-id: [req_mqvbgg186cmW0Q]
+      idempotency-key: [create_customer_for_participant_2130_with_src_1Iw2nnFk4eGpfLOCxTHylo2e]
+      original-request: [req_ZnoQISKMBwazQI]
+      request-id: [req_ZnoQISKMBwazQI]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=10000&currency=jpy&customer=cus_H3nN6N7DRNNnKC&metadata[payin_id]=1430&source=src_1GVfmXFk4eGpfLOCMYDcQiMM&statement_descriptor=Liberapay+1430&expand[0]=balance_transaction
+    body: amount=10000&currency=jpy&customer=cus_JZBAEvEoENUOMY&description=Liberapay&metadata[payin_id]=2130&source=src_1Iw2nnFk4eGpfLOCxTHylo2e&statement_descriptor=Liberapay+2130&expand[0]=balance_transaction
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/charges
   response:
-    body: {string: "{\n  \"id\": \"ch_1GVfmYFk4eGpfLOCE2G3T0Ko\",\n  \"object\": \"\
-        charge\",\n  \"amount\": 10000,\n  \"amount_refunded\": 0,\n  \"application\"\
-        : null,\n  \"application_fee\": null,\n  \"application_fee_amount\": null,\n\
-        \  \"balance_transaction\": {\n    \"id\": \"txn_1GVfmYFk4eGpfLOCjL5Vksim\"\
-        ,\n    \"object\": \"balance_transaction\",\n    \"amount\": 8281,\n    \"\
-        available_on\": 1586908800,\n    \"created\": 1586359538,\n    \"currency\"\
-        : \"eur\",\n    \"description\": null,\n    \"exchange_rate\": 0.828072,\n\
-        \    \"fee\": 265,\n    \"fee_details\": [\n      {\n        \"amount\": 265,\n\
+    body: {string: "{\n  \"id\": \"ch_1Iw2noFk4eGpfLOCbqPRGIoc\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 10000,\n  \"amount_captured\": 10000,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": null,\n  \"application_fee\": null,\n  \"application_fee_amount\"\
+        : null,\n  \"balance_transaction\": {\n    \"id\": \"txn_1Iw2noFk4eGpfLOCA38ZJrTM\"\
+        ,\n    \"object\": \"balance_transaction\",\n    \"amount\": 7315,\n    \"\
+        available_on\": 1622592000,\n    \"created\": 1622197228,\n    \"currency\"\
+        : \"eur\",\n    \"description\": \"Liberapay\",\n    \"exchange_rate\": 0.731462,\n\
+        \    \"fee\": 237,\n    \"fee_details\": [\n      {\n        \"amount\": 237,\n\
         \        \"application\": null,\n        \"currency\": \"eur\",\n        \"\
         description\": \"Stripe processing fees\",\n        \"type\": \"stripe_fee\"\
-        \n      }\n    ],\n    \"net\": 8016,\n    \"reporting_category\": \"charge\"\
-        ,\n    \"source\": \"ch_1GVfmYFk4eGpfLOCE2G3T0Ko\",\n    \"status\": \"pending\"\
+        \n      }\n    ],\n    \"net\": 7078,\n    \"reporting_category\": \"charge\"\
+        ,\n    \"source\": \"ch_1Iw2noFk4eGpfLOCbqPRGIoc\",\n    \"status\": \"pending\"\
         ,\n    \"type\": \"charge\"\n  },\n  \"billing_details\": {\n    \"address\"\
         : {\n      \"city\": null,\n      \"country\": null,\n      \"line1\": null,\n\
         \      \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
         \    },\n    \"email\": \"donor@example.com\",\n    \"name\": null,\n    \"\
         phone\": null\n  },\n  \"calculated_statement_descriptor\": \"LIBERAPAY* LIBERAPAY\
-        \ 1\",\n  \"captured\": true,\n  \"created\": 1586359538,\n  \"currency\"\
-        : \"jpy\",\n  \"customer\": \"cus_H3nN6N7DRNNnKC\",\n  \"description\": null,\n\
-        \  \"destination\": null,\n  \"dispute\": null,\n  \"disputed\": false,\n\
-        \  \"failure_code\": null,\n  \"failure_message\": null,\n  \"fraud_details\"\
+        \ 2\",\n  \"captured\": true,\n  \"created\": 1622197228,\n  \"currency\"\
+        : \"jpy\",\n  \"customer\": \"cus_JZBAEvEoENUOMY\",\n  \"description\": \"\
+        Liberapay\",\n  \"destination\": null,\n  \"dispute\": null,\n  \"disputed\"\
+        : false,\n  \"failure_code\": null,\n  \"failure_message\": null,\n  \"fraud_details\"\
         : {\n  },\n  \"invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n\
-        \    \"payin_id\": \"1430\"\n  },\n  \"on_behalf_of\": null,\n  \"order\"\
+        \    \"payin_id\": \"2130\"\n  },\n  \"on_behalf_of\": null,\n  \"order\"\
         : null,\n  \"outcome\": {\n    \"network_status\": \"approved_by_network\"\
         ,\n    \"reason\": null,\n    \"risk_level\": \"normal\",\n    \"risk_score\"\
-        : 6,\n    \"seller_message\": \"Payment complete.\",\n    \"type\": \"authorized\"\
+        : 23,\n    \"seller_message\": \"Payment complete.\",\n    \"type\": \"authorized\"\
         \n  },\n  \"paid\": true,\n  \"payment_intent\": null,\n  \"payment_method\"\
-        : \"src_1GVfmXFk4eGpfLOCMYDcQiMM\",\n  \"payment_method_details\": {\n   \
+        : \"src_1Iw2nnFk4eGpfLOCxTHylo2e\",\n  \"payment_method_details\": {\n   \
         \ \"card\": {\n      \"brand\": \"visa\",\n      \"checks\": {\n        \"\
         address_line1_check\": null,\n        \"address_postal_code_check\": null,\n\
         \        \"cvc_check\": null\n      },\n      \"country\": \"JP\",\n     \
-        \ \"exp_month\": 4,\n      \"exp_year\": 2021,\n      \"fingerprint\": \"\
+        \ \"exp_month\": 5,\n      \"exp_year\": 2022,\n      \"fingerprint\": \"\
         4heNPBHbDWXWyXBc\",\n      \"funding\": \"credit\",\n      \"installments\"\
         : null,\n      \"last4\": \"0003\",\n      \"network\": \"visa\",\n      \"\
         three_d_secure\": null,\n      \"wallet\": null\n    },\n    \"type\": \"\
         card\"\n  },\n  \"receipt_email\": null,\n  \"receipt_number\": null,\n  \"\
-        receipt_url\": \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/ch_1GVfmYFk4eGpfLOCE2G3T0Ko/rcpt_H3nNU9WcKR2pLZ4JwcnTtvjOZYEPp8Q\"\
+        receipt_url\": \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/ch_1Iw2noFk4eGpfLOCbqPRGIoc/rcpt_JZBATSkYIvymCG1NpRwzEeYap9RIweX\"\
         ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
         \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
-        \ 0,\n    \"url\": \"/v1/charges/ch_1GVfmYFk4eGpfLOCE2G3T0Ko/refunds\"\n \
+        \ 0,\n    \"url\": \"/v1/charges/ch_1Iw2noFk4eGpfLOCbqPRGIoc/refunds\"\n \
         \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
-        id\": \"src_1GVfmXFk4eGpfLOCMYDcQiMM\",\n    \"object\": \"source\",\n   \
-        \ \"amount\": 10000,\n    \"card\": {\n      \"exp_month\": 4,\n      \"exp_year\"\
-        : 2021,\n      \"last4\": \"0003\",\n      \"country\": \"JP\",\n      \"\
+        id\": \"src_1Iw2nnFk4eGpfLOCxTHylo2e\",\n    \"object\": \"source\",\n   \
+        \ \"amount\": 10000,\n    \"card\": {\n      \"exp_month\": 5,\n      \"exp_year\"\
+        : 2022,\n      \"last4\": \"0003\",\n      \"country\": \"JP\",\n      \"\
         brand\": \"Visa\",\n      \"funding\": \"credit\",\n      \"fingerprint\"\
         : \"4heNPBHbDWXWyXBc\",\n      \"three_d_secure\": \"optional\",\n      \"\
         name\": null,\n      \"address_line1_check\": null,\n      \"address_zip_check\"\
         : null,\n      \"cvc_check\": null,\n      \"tokenization_method\": null,\n\
-        \      \"dynamic_last4\": null\n    },\n    \"client_secret\": \"src_client_secret_2cjToy3YCwEQBrzNRTeAUEoF\"\
-        ,\n    \"created\": 1586359538,\n    \"currency\": null,\n    \"customer\"\
-        : \"cus_H3nN6N7DRNNnKC\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
+        \      \"dynamic_last4\": null\n    },\n    \"client_secret\": \"src_client_secret_bmhNljhY1FfMNo7OTrynQUo0\"\
+        ,\n    \"created\": 1622197228,\n    \"currency\": null,\n    \"customer\"\
+        : \"cus_JZBAEvEoENUOMY\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
         \    \"metadata\": {\n    },\n    \"owner\": {\n      \"address\": null,\n\
         \      \"email\": \"donor@example.com\",\n      \"name\": null,\n      \"\
         phone\": null,\n      \"verified_address\": null,\n      \"verified_email\"\
         : null,\n      \"verified_name\": null,\n      \"verified_phone\": null\n\
         \    },\n    \"statement_descriptor\": null,\n    \"status\": \"consumed\"\
         ,\n    \"type\": \"card\",\n    \"usage\": \"single_use\"\n  },\n  \"source_transfer\"\
-        : null,\n  \"statement_descriptor\": \"Liberapay 1430\",\n  \"statement_descriptor_suffix\"\
-        : \"Liberapay 1430\",\n  \"status\": \"succeeded\",\n  \"transfer_data\":\
+        : null,\n  \"statement_descriptor\": \"Liberapay 2130\",\n  \"statement_descriptor_suffix\"\
+        : \"Liberapay 2130\",\n  \"status\": \"succeeded\",\n  \"transfer_data\":\
         \ null,\n  \"transfer_group\": null\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['4028']
+      Content-Length: ['4071']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:38 GMT']
+      Date: ['Fri, 28 May 2021 10:20:29 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -878,34 +962,145 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [payin_1430]
-      original-request: [req_qFlBuxGkO91WQr]
-      request-id: [req_qFlBuxGkO91WQr]
+      idempotency-key: [payin_2130]
+      original-request: [req_0exi7G3rycmTGz]
+      request-id: [req_0exi7G3rycmTGz]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=4008&currency=EUR&destination=acct_1GVfmPLo8l3IWFWX&metadata[payin_transfer_id]=1430&source_transaction=ch_1GVfmYFk4eGpfLOCE2G3T0Ko
+    body: amount=3539&currency=EUR&description=anonymous+donation+for+creator_1+via+Liberapay&destination=acct_1Iw2ne2H54hWzJBk&metadata[payin_transfer_id]=2130&source_transaction=ch_1Iw2noFk4eGpfLOCbqPRGIoc
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/transfers
   response:
-    body: {string: "{\n  \"id\": \"tr_1GVfmZFk4eGpfLOCpHc7awA3\",\n  \"object\": \"\
-        transfer\",\n  \"amount\": 4008,\n  \"amount_reversed\": 0,\n  \"balance_transaction\"\
-        : \"txn_1GVfmZFk4eGpfLOC5nPMt2IR\",\n  \"created\": 1586359539,\n  \"currency\"\
-        : \"eur\",\n  \"description\": null,\n  \"destination\": \"acct_1GVfmPLo8l3IWFWX\"\
-        ,\n  \"destination_payment\": \"py_1GVfmZLo8l3IWFWXsX6ePCUy\",\n  \"livemode\"\
-        : false,\n  \"metadata\": {\n    \"payin_transfer_id\": \"1430\"\n  },\n \
-        \ \"reversals\": {\n    \"object\": \"list\",\n    \"data\": [\n\n    ],\n\
-        \    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\": \"/v1/transfers/tr_1GVfmZFk4eGpfLOCpHc7awA3/reversals\"\
-        \n  },\n  \"reversed\": false,\n  \"source_transaction\": \"ch_1GVfmYFk4eGpfLOCE2G3T0Ko\"\
-        ,\n  \"source_type\": \"card\",\n  \"transfer_group\": \"group_ch_1GVfmYFk4eGpfLOCE2G3T0Ko\"\
+    body: {string: "{\n  \"id\": \"tr_1Iw2npFk4eGpfLOCMndWR5kB\",\n  \"object\": \"\
+        transfer\",\n  \"amount\": 3539,\n  \"amount_reversed\": 0,\n  \"balance_transaction\"\
+        : \"txn_1Iw2npFk4eGpfLOCU7yXFoKc\",\n  \"created\": 1622197229,\n  \"currency\"\
+        : \"eur\",\n  \"description\": \"anonymous donation for creator_1 via Liberapay\"\
+        ,\n  \"destination\": \"acct_1Iw2ne2H54hWzJBk\",\n  \"destination_payment\"\
+        : \"py_1Iw2np2H54hWzJBkfMpoeSa6\",\n  \"livemode\": false,\n  \"metadata\"\
+        : {\n    \"payin_transfer_id\": \"2130\"\n  },\n  \"reversals\": {\n    \"\
+        object\": \"list\",\n    \"data\": [\n\n    ],\n    \"has_more\": false,\n\
+        \    \"total_count\": 0,\n    \"url\": \"/v1/transfers/tr_1Iw2npFk4eGpfLOCMndWR5kB/reversals\"\
+        \n  },\n  \"reversed\": false,\n  \"source_transaction\": \"ch_1Iw2noFk4eGpfLOCbqPRGIoc\"\
+        ,\n  \"source_type\": \"card\",\n  \"transfer_group\": \"group_ch_1Iw2noFk4eGpfLOCbqPRGIoc\"\
         \n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['740']
+      Content-Length: ['784']
+      Content-Type: [application/json]
+      Date: ['Fri, 28 May 2021 10:20:30 GMT']
+      Server: [nginx]
+      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
+      access-control-allow-credentials: ['true']
+      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
+      access-control-allow-origin: ['*']
+      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
+          X-Stripe-Privileged-Session-Required']
+      access-control-max-age: ['300']
+      cache-control: ['no-cache, no-store']
+      idempotency-key: [payin_transfer_2130]
+      original-request: [req_cTWhUkoiLbDZLi]
+      request-id: [req_cTWhUkoiLbDZLi]
+      stripe-should-retry: ['false']
+      stripe-version: ['2019-08-14']
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers: {}
+    method: GET
+    uri: https://api.stripe.com/v1/charges/py_1Iw2np2H54hWzJBkfMpoeSa6
+  response:
+    body: {string: "{\n  \"id\": \"py_1Iw2np2H54hWzJBkfMpoeSa6\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 3539,\n  \"amount_captured\": 3539,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": \"ca_DEYxiYHBHZtGj32l9uczcsunbQOcRq8H\",\n  \"application_fee\"\
+        : null,\n  \"application_fee_amount\": null,\n  \"balance_transaction\": \"\
+        txn_1Iw2np2H54hWzJBkgFHlJJik\",\n  \"billing_details\": {\n    \"address\"\
+        : {\n      \"city\": null,\n      \"country\": null,\n      \"line1\": null,\n\
+        \      \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
+        \    },\n    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n\
+        \  },\n  \"calculated_statement_descriptor\": null,\n  \"captured\": true,\n\
+        \  \"created\": 1622197229,\n  \"currency\": \"eur\",\n  \"customer\": null,\n\
+        \  \"description\": null,\n  \"destination\": null,\n  \"dispute\": null,\n\
+        \  \"disputed\": false,\n  \"failure_code\": null,\n  \"failure_message\"\
+        : null,\n  \"fraud_details\": {\n  },\n  \"invoice\": null,\n  \"livemode\"\
+        : false,\n  \"metadata\": {\n  },\n  \"on_behalf_of\": null,\n  \"order\"\
+        : null,\n  \"outcome\": null,\n  \"paid\": true,\n  \"payment_intent\": null,\n\
+        \  \"payment_method\": null,\n  \"payment_method_details\": {\n    \"stripe_account\"\
+        : {\n    },\n    \"type\": \"stripe_account\"\n  },\n  \"receipt_email\":\
+        \ null,\n  \"receipt_number\": null,\n  \"receipt_url\": \"https://pay.stripe.com/receipts/acct_1Iw2ne2H54hWzJBk/py_1Iw2np2H54hWzJBkfMpoeSa6/rcpt_JZBAUbtkuxwR6isobBtTyvVfIDgX1wC\"\
+        ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
+        \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
+        \ 0,\n    \"url\": \"/v1/charges/py_1Iw2np2H54hWzJBkfMpoeSa6/refunds\"\n \
+        \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
+        id\": \"acct_1ChyayFk4eGpfLOC\",\n    \"object\": \"account\",\n    \"application_icon\"\
+        : \"https://files.stripe.com/links/fl_live_pcO27i8SSea27yZPmUHDPhiF\",\n \
+        \   \"application_logo\": \"https://s3.amazonaws.com/stripe-uploads/acct_1ChyayFk4eGpfLOCapplication-logo-icon_v2_yellow_r.100.png\"\
+        ,\n    \"application_name\": \"Liberapay\",\n    \"application_url\": \"https://liberapay.com/\"\
+        \n  },\n  \"source_transfer\": \"tr_1Iw2npFk4eGpfLOCMndWR5kB\",\n  \"statement_descriptor\"\
+        : null,\n  \"statement_descriptor_suffix\": null,\n  \"status\": \"succeeded\"\
+        ,\n  \"transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
+    headers:
+      Connection: [keep-alive]
+      Content-Length: ['2125']
+      Content-Type: [application/json]
+      Date: ['Fri, 28 May 2021 10:20:30 GMT']
+      Server: [nginx]
+      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
+      access-control-allow-credentials: ['true']
+      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
+      access-control-allow-origin: ['*']
+      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
+          X-Stripe-Privileged-Session-Required']
+      access-control-max-age: ['300']
+      cache-control: ['no-cache, no-store']
+      request-id: [req_9EupepIHsCFO4k]
+      stripe-account: [acct_1Iw2ne2H54hWzJBk]
+      stripe-version: ['2019-08-14']
+    status: {code: 200, message: OK}
+- request:
+    body: description=anonymous+donation+for+creator_1+via+Liberapay&metadata[liberapay_transfer_id]=2130
+    headers: {}
+    method: POST
+    uri: https://api.stripe.com/v1/charges/py_1Iw2np2H54hWzJBkfMpoeSa6
+  response:
+    body: {string: "{\n  \"id\": \"py_1Iw2np2H54hWzJBkfMpoeSa6\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 3539,\n  \"amount_captured\": 3539,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": \"ca_DEYxiYHBHZtGj32l9uczcsunbQOcRq8H\",\n  \"application_fee\"\
+        : null,\n  \"application_fee_amount\": null,\n  \"balance_transaction\": \"\
+        txn_1Iw2np2H54hWzJBkgFHlJJik\",\n  \"billing_details\": {\n    \"address\"\
+        : {\n      \"city\": null,\n      \"country\": null,\n      \"line1\": null,\n\
+        \      \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
+        \    },\n    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n\
+        \  },\n  \"calculated_statement_descriptor\": null,\n  \"captured\": true,\n\
+        \  \"created\": 1622197229,\n  \"currency\": \"eur\",\n  \"customer\": null,\n\
+        \  \"description\": \"anonymous donation for creator_1 via Liberapay\",\n\
+        \  \"destination\": null,\n  \"dispute\": null,\n  \"disputed\": false,\n\
+        \  \"failure_code\": null,\n  \"failure_message\": null,\n  \"fraud_details\"\
+        : {\n  },\n  \"invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n\
+        \    \"liberapay_transfer_id\": \"2130\"\n  },\n  \"on_behalf_of\": null,\n\
+        \  \"order\": null,\n  \"outcome\": null,\n  \"paid\": true,\n  \"payment_intent\"\
+        : null,\n  \"payment_method\": null,\n  \"payment_method_details\": {\n  \
+        \  \"stripe_account\": {\n    },\n    \"type\": \"stripe_account\"\n  },\n\
+        \  \"receipt_email\": null,\n  \"receipt_number\": null,\n  \"receipt_url\"\
+        : \"https://pay.stripe.com/receipts/acct_1Iw2ne2H54hWzJBk/py_1Iw2np2H54hWzJBkfMpoeSa6/rcpt_JZBAUbtkuxwR6isobBtTyvVfIDgX1wC\"\
+        ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
+        \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
+        \ 0,\n    \"url\": \"/v1/charges/py_1Iw2np2H54hWzJBkfMpoeSa6/refunds\"\n \
+        \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
+        id\": \"acct_1ChyayFk4eGpfLOC\",\n    \"object\": \"account\",\n    \"application_icon\"\
+        : \"https://files.stripe.com/links/fl_live_pcO27i8SSea27yZPmUHDPhiF\",\n \
+        \   \"application_logo\": \"https://s3.amazonaws.com/stripe-uploads/acct_1ChyayFk4eGpfLOCapplication-logo-icon_v2_yellow_r.100.png\"\
+        ,\n    \"application_name\": \"Liberapay\",\n    \"application_url\": \"https://liberapay.com/\"\
+        \n  },\n  \"source_transfer\": \"tr_1Iw2npFk4eGpfLOCMndWR5kB\",\n  \"statement_descriptor\"\
+        : null,\n  \"statement_descriptor_suffix\": null,\n  \"status\": \"succeeded\"\
+        ,\n  \"transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
+    headers:
+      Connection: [keep-alive]
+      Content-Length: ['2205']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:39 GMT']
+      Date: ['Fri, 28 May 2021 10:20:31 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -915,9 +1110,10 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [payin_transfer_1430]
-      original-request: [req_5TgIEQULG3NWSa]
-      request-id: [req_5TgIEQULG3NWSa]
+      idempotency-key: [bf7ce0ec-daad-45ea-8710-1372801b6d40]
+      original-request: [req_qDt1WkUNufYe2P]
+      request-id: [req_qDt1WkUNufYe2P]
+      stripe-account: [acct_1Iw2ne2H54hWzJBk]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
@@ -927,20 +1123,20 @@ interactions:
     method: POST
     uri: https://api.stripe.com/v1/tokens
   response:
-    body: {string: "{\n  \"id\": \"btok_1GVfmaFk4eGpfLOCG0ruWKeD\",\n  \"object\"\
-        : \"token\",\n  \"bank_account\": {\n    \"id\": \"ba_1GVfmaFk4eGpfLOCyoNmMrh6\"\
+    body: {string: "{\n  \"id\": \"btok_1Iw2nrFk4eGpfLOC7oznmBvP\",\n  \"object\"\
+        : \"token\",\n  \"bank_account\": {\n    \"id\": \"ba_1Iw2nrFk4eGpfLOCX6Gs8J9V\"\
         ,\n    \"object\": \"bank_account\",\n    \"account_holder_name\": \"Jane\
         \ Doe\",\n    \"account_holder_type\": null,\n    \"bank_name\": \"STRIPE\
         \ TEST BANK\",\n    \"country\": \"FR\",\n    \"currency\": \"eur\",\n   \
         \ \"fingerprint\": \"T8MDJUvoericCF3x\",\n    \"last4\": \"2606\",\n    \"\
         routing_number\": \"110000000\",\n    \"status\": \"new\"\n  },\n  \"client_ip\"\
-        : \"109.190.32.190\",\n  \"created\": 1586359540,\n  \"livemode\": false,\n\
+        : \"77.128.117.173\",\n  \"created\": 1622197231,\n  \"livemode\": false,\n\
         \  \"type\": \"bank_account\",\n  \"used\": false\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['551']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:40 GMT']
+      Date: ['Fri, 28 May 2021 10:20:31 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -950,9 +1146,9 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [ee428dfe-7570-446a-a456-6d2818942a0f]
-      original-request: [req_tjBXZs3l7xnhsp]
-      request-id: [req_tjBXZs3l7xnhsp]
+      idempotency-key: [54138b88-4438-4dd3-9845-f1627b64dc64]
+      original-request: [req_JC08fVd1ZEKs3S]
+      request-id: [req_JC08fVd1ZEKs3S]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
@@ -960,22 +1156,22 @@ interactions:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/tokens/btok_1GVfmaFk4eGpfLOCG0ruWKeD
+    uri: https://api.stripe.com/v1/tokens/btok_1Iw2nrFk4eGpfLOC7oznmBvP
   response:
-    body: {string: "{\n  \"id\": \"btok_1GVfmaFk4eGpfLOCG0ruWKeD\",\n  \"object\"\
-        : \"token\",\n  \"bank_account\": {\n    \"id\": \"ba_1GVfmaFk4eGpfLOCyoNmMrh6\"\
+    body: {string: "{\n  \"id\": \"btok_1Iw2nrFk4eGpfLOC7oznmBvP\",\n  \"object\"\
+        : \"token\",\n  \"bank_account\": {\n    \"id\": \"ba_1Iw2nrFk4eGpfLOCX6Gs8J9V\"\
         ,\n    \"object\": \"bank_account\",\n    \"account_holder_name\": \"Jane\
         \ Doe\",\n    \"account_holder_type\": null,\n    \"bank_name\": \"STRIPE\
         \ TEST BANK\",\n    \"country\": \"FR\",\n    \"currency\": \"eur\",\n   \
         \ \"fingerprint\": \"T8MDJUvoericCF3x\",\n    \"last4\": \"2606\",\n    \"\
         routing_number\": \"110000000\",\n    \"status\": \"new\"\n  },\n  \"client_ip\"\
-        : \"109.190.32.190\",\n  \"created\": 1586359540,\n  \"livemode\": false,\n\
+        : \"77.128.117.173\",\n  \"created\": 1622197231,\n  \"livemode\": false,\n\
         \  \"type\": \"bank_account\",\n  \"used\": false\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['551']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:40 GMT']
+      Date: ['Fri, 28 May 2021 10:20:32 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -985,24 +1181,24 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_U2g8rcbJ4wDVYF]
+      request-id: [req_R5V4NOOyNleem5]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: owner[email]=donor%40example.com&redirect[return_url]=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2Fcomplete&token=btok_1GVfmaFk4eGpfLOCG0ruWKeD&type=sepa_debit&usage=reusable
+    body: owner[email]=donor%40example.com&redirect[return_url]=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2Fcomplete&token=btok_1Iw2nrFk4eGpfLOC7oznmBvP&type=sepa_debit&usage=reusable
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/sources
   response:
-    body: {string: "{\n  \"id\": \"src_1GVfmaFk4eGpfLOCvkI01RbI\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
-        ,\n  \"created\": 1586359540,\n  \"currency\": \"eur\",\n  \"flow\": \"none\"\
+    body: {string: "{\n  \"id\": \"src_1Iw2nsFk4eGpfLOCwuZCbHpq\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
+        ,\n  \"created\": 1622197232,\n  \"currency\": \"eur\",\n  \"flow\": \"none\"\
         ,\n  \"livemode\": false,\n  \"mandate\": {\n    \"acceptance\": {\n     \
         \ \"date\": null,\n      \"ip\": null,\n      \"offline\": null,\n      \"\
         online\": null,\n      \"status\": \"pending\",\n      \"type\": null,\n \
         \     \"user_agent\": null\n    },\n    \"amount\": null,\n    \"currency\"\
         : null,\n    \"interval\": \"variable\",\n    \"notification_method\": \"\
-        none\",\n    \"reference\": \"WXNWNGBR4FQMBW7I\",\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
+        none\",\n    \"reference\": \"CP9SMGRXKVJLXASU\",\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
         \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
         \  \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n \
         \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
@@ -1011,15 +1207,15 @@ interactions:
         : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
         \  \"sepa_debit\": {\n    \"last4\": \"2606\",\n    \"bank_code\": \"20041\"\
         ,\n    \"branch_code\": \"01005\",\n    \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
-        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"WXNWNGBR4FQMBW7I\"\
-        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
+        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"CP9SMGRXKVJLXASU\"\
+        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
         \n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\",\n\
         \  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['1545']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:41 GMT']
+      Date: ['Fri, 28 May 2021 10:20:32 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1029,40 +1225,40 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [create_source_from_btok_1GVfmaFk4eGpfLOCG0ruWKeD]
-      original-request: [req_YwRlTSpJKXuuFv]
-      request-id: [req_YwRlTSpJKXuuFv]
+      idempotency-key: [create_source_from_btok_1Iw2nrFk4eGpfLOC7oznmBvP]
+      original-request: [req_oNyeerX7bUKk1J]
+      request-id: [req_oNyeerX7bUKk1J]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: email=donor%40example.com&source=src_1GVfmaFk4eGpfLOCvkI01RbI
+    body: email=donor%40example.com&source=src_1Iw2nsFk4eGpfLOCwuZCbHpq
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/customers
   response:
-    body: {string: "{\n  \"id\": \"cus_H3nNLyErBliltd\",\n  \"object\": \"customer\"\
+    body: {string: "{\n  \"id\": \"cus_JZBAVjkG6J4uw2\",\n  \"object\": \"customer\"\
         ,\n  \"account_balance\": 0,\n  \"address\": null,\n  \"balance\": 0,\n  \"\
-        created\": 1586359541,\n  \"currency\": null,\n  \"default_source\": \"src_1GVfmaFk4eGpfLOCvkI01RbI\"\
+        created\": 1622197233,\n  \"currency\": null,\n  \"default_source\": \"src_1Iw2nsFk4eGpfLOCwuZCbHpq\"\
         ,\n  \"delinquent\": false,\n  \"description\": null,\n  \"discount\": null,\n\
-        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"AC4C2718\",\n\
+        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"7AE8BECE\",\n\
         \  \"invoice_settings\": {\n    \"custom_fields\": null,\n    \"default_payment_method\"\
         : null,\n    \"footer\": null\n  },\n  \"livemode\": false,\n  \"metadata\"\
         : {\n  },\n  \"name\": null,\n  \"next_invoice_sequence\": 1,\n  \"phone\"\
         : null,\n  \"preferred_locales\": [\n\n  ],\n  \"shipping\": null,\n  \"sources\"\
         : {\n    \"object\": \"list\",\n    \"data\": [\n      {\n        \"id\":\
-        \ \"src_1GVfmaFk4eGpfLOCvkI01RbI\",\n        \"object\": \"source\",\n   \
-        \     \"amount\": null,\n        \"client_secret\": \"src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
-        ,\n        \"created\": 1586359540,\n        \"currency\": \"eur\",\n    \
-        \    \"customer\": \"cus_H3nNLyErBliltd\",\n        \"flow\": \"none\",\n\
+        \ \"src_1Iw2nsFk4eGpfLOCwuZCbHpq\",\n        \"object\": \"source\",\n   \
+        \     \"amount\": null,\n        \"client_secret\": \"src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
+        ,\n        \"created\": 1622197232,\n        \"currency\": \"eur\",\n    \
+        \    \"customer\": \"cus_JZBAVjkG6J4uw2\",\n        \"flow\": \"none\",\n\
         \        \"livemode\": false,\n        \"mandate\": {\n          \"acceptance\"\
         : {\n            \"date\": null,\n            \"ip\": null,\n            \"\
         offline\": null,\n            \"online\": null,\n            \"status\": \"\
         pending\",\n            \"type\": null,\n            \"user_agent\": null\n\
         \          },\n          \"amount\": null,\n          \"currency\": null,\n\
         \          \"interval\": \"variable\",\n          \"notification_method\"\
-        : \"none\",\n          \"reference\": \"WXNWNGBR4FQMBW7I\",\n          \"\
-        url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
+        : \"none\",\n          \"reference\": \"CP9SMGRXKVJLXASU\",\n          \"\
+        url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
         \n        },\n        \"metadata\": {\n        },\n        \"owner\": {\n\
         \          \"address\": {\n            \"city\": null,\n            \"country\"\
         : \"FR\",\n            \"line1\": null,\n            \"line2\": null,\n  \
@@ -1073,23 +1269,23 @@ interactions:
         \          \"verified_phone\": null\n        },\n        \"sepa_debit\": {\n\
         \          \"last4\": \"2606\",\n          \"bank_code\": \"20041\",\n   \
         \       \"branch_code\": \"01005\",\n          \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
-        ,\n          \"country\": \"FR\",\n          \"mandate_reference\": \"WXNWNGBR4FQMBW7I\"\
-        ,\n          \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
+        ,\n          \"country\": \"FR\",\n          \"mandate_reference\": \"CP9SMGRXKVJLXASU\"\
+        ,\n          \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
         \n        },\n        \"statement_descriptor\": null,\n        \"status\"\
         : \"chargeable\",\n        \"type\": \"sepa_debit\",\n        \"usage\": \"\
         reusable\"\n      }\n    ],\n    \"has_more\": false,\n    \"total_count\"\
-        : 1,\n    \"url\": \"/v1/customers/cus_H3nNLyErBliltd/sources\"\n  },\n  \"\
+        : 1,\n    \"url\": \"/v1/customers/cus_JZBAVjkG6J4uw2/sources\"\n  },\n  \"\
         subscriptions\": {\n    \"object\": \"list\",\n    \"data\": [\n\n    ],\n\
-        \    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\": \"/v1/customers/cus_H3nNLyErBliltd/subscriptions\"\
+        \    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\": \"/v1/customers/cus_JZBAVjkG6J4uw2/subscriptions\"\
         \n  },\n  \"tax_exempt\": \"none\",\n  \"tax_ids\": {\n    \"object\": \"\
         list\",\n    \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\"\
-        : 0,\n    \"url\": \"/v1/customers/cus_H3nNLyErBliltd/tax_ids\"\n  },\n  \"\
+        : 0,\n    \"url\": \"/v1/customers/cus_JZBAVjkG6J4uw2/tax_ids\"\n  },\n  \"\
         tax_info\": null,\n  \"tax_info_verification\": null\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['3128']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:41 GMT']
+      Date: ['Fri, 28 May 2021 10:20:33 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1099,56 +1295,55 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [create_customer_for_participant_1440_with_src_1GVfmaFk4eGpfLOCvkI01RbI]
-      original-request: [req_4Uv1JYucaKlQl1]
-      request-id: [req_4Uv1JYucaKlQl1]
+      idempotency-key: [create_customer_for_participant_2140_with_src_1Iw2nsFk4eGpfLOCwuZCbHpq]
+      original-request: [req_ew1Oth0ueIEJyb]
+      request-id: [req_ew1Oth0ueIEJyb]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=10000&currency=eur&customer=cus_H3nNLyErBliltd&metadata[payin_id]=1440&source=src_1GVfmaFk4eGpfLOCvkI01RbI&statement_descriptor=Liberapay+1440&expand[0]=balance_transaction
+    body: amount=10000&currency=eur&customer=cus_JZBAVjkG6J4uw2&description=Liberapay&metadata[payin_id]=2140&source=src_1Iw2nsFk4eGpfLOCwuZCbHpq&statement_descriptor=Liberapay+2140&expand[0]=balance_transaction
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/charges
   response:
-    body: {string: "{\n  \"id\": \"py_1GVfmbFk4eGpfLOCP2IRMNTW\",\n  \"object\": \"\
-        charge\",\n  \"amount\": 10000,\n  \"amount_refunded\": 0,\n  \"application\"\
-        : null,\n  \"application_fee\": null,\n  \"application_fee_amount\": null,\n\
-        \  \"balance_transaction\": null,\n  \"billing_details\": {\n    \"address\"\
-        : {\n      \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n\
-        \      \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
-        \    },\n    \"email\": \"donor@example.com\",\n    \"name\": \"Jane Doe\"\
-        ,\n    \"phone\": null\n  },\n  \"calculated_statement_descriptor\": null,\n\
-        \  \"captured\": true,\n  \"created\": 1586359541,\n  \"currency\": \"eur\"\
-        ,\n  \"customer\": \"cus_H3nNLyErBliltd\",\n  \"description\": null,\n  \"\
-        destination\": null,\n  \"dispute\": null,\n  \"disputed\": false,\n  \"failure_code\"\
-        : null,\n  \"failure_message\": null,\n  \"fraud_details\": {\n  },\n  \"\
-        invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n    \"payin_id\"\
-        : \"1440\"\n  },\n  \"on_behalf_of\": null,\n  \"order\": null,\n  \"outcome\"\
-        : {\n    \"network_status\": \"approved_by_network\",\n    \"reason\": null,\n\
-        \    \"risk_level\": \"not_assessed\",\n    \"seller_message\": \"Payment\
-        \ complete.\",\n    \"type\": \"authorized\"\n  },\n  \"paid\": false,\n \
-        \ \"payment_intent\": null,\n  \"payment_method\": \"src_1GVfmaFk4eGpfLOCvkI01RbI\"\
+    body: {string: "{\n  \"id\": \"py_1Iw2ntFk4eGpfLOCUBckNDwv\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 10000,\n  \"amount_captured\": 10000,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": null,\n  \"application_fee\": null,\n  \"application_fee_amount\"\
+        : null,\n  \"balance_transaction\": null,\n  \"billing_details\": {\n    \"\
+        address\": {\n      \"city\": null,\n      \"country\": \"FR\",\n      \"\
+        line1\": null,\n      \"line2\": null,\n      \"postal_code\": null,\n   \
+        \   \"state\": null\n    },\n    \"email\": \"donor@example.com\",\n    \"\
+        name\": \"Jane Doe\",\n    \"phone\": null\n  },\n  \"calculated_statement_descriptor\"\
+        : null,\n  \"captured\": true,\n  \"created\": 1622197233,\n  \"currency\"\
+        : \"eur\",\n  \"customer\": \"cus_JZBAVjkG6J4uw2\",\n  \"description\": \"\
+        Liberapay\",\n  \"destination\": null,\n  \"dispute\": null,\n  \"disputed\"\
+        : false,\n  \"failure_code\": null,\n  \"failure_message\": null,\n  \"fraud_details\"\
+        : {\n  },\n  \"invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n\
+        \    \"payin_id\": \"2140\"\n  },\n  \"on_behalf_of\": null,\n  \"order\"\
+        : null,\n  \"outcome\": {\n    \"network_status\": \"approved_by_network\"\
+        ,\n    \"reason\": null,\n    \"risk_level\": \"not_assessed\",\n    \"seller_message\"\
+        : \"Payment complete.\",\n    \"type\": \"authorized\"\n  },\n  \"paid\":\
+        \ false,\n  \"payment_intent\": null,\n  \"payment_method\": \"src_1Iw2nsFk4eGpfLOCwuZCbHpq\"\
         ,\n  \"payment_method_details\": {\n    \"sepa_debit\": {\n      \"bank_code\"\
         : \"20041\",\n      \"branch_code\": \"01005\",\n      \"country\": \"FR\"\
         ,\n      \"fingerprint\": \"bevtMDy4Cud4ZswV\",\n      \"last4\": \"2606\"\
         ,\n      \"mandate\": null\n    },\n    \"type\": \"sepa_debit\"\n  },\n \
         \ \"receipt_email\": null,\n  \"receipt_number\": null,\n  \"receipt_url\"\
-        : \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/py_1GVfmbFk4eGpfLOCP2IRMNTW/rcpt_H3nN1YEftC6HNZVwHHhVjg13Mk6VAQ4\"\
-        ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
-        \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
-        \ 0,\n    \"url\": \"/v1/charges/py_1GVfmbFk4eGpfLOCP2IRMNTW/refunds\"\n \
+        : null,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\"\
+        ,\n    \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\"\
+        : 0,\n    \"url\": \"/v1/charges/py_1Iw2ntFk4eGpfLOCUBckNDwv/refunds\"\n \
         \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
-        id\": \"src_1GVfmaFk4eGpfLOCvkI01RbI\",\n    \"object\": \"source\",\n   \
-        \ \"amount\": null,\n    \"client_secret\": \"src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
-        ,\n    \"created\": 1586359541,\n    \"currency\": \"eur\",\n    \"customer\"\
-        : \"cus_H3nNLyErBliltd\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
+        id\": \"src_1Iw2nsFk4eGpfLOCwuZCbHpq\",\n    \"object\": \"source\",\n   \
+        \ \"amount\": null,\n    \"client_secret\": \"src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
+        ,\n    \"created\": 1622197233,\n    \"currency\": \"eur\",\n    \"customer\"\
+        : \"cus_JZBAVjkG6J4uw2\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
         \    \"mandate\": {\n      \"acceptance\": {\n        \"date\": null,\n  \
         \      \"ip\": null,\n        \"offline\": null,\n        \"online\": null,\n\
         \        \"status\": \"pending\",\n        \"type\": null,\n        \"user_agent\"\
         : null\n      },\n      \"amount\": null,\n      \"currency\": null,\n   \
         \   \"interval\": \"variable\",\n      \"notification_method\": \"none\",\n\
-        \      \"reference\": \"WXNWNGBR4FQMBW7I\",\n      \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
+        \      \"reference\": \"CP9SMGRXKVJLXASU\",\n      \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
         \n    },\n    \"metadata\": {\n    },\n    \"owner\": {\n      \"address\"\
         : {\n        \"city\": null,\n        \"country\": \"FR\",\n        \"line1\"\
         : null,\n        \"line2\": null,\n        \"postal_code\": null,\n      \
@@ -1158,18 +1353,18 @@ interactions:
         \      \"verified_phone\": null\n    },\n    \"sepa_debit\": {\n      \"last4\"\
         : \"2606\",\n      \"bank_code\": \"20041\",\n      \"branch_code\": \"01005\"\
         ,\n      \"fingerprint\": \"bevtMDy4Cud4ZswV\",\n      \"country\": \"FR\"\
-        ,\n      \"mandate_reference\": \"WXNWNGBR4FQMBW7I\",\n      \"mandate_url\"\
-        : \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
+        ,\n      \"mandate_reference\": \"CP9SMGRXKVJLXASU\",\n      \"mandate_url\"\
+        : \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
         \n    },\n    \"statement_descriptor\": null,\n    \"status\": \"chargeable\"\
         ,\n    \"type\": \"sepa_debit\",\n    \"usage\": \"reusable\"\n  },\n  \"\
-        source_transfer\": null,\n  \"statement_descriptor\": \"Liberapay 1440\",\n\
+        source_transfer\": null,\n  \"statement_descriptor\": \"Liberapay 2140\",\n\
         \  \"statement_descriptor_suffix\": null,\n  \"status\": \"pending\",\n  \"\
         transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['3766']
+      Content-Length: ['3685']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:42 GMT']
+      Date: ['Fri, 28 May 2021 10:20:33 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1179,9 +1374,9 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [payin_1440]
-      original-request: [req_SfjRlGkuYYtu3v]
-      request-id: [req_SfjRlGkuYYtu3v]
+      idempotency-key: [payin_2140]
+      original-request: [req_QHbdwqppGtvqwG]
+      request-id: [req_QHbdwqppGtvqwG]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
@@ -1189,18 +1384,18 @@ interactions:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/sources/src_1GVfmaFk4eGpfLOCvkI01RbI
+    uri: https://api.stripe.com/v1/sources/src_1Iw2nsFk4eGpfLOCwuZCbHpq
   response:
-    body: {string: "{\n  \"id\": \"src_1GVfmaFk4eGpfLOCvkI01RbI\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
-        ,\n  \"created\": 1586359540,\n  \"currency\": \"eur\",\n  \"customer\": \"\
-        cus_H3nNLyErBliltd\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
+    body: {string: "{\n  \"id\": \"src_1Iw2nsFk4eGpfLOCwuZCbHpq\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
+        ,\n  \"created\": 1622197232,\n  \"currency\": \"eur\",\n  \"customer\": \"\
+        cus_JZBAVjkG6J4uw2\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
         mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
         \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
         : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
         \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
-        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"WXNWNGBR4FQMBW7I\"\
-        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
+        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"CP9SMGRXKVJLXASU\"\
+        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
         \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
         \  \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n \
         \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
@@ -1209,15 +1404,15 @@ interactions:
         : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
         \  \"sepa_debit\": {\n    \"last4\": \"2606\",\n    \"bank_code\": \"20041\"\
         ,\n    \"branch_code\": \"01005\",\n    \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
-        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"WXNWNGBR4FQMBW7I\"\
-        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
+        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"CP9SMGRXKVJLXASU\"\
+        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
         \n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\",\n\
         \  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['1581']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:42 GMT']
+      Date: ['Fri, 28 May 2021 10:20:34 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1227,25 +1422,25 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_eYCfdLq2TQyQXy]
+      request-id: [req_jb638rMvM4dTTc]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/sources/src_1GVfmaFk4eGpfLOCvkI01RbI
+    uri: https://api.stripe.com/v1/sources/src_1Iw2nsFk4eGpfLOCwuZCbHpq
   response:
-    body: {string: "{\n  \"id\": \"src_1GVfmaFk4eGpfLOCvkI01RbI\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
-        ,\n  \"created\": 1586359540,\n  \"currency\": \"eur\",\n  \"customer\": \"\
-        cus_H3nNLyErBliltd\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
+    body: {string: "{\n  \"id\": \"src_1Iw2nsFk4eGpfLOCwuZCbHpq\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
+        ,\n  \"created\": 1622197232,\n  \"currency\": \"eur\",\n  \"customer\": \"\
+        cus_JZBAVjkG6J4uw2\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
         mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
         \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
         : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
         \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
-        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"WXNWNGBR4FQMBW7I\"\
-        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
+        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"CP9SMGRXKVJLXASU\"\
+        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
         \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
         \  \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n \
         \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
@@ -1254,15 +1449,15 @@ interactions:
         : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
         \  \"sepa_debit\": {\n    \"last4\": \"2606\",\n    \"bank_code\": \"20041\"\
         ,\n    \"branch_code\": \"01005\",\n    \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
-        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"WXNWNGBR4FQMBW7I\"\
-        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
+        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"CP9SMGRXKVJLXASU\"\
+        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
         \n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\",\n\
         \  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['1581']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:42 GMT']
+      Date: ['Fri, 28 May 2021 10:20:34 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1272,25 +1467,25 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_yGBptg1vwOzTBg]
+      request-id: [req_YeHKJpeQ5DeW15]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/sources/src_1GVfmaFk4eGpfLOCvkI01RbI
+    uri: https://api.stripe.com/v1/sources/src_1Iw2nsFk4eGpfLOCwuZCbHpq
   response:
-    body: {string: "{\n  \"id\": \"src_1GVfmaFk4eGpfLOCvkI01RbI\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
-        ,\n  \"created\": 1586359540,\n  \"currency\": \"eur\",\n  \"customer\": \"\
-        cus_H3nNLyErBliltd\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
+    body: {string: "{\n  \"id\": \"src_1Iw2nsFk4eGpfLOCwuZCbHpq\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
+        ,\n  \"created\": 1622197232,\n  \"currency\": \"eur\",\n  \"customer\": \"\
+        cus_JZBAVjkG6J4uw2\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
         mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
         \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
         : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
         \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
-        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"WXNWNGBR4FQMBW7I\"\
-        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
+        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"CP9SMGRXKVJLXASU\"\
+        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
         \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
         \  \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n \
         \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
@@ -1299,15 +1494,15 @@ interactions:
         : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
         \  \"sepa_debit\": {\n    \"last4\": \"2606\",\n    \"bank_code\": \"20041\"\
         ,\n    \"branch_code\": \"01005\",\n    \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
-        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"WXNWNGBR4FQMBW7I\"\
-        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
+        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"CP9SMGRXKVJLXASU\"\
+        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
         \n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\",\n\
         \  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['1581']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:43 GMT']
+      Date: ['Fri, 28 May 2021 10:20:35 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1317,53 +1512,99 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_olknvMM6mjLVFx]
+      request-id: [req_80qajw1RxwbrnL]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/charges/py_1GVfmbFk4eGpfLOCP2IRMNTW
-  response:
-    body: {string: "{\n  \"id\": \"py_1GVfmbFk4eGpfLOCP2IRMNTW\",\n  \"object\": \"\
-        charge\",\n  \"amount\": 10000,\n  \"amount_refunded\": 0,\n  \"application\"\
-        : null,\n  \"application_fee\": null,\n  \"application_fee_amount\": null,\n\
-        \  \"balance_transaction\": \"txn_1GVfmeFk4eGpfLOCSRxPz3OB\",\n  \"billing_details\"\
-        : {\n    \"address\": {\n      \"city\": null,\n      \"country\": \"FR\"\
-        ,\n      \"line1\": null,\n      \"line2\": null,\n      \"postal_code\":\
-        \ null,\n      \"state\": null\n    },\n    \"email\": \"donor@example.com\"\
-        ,\n    \"name\": \"Jane Doe\",\n    \"phone\": null\n  },\n  \"calculated_statement_descriptor\"\
-        : null,\n  \"captured\": true,\n  \"created\": 1586359541,\n  \"currency\"\
-        : \"eur\",\n  \"customer\": \"cus_H3nNLyErBliltd\",\n  \"description\": null,\n\
-        \  \"destination\": null,\n  \"dispute\": null,\n  \"disputed\": false,\n\
-        \  \"failure_code\": null,\n  \"failure_message\": null,\n  \"fraud_details\"\
-        : {\n  },\n  \"invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n\
-        \    \"payin_id\": \"1440\"\n  },\n  \"on_behalf_of\": null,\n  \"order\"\
-        : null,\n  \"outcome\": {\n    \"network_status\": \"approved_by_network\"\
-        ,\n    \"reason\": null,\n    \"risk_level\": \"not_assessed\",\n    \"seller_message\"\
-        : \"Payment complete.\",\n    \"type\": \"authorized\"\n  },\n  \"paid\":\
-        \ true,\n  \"payment_intent\": null,\n  \"payment_method\": \"src_1GVfmaFk4eGpfLOCvkI01RbI\"\
+    uri: https://api.stripe.com/v1/sources/src_1Iw2nsFk4eGpfLOCwuZCbHpq
+  response:
+    body: {string: "{\n  \"id\": \"src_1Iw2nsFk4eGpfLOCwuZCbHpq\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
+        ,\n  \"created\": 1622197232,\n  \"currency\": \"eur\",\n  \"customer\": \"\
+        cus_JZBAVjkG6J4uw2\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
+        mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
+        \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
+        : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
+        \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
+        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"CP9SMGRXKVJLXASU\"\
+        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
+        \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
+        \  \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n \
+        \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
+        \    },\n    \"email\": \"donor@example.com\",\n    \"name\": \"Jane Doe\"\
+        ,\n    \"phone\": null,\n    \"verified_address\": null,\n    \"verified_email\"\
+        : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
+        \  \"sepa_debit\": {\n    \"last4\": \"2606\",\n    \"bank_code\": \"20041\"\
+        ,\n    \"branch_code\": \"01005\",\n    \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
+        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"CP9SMGRXKVJLXASU\"\
+        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
+        \n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\",\n\
+        \  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\n}\n"}
+    headers:
+      Connection: [keep-alive]
+      Content-Length: ['1581']
+      Content-Type: [application/json]
+      Date: ['Fri, 28 May 2021 10:20:35 GMT']
+      Server: [nginx]
+      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
+      access-control-allow-credentials: ['true']
+      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
+      access-control-allow-origin: ['*']
+      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
+          X-Stripe-Privileged-Session-Required']
+      access-control-max-age: ['300']
+      cache-control: ['no-cache, no-store']
+      request-id: [req_APlRbaiGfnbOwW]
+      stripe-version: ['2019-08-14']
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers: {}
+    method: GET
+    uri: https://api.stripe.com/v1/charges/py_1Iw2ntFk4eGpfLOCUBckNDwv
+  response:
+    body: {string: "{\n  \"id\": \"py_1Iw2ntFk4eGpfLOCUBckNDwv\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 10000,\n  \"amount_captured\": 10000,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": null,\n  \"application_fee\": null,\n  \"application_fee_amount\"\
+        : null,\n  \"balance_transaction\": \"txn_1Iw2nvFk4eGpfLOC6fBPDWqx\",\n  \"\
+        billing_details\": {\n    \"address\": {\n      \"city\": null,\n      \"\
+        country\": \"FR\",\n      \"line1\": null,\n      \"line2\": null,\n     \
+        \ \"postal_code\": null,\n      \"state\": null\n    },\n    \"email\": \"\
+        donor@example.com\",\n    \"name\": \"Jane Doe\",\n    \"phone\": null\n \
+        \ },\n  \"calculated_statement_descriptor\": null,\n  \"captured\": true,\n\
+        \  \"created\": 1622197233,\n  \"currency\": \"eur\",\n  \"customer\": \"\
+        cus_JZBAVjkG6J4uw2\",\n  \"description\": \"Liberapay\",\n  \"destination\"\
+        : null,\n  \"dispute\": null,\n  \"disputed\": false,\n  \"failure_code\"\
+        : null,\n  \"failure_message\": null,\n  \"fraud_details\": {\n  },\n  \"\
+        invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n    \"payin_id\"\
+        : \"2140\"\n  },\n  \"on_behalf_of\": null,\n  \"order\": null,\n  \"outcome\"\
+        : {\n    \"network_status\": \"approved_by_network\",\n    \"reason\": null,\n\
+        \    \"risk_level\": \"not_assessed\",\n    \"seller_message\": \"Payment\
+        \ complete.\",\n    \"type\": \"authorized\"\n  },\n  \"paid\": true,\n  \"\
+        payment_intent\": null,\n  \"payment_method\": \"src_1Iw2nsFk4eGpfLOCwuZCbHpq\"\
         ,\n  \"payment_method_details\": {\n    \"sepa_debit\": {\n      \"bank_code\"\
         : \"20041\",\n      \"branch_code\": \"01005\",\n      \"country\": \"FR\"\
         ,\n      \"fingerprint\": \"bevtMDy4Cud4ZswV\",\n      \"last4\": \"2606\"\
         ,\n      \"mandate\": null\n    },\n    \"type\": \"sepa_debit\"\n  },\n \
         \ \"receipt_email\": null,\n  \"receipt_number\": null,\n  \"receipt_url\"\
-        : \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/py_1GVfmbFk4eGpfLOCP2IRMNTW/rcpt_H3nN1YEftC6HNZVwHHhVjg13Mk6VAQ4\"\
+        : \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/py_1Iw2ntFk4eGpfLOCUBckNDwv/rcpt_JZBATzfU8b9iCpVnVcN1NPNZCZ1PGxK\"\
         ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
         \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
-        \ 0,\n    \"url\": \"/v1/charges/py_1GVfmbFk4eGpfLOCP2IRMNTW/refunds\"\n \
+        \ 0,\n    \"url\": \"/v1/charges/py_1Iw2ntFk4eGpfLOCUBckNDwv/refunds\"\n \
         \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
-        id\": \"src_1GVfmaFk4eGpfLOCvkI01RbI\",\n    \"object\": \"source\",\n   \
-        \ \"amount\": null,\n    \"client_secret\": \"src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
-        ,\n    \"created\": 1586359541,\n    \"currency\": \"eur\",\n    \"customer\"\
-        : \"cus_H3nNLyErBliltd\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
+        id\": \"src_1Iw2nsFk4eGpfLOCwuZCbHpq\",\n    \"object\": \"source\",\n   \
+        \ \"amount\": null,\n    \"client_secret\": \"src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
+        ,\n    \"created\": 1622197233,\n    \"currency\": \"eur\",\n    \"customer\"\
+        : \"cus_JZBAVjkG6J4uw2\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
         \    \"mandate\": {\n      \"acceptance\": {\n        \"date\": null,\n  \
         \      \"ip\": null,\n        \"offline\": null,\n        \"online\": null,\n\
         \        \"status\": \"pending\",\n        \"type\": null,\n        \"user_agent\"\
         : null\n      },\n      \"amount\": null,\n      \"currency\": null,\n   \
         \   \"interval\": \"variable\",\n      \"notification_method\": \"none\",\n\
-        \      \"reference\": \"WXNWNGBR4FQMBW7I\",\n      \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
+        \      \"reference\": \"CP9SMGRXKVJLXASU\",\n      \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
         \n    },\n    \"metadata\": {\n    },\n    \"owner\": {\n      \"address\"\
         : {\n        \"city\": null,\n        \"country\": \"FR\",\n        \"line1\"\
         : null,\n        \"line2\": null,\n        \"postal_code\": null,\n      \
@@ -1373,18 +1614,18 @@ interactions:
         \      \"verified_phone\": null\n    },\n    \"sepa_debit\": {\n      \"last4\"\
         : \"2606\",\n      \"bank_code\": \"20041\",\n      \"branch_code\": \"01005\"\
         ,\n      \"fingerprint\": \"bevtMDy4Cud4ZswV\",\n      \"country\": \"FR\"\
-        ,\n      \"mandate_reference\": \"WXNWNGBR4FQMBW7I\",\n      \"mandate_url\"\
-        : \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
+        ,\n      \"mandate_reference\": \"CP9SMGRXKVJLXASU\",\n      \"mandate_url\"\
+        : \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
         \n    },\n    \"statement_descriptor\": null,\n    \"status\": \"chargeable\"\
         ,\n    \"type\": \"sepa_debit\",\n    \"usage\": \"reusable\"\n  },\n  \"\
-        source_transfer\": null,\n  \"statement_descriptor\": \"Liberapay 1440\",\n\
+        source_transfer\": null,\n  \"statement_descriptor\": \"Liberapay 2140\",\n\
         \  \"statement_descriptor_suffix\": null,\n  \"status\": \"succeeded\",\n\
         \  \"transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['3793']
+      Content-Length: ['3828']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:35:16 GMT']
+      Date: ['Fri, 28 May 2021 10:20:35 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1394,29 +1635,29 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_7uiW7GAPTRqwwc]
+      request-id: [req_o4dpBCHQWvOnHp]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/balance_transactions/txn_1GVfmeFk4eGpfLOCSRxPz3OB
-  response:
-    body: {string: "{\n  \"id\": \"txn_1GVfmeFk4eGpfLOCSRxPz3OB\",\n  \"object\":\
-        \ \"balance_transaction\",\n  \"amount\": 10000,\n  \"available_on\": 1586908800,\n\
-        \  \"created\": 1586359543,\n  \"currency\": \"eur\",\n  \"description\":\
-        \ null,\n  \"exchange_rate\": null,\n  \"fee\": 105,\n  \"fee_details\": [\n\
-        \    {\n      \"amount\": 105,\n      \"application\": null,\n      \"currency\"\
-        : \"eur\",\n      \"description\": \"Stripe processing fees\",\n      \"type\"\
-        : \"stripe_fee\"\n    }\n  ],\n  \"net\": 9895,\n  \"reporting_category\"\
-        : \"charge\",\n  \"source\": \"py_1GVfmbFk4eGpfLOCP2IRMNTW\",\n  \"status\"\
+    uri: https://api.stripe.com/v1/balance_transactions/txn_1Iw2nvFk4eGpfLOC6fBPDWqx
+  response:
+    body: {string: "{\n  \"id\": \"txn_1Iw2nvFk4eGpfLOC6fBPDWqx\",\n  \"object\":\
+        \ \"balance_transaction\",\n  \"amount\": 10000,\n  \"available_on\": 1622592000,\n\
+        \  \"created\": 1622197234,\n  \"currency\": \"eur\",\n  \"description\":\
+        \ \"Liberapay\",\n  \"exchange_rate\": null,\n  \"fee\": 105,\n  \"fee_details\"\
+        : [\n    {\n      \"amount\": 105,\n      \"application\": null,\n      \"\
+        currency\": \"eur\",\n      \"description\": \"Stripe processing fees\",\n\
+        \      \"type\": \"stripe_fee\"\n    }\n  ],\n  \"net\": 9895,\n  \"reporting_category\"\
+        : \"charge\",\n  \"source\": \"py_1Iw2ntFk4eGpfLOCUBckNDwv\",\n  \"status\"\
         : \"pending\",\n  \"type\": \"payment\"\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['554']
+      Content-Length: ['561']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:35:17 GMT']
+      Date: ['Fri, 28 May 2021 10:20:36 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1426,31 +1667,32 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_QBNB8pjWxCze92]
+      request-id: [req_coO0n51cUGFSEv]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=4843&currency=EUR&destination=acct_1GVfmPLo8l3IWFWX&metadata[payin_transfer_id]=1460&source_transaction=ch_1GVfmjFk4eGpfLOCu4klNWdH
+    body: amount=4948&currency=EUR&description=anonymous+donation+for+creator_1+via+Liberapay&destination=acct_1Iw2ne2H54hWzJBk&metadata[payin_transfer_id]=2140&source_transaction=py_1Iw2ntFk4eGpfLOCUBckNDwv
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/transfers
   response:
-    body: {string: "{\n  \"id\": \"tr_1GVfmkFk4eGpfLOC05PtYAjs\",\n  \"object\": \"\
-        transfer\",\n  \"amount\": 4843,\n  \"amount_reversed\": 0,\n  \"balance_transaction\"\
-        : \"txn_1GVfmkFk4eGpfLOC2pm6fmF5\",\n  \"created\": 1586359550,\n  \"currency\"\
-        : \"eur\",\n  \"description\": null,\n  \"destination\": \"acct_1GVfmPLo8l3IWFWX\"\
-        ,\n  \"destination_payment\": \"py_1GVfmkLo8l3IWFWXsM3gWXAf\",\n  \"livemode\"\
-        : false,\n  \"metadata\": {\n    \"payin_transfer_id\": \"1460\"\n  },\n \
-        \ \"reversals\": {\n    \"object\": \"list\",\n    \"data\": [\n\n    ],\n\
-        \    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\": \"/v1/transfers/tr_1GVfmkFk4eGpfLOC05PtYAjs/reversals\"\
-        \n  },\n  \"reversed\": false,\n  \"source_transaction\": \"ch_1GVfmjFk4eGpfLOCu4klNWdH\"\
-        ,\n  \"source_type\": \"card\",\n  \"transfer_group\": \"group_pi_1GVfmjFk4eGpfLOCMXnbsLcn\"\
+    body: {string: "{\n  \"id\": \"tr_1Iw2nwFk4eGpfLOCHLiffIdF\",\n  \"object\": \"\
+        transfer\",\n  \"amount\": 4948,\n  \"amount_reversed\": 0,\n  \"balance_transaction\"\
+        : \"txn_1Iw2nwFk4eGpfLOC5bCn1j4j\",\n  \"created\": 1622197236,\n  \"currency\"\
+        : \"eur\",\n  \"description\": \"anonymous donation for creator_1 via Liberapay\"\
+        ,\n  \"destination\": \"acct_1Iw2ne2H54hWzJBk\",\n  \"destination_payment\"\
+        : \"py_1Iw2nw2H54hWzJBkxWnXZ3sT\",\n  \"livemode\": false,\n  \"metadata\"\
+        : {\n    \"payin_transfer_id\": \"2140\"\n  },\n  \"reversals\": {\n    \"\
+        object\": \"list\",\n    \"data\": [\n\n    ],\n    \"has_more\": false,\n\
+        \    \"total_count\": 0,\n    \"url\": \"/v1/transfers/tr_1Iw2nwFk4eGpfLOCHLiffIdF/reversals\"\
+        \n  },\n  \"reversed\": false,\n  \"source_transaction\": \"py_1Iw2ntFk4eGpfLOCUBckNDwv\"\
+        ,\n  \"source_type\": \"card\",\n  \"transfer_group\": \"group_py_1Iw2ntFk4eGpfLOCUBckNDwv\"\
         \n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['740']
+      Content-Length: ['784']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:35:17 GMT']
+      Date: ['Fri, 28 May 2021 10:20:37 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1460,10 +1702,9 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [payin_transfer_1460]
-      idempotent-replayed: ['true']
-      original-request: [req_bPtYD8REEbhDSB]
-      request-id: [req_HzguhbWb1NvxcY]
+      idempotency-key: [payin_transfer_2140]
+      original-request: [req_ZVy9asIaf2oXDo]
+      request-id: [req_ZVy9asIaf2oXDo]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
@@ -1471,26 +1712,42 @@ interactions:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/payment_methods/pm_card_visa
+    uri: https://api.stripe.com/v1/charges/py_1Iw2nw2H54hWzJBkxWnXZ3sT
   response:
-    body: {string: "{\n  \"id\": \"pm_1GVfmeFk4eGpfLOCk4H1U8Gz\",\n  \"object\": \"\
-        payment_method\",\n  \"billing_details\": {\n    \"address\": {\n      \"\
-        city\": null,\n      \"country\": null,\n      \"line1\": null,\n      \"\
-        line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n    },\n\
-        \    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n  },\n  \"\
-        card\": {\n    \"brand\": \"visa\",\n    \"checks\": {\n      \"address_line1_check\"\
-        : null,\n      \"address_postal_code_check\": null,\n      \"cvc_check\":\
-        \ null\n    },\n    \"country\": \"US\",\n    \"exp_month\": 4,\n    \"exp_year\"\
-        : 2021,\n    \"fingerprint\": \"k6ycurEAdsI1uF3b\",\n    \"funding\": \"credit\"\
-        ,\n    \"generated_from\": null,\n    \"last4\": \"4242\",\n    \"three_d_secure_usage\"\
-        : {\n      \"supported\": true\n    },\n    \"wallet\": null\n  },\n  \"created\"\
-        : 1586359544,\n  \"customer\": null,\n  \"livemode\": false,\n  \"metadata\"\
-        : {\n  },\n  \"type\": \"card\"\n}\n"}
+    body: {string: "{\n  \"id\": \"py_1Iw2nw2H54hWzJBkxWnXZ3sT\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 4948,\n  \"amount_captured\": 4948,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": \"ca_DEYxiYHBHZtGj32l9uczcsunbQOcRq8H\",\n  \"application_fee\"\
+        : null,\n  \"application_fee_amount\": null,\n  \"balance_transaction\": \"\
+        txn_1Iw2nw2H54hWzJBkz5KEyaa8\",\n  \"billing_details\": {\n    \"address\"\
+        : {\n      \"city\": null,\n      \"country\": null,\n      \"line1\": null,\n\
+        \      \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
+        \    },\n    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n\
+        \  },\n  \"calculated_statement_descriptor\": null,\n  \"captured\": true,\n\
+        \  \"created\": 1622197236,\n  \"currency\": \"eur\",\n  \"customer\": null,\n\
+        \  \"description\": null,\n  \"destination\": null,\n  \"dispute\": null,\n\
+        \  \"disputed\": false,\n  \"failure_code\": null,\n  \"failure_message\"\
+        : null,\n  \"fraud_details\": {\n  },\n  \"invoice\": null,\n  \"livemode\"\
+        : false,\n  \"metadata\": {\n  },\n  \"on_behalf_of\": null,\n  \"order\"\
+        : null,\n  \"outcome\": null,\n  \"paid\": true,\n  \"payment_intent\": null,\n\
+        \  \"payment_method\": null,\n  \"payment_method_details\": {\n    \"stripe_account\"\
+        : {\n    },\n    \"type\": \"stripe_account\"\n  },\n  \"receipt_email\":\
+        \ null,\n  \"receipt_number\": null,\n  \"receipt_url\": \"https://pay.stripe.com/receipts/acct_1Iw2ne2H54hWzJBk/py_1Iw2nw2H54hWzJBkxWnXZ3sT/rcpt_JZBALcqOb2yJ2HS6DirSs5l1mM4pdVl\"\
+        ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
+        \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
+        \ 0,\n    \"url\": \"/v1/charges/py_1Iw2nw2H54hWzJBkxWnXZ3sT/refunds\"\n \
+        \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
+        id\": \"acct_1ChyayFk4eGpfLOC\",\n    \"object\": \"account\",\n    \"application_icon\"\
+        : \"https://files.stripe.com/links/fl_live_pcO27i8SSea27yZPmUHDPhiF\",\n \
+        \   \"application_logo\": \"https://s3.amazonaws.com/stripe-uploads/acct_1ChyayFk4eGpfLOCapplication-logo-icon_v2_yellow_r.100.png\"\
+        ,\n    \"application_name\": \"Liberapay\",\n    \"application_url\": \"https://liberapay.com/\"\
+        \n  },\n  \"source_transfer\": \"tr_1Iw2nwFk4eGpfLOCHLiffIdF\",\n  \"statement_descriptor\"\
+        : null,\n  \"statement_descriptor_suffix\": null,\n  \"status\": \"succeeded\"\
+        ,\n  \"transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['833']
+      Content-Length: ['2125']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:44 GMT']
+      Date: ['Fri, 28 May 2021 10:20:37 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1500,38 +1757,52 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_aum7AznW4Lm19b]
+      request-id: [req_l0PoJmAFL18kcN]
+      stripe-account: [acct_1Iw2ne2H54hWzJBk]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: email=donor%40example.com&payment_method=pm_1GVfmeFk4eGpfLOCk4H1U8Gz
+    body: description=anonymous+donation+for+creator_1+via+Liberapay&metadata[liberapay_transfer_id]=2140
     headers: {}
     method: POST
-    uri: https://api.stripe.com/v1/customers
+    uri: https://api.stripe.com/v1/charges/py_1Iw2nw2H54hWzJBkxWnXZ3sT
   response:
-    body: {string: "{\n  \"id\": \"cus_H3nNgr0DHMIw0r\",\n  \"object\": \"customer\"\
-        ,\n  \"account_balance\": 0,\n  \"address\": null,\n  \"balance\": 0,\n  \"\
-        created\": 1586359544,\n  \"currency\": null,\n  \"default_source\": null,\n\
-        \  \"delinquent\": false,\n  \"description\": null,\n  \"discount\": null,\n\
-        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"E4C6D853\",\n\
-        \  \"invoice_settings\": {\n    \"custom_fields\": null,\n    \"default_payment_method\"\
-        : null,\n    \"footer\": null\n  },\n  \"livemode\": false,\n  \"metadata\"\
-        : {\n  },\n  \"name\": null,\n  \"next_invoice_sequence\": 1,\n  \"phone\"\
-        : null,\n  \"preferred_locales\": [\n\n  ],\n  \"shipping\": null,\n  \"sources\"\
-        : {\n    \"object\": \"list\",\n    \"data\": [\n\n    ],\n    \"has_more\"\
-        : false,\n    \"total_count\": 0,\n    \"url\": \"/v1/customers/cus_H3nNgr0DHMIw0r/sources\"\
-        \n  },\n  \"subscriptions\": {\n    \"object\": \"list\",\n    \"data\": [\n\
-        \n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\":\
-        \ \"/v1/customers/cus_H3nNgr0DHMIw0r/subscriptions\"\n  },\n  \"tax_exempt\"\
-        : \"none\",\n  \"tax_ids\": {\n    \"object\": \"list\",\n    \"data\": [\n\
-        \n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\":\
-        \ \"/v1/customers/cus_H3nNgr0DHMIw0r/tax_ids\"\n  },\n  \"tax_info\": null,\n\
-        \  \"tax_info_verification\": null\n}\n"}
+    body: {string: "{\n  \"id\": \"py_1Iw2nw2H54hWzJBkxWnXZ3sT\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 4948,\n  \"amount_captured\": 4948,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": \"ca_DEYxiYHBHZtGj32l9uczcsunbQOcRq8H\",\n  \"application_fee\"\
+        : null,\n  \"application_fee_amount\": null,\n  \"balance_transaction\": \"\
+        txn_1Iw2nw2H54hWzJBkz5KEyaa8\",\n  \"billing_details\": {\n    \"address\"\
+        : {\n      \"city\": null,\n      \"country\": null,\n      \"line1\": null,\n\
+        \      \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
+        \    },\n    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n\
+        \  },\n  \"calculated_statement_descriptor\": null,\n  \"captured\": true,\n\
+        \  \"created\": 1622197236,\n  \"currency\": \"eur\",\n  \"customer\": null,\n\
+        \  \"description\": \"anonymous donation for creator_1 via Liberapay\",\n\
+        \  \"destination\": null,\n  \"dispute\": null,\n  \"disputed\": false,\n\
+        \  \"failure_code\": null,\n  \"failure_message\": null,\n  \"fraud_details\"\
+        : {\n  },\n  \"invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n\
+        \    \"liberapay_transfer_id\": \"2140\"\n  },\n  \"on_behalf_of\": null,\n\
+        \  \"order\": null,\n  \"outcome\": null,\n  \"paid\": true,\n  \"payment_intent\"\
+        : null,\n  \"payment_method\": null,\n  \"payment_method_details\": {\n  \
+        \  \"stripe_account\": {\n    },\n    \"type\": \"stripe_account\"\n  },\n\
+        \  \"receipt_email\": null,\n  \"receipt_number\": null,\n  \"receipt_url\"\
+        : \"https://pay.stripe.com/receipts/acct_1Iw2ne2H54hWzJBk/py_1Iw2nw2H54hWzJBkxWnXZ3sT/rcpt_JZBALcqOb2yJ2HS6DirSs5l1mM4pdVl\"\
+        ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
+        \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
+        \ 0,\n    \"url\": \"/v1/charges/py_1Iw2nw2H54hWzJBkxWnXZ3sT/refunds\"\n \
+        \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
+        id\": \"acct_1ChyayFk4eGpfLOC\",\n    \"object\": \"account\",\n    \"application_icon\"\
+        : \"https://files.stripe.com/links/fl_live_pcO27i8SSea27yZPmUHDPhiF\",\n \
+        \   \"application_logo\": \"https://s3.amazonaws.com/stripe-uploads/acct_1ChyayFk4eGpfLOCapplication-logo-icon_v2_yellow_r.100.png\"\
+        ,\n    \"application_name\": \"Liberapay\",\n    \"application_url\": \"https://liberapay.com/\"\
+        \n  },\n  \"source_transfer\": \"tr_1Iw2nwFk4eGpfLOCHLiffIdF\",\n  \"statement_descriptor\"\
+        : null,\n  \"statement_descriptor_suffix\": null,\n  \"status\": \"succeeded\"\
+        ,\n  \"transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['1162']
+      Content-Length: ['2205']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:45 GMT']
+      Date: ['Fri, 28 May 2021 10:20:38 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1541,84 +1812,213 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [create_customer_for_participant_1450_with_pm_1GVfmeFk4eGpfLOCk4H1U8Gz]
-      original-request: [req_QVv4qqzUtYcJo8]
-      request-id: [req_QVv4qqzUtYcJo8]
+      idempotency-key: [ba49e890-de56-45ed-93d8-19cb19b0cbd3]
+      original-request: [req_aR3iphVENduNWk]
+      request-id: [req_aR3iphVENduNWk]
+      stripe-account: [acct_1Iw2ne2H54hWzJBk]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=2500&confirm=True&currency=eur&customer=cus_H3nNgr0DHMIw0r&metadata[payin_id]=1450&payment_method=pm_1GVfmeFk4eGpfLOCk4H1U8Gz&return_url=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2F1450&statement_descriptor=Liberapay+1450
+    body: null
     headers: {}
-    method: POST
-    uri: https://api.stripe.com/v1/payment_intents
+    method: GET
+    uri: https://api.stripe.com/v1/sources/src_1Iw2nsFk4eGpfLOCwuZCbHpq
   response:
-    body: {string: "{\n  \"id\": \"pi_1GVfmfFk4eGpfLOCtZS2iGEN\",\n  \"object\": \"\
-        payment_intent\",\n  \"amount\": 2500,\n  \"amount_capturable\": 0,\n  \"\
-        amount_received\": 2500,\n  \"application\": null,\n  \"application_fee_amount\"\
+    body: {string: "{\n  \"id\": \"src_1Iw2nsFk4eGpfLOCwuZCbHpq\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
+        ,\n  \"created\": 1622197232,\n  \"currency\": \"eur\",\n  \"customer\": \"\
+        cus_JZBAVjkG6J4uw2\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
+        mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
+        \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
+        : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
+        \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
+        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"CP9SMGRXKVJLXASU\"\
+        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
+        \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
+        \  \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n \
+        \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
+        \    },\n    \"email\": \"donor@example.com\",\n    \"name\": \"Jane Doe\"\
+        ,\n    \"phone\": null,\n    \"verified_address\": null,\n    \"verified_email\"\
+        : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
+        \  \"sepa_debit\": {\n    \"last4\": \"2606\",\n    \"bank_code\": \"20041\"\
+        ,\n    \"branch_code\": \"01005\",\n    \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
+        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"CP9SMGRXKVJLXASU\"\
+        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2nsFk4eGpfLOCwuZCbHpq/src_client_secret_P6bF4W4rJEmSyEDGvw6AgrB3\"\
+        \n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\",\n\
+        \  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\n}\n"}
+    headers:
+      Connection: [keep-alive]
+      Content-Length: ['1581']
+      Content-Type: [application/json]
+      Date: ['Fri, 28 May 2021 10:20:38 GMT']
+      Server: [nginx]
+      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
+      access-control-allow-credentials: ['true']
+      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
+      access-control-allow-origin: ['*']
+      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
+          X-Stripe-Privileged-Session-Required']
+      access-control-max-age: ['300']
+      cache-control: ['no-cache, no-store']
+      request-id: [req_mvCAOImoO7AnOx]
+      stripe-version: ['2019-08-14']
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers: {}
+    method: GET
+    uri: https://api.stripe.com/v1/payment_methods/pm_card_visa
+  response:
+    body: {string: "{\n  \"id\": \"pm_1Iw2nzFk4eGpfLOCg2lLNVsY\",\n  \"object\": \"\
+        payment_method\",\n  \"billing_details\": {\n    \"address\": {\n      \"\
+        city\": null,\n      \"country\": null,\n      \"line1\": null,\n      \"\
+        line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n    },\n\
+        \    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n  },\n  \"\
+        card\": {\n    \"brand\": \"visa\",\n    \"checks\": {\n      \"address_line1_check\"\
+        : null,\n      \"address_postal_code_check\": null,\n      \"cvc_check\":\
+        \ null\n    },\n    \"country\": \"US\",\n    \"exp_month\": 5,\n    \"exp_year\"\
+        : 2022,\n    \"fingerprint\": \"k6ycurEAdsI1uF3b\",\n    \"funding\": \"credit\"\
+        ,\n    \"generated_from\": null,\n    \"last4\": \"4242\",\n    \"networks\"\
+        : {\n      \"available\": [\n        \"visa\"\n      ],\n      \"preferred\"\
+        : null\n    },\n    \"three_d_secure_usage\": {\n      \"supported\": true\n\
+        \    },\n    \"wallet\": null\n  },\n  \"created\": 1622197239,\n  \"customer\"\
+        : null,\n  \"livemode\": false,\n  \"metadata\": {\n  },\n  \"type\": \"card\"\
+        \n}\n"}
+    headers:
+      Connection: [keep-alive]
+      Content-Length: ['927']
+      Content-Type: [application/json]
+      Date: ['Fri, 28 May 2021 10:20:39 GMT']
+      Server: [nginx]
+      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
+      access-control-allow-credentials: ['true']
+      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
+      access-control-allow-origin: ['*']
+      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
+          X-Stripe-Privileged-Session-Required']
+      access-control-max-age: ['300']
+      cache-control: ['no-cache, no-store']
+      request-id: [req_NJTUt3ZLNX8TUO]
+      stripe-version: ['2019-08-14']
+    status: {code: 200, message: OK}
+- request:
+    body: email=donor%40example.com&payment_method=pm_1Iw2nzFk4eGpfLOCg2lLNVsY
+    headers: {}
+    method: POST
+    uri: https://api.stripe.com/v1/customers
+  response:
+    body: {string: "{\n  \"id\": \"cus_JZBArUxadvyus1\",\n  \"object\": \"customer\"\
+        ,\n  \"account_balance\": 0,\n  \"address\": null,\n  \"balance\": 0,\n  \"\
+        created\": 1622197239,\n  \"currency\": null,\n  \"default_source\": null,\n\
+        \  \"delinquent\": false,\n  \"description\": null,\n  \"discount\": null,\n\
+        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"933B6433\",\n\
+        \  \"invoice_settings\": {\n    \"custom_fields\": null,\n    \"default_payment_method\"\
+        : null,\n    \"footer\": null\n  },\n  \"livemode\": false,\n  \"metadata\"\
+        : {\n  },\n  \"name\": null,\n  \"next_invoice_sequence\": 1,\n  \"phone\"\
+        : null,\n  \"preferred_locales\": [\n\n  ],\n  \"shipping\": null,\n  \"sources\"\
+        : {\n    \"object\": \"list\",\n    \"data\": [\n\n    ],\n    \"has_more\"\
+        : false,\n    \"total_count\": 0,\n    \"url\": \"/v1/customers/cus_JZBArUxadvyus1/sources\"\
+        \n  },\n  \"subscriptions\": {\n    \"object\": \"list\",\n    \"data\": [\n\
+        \n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\":\
+        \ \"/v1/customers/cus_JZBArUxadvyus1/subscriptions\"\n  },\n  \"tax_exempt\"\
+        : \"none\",\n  \"tax_ids\": {\n    \"object\": \"list\",\n    \"data\": [\n\
+        \n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\":\
+        \ \"/v1/customers/cus_JZBArUxadvyus1/tax_ids\"\n  },\n  \"tax_info\": null,\n\
+        \  \"tax_info_verification\": null\n}\n"}
+    headers:
+      Connection: [keep-alive]
+      Content-Length: ['1162']
+      Content-Type: [application/json]
+      Date: ['Fri, 28 May 2021 10:20:40 GMT']
+      Server: [nginx]
+      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
+      access-control-allow-credentials: ['true']
+      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
+      access-control-allow-origin: ['*']
+      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
+          X-Stripe-Privileged-Session-Required']
+      access-control-max-age: ['300']
+      cache-control: ['no-cache, no-store']
+      idempotency-key: [create_customer_for_participant_2150_with_pm_1Iw2nzFk4eGpfLOCg2lLNVsY]
+      original-request: [req_A7WDBy4XZWYnOM]
+      request-id: [req_A7WDBy4XZWYnOM]
+      stripe-should-retry: ['false']
+      stripe-version: ['2019-08-14']
+    status: {code: 200, message: OK}
+- request:
+    body: amount=2500&confirm=True&currency=eur&customer=cus_JZBArUxadvyus1&description=Liberapay&metadata[payin_id]=2150&off_session=False&payment_method=pm_1Iw2nzFk4eGpfLOCg2lLNVsY&return_url=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2F2150&setup_future_usage=off_session&statement_descriptor=Liberapay+2150
+    headers: {}
+    method: POST
+    uri: https://api.stripe.com/v1/payment_intents
+  response:
+    body: {string: "{\n  \"id\": \"pi_1Iw2o0Fk4eGpfLOCEqPiBn9P\",\n  \"object\": \"\
+        payment_intent\",\n  \"amount\": 2500,\n  \"amount_capturable\": 0,\n  \"\
+        amount_received\": 2500,\n  \"application\": null,\n  \"application_fee_amount\"\
         : null,\n  \"canceled_at\": null,\n  \"cancellation_reason\": null,\n  \"\
         capture_method\": \"automatic\",\n  \"charges\": {\n    \"object\": \"list\"\
-        ,\n    \"data\": [\n      {\n        \"id\": \"ch_1GVfmfFk4eGpfLOCrmcnnyt1\"\
+        ,\n    \"data\": [\n      {\n        \"id\": \"ch_1Iw2o0Fk4eGpfLOCpQmAeOqA\"\
         ,\n        \"object\": \"charge\",\n        \"amount\": 2500,\n        \"\
-        amount_refunded\": 0,\n        \"application\": null,\n        \"application_fee\"\
-        : null,\n        \"application_fee_amount\": null,\n        \"balance_transaction\"\
-        : \"txn_1GVfmgFk4eGpfLOCPOeaTeB9\",\n        \"billing_details\": {\n    \
-        \      \"address\": {\n            \"city\": null,\n            \"country\"\
-        : null,\n            \"line1\": null,\n            \"line2\": null,\n    \
-        \        \"postal_code\": null,\n            \"state\": null\n          },\n\
-        \          \"email\": null,\n          \"name\": null,\n          \"phone\"\
-        : null\n        },\n        \"calculated_statement_descriptor\": \"LIBERAPAY\
-        \ 1450\",\n        \"captured\": true,\n        \"created\": 1586359545,\n\
-        \        \"currency\": \"eur\",\n        \"customer\": \"cus_H3nNgr0DHMIw0r\"\
-        ,\n        \"description\": null,\n        \"destination\": null,\n      \
-        \  \"dispute\": null,\n        \"disputed\": false,\n        \"failure_code\"\
+        amount_captured\": 2500,\n        \"amount_refunded\": 0,\n        \"application\"\
+        : null,\n        \"application_fee\": null,\n        \"application_fee_amount\"\
+        : null,\n        \"balance_transaction\": \"txn_1Iw2o1Fk4eGpfLOCqufVk9Px\"\
+        ,\n        \"billing_details\": {\n          \"address\": {\n            \"\
+        city\": null,\n            \"country\": null,\n            \"line1\": null,\n\
+        \            \"line2\": null,\n            \"postal_code\": null,\n      \
+        \      \"state\": null\n          },\n          \"email\": null,\n       \
+        \   \"name\": null,\n          \"phone\": null\n        },\n        \"calculated_statement_descriptor\"\
+        : \"LIBERAPAY 2150\",\n        \"captured\": true,\n        \"created\": 1622197240,\n\
+        \        \"currency\": \"eur\",\n        \"customer\": \"cus_JZBArUxadvyus1\"\
+        ,\n        \"description\": \"Liberapay\",\n        \"destination\": null,\n\
+        \        \"dispute\": null,\n        \"disputed\": false,\n        \"failure_code\"\
         : null,\n        \"failure_message\": null,\n        \"fraud_details\": {\n\
         \        },\n        \"invoice\": null,\n        \"livemode\": false,\n  \
-        \      \"metadata\": {\n          \"payin_id\": \"1450\"\n        },\n   \
+        \      \"metadata\": {\n          \"payin_id\": \"2150\"\n        },\n   \
         \     \"on_behalf_of\": null,\n        \"order\": null,\n        \"outcome\"\
         : {\n          \"network_status\": \"approved_by_network\",\n          \"\
         reason\": null,\n          \"risk_level\": \"normal\",\n          \"risk_score\"\
-        : 30,\n          \"seller_message\": \"Payment complete.\",\n          \"\
-        type\": \"authorized\"\n        },\n        \"paid\": true,\n        \"payment_intent\"\
-        : \"pi_1GVfmfFk4eGpfLOCtZS2iGEN\",\n        \"payment_method\": \"pm_1GVfmeFk4eGpfLOCk4H1U8Gz\"\
+        : 3,\n          \"seller_message\": \"Payment complete.\",\n          \"type\"\
+        : \"authorized\"\n        },\n        \"paid\": true,\n        \"payment_intent\"\
+        : \"pi_1Iw2o0Fk4eGpfLOCEqPiBn9P\",\n        \"payment_method\": \"pm_1Iw2nzFk4eGpfLOCg2lLNVsY\"\
         ,\n        \"payment_method_details\": {\n          \"card\": {\n        \
         \    \"brand\": \"visa\",\n            \"checks\": {\n              \"address_line1_check\"\
         : null,\n              \"address_postal_code_check\": null,\n            \
         \  \"cvc_check\": null\n            },\n            \"country\": \"US\",\n\
-        \            \"exp_month\": 4,\n            \"exp_year\": 2021,\n        \
+        \            \"exp_month\": 5,\n            \"exp_year\": 2022,\n        \
         \    \"fingerprint\": \"k6ycurEAdsI1uF3b\",\n            \"funding\": \"credit\"\
         ,\n            \"installments\": null,\n            \"last4\": \"4242\",\n\
         \            \"network\": \"visa\",\n            \"three_d_secure\": null,\n\
         \            \"wallet\": null\n          },\n          \"type\": \"card\"\n\
         \        },\n        \"receipt_email\": null,\n        \"receipt_number\"\
-        : null,\n        \"receipt_url\": \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/ch_1GVfmfFk4eGpfLOCrmcnnyt1/rcpt_H3nNSonAIWxOqLWB3rl1V9rLs04x4qz\"\
+        : null,\n        \"receipt_url\": \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/ch_1Iw2o0Fk4eGpfLOCpQmAeOqA/rcpt_JZBACRfma6T0FmDuEHxNmpsqLXO3RAP\"\
         ,\n        \"refunded\": false,\n        \"refunds\": {\n          \"object\"\
         : \"list\",\n          \"data\": [\n\n          ],\n          \"has_more\"\
-        : false,\n          \"total_count\": 0,\n          \"url\": \"/v1/charges/ch_1GVfmfFk4eGpfLOCrmcnnyt1/refunds\"\
+        : false,\n          \"total_count\": 0,\n          \"url\": \"/v1/charges/ch_1Iw2o0Fk4eGpfLOCpQmAeOqA/refunds\"\
         \n        },\n        \"review\": null,\n        \"shipping\": null,\n   \
         \     \"source\": null,\n        \"source_transfer\": null,\n        \"statement_descriptor\"\
-        : \"Liberapay 1450\",\n        \"statement_descriptor_suffix\": null,\n  \
+        : \"Liberapay 2150\",\n        \"statement_descriptor_suffix\": null,\n  \
         \      \"status\": \"succeeded\",\n        \"transfer_data\": null,\n    \
         \    \"transfer_group\": null\n      }\n    ],\n    \"has_more\": false,\n\
-        \    \"total_count\": 1,\n    \"url\": \"/v1/charges?payment_intent=pi_1GVfmfFk4eGpfLOCtZS2iGEN\"\
-        \n  },\n  \"client_secret\": \"pi_1GVfmfFk4eGpfLOCtZS2iGEN_secret_rseVkr71QsEYMXYz5QMasw0R8\"\
-        ,\n  \"confirmation_method\": \"automatic\",\n  \"created\": 1586359545,\n\
-        \  \"currency\": \"eur\",\n  \"customer\": \"cus_H3nNgr0DHMIw0r\",\n  \"description\"\
-        : null,\n  \"invoice\": null,\n  \"last_payment_error\": null,\n  \"livemode\"\
-        : false,\n  \"metadata\": {\n    \"payin_id\": \"1450\"\n  },\n  \"next_action\"\
-        : null,\n  \"on_behalf_of\": null,\n  \"payment_method\": \"pm_1GVfmeFk4eGpfLOCk4H1U8Gz\"\
-        ,\n  \"payment_method_options\": {\n    \"card\": {\n      \"installments\"\
-        : null,\n      \"request_three_d_secure\": \"automatic\"\n    }\n  },\n  \"\
-        payment_method_types\": [\n    \"card\"\n  ],\n  \"receipt_email\": null,\n\
-        \  \"review\": null,\n  \"setup_future_usage\": null,\n  \"shipping\": null,\n\
-        \  \"source\": null,\n  \"statement_descriptor\": \"Liberapay 1450\",\n  \"\
-        statement_descriptor_suffix\": null,\n  \"status\": \"succeeded\",\n  \"transfer_data\"\
-        : null,\n  \"transfer_group\": null\n}\n"}
+        \    \"total_count\": 1,\n    \"url\": \"/v1/charges?payment_intent=pi_1Iw2o0Fk4eGpfLOCEqPiBn9P\"\
+        \n  },\n  \"client_secret\": \"pi_1Iw2o0Fk4eGpfLOCEqPiBn9P_secret_BCtQrn3GIdBA9FLn5Ezt7yOLO\"\
+        ,\n  \"confirmation_method\": \"automatic\",\n  \"created\": 1622197240,\n\
+        \  \"currency\": \"eur\",\n  \"customer\": \"cus_JZBArUxadvyus1\",\n  \"description\"\
+        : \"Liberapay\",\n  \"invoice\": null,\n  \"last_payment_error\": null,\n\
+        \  \"livemode\": false,\n  \"metadata\": {\n    \"payin_id\": \"2150\"\n \
+        \ },\n  \"next_action\": null,\n  \"on_behalf_of\": null,\n  \"payment_method\"\
+        : \"pm_1Iw2nzFk4eGpfLOCg2lLNVsY\",\n  \"payment_method_options\": {\n    \"\
+        card\": {\n      \"installments\": null,\n      \"network\": null,\n     \
+        \ \"request_three_d_secure\": \"automatic\"\n    }\n  },\n  \"payment_method_types\"\
+        : [\n    \"card\"\n  ],\n  \"receipt_email\": null,\n  \"review\": null,\n\
+        \  \"setup_future_usage\": \"off_session\",\n  \"shipping\": null,\n  \"source\"\
+        : null,\n  \"statement_descriptor\": \"Liberapay 2150\",\n  \"statement_descriptor_suffix\"\
+        : null,\n  \"status\": \"succeeded\",\n  \"transfer_data\": null,\n  \"transfer_group\"\
+        : null\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['4288']
+      Content-Length: ['4366']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:46 GMT']
+      Date: ['Fri, 28 May 2021 10:20:41 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1628,9 +2028,9 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [payin_intent_1450]
-      original-request: [req_yt1iQi6uvSHqHo]
-      request-id: [req_yt1iQi6uvSHqHo]
+      idempotency-key: [payin_intent_2150]
+      original-request: [req_IaSmYPFQKXfHe2]
+      request-id: [req_IaSmYPFQKXfHe2]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
@@ -1638,22 +2038,22 @@ interactions:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/balance_transactions/txn_1GVfmgFk4eGpfLOCPOeaTeB9
-  response:
-    body: {string: "{\n  \"id\": \"txn_1GVfmgFk4eGpfLOCPOeaTeB9\",\n  \"object\":\
-        \ \"balance_transaction\",\n  \"amount\": 2500,\n  \"available_on\": 1586908800,\n\
-        \  \"created\": 1586359545,\n  \"currency\": \"eur\",\n  \"description\":\
-        \ null,\n  \"exchange_rate\": null,\n  \"fee\": 98,\n  \"fee_details\": [\n\
-        \    {\n      \"amount\": 98,\n      \"application\": null,\n      \"currency\"\
-        : \"eur\",\n      \"description\": \"Stripe processing fees\",\n      \"type\"\
-        : \"stripe_fee\"\n    }\n  ],\n  \"net\": 2402,\n  \"reporting_category\"\
-        : \"charge\",\n  \"source\": \"ch_1GVfmfFk4eGpfLOCrmcnnyt1\",\n  \"status\"\
+    uri: https://api.stripe.com/v1/balance_transactions/txn_1Iw2o1Fk4eGpfLOCqufVk9Px
+  response:
+    body: {string: "{\n  \"id\": \"txn_1Iw2o1Fk4eGpfLOCqufVk9Px\",\n  \"object\":\
+        \ \"balance_transaction\",\n  \"amount\": 2500,\n  \"available_on\": 1622592000,\n\
+        \  \"created\": 1622197240,\n  \"currency\": \"eur\",\n  \"description\":\
+        \ \"Liberapay\",\n  \"exchange_rate\": null,\n  \"fee\": 98,\n  \"fee_details\"\
+        : [\n    {\n      \"amount\": 98,\n      \"application\": null,\n      \"\
+        currency\": \"eur\",\n      \"description\": \"Stripe processing fees\",\n\
+        \      \"type\": \"stripe_fee\"\n    }\n  ],\n  \"net\": 2402,\n  \"reporting_category\"\
+        : \"charge\",\n  \"source\": \"ch_1Iw2o0Fk4eGpfLOCpQmAeOqA\",\n  \"status\"\
         : \"pending\",\n  \"type\": \"charge\"\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['550']
+      Content-Length: ['557']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:46 GMT']
+      Date: ['Fri, 28 May 2021 10:20:42 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1663,33 +2063,35 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_WfnD6torEl259G]
+      request-id: [req_RRLhDAgENspR5i]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/payment_methods/pm_1GVfmeFk4eGpfLOCk4H1U8Gz
+    uri: https://api.stripe.com/v1/payment_methods/pm_1Iw2nzFk4eGpfLOCg2lLNVsY
   response:
-    body: {string: "{\n  \"id\": \"pm_1GVfmeFk4eGpfLOCk4H1U8Gz\",\n  \"object\": \"\
+    body: {string: "{\n  \"id\": \"pm_1Iw2nzFk4eGpfLOCg2lLNVsY\",\n  \"object\": \"\
         payment_method\",\n  \"billing_details\": {\n    \"address\": {\n      \"\
         city\": null,\n      \"country\": null,\n      \"line1\": null,\n      \"\
         line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n    },\n\
         \    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n  },\n  \"\
         card\": {\n    \"brand\": \"visa\",\n    \"checks\": {\n      \"address_line1_check\"\
         : null,\n      \"address_postal_code_check\": null,\n      \"cvc_check\":\
-        \ null\n    },\n    \"country\": \"US\",\n    \"exp_month\": 4,\n    \"exp_year\"\
-        : 2021,\n    \"fingerprint\": \"k6ycurEAdsI1uF3b\",\n    \"funding\": \"credit\"\
-        ,\n    \"generated_from\": null,\n    \"last4\": \"4242\",\n    \"three_d_secure_usage\"\
-        : {\n      \"supported\": true\n    },\n    \"wallet\": null\n  },\n  \"created\"\
-        : 1586359544,\n  \"customer\": \"cus_H3nNgr0DHMIw0r\",\n  \"livemode\": false,\n\
-        \  \"metadata\": {\n  },\n  \"type\": \"card\"\n}\n"}
+        \ null\n    },\n    \"country\": \"US\",\n    \"exp_month\": 5,\n    \"exp_year\"\
+        : 2022,\n    \"fingerprint\": \"k6ycurEAdsI1uF3b\",\n    \"funding\": \"credit\"\
+        ,\n    \"generated_from\": null,\n    \"last4\": \"4242\",\n    \"networks\"\
+        : {\n      \"available\": [\n        \"visa\"\n      ],\n      \"preferred\"\
+        : null\n    },\n    \"three_d_secure_usage\": {\n      \"supported\": true\n\
+        \    },\n    \"wallet\": null\n  },\n  \"created\": 1622197239,\n  \"customer\"\
+        : \"cus_JZBArUxadvyus1\",\n  \"livemode\": false,\n  \"metadata\": {\n  },\n\
+        \  \"type\": \"card\"\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['849']
+      Content-Length: ['943']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:47 GMT']
+      Date: ['Fri, 28 May 2021 10:20:42 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1699,33 +2101,35 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_WZ4a13OSvkvfZk]
+      request-id: [req_mY1hSfS2UhvkGo]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/payment_methods/pm_1GVfmeFk4eGpfLOCk4H1U8Gz
+    uri: https://api.stripe.com/v1/payment_methods/pm_1Iw2nzFk4eGpfLOCg2lLNVsY
   response:
-    body: {string: "{\n  \"id\": \"pm_1GVfmeFk4eGpfLOCk4H1U8Gz\",\n  \"object\": \"\
+    body: {string: "{\n  \"id\": \"pm_1Iw2nzFk4eGpfLOCg2lLNVsY\",\n  \"object\": \"\
         payment_method\",\n  \"billing_details\": {\n    \"address\": {\n      \"\
         city\": null,\n      \"country\": null,\n      \"line1\": null,\n      \"\
         line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n    },\n\
         \    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n  },\n  \"\
         card\": {\n    \"brand\": \"visa\",\n    \"checks\": {\n      \"address_line1_check\"\
         : null,\n      \"address_postal_code_check\": null,\n      \"cvc_check\":\
-        \ null\n    },\n    \"country\": \"US\",\n    \"exp_month\": 4,\n    \"exp_year\"\
-        : 2021,\n    \"fingerprint\": \"k6ycurEAdsI1uF3b\",\n    \"funding\": \"credit\"\
-        ,\n    \"generated_from\": null,\n    \"last4\": \"4242\",\n    \"three_d_secure_usage\"\
-        : {\n      \"supported\": true\n    },\n    \"wallet\": null\n  },\n  \"created\"\
-        : 1586359544,\n  \"customer\": \"cus_H3nNgr0DHMIw0r\",\n  \"livemode\": false,\n\
-        \  \"metadata\": {\n  },\n  \"type\": \"card\"\n}\n"}
+        \ null\n    },\n    \"country\": \"US\",\n    \"exp_month\": 5,\n    \"exp_year\"\
+        : 2022,\n    \"fingerprint\": \"k6ycurEAdsI1uF3b\",\n    \"funding\": \"credit\"\
+        ,\n    \"generated_from\": null,\n    \"last4\": \"4242\",\n    \"networks\"\
+        : {\n      \"available\": [\n        \"visa\"\n      ],\n      \"preferred\"\
+        : null\n    },\n    \"three_d_secure_usage\": {\n      \"supported\": true\n\
+        \    },\n    \"wallet\": null\n  },\n  \"created\": 1622197239,\n  \"customer\"\
+        : \"cus_JZBArUxadvyus1\",\n  \"livemode\": false,\n  \"metadata\": {\n  },\n\
+        \  \"type\": \"card\"\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['849']
+      Content-Length: ['943']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:47 GMT']
+      Date: ['Fri, 28 May 2021 10:20:42 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1735,7 +2139,7 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_EZGIULc9J5HE0A]
+      request-id: [req_FfWqi3CC64xsur]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
@@ -1744,24 +2148,26 @@ interactions:
     method: GET
     uri: https://api.stripe.com/v1/payment_methods/pm_card_jp
   response:
-    body: {string: "{\n  \"id\": \"pm_1GVfmiFk4eGpfLOCyKIrFVg8\",\n  \"object\": \"\
+    body: {string: "{\n  \"id\": \"pm_1Iw2o3Fk4eGpfLOC5LSLz4sC\",\n  \"object\": \"\
         payment_method\",\n  \"billing_details\": {\n    \"address\": {\n      \"\
         city\": null,\n      \"country\": null,\n      \"line1\": null,\n      \"\
         line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n    },\n\
         \    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n  },\n  \"\
         card\": {\n    \"brand\": \"visa\",\n    \"checks\": {\n      \"address_line1_check\"\
         : null,\n      \"address_postal_code_check\": null,\n      \"cvc_check\":\
-        \ null\n    },\n    \"country\": \"JP\",\n    \"exp_month\": 4,\n    \"exp_year\"\
-        : 2021,\n    \"fingerprint\": \"4heNPBHbDWXWyXBc\",\n    \"funding\": \"credit\"\
-        ,\n    \"generated_from\": null,\n    \"last4\": \"0003\",\n    \"three_d_secure_usage\"\
-        : {\n      \"supported\": true\n    },\n    \"wallet\": null\n  },\n  \"created\"\
-        : 1586359548,\n  \"customer\": null,\n  \"livemode\": false,\n  \"metadata\"\
-        : {\n  },\n  \"type\": \"card\"\n}\n"}
+        \ null\n    },\n    \"country\": \"JP\",\n    \"exp_month\": 5,\n    \"exp_year\"\
+        : 2022,\n    \"fingerprint\": \"4heNPBHbDWXWyXBc\",\n    \"funding\": \"credit\"\
+        ,\n    \"generated_from\": null,\n    \"last4\": \"0003\",\n    \"networks\"\
+        : {\n      \"available\": [\n        \"visa\"\n      ],\n      \"preferred\"\
+        : null\n    },\n    \"three_d_secure_usage\": {\n      \"supported\": true\n\
+        \    },\n    \"wallet\": null\n  },\n  \"created\": 1622197243,\n  \"customer\"\
+        : null,\n  \"livemode\": false,\n  \"metadata\": {\n  },\n  \"type\": \"card\"\
+        \n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['833']
+      Content-Length: ['927']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:48 GMT']
+      Date: ['Fri, 28 May 2021 10:20:43 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1771,38 +2177,38 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_S0KCA6tqcuOMvS]
+      request-id: [req_MnCRlxLGEQNGFK]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: email=donor%40example.com&payment_method=pm_1GVfmiFk4eGpfLOCyKIrFVg8
+    body: email=donor%40example.com&payment_method=pm_1Iw2o3Fk4eGpfLOC5LSLz4sC
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/customers
   response:
-    body: {string: "{\n  \"id\": \"cus_H3nNBvTmvS06kD\",\n  \"object\": \"customer\"\
+    body: {string: "{\n  \"id\": \"cus_JZBALwVq1KMGCg\",\n  \"object\": \"customer\"\
         ,\n  \"account_balance\": 0,\n  \"address\": null,\n  \"balance\": 0,\n  \"\
-        created\": 1586359548,\n  \"currency\": null,\n  \"default_source\": null,\n\
+        created\": 1622197243,\n  \"currency\": null,\n  \"default_source\": null,\n\
         \  \"delinquent\": false,\n  \"description\": null,\n  \"discount\": null,\n\
-        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"BA08D0AF\",\n\
+        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"203FB58A\",\n\
         \  \"invoice_settings\": {\n    \"custom_fields\": null,\n    \"default_payment_method\"\
         : null,\n    \"footer\": null\n  },\n  \"livemode\": false,\n  \"metadata\"\
         : {\n  },\n  \"name\": null,\n  \"next_invoice_sequence\": 1,\n  \"phone\"\
         : null,\n  \"preferred_locales\": [\n\n  ],\n  \"shipping\": null,\n  \"sources\"\
         : {\n    \"object\": \"list\",\n    \"data\": [\n\n    ],\n    \"has_more\"\
-        : false,\n    \"total_count\": 0,\n    \"url\": \"/v1/customers/cus_H3nNBvTmvS06kD/sources\"\
+        : false,\n    \"total_count\": 0,\n    \"url\": \"/v1/customers/cus_JZBALwVq1KMGCg/sources\"\
         \n  },\n  \"subscriptions\": {\n    \"object\": \"list\",\n    \"data\": [\n\
         \n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\":\
-        \ \"/v1/customers/cus_H3nNBvTmvS06kD/subscriptions\"\n  },\n  \"tax_exempt\"\
+        \ \"/v1/customers/cus_JZBALwVq1KMGCg/subscriptions\"\n  },\n  \"tax_exempt\"\
         : \"none\",\n  \"tax_ids\": {\n    \"object\": \"list\",\n    \"data\": [\n\
         \n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\":\
-        \ \"/v1/customers/cus_H3nNBvTmvS06kD/tax_ids\"\n  },\n  \"tax_info\": null,\n\
+        \ \"/v1/customers/cus_JZBALwVq1KMGCg/tax_ids\"\n  },\n  \"tax_info\": null,\n\
         \  \"tax_info_verification\": null\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['1162']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:48 GMT']
+      Date: ['Fri, 28 May 2021 10:20:44 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1812,84 +2218,85 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [create_customer_for_participant_1460_with_pm_1GVfmiFk4eGpfLOCyKIrFVg8]
-      original-request: [req_ER2bIgTp40VH7a]
-      request-id: [req_ER2bIgTp40VH7a]
+      idempotency-key: [create_customer_for_participant_2160_with_pm_1Iw2o3Fk4eGpfLOC5LSLz4sC]
+      original-request: [req_gqCNLr8VJ3s4sG]
+      request-id: [req_gqCNLr8VJ3s4sG]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=10000&confirm=True&currency=eur&customer=cus_H3nNBvTmvS06kD&metadata[payin_id]=1460&payment_method=pm_1GVfmiFk4eGpfLOCyKIrFVg8&return_url=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2F1460&statement_descriptor=Liberapay+1460
+    body: amount=10000&confirm=True&currency=eur&customer=cus_JZBALwVq1KMGCg&description=Liberapay&metadata[payin_id]=2160&off_session=False&payment_method=pm_1Iw2o3Fk4eGpfLOC5LSLz4sC&return_url=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2F2160&statement_descriptor=Liberapay+2160
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/payment_intents
   response:
-    body: {string: "{\n  \"id\": \"pi_1GVfmjFk4eGpfLOCMXnbsLcn\",\n  \"object\": \"\
+    body: {string: "{\n  \"id\": \"pi_1Iw2o4Fk4eGpfLOC74Wvj7Uw\",\n  \"object\": \"\
         payment_intent\",\n  \"amount\": 10000,\n  \"amount_capturable\": 0,\n  \"\
         amount_received\": 10000,\n  \"application\": null,\n  \"application_fee_amount\"\
         : null,\n  \"canceled_at\": null,\n  \"cancellation_reason\": null,\n  \"\
         capture_method\": \"automatic\",\n  \"charges\": {\n    \"object\": \"list\"\
-        ,\n    \"data\": [\n      {\n        \"id\": \"ch_1GVfmjFk4eGpfLOCu4klNWdH\"\
+        ,\n    \"data\": [\n      {\n        \"id\": \"ch_1Iw2o5Fk4eGpfLOC1QfyCqRd\"\
         ,\n        \"object\": \"charge\",\n        \"amount\": 10000,\n        \"\
-        amount_refunded\": 0,\n        \"application\": null,\n        \"application_fee\"\
-        : null,\n        \"application_fee_amount\": null,\n        \"balance_transaction\"\
-        : \"txn_1GVfmjFk4eGpfLOC6CHIv14I\",\n        \"billing_details\": {\n    \
-        \      \"address\": {\n            \"city\": null,\n            \"country\"\
-        : null,\n            \"line1\": null,\n            \"line2\": null,\n    \
-        \        \"postal_code\": null,\n            \"state\": null\n          },\n\
-        \          \"email\": null,\n          \"name\": null,\n          \"phone\"\
-        : null\n        },\n        \"calculated_statement_descriptor\": \"LIBERAPAY\
-        \ 1460\",\n        \"captured\": true,\n        \"created\": 1586359549,\n\
-        \        \"currency\": \"eur\",\n        \"customer\": \"cus_H3nNBvTmvS06kD\"\
-        ,\n        \"description\": null,\n        \"destination\": null,\n      \
-        \  \"dispute\": null,\n        \"disputed\": false,\n        \"failure_code\"\
+        amount_captured\": 10000,\n        \"amount_refunded\": 0,\n        \"application\"\
+        : null,\n        \"application_fee\": null,\n        \"application_fee_amount\"\
+        : null,\n        \"balance_transaction\": \"txn_1Iw2o5Fk4eGpfLOCUYBCPug6\"\
+        ,\n        \"billing_details\": {\n          \"address\": {\n            \"\
+        city\": null,\n            \"country\": null,\n            \"line1\": null,\n\
+        \            \"line2\": null,\n            \"postal_code\": null,\n      \
+        \      \"state\": null\n          },\n          \"email\": null,\n       \
+        \   \"name\": null,\n          \"phone\": null\n        },\n        \"calculated_statement_descriptor\"\
+        : \"LIBERAPAY 2160\",\n        \"captured\": true,\n        \"created\": 1622197245,\n\
+        \        \"currency\": \"eur\",\n        \"customer\": \"cus_JZBALwVq1KMGCg\"\
+        ,\n        \"description\": \"Liberapay\",\n        \"destination\": null,\n\
+        \        \"dispute\": null,\n        \"disputed\": false,\n        \"failure_code\"\
         : null,\n        \"failure_message\": null,\n        \"fraud_details\": {\n\
         \        },\n        \"invoice\": null,\n        \"livemode\": false,\n  \
-        \      \"metadata\": {\n          \"payin_id\": \"1460\"\n        },\n   \
+        \      \"metadata\": {\n          \"payin_id\": \"2160\"\n        },\n   \
         \     \"on_behalf_of\": null,\n        \"order\": null,\n        \"outcome\"\
         : {\n          \"network_status\": \"approved_by_network\",\n          \"\
         reason\": null,\n          \"risk_level\": \"normal\",\n          \"risk_score\"\
-        : 60,\n          \"seller_message\": \"Payment complete.\",\n          \"\
-        type\": \"authorized\"\n        },\n        \"paid\": true,\n        \"payment_intent\"\
-        : \"pi_1GVfmjFk4eGpfLOCMXnbsLcn\",\n        \"payment_method\": \"pm_1GVfmiFk4eGpfLOCyKIrFVg8\"\
+        : 2,\n          \"seller_message\": \"Payment complete.\",\n          \"type\"\
+        : \"authorized\"\n        },\n        \"paid\": true,\n        \"payment_intent\"\
+        : \"pi_1Iw2o4Fk4eGpfLOC74Wvj7Uw\",\n        \"payment_method\": \"pm_1Iw2o3Fk4eGpfLOC5LSLz4sC\"\
         ,\n        \"payment_method_details\": {\n          \"card\": {\n        \
         \    \"brand\": \"visa\",\n            \"checks\": {\n              \"address_line1_check\"\
         : null,\n              \"address_postal_code_check\": null,\n            \
         \  \"cvc_check\": null\n            },\n            \"country\": \"JP\",\n\
-        \            \"exp_month\": 4,\n            \"exp_year\": 2021,\n        \
+        \            \"exp_month\": 5,\n            \"exp_year\": 2022,\n        \
         \    \"fingerprint\": \"4heNPBHbDWXWyXBc\",\n            \"funding\": \"credit\"\
         ,\n            \"installments\": null,\n            \"last4\": \"0003\",\n\
         \            \"network\": \"visa\",\n            \"three_d_secure\": null,\n\
         \            \"wallet\": null\n          },\n          \"type\": \"card\"\n\
         \        },\n        \"receipt_email\": null,\n        \"receipt_number\"\
-        : null,\n        \"receipt_url\": \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/ch_1GVfmjFk4eGpfLOCu4klNWdH/rcpt_H3nNODyVM5oDC4eQ8HjKbTEBxUUuhMt\"\
+        : null,\n        \"receipt_url\": \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/ch_1Iw2o5Fk4eGpfLOC1QfyCqRd/rcpt_JZBAwZtKa84k6uRv2TkaEvMQxXHXrQa\"\
         ,\n        \"refunded\": false,\n        \"refunds\": {\n          \"object\"\
         : \"list\",\n          \"data\": [\n\n          ],\n          \"has_more\"\
-        : false,\n          \"total_count\": 0,\n          \"url\": \"/v1/charges/ch_1GVfmjFk4eGpfLOCu4klNWdH/refunds\"\
+        : false,\n          \"total_count\": 0,\n          \"url\": \"/v1/charges/ch_1Iw2o5Fk4eGpfLOC1QfyCqRd/refunds\"\
         \n        },\n        \"review\": null,\n        \"shipping\": null,\n   \
         \     \"source\": null,\n        \"source_transfer\": null,\n        \"statement_descriptor\"\
-        : \"Liberapay 1460\",\n        \"statement_descriptor_suffix\": null,\n  \
+        : \"Liberapay 2160\",\n        \"statement_descriptor_suffix\": null,\n  \
         \      \"status\": \"succeeded\",\n        \"transfer_data\": null,\n    \
         \    \"transfer_group\": null\n      }\n    ],\n    \"has_more\": false,\n\
-        \    \"total_count\": 1,\n    \"url\": \"/v1/charges?payment_intent=pi_1GVfmjFk4eGpfLOCMXnbsLcn\"\
-        \n  },\n  \"client_secret\": \"pi_1GVfmjFk4eGpfLOCMXnbsLcn_secret_9wBLozCcE04ziigNJigxhPaEH\"\
-        ,\n  \"confirmation_method\": \"automatic\",\n  \"created\": 1586359549,\n\
-        \  \"currency\": \"eur\",\n  \"customer\": \"cus_H3nNBvTmvS06kD\",\n  \"description\"\
-        : null,\n  \"invoice\": null,\n  \"last_payment_error\": null,\n  \"livemode\"\
-        : false,\n  \"metadata\": {\n    \"payin_id\": \"1460\"\n  },\n  \"next_action\"\
-        : null,\n  \"on_behalf_of\": null,\n  \"payment_method\": \"pm_1GVfmiFk4eGpfLOCyKIrFVg8\"\
-        ,\n  \"payment_method_options\": {\n    \"card\": {\n      \"installments\"\
-        : null,\n      \"request_three_d_secure\": \"automatic\"\n    }\n  },\n  \"\
-        payment_method_types\": [\n    \"card\"\n  ],\n  \"receipt_email\": null,\n\
-        \  \"review\": null,\n  \"setup_future_usage\": null,\n  \"shipping\": null,\n\
-        \  \"source\": null,\n  \"statement_descriptor\": \"Liberapay 1460\",\n  \"\
-        statement_descriptor_suffix\": null,\n  \"status\": \"succeeded\",\n  \"transfer_data\"\
-        : null,\n  \"transfer_group\": null\n}\n"}
+        \    \"total_count\": 1,\n    \"url\": \"/v1/charges?payment_intent=pi_1Iw2o4Fk4eGpfLOC74Wvj7Uw\"\
+        \n  },\n  \"client_secret\": \"pi_1Iw2o4Fk4eGpfLOC74Wvj7Uw_secret_ESh3EHXGPUHKM8d5cxIWJF4Ks\"\
+        ,\n  \"confirmation_method\": \"automatic\",\n  \"created\": 1622197244,\n\
+        \  \"currency\": \"eur\",\n  \"customer\": \"cus_JZBALwVq1KMGCg\",\n  \"description\"\
+        : \"Liberapay\",\n  \"invoice\": null,\n  \"last_payment_error\": null,\n\
+        \  \"livemode\": false,\n  \"metadata\": {\n    \"payin_id\": \"2160\"\n \
+        \ },\n  \"next_action\": null,\n  \"on_behalf_of\": null,\n  \"payment_method\"\
+        : \"pm_1Iw2o3Fk4eGpfLOC5LSLz4sC\",\n  \"payment_method_options\": {\n    \"\
+        card\": {\n      \"installments\": null,\n      \"network\": null,\n     \
+        \ \"request_three_d_secure\": \"automatic\"\n    }\n  },\n  \"payment_method_types\"\
+        : [\n    \"card\"\n  ],\n  \"receipt_email\": null,\n  \"review\": null,\n\
+        \  \"setup_future_usage\": null,\n  \"shipping\": null,\n  \"source\": null,\n\
+        \  \"statement_descriptor\": \"Liberapay 2160\",\n  \"statement_descriptor_suffix\"\
+        : null,\n  \"status\": \"succeeded\",\n  \"transfer_data\": null,\n  \"transfer_group\"\
+        : null\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['4291']
+      Content-Length: ['4361']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:50 GMT']
+      Date: ['Fri, 28 May 2021 10:20:46 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1899,9 +2306,9 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [payin_intent_1460]
-      original-request: [req_ykmLBVDrKupdgl]
-      request-id: [req_ykmLBVDrKupdgl]
+      idempotency-key: [payin_intent_2160]
+      original-request: [req_RUaY5XbUF4lUmN]
+      request-id: [req_RUaY5XbUF4lUmN]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
@@ -1909,22 +2316,22 @@ interactions:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/balance_transactions/txn_1GVfmjFk4eGpfLOC6CHIv14I
-  response:
-    body: {string: "{\n  \"id\": \"txn_1GVfmjFk4eGpfLOC6CHIv14I\",\n  \"object\":\
-        \ \"balance_transaction\",\n  \"amount\": 10000,\n  \"available_on\": 1586908800,\n\
-        \  \"created\": 1586359549,\n  \"currency\": \"eur\",\n  \"description\":\
-        \ null,\n  \"exchange_rate\": null,\n  \"fee\": 315,\n  \"fee_details\": [\n\
-        \    {\n      \"amount\": 315,\n      \"application\": null,\n      \"currency\"\
-        : \"eur\",\n      \"description\": \"Stripe processing fees\",\n      \"type\"\
-        : \"stripe_fee\"\n    }\n  ],\n  \"net\": 9685,\n  \"reporting_category\"\
-        : \"charge\",\n  \"source\": \"ch_1GVfmjFk4eGpfLOCu4klNWdH\",\n  \"status\"\
+    uri: https://api.stripe.com/v1/balance_transactions/txn_1Iw2o5Fk4eGpfLOCUYBCPug6
+  response:
+    body: {string: "{\n  \"id\": \"txn_1Iw2o5Fk4eGpfLOCUYBCPug6\",\n  \"object\":\
+        \ \"balance_transaction\",\n  \"amount\": 10000,\n  \"available_on\": 1622592000,\n\
+        \  \"created\": 1622197245,\n  \"currency\": \"eur\",\n  \"description\":\
+        \ \"Liberapay\",\n  \"exchange_rate\": null,\n  \"fee\": 315,\n  \"fee_details\"\
+        : [\n    {\n      \"amount\": 315,\n      \"application\": null,\n      \"\
+        currency\": \"eur\",\n      \"description\": \"Stripe processing fees\",\n\
+        \      \"type\": \"stripe_fee\"\n    }\n  ],\n  \"net\": 9685,\n  \"reporting_category\"\
+        : \"charge\",\n  \"source\": \"ch_1Iw2o5Fk4eGpfLOC1QfyCqRd\",\n  \"status\"\
         : \"pending\",\n  \"type\": \"charge\"\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['553']
+      Content-Length: ['560']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:50 GMT']
+      Date: ['Fri, 28 May 2021 10:20:46 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1934,31 +2341,32 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_XDzvitDQqw8uJ0]
+      request-id: [req_IKizpkNq0oiQQF]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=4843&currency=EUR&destination=acct_1GVfmPLo8l3IWFWX&metadata[payin_transfer_id]=1460&source_transaction=ch_1GVfmjFk4eGpfLOCu4klNWdH
+    body: amount=4843&currency=EUR&description=anonymous+donation+for+creator_1+via+Liberapay&destination=acct_1Iw2ne2H54hWzJBk&metadata[payin_transfer_id]=2160&source_transaction=ch_1Iw2o5Fk4eGpfLOC1QfyCqRd
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/transfers
   response:
-    body: {string: "{\n  \"id\": \"tr_1GVfmkFk4eGpfLOC05PtYAjs\",\n  \"object\": \"\
+    body: {string: "{\n  \"id\": \"tr_1Iw2o6Fk4eGpfLOCLqenUEWr\",\n  \"object\": \"\
         transfer\",\n  \"amount\": 4843,\n  \"amount_reversed\": 0,\n  \"balance_transaction\"\
-        : \"txn_1GVfmkFk4eGpfLOC2pm6fmF5\",\n  \"created\": 1586359550,\n  \"currency\"\
-        : \"eur\",\n  \"description\": null,\n  \"destination\": \"acct_1GVfmPLo8l3IWFWX\"\
-        ,\n  \"destination_payment\": \"py_1GVfmkLo8l3IWFWXsM3gWXAf\",\n  \"livemode\"\
-        : false,\n  \"metadata\": {\n    \"payin_transfer_id\": \"1460\"\n  },\n \
-        \ \"reversals\": {\n    \"object\": \"list\",\n    \"data\": [\n\n    ],\n\
-        \    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\": \"/v1/transfers/tr_1GVfmkFk4eGpfLOC05PtYAjs/reversals\"\
-        \n  },\n  \"reversed\": false,\n  \"source_transaction\": \"ch_1GVfmjFk4eGpfLOCu4klNWdH\"\
-        ,\n  \"source_type\": \"card\",\n  \"transfer_group\": \"group_pi_1GVfmjFk4eGpfLOCMXnbsLcn\"\
+        : \"txn_1Iw2o6Fk4eGpfLOCuEiUuIMJ\",\n  \"created\": 1622197246,\n  \"currency\"\
+        : \"eur\",\n  \"description\": \"anonymous donation for creator_1 via Liberapay\"\
+        ,\n  \"destination\": \"acct_1Iw2ne2H54hWzJBk\",\n  \"destination_payment\"\
+        : \"py_1Iw2o62H54hWzJBkoAgpmVXX\",\n  \"livemode\": false,\n  \"metadata\"\
+        : {\n    \"payin_transfer_id\": \"2160\"\n  },\n  \"reversals\": {\n    \"\
+        object\": \"list\",\n    \"data\": [\n\n    ],\n    \"has_more\": false,\n\
+        \    \"total_count\": 0,\n    \"url\": \"/v1/transfers/tr_1Iw2o6Fk4eGpfLOCLqenUEWr/reversals\"\
+        \n  },\n  \"reversed\": false,\n  \"source_transaction\": \"ch_1Iw2o5Fk4eGpfLOC1QfyCqRd\"\
+        ,\n  \"source_type\": \"card\",\n  \"transfer_group\": \"group_pi_1Iw2o4Fk4eGpfLOC74Wvj7Uw\"\
         \n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['740']
+      Content-Length: ['784']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:25:51 GMT']
+      Date: ['Fri, 28 May 2021 10:20:47 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -1968,9 +2376,9 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [payin_transfer_1460]
-      original-request: [req_bPtYD8REEbhDSB]
-      request-id: [req_bPtYD8REEbhDSB]
+      idempotency-key: [payin_transfer_2160]
+      original-request: [req_0AjhazaU4yK7CE]
+      request-id: [req_0AjhazaU4yK7CE]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
@@ -1978,35 +2386,42 @@ interactions:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/sources/src_1GVfmaFk4eGpfLOCvkI01RbI
+    uri: https://api.stripe.com/v1/charges/py_1Iw2o62H54hWzJBkoAgpmVXX
   response:
-    body: {string: "{\n  \"id\": \"src_1GVfmaFk4eGpfLOCvkI01RbI\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
-        ,\n  \"created\": 1586359540,\n  \"currency\": \"eur\",\n  \"customer\": \"\
-        cus_H3nNLyErBliltd\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
-        mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
-        \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
-        : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
-        \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
-        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"WXNWNGBR4FQMBW7I\"\
-        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
-        \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
-        \  \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n \
-        \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
-        \    },\n    \"email\": \"donor@example.com\",\n    \"name\": \"Jane Doe\"\
-        ,\n    \"phone\": null,\n    \"verified_address\": null,\n    \"verified_email\"\
-        : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
-        \  \"sepa_debit\": {\n    \"last4\": \"2606\",\n    \"bank_code\": \"20041\"\
-        ,\n    \"branch_code\": \"01005\",\n    \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
-        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"WXNWNGBR4FQMBW7I\"\
-        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
-        \n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\",\n\
-        \  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\n}\n"}
+    body: {string: "{\n  \"id\": \"py_1Iw2o62H54hWzJBkoAgpmVXX\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 4843,\n  \"amount_captured\": 4843,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": \"ca_DEYxiYHBHZtGj32l9uczcsunbQOcRq8H\",\n  \"application_fee\"\
+        : null,\n  \"application_fee_amount\": null,\n  \"balance_transaction\": \"\
+        txn_1Iw2o62H54hWzJBkkEBZnGOP\",\n  \"billing_details\": {\n    \"address\"\
+        : {\n      \"city\": null,\n      \"country\": null,\n      \"line1\": null,\n\
+        \      \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
+        \    },\n    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n\
+        \  },\n  \"calculated_statement_descriptor\": null,\n  \"captured\": true,\n\
+        \  \"created\": 1622197246,\n  \"currency\": \"eur\",\n  \"customer\": null,\n\
+        \  \"description\": null,\n  \"destination\": null,\n  \"dispute\": null,\n\
+        \  \"disputed\": false,\n  \"failure_code\": null,\n  \"failure_message\"\
+        : null,\n  \"fraud_details\": {\n  },\n  \"invoice\": null,\n  \"livemode\"\
+        : false,\n  \"metadata\": {\n  },\n  \"on_behalf_of\": null,\n  \"order\"\
+        : null,\n  \"outcome\": null,\n  \"paid\": true,\n  \"payment_intent\": null,\n\
+        \  \"payment_method\": null,\n  \"payment_method_details\": {\n    \"stripe_account\"\
+        : {\n    },\n    \"type\": \"stripe_account\"\n  },\n  \"receipt_email\":\
+        \ null,\n  \"receipt_number\": null,\n  \"receipt_url\": \"https://pay.stripe.com/receipts/acct_1Iw2ne2H54hWzJBk/py_1Iw2o62H54hWzJBkoAgpmVXX/rcpt_JZBAGCG4nbM0Eapd3FDKY30eQlJ4fXm\"\
+        ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
+        \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
+        \ 0,\n    \"url\": \"/v1/charges/py_1Iw2o62H54hWzJBkoAgpmVXX/refunds\"\n \
+        \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
+        id\": \"acct_1ChyayFk4eGpfLOC\",\n    \"object\": \"account\",\n    \"application_icon\"\
+        : \"https://files.stripe.com/links/fl_live_pcO27i8SSea27yZPmUHDPhiF\",\n \
+        \   \"application_logo\": \"https://s3.amazonaws.com/stripe-uploads/acct_1ChyayFk4eGpfLOCapplication-logo-icon_v2_yellow_r.100.png\"\
+        ,\n    \"application_name\": \"Liberapay\",\n    \"application_url\": \"https://liberapay.com/\"\
+        \n  },\n  \"source_transfer\": \"tr_1Iw2o6Fk4eGpfLOCLqenUEWr\",\n  \"statement_descriptor\"\
+        : null,\n  \"statement_descriptor_suffix\": null,\n  \"status\": \"succeeded\"\
+        ,\n  \"transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['1581']
+      Content-Length: ['2125']
       Content-Type: [application/json]
-      Date: ['Wed, 08 Apr 2020 15:53:19 GMT']
+      Date: ['Fri, 28 May 2021 10:20:47 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2016,7 +2431,66 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_UExmA4jAjrl7FL]
+      request-id: [req_KZpgjNrElWu40A]
+      stripe-account: [acct_1Iw2ne2H54hWzJBk]
+      stripe-version: ['2019-08-14']
+    status: {code: 200, message: OK}
+- request:
+    body: description=anonymous+donation+for+creator_1+via+Liberapay&metadata[liberapay_transfer_id]=2160
+    headers: {}
+    method: POST
+    uri: https://api.stripe.com/v1/charges/py_1Iw2o62H54hWzJBkoAgpmVXX
+  response:
+    body: {string: "{\n  \"id\": \"py_1Iw2o62H54hWzJBkoAgpmVXX\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 4843,\n  \"amount_captured\": 4843,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": \"ca_DEYxiYHBHZtGj32l9uczcsunbQOcRq8H\",\n  \"application_fee\"\
+        : null,\n  \"application_fee_amount\": null,\n  \"balance_transaction\": \"\
+        txn_1Iw2o62H54hWzJBkkEBZnGOP\",\n  \"billing_details\": {\n    \"address\"\
+        : {\n      \"city\": null,\n      \"country\": null,\n      \"line1\": null,\n\
+        \      \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
+        \    },\n    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n\
+        \  },\n  \"calculated_statement_descriptor\": null,\n  \"captured\": true,\n\
+        \  \"created\": 1622197246,\n  \"currency\": \"eur\",\n  \"customer\": null,\n\
+        \  \"description\": \"anonymous donation for creator_1 via Liberapay\",\n\
+        \  \"destination\": null,\n  \"dispute\": null,\n  \"disputed\": false,\n\
+        \  \"failure_code\": null,\n  \"failure_message\": null,\n  \"fraud_details\"\
+        : {\n  },\n  \"invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n\
+        \    \"liberapay_transfer_id\": \"2160\"\n  },\n  \"on_behalf_of\": null,\n\
+        \  \"order\": null,\n  \"outcome\": null,\n  \"paid\": true,\n  \"payment_intent\"\
+        : null,\n  \"payment_method\": null,\n  \"payment_method_details\": {\n  \
+        \  \"stripe_account\": {\n    },\n    \"type\": \"stripe_account\"\n  },\n\
+        \  \"receipt_email\": null,\n  \"receipt_number\": null,\n  \"receipt_url\"\
+        : \"https://pay.stripe.com/receipts/acct_1Iw2ne2H54hWzJBk/py_1Iw2o62H54hWzJBkoAgpmVXX/rcpt_JZBAGCG4nbM0Eapd3FDKY30eQlJ4fXm\"\
+        ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
+        \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
+        \ 0,\n    \"url\": \"/v1/charges/py_1Iw2o62H54hWzJBkoAgpmVXX/refunds\"\n \
+        \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
+        id\": \"acct_1ChyayFk4eGpfLOC\",\n    \"object\": \"account\",\n    \"application_icon\"\
+        : \"https://files.stripe.com/links/fl_live_pcO27i8SSea27yZPmUHDPhiF\",\n \
+        \   \"application_logo\": \"https://s3.amazonaws.com/stripe-uploads/acct_1ChyayFk4eGpfLOCapplication-logo-icon_v2_yellow_r.100.png\"\
+        ,\n    \"application_name\": \"Liberapay\",\n    \"application_url\": \"https://liberapay.com/\"\
+        \n  },\n  \"source_transfer\": \"tr_1Iw2o6Fk4eGpfLOCLqenUEWr\",\n  \"statement_descriptor\"\
+        : null,\n  \"statement_descriptor_suffix\": null,\n  \"status\": \"succeeded\"\
+        ,\n  \"transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
+    headers:
+      Connection: [keep-alive]
+      Content-Length: ['2205']
+      Content-Type: [application/json]
+      Date: ['Fri, 28 May 2021 10:20:48 GMT']
+      Server: [nginx]
+      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
+      access-control-allow-credentials: ['true']
+      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
+      access-control-allow-origin: ['*']
+      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
+          X-Stripe-Privileged-Session-Required']
+      access-control-max-age: ['300']
+      cache-control: ['no-cache, no-store']
+      idempotency-key: [a6b2a56d-cc90-4139-ad81-cf517a10f2d8]
+      original-request: [req_cjhGTJotzNQHGA]
+      request-id: [req_cjhGTJotzNQHGA]
+      stripe-account: [acct_1Iw2ne2H54hWzJBk]
+      stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
@@ -2025,20 +2499,20 @@ interactions:
     method: POST
     uri: https://api.stripe.com/v1/tokens
   response:
-    body: {string: "{\n  \"id\": \"btok_1GwWqoFk4eGpfLOCen9k82aA\",\n  \"object\"\
-        : \"token\",\n  \"bank_account\": {\n    \"id\": \"ba_1GwWqoFk4eGpfLOC68yvBQMn\"\
+    body: {string: "{\n  \"id\": \"btok_1Iw2o8Fk4eGpfLOCXy7pjgA7\",\n  \"object\"\
+        : \"token\",\n  \"bank_account\": {\n    \"id\": \"ba_1Iw2o8Fk4eGpfLOCpxJcmhsL\"\
         ,\n    \"object\": \"bank_account\",\n    \"account_holder_name\": \"Jane\
         \ Doe\",\n    \"account_holder_type\": null,\n    \"bank_name\": \"STRIPE\
         \ TEST BANK\",\n    \"country\": \"FR\",\n    \"currency\": \"eur\",\n   \
         \ \"fingerprint\": \"T8MDJUvoericCF3x\",\n    \"last4\": \"2606\",\n    \"\
         routing_number\": \"110000000\",\n    \"status\": \"new\"\n  },\n  \"client_ip\"\
-        : \"109.190.32.190\",\n  \"created\": 1592760062,\n  \"livemode\": false,\n\
+        : \"77.128.117.173\",\n  \"created\": 1622197248,\n  \"livemode\": false,\n\
         \  \"type\": \"bank_account\",\n  \"used\": false\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['551']
       Content-Type: [application/json]
-      Date: ['Sun, 21 Jun 2020 17:21:03 GMT']
+      Date: ['Fri, 28 May 2021 10:20:48 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2048,9 +2522,9 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [d0096611-9770-47d2-8f9e-36206b3418e4]
-      original-request: [req_FMX8T4xugXYy2d]
-      request-id: [req_FMX8T4xugXYy2d]
+      idempotency-key: [2900d7d2-f649-4fe4-aa64-e0724732e00f]
+      original-request: [req_qDoPUK5Kbj2Zii]
+      request-id: [req_qDoPUK5Kbj2Zii]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
@@ -2058,22 +2532,22 @@ interactions:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/tokens/btok_1GwWqoFk4eGpfLOCen9k82aA
+    uri: https://api.stripe.com/v1/tokens/btok_1Iw2o8Fk4eGpfLOCXy7pjgA7
   response:
-    body: {string: "{\n  \"id\": \"btok_1GwWqoFk4eGpfLOCen9k82aA\",\n  \"object\"\
-        : \"token\",\n  \"bank_account\": {\n    \"id\": \"ba_1GwWqoFk4eGpfLOC68yvBQMn\"\
+    body: {string: "{\n  \"id\": \"btok_1Iw2o8Fk4eGpfLOCXy7pjgA7\",\n  \"object\"\
+        : \"token\",\n  \"bank_account\": {\n    \"id\": \"ba_1Iw2o8Fk4eGpfLOCpxJcmhsL\"\
         ,\n    \"object\": \"bank_account\",\n    \"account_holder_name\": \"Jane\
         \ Doe\",\n    \"account_holder_type\": null,\n    \"bank_name\": \"STRIPE\
         \ TEST BANK\",\n    \"country\": \"FR\",\n    \"currency\": \"eur\",\n   \
         \ \"fingerprint\": \"T8MDJUvoericCF3x\",\n    \"last4\": \"2606\",\n    \"\
         routing_number\": \"110000000\",\n    \"status\": \"new\"\n  },\n  \"client_ip\"\
-        : \"109.190.32.190\",\n  \"created\": 1592760062,\n  \"livemode\": false,\n\
+        : \"77.128.117.173\",\n  \"created\": 1622197248,\n  \"livemode\": false,\n\
         \  \"type\": \"bank_account\",\n  \"used\": false\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['551']
       Content-Type: [application/json]
-      Date: ['Sun, 21 Jun 2020 17:21:03 GMT']
+      Date: ['Fri, 28 May 2021 10:20:49 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2083,24 +2557,24 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_fhVmEWGoPxXoDZ]
+      request-id: [req_londKQiYjkNTbH]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: owner[email]=donor%40example.com&redirect[return_url]=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2Fcomplete&token=btok_1GwWqoFk4eGpfLOCen9k82aA&type=sepa_debit&usage=reusable
+    body: owner[email]=donor%40example.com&redirect[return_url]=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2Fcomplete&token=btok_1Iw2o8Fk4eGpfLOCXy7pjgA7&type=sepa_debit&usage=reusable
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/sources
   response:
-    body: {string: "{\n  \"id\": \"src_1GwWqpFk4eGpfLOC099akWU5\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
-        ,\n  \"created\": 1592760063,\n  \"currency\": \"eur\",\n  \"flow\": \"none\"\
+    body: {string: "{\n  \"id\": \"src_1Iw2o9Fk4eGpfLOCOLpAaC9X\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
+        ,\n  \"created\": 1622197249,\n  \"currency\": \"eur\",\n  \"flow\": \"none\"\
         ,\n  \"livemode\": false,\n  \"mandate\": {\n    \"acceptance\": {\n     \
         \ \"date\": null,\n      \"ip\": null,\n      \"offline\": null,\n      \"\
         online\": null,\n      \"status\": \"pending\",\n      \"type\": null,\n \
         \     \"user_agent\": null\n    },\n    \"amount\": null,\n    \"currency\"\
         : null,\n    \"interval\": \"variable\",\n    \"notification_method\": \"\
-        none\",\n    \"reference\": \"W9MCQ0MHJ2VEZLGR\",\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
+        none\",\n    \"reference\": \"TYHWOARBAAGYFGBG\",\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
         \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
         \  \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n \
         \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
@@ -2109,15 +2583,15 @@ interactions:
         : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
         \  \"sepa_debit\": {\n    \"last4\": \"2606\",\n    \"bank_code\": \"20041\"\
         ,\n    \"branch_code\": \"01005\",\n    \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
-        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"W9MCQ0MHJ2VEZLGR\"\
-        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
+        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"TYHWOARBAAGYFGBG\"\
+        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
         \n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\",\n\
         \  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['1545']
       Content-Type: [application/json]
-      Date: ['Sun, 21 Jun 2020 17:21:03 GMT']
+      Date: ['Fri, 28 May 2021 10:20:49 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2127,40 +2601,40 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [create_source_from_btok_1GwWqoFk4eGpfLOCen9k82aA]
-      original-request: [req_7MQMe0e1D06xjN]
-      request-id: [req_7MQMe0e1D06xjN]
+      idempotency-key: [create_source_from_btok_1Iw2o8Fk4eGpfLOCXy7pjgA7]
+      original-request: [req_EhN7oWkJJIsm9J]
+      request-id: [req_EhN7oWkJJIsm9J]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: email=donor%40example.com&source=src_1GwWqpFk4eGpfLOC099akWU5
+    body: email=donor%40example.com&source=src_1Iw2o9Fk4eGpfLOCOLpAaC9X
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/customers
   response:
-    body: {string: "{\n  \"id\": \"cus_HVXw26RUl9t8v8\",\n  \"object\": \"customer\"\
+    body: {string: "{\n  \"id\": \"cus_JZBAeaOb7L4PVu\",\n  \"object\": \"customer\"\
         ,\n  \"account_balance\": 0,\n  \"address\": null,\n  \"balance\": 0,\n  \"\
-        created\": 1592760064,\n  \"currency\": null,\n  \"default_source\": \"src_1GwWqpFk4eGpfLOC099akWU5\"\
+        created\": 1622197250,\n  \"currency\": null,\n  \"default_source\": \"src_1Iw2o9Fk4eGpfLOCOLpAaC9X\"\
         ,\n  \"delinquent\": false,\n  \"description\": null,\n  \"discount\": null,\n\
-        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"58C449BB\",\n\
+        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"869DC0B0\",\n\
         \  \"invoice_settings\": {\n    \"custom_fields\": null,\n    \"default_payment_method\"\
         : null,\n    \"footer\": null\n  },\n  \"livemode\": false,\n  \"metadata\"\
         : {\n  },\n  \"name\": null,\n  \"next_invoice_sequence\": 1,\n  \"phone\"\
         : null,\n  \"preferred_locales\": [\n\n  ],\n  \"shipping\": null,\n  \"sources\"\
         : {\n    \"object\": \"list\",\n    \"data\": [\n      {\n        \"id\":\
-        \ \"src_1GwWqpFk4eGpfLOC099akWU5\",\n        \"object\": \"source\",\n   \
-        \     \"amount\": null,\n        \"client_secret\": \"src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
-        ,\n        \"created\": 1592760063,\n        \"currency\": \"eur\",\n    \
-        \    \"customer\": \"cus_HVXw26RUl9t8v8\",\n        \"flow\": \"none\",\n\
+        \ \"src_1Iw2o9Fk4eGpfLOCOLpAaC9X\",\n        \"object\": \"source\",\n   \
+        \     \"amount\": null,\n        \"client_secret\": \"src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
+        ,\n        \"created\": 1622197249,\n        \"currency\": \"eur\",\n    \
+        \    \"customer\": \"cus_JZBAeaOb7L4PVu\",\n        \"flow\": \"none\",\n\
         \        \"livemode\": false,\n        \"mandate\": {\n          \"acceptance\"\
         : {\n            \"date\": null,\n            \"ip\": null,\n            \"\
         offline\": null,\n            \"online\": null,\n            \"status\": \"\
         pending\",\n            \"type\": null,\n            \"user_agent\": null\n\
         \          },\n          \"amount\": null,\n          \"currency\": null,\n\
         \          \"interval\": \"variable\",\n          \"notification_method\"\
-        : \"none\",\n          \"reference\": \"W9MCQ0MHJ2VEZLGR\",\n          \"\
-        url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
+        : \"none\",\n          \"reference\": \"TYHWOARBAAGYFGBG\",\n          \"\
+        url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
         \n        },\n        \"metadata\": {\n        },\n        \"owner\": {\n\
         \          \"address\": {\n            \"city\": null,\n            \"country\"\
         : \"FR\",\n            \"line1\": null,\n            \"line2\": null,\n  \
@@ -2171,23 +2645,23 @@ interactions:
         \          \"verified_phone\": null\n        },\n        \"sepa_debit\": {\n\
         \          \"last4\": \"2606\",\n          \"bank_code\": \"20041\",\n   \
         \       \"branch_code\": \"01005\",\n          \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
-        ,\n          \"country\": \"FR\",\n          \"mandate_reference\": \"W9MCQ0MHJ2VEZLGR\"\
-        ,\n          \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
+        ,\n          \"country\": \"FR\",\n          \"mandate_reference\": \"TYHWOARBAAGYFGBG\"\
+        ,\n          \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
         \n        },\n        \"statement_descriptor\": null,\n        \"status\"\
         : \"chargeable\",\n        \"type\": \"sepa_debit\",\n        \"usage\": \"\
         reusable\"\n      }\n    ],\n    \"has_more\": false,\n    \"total_count\"\
-        : 1,\n    \"url\": \"/v1/customers/cus_HVXw26RUl9t8v8/sources\"\n  },\n  \"\
+        : 1,\n    \"url\": \"/v1/customers/cus_JZBAeaOb7L4PVu/sources\"\n  },\n  \"\
         subscriptions\": {\n    \"object\": \"list\",\n    \"data\": [\n\n    ],\n\
-        \    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\": \"/v1/customers/cus_HVXw26RUl9t8v8/subscriptions\"\
+        \    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\": \"/v1/customers/cus_JZBAeaOb7L4PVu/subscriptions\"\
         \n  },\n  \"tax_exempt\": \"none\",\n  \"tax_ids\": {\n    \"object\": \"\
         list\",\n    \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\"\
-        : 0,\n    \"url\": \"/v1/customers/cus_HVXw26RUl9t8v8/tax_ids\"\n  },\n  \"\
+        : 0,\n    \"url\": \"/v1/customers/cus_JZBAeaOb7L4PVu/tax_ids\"\n  },\n  \"\
         tax_info\": null,\n  \"tax_info_verification\": null\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['3128']
       Content-Type: [application/json]
-      Date: ['Sun, 21 Jun 2020 17:21:04 GMT']
+      Date: ['Fri, 28 May 2021 10:20:50 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2197,14 +2671,14 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [create_customer_for_participant_1670_with_src_1GwWqpFk4eGpfLOC099akWU5]
-      original-request: [req_SLquKHJt9H2pdc]
-      request-id: [req_SLquKHJt9H2pdc]
+      idempotency-key: [create_customer_for_participant_2170_with_src_1Iw2o9Fk4eGpfLOCOLpAaC9X]
+      original-request: [req_ebKTksi70Fb2jn]
+      request-id: [req_ebKTksi70Fb2jn]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=10000&currency=eur&customer=cus_HVXw26RUl9t8v8&destination[account]=acct_1Gv6gnIi3iiNpKFF&metadata[payin_id]=1670&source=src_1GwWqpFk4eGpfLOC099akWU5&statement_descriptor=Liberapay+1670&expand[0]=balance_transaction
+    body: amount=10000&currency=eur&customer=cus_JZBAeaOb7L4PVu&description=Liberapay&destination[account]=acct_1Gv6gnIi3iiNpKFF&metadata[payin_id]=2170&source=src_1Iw2o9Fk4eGpfLOCOLpAaC9X&statement_descriptor=Liberapay+2170&expand[0]=balance_transaction
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/charges
@@ -2212,13 +2686,13 @@ interactions:
     body: {string: "{\n  \"error\": {\n    \"message\": \"For 'sepa_debit' payments,\
         \ we currently require your account to have a bank account in one of the following\
         \ currencies: eur, usd, gbp, sek, nok, dkk, chf, pln, jpy, hkd, bgn, czk,\
-        \ ron, sgd, aud, nzd, cad\",\n    \"param\": \"currency\",\n    \"type\":\
-        \ \"invalid_request_error\"\n  }\n}\n"}
+        \ ron, sgd, aud, nzd, cad, huf, mxn\",\n    \"param\": \"currency\",\n   \
+        \ \"type\": \"invalid_request_error\"\n  }\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['304']
+      Content-Length: ['314']
       Content-Type: [application/json]
-      Date: ['Sun, 21 Jun 2020 17:21:04 GMT']
+      Date: ['Fri, 28 May 2021 10:20:50 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2228,36 +2702,36 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [payin_1670]
-      original-request: [req_DP6t5FcijyGXeR]
-      request-id: [req_DP6t5FcijyGXeR]
+      idempotency-key: [payin_2170]
+      original-request: [req_QjGXcMgP0jiW5g]
+      request-id: [req_QjGXcMgP0jiW5g]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 400, message: Bad Request}
 - request:
-    body: amount=10000&currency=eur&customer=cus_HVXw26RUl9t8v8&metadata[payin_id]=1671&source=src_1GwWqpFk4eGpfLOC099akWU5&statement_descriptor=Liberapay+1671&expand[0]=balance_transaction
+    body: amount=10000&currency=eur&customer=cus_JZBAeaOb7L4PVu&description=Liberapay&metadata[payin_id]=2171&source=src_1Iw2o9Fk4eGpfLOCOLpAaC9X&statement_descriptor=Liberapay+2171&expand[0]=balance_transaction
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/charges
   response:
-    body: {string: "{\n  \"id\": \"py_1GwWtLFk4eGpfLOCpGX93Y9t\",\n  \"object\": \"\
-        charge\",\n  \"amount\": 10000,\n  \"amount_refunded\": 0,\n  \"application\"\
-        : null,\n  \"application_fee\": null,\n  \"application_fee_amount\": null,\n\
-        \  \"balance_transaction\": null,\n  \"billing_details\": {\n    \"address\"\
-        : {\n      \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n\
-        \      \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
-        \    },\n    \"email\": \"donor@example.com\",\n    \"name\": \"Jane Doe\"\
-        ,\n    \"phone\": null\n  },\n  \"calculated_statement_descriptor\": null,\n\
-        \  \"captured\": true,\n  \"created\": 1592760219,\n  \"currency\": \"eur\"\
-        ,\n  \"customer\": \"cus_HVXw26RUl9t8v8\",\n  \"description\": null,\n  \"\
-        destination\": null,\n  \"dispute\": null,\n  \"disputed\": false,\n  \"failure_code\"\
-        : null,\n  \"failure_message\": null,\n  \"fraud_details\": {\n  },\n  \"\
-        invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n    \"payin_id\"\
-        : \"1671\"\n  },\n  \"on_behalf_of\": null,\n  \"order\": null,\n  \"outcome\"\
-        : {\n    \"network_status\": \"approved_by_network\",\n    \"reason\": null,\n\
-        \    \"risk_level\": \"not_assessed\",\n    \"seller_message\": \"Payment\
-        \ complete.\",\n    \"type\": \"authorized\"\n  },\n  \"paid\": false,\n \
-        \ \"payment_intent\": null,\n  \"payment_method\": \"src_1GwWqpFk4eGpfLOC099akWU5\"\
+    body: {string: "{\n  \"id\": \"py_1Iw2oAFk4eGpfLOCgRXXcffb\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 10000,\n  \"amount_captured\": 10000,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": null,\n  \"application_fee\": null,\n  \"application_fee_amount\"\
+        : null,\n  \"balance_transaction\": null,\n  \"billing_details\": {\n    \"\
+        address\": {\n      \"city\": null,\n      \"country\": \"FR\",\n      \"\
+        line1\": null,\n      \"line2\": null,\n      \"postal_code\": null,\n   \
+        \   \"state\": null\n    },\n    \"email\": \"donor@example.com\",\n    \"\
+        name\": \"Jane Doe\",\n    \"phone\": null\n  },\n  \"calculated_statement_descriptor\"\
+        : null,\n  \"captured\": true,\n  \"created\": 1622197250,\n  \"currency\"\
+        : \"eur\",\n  \"customer\": \"cus_JZBAeaOb7L4PVu\",\n  \"description\": \"\
+        Liberapay\",\n  \"destination\": null,\n  \"dispute\": null,\n  \"disputed\"\
+        : false,\n  \"failure_code\": null,\n  \"failure_message\": null,\n  \"fraud_details\"\
+        : {\n  },\n  \"invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n\
+        \    \"payin_id\": \"2171\"\n  },\n  \"on_behalf_of\": null,\n  \"order\"\
+        : null,\n  \"outcome\": {\n    \"network_status\": \"approved_by_network\"\
+        ,\n    \"reason\": null,\n    \"risk_level\": \"not_assessed\",\n    \"seller_message\"\
+        : \"Payment complete.\",\n    \"type\": \"authorized\"\n  },\n  \"paid\":\
+        \ false,\n  \"payment_intent\": null,\n  \"payment_method\": \"src_1Iw2o9Fk4eGpfLOCOLpAaC9X\"\
         ,\n  \"payment_method_details\": {\n    \"sepa_debit\": {\n      \"bank_code\"\
         : \"20041\",\n      \"branch_code\": \"01005\",\n      \"country\": \"FR\"\
         ,\n      \"fingerprint\": \"bevtMDy4Cud4ZswV\",\n      \"last4\": \"2606\"\
@@ -2265,18 +2739,18 @@ interactions:
         \ \"receipt_email\": null,\n  \"receipt_number\": null,\n  \"receipt_url\"\
         : null,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\"\
         ,\n    \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\"\
-        : 0,\n    \"url\": \"/v1/charges/py_1GwWtLFk4eGpfLOCpGX93Y9t/refunds\"\n \
+        : 0,\n    \"url\": \"/v1/charges/py_1Iw2oAFk4eGpfLOCgRXXcffb/refunds\"\n \
         \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
-        id\": \"src_1GwWqpFk4eGpfLOC099akWU5\",\n    \"object\": \"source\",\n   \
-        \ \"amount\": null,\n    \"client_secret\": \"src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
-        ,\n    \"created\": 1592760219,\n    \"currency\": \"eur\",\n    \"customer\"\
-        : \"cus_HVXw26RUl9t8v8\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
+        id\": \"src_1Iw2o9Fk4eGpfLOCOLpAaC9X\",\n    \"object\": \"source\",\n   \
+        \ \"amount\": null,\n    \"client_secret\": \"src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
+        ,\n    \"created\": 1622197251,\n    \"currency\": \"eur\",\n    \"customer\"\
+        : \"cus_JZBAeaOb7L4PVu\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
         \    \"mandate\": {\n      \"acceptance\": {\n        \"date\": null,\n  \
         \      \"ip\": null,\n        \"offline\": null,\n        \"online\": null,\n\
         \        \"status\": \"pending\",\n        \"type\": null,\n        \"user_agent\"\
         : null\n      },\n      \"amount\": null,\n      \"currency\": null,\n   \
         \   \"interval\": \"variable\",\n      \"notification_method\": \"none\",\n\
-        \      \"reference\": \"W9MCQ0MHJ2VEZLGR\",\n      \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
+        \      \"reference\": \"TYHWOARBAAGYFGBG\",\n      \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
         \n    },\n    \"metadata\": {\n    },\n    \"owner\": {\n      \"address\"\
         : {\n        \"city\": null,\n        \"country\": \"FR\",\n        \"line1\"\
         : null,\n        \"line2\": null,\n        \"postal_code\": null,\n      \
@@ -2286,18 +2760,18 @@ interactions:
         \      \"verified_phone\": null\n    },\n    \"sepa_debit\": {\n      \"last4\"\
         : \"2606\",\n      \"bank_code\": \"20041\",\n      \"branch_code\": \"01005\"\
         ,\n      \"fingerprint\": \"bevtMDy4Cud4ZswV\",\n      \"country\": \"FR\"\
-        ,\n      \"mandate_reference\": \"W9MCQ0MHJ2VEZLGR\",\n      \"mandate_url\"\
-        : \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
+        ,\n      \"mandate_reference\": \"TYHWOARBAAGYFGBG\",\n      \"mandate_url\"\
+        : \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
         \n    },\n    \"statement_descriptor\": null,\n    \"status\": \"chargeable\"\
         ,\n    \"type\": \"sepa_debit\",\n    \"usage\": \"reusable\"\n  },\n  \"\
-        source_transfer\": null,\n  \"statement_descriptor\": \"Liberapay 1671\",\n\
+        source_transfer\": null,\n  \"statement_descriptor\": \"Liberapay 2171\",\n\
         \  \"statement_descriptor_suffix\": null,\n  \"status\": \"pending\",\n  \"\
         transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['3650']
+      Content-Length: ['3685']
       Content-Type: [application/json]
-      Date: ['Sun, 21 Jun 2020 17:23:39 GMT']
+      Date: ['Fri, 28 May 2021 10:20:51 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2307,9 +2781,9 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [payin_1671]
-      original-request: [req_xG2AqTPhK5jdPQ]
-      request-id: [req_xG2AqTPhK5jdPQ]
+      idempotency-key: [payin_2171]
+      original-request: [req_vvJc69lAG0WG2i]
+      request-id: [req_vvJc69lAG0WG2i]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
@@ -2317,18 +2791,18 @@ interactions:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/sources/src_1GwWqpFk4eGpfLOC099akWU5
+    uri: https://api.stripe.com/v1/sources/src_1Iw2o9Fk4eGpfLOCOLpAaC9X
   response:
-    body: {string: "{\n  \"id\": \"src_1GwWqpFk4eGpfLOC099akWU5\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
-        ,\n  \"created\": 1592760063,\n  \"currency\": \"eur\",\n  \"customer\": \"\
-        cus_HVXw26RUl9t8v8\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
+    body: {string: "{\n  \"id\": \"src_1Iw2o9Fk4eGpfLOCOLpAaC9X\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
+        ,\n  \"created\": 1622197249,\n  \"currency\": \"eur\",\n  \"customer\": \"\
+        cus_JZBAeaOb7L4PVu\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
         mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
         \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
         : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
         \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
-        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"W9MCQ0MHJ2VEZLGR\"\
-        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
+        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"TYHWOARBAAGYFGBG\"\
+        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
         \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
         \  \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n \
         \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
@@ -2337,15 +2811,15 @@ interactions:
         : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
         \  \"sepa_debit\": {\n    \"last4\": \"2606\",\n    \"bank_code\": \"20041\"\
         ,\n    \"branch_code\": \"01005\",\n    \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
-        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"W9MCQ0MHJ2VEZLGR\"\
-        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
+        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"TYHWOARBAAGYFGBG\"\
+        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
         \n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\",\n\
         \  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['1581']
       Content-Type: [application/json]
-      Date: ['Sun, 21 Jun 2020 17:23:39 GMT']
+      Date: ['Fri, 28 May 2021 10:20:51 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2355,25 +2829,25 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_GiupLTsttwjbnB]
+      request-id: [req_YvqgaqZjPty5vp]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/sources/src_1GwWqpFk4eGpfLOC099akWU5
+    uri: https://api.stripe.com/v1/sources/src_1Iw2o9Fk4eGpfLOCOLpAaC9X
   response:
-    body: {string: "{\n  \"id\": \"src_1GwWqpFk4eGpfLOC099akWU5\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
-        ,\n  \"created\": 1592760063,\n  \"currency\": \"eur\",\n  \"customer\": \"\
-        cus_HVXw26RUl9t8v8\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
+    body: {string: "{\n  \"id\": \"src_1Iw2o9Fk4eGpfLOCOLpAaC9X\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
+        ,\n  \"created\": 1622197249,\n  \"currency\": \"eur\",\n  \"customer\": \"\
+        cus_JZBAeaOb7L4PVu\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
         mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
         \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
         : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
         \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
-        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"W9MCQ0MHJ2VEZLGR\"\
-        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
+        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"TYHWOARBAAGYFGBG\"\
+        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
         \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
         \  \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n \
         \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
@@ -2382,15 +2856,15 @@ interactions:
         : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
         \  \"sepa_debit\": {\n    \"last4\": \"2606\",\n    \"bank_code\": \"20041\"\
         ,\n    \"branch_code\": \"01005\",\n    \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
-        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"W9MCQ0MHJ2VEZLGR\"\
-        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
+        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"TYHWOARBAAGYFGBG\"\
+        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
         \n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\",\n\
         \  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['1581']
       Content-Type: [application/json]
-      Date: ['Sun, 21 Jun 2020 17:25:06 GMT']
+      Date: ['Fri, 28 May 2021 10:20:51 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2400,53 +2874,97 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_coCpI4IJMnXC0D]
+      request-id: [req_VResV06BIdxubQ]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/charges/py_1GwWtLFk4eGpfLOCpGX93Y9t
-  response:
-    body: {string: "{\n  \"id\": \"py_1GwWtLFk4eGpfLOCpGX93Y9t\",\n  \"object\": \"\
-        charge\",\n  \"amount\": 10000,\n  \"amount_refunded\": 0,\n  \"application\"\
-        : null,\n  \"application_fee\": null,\n  \"application_fee_amount\": null,\n\
-        \  \"balance_transaction\": \"txn_1GwWtMFk4eGpfLOCYTSVM3Jq\",\n  \"billing_details\"\
-        : {\n    \"address\": {\n      \"city\": null,\n      \"country\": \"FR\"\
-        ,\n      \"line1\": null,\n      \"line2\": null,\n      \"postal_code\":\
-        \ null,\n      \"state\": null\n    },\n    \"email\": \"donor@example.com\"\
-        ,\n    \"name\": \"Jane Doe\",\n    \"phone\": null\n  },\n  \"calculated_statement_descriptor\"\
-        : null,\n  \"captured\": true,\n  \"created\": 1592760219,\n  \"currency\"\
-        : \"eur\",\n  \"customer\": \"cus_HVXw26RUl9t8v8\",\n  \"description\": null,\n\
-        \  \"destination\": null,\n  \"dispute\": null,\n  \"disputed\": false,\n\
-        \  \"failure_code\": null,\n  \"failure_message\": null,\n  \"fraud_details\"\
+    uri: https://api.stripe.com/v1/sources/src_1Iw2o9Fk4eGpfLOCOLpAaC9X
+  response:
+    body: {string: "{\n  \"id\": \"src_1Iw2o9Fk4eGpfLOCOLpAaC9X\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
+        ,\n  \"created\": 1622197249,\n  \"currency\": \"eur\",\n  \"customer\": \"\
+        cus_JZBAeaOb7L4PVu\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
+        mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
+        \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
+        : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
+        \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
+        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"TYHWOARBAAGYFGBG\"\
+        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
+        \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
+        \  \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n \
+        \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
+        \    },\n    \"email\": \"donor@example.com\",\n    \"name\": \"Jane Doe\"\
+        ,\n    \"phone\": null,\n    \"verified_address\": null,\n    \"verified_email\"\
+        : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
+        \  \"sepa_debit\": {\n    \"last4\": \"2606\",\n    \"bank_code\": \"20041\"\
+        ,\n    \"branch_code\": \"01005\",\n    \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
+        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"TYHWOARBAAGYFGBG\"\
+        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
+        \n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\",\n\
+        \  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\n}\n"}
+    headers:
+      Connection: [keep-alive]
+      Content-Length: ['1581']
+      Content-Type: [application/json]
+      Date: ['Fri, 28 May 2021 10:20:52 GMT']
+      Server: [nginx]
+      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
+      access-control-allow-credentials: ['true']
+      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
+      access-control-allow-origin: ['*']
+      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
+          X-Stripe-Privileged-Session-Required']
+      access-control-max-age: ['300']
+      cache-control: ['no-cache, no-store']
+      request-id: [req_ND7A4a3AAiSXRY]
+      stripe-version: ['2019-08-14']
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers: {}
+    method: GET
+    uri: https://api.stripe.com/v1/charges/py_1Iw2oAFk4eGpfLOCgRXXcffb
+  response:
+    body: {string: "{\n  \"id\": \"py_1Iw2oAFk4eGpfLOCgRXXcffb\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 10000,\n  \"amount_captured\": 10000,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": null,\n  \"application_fee\": null,\n  \"application_fee_amount\"\
+        : null,\n  \"balance_transaction\": null,\n  \"billing_details\": {\n    \"\
+        address\": {\n      \"city\": null,\n      \"country\": \"FR\",\n      \"\
+        line1\": null,\n      \"line2\": null,\n      \"postal_code\": null,\n   \
+        \   \"state\": null\n    },\n    \"email\": \"donor@example.com\",\n    \"\
+        name\": \"Jane Doe\",\n    \"phone\": null\n  },\n  \"calculated_statement_descriptor\"\
+        : null,\n  \"captured\": true,\n  \"created\": 1622197250,\n  \"currency\"\
+        : \"eur\",\n  \"customer\": \"cus_JZBAeaOb7L4PVu\",\n  \"description\": \"\
+        Liberapay\",\n  \"destination\": null,\n  \"dispute\": null,\n  \"disputed\"\
+        : false,\n  \"failure_code\": null,\n  \"failure_message\": null,\n  \"fraud_details\"\
         : {\n  },\n  \"invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n\
-        \    \"payin_id\": \"1671\"\n  },\n  \"on_behalf_of\": null,\n  \"order\"\
+        \    \"payin_id\": \"2171\"\n  },\n  \"on_behalf_of\": null,\n  \"order\"\
         : null,\n  \"outcome\": {\n    \"network_status\": \"approved_by_network\"\
         ,\n    \"reason\": null,\n    \"risk_level\": \"not_assessed\",\n    \"seller_message\"\
         : \"Payment complete.\",\n    \"type\": \"authorized\"\n  },\n  \"paid\":\
-        \ true,\n  \"payment_intent\": null,\n  \"payment_method\": \"src_1GwWqpFk4eGpfLOC099akWU5\"\
+        \ false,\n  \"payment_intent\": null,\n  \"payment_method\": \"src_1Iw2o9Fk4eGpfLOCOLpAaC9X\"\
         ,\n  \"payment_method_details\": {\n    \"sepa_debit\": {\n      \"bank_code\"\
         : \"20041\",\n      \"branch_code\": \"01005\",\n      \"country\": \"FR\"\
         ,\n      \"fingerprint\": \"bevtMDy4Cud4ZswV\",\n      \"last4\": \"2606\"\
         ,\n      \"mandate\": null\n    },\n    \"type\": \"sepa_debit\"\n  },\n \
         \ \"receipt_email\": null,\n  \"receipt_number\": null,\n  \"receipt_url\"\
-        : \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/py_1GwWtLFk4eGpfLOCpGX93Y9t/rcpt_HVXzDDCmNzw6eljH54HCZTsm4YivkNP\"\
-        ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
-        \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
-        \ 0,\n    \"url\": \"/v1/charges/py_1GwWtLFk4eGpfLOCpGX93Y9t/refunds\"\n \
+        : null,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\"\
+        ,\n    \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\"\
+        : 0,\n    \"url\": \"/v1/charges/py_1Iw2oAFk4eGpfLOCgRXXcffb/refunds\"\n \
         \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
-        id\": \"src_1GwWqpFk4eGpfLOC099akWU5\",\n    \"object\": \"source\",\n   \
-        \ \"amount\": null,\n    \"client_secret\": \"src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
-        ,\n    \"created\": 1592760219,\n    \"currency\": \"eur\",\n    \"customer\"\
-        : \"cus_HVXw26RUl9t8v8\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
+        id\": \"src_1Iw2o9Fk4eGpfLOCOLpAaC9X\",\n    \"object\": \"source\",\n   \
+        \ \"amount\": null,\n    \"client_secret\": \"src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
+        ,\n    \"created\": 1622197251,\n    \"currency\": \"eur\",\n    \"customer\"\
+        : \"cus_JZBAeaOb7L4PVu\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
         \    \"mandate\": {\n      \"acceptance\": {\n        \"date\": null,\n  \
         \      \"ip\": null,\n        \"offline\": null,\n        \"online\": null,\n\
         \        \"status\": \"pending\",\n        \"type\": null,\n        \"user_agent\"\
         : null\n      },\n      \"amount\": null,\n      \"currency\": null,\n   \
         \   \"interval\": \"variable\",\n      \"notification_method\": \"none\",\n\
-        \      \"reference\": \"W9MCQ0MHJ2VEZLGR\",\n      \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
+        \      \"reference\": \"TYHWOARBAAGYFGBG\",\n      \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
         \n    },\n    \"metadata\": {\n    },\n    \"owner\": {\n      \"address\"\
         : {\n        \"city\": null,\n        \"country\": \"FR\",\n        \"line1\"\
         : null,\n        \"line2\": null,\n        \"postal_code\": null,\n      \
@@ -2456,95 +2974,18 @@ interactions:
         \      \"verified_phone\": null\n    },\n    \"sepa_debit\": {\n      \"last4\"\
         : \"2606\",\n      \"bank_code\": \"20041\",\n      \"branch_code\": \"01005\"\
         ,\n      \"fingerprint\": \"bevtMDy4Cud4ZswV\",\n      \"country\": \"FR\"\
-        ,\n      \"mandate_reference\": \"W9MCQ0MHJ2VEZLGR\",\n      \"mandate_url\"\
-        : \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
+        ,\n      \"mandate_reference\": \"TYHWOARBAAGYFGBG\",\n      \"mandate_url\"\
+        : \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
         \n    },\n    \"statement_descriptor\": null,\n    \"status\": \"chargeable\"\
         ,\n    \"type\": \"sepa_debit\",\n    \"usage\": \"reusable\"\n  },\n  \"\
-        source_transfer\": null,\n  \"statement_descriptor\": \"Liberapay 1671\",\n\
-        \  \"statement_descriptor_suffix\": null,\n  \"status\": \"succeeded\",\n\
-        \  \"transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
-    headers:
-      Connection: [keep-alive]
-      Content-Length: ['3793']
-      Content-Type: [application/json]
-      Date: ['Sun, 21 Jun 2020 17:25:07 GMT']
-      Server: [nginx]
-      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
-      access-control-allow-credentials: ['true']
-      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
-      access-control-allow-origin: ['*']
-      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
-          X-Stripe-Privileged-Session-Required']
-      access-control-max-age: ['300']
-      cache-control: ['no-cache, no-store']
-      request-id: [req_ssqcZ7zDB6NBBk]
-      stripe-version: ['2019-08-14']
-    status: {code: 200, message: OK}
-- request:
-    body: null
-    headers: {}
-    method: GET
-    uri: https://api.stripe.com/v1/balance_transactions/txn_1GwWtMFk4eGpfLOCYTSVM3Jq
-  response:
-    body: {string: "{\n  \"id\": \"txn_1GwWtMFk4eGpfLOCYTSVM3Jq\",\n  \"object\":\
-        \ \"balance_transaction\",\n  \"amount\": 10000,\n  \"available_on\": 1593043200,\n\
-        \  \"created\": 1592760220,\n  \"currency\": \"eur\",\n  \"description\":\
-        \ null,\n  \"exchange_rate\": null,\n  \"fee\": 105,\n  \"fee_details\": [\n\
-        \    {\n      \"amount\": 105,\n      \"application\": null,\n      \"currency\"\
-        : \"eur\",\n      \"description\": \"Stripe processing fees\",\n      \"type\"\
-        : \"stripe_fee\"\n    }\n  ],\n  \"net\": 9895,\n  \"reporting_category\"\
-        : \"charge\",\n  \"source\": \"py_1GwWtLFk4eGpfLOCpGX93Y9t\",\n  \"status\"\
-        : \"pending\",\n  \"type\": \"payment\"\n}\n"}
-    headers:
-      Connection: [keep-alive]
-      Content-Length: ['554']
-      Content-Type: [application/json]
-      Date: ['Sun, 21 Jun 2020 17:25:07 GMT']
-      Server: [nginx]
-      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
-      access-control-allow-credentials: ['true']
-      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
-      access-control-allow-origin: ['*']
-      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
-          X-Stripe-Privileged-Session-Required']
-      access-control-max-age: ['300']
-      cache-control: ['no-cache, no-store']
-      request-id: [req_oVE1IWm8u4lAkn]
-      stripe-version: ['2019-08-14']
-    status: {code: 200, message: OK}
-- request:
-    body: null
-    headers: {}
-    method: GET
-    uri: https://api.stripe.com/v1/sources/src_1GwWqpFk4eGpfLOC099akWU5
-  response:
-    body: {string: "{\n  \"id\": \"src_1GwWqpFk4eGpfLOC099akWU5\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
-        ,\n  \"created\": 1592760063,\n  \"currency\": \"eur\",\n  \"customer\": \"\
-        cus_HVXw26RUl9t8v8\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
-        mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
-        \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
-        : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
-        \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
-        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"W9MCQ0MHJ2VEZLGR\"\
-        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
-        \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
-        \  \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n \
-        \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
-        \    },\n    \"email\": \"donor@example.com\",\n    \"name\": \"Jane Doe\"\
-        ,\n    \"phone\": null,\n    \"verified_address\": null,\n    \"verified_email\"\
-        : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
-        \  \"sepa_debit\": {\n    \"last4\": \"2606\",\n    \"bank_code\": \"20041\"\
-        ,\n    \"branch_code\": \"01005\",\n    \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
-        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"W9MCQ0MHJ2VEZLGR\"\
-        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
-        \n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\",\n\
-        \  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\n}\n"}
+        source_transfer\": null,\n  \"statement_descriptor\": \"Liberapay 2171\",\n\
+        \  \"statement_descriptor_suffix\": null,\n  \"status\": \"pending\",\n  \"\
+        transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['1581']
+      Content-Length: ['3685']
       Content-Type: [application/json]
-      Date: ['Sun, 21 Jun 2020 17:38:36 GMT']
+      Date: ['Fri, 28 May 2021 10:20:52 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2554,43 +2995,75 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_ITW5PZ9zrONknE]
+      request-id: [req_0KQo1gkjAJdqPn]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/sources/src_1GVfmUFk4eGpfLOCe5TNONii
+    uri: https://api.stripe.com/v1/charges/py_1Iw2oAFk4eGpfLOCgRXXcffb
   response:
-    body: {string: "{\n  \"id\": \"src_1GVfmUFk4eGpfLOCe5TNONii\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": 5200,\n  \"client_secret\": \"src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
-        ,\n  \"created\": 1586359534,\n  \"currency\": \"eur\",\n  \"customer\": \"\
-        cus_H3nNPCdpWqqLZR\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
-        mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
-        \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
-        : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
-        \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
-        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"GQRBWRPGVJAPHAQG\"\
-        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmUFk4eGpfLOCe5TNONii/src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
-        \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
-        \  \"city\": null,\n      \"country\": \"DE\",\n      \"line1\": null,\n \
-        \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
-        \    },\n    \"email\": \"donor@example.com\",\n    \"name\": \"Jane Doe\"\
-        ,\n    \"phone\": null,\n    \"verified_address\": null,\n    \"verified_email\"\
-        : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
-        \  \"sepa_debit\": {\n    \"last4\": \"3000\",\n    \"bank_code\": \"37040044\"\
-        ,\n    \"fingerprint\": \"VNz5BVW8XnYcq3XT\",\n    \"country\": \"DE\",\n\
-        \    \"mandate_reference\": \"GQRBWRPGVJAPHAQG\",\n    \"mandate_url\": \"\
-        https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmUFk4eGpfLOCe5TNONii/src_client_secret_kj23fN32n4i3Go8ii9AcaCOB\"\
-        ,\n    \"branch_code\": null\n  },\n  \"statement_descriptor\": null,\n  \"\
-        status\": \"chargeable\",\n  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\
-        \n}\n"}
+    body: {string: "{\n  \"id\": \"py_1Iw2oAFk4eGpfLOCgRXXcffb\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 10000,\n  \"amount_captured\": 10000,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": null,\n  \"application_fee\": null,\n  \"application_fee_amount\"\
+        : null,\n  \"balance_transaction\": \"txn_1Iw2oFFk4eGpfLOCqsHlurdm\",\n  \"\
+        billing_details\": {\n    \"address\": {\n      \"city\": null,\n      \"\
+        country\": \"FR\",\n      \"line1\": null,\n      \"line2\": null,\n     \
+        \ \"postal_code\": null,\n      \"state\": null\n    },\n    \"email\": \"\
+        donor@example.com\",\n    \"name\": \"Jane Doe\",\n    \"phone\": null\n \
+        \ },\n  \"calculated_statement_descriptor\": null,\n  \"captured\": true,\n\
+        \  \"created\": 1622197250,\n  \"currency\": \"eur\",\n  \"customer\": \"\
+        cus_JZBAeaOb7L4PVu\",\n  \"description\": \"Liberapay\",\n  \"destination\"\
+        : null,\n  \"dispute\": null,\n  \"disputed\": false,\n  \"failure_code\"\
+        : null,\n  \"failure_message\": null,\n  \"fraud_details\": {\n  },\n  \"\
+        invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n    \"payin_id\"\
+        : \"2171\"\n  },\n  \"on_behalf_of\": null,\n  \"order\": null,\n  \"outcome\"\
+        : {\n    \"network_status\": \"approved_by_network\",\n    \"reason\": null,\n\
+        \    \"risk_level\": \"not_assessed\",\n    \"seller_message\": \"Payment\
+        \ complete.\",\n    \"type\": \"authorized\"\n  },\n  \"paid\": true,\n  \"\
+        payment_intent\": null,\n  \"payment_method\": \"src_1Iw2o9Fk4eGpfLOCOLpAaC9X\"\
+        ,\n  \"payment_method_details\": {\n    \"sepa_debit\": {\n      \"bank_code\"\
+        : \"20041\",\n      \"branch_code\": \"01005\",\n      \"country\": \"FR\"\
+        ,\n      \"fingerprint\": \"bevtMDy4Cud4ZswV\",\n      \"last4\": \"2606\"\
+        ,\n      \"mandate\": null\n    },\n    \"type\": \"sepa_debit\"\n  },\n \
+        \ \"receipt_email\": null,\n  \"receipt_number\": null,\n  \"receipt_url\"\
+        : \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/py_1Iw2oAFk4eGpfLOCgRXXcffb/rcpt_JZBA5p27i9gGYzaP0EqjGIKlSCkNGXx\"\
+        ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
+        \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
+        \ 0,\n    \"url\": \"/v1/charges/py_1Iw2oAFk4eGpfLOCgRXXcffb/refunds\"\n \
+        \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
+        id\": \"src_1Iw2o9Fk4eGpfLOCOLpAaC9X\",\n    \"object\": \"source\",\n   \
+        \ \"amount\": null,\n    \"client_secret\": \"src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
+        ,\n    \"created\": 1622197251,\n    \"currency\": \"eur\",\n    \"customer\"\
+        : \"cus_JZBAeaOb7L4PVu\",\n    \"flow\": \"none\",\n    \"livemode\": false,\n\
+        \    \"mandate\": {\n      \"acceptance\": {\n        \"date\": null,\n  \
+        \      \"ip\": null,\n        \"offline\": null,\n        \"online\": null,\n\
+        \        \"status\": \"pending\",\n        \"type\": null,\n        \"user_agent\"\
+        : null\n      },\n      \"amount\": null,\n      \"currency\": null,\n   \
+        \   \"interval\": \"variable\",\n      \"notification_method\": \"none\",\n\
+        \      \"reference\": \"TYHWOARBAAGYFGBG\",\n      \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
+        \n    },\n    \"metadata\": {\n    },\n    \"owner\": {\n      \"address\"\
+        : {\n        \"city\": null,\n        \"country\": \"FR\",\n        \"line1\"\
+        : null,\n        \"line2\": null,\n        \"postal_code\": null,\n      \
+        \  \"state\": null\n      },\n      \"email\": \"donor@example.com\",\n  \
+        \    \"name\": \"Jane Doe\",\n      \"phone\": null,\n      \"verified_address\"\
+        : null,\n      \"verified_email\": null,\n      \"verified_name\": null,\n\
+        \      \"verified_phone\": null\n    },\n    \"sepa_debit\": {\n      \"last4\"\
+        : \"2606\",\n      \"bank_code\": \"20041\",\n      \"branch_code\": \"01005\"\
+        ,\n      \"fingerprint\": \"bevtMDy4Cud4ZswV\",\n      \"country\": \"FR\"\
+        ,\n      \"mandate_reference\": \"TYHWOARBAAGYFGBG\",\n      \"mandate_url\"\
+        : \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
+        \n    },\n    \"statement_descriptor\": null,\n    \"status\": \"chargeable\"\
+        ,\n    \"type\": \"sepa_debit\",\n    \"usage\": \"reusable\"\n  },\n  \"\
+        source_transfer\": null,\n  \"statement_descriptor\": \"Liberapay 2171\",\n\
+        \  \"statement_descriptor_suffix\": null,\n  \"status\": \"succeeded\",\n\
+        \  \"transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['1581']
+      Content-Length: ['3828']
       Content-Type: [application/json]
-      Date: ['Fri, 01 Jan 2021 09:28:38 GMT']
+      Date: ['Fri, 28 May 2021 10:21:03 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2600,42 +3073,29 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_t4q1zcqlCNMGyw]
+      request-id: [req_WCQDRux7qswOOg]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/sources/src_1GVfmaFk4eGpfLOCvkI01RbI
+    uri: https://api.stripe.com/v1/balance_transactions/txn_1Iw2oFFk4eGpfLOCqsHlurdm
   response:
-    body: {string: "{\n  \"id\": \"src_1GVfmaFk4eGpfLOCvkI01RbI\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
-        ,\n  \"created\": 1586359540,\n  \"currency\": \"eur\",\n  \"customer\": \"\
-        cus_H3nNLyErBliltd\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
-        mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
-        \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
-        : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
-        \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
-        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"WXNWNGBR4FQMBW7I\"\
-        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
-        \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
-        \  \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n \
-        \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
-        \    },\n    \"email\": \"donor@example.com\",\n    \"name\": \"Jane Doe\"\
-        ,\n    \"phone\": null,\n    \"verified_address\": null,\n    \"verified_email\"\
-        : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
-        \  \"sepa_debit\": {\n    \"last4\": \"2606\",\n    \"bank_code\": \"20041\"\
-        ,\n    \"branch_code\": \"01005\",\n    \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
-        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"WXNWNGBR4FQMBW7I\"\
-        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GVfmaFk4eGpfLOCvkI01RbI/src_client_secret_htLpl1mft7YxN3JS5kEfi84A\"\
-        \n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\",\n\
-        \  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\n}\n"}
+    body: {string: "{\n  \"id\": \"txn_1Iw2oFFk4eGpfLOCqsHlurdm\",\n  \"object\":\
+        \ \"balance_transaction\",\n  \"amount\": 10000,\n  \"available_on\": 1622592000,\n\
+        \  \"created\": 1622197255,\n  \"currency\": \"eur\",\n  \"description\":\
+        \ \"Liberapay\",\n  \"exchange_rate\": null,\n  \"fee\": 105,\n  \"fee_details\"\
+        : [\n    {\n      \"amount\": 105,\n      \"application\": null,\n      \"\
+        currency\": \"eur\",\n      \"description\": \"Stripe processing fees\",\n\
+        \      \"type\": \"stripe_fee\"\n    }\n  ],\n  \"net\": 9895,\n  \"reporting_category\"\
+        : \"charge\",\n  \"source\": \"py_1Iw2oAFk4eGpfLOCgRXXcffb\",\n  \"status\"\
+        : \"pending\",\n  \"type\": \"payment\"\n}\n"}
     headers:
       Connection: [keep-alive]
-      Content-Length: ['1581']
+      Content-Length: ['561']
       Content-Type: [application/json]
-      Date: ['Fri, 01 Jan 2021 09:28:39 GMT']
+      Date: ['Fri, 28 May 2021 10:21:03 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2645,25 +3105,25 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_z2PHXL8RslSo5S]
+      request-id: [req_esxJ9S3hWdn35X]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/sources/src_1GwWqpFk4eGpfLOC099akWU5
+    uri: https://api.stripe.com/v1/sources/src_1Iw2o9Fk4eGpfLOCOLpAaC9X
   response:
-    body: {string: "{\n  \"id\": \"src_1GwWqpFk4eGpfLOC099akWU5\",\n  \"object\":\
-        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
-        ,\n  \"created\": 1592760063,\n  \"currency\": \"eur\",\n  \"customer\": \"\
-        cus_HVXw26RUl9t8v8\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
+    body: {string: "{\n  \"id\": \"src_1Iw2o9Fk4eGpfLOCOLpAaC9X\",\n  \"object\":\
+        \ \"source\",\n  \"amount\": null,\n  \"client_secret\": \"src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
+        ,\n  \"created\": 1622197249,\n  \"currency\": \"eur\",\n  \"customer\": \"\
+        cus_JZBAeaOb7L4PVu\",\n  \"flow\": \"none\",\n  \"livemode\": false,\n  \"\
         mandate\": {\n    \"acceptance\": {\n      \"date\": null,\n      \"ip\":\
         \ null,\n      \"offline\": null,\n      \"online\": null,\n      \"status\"\
         : \"pending\",\n      \"type\": null,\n      \"user_agent\": null\n    },\n\
         \    \"amount\": null,\n    \"currency\": null,\n    \"interval\": \"variable\"\
-        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"W9MCQ0MHJ2VEZLGR\"\
-        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
+        ,\n    \"notification_method\": \"none\",\n    \"reference\": \"TYHWOARBAAGYFGBG\"\
+        ,\n    \"url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
         \n  },\n  \"metadata\": {\n  },\n  \"owner\": {\n    \"address\": {\n    \
         \  \"city\": null,\n      \"country\": \"FR\",\n      \"line1\": null,\n \
         \     \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
@@ -2672,15 +3132,15 @@ interactions:
         : null,\n    \"verified_name\": null,\n    \"verified_phone\": null\n  },\n\
         \  \"sepa_debit\": {\n    \"last4\": \"2606\",\n    \"bank_code\": \"20041\"\
         ,\n    \"branch_code\": \"01005\",\n    \"fingerprint\": \"bevtMDy4Cud4ZswV\"\
-        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"W9MCQ0MHJ2VEZLGR\"\
-        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1GwWqpFk4eGpfLOC099akWU5/src_client_secret_M9YbmMG9mBRivE1ff3iA4E2Y\"\
+        ,\n    \"country\": \"FR\",\n    \"mandate_reference\": \"TYHWOARBAAGYFGBG\"\
+        ,\n    \"mandate_url\": \"https://hooks.stripe.com/adapter/sepa_debit/file/src_1Iw2o9Fk4eGpfLOCOLpAaC9X/src_client_secret_q1pH2FRIbLMuWIsLzr9qF8pi\"\
         \n  },\n  \"statement_descriptor\": null,\n  \"status\": \"chargeable\",\n\
         \  \"type\": \"sepa_debit\",\n  \"usage\": \"reusable\"\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['1581']
       Content-Type: [application/json]
-      Date: ['Fri, 01 Jan 2021 09:28:41 GMT']
+      Date: ['Fri, 28 May 2021 10:21:03 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2690,7 +3150,7 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_ySTp9dEVqAYZen]
+      request-id: [req_q0luazpG9wd2ZQ]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
@@ -2699,26 +3159,26 @@ interactions:
     method: GET
     uri: https://api.stripe.com/v1/payment_methods/pm_card_jp
   response:
-    body: {string: "{\n  \"id\": \"pm_1IUWRHFk4eGpfLOCBXzW1H1b\",\n  \"object\": \"\
+    body: {string: "{\n  \"id\": \"pm_1Iw2oOFk4eGpfLOCsnlvI9lX\",\n  \"object\": \"\
         payment_method\",\n  \"billing_details\": {\n    \"address\": {\n      \"\
         city\": null,\n      \"country\": null,\n      \"line1\": null,\n      \"\
         line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n    },\n\
         \    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n  },\n  \"\
         card\": {\n    \"brand\": \"visa\",\n    \"checks\": {\n      \"address_line1_check\"\
         : null,\n      \"address_postal_code_check\": null,\n      \"cvc_check\":\
-        \ null\n    },\n    \"country\": \"JP\",\n    \"exp_month\": 3,\n    \"exp_year\"\
+        \ null\n    },\n    \"country\": \"JP\",\n    \"exp_month\": 5,\n    \"exp_year\"\
         : 2022,\n    \"fingerprint\": \"4heNPBHbDWXWyXBc\",\n    \"funding\": \"credit\"\
         ,\n    \"generated_from\": null,\n    \"last4\": \"0003\",\n    \"networks\"\
         : {\n      \"available\": [\n        \"visa\"\n      ],\n      \"preferred\"\
         : null\n    },\n    \"three_d_secure_usage\": {\n      \"supported\": true\n\
-        \    },\n    \"wallet\": null\n  },\n  \"created\": 1615637968,\n  \"customer\"\
+        \    },\n    \"wallet\": null\n  },\n  \"created\": 1622197264,\n  \"customer\"\
         : null,\n  \"livemode\": false,\n  \"metadata\": {\n  },\n  \"type\": \"card\"\
         \n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['927']
       Content-Type: [application/json]
-      Date: ['Sat, 13 Mar 2021 12:19:28 GMT']
+      Date: ['Fri, 28 May 2021 10:21:04 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2728,38 +3188,38 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_karXaSF7mBdJwx]
+      request-id: [req_gwZIJkBDG4p4eB]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: email=donor%40example.com&payment_method=pm_1IUWRHFk4eGpfLOCBXzW1H1b
+    body: email=donor%40example.com&payment_method=pm_1Iw2oOFk4eGpfLOCsnlvI9lX
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/customers
   response:
-    body: {string: "{\n  \"id\": \"cus_J6jvjjTRgtCMIb\",\n  \"object\": \"customer\"\
+    body: {string: "{\n  \"id\": \"cus_JZBACuvsJaXlAQ\",\n  \"object\": \"customer\"\
         ,\n  \"account_balance\": 0,\n  \"address\": null,\n  \"balance\": 0,\n  \"\
-        created\": 1615637968,\n  \"currency\": null,\n  \"default_source\": null,\n\
+        created\": 1622197264,\n  \"currency\": null,\n  \"default_source\": null,\n\
         \  \"delinquent\": false,\n  \"description\": null,\n  \"discount\": null,\n\
-        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"43AC63A9\",\n\
+        \  \"email\": \"donor@example.com\",\n  \"invoice_prefix\": \"12376A7F\",\n\
         \  \"invoice_settings\": {\n    \"custom_fields\": null,\n    \"default_payment_method\"\
         : null,\n    \"footer\": null\n  },\n  \"livemode\": false,\n  \"metadata\"\
         : {\n  },\n  \"name\": null,\n  \"next_invoice_sequence\": 1,\n  \"phone\"\
         : null,\n  \"preferred_locales\": [\n\n  ],\n  \"shipping\": null,\n  \"sources\"\
         : {\n    \"object\": \"list\",\n    \"data\": [\n\n    ],\n    \"has_more\"\
-        : false,\n    \"total_count\": 0,\n    \"url\": \"/v1/customers/cus_J6jvjjTRgtCMIb/sources\"\
+        : false,\n    \"total_count\": 0,\n    \"url\": \"/v1/customers/cus_JZBACuvsJaXlAQ/sources\"\
         \n  },\n  \"subscriptions\": {\n    \"object\": \"list\",\n    \"data\": [\n\
         \n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\":\
-        \ \"/v1/customers/cus_J6jvjjTRgtCMIb/subscriptions\"\n  },\n  \"tax_exempt\"\
+        \ \"/v1/customers/cus_JZBACuvsJaXlAQ/subscriptions\"\n  },\n  \"tax_exempt\"\
         : \"none\",\n  \"tax_ids\": {\n    \"object\": \"list\",\n    \"data\": [\n\
         \n    ],\n    \"has_more\": false,\n    \"total_count\": 0,\n    \"url\":\
-        \ \"/v1/customers/cus_J6jvjjTRgtCMIb/tax_ids\"\n  },\n  \"tax_info\": null,\n\
+        \ \"/v1/customers/cus_JZBACuvsJaXlAQ/tax_ids\"\n  },\n  \"tax_info\": null,\n\
         \  \"tax_info_verification\": null\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['1162']
       Content-Type: [application/json]
-      Date: ['Sat, 13 Mar 2021 12:19:29 GMT']
+      Date: ['Fri, 28 May 2021 10:21:05 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2769,85 +3229,85 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [create_customer_for_participant_1680_with_pm_1IUWRHFk4eGpfLOCBXzW1H1b]
-      original-request: [req_yRVxn2kjpHeaTe]
-      request-id: [req_yRVxn2kjpHeaTe]
+      idempotency-key: [create_customer_for_participant_2180_with_pm_1Iw2oOFk4eGpfLOCsnlvI9lX]
+      original-request: [req_p9wLoR2ULkjS6I]
+      request-id: [req_p9wLoR2ULkjS6I]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=10000&confirm=True&currency=eur&customer=cus_J6jvjjTRgtCMIb&description=Liberapay&metadata[payin_id]=1680&off_session=False&payment_method=pm_1IUWRHFk4eGpfLOCBXzW1H1b&return_url=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2F1680&statement_descriptor=Liberapay+1680
+    body: amount=10000&confirm=True&currency=eur&customer=cus_JZBACuvsJaXlAQ&description=Liberapay&metadata[payin_id]=2180&off_session=False&payment_method=pm_1Iw2oOFk4eGpfLOCsnlvI9lX&return_url=http%3A%2F%2Flocalhost%2Fdonor%2Fgiving%2Fpay%2Fstripe%2F2180&statement_descriptor=Liberapay+2180
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/payment_intents
   response:
-    body: {string: "{\n  \"id\": \"pi_1IUWRJFk4eGpfLOC4o94DED9\",\n  \"object\": \"\
+    body: {string: "{\n  \"id\": \"pi_1Iw2oPFk4eGpfLOC2k9tBB7h\",\n  \"object\": \"\
         payment_intent\",\n  \"amount\": 10000,\n  \"amount_capturable\": 0,\n  \"\
         amount_received\": 10000,\n  \"application\": null,\n  \"application_fee_amount\"\
         : null,\n  \"canceled_at\": null,\n  \"cancellation_reason\": null,\n  \"\
         capture_method\": \"automatic\",\n  \"charges\": {\n    \"object\": \"list\"\
-        ,\n    \"data\": [\n      {\n        \"id\": \"ch_1IUWRJFk4eGpfLOCembbE8Yt\"\
+        ,\n    \"data\": [\n      {\n        \"id\": \"ch_1Iw2oPFk4eGpfLOC5rHYlexD\"\
         ,\n        \"object\": \"charge\",\n        \"amount\": 10000,\n        \"\
         amount_captured\": 10000,\n        \"amount_refunded\": 0,\n        \"application\"\
         : null,\n        \"application_fee\": null,\n        \"application_fee_amount\"\
-        : null,\n        \"balance_transaction\": \"txn_1IUWRKFk4eGpfLOCQ6Ntcwq9\"\
+        : null,\n        \"balance_transaction\": \"txn_1Iw2oQFk4eGpfLOCVyTQMML1\"\
         ,\n        \"billing_details\": {\n          \"address\": {\n            \"\
         city\": null,\n            \"country\": null,\n            \"line1\": null,\n\
         \            \"line2\": null,\n            \"postal_code\": null,\n      \
         \      \"state\": null\n          },\n          \"email\": null,\n       \
         \   \"name\": null,\n          \"phone\": null\n        },\n        \"calculated_statement_descriptor\"\
-        : \"LIBERAPAY 1680\",\n        \"captured\": true,\n        \"created\": 1615637969,\n\
-        \        \"currency\": \"eur\",\n        \"customer\": \"cus_J6jvjjTRgtCMIb\"\
+        : \"LIBERAPAY 2180\",\n        \"captured\": true,\n        \"created\": 1622197265,\n\
+        \        \"currency\": \"eur\",\n        \"customer\": \"cus_JZBACuvsJaXlAQ\"\
         ,\n        \"description\": \"Liberapay\",\n        \"destination\": null,\n\
         \        \"dispute\": null,\n        \"disputed\": false,\n        \"failure_code\"\
         : null,\n        \"failure_message\": null,\n        \"fraud_details\": {\n\
         \        },\n        \"invoice\": null,\n        \"livemode\": false,\n  \
-        \      \"metadata\": {\n          \"payin_id\": \"1680\"\n        },\n   \
+        \      \"metadata\": {\n          \"payin_id\": \"2180\"\n        },\n   \
         \     \"on_behalf_of\": null,\n        \"order\": null,\n        \"outcome\"\
         : {\n          \"network_status\": \"approved_by_network\",\n          \"\
         reason\": null,\n          \"risk_level\": \"normal\",\n          \"risk_score\"\
-        : 11,\n          \"seller_message\": \"Payment complete.\",\n          \"\
+        : 39,\n          \"seller_message\": \"Payment complete.\",\n          \"\
         type\": \"authorized\"\n        },\n        \"paid\": true,\n        \"payment_intent\"\
-        : \"pi_1IUWRJFk4eGpfLOC4o94DED9\",\n        \"payment_method\": \"pm_1IUWRHFk4eGpfLOCBXzW1H1b\"\
+        : \"pi_1Iw2oPFk4eGpfLOC2k9tBB7h\",\n        \"payment_method\": \"pm_1Iw2oOFk4eGpfLOCsnlvI9lX\"\
         ,\n        \"payment_method_details\": {\n          \"card\": {\n        \
         \    \"brand\": \"visa\",\n            \"checks\": {\n              \"address_line1_check\"\
         : null,\n              \"address_postal_code_check\": null,\n            \
         \  \"cvc_check\": null\n            },\n            \"country\": \"JP\",\n\
-        \            \"exp_month\": 3,\n            \"exp_year\": 2022,\n        \
+        \            \"exp_month\": 5,\n            \"exp_year\": 2022,\n        \
         \    \"fingerprint\": \"4heNPBHbDWXWyXBc\",\n            \"funding\": \"credit\"\
         ,\n            \"installments\": null,\n            \"last4\": \"0003\",\n\
         \            \"network\": \"visa\",\n            \"three_d_secure\": null,\n\
         \            \"wallet\": null\n          },\n          \"type\": \"card\"\n\
         \        },\n        \"receipt_email\": null,\n        \"receipt_number\"\
-        : null,\n        \"receipt_url\": \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/ch_1IUWRJFk4eGpfLOCembbE8Yt/rcpt_J6jv0cWVVo9T90rHPx4abDSgWXgL35j\"\
+        : null,\n        \"receipt_url\": \"https://pay.stripe.com/receipts/acct_1ChyayFk4eGpfLOC/ch_1Iw2oPFk4eGpfLOC5rHYlexD/rcpt_JZBAF1fgSWgtM4q5tjoSj2OJvLhqVYu\"\
         ,\n        \"refunded\": false,\n        \"refunds\": {\n          \"object\"\
         : \"list\",\n          \"data\": [\n\n          ],\n          \"has_more\"\
-        : false,\n          \"total_count\": 0,\n          \"url\": \"/v1/charges/ch_1IUWRJFk4eGpfLOCembbE8Yt/refunds\"\
+        : false,\n          \"total_count\": 0,\n          \"url\": \"/v1/charges/ch_1Iw2oPFk4eGpfLOC5rHYlexD/refunds\"\
         \n        },\n        \"review\": null,\n        \"shipping\": null,\n   \
         \     \"source\": null,\n        \"source_transfer\": null,\n        \"statement_descriptor\"\
-        : \"Liberapay 1680\",\n        \"statement_descriptor_suffix\": null,\n  \
+        : \"Liberapay 2180\",\n        \"statement_descriptor_suffix\": null,\n  \
         \      \"status\": \"succeeded\",\n        \"transfer_data\": null,\n    \
         \    \"transfer_group\": null\n      }\n    ],\n    \"has_more\": false,\n\
-        \    \"total_count\": 1,\n    \"url\": \"/v1/charges?payment_intent=pi_1IUWRJFk4eGpfLOC4o94DED9\"\
-        \n  },\n  \"client_secret\": \"pi_1IUWRJFk4eGpfLOC4o94DED9_secret_6ZAMDx3b4jeVSh52PteH41AeZ\"\
-        ,\n  \"confirmation_method\": \"automatic\",\n  \"created\": 1615637969,\n\
-        \  \"currency\": \"eur\",\n  \"customer\": \"cus_J6jvjjTRgtCMIb\",\n  \"description\"\
+        \    \"total_count\": 1,\n    \"url\": \"/v1/charges?payment_intent=pi_1Iw2oPFk4eGpfLOC2k9tBB7h\"\
+        \n  },\n  \"client_secret\": \"pi_1Iw2oPFk4eGpfLOC2k9tBB7h_secret_xhMoZT7qKbaXMYzqVzeNWoXQy\"\
+        ,\n  \"confirmation_method\": \"automatic\",\n  \"created\": 1622197265,\n\
+        \  \"currency\": \"eur\",\n  \"customer\": \"cus_JZBACuvsJaXlAQ\",\n  \"description\"\
         : \"Liberapay\",\n  \"invoice\": null,\n  \"last_payment_error\": null,\n\
-        \  \"livemode\": false,\n  \"metadata\": {\n    \"payin_id\": \"1680\"\n \
+        \  \"livemode\": false,\n  \"metadata\": {\n    \"payin_id\": \"2180\"\n \
         \ },\n  \"next_action\": null,\n  \"on_behalf_of\": null,\n  \"payment_method\"\
-        : \"pm_1IUWRHFk4eGpfLOCBXzW1H1b\",\n  \"payment_method_options\": {\n    \"\
+        : \"pm_1Iw2oOFk4eGpfLOCsnlvI9lX\",\n  \"payment_method_options\": {\n    \"\
         card\": {\n      \"installments\": null,\n      \"network\": null,\n     \
         \ \"request_three_d_secure\": \"automatic\"\n    }\n  },\n  \"payment_method_types\"\
         : [\n    \"card\"\n  ],\n  \"receipt_email\": null,\n  \"review\": null,\n\
         \  \"setup_future_usage\": null,\n  \"shipping\": null,\n  \"source\": null,\n\
-        \  \"statement_descriptor\": \"Liberapay 1680\",\n  \"statement_descriptor_suffix\"\
+        \  \"statement_descriptor\": \"Liberapay 2180\",\n  \"statement_descriptor_suffix\"\
         : null,\n  \"status\": \"succeeded\",\n  \"transfer_data\": null,\n  \"transfer_group\"\
         : null\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['4362']
       Content-Type: [application/json]
-      Date: ['Sat, 13 Mar 2021 12:19:30 GMT']
+      Date: ['Fri, 28 May 2021 10:21:06 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2857,9 +3317,9 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [payin_intent_1680]
-      original-request: [req_qV2vnMjG8YK8Al]
-      request-id: [req_qV2vnMjG8YK8Al]
+      idempotency-key: [payin_intent_2180]
+      original-request: [req_3lKZGd3zOpVL1F]
+      request-id: [req_3lKZGd3zOpVL1F]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
@@ -2867,22 +3327,22 @@ interactions:
     body: null
     headers: {}
     method: GET
-    uri: https://api.stripe.com/v1/balance_transactions/txn_1IUWRKFk4eGpfLOCQ6Ntcwq9
+    uri: https://api.stripe.com/v1/balance_transactions/txn_1Iw2oQFk4eGpfLOCVyTQMML1
   response:
-    body: {string: "{\n  \"id\": \"txn_1IUWRKFk4eGpfLOCQ6Ntcwq9\",\n  \"object\":\
-        \ \"balance_transaction\",\n  \"amount\": 10000,\n  \"available_on\": 1616025600,\n\
-        \  \"created\": 1615637969,\n  \"currency\": \"eur\",\n  \"description\":\
+    body: {string: "{\n  \"id\": \"txn_1Iw2oQFk4eGpfLOCVyTQMML1\",\n  \"object\":\
+        \ \"balance_transaction\",\n  \"amount\": 10000,\n  \"available_on\": 1622592000,\n\
+        \  \"created\": 1622197265,\n  \"currency\": \"eur\",\n  \"description\":\
         \ \"Liberapay\",\n  \"exchange_rate\": null,\n  \"fee\": 315,\n  \"fee_details\"\
         : [\n    {\n      \"amount\": 315,\n      \"application\": null,\n      \"\
         currency\": \"eur\",\n      \"description\": \"Stripe processing fees\",\n\
         \      \"type\": \"stripe_fee\"\n    }\n  ],\n  \"net\": 9685,\n  \"reporting_category\"\
-        : \"charge\",\n  \"source\": \"ch_1IUWRJFk4eGpfLOCembbE8Yt\",\n  \"status\"\
+        : \"charge\",\n  \"source\": \"ch_1Iw2oPFk4eGpfLOC5rHYlexD\",\n  \"status\"\
         : \"pending\",\n  \"type\": \"charge\"\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['560']
       Content-Type: [application/json]
-      Date: ['Sat, 13 Mar 2021 12:19:31 GMT']
+      Date: ['Fri, 28 May 2021 10:21:07 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2892,32 +3352,142 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      request-id: [req_DGsAs7eoEejGzn]
+      request-id: [req_5uwOGjaBfHR2pf]
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=4843&currency=EUR&description=anonymous+donation+for+creator_1+via+Liberapay&destination=acct_1GVfmPLo8l3IWFWX&metadata[payin_transfer_id]=1680&source_transaction=ch_1IUWRJFk4eGpfLOCembbE8Yt
+    body: amount=4843&currency=EUR&description=anonymous+donation+for+creator_1+via+Liberapay&destination=acct_1Iw2ne2H54hWzJBk&metadata[payin_transfer_id]=2180&source_transaction=ch_1Iw2oPFk4eGpfLOC5rHYlexD
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/transfers
   response:
-    body: {string: "{\n  \"id\": \"tr_1IUWRLFk4eGpfLOCk2rQOgqn\",\n  \"object\": \"\
+    body: {string: "{\n  \"id\": \"tr_1Iw2oRFk4eGpfLOCa1xfw48g\",\n  \"object\": \"\
         transfer\",\n  \"amount\": 4843,\n  \"amount_reversed\": 0,\n  \"balance_transaction\"\
-        : \"txn_1IUWRLFk4eGpfLOCtvUEwt5X\",\n  \"created\": 1615637971,\n  \"currency\"\
+        : \"txn_1Iw2oRFk4eGpfLOCE6KB77EL\",\n  \"created\": 1622197267,\n  \"currency\"\
         : \"eur\",\n  \"description\": \"anonymous donation for creator_1 via Liberapay\"\
-        ,\n  \"destination\": \"acct_1GVfmPLo8l3IWFWX\",\n  \"destination_payment\"\
-        : \"py_1IUWRLLo8l3IWFWXRQLYsR3D\",\n  \"livemode\": false,\n  \"metadata\"\
-        : {\n    \"payin_transfer_id\": \"1680\"\n  },\n  \"reversals\": {\n    \"\
+        ,\n  \"destination\": \"acct_1Iw2ne2H54hWzJBk\",\n  \"destination_payment\"\
+        : \"py_1Iw2oR2H54hWzJBk6F9kAJBa\",\n  \"livemode\": false,\n  \"metadata\"\
+        : {\n    \"payin_transfer_id\": \"2180\"\n  },\n  \"reversals\": {\n    \"\
         object\": \"list\",\n    \"data\": [\n\n    ],\n    \"has_more\": false,\n\
-        \    \"total_count\": 0,\n    \"url\": \"/v1/transfers/tr_1IUWRLFk4eGpfLOCk2rQOgqn/reversals\"\
-        \n  },\n  \"reversed\": false,\n  \"source_transaction\": \"ch_1IUWRJFk4eGpfLOCembbE8Yt\"\
-        ,\n  \"source_type\": \"card\",\n  \"transfer_group\": \"group_pi_1IUWRJFk4eGpfLOC4o94DED9\"\
+        \    \"total_count\": 0,\n    \"url\": \"/v1/transfers/tr_1Iw2oRFk4eGpfLOCa1xfw48g/reversals\"\
+        \n  },\n  \"reversed\": false,\n  \"source_transaction\": \"ch_1Iw2oPFk4eGpfLOC5rHYlexD\"\
+        ,\n  \"source_type\": \"card\",\n  \"transfer_group\": \"group_pi_1Iw2oPFk4eGpfLOC2k9tBB7h\"\
         \n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['784']
       Content-Type: [application/json]
-      Date: ['Sat, 13 Mar 2021 12:19:32 GMT']
+      Date: ['Fri, 28 May 2021 10:21:08 GMT']
+      Server: [nginx]
+      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
+      access-control-allow-credentials: ['true']
+      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
+      access-control-allow-origin: ['*']
+      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
+          X-Stripe-Privileged-Session-Required']
+      access-control-max-age: ['300']
+      cache-control: ['no-cache, no-store']
+      idempotency-key: [payin_transfer_2180]
+      original-request: [req_D6Yro8NFa9TIkP]
+      request-id: [req_D6Yro8NFa9TIkP]
+      stripe-should-retry: ['false']
+      stripe-version: ['2019-08-14']
+    status: {code: 200, message: OK}
+- request:
+    body: null
+    headers: {}
+    method: GET
+    uri: https://api.stripe.com/v1/charges/py_1Iw2oR2H54hWzJBk6F9kAJBa
+  response:
+    body: {string: "{\n  \"id\": \"py_1Iw2oR2H54hWzJBk6F9kAJBa\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 4843,\n  \"amount_captured\": 4843,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": \"ca_DEYxiYHBHZtGj32l9uczcsunbQOcRq8H\",\n  \"application_fee\"\
+        : null,\n  \"application_fee_amount\": null,\n  \"balance_transaction\": \"\
+        txn_1Iw2oR2H54hWzJBktOLVkS3i\",\n  \"billing_details\": {\n    \"address\"\
+        : {\n      \"city\": null,\n      \"country\": null,\n      \"line1\": null,\n\
+        \      \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
+        \    },\n    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n\
+        \  },\n  \"calculated_statement_descriptor\": null,\n  \"captured\": true,\n\
+        \  \"created\": 1622197267,\n  \"currency\": \"eur\",\n  \"customer\": null,\n\
+        \  \"description\": null,\n  \"destination\": null,\n  \"dispute\": null,\n\
+        \  \"disputed\": false,\n  \"failure_code\": null,\n  \"failure_message\"\
+        : null,\n  \"fraud_details\": {\n  },\n  \"invoice\": null,\n  \"livemode\"\
+        : false,\n  \"metadata\": {\n  },\n  \"on_behalf_of\": null,\n  \"order\"\
+        : null,\n  \"outcome\": null,\n  \"paid\": true,\n  \"payment_intent\": null,\n\
+        \  \"payment_method\": null,\n  \"payment_method_details\": {\n    \"stripe_account\"\
+        : {\n    },\n    \"type\": \"stripe_account\"\n  },\n  \"receipt_email\":\
+        \ null,\n  \"receipt_number\": null,\n  \"receipt_url\": \"https://pay.stripe.com/receipts/acct_1Iw2ne2H54hWzJBk/py_1Iw2oR2H54hWzJBk6F9kAJBa/rcpt_JZBA4ii3WuOPcFUpQJFTSCpRmjSi2WX\"\
+        ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
+        \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
+        \ 0,\n    \"url\": \"/v1/charges/py_1Iw2oR2H54hWzJBk6F9kAJBa/refunds\"\n \
+        \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
+        id\": \"acct_1ChyayFk4eGpfLOC\",\n    \"object\": \"account\",\n    \"application_icon\"\
+        : \"https://files.stripe.com/links/fl_live_pcO27i8SSea27yZPmUHDPhiF\",\n \
+        \   \"application_logo\": \"https://s3.amazonaws.com/stripe-uploads/acct_1ChyayFk4eGpfLOCapplication-logo-icon_v2_yellow_r.100.png\"\
+        ,\n    \"application_name\": \"Liberapay\",\n    \"application_url\": \"https://liberapay.com/\"\
+        \n  },\n  \"source_transfer\": \"tr_1Iw2oRFk4eGpfLOCa1xfw48g\",\n  \"statement_descriptor\"\
+        : null,\n  \"statement_descriptor_suffix\": null,\n  \"status\": \"succeeded\"\
+        ,\n  \"transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
+    headers:
+      Connection: [keep-alive]
+      Content-Length: ['2125']
+      Content-Type: [application/json]
+      Date: ['Fri, 28 May 2021 10:21:08 GMT']
+      Server: [nginx]
+      Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
+      access-control-allow-credentials: ['true']
+      access-control-allow-methods: ['GET, POST, HEAD, OPTIONS, DELETE']
+      access-control-allow-origin: ['*']
+      access-control-expose-headers: ['Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required,
+          X-Stripe-Privileged-Session-Required']
+      access-control-max-age: ['300']
+      cache-control: ['no-cache, no-store']
+      request-id: [req_zXcV9vXIO35BLp]
+      stripe-account: [acct_1Iw2ne2H54hWzJBk]
+      stripe-version: ['2019-08-14']
+    status: {code: 200, message: OK}
+- request:
+    body: description=anonymous+donation+for+creator_1+via+Liberapay&metadata[liberapay_transfer_id]=2180
+    headers: {}
+    method: POST
+    uri: https://api.stripe.com/v1/charges/py_1Iw2oR2H54hWzJBk6F9kAJBa
+  response:
+    body: {string: "{\n  \"id\": \"py_1Iw2oR2H54hWzJBk6F9kAJBa\",\n  \"object\": \"\
+        charge\",\n  \"amount\": 4843,\n  \"amount_captured\": 4843,\n  \"amount_refunded\"\
+        : 0,\n  \"application\": \"ca_DEYxiYHBHZtGj32l9uczcsunbQOcRq8H\",\n  \"application_fee\"\
+        : null,\n  \"application_fee_amount\": null,\n  \"balance_transaction\": \"\
+        txn_1Iw2oR2H54hWzJBktOLVkS3i\",\n  \"billing_details\": {\n    \"address\"\
+        : {\n      \"city\": null,\n      \"country\": null,\n      \"line1\": null,\n\
+        \      \"line2\": null,\n      \"postal_code\": null,\n      \"state\": null\n\
+        \    },\n    \"email\": null,\n    \"name\": null,\n    \"phone\": null\n\
+        \  },\n  \"calculated_statement_descriptor\": null,\n  \"captured\": true,\n\
+        \  \"created\": 1622197267,\n  \"currency\": \"eur\",\n  \"customer\": null,\n\
+        \  \"description\": \"anonymous donation for creator_1 via Liberapay\",\n\
+        \  \"destination\": null,\n  \"dispute\": null,\n  \"disputed\": false,\n\
+        \  \"failure_code\": null,\n  \"failure_message\": null,\n  \"fraud_details\"\
+        : {\n  },\n  \"invoice\": null,\n  \"livemode\": false,\n  \"metadata\": {\n\
+        \    \"liberapay_transfer_id\": \"2180\"\n  },\n  \"on_behalf_of\": null,\n\
+        \  \"order\": null,\n  \"outcome\": null,\n  \"paid\": true,\n  \"payment_intent\"\
+        : null,\n  \"payment_method\": null,\n  \"payment_method_details\": {\n  \
+        \  \"stripe_account\": {\n    },\n    \"type\": \"stripe_account\"\n  },\n\
+        \  \"receipt_email\": null,\n  \"receipt_number\": null,\n  \"receipt_url\"\
+        : \"https://pay.stripe.com/receipts/acct_1Iw2ne2H54hWzJBk/py_1Iw2oR2H54hWzJBk6F9kAJBa/rcpt_JZBA4ii3WuOPcFUpQJFTSCpRmjSi2WX\"\
+        ,\n  \"refunded\": false,\n  \"refunds\": {\n    \"object\": \"list\",\n \
+        \   \"data\": [\n\n    ],\n    \"has_more\": false,\n    \"total_count\":\
+        \ 0,\n    \"url\": \"/v1/charges/py_1Iw2oR2H54hWzJBk6F9kAJBa/refunds\"\n \
+        \ },\n  \"review\": null,\n  \"shipping\": null,\n  \"source\": {\n    \"\
+        id\": \"acct_1ChyayFk4eGpfLOC\",\n    \"object\": \"account\",\n    \"application_icon\"\
+        : \"https://files.stripe.com/links/fl_live_pcO27i8SSea27yZPmUHDPhiF\",\n \
+        \   \"application_logo\": \"https://s3.amazonaws.com/stripe-uploads/acct_1ChyayFk4eGpfLOCapplication-logo-icon_v2_yellow_r.100.png\"\
+        ,\n    \"application_name\": \"Liberapay\",\n    \"application_url\": \"https://liberapay.com/\"\
+        \n  },\n  \"source_transfer\": \"tr_1Iw2oRFk4eGpfLOCa1xfw48g\",\n  \"statement_descriptor\"\
+        : null,\n  \"statement_descriptor_suffix\": null,\n  \"status\": \"succeeded\"\
+        ,\n  \"transfer_data\": null,\n  \"transfer_group\": null\n}\n"}
+    headers:
+      Connection: [keep-alive]
+      Content-Length: ['2205']
+      Content-Type: [application/json]
+      Date: ['Fri, 28 May 2021 10:21:09 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2927,14 +3497,15 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [payin_transfer_1680]
-      original-request: [req_pXRcC20Qq11qAQ]
-      request-id: [req_pXRcC20Qq11qAQ]
+      idempotency-key: [6d0b2e16-7c12-47bd-b646-2a673f2475f1]
+      original-request: [req_js7yfQHd3jvHRR]
+      request-id: [req_js7yfQHd3jvHRR]
+      stripe-account: [acct_1Iw2ne2H54hWzJBk]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
 - request:
-    body: amount=4842&currency=EUR&description=anonymous+donation+for+creator_2+via+Liberapay&destination=acct_invalid&metadata[payin_transfer_id]=1681&source_transaction=ch_1IUWRJFk4eGpfLOCembbE8Yt
+    body: amount=4842&currency=EUR&description=anonymous+donation+for+creator_2+via+Liberapay&destination=acct_invalid&metadata[payin_transfer_id]=2181&source_transaction=ch_1Iw2oPFk4eGpfLOC5rHYlexD
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/transfers
@@ -2947,7 +3518,7 @@ interactions:
       Connection: [keep-alive]
       Content-Length: ['242']
       Content-Type: [application/json]
-      Date: ['Sat, 13 Mar 2021 12:27:10 GMT']
+      Date: ['Fri, 28 May 2021 10:21:09 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2957,30 +3528,30 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [payin_transfer_1681]
-      original-request: [req_bcYzQfUW7n7PTw]
-      request-id: [req_bcYzQfUW7n7PTw]
+      idempotency-key: [payin_transfer_2181]
+      original-request: [req_xtIAlhwMHnhNi8]
+      request-id: [req_xtIAlhwMHnhNi8]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 400, message: Bad Request}
 - request:
-    body: charge=ch_1IUWRJFk4eGpfLOCembbE8Yt&amount=5000
+    body: charge=ch_1Iw2oPFk4eGpfLOC5rHYlexD&amount=5000
     headers: {}
     method: POST
     uri: https://api.stripe.com/v1/refunds
   response:
-    body: {string: "{\n  \"id\": \"re_1IUeEcFk4eGpfLOCl2eYEOzu\",\n  \"object\": \"\
-        refund\",\n  \"amount\": 5000,\n  \"balance_transaction\": \"txn_1IUeEcFk4eGpfLOCFpAyRoBQ\"\
-        ,\n  \"charge\": \"ch_1IUWRJFk4eGpfLOCembbE8Yt\",\n  \"created\": 1615667934,\n\
+    body: {string: "{\n  \"id\": \"re_1Iw2oTFk4eGpfLOCEWdYKq7S\",\n  \"object\": \"\
+        refund\",\n  \"amount\": 5000,\n  \"balance_transaction\": \"txn_1Iw2oUFk4eGpfLOCRYMqDi3m\"\
+        ,\n  \"charge\": \"ch_1Iw2oPFk4eGpfLOC5rHYlexD\",\n  \"created\": 1622197269,\n\
         \  \"currency\": \"eur\",\n  \"metadata\": {\n  },\n  \"payment_intent\":\
-        \ \"pi_1IUWRJFk4eGpfLOC4o94DED9\",\n  \"reason\": null,\n  \"receipt_number\"\
+        \ \"pi_1Iw2oPFk4eGpfLOC2k9tBB7h\",\n  \"reason\": null,\n  \"receipt_number\"\
         : null,\n  \"source_transfer_reversal\": null,\n  \"status\": \"succeeded\"\
         ,\n  \"transfer_reversal\": null\n}\n"}
     headers:
       Connection: [keep-alive]
       Content-Length: ['434']
       Content-Type: [application/json]
-      Date: ['Sat, 13 Mar 2021 20:38:54 GMT']
+      Date: ['Fri, 28 May 2021 10:21:10 GMT']
       Server: [nginx]
       Strict-Transport-Security: [max-age=31556926; includeSubDomains; preload]
       access-control-allow-credentials: ['true']
@@ -2990,9 +3561,9 @@ interactions:
           X-Stripe-Privileged-Session-Required']
       access-control-max-age: ['300']
       cache-control: ['no-cache, no-store']
-      idempotency-key: [refund_5000_from_payin_1680]
-      original-request: [req_3p8diXWlVOPvYG]
-      request-id: [req_3p8diXWlVOPvYG]
+      idempotency-key: [refund_5000_from_payin_2180]
+      original-request: [req_Nuxa9jdUd3uQL7]
+      request-id: [req_Nuxa9jdUd3uQL7]
       stripe-should-retry: ['false']
       stripe-version: ['2019-08-14']
     status: {code: 200, message: OK}
diff --git a/tests/py/test_email.py b/tests/py/test_email.py
--- a/tests/py/test_email.py
+++ b/tests/py/test_email.py
@@ -527,14 +527,24 @@ class TestEmail2(Harness):
     def test_participant_with_long_email_address_can_receive_messages(self):
         email = 'a' * 200 + '@example.org'
         fred = self.make_participant(None, email=email)
-        fred.insert_identity({'name': "You don't need to know my legal name"})
+        r = self.client.PxST(
+            f'/~{fred.id}/identity',
+            {'name': "You don't need to know my legal name"},
+            auth_as=fred,
+        )
+        assert r.code == 302
         fred.notify('team_invite', team='team', team_url='fake_url', inviter='bob')
         Participant.dequeue_emails()
         assert self.db.one("SELECT email_status FROM notifications") == 'sent'
 
     def test_participant_with_long_nonascii_name_can_receive_emails(self):
         fred = self.make_participant(None, email='frederic@example.org')
-        fred.insert_identity({'name': "Frédéric d'Arundel d'Esquincourt de Condé"})
+        r = self.client.PxST(
+            f'/~{fred.id}/identity',
+            {'name': "Frédéric d'Arundel d'Esquincourt de Condé"},
+            auth_as=fred,
+        )
+        assert r.code == 302
         fred.notify('team_invite', team='team', team_url='fake_url', inviter='bob')
         Participant.dequeue_emails()
         assert self.db.one("SELECT email_status FROM notifications") == 'sent'
diff --git a/tests/py/test_payins.py b/tests/py/test_payins.py
--- a/tests/py/test_payins.py
+++ b/tests/py/test_payins.py
@@ -1,5 +1,6 @@
 from decimal import Decimal
 import json
+from time import sleep
 from unittest.mock import patch
 
 from markupsafe import Markup
@@ -579,21 +580,63 @@ class TestPayinsStripe(Harness):
     @classmethod
     def setUpClass(cls):
         super().setUpClass()
+        cls.offset = 2100
+        # https://stripe.com/docs/connect/testing
         cls.sepa_direct_debit_token = stripe.Token.create(bank_account=dict(
             country='DE',
             currency='EUR',
             account_number='DE89370400440532013000',
             account_holder_name='Jane Doe',
-        ))
+        ), idempotency_key=f'create_german_bank_account_token_{cls.offset}')
+        ba_ch_token = stripe.Token.create(bank_account=dict(
+            country='CH',
+            currency='CHF',
+            account_number='CH9300762011623852957',
+            account_holder_name='Foo Bar',
+        ), idempotency_key=f'create_swiss_bank_account_token_{cls.offset}')
         acct_ch_token = stripe.Token.create(account=dict(
+            business_type='individual',
+            individual={
+                'address': {
+                    'country': 'CH',
+                    'city': 'Bern',
+                    'postal_code': '3000',
+                    'line1': 'address_full_match',
+                },
+                'dob': {'day': 1, 'month': 1, 'year': 1901},
+                'email': 'test-swiss-1@liberapay.com',
+                'first_name': 'Foo',
+                'last_name': 'Bar',
+                'id_number': '000000000',
+                'phone': '+41665554433',
+            },
             tos_shown_and_accepted=True,
-        ))
+        ), idempotency_key=f'create_swiss_account_token_{cls.offset}')
         cls.acct_switzerland = stripe.Account.create(
             account_token=acct_ch_token.id,
             country='CH',
             type='custom',
+            business_profile={
+                'mcc': 5734,
+                'url': 'https://liberapay.com/',
+            },
+            capabilities={
+                'card_payments': {'requested': True},
+                'sepa_debit_payments': {'requested': True},
+                'transfers': {'requested': True},
+            },
+            external_account=ba_ch_token,
+            idempotency_key=f'create_swiss_account_{cls.offset}',
         )
-        cls.offset = 1600
+        try:
+            assert cls.acct_switzerland.capabilities == {
+                'card_payments': 'active',
+                'sepa_debit_payments': 'active',
+                'transfers': 'active',
+            }
+        except AssertionError:
+            print(cls.acct_switzerland.requirements)
+            raise
 
     def setUp(self):
         super().setUp()
@@ -648,7 +691,7 @@ def test_00_payin_stripe_card(self):
         r = self.client.GET('/donor/giving/pay/stripe/%i' % self.offset, auth_as=self.donor)
         assert r.code == 200, r.text
         payin = self.db.one("SELECT * FROM payins")
-        assert payin.status == 'succeeded'
+        assert payin.status == 'succeeded', payin.error
         assert payin.amount_settled == EUR('24.99')
         assert payin.fee == EUR('0.97')
         pt = self.db.one("SELECT * FROM payin_transfers")
@@ -699,7 +742,7 @@ def test_02_payin_stripe_card_one_to_many(self):
         r = self.client.GET('/donor/giving/pay/stripe/%i' % self.offset, auth_as=self.donor)
         assert r.code == 200, r.text
         payin = self.db.one("SELECT * FROM payins")
-        assert payin.status == 'succeeded'
+        assert payin.status == 'succeeded', payin.error
         assert payin.amount_settled.currency == 'EUR'
         assert payin.fee.currency == 'EUR'
         payin_transfers = self.db.all("SELECT * FROM payin_transfers ORDER BY id")
@@ -746,7 +789,7 @@ def test_01_payin_stripe_sdd(self):
         r = self.client.GET('/donor/giving/pay/stripe/%i' % self.offset, auth_as=self.donor)
         assert r.code == 200, r.text
         payin = self.db.one("SELECT * FROM payins")
-        assert payin.status == 'pending'
+        assert payin.status == 'pending', payin.error
         assert payin.amount_settled is None
         assert payin.fee is None
         pt = self.db.one("SELECT * FROM payin_transfers")
@@ -844,6 +887,10 @@ def test_03_payin_stripe_sdd_one_to_many(self):
 
         # Settle
         charge = stripe.Charge.retrieve(payin.remote_id)
+        if charge.status == 'pending':
+            # Wait ten seconds for the payment to succeed.
+            sleep(10)
+            charge = stripe.Charge.retrieve(payin.remote_id)
         assert charge.status == 'succeeded'
         assert charge.balance_transaction
         payin = settle_charge_and_transfers(self.db, payin, charge)
@@ -1064,6 +1111,10 @@ def test_06_payin_stripe_sdd_to_team(self):
 
         # Settle
         charge = stripe.Charge.retrieve(payin2.remote_id)
+        if charge.status == 'pending':
+            # Wait ten seconds for the payment to succeed.
+            sleep(10)
+            charge = stripe.Charge.retrieve(payin2.remote_id)
         assert charge.status == 'succeeded'
         assert charge.balance_transaction
         payin = settle_charge_and_transfers(self.db, payin2, charge)