Skip to main content
Stripe is how you get paid. It handles your customers’ card details, charges them for minutes and phone numbers, and sends the money to your bank account. This is the last provider, and the longest chapter. It’s also the one where the decisions matter most, because they’re about real money: what you charge, what margin you keep, and what happens when a payment fails.
Have your government ID and your bank account details ready. Stripe verifies your identity and needs somewhere to send your earnings.

Create your account

1

Sign up

Go to stripe.com and click Get Started.
Stripe home page with the Get Started button
Enter your professional Hostinger email, your full name and a password, select your country, then click Create account.
Stripe signup form
2

Skip the onboarding questions

Stripe asks for a business name and location. Enter your domain or company name, pick your location, and click Continue.
Stripe welcome page asking for a business name and location
A series of optional questions follows about what you’re building. Click Skip at the bottom right of each one until Stripe asks how you want to set up.
Stripe onboarding questions with the Skip option
On Choose how to set up Stripe, select Set up in the Dashboard and click Continue.
Stripe setup choice between the Dashboard and an AI tool

The dashboard option, not the AI tool one.

3

Ask for your live account

Stripe starts you in a sandbox, which is a practice environment that can’t take real money. You need a live account, so click Get your live account now in the bottom right, not the more prominent Go to sandbox button beside it.
Stripe sandbox page with the option to get a live account

The sandbox can't accept real payments, so you go straight to a live account.

4

Verify your email

Stripe shows a Verify your email page and waits there. There’s nothing to click on it unless the email doesn’t arrive, in which case it offers a Resend email button.
Stripe Verify your email page with a Resend email button
Go to mail.hostinger.com, open the email from Stripe and click Verify email.
Stripe verification email with the Verify email button
That takes you straight to an Email verified dialog. Click Activate products, not Close, since activating is what unlocks real payments.
Stripe Email verified dialog with the Activate products button

Activate your account

Stripe now needs to know who you are before it will let you take money. This is a form with several sections, and Stripe shows your progress down the left as you go. It’s much faster if you have these ready before you start: your government ID, your home address, your phone number, your domain name, and the bank account you want to be paid into.
1

Business location and type

Choose your country, then your business type.The options depend on your country, because every country has its own legal categories. The United States offers Unregistered business, Registered business, Nonprofit and Government entity, while Canada shows Individual or sole proprietorship, and other countries have their own equivalents.Pick the one that’s actually true for you. If you’re starting out alone without a registered company, that’s the individual or unregistered option, which is the same thing under two names. The United States also asks whether you have an Employer Identification Number, and a one-person business with no employees usually answers no.
Answer honestly here. This is a legal declaration tied to your identity and your payouts, and getting it wrong causes problems when Stripe reviews your account.
Click Continue.
Stripe business location and business type selection
2

Personal details

Enter your legal name exactly as it appears on your government ID, your date of birth, home address and phone number. Your email should already be filled in.Click Continue.
Stripe personal details verification form
3

Business website

Enter your own domain, the one your app is deployed on.Stripe reviews this address to check that what you’re charging for matches what you claim to sell, so it needs to be your real, live app.Click Continue.
Stripe business website field
4

Products and services

Select Software as the category, then describe plainly what your platform does and what customers pay for. Something like:
We provide a software platform that lets businesses create and manage AI voice agents that answer their phone calls. Customers purchase prepaid call minutes and monthly phone number subscriptions through the platform.
Be accurate rather than vague. Stripe compares this description against the charges that later appear on your account, and a mismatch is what triggers manual reviews and held payouts.Click Continue.
Stripe product category and description fields
5

Customer support details

Stripe asks for a support phone number, which is required.Below it is a checkbox to show your phone number on receipts and invoices, and you can leave that unchecked. Stripe keeps your number on file either way, which is what they need for disputes. The checkbox only decides whether it’s printed on every receipt your customers receive, and if that’s your personal phone, keeping it off is sensible. Your app already gives customers a contact form that reaches your support email.Click Continue.
Stripe customer support phone number field with the receipts checkbox
6

Statement descriptor

