Templates Plugins Courses

💳 Stripe Marketplace Express Checkout - New Plugin from Zeroqode


@alex.grimacovschi, hope you had a nice weekend.

I am trying to create a customer in Stripe, and then add a card to the customer.

In your demo for creating a customer you seem to be using the WF element action “Create Card Stripe Token A…”. I followed those steps, and then in step 2 I wanted to retrieve the result of step 1’s action to get the customer_ID and card_ID, but there is no such option to get the “result of step 1”, rather there are only options for pulling from StripeToken A. However, none of Stripe Token A’s options have to do with the cus_id.

1.) Is using this WF action correct?
2.) If it is, then how are you suggesting we retrieve the cus_id? Because the demo does not appear to demonstrate that, and that missing step appears to be critical to future steps of the plugin.



When I try to run the action “Create Card Token A…” I get the following error. I think all my settings are proper, is there a bug on your end?


Hello @mark2,

In order to have the customer_ID and card_ID available you need to have in your app one additional workflow. When StripeMarketplaceToken A Card Token Created > Create a customer and Create a card.

Regarding the error please check the documentation of the plugin and make sure you have followed all required steps. Here you can find the documentation https://docs.zeroqode.com/plugins/stripe-marketplace-express-plugin#setup-requirements
Especially please make sure when adding the secret keys to the plugin you added text ‘Bearer’ before the key. Also, please check if you didn’t add unnecessary spaces to the key.

Best Regards,


Hello @brian.schuring,

The update of the plugin is published. As was suggested by you, to the action “seller charge a customer” was added the field “description”. Please update the plugin to the latest version to have the new field available.

Best Regards,


@alex.grimacovschi, thanks for pointing me to the docs. Before I had “Bearer” and then a space for both the secret and publishable keys, but then I noticed your documentation said to only have it for the secret key. Is this correct?

Here is what I tried. Did I interpret what you said correctly?

After these steps I got this error:

Strangely even before I “fixed” the secret and publishable keys, Stripe was still creating a new customer in my dashboard. Does the create a token, also create a customer?

Here is the latest Stripe log from the attempt

Apologies for all the questions, I really appreciate the help and am so close to getting this to work!


Hello @mark2,

No need to apologize for giving questions, we are here for providing support and solving any issue our customers are facing. It is our work and we are always happy to help.

Now to the questions:

Yes, this is correct.

Probably I didn’t explain myself clear enough. You need to initiate the process with the event “When StripeMarketplaceToken A Card Token Created”. So there has to be a separate workflow that should look like this:

No, create a customer is a separate action.

Hope that will help!

Best Regards,


Hi @alex.grimacovschi thank you for saying.

For other people who stumble upon this thread, and are lost on how to trigger this action, it is in element actions when starting a workflow. Image attached.



I am trying to test for a couple scenarios, the first is trying to update an existing customer by adding a card. I am happy to report that I finally got this working error free. Thank you for the help!

Question is… your documentation says that using the create a card action for an existing customer will only add another card to the customer, but it will not change the default payment source unless the customer has no cards. How then can a user update the default payment from a list of cards?

My scenario is I want to provide customers with an existing card(s) the opportunity to add a new card that then becomes the default payment source. It would be ideal to have this take place in the same workflow. Imagine this in a shopping cart flow prior to purchase.



When I have a customer with an existing card on file, and I retrieve the info from the customer, it display fine. It takes a second to load but it shows, like so:

However, when I update the card / default payment source, the card info in the screenshot does not change on the screen. Are the retrieve calls not dynamic?

Major issue is after updating the card on the payment methods screen, I send the user to a confirmation screen where they can review all the order details, including seeing which card will be charged – which would be the newly added card. Problem is even after the card has been updated in Stripe / my database, the details of the card are exactly the same as prior (like in my screenshot), despite the update.

I’ve been trying to test and try different things, including custom states, but with no luck. Is there an issue with this, or is there something I’m missing that can help this work?

Many thanks.


Hello @mark2,

