# Integrations

> Connect your own payment gateway, courier, WhatsApp and email accounts, with sign-up links, dashboard links, the exact values and the URLs to paste for each.

Source: https://docs.bakasir.com/en/docs/portal/integrations



**Integrations** connect Bakasir to accounts you own at other companies. The money, messages and shipments go through your accounts, so Bakasir never holds your customers' payments. This page explains what each integration is for, whether you need it, and how to set it up step by step. Every provider section starts with the links you need (sign-up, dashboard, the provider's own guide, pricing), so you do not have to search for them.

## Before you start

- You are the **Owner**. Managers can open the page but only view it.
- Open **Settings → Integrations**. Every card shows its status (**Connected**, **Not connected** or **Saved, not verified**), what it is used for, and a **Read the guide** link to the matching section below.
- Secret values (server keys, passwords, tokens) are never shown again once saved. Leave a secret field empty to keep the stored value.
- Keep two browser tabs open: Bakasir in one, the provider's dashboard in the other. You will copy values both ways.
- Use **Sandbox** or test mode first. Switch to production only after a test order works.
- Provider dashboards change their menu names from time to time. If a menu is not where this page says, search the dashboard for the field name, or open the provider's guide linked in the section.

## What each integration is used for

| Integration | What depends on it | Do you need it? | Setup time |
| --- | --- | --- | --- |
| [**Midtrans**](#midtrans) | Online store checkout, booking deposits, self-order and QRIS at the POS. | Connect Midtrans **or** DOKU to accept digital payments. | 15 minutes for Sandbox, plus the provider's review for Production |
| [**DOKU**](#doku) | The same flows as Midtrans, with DANA, OVO and more wallets. | Connect DOKU **or** Midtrans. | 20 minutes for Sandbox, plus the provider's review for Production |
| [**Biteship**](#biteship) | Live courier rates at checkout, shipments and waybills from the order. | Only for the **Shipping** plugin. | 20 minutes, plus Biteship's live activation |
| [**RajaOngkir**](#rajaongkir) | Live courier prices at checkout and waybill tracking. Parcels are booked with the courier by hand. | Only for the **Shipping** plugin, as an alternative to Biteship. Choose one. | 10 minutes |
| [**WhatsApp**](#whatsapp) | Receipts, purchase orders, online order updates and reservation reminders from your own number. | Optional. Without it Bakasir opens a WhatsApp chat link for you to send by hand. | 30 minutes, plus Meta's template approval (up to 24 hours) |
| [**SMTP**](#smtp) | Your business email sent from your own mail server: receipts, payslips, scheduled reports, purchase orders and booking emails. | Optional. Needs a plan that includes own SMTP. | 10 minutes |
| [**Twilio**](#twilio) | Stores and checks your Twilio key. Bakasir does not send SMS yet. | Optional, and nothing else uses it today. | 10 minutes |

<Callout type="info" title="Plan and currency for payments">
    Midtrans and DOKU charge your own customers only on the **Mulai** plan or higher, and only for stores that sell in **IDR**. On the Free plan the cards can be filled in, but checkout does not offer digital payments.
</Callout>

<Callout type="info" title="Which emails use the SMTP card">
    When your plan includes own SMTP and the SMTP card is complete, the email your business sends goes through your own mail server: **Receipt via Email**, payslips, scheduled reports, purchase orders to suppliers and booking emails. Everything else, such as billing, security and verification email from Bakasir, always goes through Bakasir.
</Callout>

## Midtrans

Midtrans takes online payments from your customers into your own Midtrans account: cards (with 3D Secure inside Bakasir), QRIS, virtual accounts (BCA, BNI, BRI, Mandiri, Permata, CIMB), GoPay, ShopeePay, Indomaret and Alfamart. Bakasir subscriptions are billed with Bakasir's own keys, not yours.

**Prepare before you start**

- An email address and a phone number for the Midtrans account.
- For **Production** (real money), Midtrans reviews your business. Per Midtrans, an individual needs the owner's KTP (plus NPWP if you want card payments). A company needs the director's KTP, the company NPWP, the deed of establishment and amendments, and the Kemenkumham decree. You also need a website, or a social media page or product catalog if you have no website. See the [Midtrans list of legal documents](https://docs.midtrans.com/docs/what-are-the-legal-documents-required-for-midtrans-account-registration).
- Time: about 15 minutes for Sandbox. Production approval is on Midtrans' side, and card payments can take up to 10 working days to be confirmed.

**Links you will need**

- Sign up: [dashboard.midtrans.com/register](https://dashboard.midtrans.com/register). Midtrans' own [registration guide in Indonesian](https://midtrans.com/id/passport) shows each step.
- Sandbox dashboard (for testing): [dashboard.sandbox.midtrans.com](https://dashboard.sandbox.midtrans.com). Production dashboard (real money): [dashboard.midtrans.com/login](https://dashboard.midtrans.com/login).
- Access keys: [Sandbox](https://dashboard.sandbox.midtrans.com/settings/access-keys) and [Production](https://dashboard.midtrans.com/settings/access-keys). You must be logged in.
- Activate more payment methods later: [dashboard.midtrans.com/new_payment_method](https://dashboard.midtrans.com/new_payment_method).
- Midtrans guides: [Midtrans account and keys](https://docs.midtrans.com/docs/midtrans-account), [notification URL](https://docs.midtrans.com/docs/https-notification-webhooks), [testing payments in Sandbox](https://docs.midtrans.com/docs/testing-payment-on-sandbox), [switching to Production](https://docs.midtrans.com/docs/switching-to-production-mode).
- Fees: [midtrans.com/pricing](https://midtrans.com/pricing).




### Create your Midtrans account

Open [dashboard.midtrans.com/register](https://dashboard.midtrans.com/register), fill in the form and confirm your email (look for the email titled "Instruksi Konfirmasi"). The Sandbox environment is created for you automatically and is free.




### Get your Sandbox keys

Log in at [dashboard.sandbox.midtrans.com](https://dashboard.sandbox.midtrans.com). The **Environment** switch at the top left shows which environment you are in (Sandbox has an orange sidebar, Production a blue one). Open **Settings → Access Keys** and copy the **Client Key** and the **Server Key**. The Server Key is a secret: never share it.




### Enter them in Bakasir

In **Settings → Integrations**, click **Connect** on **Midtrans**. Paste the **Client Key** and **Server Key**. The mode follows the Server Key: a key that starts with `SB-` runs in **Sandbox**, any other key in **Production**.

Choose the **QRIS acquirer** (**GoPay** or **ShopeePay (airpay shopee)**), the QRIS network that is active on your Midtrans account. If you are not sure, leave **GoPay**.




### Paste the notification URL into Midtrans

The Midtrans window in Bakasir shows the **Payment Notification URL**. Click **Copy**. In the Midtrans dashboard (same environment as the keys) open **Settings → Payment**, find **Payment Notification URL**, paste it and save. Older Midtrans dashboards and guides call this page **Settings → Configuration**, with an **Update** button. On Bakasir cloud the URL is:

```text
https://api.bakasir.com/webhooks/shop/midtrans
```

Leave **Recurring Notification URL** and **Pay Account Notification URL** (account linking) **empty**. **Finish Redirect URL** is not used, because card 3D Secure opens inside Bakasir. The URL must be reachable from the internet, so it cannot be a local address.




### Test and save

Click **Test Connection**. Bakasir saves what you typed and asks Midtrans to confirm the Server Key. When you see **Success. Your credentials work.**, click **Save**. The card now shows **Connected**.




### Place a test order

Open your online store, add a product and choose **Online Payment** at checkout. Pay it with the Midtrans simulator, following [testing payments in Sandbox](https://docs.midtrans.com/docs/testing-payment-on-sandbox): the [QRIS simulator](https://simulator.sandbox.midtrans.com/v2/qris/index) for QRIS and e-wallets, the bank simulators for virtual accounts, and the test card numbers on that page for cards. In **E-Commerce → Online Orders** the order should turn **Paid** by itself.

<Callout type="warn" title="Never pay a Sandbox order with real money">
    Sandbox virtual account numbers and QR codes can match real ones. Midtrans warns that real money sent to them may be lost. Use only the simulators.
</Callout>




### Go live

1. Finish activation. In the Production dashboard, complete the registration banner ("One more step!") and upload the documents listed above. Midtrans may email you for more information.
2. Switch the **Environment** switch to **Production**, open **Settings → Access Keys** and copy the Production keys.
3. In Bakasir, open **Midtrans → Manage**, paste the Production **Client Key** and **Server Key** (Production keys do not start with `SB-`), and click **Test Connection**, then **Save**.
4. In the Production dashboard, set the **Payment Notification URL** again. Sandbox and Production keep separate settings.
5. Place one small real order (Midtrans suggests at least Rp10,000) and check that it turns **Paid**. Cancel or refund it afterwards if you wish.

To activate more payment methods (for example cards or Indomaret), use **+ Payment Method** in the Production dashboard.




<Callout type="warn" title="Use the shop URL, not the other one">
    Use the URL that ends in `/webhooks/shop/midtrans`. The URL `/webhooks/midtrans` is only for Bakasir's own subscription billing and will not confirm your customers' orders.
</Callout>

**What your customers will see.** At checkout the store shows **Choose a payment method** with the groups **Card**, **QRIS**, **Virtual Account**, **E-wallet** and **Retail store**, depending on what is active on your Midtrans account. Card details go straight to Midtrans and never reach Bakasir. After paying, the page updates by itself and the order turns **Paid** in your Portal.

**Costs.** Midtrans charges you per successful transaction and setup is free. Rates seen on 2 November 2026 on [midtrans.com/pricing](https://midtrans.com/pricing), before VAT: virtual account Rp4,000, QRIS 0.7%, GoPay 2%, credit card 2.9% plus Rp2,000. Check the page for the current rates. Bakasir adds no fee on top.

**Common problems**

| What you see | Cause and fix |
| --- | --- |
| **midtrans rejected the server key: check the key and that it matches the selected mode** | The key and the environment do not match. A Sandbox key (`SB-`) only works with Sandbox, a Production key only with Production. Copy the key again without spaces. |
| **server_key is required** | You clicked **Test Connection** with the Server Key empty. Paste it first. |
| Customer paid but the order stays unpaid | Check that **Payment Notification URL** is saved in the right Midtrans environment, then check the order again. Bakasir also asks Midtrans directly when the customer's payment page checks the status, so a late notification is recovered. |
| No **Online Payment** option at checkout | You are on the Free plan, the store does not sell in IDR, or the keys are incomplete (both keys are required). |
| The customer's payment method is missing | That method is not active on your Midtrans account. Request it with **+ Payment Method** in the Production dashboard. |
| **the QRIS acquirer is gopay or airpay shopee** | Choose one of the two values in the **QRIS acquirer** list. |

## DOKU

DOKU takes online payments into your own DOKU account: QRIS, virtual accounts (BCA, BNI, BRI, Mandiri, Permata, CIMB), DANA, ShopeePay, OVO, Indomaret and Alfamart. DOKU does not offer card payments in Bakasir. DOKU uses a key pair: you give DOKU your public key, and DOKU gives you its public key.

**Prepare before you start**

- A business email address and phone number for the DOKU account.
- For **Production**, DOKU verifies your business within about 48 hours. Per DOKU, a company needs the NIB, the deed of establishment and amendments, the Kemenkumham approval letters, the NPWP, the director's KTP and a photo that proves the business (location, activity or product). A business without a legal entity (Indonesian citizens only) needs the KTP, a selfie holding the KTP and the business photo. Files must be readable and uncensored (PDF, JPG or PNG, up to 15 MB each). Some products need extra licenses.
- Time: about 20 minutes for Sandbox. Some payment methods are switched on by DOKU sales, so allow extra time.

**Links you will need**

- Sign up for production: [dashboard.doku.com/bo/register](https://dashboard.doku.com/bo/register). Sign up for the Sandbox (testing): [sandbox.doku.com/bo/sandbox-registration](https://sandbox.doku.com/bo/sandbox-registration).
- Log in: [Sandbox](https://sandbox.doku.com/bo/login) and [Production](https://dashboard.doku.com/bo/login).
- DOKU guides: [create an account](https://docs.doku.com/get-started/create-account), [activate your business (Indonesia)](https://docs.doku.com/get-started/activate-business/business-account), [activate services](https://docs.doku.com/get-started/manage-business/activate-services), [API keys and public keys](https://docs.doku.com/get-started/manage-business/set-up-integration), [notification URL per payment method](https://docs.doku.com/get-started/manage-business/set-up-integration/webhook-payment-notification), [simulate transactions](https://docs.doku.com/get-started/manage-business/set-up-integration/simulate-transactions).
- Fees: [doku.com/pricing](https://doku.com/pricing).




### Create the accounts

Create a **Sandbox** account first with the Sandbox link above, then a **Production** account when you are ready. They are separate: a login for one does not work for the other. For Production, enter the OTP DOKU emails you, then follow DOKU's [activation guide](https://docs.doku.com/get-started/activate-business/business-account): choose the account type, enter business data, upload the documents and wait for the verification email.




### Activate the services

In the DOKU dashboard open **Settings**, then under **Account** choose **Service**, click **ADD SERVICE**, pick the service (virtual account, QRIS, e-wallet, convenience store) and click **ACTIVATE**. Some services need DOKU's sales team to approve them.




### Choose the mode in Bakasir

In **Settings → Integrations**, click **Connect** on **DOKU** and choose **Sandbox** to try things out or **Production** for real payments. It must match the DOKU environment you copy from.




### Copy the Client ID and Secret Key

In the DOKU dashboard open **Settings**, then under **Account** choose **API Keys**. Older dashboards call this **Integration → API Keys**. Your **Client ID** is on the page. Click **Reveal Key**, enter the 6-digit code DOKU emails you, and copy the **Secret Key** within 30 seconds. Paste both into the **Client ID** and **Secret Key** fields in Bakasir.




### Generate your key pair

In Bakasir click **Generate key pair**. Bakasir creates the pair and shows **Your public key**. Click **Copy**, then paste it on the same **API Keys** page of the DOKU dashboard, as your **Merchant Public Key**. The private key stays on the server and is never shown.




### Copy DOKU's public key back

On the DOKU **API Keys** page click **Reveal Key** next to the **DOKU Public Key** and copy it. Paste the whole block, including the `BEGIN` and `END` lines, into **DOKU public key** in Bakasir.




### Paste the URLs into DOKU

The Bakasir window shows two URLs. On Bakasir cloud they are:

| Bakasir field | Where it goes in the DOKU dashboard | URL |
| --- | --- | --- |
| **Notification URL** | **Settings → Payment Settings**, then each channel you use: **Virtual Account** (click **Configure**), **QR Payment** for QRIS (click **Edit**), **e-Wallet** and **Convenience Store** (click **CONFIGURE**). Save each one. | `https://api.bakasir.com/webhooks/shop/doku` |
| **SNAP Token URL (Virtual Account)** | **Settings → Account → API Keys**, in the **Token URL** field. | `https://api.bakasir.com/webhooks/shop/doku/token` |

DOKU calls the token URL to get a token before it sends virtual account payment notices. If a channel has no URL, DOKU does not send its notices and payments stay unconfirmed.




### Test and save

Click **Test Connection**. When you see **Success. Your credentials work.**, click **Save**. The card shows **Connected**.




### Place a test order and go live

In the Sandbox place a test order from your store. Pay it with the DOKU simulator: in the Sandbox dashboard open **Settings → Payment Settings → Simulator**, choose the payment method and click **Simulate**. Check that the order turns **Paid**.

To go live, repeat the steps with your Production account: switch the mode to **Production**, copy the Production Client ID, Secret Key and DOKU public key, register **Your public key** and the two URLs in the Production dashboard, then click **Test Connection** and **Save**. Place one small real order to confirm.




<Callout type="warn" title="Replacing the key pair">
    If you click **Replace key pair**, the old public key stops working. Paste the new public key into the DOKU dashboard again, or payments will not be confirmed.
</Callout>

<Callout type="info" title="DOKU menu names">
    DOKU changes its dashboard from time to time, and the Sandbox and Production dashboards can differ slightly. If you cannot find the place for the Merchant Public Key, the Token URL or a notification URL, search the dashboard for the field name, or ask DOKU Care. Bakasir needs exactly these four things registered at DOKU: your public key, the notification URL for every channel you use, the token URL, and your Client ID and Secret Key.
</Callout>

**What your customers will see.** At checkout the store shows **Choose a payment method** with the groups **QRIS**, **Virtual Account**, **E-wallet** (DANA, ShopeePay, OVO) and **Retail store** (Indomaret, Alfamart). For OVO the customer types the phone number registered in the OVO app and approves the payment there. The page updates by itself after the payment.

**Costs.** DOKU charges per transaction and the rate depends on the method. Rates seen on 2 November 2026 on [doku.com/pricing](https://doku.com/pricing), before VAT: QRIS 0.7% above Rp100,000, virtual account Rp4,000 (BCA Rp4,500), DANA 1.5%. The page also lists the QRIS processing fee that applies from 1 November 2026. Check the page for current rates.

**Common problems**

| What you see | Cause and fix |
| --- | --- |
| **doku rejected the Client ID or private key** | The public key is not registered in the DOKU dashboard yet, or the mode does not match. Register **Your public key** in the same environment you selected. |
| **doku rejected the Secret Key: check the key and that it matches the selected mode** | Copy the Secret Key again from the right environment. If you regenerated it at DOKU, copy the new one. |
| **doku public key is not a valid PEM** | Paste the whole key block with the `BEGIN` and `END` lines, and no extra text. |
| **client_id is required** or **secret_key is required** | You clicked **Test Connection** with the field empty. |
| Virtual account payments are not confirmed | Check that both the notification URL (on the **Virtual Account** channel) and the token URL are set in DOKU. |
| QRIS or e-wallet payments stay unpaid | Check the notification URL on the **QR Payment** or **e-Wallet** channel, and that the service is active under **Settings → Account → Service**. |
| No **Online Payment** option at checkout | You are on the Free plan, the store does not sell in IDR, or the DOKU card is incomplete. All of the Client ID, Secret Key, DOKU public key and your key pair are required. |

## Choosing the active payment gateway

When both Midtrans and DOKU are connected, **Active payment gateway** appears at the top of the page. Choose the one that takes your customers' payments. The card of the active gateway shows **Active gateway**. If only one is connected, it is used automatically. Orders already started with one gateway still finish with it.

## Biteship

Biteship gives your online store live courier rates at checkout and creates the shipment and waybill from the order. It is part of the **Shipping** plugin (Rp39,000 a month, included in Tumbuh and Enterprise), which needs **E-Commerce**. The **Biteship** card only appears while the plugin is active, and it opens **Settings → Shipping**, where you also choose the provider: a store uses either Biteship or [RajaOngkir](#rajaongkir), never both at once.

**Prepare before you start**

- A Biteship account, and the **E-Commerce Suite** and **Shipping** plugins installed.
- Your pickup address with a contact name and phone number, and your products' weight in grams.
- A store that sells in **IDR**.
- Money in your Biteship balance for live shipments. Shipments are paid from your Biteship balance, not by Bakasir.
- Time: about 20 minutes with the test key. For live use Biteship must activate your Order API, which has its own review.

**Links you will need**

- Sign up: [dashboard.biteship.com/signup](https://dashboard.biteship.com/signup). Log in: [dashboard.biteship.com/signin](https://dashboard.biteship.com/signin).
- API keys and webhooks: [dashboard.biteship.com/integrations](https://dashboard.biteship.com/integrations).
- Biteship guides: [create an API key](https://biteship.com/en/docs/api/authentication), [Sandbox (testing mode)](https://biteship.com/en/docs/sandbox), [go live](https://biteship.com/en/docs/go_live/activation), [submit the activation request](https://biteship.com/en/docs/go_live/submit-activation-request), [webhook overview](https://biteship.com/en/docs/api/webhook/overview).
- Plans and limits: [biteship.com/en/docs/plans](https://biteship.com/en/docs/plans).




### Install the plugins

Install **E-Commerce Suite** and **Shipping** from **Plugins → Marketplace** (the Tumbuh and Enterprise plans already include both). See the [plugin catalog](https://docs.bakasir.com/en/docs/commerce/plugins.md).




### Create a test API key

In the [Biteship dashboard](https://dashboard.biteship.com/integrations) turn on the **Testing Mode** toggle in the sidebar, open **Integrations**, click **Pengaturan** (Settings) and then **Tambah Kunci API** (Add API key). Give it a name and copy the key right away, because Biteship shows it only once. A test key starts with `biteship_test.` and a live key with `biteship_live.`. The Order API is active by default in Testing Mode.




### Connect in Bakasir

In **Settings → Shipping**, paste the **API key**, click **Save**, then click **Test connection**. You should see **Biteship accepted the key.**




### Add the webhook

In Bakasir copy the **Webhook URL** (click **Copy webhook URL**). In the Biteship dashboard open **Integrations**, click **Pengaturan** on the webhook card and **Tambah Webhook** (Add Webhook), paste the URL and select the events **order.status** and **order.waybill_id**. Save. The URL contains a secret key of your store, so keep it private. Use a separate webhook for the test key and the live key.




### Set pickup and delivery

Fill the **Pickup address**: search and pick your **Area (district)** (type at least 3 letters), then the **Contact name**, **Contact phone** and **Full address**. Under **Delivery options** choose the **Couriers** buyers can use, set the **Default weight per item (grams)** for products without a weight, and, if you want, **Free shipping from** and **Insure parcels**. Click **Save**.




### Go live

When the test works, ask Biteship to activate your live Order API. In the Biteship dashboard turn **Testing Mode** off and create a live API key the same way as the test key (its Order API stays inactive until Biteship approves it). Open **Integrations**, click **Aktivasi Order API**, pick the live API key and the courier, enter a **Test Order ID** from your test shipments, fill in the form and click **Kirim Data Aktivasi API**. Wait until the status shows **Aktif**. Then paste the live key in Bakasir (**Settings → Shipping**), save, test again, and add the webhook for the live key.

Finally turn on **Charge shipping at checkout**. It needs the API key, the pickup address and at least one courier.




### Create a shipment from an order

Open **E-Commerce → Online Orders**, open an order and click **Create shipment**. Creating a shipment books the courier and charges your Biteship balance. The order then shows the waybill, the tracking history and buttons to refresh tracking, open the tracking page or cancel the shipment.




**What your customers will see.** At checkout the store asks for the delivery area and shows the couriers you selected with their price. Orders above your **Free shipping from** amount ship free (you still pay the courier). After you create the shipment the buyer can track the parcel.

**Costs.** Biteship has monthly plans with quotas, and live requests beyond the quota are charged from your Biteship balance. Test keys do not count toward the quota. See [Plans and limits](https://biteship.com/en/docs/plans). The courier's shipping fee is paid from your Biteship balance and is charged to the buyer in the shipping price.

**Common problems**

| What you see | Cause and fix |
| --- | --- |
| **Could not reach Biteship with this key.** | The key is wrong, or you copied it with spaces. Copy it again. Use a test key while **Testing Mode** is on and a live key after activation. |
| **Save the API key first, then test the connection.** | Click **Save** before **Test connection**. |
| **Add the API key, the pickup address and at least one courier before turning shipping on.** | One of the three is missing. Fill it in and save, then turn on **Charge shipping at checkout**. |
| **Check the highlighted values: key, area, phone and couriers must be valid.** | Pick the area from the list instead of typing it, and enter a valid phone number. |
| **Automatic shipping works for stores that sell in IDR.** | The store currency is not IDR. |
| Shipping is not offered at checkout | Both plugins must be active, and **Charge shipping at checkout** must be on. |
| Tracking never updates | The webhook is missing or points to the wrong key. Add the **Webhook URL** again, or click **Refresh tracking** on the order. |

## RajaOngkir

RajaOngkir (now run by Komerce) is the second shipping provider for the **Shipping** plugin. Choose it instead of Biteship when you book parcels with the courier yourself and only need live prices and tracking at checkout. A store uses **one provider at a time**, chosen in **Settings → Shipping**. The **RajaOngkir** card only appears while the Shipping plugin is active, and the API key is kept on this page.

| | Biteship | RajaOngkir |
| --- | --- | --- |
| Live prices at checkout | Yes | Yes |
| Price checked again when the order is placed | Yes | Yes |
| Booking the courier from the order | Yes, paid from your Biteship balance | **No.** You book the parcel with the courier and enter the waybill number on the order |
| Tracking | Automatic through a webhook | When you click **Refresh tracking**, looked up by waybill number |
| Parcel insurance | Yes | No |
| Pickup contact and address | Needed | Not needed |

**Prepare before you start**

- A Komerce account (free), and the **E-Commerce Suite** and **Shipping** plugins installed.
- The district or postal code your parcels start from.
- A store that sells in **IDR**, and your products' weight in grams.
- A way to book parcels with the courier yourself (the courier's counter, pickup app or your own account), because RajaOngkir only gives prices and tracking.
- Time: about 10 minutes.

**Links you will need**

- Sign up: [collaborator.komerce.id/registration](https://collaborator.komerce.id/registration). Log in to the dashboard and API key page: [collaborator.komerce.id/login](https://collaborator.komerce.id/login).
- Documentation: [rajaongkir.com/docs](https://rajaongkir.com/docs), [how to register and get the key](https://rajaongkir.com/docs/introduction/register), [shipping cost API](https://rajaongkir.com/docs/shipping-cost/getting_started/about), [supported couriers](https://rajaongkir.com/docs/shipping-cost/getting_started/courier_availability), [calculate domestic cost](https://rajaongkir.com/docs/shipping-cost/endpoint-rajaongkir-for-search-base/calculate-domestic-cost), [waybill tracking](https://rajaongkir.com/docs/shipping-cost/tracking).
- Plans and daily limits: [rajaongkir.com](https://rajaongkir.com).




### Install the plugins

Install **E-Commerce Suite** and **Shipping** from **Plugins → Marketplace** (the Tumbuh and Enterprise plans already include both). See the [plugin catalog](https://docs.bakasir.com/en/docs/commerce/plugins.md).




### Create an account and copy the API key

Register at [collaborator.komerce.id/registration](https://collaborator.komerce.id/registration) and verify your email. A new account starts on the free **Starter** plan, which includes the shipping cost API and needs no documents or live-mode approval. Log in at [collaborator.komerce.id/login](https://collaborator.komerce.id/login), open the **API Key** section (under the Developer settings) and create or copy your key for the **Shipping Cost API**. Keep it private.




### Connect in Bakasir

Open **Settings → Integrations**, click **Connect** on the **RajaOngkir** card, paste the **API Key** and click **Test Connection**. It saves the key and makes one real request to RajaOngkir. You should see **Success. Your credentials work.** Then click **Save**. The key is never shown again; leave the field empty to keep it.




### Choose the provider and set up pickup

Open **Settings → Shipping** and choose **RajaOngkir** under **Shipping provider**. Under **Pickup address** search your **Area (district)** by district, village or postal code (type at least 3 letters) and pick it from the list. Under **Delivery options** choose the **Couriers** buyers can use, set the **Default weight per item (grams)** for products without a weight, and, if you want, **Free shipping from**. Click **Save**, then **Test connection**. You should see **RajaOngkir accepted the key.**

Switching provider clears the pickup area and keeps only the couriers both providers offer, because the two services number their areas differently. Your Biteship key stays saved, so you can switch back.




### Go live and place a test order

Turn on **Charge shipping at checkout**. It needs the RajaOngkir key, the pickup area and at least one courier. Open your store, add a product that needs shipping, pick a delivery area and check that the couriers and prices appear. Place a test order.




### Ship an order and enter the waybill

Open **E-Commerce → Online Orders** and open the order. The shipping panel says that RajaOngkir does not book couriers. Book the parcel with the courier yourself, type the waybill number from the receipt into **Waybill number** and click **Save waybill**. The order moves to **Processing** and shows the waybill. Click **Refresh tracking** whenever you want the latest status: Bakasir looks the waybill up at RajaOngkir, fills the tracking history and, once the courier reports it delivered, completes a paid order. If you typed a wrong number, click **Remove waybill** and save the right one.




**What your customers will see.** The same as with Biteship. At checkout the store asks for the delivery area and shows the couriers you selected with their price and estimated time. The price is checked again with RajaOngkir when the order is placed, so the buyer is charged RajaOngkir's current price, and if it changed the buyer is asked to choose the courier again. Orders above your **Free shipping from** amount ship free (you still pay the courier). After you save the waybill the buyer sees it on the order tracking page.

**Costs.** RajaOngkir is paid by subscription. At the time of writing the free **Starter** plan allows 100 price checks a day, **Pro** 25,000 and **Enterprise** 50,000, with no fee per request; check [rajaongkir.com](https://rajaongkir.com) for the current plans. Every price check for a cart uses one request: when the buyer picks an area, when the cart changes, and again when the order is placed. RajaOngkir does not say whether area searches count, so plan as if they do (Bakasir keeps area results for 6 hours). When the daily limit is used up, checkout shows **Courier prices are unavailable right now. Please try again in a moment.** until the next day or until you upgrade. The courier's fee is paid to the courier when you book, and it is charged to the buyer in the shipping price.

**What RajaOngkir does not do.** In Bakasir it gives prices and waybill tracking only. Creating the shipment, pickup, labels and automatic status pushes belong to RajaOngkir's separate Shipping Delivery API, which RajaOngkir offers only on its Enterprise plan, and Bakasir does not connect to it. Until it does, you book each parcel yourself.

**Common problems**

| What you see | Cause and fix |
| --- | --- |
| **RajaOngkir 401: Invalid API key or key not found** (or **RajaOngkir 400: Invalid Api key, key not found**) | The key is wrong, was revoked, or was copied with spaces. Copy it again from the dashboard and save it in **Settings → Integrations**. |
| **Add the RajaOngkir API key under Integrations first.** | Connect the **RajaOngkir** card before you choose RajaOngkir in **Settings → Shipping**. |
| **Save the API key first, then test the connection.** | Click **Save** after choosing the provider, then **Test connection**. |
| **Add the API key, the pickup address and at least one courier before turning shipping on.** | The key, the pickup area or the couriers are missing. Fill them in and save, then turn on **Charge shipping at checkout**. |
| **Check the highlighted values: key, area, phone and couriers must be valid.** | Pick the area from the list instead of typing it, and choose only couriers from the list. |
| **Courier prices are unavailable right now. Please try again in a moment.** | RajaOngkir did not answer or your daily limit is used up. Test the connection, and look at your usage in the dashboard. |
| **No courier can deliver to this area.** | None of the couriers you selected serves that route. Select more couriers in **Settings → Shipping**. |
| **The delivery price changed. Please choose a courier again.** | RajaOngkir changed the price between the quote and the order. The buyer picks the courier again. |
| **Enter the waybill number from the courier receipt.** | The waybill field is empty or has characters other than letters, numbers and `. / -`. |
| **RajaOngkir 404** when you refresh tracking | RajaOngkir does not know the waybill yet (new parcels can take hours to appear), or the courier code is not supported for tracking. Try again later. |
| Tracking never updates | RajaOngkir does not push updates. Click **Refresh tracking** on the order. |

## WhatsApp

WhatsApp sends messages from your own WhatsApp Business number through Meta's Cloud API, and Meta bills the messages to your account. Without a connection Bakasir keeps opening a WhatsApp chat link for you to send by hand. The card **WhatsApp** opens its own page, **Settings → Integrations → WhatsApp Business**.

**Prepare before you start**

- A Facebook account and a Meta business portfolio (Business Manager).
- A WhatsApp Business phone number you can receive a verification code on, and a payment method for Meta billing.
- Your business name, address and website, in case Meta asks for [business verification](https://developers.facebook.com/docs/development/release/business-verification) to raise your limits.
- Time: about 30 minutes, then Meta reviews each message template (up to 24 hours).

**Links you will need**

- Meta for Developers (apps): [developers.facebook.com/apps](https://developers.facebook.com/apps/). You must be logged in.
- Meta's setup guide: [WhatsApp Cloud API, get started](https://developers.facebook.com/docs/whatsapp/cloud-api/get-started).
- Permanent token: [Business management API, system users](https://developers.facebook.com/docs/whatsapp/business-management-api/get-started).
- App secret: [Basic settings of the app](https://developers.facebook.com/docs/development/create-an-app/app-dashboard/basic-settings).
- Message templates: [WhatsApp Manager templates](https://business.facebook.com/latest/whatsapp_manager/message_templates) and Meta's [template guide](https://developers.facebook.com/docs/whatsapp/business-management-api/message-templates).
- Webhooks: [Meta webhook fields](https://developers.facebook.com/docs/whatsapp/cloud-api/guides/set-up-webhooks).
- Prices: [WhatsApp pricing](https://developers.facebook.com/docs/whatsapp/pricing).




### Create the Meta app

In [Meta for Developers](https://developers.facebook.com/apps/) click **Create App**, enter a name and email, and choose the use case **Connect with customers through WhatsApp**. Select or create your business portfolio when asked. Then click **Start using the API** to open **API Setup**.




### Add your number and copy the IDs

In **API Setup**, connect a WhatsApp Business account, then add your real phone number from the **From** list and verify it. Add a payment method for business-initiated messages when Meta asks. Copy the **Phone number ID** of that number. The **WhatsApp Business Account ID** is optional and also shown in WhatsApp Manager.




### Create a permanent token

The temporary token on API Setup expires, so do not use it. In Meta **Business Settings** open **System users** (under **Users**) and click **Add** to create a system user. Click **Assign assets** and give it **Manage app** on your app and **Manage WhatsApp Business accounts** on your WhatsApp account. Click **Generate token** and tick `business_management`, `whatsapp_business_messaging` and `whatsapp_business_management`. Copy the token now: it is the **Access token** and Meta does not show it again.




### Copy the app secret

In your Meta app open **App settings → Basic** and click **Show** next to **App secret**. Bakasir uses it only to verify delivery status webhooks.




### Connect in Bakasir

In **Settings → Integrations** click **Connect** on **WhatsApp**. On the **WhatsApp Business** page paste the **Phone number ID**, the **WhatsApp Business Account ID** (optional), the **Access token** and the **App secret**, then click **Save** and **Test connection**. A working connection shows the number name and its quality rating. The status badge changes from **Saved, not verified yet** to **Connected**.




### Create the message templates

Meta must approve each template before it can be used, usually within 24 hours. In [WhatsApp Manager](https://business.facebook.com/latest/whatsapp_manager/message_templates) click to create a template, choose the category **Utility**, and make one template per message type with exactly this many variables, in this order. The wording can change. Suggested texts:

| Message | Suggested template name | Variables, in order | Suggested text |
| --- | --- | --- | --- |
| **Sales receipt** | `bakasir_receipt` | 1 customer name, 2 receipt number, 3 total, 4 business name, 5 receipt link | `Hello {{1}}, thank you for shopping with {{4}}. Your receipt {{2}} for {{3}} is ready: {{5}}` |
| **Purchase order** | `bakasir_purchase_order` | 1 supplier name, 2 purchase order number, 3 total, 4 business name. Add a Document header (PDF): Bakasir attaches the PDF. | `Hello {{1}}, please find purchase order {{2}} with a total of {{3}} from {{4}} attached.` |
| **Online order status** | `bakasir_order_status` | 1 buyer name, 2 order number, 3 status, 4 business name | `Hello {{1}}, your order {{2}} at {{4}} is now {{3}}.` |
| **Reservation reminder** | `bakasir_reservation_reminder` | 1 guest name, 2 date and time, 3 business name | `Hello {{1}}, this is a reminder of your reservation at {{3}} on {{2}}.` |

Variables cannot contain line breaks. Bakasir replaces them with spaces.




### Tell Bakasir which templates to use

In the **What to send** section of the Bakasir page, switch on each message type you want, enter the exact **Template name** and choose the **Template language** (`id`, `en` or `en_US`) that you used in Meta. Click **Save**. A message type that is off, or has no template name, falls back to the WhatsApp chat link.




### Send a test

In **Send a test** enter your own phone number, choose a **Message type** and click **Send**. It sends one real message using the saved template, so Meta may charge your account. Open the **Message log** (the last 100 messages) and click **Refresh** to see its status.




### Optional: delivery status webhook

To see **Sent**, **Delivered**, **Read** and **Failed** in the log, save the app secret in Bakasir first. Then in your Meta app open **WhatsApp → Configuration** (new apps: **Use cases → Customize → Configuration**). Paste the **Callback URL** and **Verify token** shown in Bakasir, click **Verify and save**, then subscribe to the `messages` field. Some webhooks are not sent while the Meta app is in Development mode, so switch the app to Live if statuses never arrive.




**What your customers and suppliers will see.** A WhatsApp message from your business number with your approved template text. **Receipt via WhatsApp** on a sale or an online order sends it directly instead of opening a chat. Online buyers also get a message when their order is placed and whenever its status changes. A purchase order goes to the supplier with the PDF attached.

**Costs.** Meta bills per delivered message, based on the template category and the recipient's country. Utility templates are charged, and each business number gets a monthly allowance of free service messages. Rates and rules change, so read [WhatsApp pricing](https://developers.facebook.com/docs/whatsapp/pricing). Bakasir adds no fee.

**Common problems**

| What you see | Cause and fix |
| --- | --- |
| **phone_number_id and access_token are required** | Save the Phone number ID and the Access token before **Test connection**. |
| **The WhatsApp access token is invalid or expired** | You used the temporary token, or the system user lost access. Generate a permanent token again and paste it. |
| **The WhatsApp template is missing, not approved, or has a different number of variables** | The template name or language does not match Meta, Meta has not approved it yet, or the variables differ from the table above. |
| **That phone number is not on WhatsApp or cannot receive this message** | Check the number includes the country code. The person may not use WhatsApp. |
| **WhatsApp only allows approved templates outside a 24 hour chat window** | The message type has no template, or it is not enabled. Fill in and enable it under **What to send**. |
| **WhatsApp is limiting your messages, try again later** | Meta is rate limiting your number. Wait and retry, and avoid sending many messages at once. |
| **Your Meta account has a payment issue, fix it in Meta Business Suite** | Add or fix the payment method in Meta Business Suite. |
| **WhatsApp is not connected or this message type is not enabled** | Connect WhatsApp, and switch the message type on. |
| **Enter the approved template name before turning this on** | A message type cannot be on without a template name. |
| **WhatsApp Cloud API is unreachable, try again later** | A temporary problem on Meta's side. Retry later. |
| Delivery statuses never change from **Sent** | The webhook is not set. Do the optional webhook step and subscribe to `messages`. |

## SMTP

SMTP stores the login of your own mail server, so the email your business sends comes from your own sender address instead of Bakasir's.

**What goes through it.** Receipts for sales and online orders, payslips, scheduled report emails, purchase orders to suppliers and booking confirmations and reminders to your customers. Bakasir's own email to you (billing, renewal and payment notices, security alerts, verification and password reset) always goes through Bakasir and never through this server.

**Plan.** Own SMTP is a plan feature (included in Tumbuh and Enterprise unless your plan says otherwise). On a plan without it you can still fill in the card and use **Send Test**, but your business email keeps going through Bakasir and the card shows a reminder to upgrade.

**When it is used.** Only when your plan includes it and the card has a **Host**, a valid **Port** and a **Sender Email**. The **Sender Name** and **Sender Email** you enter are shown to your customers, and their replies go to that address. Without a Sender Name, your business name is used.

**If it fails.** When your server rejects a message (wrong password, unverified sender, server down), Bakasir does not send that message through its own mail server instead, so your customers never see a sender you did not choose. You see the error where you clicked, and the owner gets a notification **Email not sent through your SMTP**, at most once every six hours. Fix the card, or clear the **Host** to go back to Bakasir's mail server.

**Prepare before you start**

- An account at an email provider, or the SMTP details of your own server.
- A sender address or domain you have verified with that provider. Providers reject mail from an unverified sender.
- Time: about 10 minutes.

**Provider guide.** Bakasir fills in the host, port and encryption when you pick a provider.

| Provider | Host and port | Username | Password | Links |
| --- | --- | --- | --- | --- |
| **Brevo** | `smtp-relay.brevo.com`, 587, STARTTLS | The SMTP login shown on the SMTP tab | An **SMTP key** (not an API key) | [Sign up](https://app.brevo.com/account/register), [SMTP & API settings](https://app.brevo.com/settings/keys/smtp), [Brevo SMTP guide](https://developers.brevo.com/docs/smtp-integration), [pricing](https://www.brevo.com/pricing/) |
| **SendGrid** | `smtp.sendgrid.net`, 587, STARTTLS | `apikey` | A SendGrid API key with **Mail Send** permission | [Sign up](https://signup.sendgrid.com/), [API keys](https://app.sendgrid.com/settings/api_keys), [SMTP guide](https://www.twilio.com/docs/sendgrid/for-developers/sending-email/getting-started-smtp), [verify a sender](https://www.twilio.com/docs/sendgrid/ui/sending-email/sender-verification), [pricing](https://www.twilio.com/en-us/sendgrid) |
| **Gmail** | `smtp.gmail.com`, 587, STARTTLS | Your full Gmail address | A Google **app password** | [Turn on 2-Step Verification](https://support.google.com/accounts/answer/185839), [create an app password](https://support.google.com/accounts/answer/185833), [app passwords page](https://myaccount.google.com/apppasswords), [Gmail SMTP limits](https://knowledge.workspace.google.com/admin/gmail/send-email-from-a-printer-scanner-or-app) |
| **Mailtrap** | `live.smtp.mailtrap.io`, 587, STARTTLS | `api` | An API token of your sending domain | [Sign up](https://mailtrap.io/register/signup), [SMTP integration](https://docs.mailtrap.io/email-api-smtp/setup/smtp-integration), [verify a sending domain](https://docs.mailtrap.io/email-api-smtp/setup/sending-domain), [pricing](https://mailtrap.io/pricing) |
| **Postmark** | `smtp.postmarkapp.com`, 587, STARTTLS | The **Server API Token** | The same **Server API Token** | [Sign up](https://account.postmarkapp.com/sign_up), [SMTP guide](https://postmarkapp.com/developer/user-guide/send-email-with-smtp), [sender signatures](https://postmarkapp.com/developer/user-guide/managing-your-account/managing-sender-signatures), [pricing](https://postmarkapp.com/pricing) |
| **Custom server** | Your host, and a port from 25, 465, 587 or 2525 | From your provider | From your provider | Ask your hosting provider |




### Create SMTP credentials

Follow the row of your provider in the table. In short: Brevo, open **SMTP & API → SMTP** and generate an SMTP key. SendGrid, open **Settings → API Keys** and create a key with Mail Send permission. Gmail, turn on 2-Step Verification, then create an app password (Google may hide the option on work or school accounts). Mailtrap, open **Sending Setup** (API/SMTP), pick your verified domain and the **Transactional** stream, switch to **SMTP**, and copy the API token. Postmark, copy the Server API Token from the server's message stream **Settings**, and make sure SMTP access is enabled on the server.




### Verify your sender

Add and verify the address or domain you will send from: SendGrid **Settings → Sender Authentication**, Mailtrap **Domains → Add Domain** (add the DNS records it shows), Postmark a sender signature or domain, Brevo a sender in your account. Without this, the test fails at the provider.




### Pick the provider in Bakasir

In **Settings → Integrations** click **Connect** on **SMTP / Email** and choose your provider in **SMTP Provider** (Brevo, SendGrid, Gmail, Mailtrap, Postmark or **Custom server**). **SMTP Host**, **Port** and **Encryption** fill in for you. Match the port: **STARTTLS (587)** or **SSL/TLS (465)**.




### Fill the login and sender

Enter the **Username** and **Password**, then **Sender Name** and **Sender Email**. The sender must be an address or domain you verified with your provider.




### Send a test

Click **Send Test**. Bakasir saves the values and sends one real email to your account email. Check your inbox (and spam), then click **Save**. The card shows **Connected**.




**Costs.** Free plans exist at some providers, for example Mailtrap (4,000 emails a month, 150 a day) and Postmark (100 a month) at the time of writing. See each provider's pricing page in the table.

**Common problems**

| What you see | Cause and fix |
| --- | --- |
| **port 123 is not an SMTP port: use 25, 465, 587 or 2525** | Use one of these ports. Use 587 with STARTTLS, or 465 with SSL/TLS. |
| **cannot resolve smtp host** or **resolves to a non-public address** | The host name is wrong, or it points to a private address, which Bakasir cloud does not allow. |
| **your account has no email address to send the test to** | Add an email to your profile first. |
| **host is required** or **from_email is required** | Fill in the SMTP Host and the Sender Email. |
| Receipts or reports still come from Bakasir | Your plan does not include own SMTP, or the card has no Host, Port or Sender Email yet. The card shows a plan reminder when the plan is the cause. |
| The test fails at the provider (a message from the provider's server) | The username, password or sender is not accepted. Verify the sender in the provider dashboard, and check you used an SMTP key (Brevo) or app password (Gmail), not your normal password. |
| Gmail refuses the login | 2-Step Verification must be on and you must use an app password. |

## Twilio

Twilio stores and checks your Twilio API key. Bakasir does not send SMS yet, so no feature uses it today. You can connect it now so it is ready.

**Prepare before you start**

- A Twilio account. Time: about 10 minutes.

**Links you will need**

- Sign up: [twilio.com/try-twilio](https://www.twilio.com/try-twilio). Console: [console.twilio.com](https://console.twilio.com/).
- Twilio guides: [API keys overview](https://www.twilio.com/docs/iam/api-keys) and [create an API key in the Console](https://www.twilio.com/docs/iam/api-keys/keys-in-console).
- Prices: [SMS pricing for Indonesia](https://www.twilio.com/en-us/sms/pricing/id).




### Create an API key

In the [Twilio Console](https://console.twilio.com/) open **Settings → Account settings → API keys & auth tokens** (older consoles: **Account → API keys & tokens**) and click **Create API key**. Give it a name and choose the **Standard** type.




### Copy the values

Copy the **SID** (it starts with `SK`, and is not your Account SID) into **API Key**, and the **Secret** into **API Secret**. Twilio shows the secret only once: copy it before you close the window.




### Test and save

Click **Test Connection**, then **Save**.




**Common problems**

| What you see | Cause and fix |
| --- | --- |
| **api_key is required** or **api_secret is required** | Fill in both fields before **Test Connection**. |
| An error starting with **401** | The SID or the secret is wrong. Use the key SID that starts with `SK` (not the Account SID), and copy the secret again. If you lost it, create a new key. |

## Tips

- **Test in Sandbox first.** Make a test order from your store and pay it with the provider's simulator before you use Production keys.
- **One gateway at a time.** Customers pay through the active gateway only.
- **Production needs its own setup.** Keys, notification URLs and webhooks are separate in Sandbox and Production. Repeat every step in Production.
- **Keep keys private.** Never share server keys or tokens, including with Bakasir support.
- **Rotating a key.** If a key leaks, create a new one at the provider, paste it in Bakasir and delete the old one at the provider.

## Next steps

- [Plugins and Marketplace](https://docs.bakasir.com/en/docs/commerce/extensions.md)
- [Plugin catalog](https://docs.bakasir.com/en/docs/commerce/plugins.md)
- [Set up your online store](https://docs.bakasir.com/en/docs/commerce/store-setup.md)
- [Handle online orders](https://docs.bakasir.com/en/docs/commerce/orders.md)
- [Settings overview](https://docs.bakasir.com/en/docs/portal/settings.md)