This is the text your customers see on their bank statement when you charge them. Use your own brand name, between 5 and 22 characters, and specifically the same one you entered as the Sender name in Supabase and will set on your platform’s Branding page.This matters more than it looks. Your customer signed up on your branded platform and gets emails from your brand, so if their statement shows something different, they won’t recognise the charge. People who don’t recognise a charge call their bank, and every dispute costs you a fee on top of the refunded sale, even though the payment was perfectly legitimate.The Shortened descriptor field below is optional, so you can leave it empty.Click Continue.
Stripe statement descriptor field

Use your brand name, not a generic word like Software or Payments.

7

Bank account

Stripe shows the main banks in your country as logos. If yours is there, select it and log in to connect it directly.If you don’t see it, or you’d rather not log into your bank through Stripe, use the Enter bank details manually instead link below the logos. Both routes end up in the same place.
Stripe bank selection page showing bank logos and a manual entry link
Connecting your bank doesn’t move you to a new page. The same page grows instead, listing your linked account and adding a Select your payout schedule section underneath it, so there’s no button to click until you’ve made that choice.For the schedule, select Manual.This means your earnings stay in your Stripe balance until you decide to send them to your bank, which you can do at any time. We prefer it for two reasons: you stay in control of when you get paid, and keeping a balance in Stripe means that when your app issues a refund, it comes out of that balance rather than Stripe pulling money back from your bank.The one thing to remember is that manual means manual: your money waits until you go and pay yourself. You can switch to automatic later in your settings.Click Continue.
Stripe payout schedule selection with Manual chosen

Manual keeps your earnings in Stripe until you choose to withdraw them.

Secure your account

Unlike the optional two-factor prompt on Vercel, this one is mandatory. Stripe requires it on every account, which makes sense given this is the account holding your money.
1

Choose authenticator app

You’re offered a security key or an authenticator app. Unless you own a physical security key, click Add authenticator app.
Stripe two-step authentication method options
2

Scan the code

An Add authenticator app dialog shows a QR code. Scan it with an authenticator app on your phone, such as Google Authenticator, Microsoft Authenticator or Authy. If you already use one for other accounts, use that. If you can’t scan, use the Enter code manually link underneath instead.Once your app has added the account, click Continue.
Stripe Add authenticator app dialog showing a QR code and a Continue button
Your authenticator app now generates a 6-digit code. Type it into the field and click Confirm.
Stripe 6-digit authentication code entry
3

Save your backup code

Stripe shows a backup code that lets you back in if you lose your phone.
Without this code, losing access to your authenticator app means losing access to the account your customers pay into.
Click Download, keep the file somewhere safe, then click I have saved my backup code.
Stripe backup code dialog with a download button
An Authenticator app added dialog confirms it worked. Click Done.
Confirmation that the authenticator app was added
The security section now shows two-step authentication as complete. Click Continue to move on.
Stripe security section showing two-step authentication is complete

Choose your extras

Stripe offers three optional additions. On the tax and climate screens especially, the option that costs you something is the large coloured button while the free choice sits quietly underneath, so read these rather than clicking through them.
1

Fraud protection

Stripe pre-selects Standard, which charges a few cents on every transaction. You want Lite, which is included at no cost.You have no customers yet, so paying per transaction to prevent fraud that doesn’t exist is premature, and your charges are small enough that a few cents each is a real share of every sale. Your app also guards these endpoints already, since buying requires a confirmed account and purchases are rate limited.That said, telephony does attract fraud, with stolen cards used to buy numbers for scams. If you ever start seeing disputes or suspicious signups, switch to Standard in your Stripe settings.Select Lite, then click Continue with Lite.
Stripe fraud protection options with Lite selected

Standard is pre-selected. Lite is the one to choose.

2

Tax calculation

