---
title: "How to connect payments, e-mail, push and more"
description: "Your own accounts: outgoing e-mail, PayPal, Stripe and Razorpay, text messages, push through Firebase and the optional AI writing helper."
url: "https://osdots.com/docs/handyman-booking-os-integrations/"
updated: "2026-11-03"
category: Product Documentation / Handyman Booking OS by OsDot™
---

# How to connect payments, e-mail, push and more

Every integration runs on **your own provider account**: payments, text messages and push go through your own accounts, and their costs are yours. OsDot takes no commission.

## Video tutorial

[Invoices and payments](https://www.youtube-nocookie.com/embed/G01XlQRjJOM?rel=0)

[Watch Invoices and payments on YouTube](https://www.youtube.com/watch?v=G01XlQRjJOM)

Each integration has its page in the **System** group. The pages work the same way:

- **Existing credentials stay hidden; leave a credential blank to keep it.** A saved key or password is never shown again; type a new one only to replace it.
- The page's state says **Disabled** until you switch the integration on, then whether it is configured and tested.
- **Save settings** stores the values; **Validate saved configuration** checks them.

## E-mail (SMTP) — set this up first

**System → E-mail (SMTP)**: **Enable E-mail (SMTP)**, the **Transport** (**SMTP server**), the **SMTP host**, **SMTP port** and **Encryption** (**STARTTLS** or **Implicit TLS**), the **SMTP username** and **SMTP password**, the **From e-mail**, **From name** and **Reply-to e-mail**. Use the details your e-mail provider or hosting gives for sending.

Until e-mail works, nothing is e-mailed: no sign-in codes, booking confirmations, reminders, estimates, invoices, review requests or the workers' job e-mails. **Business → Messages** shows each message's sending status.

## Payment providers

Three payment providers are available — **System → Stripe**, **System → PayPal** and **System → Razorpay** — each on your own account with that provider:

| Page | You enter | The page also shows |
| --- | --- | --- |
| **Stripe** | **Enable Stripe**, the **Mode** (**Test** or **Live**), the **Publishable key**, **Secret key** and **Webhook secret** | the webhook address to register with Stripe, and which currencies Stripe accepts |
| **PayPal** | **Enable PayPal**, the **Mode** (**Sandbox / Test** or **Live**), the **Client ID**, **Client secret** and **Webhook ID** | the webhook address to register with PayPal, and the currencies PayPal accepts (some only in whole units) |
| **Razorpay** | **Enable Razorpay**, the **Mode** (**Test** or **Live**), the **Key ID**, **Key secret** and **Webhook secret** | the webhook address to register with Razorpay; Razorpay requires a business account registered in India, and currencies other than INR need international payments enabled on that account |

For each provider:

1. Create the keys in the provider's own dashboard (test keys first).
2. Register the **webhook address** the page shows (it ends in `/payments/webhooks/stripe`, `/paypal` or `/razorpay` on your own site) in the provider's dashboard, and copy its secret or ID back here.
3. Save, then **Validate saved configuration**.
4. Make one payment in test mode before you switch the **Mode** to live.

Prices are always worked out by your site, never taken from the customer's browser. Checkout offers only the providers that accept your site's currency. **Money → Reconciliation** shows what is still being confirmed.

## Payment options

**System → Payment options**:

- **Order of the online payment methods** (comma separated);
- **Prices include tax** — **No: tax is added to the prices** or **Yes: the prices shown include tax**;
- **Pay at the job (jobs without a required deposit)** and **Pay at pickup (pickup orders)** (on or off), and what a customer is told with “Pay at the job”, “Pay at pickup” and “Pay on delivery”;
- **The deposit of a job at the customer's address** — each service's own deposit (with or without the travel fee paid up front), a percentage of the whole job, or no deposit — and the percentage;
- your app's Android package name, its signing certificates' SHA-256 fingerprints and its iOS App ID, so that a customer who pays from the app comes back to it.

## Text messages (SMS)

**System → SMS**: **Enable SMS** and the **Provider** — **An HTTP gateway**, **Twilio** or **AWS End User Messaging SMS** — with that provider's fields (the gateway's address and token; Twilio's account SID and auth token; for AWS, an IAM user allowed to send texts only, its region and origination identity). Then the **Sender**, the **Countries texts may go to** (two-letter codes, for example `US, CA`), the **Price of one segment** in the site's currency and a **Monthly cap**. The cap is never passed: reminders and confirmations stop at 90 % of it, so that sign-in codes sent by text keep the rest. **Business → Messages** shows this month's segments and their cost.

Text messages go through your own SMS provider account; you pay your provider directly. Once SMS is on, **Business → Reminders** can send a reminder by text message too.

## Push notifications (Firebase)

**System → Push notifications**: **Enable Push notifications** and **Send through** — **Firebase Cloud Messaging (your Firebase project)**, with the **Firebase service account key (JSON)** of your own Firebase project, or **A push gateway** (its address and token). Push also depends on your app's build: see the app build guide in the Flutter source package.

Which messages go by push: a **customer** gets a push from the worker's **On my way** and **Running late** (when that feature is on) and from each reminder you set to **Push**; a booking's confirmation and a changed job's notice go by e-mail, and the suggested reminders are e-mail only until you tick **Push** on them. A **worker** gets a push and an e-mail when one of their jobs is assigned, moved or cancelled. A phone receives push once the app is signed in there.

## AI writing helper (optional)

**System → AI writing helper** is off on a new site, and everything works without it. To use it: **Enable AI writing helper**, the **Provider** your key is from, the **Model** (blank: the first listed for the provider), the **API key (your business's own)**, **Writing helper** on, and the limits — **Drafts a month**, **Tokens a month** (for all accounts together) and the seconds to wait for an answer.

The helper sits beside a service's description in the owner's pages; a draft is only a draft for you to review, and the helper saves nothing by itself. **System → AI usage** shows this month's drafts and tokens against your limits. The provider's charges for your key are yours.