In order to do that will be needed an additional call that currently is not available in the plugin.

Could you please add [email protected] as collaborators to your app and specify which workflows are you referring to and on which page are they located. This will help to understand better your issue and provide answers.

Best Regards,


Hi @alex.grimacovschi, thanks for the response. Are there any plans for this in a future update? It would seem essential to allow users to be able to set their default card if they can add more than one card in the first place.

I’m actually not referring to workflows. I’m referring to expressions in a text element.

I recorded a brief video to demonstrate.
You’ll see I start off in a cart screen.
Move to a shipping details screen and put in some info
Then the payment details screen. This is where it loads the current users card details.
I then elect to add a new card, which triggers WF actions that replaces the old card with the new card, and will then use the new card as the new default.
However, when the page loads to the next screen, I am expecting the new card data to be displayed, but instead it is still the old data, with the old expiration date.

I can do that, but I am afraid the app is fairly large, as I’ve been building for mobile so it uses the single page with lots of hide/show of groups which can make it hard to find things for those unfamiliar with the app. If you still want me to do this, I certainly can.


Hello @mark2

We’ll investigate this next week but can’t promise anything at the moment!

Yes, please add us as collaborators and please specify the name of the page where the plugin is used.

Best Regards,


That would be great thanks, keep us posted!

Done. The page is titled “mobile”.


@alex.grimacovschi, hope you are having a good day. Just fyi I am using a workaround with custom states right now, though that obviously is not ideal if the data can express live dynamically via your plugin’s retrieve feature.

Another important question.

I am logged in as a user and trying to update their card with a failed test card.
When I try to add a Stripe test card that has insufficient funds, your plugin still returns a new card ID value to overwrite my user’s current card_id in the DB, however in Stripe the logs show an error and it does not in fact add the card to the Stripe account.

This is a problem since I don’t want a failed card to record in my user record, so I thought it might be best to turn to conditionals to block this occurrence.

If I am to write a conditional, how exactly am I putting it together as it seems there are limited options for this call?
Only when result of step 1’s error is not "card_error" ???

Your help would be super appreciated.


Hello @mark2,

Thank you for adding us as collaborators to your app. Unfortunately, you have a password on your domain and because of that, we cannot check if the card data are changed or not. We will create an example for your use case and will provide it for you to have a reference of how everything should be set up.

You can use the condition “error is empty” or better use the event “A Stripe Marketplace Token Error”

Best Regards,


Shoot I forgot about that. If you are creating an example that would be great. If you still want me to lift the password restriction just let me know and I can do that.

I see how to do “error is empty” however I don’t see how to make it “A Stripe Marketplace Token Error”… Would that equate to “This StripeMarketplaceToken Error Code is empty”…?


Hello @mark2

Not needed thanks. We will provide a tested example that will work and you will be able to use that workflow. I will let you know when the example will be ready.

Yes, it would be the same. You can find the events in the workflow tab when creating a new workflow. Please see the attached screenshot.


Best Regards,


Hi @alex.grimacovschi thanks. Will the example you are creating show how to utilize this error event action?

I’m a little unclear as to why this event action would be better than what you originally wrote with result of step 1 error is not empty triggering an alert: Below is how I have it set at the moment, but if there is a clear advantage I would switch. Can you explain why the event action might be more efficient or reliable? Does the current setup not capture all errors?

EDIT: Actually, don’t you still have to put a conditional on a trigger custom event action to tell it when to fire?



We will do an example for this use case:

Regarding the advantage of using “event” basically, it should work faster and more stable but is upon your decision which solution to use.

Best Regards,


First of all, awesome plugin @zeroqode @levon. This is the most crisp and easy to use Stripe plugin or bubble.

Just went live with our app and facing a critical issue. When creating a “Company” account on Stripe, followed by creating a “Person”, the plugin is throwing an error (see attached).


Seems like Stripe is expecting a currency, but the create person action has no spot for it. Perhaps the create person call should simply use the currency of the “Company” that was just created?

Look forward to hear back. Thank you.