Your platform doesn’t calculate tax at checkout, so turning this on wouldn’t change anything for your customers.That doesn’t mean tax isn’t your problem. Once you’re making real money you will have to collect and remit it. In Canada the federal threshold is thirty thousand dollars of revenue, with Quebec running its own separate registration on top. In the United States it works per state, with different thresholds and different rules about whether software subscriptions are taxable at all, based on where your customers are rather than where you are.
Sort this out with an accountant once you have real revenue. This is a setup guide, not tax advice.
Click Skip for now, the quieter option underneath the main button.
Stripe automatic tax calculation page with the Skip for now option
3

Climate contribution

Nothing against it, but it’s a direct deduction from your margin on a business without a single customer yet, and you can turn it on later from your dashboard once you know your numbers. It’s also worth knowing that your profit dashboard doesn’t track this contribution, so enabling it would make the profit it shows slightly higher than what you really made.Click No thanks, underneath the coloured button.
Stripe Climate contribution page with the No thanks option
4

Review and submit

You’ll land on a summary of everything you entered. This is a good place to check your work: two-step authentication should say On, the fraud protection plan should say On with Radar Lite, and tax calculation and climate commitment should both say Off. Each block has an Edit button if something is wrong.When it all looks right, click Agree and submit.
Stripe review and submit page showing all entered details and chosen options

Check the four settings on the right before submitting.

A dialog confirms you’re now in your live account. Click Continue.
Stripe dialog confirming you are now in your live account, with a Continue button

Live account means real payments. You can still switch back to a sandbox later to test things.

Stripe may then offer to create a public profile for your business. Close it with the X in its corner, which drops you on your Stripe home page. It’s optional, nothing in your platform uses it, and it would publish your business address publicly, which at this stage is usually your home address.
Stripe public profile creation page with its close button

Finish verifying your identity

Your account exists, but Stripe usually still wants a photo ID before it will let money move. It doesn’t put this in front of you, so you have to go and look for it.
1

Open your account status

Click the gear icon at the top right to open Settings.
Stripe dashboard with the settings gear icon
In the Account settings section, click Business.
Stripe settings page with the Business option
Open the Account status tab.
Stripe Business settings with the Account status tab
2

Start the verification

You’ll usually find a task asking you to verify your identity with a photo ID. Read what it says: payments and payouts get paused if you ignore it, and it comes with a deadline.Click Start.
Check this page from time to time even after today. It’s where Stripe tells you about anything that would stop your customers from paying you, and the notification emails are easy to miss.
Stripe account status page showing a past due identity verification task

Payments and payouts get paused if this task is left unresolved.

A Review and confirm page appears with your details, and the Management and ownership section marked Incomplete. Click Edit next to it.
Stripe review and confirm page with an incomplete section
3

Choose the verification method

Two methods are offered. Select Liveness verification (recommended), which takes a photo of your ID and a selfie and verifies immediately. The alternative needs two separate documents and takes one to two days.Then click Scan photo ID.
Stripe ID verification method choice with Liveness verification selected

Liveness verification is immediate. The other option takes days.

Stripe explains that verification is handled by its partner. Click Agree and continue.
Stripe identity verification consent screen
4

Verify on your phone

A Continue on your mobile device screen appears with a QR code. Scan it with your phone’s camera, and if scanning isn’t possible there’s an Other options link underneath for alternative ways to continue.Then follow the instructions on your phone to photograph your ID and take a selfie.
Stripe QR code to continue verification on a phone

Have your phone and your ID ready before you start.

Once you scan the code, your computer switches to a waiting screen reading Complete verification on your mobile device to continue. Leave it alone and carry on with your phone.
Computer screen waiting while verification is completed on a mobile device

This is just a waiting screen. Everything happens on your phone from here.

When you finish on your phone, your computer moves on by itself to the Review and confirm page. The Incomplete label on the management and ownership section is now gone, and ID document has been added to the list of information provided, which is what marks that section as done.Click Confirm.
Stripe review and confirm page with ID document listed and no incomplete label

ID document now appears in the list, and the Incomplete label is gone.

5

Check there's nothing left

Return to the Account status tab and make sure it says there are no active tasks for your account.Then click Product catalog in the sidebar, where the next section starts.
Stripe account status showing no active tasks

No active tasks means nothing is blocking your payments.

