Closed blushi closed 3 years ago
Ron will follow up with Sara on what these fees should be
@erikalogie It's 5% for Credit Issuance Fee and 5% for Brokerage Fee .
To confirm these are fees that we deduct from payment to project developer, not fees that are added to the product price, I.e. to the buyer. We might have that as a separate fee - I presume we can add that to invoice.
@rsteinhe So the idea is that a total of 10% of every purchase goes to Regen, but this happens behind the scenes, without the user being aware. @blushi it might make more sense for you to implement this, as I didn't see an obvious place in the Stripe dashboard for setting these fees.
@erikalogie yes this can be set programmatically: https://stripe.com/docs/connect/destination-charges#application-fee
Great, thanks
@erikalogie @rsteinhe Just a question, do we wanna use this flow of funds https://stripe.com/docs/connect/destination-charges#flow-of-funds-app-fee or this one https://stripe.com/docs/connect/destination-charges#flow-of-funds-amount?
It seems like we would want to use transfer_data[amount], so that we have more control over the funds.
This has to be attached to the checkout session when created (#146) or to the invoice (#147). So I'll add that transfer_data[amount]
but we'll only be able to test it with the checkout for now until this https://github.com/regen-network/regen-registry/issues/165#issuecomment-720926510 is resolved, unless we use a US-based connected account for testing purposes for now.
@erikalogie @rsteinhe
Testing instructions for checkout:
Testing instructions for invoice:
wallet_id
and home_address_id
so that credits are transferred to wallet_id
in the database but this is not mandatory to test this.The checkout is working great.
I've ran through the invoicing twice, and I can't see any new payment to the connected account. I see the invoice is paid here: https://dashboard.stripe.com/test/payments?status%5B%5D=successful but nothing shows up here under payments: https://dashboard.stripe.com/test/connect/accounts/acct_1HjOMHG1LSUkLv4P
TODO:
2.9% + 30c +1% for international cards / +1% if currency conversion is required
application_fee_amount
https://stripe.com/docs/connect/destination-charges#flow-of-funds-app-fee (enables better reports)Follow-up on computing stripe fees in advance (2.9% + 30c +1% for international cards / +1% if currency conversion is required
) and adding them on top of our existing fees:
We can easily apply 2.9% + 30c
, but regarding the 1% for international cards
, the thing is that we can't know that in advance, before the invoice payment is made obviously but the fees needs to be defined before the payment is made (the fee info is attached to the invoice and Stripe doesn’t allow to update invoices once there are sent) so I’m not sure what to do about this. The same applies for stripe checkout.
What a pain! Maybe we will have to just have a set credit card fee of 5%, and if they don't use an international card / require currency conversion then Regen makes an additional 2%. I'm remembering now a previous platform I worked on where we had to deal with this, and we ended up doing it with a flat fee as well, which meant the amount the platform made on each purchase fluctuated. However, in the previous platform I'm thinking about, we didn't have ACH payments, which makes thing a bit more complicated because in reality we should have users pay lower fees for ACH, encouraging them to use that option instead of credit cards with high fees, especially for large transactions. Is it possible to have different fees based on ACH vs. credit card Marie?
On Mon, Nov 9, 2020 at 11:41 AM Marie Gauthier notifications@github.com wrote:
Follow-up on computing stripe fees in advance (2.9% + 30c +1% for international cards / +1% if currency conversion is required) and adding them on top of our existing fees:
We can easily apply 2.9% + 30c, but regarding the 1% for international cards, the thing is that we can't know that in advance, before the invoice payment is made obviously but the fees needs to be defined before the payment is made (the fee info is attached to the invoice and Stripe doesn’t allow to update invoices once there are sent) so I’m not sure what to do about this. The same applies for stripe checkout.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/regen-network/regen-registry/issues/149#issuecomment-723929061, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACARPTONNJJVL2MLDGTPIGDSO7BMDANCNFSM4SYKLZ6A .
Is it possible to have different fees based on ACH vs. credit card Marie?
@erikalogie well we can only know this once the payment has been made so that's the same issue as described in my comment above.
@rsteinhe Or the alternative approach would be to use separate charges and transfers https://stripe.com/docs/connect/charges-transfers, which is very different implementation-wise. I have tested it quickly and that could work but that means that we will transfer the total amount minus (our fees + the stripe fees), and the connected account will only be able to see from its dashboard the actual amount transferred (without knowing the total amount nor the fees that we have applied).
I think we can't use that because Impact Ag is in Australia and we are in the US. "Stripe supports separate charges and transfers in the following regions: Australia, Europe, Japan, Malaysia, New Zealand, Singapore, and the U.S. Separate charges and transfers are supported if both your platform and the connected account are in the same region (for example, both in Australia). "
On Mon, Nov 9, 2020 at 12:55 PM Marie Gauthier notifications@github.com wrote:
@erikalogie https://github.com/erikalogie @rsteinhe https://github.com/rsteinhe
Or the alternative approach would be to use separate charges and transfers https://stripe.com/docs/connect/charges-transfers, which is very different implementation-wise. I have tested it quickly and that could work but that means that we will transfer the total amount minus (our fees + the stripe fees), and the connected account will only be able to see from its dashboard only the actual amount transferred (without knowing the total amount nor the fees that we have applied).
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/regen-network/regen-registry/issues/149#issuecomment-723967238, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACARPTJFSGE3A6YOS6LIDS3SO7KCBANCNFSM4SYKLZ6A .
@erikalogie oh good point, though that's weird because I could create a transfer successfully to some AU based testing connected account that uses the recipient service agreement, that seems to be part of the use cases that are supported: https://stripe.com/docs/connect/account-capabilities#transfers-cross-border
In any case, I have asked the stripe support about that so we'll see what they recommend.
EDIT: I have just tested using an AU connected account that doesn't use the recipient agreement service (but the 'full' one) and indeed I got an error: Funds can't be sent to accounts located in AU when the account is under the full service agreement.
But it seems to work for AU accounts with the recipient service agreement as described just above.
Stripe support confirmed indeed that separate charges and transfers can work if using the recipient service agreement.
So now, we have to make a decision @erikalogie @rsteinhe
This is crazy that their own documentation isn't even correct, but good to know this is actually an option.
I think we should discuss this, but Ron might need to get legal and finance to weigh in here in order to make a decision.
On Mon, Nov 9, 2020 at 2:25 PM Marie Gauthier notifications@github.com wrote:
Stripe support confirmed indeed that separate charges and transfers can work if using the recipient service agreement.
So now, we have to make a decision @erikalogie https://github.com/erikalogie @rsteinhe https://github.com/rsteinhe
- either we use destination charges which is already implemented and allow better reporting (ie being able to see fees and net amount) and apply a flat fee to account for Stripe fees as @erikalogie https://github.com/erikalogie described here: #149 (comment) https://github.com/regen-network/regen-registry/issues/149#issuecomment-723963978
- or we use separate charges and transfers which allows to programmatically create a transfer to a connected account after a payment and account for exact Stripe fees (since we will know the payment method by then) but this results in less clear reports (ie the connect account can only see the actual amount transferred). This approach would require a few more hours of work.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/regen-network/regen-registry/issues/149#issuecomment-724011172, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACARPTLL4VGQIYNZZKXZECDSO7US5ANCNFSM4SYKLZ6A .
Thanks for doing all this research @blushi . Given the fees are so different for ACH and credit card, I don't think it's fair to charge a flat fee for all. Perhaps if it was just for credit card. Question - is it possible after the transaction, once we know the type of card (international or not) to refund the non-international cards?
Separate question, as far as I recall, typically the credit card fees are charged to the buyer - is there a reason we cannot do that here? I vaguely recall discussing this. The most fair IMO would be to charge the buyer the payment fees related to their 'leg' and the seller for the international transfer.
Thanks for doing all this research @blushi . Given the fees are so different for ACH and credit card, I don't think it's fair to charge a flat fee for all. Perhaps if it was just for credit card. Question - is it possible after the transaction, once we know the type of card (international or not) to refund the non-international cards?
We could transfer back the money to the connected account in case of non-international cards but that would just make the implementation more complex and prone to errors. In this case, I guess the best is just to go with approach 2 (separate charges and transfer).
Separate question, as far as I recall, typically the credit card fees are charged to the buyer - is there a reason we cannot do that here? I vaguely recall discussing this. The most fair IMO would be to charge the buyer the payment fees related to their 'leg' and the seller for the international transfer.
What do you mean by the credit card fees? the 1% for international cards
from the Stripe fees? In that case, that's more a legal question to ask to Stripe support. See more info about Stripe fees here: https://stripe.com/pricing#pricing-details
@erikalogie @rsteinhe I have implemented approach 2, please follow the testing instructions from above.
This appears to be working. I'm curious why the connected account does not get any customer information. Maybe this is not important, but it is interesting that it just says none here: https://monosnap.com/file/mKcArqLwNz8magWbohGafLwPqanfvL
With the way this is coded now, is Impact Ag paying the credit card fees in essence?
This appears to be working. I'm curious why the connected account does not get any customer information. Maybe this is not important, but it is interesting that it just says none here: https://monosnap.com/file/mKcArqLwNz8magWbohGafLwPqanfvL
Here's the way it's coded now: once we get a successful invoice or checkout payment notification (ie after a successful Charge
), we manually create a Transfer
to the connected account with the following amount: 90% total amount - the Stripe fee
. We also specify the source transaction (= the successful Charge
) so we can transfer even though funds might not be available yet (see https://stripe.com/docs/connect/charges-transfers#transfer-availability) so I assume that customer info should be retrievable from the Transfer
. I'm not sure why it's not displayed on the Stripe dashboard. Maybe because it's not a direct relation (ie there's Regen in between the connected account and the customer).
By the way, it was not displayed either when we were using destination charges. I guess the customer info would be displayed if we were using direct charges or on_behalf_of
but this doesn't really fit our needs.
With the way this is coded now, is Impact Ag paying the credit card fees in essence?
Yes, see computed amount just above.
Great, thanks for the clarification!
On Tue, Nov 10, 2020 at 4:24 PM Marie Gauthier notifications@github.com wrote:
This appears to be working. I'm curious why the connected account does not get any customer information. Maybe this is not important, but it is interesting that it just says none here: https://monosnap.com/file/mKcArqLwNz8magWbohGafLwPqanfvL
Here's the way it's coded now: once we get a successful invoice or checkout payment notification (ie after a successful Charge https://stripe.com/docs/api/charges), we manually create a Transfer https://stripe.com/docs/api/transfers to the connected account with the following amount: 90% total amount - the Stripe fee. We also specify the source transaction (= the successful Charge) so we can transfer even though funds might not be available yet (see https://stripe.com/docs/connect/charges-transfers#transfer-availability) so I assume that customer info should be retrievable from the Transfer. I'm not sure why it's not displayed on the Stripe dashboard. Maybe because it's not a direct relation (ie there's Regen in between the connected account and the customer). By the way, it was not displayed either when we were using destination charges. I guess the customer info would be displayed if we were using direct charges or on_behalf_of https://stripe.com/docs/connect/destination-charges#settlement-merchant but this doesn't really fit our needs.
With the way this is coded now, is Impact Ag paying the credit card fees in essence?
Yes, see computed amount just above.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/regen-network/regen-registry/issues/149#issuecomment-724773297, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACARPTNFEPGYWF4SCNKNTYLSPFLLJANCNFSM4SYKLZ6A .
This looks good! I'll leave it in the QA column for @rsteinhe to also test
Testing instructions for checkout:
Testing instructions for invoice:
wallet_id
andhome_address_id
so that credits are transferred towallet_id
in the database but this is not mandatory to test this.