Create your products

Your customers buy two things: packs of call minutes, and phone numbers. You’ll create both here, and the settings differ in ways that matter.
1

Create the minutes pack

Click Add a product.
Stripe product catalog with the Add a product button
Fill in the form:
  • Name: 100 Minutes
  • Description: 100 minutes of AI phone agent call time. Minutes are added to your account immediately after purchase and never expire.
  • Skip the image
Then two things in the pricing section that are easy to get wrong:Select One-off, not Recurring. Minutes are bought as a one-time purchase, and your app refuses the checkout if this price is recurring.Set the currency to USD even if you’re not American. Your platform records all its revenue in US dollars, and your profit dashboard shows wrong numbers if you charge in anything else.For the amount, enter 25.00, then click Add product.
Stripe product form for the minutes pack with One-off pricing and USD currency

One-off and USD are the two settings to get right here.

2

Understand that price

You’ll want to adjust this eventually, so it’s worth knowing what you’re working with.Every minute your customers talk costs you money: roughly nine and a half cents to Retell, plus about a cent to Twilio for the call itself. A hundred minute pack therefore costs you around eleven dollars before Stripe takes its cut. That’s your floor, and the arithmetic is simple: your pack size multiplied by what Retell charges per minute is the number you can never go below. Selling a hundred minutes for ten dollars doesn’t make you cheap, it makes you lose a dollar on every sale, and ten dollars whenever someone buys ten packs at once.At twenty five dollars you keep about thirteen dollars per pack after every cost, which is a margin that survives a customer emailing you with a problem. It’s also genuinely cheap for the buyer: a business assembling this themselves pays between twenty five and thirty three cents a minute for the same pieces, and agencies selling it as a service charge far more. Think about what your customer compares it to as well, which isn’t another software subscription, it’s a receptionist. A hundred minutes answers roughly thirty to sixty calls, and one booking they’d otherwise have missed pays for the whole pack several times over.Twenty five dollars is deliberately on the affordable side of that market, for the same reason the phone number is: while you have no customers and no reputation, a price nobody hesitates over is what gets you your first ones, and those first customers are what prove this works for you. Once you have a handful of them, some results to point at and a bit of a name, raising your price is a normal thing to do and much easier than starting high and waiting for someone to take a chance on you.Price higher or lower if your market calls for it. Twenty dollars is aggressive and still profitable, thirty works if you sell on service rather than price. Just don’t undercut yourself below the floor, and remember that raising prices on existing customers is harder than raising them for new ones, so it’s worth revisiting whenever your customer base grows.
3

Get its price ID

Click your 100 Minutes product to open it.
Stripe product catalog with the minutes product listed
In the Pricing section, click the three dots at the end of the price row and choose Copy price ID.
The panel on the right also shows a Product ID starting with prod_, and that is not the one you want. The price ID starts with price_ and only appears in that three dots menu. Copying the wrong one gives you a checkout that fails.
Stripe pricing row menu with the Copy price ID option

Use the three dots on the price row, not the Product ID on the right.

In Vercel, open your project’s Environment Variables, find STRIPE_PRICE_ID, click the three dots, click Edit, paste it and click Save.While you’re there, find NEXT_PUBLIC_MINUTES_PER_UNIT. This is how many minutes your app actually credits after a purchase, so it has to match the pack you just created. The file you imported already set it to 100, so if you kept our pack size there’s nothing to change. If you chose a different size, edit it to your number, because if your product says 200 minutes and this says 100, your customers pay for 200 and receive 100.
4

Create the phone number product

Back in Product catalog, click Add a product again.
Stripe product catalog with both the Add a product button and the minutes product
Fill it in:
  • Name: Phone Number
  • Description: A dedicated phone number for your AI agent, billed monthly. Cancel anytime from your billing portal.
This time the pricing is the opposite of the last one: choose Recurring, set the amount to 5.00, keep the currency on USD, and leave the billing period on Monthly. The preview on the right should confirm five dollars per month.Click Add product.
Stripe product form for the phone number with Recurring monthly pricing

Recurring and Monthly this time, unlike the minutes pack.

5

Get its price ID too

Back in Product catalog, click your Phone Number product to open it.
Stripe product catalog with the phone number product listed
Use the three dots on its price row and choose Copy price ID.
Copying the price ID of the phone number product
In Vercel, paste it into STRIPE_PHONE_NUMBER_PRICE_ID and save.Then find NEXT_PUBLIC_PHONE_NUMBER_PRICE. This is the price your app displays before checkout, and it has to match what Stripe actually charges. The file you imported already set it to 5.00, so if you kept our price there’s nothing to change. If you chose a different amount, edit it to match, because Stripe is what bills your customer and a mismatch means they see one price and get charged another.A word on this price too. A phone number costs you about a dollar fifteen a month from Twilio, so at five dollars you keep roughly three dollars forty after Stripe’s cut. That sounds small, but this is the only part of your business that bills automatically every month whether or not your customers make a single call, and it’s what turns this into predictable revenue instead of waiting for people to buy minutes.Five dollars is also extremely competitive. An ordinary business phone line costs between ten and thirty dollars a month, so most companies charging for something like this charge considerably more. That’s exactly why it works while you’re starting out: a price nobody hesitates over gets you your first customers quickly, and those first customers are what tell you whether this business works for you. You can raise prices later once you have proof and confidence, which is far easier than starting high and wondering why nobody’s signing up.Be careful going lower though, because Stripe takes thirty cents flat on every transaction no matter its size. That flat fee eats a much bigger share of a small charge, so dropping the price by a dollar or two costs you far more of your margin than it looks.

Set up the webhook

This is the most important part of the Stripe setup. Right now, if a customer paid you, Stripe would take their money and your app would never know: no minutes added, no phone number provisioned, nothing. The webhook is what tells your app a payment happened so it can deliver what was bought.
1

Open webhooks

Click Developers at the very bottom of the sidebar, then Webhooks in the menu that opens.
Stripe Developers menu with the Webhooks option
Click Add destination.
Stripe webhooks page with the Add destination button
2

Select the four events

Leave the scope on Your account, the payload style on Snapshot, and the API version on whatever Stripe pre-selected.Then search for and check exactly these four events:These are the four your app knows how to handle. Selecting fewer breaks one of those flows; selecting more just sends events your app ignores.Click Continue.
Stripe event selection showing the four chosen events

Four events, no more and no fewer.

3

Choose the destination type

Select Webhook endpoint and click Continue.
Stripe destination type options with Webhook endpoint selected
4

Point it at your app

Give the destination a name you’ll recognise, such as yourdomain-webhook.For the endpoint URL, enter your domain followed by /api/webhooks/stripe:
Use the www version, not the bare domain. Your bare domain redirects to www, and webhook deliveries don’t reliably follow redirects, which would mean payments that go through but never deliver anything.
The description is optional. Click Create destination.
Stripe destination configuration with the name and endpoint URL
5

Copy the signing secret

On your new destination’s page, the right side shows a Signing secret, hidden by default. This is what lets your app confirm a webhook really came from Stripe rather than from someone pretending to be Stripe.Click the reveal icon, copy it, then in Vercel find STRIPE_WEBHOOK_SECRET, paste it and save.Once saved, close this page with the X in its top right corner.
Stripe webhook destination page showing the hidden signing secret

Reveal the secret, copy it into Vercel, then close the page with the X.

Activate the billing portal

The billing portal is the Stripe-hosted page your app sends customers to when they manage their subscription: updating their card, seeing invoices, or cancelling a phone number. Every default on this page is already right for your app, but Stripe won’t open a portal whose settings have never been saved, so this section exists for one click.
1

Open the portal settings

Click the gear icon at the top right to open Settings.
Stripe dashboard with the settings gear icon
In the Product settings section, click Billing.
Stripe settings page with the Billing option
Then click Customer portal.
Stripe billing settings with the Customer portal option
2

Save it

Expand the Cancellations section and confirm that cancellations happen at the end of the billing period rather than immediately, which is the default.That’s what you want: your customer paid for the full month, so they keep their number until the month ends, and at that moment Stripe notifies your app, which releases the number automatically. Cancelling immediately would take away something they already paid for, which is how you get disputes.Leave everything else alone, including the Business information fields, since your app already tells Stripe where to send customers back to.Then click Save changes, even though you changed nothing.
That first save is what activates the portal on your live account. Skip it and the billing button in your app fails for every customer.
Once it’s saved, click Settings in the breadcrumb at the top to leave this page. Nothing depends on going there, it’s simply the easiest way back out to a general page before the last section.
Stripe customer portal settings with the Save changes button and the Settings breadcrumb

Nothing to change here, but the save is required.

Get your secret key

1

Open your API keys

Click Developers at the bottom of the sidebar, the same button you used for the webhooks, then click API keys.
Stripe Developers menu with the API keys option
You’ll land on the API keys tab, with a Standard keys section showing a Publishable key and a Secret key. You only need the secret one, since your app talks to Stripe from its server rather than from the browser.On the Secret key row, click Reveal live key.
Stripe API keys page with the Reveal live key button on the secret key row
2

Verify it's you

A Reveal live key dialog warns that this key can only be revealed once. Click Reveal.
Stripe Reveal live key confirmation dialog

Stripe shows this key one time only, which is why it asks twice.

Because this key can move real money, Stripe then verifies your identity, so don’t be surprised by what follows. A Verification required popup says it will send a link to your email, and asks you to open that link in another tab of the same browser. Keep this Stripe tab open and click Send verification.
Stripe verification required popup with the Send verification button
The popup then asks you to check your email. Leave it open.
Stripe popup asking you to check your email
Go to mail.hostinger.com in a new tab, open the email from Stripe and click its verification button.
Stripe verification email for revealing the API key
You’ll get a page confirming it worked, and there’s nothing to do on it. Switch back to your Stripe tab, which now asks for the 6-digit code from your authenticator app. Enter it.
Stripe authenticator code prompt before revealing the key
3

Copy the key

Your key appears, starting with sk_live_.
Read the warning above it: you won’t be able to see this key again. Copy it now, and if you lose it before pasting you’ll have to rotate the key and repeat this step.
Treat this key like the password to your money: it can create charges and refunds on your account, so it lives in Vercel and nowhere else.Copy it, then in Vercel find STRIPE_SECRET_KEY, click the three dots, click Edit, paste it and click Save. Back in Stripe, click Done.
Stripe dialog displaying the live secret key

Stripe shows this key exactly once.

Deploy everything

Every one of your 22 settings now holds a real value. But Vercel doesn’t apply changes to your live site automatically, it needs a fresh deployment to pick them up.
1

Redeploy

After saving the Stripe secret key, a message appeared at the bottom right of your Environment Variables page saying a new deployment is needed. Click its Redeploy button.If you dismissed that message or came back later, do the same from the Deployments tab in the sidebar: find the most recent deployment at the top, click the three dots at the end of its row and click Redeploy.
Vercel environment variables page with the redeploy prompt
A popup asks you to confirm, already set to Production with your latest deployment selected. Leave everything as it is and click Redeploy.
Vercel redeploy confirmation dialog
2

Watch it build

A message confirms the deployment was created. Click View Deployment to watch it, which usually takes a minute or two.
Vercel notification that the deployment was created
When the Status line says Ready, your app is live with every real credential from every provider you configured. Click your domain in the Domains list on that page to open it.
Vercel deployment page showing Ready status and the custom domain

Ready means your platform is running on real credentials.

You’re done

Your platform is live. Every provider is connected: the code is deployed at your own domain over HTTPS, emails send from your brand, the database is running, agents can talk, calls come in through your own phone numbers, and customers can pay you. Go to your domain, sign up, confirm your email, and you should land on a working dashboard.
Sign up with the same email you set as NEXT_PUBLIC_SUPPORT_EMAIL. That’s what your app uses to recognise you as the admin, and it’s what unlocks the Profit Dashboard and the Branding page where you make the platform your own.